本文档风哥主要介绍Oracle数据库PDB TNS配置相关知识,包括PDB TNS配置的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PDB TNS配置的概念
Oracle数据库PDB TNS配置是指在多租户容器数据库(CDB)中对PDB级别的TNS(Transparent Network Substrate)进行配置和管理,包括TNS别名配置、连接描述符配置、服务配置等。PDB TNS配置可以实现PDB级别的网络连接管理,提高系统可用性。PDB TNS配置包括TNS别名配置、连接描述符配置、服务配置、TNS监控、TNS调优等组件。更多视频教程www.fgedu.net.cn
- 支持PDB级别的TNS配置
- 支持TNS别名配置
- 支持连接描述符配置
- 支持服务配置
- 提高系统可用性
1.2 PDB TNS配置的方法
Oracle数据库PDB TNS配置的方法:
- TNS别名配置:配置PDB TNS别名
- 连接描述符配置:配置PDB连接描述符
- 服务配置:配置PDB服务
- TNS监控:监控PDB TNS
- TNS调优:调优PDB TNS
1.3 PDB TNS配置的要求
Oracle数据库PDB TNS配置的要求:
- PDB架构:必须在PDB架构中配置TNS
- 系统资源:足够的CPU、内存和磁盘空间
- 权限:需要PDB的SYSDBA权限
- 兼容性:Oracle数据库版本必须支持PDB TNS配置
- 配置:需要配置适当的参数和选项
Part02-生产环境规划与建议
2.1 PDB TNS配置规划
Oracle数据库PDB TNS配置规划要点:
1. 分析业务需求
2. 评估系统资源
3. 设计PDB TNS配置方案
4. 规划PDB TNS配置架构
5. 规划TNS别名配置策略
6. 规划服务配置策略
7. 测试和验证
# 适用场景
– 多租户数据库
– 需要PDB级别TNS配置的系统
– 需要TNS别名配置的系统
– 需要服务配置的系统
– 需要提高可用性的系统
# 不适用场景
– 单租户数据库
– PDB TNS配置需求简单的系统
– 低管理需求系统
2.2 PDB TNS配置设计
Oracle数据库PDB TNS配置设计建议:
– 基于业务需求设计
– 基于资源需求设计
– 最小化TNS开销
– 最大化系统可用性
– 合理配置参数
# PDB TNS配置设计策略
– 合理规划PDB TNS配置架构
– 配置适当的TNS别名配置
– 配置适当的连接描述符配置
– 配置适当的服务配置
– 配置适当的TNS监控
# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计PDB TNS配置方案
4. 规划PDB TNS配置架构
5. 测试PDB TNS配置效果
6. 调整配置
2.3 PDB TNS配置最佳实践
Oracle数据库PDB TNS配置最佳实践:
- 规划PDB TNS配置架构:根据业务需求规划PDB TNS配置架构,最小化TNS开销
- 配置TNS别名配置:为PDB配置合理的TNS别名配置
- 监控TNS运行:监控PDB TNS运行,及时发现和处理问题
- 定期调优:定期调优PDB TNS,确保系统性能
- 设置TNS告警:设置TNS告警,及时发现TNS问题
- 定期review:定期review TNS配置,优化管理策略
Part03-生产环境项目实施方案
3.1 PDB TNS配置实施
3.1.1 查看PDB TNS配置
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 查看TNS配置文件
$ cat /oracle/app/oracle/product/19c/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /oracle/app/oracle/product/19c/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCLCDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclcdb)
)
)
SALESPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = fgfgfgsalespdb)
)
)
HRPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = hrpdb)
)
)
# 验证PDB TNS配置查看成功
3.1.2 配置PDB TNS别名
$ vi /oracle/app/oracle/product/19c/network/admin/tnsnames.ora
# 添加PDB TNS别名
SALES_APP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SALES_APP)
)
)
HR_APP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = HR_APP)
)
)
# 配置负载均衡
SALES_APP_LB =
(DESCRIPTION =
(LOAD_BALANCE = ON)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-node1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-node2)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-node3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SALES_APP)
)
)
# 验证PDB TNS别名配置成功
3.2 PDB TNS配置配置
3.2.1 配置连接描述符
$ vi /oracle/app/oracle/product/19c/network/admin/tnsnames.ora
# 配置连接描述符
SALES_APP_DEDICATED =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SALES_APP)
)
)
SALES_APP_SHARED =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = SALES_APP)
)
)
SALES_APP_POOLED =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = POOLED)
(SERVICE_NAME = SALES_APP)
)
)
# 验证连接描述符配置成功
3.2.2 配置SQLNET参数
$ vi /oracle/app/oracle/product/19c/network/admin/sqlnet.ora
# 配置SQLNET参数
SQLNET.AUTHENTICATION_SERVICES = (NTS)
SQLNET.EXPIRE_TIME = 10
SQLNET.INBOUND_CONNECT_TIMEOUT = 120
SQLNET.SEND_TIMEOUT = 120
SQLNET.RECV_TIMEOUT = 120
SQLNET.OUTBOUND_CONNECT_TIMEOUT = 120
SQLNET.READ_TIMEOUT = 120
SQLNET.WRITETIMEOUT = 120
# 配置TNS解析
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
# 配置日志
TRACE_LEVEL_CLIENT = OFF
TRACE_LEVEL_SERVER = OFF
LOG_DIRECTORY_CLIENT = /oracle/app/oracle/diag/tnslsnr/orcl-scan/listener/trace
LOG_DIRECTORY_SERVER = /oracle/app/oracle/diag/tnslsnr/orcl-scan/listener/trace
# 验证SQLNET参数配置成功
3.3 PDB TNS配置验证
3.3.1 验证TNS别名
$ tnsping SALES_APP
TNS Ping Utility for Linux: Version 19.0.0.0.0 – Production on 31-MAR-2026 10:00:00
Copyright (c) 1997, 2024, Oracle. All rights reserved.
Used parameter files:
/oracle/app/oracle/product/19c/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SALES_APP)))
OK (10 msec)
$ tnsping HR_APP
TNS Ping Utility for Linux: Version 19.0.0.0.0 – Production on 31-MAR-2026 10:00:00
Copyright (c) 1997, 2024, Oracle. All rights reserved.
Used parameter files:
/oracle/app/oracle/product/19c/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = HR_APP)))
OK (10 msec)
# 验证TNS别名成功
3.3.2 验证数据库连接
$ sqlplus sys/oracle@SALES_APP AS SYSDBA
SQL*Plus: Release 19.0.0.0.0 – Production on Mon Mar 31 10:00:00 2026
Version 19.24.0.0.0
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.24.0.0.0
SQL> SHOW CON_NAME
CON_NAME
——————————
SALESPDB
SQL> SELECT name, status
FROM dba_services
WHERE name = ‘SALES_APP’
AND con_id = 3;
NAME STATUS
————- ——–
SALES_APP ACTIVE
SQL> EXIT
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.24.0.0.0
# 验证数据库连接成功
Part04-生产案例与实战讲解
4.1 PDB TNS配置案例
在某企业的生产环境中,需要配置PDB TNS配置。
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:配置PDB TNS配置
# 实施方案
1. 查看PDB
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
2. 编辑TNS配置文件
$ vi /oracle/app/oracle/product/19c/network/admin/tnsnames.ora
3. 添加PDB TNS别名
SALES_APP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SALES_APP)
)
)
4. 测试TNS别名
$ tnsping SALES_APP
TNS Ping Utility for Linux: Version 19.0.0.0.0 – Production on 31-MAR-2026 10:00:00
Copyright (c) 1997, 2024, Oracle. All rights reserved.
Used parameter files:
/oracle/app/oracle/product/19c/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SALES_APP)))
OK (10 msec)
5. 测试数据库连接
$ sqlplus sys/oracle@SALES_APP AS SYSDBA
SQL*Plus: Release 19.0.0.0.0 – Production on Mon Mar 31 10:00:00 2026
Version 19.24.0.0.0
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.24.0.0.0
# 实施效果
– 成功配置PDB TNS配置
– TNS别名配置正常
– 连接描述符配置正常
– 数据库连接正常
– 系统可用性提高
4.2 PDB TNS配置优化案例
在某金融机构的生产环境中,需要优化PDB TNS配置,提高网络性能。
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:PDB TNS配置需要优化
# 优化方案
1. 查看TNS配置
$ cat /oracle/app/oracle/product/19c/network/admin/tnsnames.ora
SALES_APP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SALES_APP)
)
)
2. 优化TNS配置
$ vi /oracle/app/oracle/product/19c/network/admin/tnsnames.ora
SALES_APP_LB =
(DESCRIPTION =
(LOAD_BALANCE = ON)
(FAILOVER = ON)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-node1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-node2)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-node3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SALES_APP)
(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5))
)
)
3. 优化SQLNET参数
$ vi /oracle/app/oracle/product/19c/network/admin/sqlnet.ora
SQLNET.EXPIRE_TIME = 10
SQLNET.INBOUND_CONNECT_TIMEOUT = 120
SQLNET.SEND_TIMEOUT = 120
SQLNET.RECV_TIMEOUT = 120
SQLNET.OUTBOUND_CONNECT_TIMEOUT = 120
SQLNET.READ_TIMEOUT = 120
SQLNET.WRITETIMEOUT = 120
4. 验证优化效果
$ tnsping SALES_APP_LB
TNS Ping Utility for Linux: Version 19.0.0.0.0 – Production on 31-MAR-2026 10:00:00
Copyright (c) 1997, 2024, Oracle. All rights reserved.
Used parameter files:
/oracle/app/oracle/product/19c/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (LOAD_BALANCE = ON) (FAILOVER = ON) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl-node1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = orcl-node2)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = orcl-node3)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SALES_APP) (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5))))
OK (10 msec)
# 优化效果
– TNS配置优化
– 负载均衡配置
– 故障转移配置
– SQLNET参数优化
– 网络性能提高
4.3 PDB TNS配置问题处理
在某电商网站的生产环境中,PDB TNS配置出现问题,需要处理。
– PDB TNS连接失败
– TNS别名解析失败
– 数据库连接超时
# 分析步骤
1. 测试TNS别名
$ tnsping SALES_APP
TNS Ping Utility for Linux: Version 19.0.0.0.0 – Production on 31-MAR-2026 10:00:00
Copyright (c) 1997, 2024, Oracle. All rights reserved.
Used parameter files:
/oracle/app/oracle/product/19c/network/admin/sqlnet.ora
TNS-12154: TNS:could not resolve the connect identifier specified
2. 查看TNS配置文件
$ cat /oracle/app/oracle/product/19c/network/admin/tnsnames.ora
ORCLCDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclcdb)
)
)
3. 查看SQLNET配置
$ cat /oracle/app/oracle/product/19c/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (NTS)
# 问题原因
– TNS别名未配置
– TNS配置文件错误
– SQLNET配置错误
# 解决方案
1. 添加TNS别名
$ vi /oracle/app/oracle/product/19c/network/admin/tnsnames.ora
SALES_APP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SALES_APP)
)
)
2. 修改SQLNET配置
$ vi /oracle/app/oracle/product/19c/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
3. 验证解决效果
$ tnsping SALES_APP
TNS Ping Utility for Linux: Version 19.0.0.0.0 – Production on 31-MAR-2026 10:00:00
Copyright (c) 1997, 2024, Oracle. All rights reserved.
Used parameter files:
/oracle/app/oracle/product/19c/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SALES_APP)))
OK (10 msec)
# 解决效果
– TNS别名配置成功
– TNS配置文件修复
– SQLNET配置修复
– TNS连接正常
– 系统性能恢复
Part05-风哥经验总结与分享
5.1 PDB TNS配置经验
Oracle数据库PDB TNS配置经验:
- 规划PDB TNS配置架构:根据业务需求规划PDB TNS配置架构,最小化TNS开销
- 配置TNS别名配置:为PDB配置合理的TNS别名配置
- 监控TNS运行:监控PDB TNS运行,及时发现和处理问题
- 定期调优:定期调优PDB TNS,确保系统性能
- 设置TNS告警:设置TNS告警,及时发现TNS问题
- 定期review:定期review TNS配置,优化管理策略
5.2 PDB TNS配置检查清单
– [ ] 检查系统资源
– [ ] 检查PDB架构
– [ ] 检查TNS需求
– [ ] 检查TNS配置
– [ ] 检查TNS别名配置
– [ ] 检查SQLNET配置
– [ ] 规划PDB TNS配置架构
– [ ] 配置TNS别名
– [ ] 配置连接描述符
– [ ] 验证TNS功能
# PDB TNS配置问题处理流程
1. 检查系统资源
2. 检查PDB架构
3. 检查TNS需求
4. 规划PDB TNS配置架构
5. 配置TNS别名
6. 配置连接描述符
7. 验证TNS功能
8. 处理TNS问题
9. 优化配置
10. 监控TNS使用情况
5.3 PDB TNS配置工具
Oracle数据库PDB TNS配置常用工具:
- SQL*Plus:SQL命令行工具,用于执行SQL命令
- Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
- SQL Developer:SQL开发工具,用于开发和调试SQL
- TNSPING:TNS测试工具,用于测试TNS连接
- Net Configuration Assistant:网络配置助手,用于配置网络
- Net Manager:网络管理器,用于管理网络配置
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
