学无止境
分类: Oracle
2013-08-19 14:28:22
网络配置文件有:
1.概要文件sqlnet.ora
2.监听文件listener.ora
3.本地命名参数文件tnsnames.ora
4.连接管理参数文件cman.ora
5.目录服务器文件ldap.ora
常用的是前3种。
概要文件sqlnet.ora
sqlnet.ora的配置有多种作用,如trace,认证服务,黑白名单等。sqlnet.ora的配置没有特定格式要求,需要的配置项,逐条增加即可,但最好是一个配置参数只有一行,比如配置白名单时,一行可能很长,确保是一行内容。
以下是其中配置的一些重要参数说明:
参数 | 用途 | 默认值及取值范围 | 示例 |
BEQUEATH_DETACH | 控制是否打开unix系统中信号处理(signal handling) |
默认值为no。 yes表示关闭 no表示打开 |
BEQUEATH_DETACH=yes |
DEFAULT_SDU_SIZE |
指定session data unit (SDU) 的大小,单位是bytes 建议在client端和server端都设置这个参数 确保链接的时候使用相同的SDU size 如果client端和server端配置的值不匹配会使用较小的 |
默认值:2048 bytes (2 KB) 取值范围:512 to 32768 bytes (32 KB) |
DEFAULT_SDU_SIZE=4096 |
DISABLE_OOB |
如果设置为off,该参数允许ORACLE Net使用底层协议 提供的紧急数据发送和接收“break”消息。 设置为on则不允许。 |
默认off 取值on/off |
DISABLE_OOB=on |
LOG_DIRECTORY_CLIENT | 指定客户端log日志文件的位置 | 无 | LOG_DIRECTORY_CLIENT=/oracle/network/log |
LOG_DIRECTORY_SERVER | 指定server端log日志文件的位置 | 无 | LOG_DIRECTORY_SERVER=/oracle/network/log |
LOG_FILE_CLIENT | 指定客户端log文件名 | sqlnet.log | LOG_FILE_CLIENT=client |
LOG_FILE_SERVER | 指定server端log文件名 | sqlnet.log | LOG_FILE_SERVER=svr.log |
NAMES.DCE.PREFIX | 指定分布式计算环境(DCE)的单元名称,用于名称查找。 | /.:/subsys/oracle/names | NAMES.DCE.PREFIX=/.:/subsys/oracle/names |
NAMES.DEFAULT_DOMAIN | 设定客户端解析名字的域,连接名会自动增加域名 | 无 | NAMES.DEFAULT_DOMAIN=acme.com |
NAMES.DIRECTORY_PATH | 指定client name解析方法的次序。 |
NAMES.DIRECTORY_PATH=(tnsnames,onames, hostname) 有以下取值: tnsnames:本地命名方法, 通过客户端tnsnames.ora的配置 onames:通过oracle名称服务器获得数据库服务名 ldap:通过目录服务器获得服务名。 ezconnect或hostname: 客户端使用TCP/IP连接标识, 包含主机名,端口号,服务名。 cds:用于获得分布式环境中的数据库名。 nis:网络信息服务,通过NIS获得服务信息。 |
NAMES.DIRECTORY_PATH=(tnsnames,onames) |
RECV_BUF_SIZE |
指定操作会话接收缓冲区的大小, 适用于TCP/IP,SSL,SDP协议 |
操作系统决定 | RECV_BUF_SIZE=11784 |
SEND_BUF_SIZE |
指定操作会话发送缓冲区的大小, 适用于TCP/IP,SSL,SDP协议 |
操作系统决定 | SEND_BUF_SIZE=11784 |
SQLNET.AUTHENTICATION_SERVICES |
指定启动一个或多个认证服务, 推荐设置为none或指定1个认证服务。 |
默认值是:none none表示没有认证方法, 有效的用户名和密码可以访问数据库 all用于所有认证方法。 nts用于windows nt认证。 |
SQLNET.AUTHENTICATION_SERVICES = (NTS) |
SQLNET.INBOUND_CONNECT_TIMEOUT |
指定客户端没有链接成功超时的时间。 超时之后oracle会中断链接,同时报错。 |
60秒 | SQLNET.INBOUND_CONNECT_TIMEOUT=3 |
TCP.EXCLUDED_NODES |
指定不允许访问oracle的节点, 可以使用主机名或者IP地址。黑名单。 |
语法:TCP.EXCLUDED_NODES=(hostname | ip_address, hostname | ip_address, ...) |
TCP.EXCLUDED_NODES=(finance.us.acme.com, mktg.us.acme.com, 144.25.5.25) |
TCP.INVITED_NODES |
指定允许访问db的客户端, 他的优先级比TCP.EXCLUDED_NODES高。 白名单。 |
语法:TCP.INVITED_NODES=(hostname | ip_address, hostname | ip_address, ...) |
TCP.INVITED_NODES=(sales.us.acme.com, hr.us.acme.com, 144.185.5.73) |
TCP.VALIDNODE_CHECKING | 使用这个参数来启用黑白名单。 | 默认是no | TCP.VALIDNODE_CHECKING=yes |
TNSPING.TRACE_DIRECTORY | 使用这个参数指定tnsping trace文件的目录 | 默认是$ORACLE_HOME/network/trace目录 | TNSPING.TRACE_DIRECTORY=/oracle/traces |
TNSPING.TRACE_LEVEL | 设置tnsping的trace级别 |
默认off 取值: off,没有trace user,用于用户trace信息 admin,用于管理员trace信息 support,用于oss的trace信息。 |
TNSPING.TRACE_LEVEL=admin |
TRACE_DIRECTORY_CLIENT | 指定客户端trace文件目录 | 无 | TRACE_DIRECTORY_CLIENT=/oracle/traces |
TRACE_DIRECTORY_SERVER | 指定服务端trace文件目录 | 无 | TRACE_DIRECTORY_SERVER=/oracle/traces |
TRACE_FILE_CLIENT | 指定客户端trace文件名 | sqlnet.trc | TRACE_FILE_CLIENT=clientsqlnet.trc |
TRACE_FILE_SERVER | 指定服务端trace文件名 | svr_pid.trc | TRACE_FILE_SERVER=svrsqlnet.trc |
TRACE_LEVEL_CLIENT | 设置客户端的trace级别 |
默认off 取值: off,没有trace user,用于用户trace信息 admin,用于管理员trace信息 support,用于oss的trace信息。 |
TRACE_LEVEL_CLIENT=user |
TRACE_LEVEL_SERVER | 设置服务端的trace级别 |
默认off 取值: off,没有trace user,用于用户trace信息 admin,用于管理员trace信息 support,用于oss的trace信息。 |
TRACE_LEVEL_SERVER=admin |
监听文件listener.ora
监听文件的配置可以通过netca配置,或手动编辑,手动编辑需要注意其中有一定的格式要求。一个$ORACLE_HOME/network/admin下面只有1个listener.ora,如果配置多个监听也是在这一个文件中编辑。
一个常见的监听文件例子:
LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=sale-server)(PORT=1521))
(ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=sales.us.acme.com)
(ORACLE_HOME=/oracle10g)
(SID_NAME=sales))
(SID_DESC=
(SID_NAME=plsextproc)
(ORACLE_HOME=/oracle10g)
(PROGRAM=extproc)))
*配置TAF,有一个值得注意的地方,如果要使用TAF,不要在监听文件listener.ora的SID_LIST_listener_name部分配置GLOBAL_DBNAME,静态地配置全局数据库名会禁用TAF。
监听参数配置主要有3部分:协议地址部分、静态服务注册部分、控制参数
协议地址
这部分既是配置LISTENER =后面的内容,LISTENER是监听名。
参数 | 用途 | 默认值及取值范围 | 示例 |
DESCRIPTION | 使用该参数包含监听协议地址描述 | 无 | 见前面 |
ADDRESS | 一个ADDRESS包含一个协议地址,包含在DESCRIPTION中 | 无 | 见前面 |
QUEUESIZE | 指定了监听可以处理的并发连接请求的最大数量 |
solairs是5, windows nt server是50 |
(ADDRESS=(PROTOCOL=tcp)(HOST=hr-server)(PORT=1521)(QUEUESIZE=20)) |
RECV_BUF_SIZE |
设置接收缓冲区的大小, 该参数要么跟在DESCRIPTION后面, 要么放在ADDRESS内容的最后面。 |
默认32K |
listener_name= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521) (RECV_BUF_SIZE=11784)) (ADDRESS=(PROTOCOL=ipc)(KEY=extproc) (RECV_BUF_SIZE=11784))) listener_name= (DESCRIPTION= (RECV_BUF_SIZE=11784)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521) (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))) |
SEND_BUF_SIZE |
设置发送缓冲区的大小, 该参数要么跟在DESCRIPTION后面, 要么放在ADDRESS内容的最后面。 |
默认8K |
listener_name= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521) (SEND_BUF_SIZE=11280)) (ADDRESS=(PROTOCOL=ipc)(KEY=extproc) (SEND_BUF_SIZE=11280)))) listener_name= (DESCRIPTION= (ADDRESS_LIST= (SEND_BUF_SIZE=11280)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521) (ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))) |
静态服务注册
这部分内容主要是配置SID_LIST_listener_name =后面的内容,listener_name对应前面配置的监听名。
SID_LIST,SID描述符的列表,后面包含多个SID_DESC
SID_DESC描述数据库实例服务信息,或非数据库服务,跟在SID_LIST之后。
参数 | 用途 | 默认值及取值范围 | 示例 |
ENVS | 该参数指定环境变量用于监听执行独占服务程序或者PROGRAM参数指定的程序。 |
(ENVS="variable=value,variable=value"), 变量和值不能包含逗号,双引号,单引号,等号。 |
(ENVS="LD_LIBRARY_PATH=/oracle/10g/lib:/oracle/10g/ctx/lib") |
GLOBAL_DBNAME | 指定数据库的全局名,用来标识数据库服务 | 无 | (GLOBAL_DBNAME=sales.us.acme.com) |
ORACLE_HOME | 指定ORACLE_HOME目录 | 无 | (ORACLE_HOME=/usr/oracle) |
PROGRAM | 标识服务的可执行程序的名称。 | 无 | (PROGRAM=extproc) |
SID_NAME | 指定实例的SID | 无 | (SID_NAME=sales) |
SDU | 指定SDU大小,传输数据包的大小。 |
默认值:2K 取值范围:512 bytes to 32768 (32 KB) |
(SDU=2085) |
控制参数
以下列出一些常用的控制参数。
参数 | 用途 | 默认值及取值范围 | 示例 |
INBOUND_CONNECT_TIMEOUT_listener_name |
指定了在网络连接建立以后,客户端完成连接请求的时间,单位是秒。 |
默认60秒 | INBOUND_CONNECT_TIMEOUT_listener=2 |
LOG_DIRECTORY_listener_name | 指定了监听日志的目录 | 无 | LOG_DIRECTORY_listener=/oracle/network/admin/log |
LOG_FILE_listener_name | 指定监听文件名 | listener.log | LOG_FILE_listener=list.log |
LOGGING_listener_name | 是否记录日志。 |
默认是on on/off |
LOGGING_listener=on |
PASSWORDS_listener_name |
储存加密的监听密码。该部分不通奸手动编辑明文密码, 该由命令设置监听密码后自动加密添加。 |
无 | LOGGING_listener=on |
SAVE_CONFIG_ON_STOP_listener_name |
该参数设置,在监听启动时用set命令修改的内容, 是否在监听STOP后写入listener.ora文件中 |
默认false 取值:true|false |
SAVE_CONFIG_ON_STOP_listener=true |
TRACE_DIRECTORY_listener_name | 指定监听的trace目录 | 无 |
TRACE_DIRECTORY_listener= /oracle/network/admin/trace |
TRACE_FILE_listener_name | 指定监听的trace文件名 | listener.trc | TRACE_FILE_listener=list.trc |
TRACE_LEVEL_listener_name | 指定监听打开的级别 |
默认off 取值: off,没有trace user,用于用户trace信息 admin,用于管理员trace信息 support,用于oss的trace信息。 |
TRACE_LEVEL_listener=admin |
本地命名参数文件tnsnames.ora
本地命名参数文件,用于配置本地命名方法,将复杂得连接描述符配置为一个本地命名,通过该tnsname连接到远程数据库。该文件的存放除了默认位置,也可以通过TNS_ADMIN环境变量指定。
一个最基本的tnsname配置,注意格式。
net_service_name=
(DESCRIPTION=
(ADDRESS=(protocol_address_information))
(CONNECT_DATA=
(SERVICE_NAME=service_name)))
配置多个连接描述符的例子:
net_service_name=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(protocol_address_information))
(ADDRESS=(protocol_address_information))
(ADDRESS=(protocol_address_information))
(CONNECT_DATA=
(SERVICE_NAME=service_name)))
(DESCRIPTION=
(ADDRESS=(protocol_address_information))
(ADDRESS=(protocol_address_information))
(ADDRESS=(protocol_address_information))
(CONNECT_DATA=
(SERVICE_NAME=service_name))))
配置多个地址的例子:
net_service_name=
(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(FAILOVER=off)
(ADDRESS=(protocol_address_information))
(ADDRESS=(protocol_address_information)))
(ADDRESS_LIST=
(LOAD_BALANCE=off)
(FAILOVER=on)
(ADDRESS=(protocol_address_information))
(ADDRESS=(protocol_address_information)))
(CONNECT_DATA=
(SERVICE_NAME=service_name)))
客户端配置负载平衡的例子:
sample2=
(DESCRIPTION=
(LOAD_BALANCE=on)
(FAILOVER=on)
(ADDRESS_LIST=
(SOURCE_ROUTE=yes)
(ADDRESS=(PROTOCOL=tcp)(HOST=host1)(PORT=1630))
(ADDRESS=(PROTOCOL=tcp)(HOST=host2)(PORT=1521)))
(ADDRESS_LIST=
(SOURCE_ROUTE=yes)
(ADDRESS=(PROTOCOL=tcp)(HOST=host3)(port=1630))
(ADDRESS=(PROTOCOL=tcp)(HOST=host4)(port=1521)))
(CONNECT_DATA=(SERVICE_NAME=sales.us.acme.com)))
其中一些参数的设置说明:
连接描述符
可以使用DESCRIPTION或DESCRIPTION_LIST
例子可以参考前面的内容。
协议地址部分
使用ADDRESS或ADDRESS_LIST,例子参考前面的内容。
可选参数列表
这部分包含以下内容:
参数 | 用途 | 默认值及取值范围 | 示例 |
FAILOVER | 启用或禁用,当连接失败时,可以切换连接到其它协议地址。 |
默认是on 取值:on | off | yes | no | true | false |
参考前面的示例 |
LOAD_BALANCE | 可以让客户端在多个地址之间的负载均衡地连接。 |
默认是on 取值:on | off | yes | no | true | false |
参考前面的示例 |
RECV_BUF_SIZE | 接收缓冲区的大小,该设置可以覆盖掉sqlnet.ora中的设置 | 无 |
可以加在ADDRESS中或DESCRIPTION的后面 (RECV_BUF_SIZE=11784) |
SDU | 设置传输数据包的大小,及SDU大小,该设置会覆盖sqlnet.ora中DEFALUT_SDU_SIZE的设置 |
默认:2048 bytes (2KB) 取值:512 bytes to 32768 (32 KB) |
net_service_name= (DESCRIPTION= (SDU=2085) (ADDRESS_LIST= ...... |
SEND_BUF_SIZE | 发送缓冲区的大小,该设置可以覆盖掉sqlnet.ora中的设置 | 无 |
可以加在ADDRESS中或DESCRIPTION的后面 (SEND_BUF_SIZE=11784) |
SOURCE_ROUTE | 该参数可以使得通过多个协议地址路由,按顺序使用协议地址,直到到达目标。 |
默认:off 取值:yes | no | on | off |
参考前面的示例 |
TYPE_OF_SERVICE | 该参数用于Rdb 数据库。 | 无 | 无 |
连接内容部分
参数 | 用途 | 默认值及取值范围 | 示例 |
FAILOVER_MODE | 设置了如果一个监听失败,切换到另一个监听的方法。具体内容在后面举例。 | 无 | 无 |
GLOBAL_NAME | 用于标识Rdb数据库,通常不用配置。 | 无 | 无 |
HS | 配置连接到异构数据库时,设置为ok | 默认none,值可设置为ok | (HS=ok) |
INSTANCE_NAME | 指定连接的数据库实例名 | 无 | (INSTANCE_NAME=sales1) |
RDB_DATABASE | 设置Rdb数据库的文件名,通常不用配置。 | 无 | 无 |
SERVER | 指定客户端的连接方式是独占还是共享 |
dedicated表示独占 shared表示共享 |
(SERVER=dedicated) |
SERVICE_NAME | 指定监听提供的服务名,比如RAC数据库设置了多个服务,客户端可以指定连接到哪个服务。 | 无 | (SERVICE_NAME=sales.us.acme.com) |
SID | 早期数据库,oracle8中,标识数据库,现在建议使用SERVICE_NAME来替代SID | 无 | (SID=sales) |
关于FAILOVER_MODE的设置,该参数下还有几个子参数:
BACKUP:
指定备用的连接tnsname,该tnsname必须也已经配置了。
TYPE:
有3项可以选择 session:设置会话的失败切换,当连接丢失,自动创建一个新的会话用于用户,但不恢复正在运行的select操作。
select:通常会设置这项类型,当连接丢失时,会保留开打的游标,继续正在运行的select操作,但这样也会造成一定的开销。
none:该项是默认值,不使用失败切换功能。
METHOD:
有2项选择 basic: 该项设置表示只有当失败切换时,才会去建立备用服务的连接。
preconnect: 预先建立连接,可以快速地进行失败切换,会消耗额外的开销。
RETRIES:
设置失败切换重试的次数,如果设置了DELAY,默认是重试5次。
DELAY:
间隔多久重试一次,如果设置了RETRIES,默认是1秒。
配置TAF,有一个值得注意的地方,如果要使用TAF,不要在监听文件listener.ora的SID_LIST_listener_name部分配置GLOBAL_DBNAME,静态地配置全局数据库名会禁用TAF。
一个负载平衡,实时失败切换的例子:
sales.us.acme.com=
(DESCRIPTION=
(LOAD_BALANCE=on)
(FAILOVER=on)
(ADDRESS=
(PROTOCOL=tcp)
(HOST=sales1-server)
(PORT=1521))
(ADDRESS=
(PROTOCOL=tcp)
(HOST=sales2-server)
(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com)
(FAILOVER_MODE=
(TYPE=select)
(METHOD=basic))))
失败切换重试的例子:
(FAILOVER_MODE=
(TYPE=select)
(METHOD=basic)
(RETRIES=20)
(DELAY=15))))
预连接的例子:
sales1.us.acme.com=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=tcp)
(HOST=sales1-server)
(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com)
(INSTANCE_NAME=sales1)
(FAILOVER_MODE=
(BACKUP=sales2.us.acme.com)
(TYPE=select)
(METHOD=preconnect))))
sales2.us.acme.com=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=tcp)
(HOST=sales2-server)
(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com)
(INSTANCE_NAME=sales2)
(FAILOVER_MODE=
(BACKUP=sales1.us.acme.com)
(TYPE=select)
(METHOD=preconnect))))
安全部分
这部分内容涉及高级安全部分,这里只放个例子:
主要是2个参数SECURITY和SSL_SERVER_CERT_DN
net_service_name=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales1-svr)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales2-svr)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com))
(SECURITY=
(SSL_SERVER_CERT_DN="cn=sales,cn=OracleContext,dc=us,dc=acme,dc=com")))