目标:能够自主处理大部分oracle客户端和服务端的网络配置问题
一、oracleNet的组成部分:
客户端:tnsnames.ora $ORACLE_HOME/ network/admin
服务器端:listener.ora $ORACLE_HOME/ network/admin
服务器端:sqlnet.ora $ORACLE_HOME/ network/admin
二、 工作原理
tnsnames.ora
监听器
sqlnet.ora
三、 配置方法
1. Tnsnames.ora
(1) 用服务名配置
ZERO2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.174.204)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zero2[F1] )
)
)
(2) 用实例名配置
db01 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.174.204)(PORT = 1521))
)
(CONNECT_DATA =
(SID = zero1[F2] )
)
)
(3) 检查工具 tnsping(只测试主机和端口)
Tnsping db01; ----db01 是tnsname
2. listener.ora
(1) 动态注册:instance_name,service_name
(2) 静态注册:配置 listener.ora 文件
以下内容注册了一个服务(位置请对照listener.ora文件)
(SID_DESC =
(GLOBAL_DBNAME = Zero2[F3] )
(ORACLE_HOME = D:/oracle/ora92)
(SID_NAME = Zero1)
)
(3) Lsnrctl 监听器管理工具的使用
运行cmd
键入lsnrctl
键入help,可以看到列出的所有命令
键入stutas,可以看到当前监听器的状态以及监听的服务的信息
其他命令还有start,stop,reload ……
键入 help reload,可以获取reload 命令的使用方法
3. sqlnet的配置
(1) 操作系统认证(只要登录主机就可以以如下方式登录数据库:sys/anypassword as sysdba)
实现方法:
1)配置sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NTS) --windows
SQLNET.AUTHENTICATION_SERVICES= (ALL) --unix
(2) 密码文件认证(必须通过oracle的密码认证才能以sysdba的角色登录)
实现方法
1)配置sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NONE)
2)设置oracle参数
用sys用户登录,发布命令:alter system set remote_login_passwordfile=EXCLUSIVE SCOPE=SPFILE;
3)创建密码文件(oracle把sysdba和sysopr角色的密码存放到该文件中):
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=pwd entries=10;
4)重启数据库
(3) Tnsname解析和主机名解析
1)Tnsname解析:把登录时提供的连接字符串当作tansname解析,登录时从tnsnames.ora文件中找到相应的数据库信息。
2)主机名解析:把登录时提供的连接字符串当作主机名解析,登录时直接找该主机上的oracle服务。
3)主机名解析的注意事项:
a. oracle 服务的端口必须为1521。
b. listener.ora文件必须配置与主机名一致的服务,例如:
(SID_DESC =
(GLOBAL_DBNAME = lenovo-282d43b3[F4] )
(ORACLE_HOME = D:/oracle/ora92)
(SID_NAME = Zero1)
)
c. 监听器名称必须为LISTENER,oracle已默认设置了。
(4) Ip的限制,见附件
四、 常见的问题
(1) 不能解析名称
在tnsnames.ora文件没有配置相应的连接字符串。
(2) Tnsping没有问题但连接时报不能解析服务名
服务名有问题,服务端没有在LISTENER.ora中配置服务名:
ZERO2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.174.204)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zero2)
)
)
(3) 没有监听器
1)监听器的监听的主机或端口有误:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = lenovo-282d43b3)(PORT = 1521))
)
)
)
2)tansname文件的端口配置错误。
ZERO2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.174.204)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zero2)
)
)
(4) 找不到主机
tansname文件的主机配置错误
ZERO2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.174.204)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zero2)
)
)
(5) 忘记了sys密码怎么办(orapwd)
方法一,修改密码
以其他用户登录修改sys的密码:alter user sys identified by lin;
方法二,操作系统认证
1)配置sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NTS) --windows
SQLNET.AUTHENTICATION_SERVICES= (ALL) --unix
2)登录主机,以任意密码登录数据库
方法三,如果以上方法都不能用只能用orapwd工具了
1)登录主机发布如下命令:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=pwd entries=10 force=y; ----unix
orapwd file=%ORACLE_HOME%/database/pwd%ORACLE_SID%.ora password=pwd entries=10 force=y; ----windows
说明:
a. $ORACLE_HOME 是数据库主目录,可以用具体的目录代替
b. $ORACLE_SID 是数据库实例名,可以用具体的实例名代替
c. 如果不支持force=y,则必须先手动删除原有的pwd$ORACLE_SID.ora文件。
d. 配置完成后,登录时报 ORA-01031: insufficient privileges,则需要重启数据库。
[F1]与监听器的GLOBAL_DBNAME或DBNAME对应
[F2]与数据库的instance_name 对应
[F3]Tnsnames.ora文件中的SERVICE_NAME使用
[F4]主机名