当前位置:首页 >> IT/计算机 >>

讲解Oracle数据库TNS常见错误的解决方法

讲解 Oracle 数据库 TNS 常见错误的解决方法
育龙网 WWW.CHINA-B.C0M 2009 年 08 月 13 日 来源:互联网

育龙网核心提示: 1、ORA-12541:TNS:没有监听器 原因:没有启动监听器或者 监听器损坏。若是前者,使用命令 net start OracleOraHome10gTNSListener 即可;
1、ORA-12541:TNS:没有监听器 因:没有启动监听器或者监听器损坏。若是前者,使用命令 net start OracleOraHome10gTNSListener 即可;如果是后者,则使用“Net Configuration Assistant”工具向导之“监听程序配置”增加一个监听器即可 2、ORA-12500:TNS:监听程序无法启动专用进程或 ORA-12560:TNS:协议适配器错误 因:ORACLE 的服务没有启动。使用命令 net start ORACLESERVICEORADB 即可。如果仍 没有解决,请继续向下看。 3、如果数据库服务启动失败,则很有可能是其项值损坏,最好的做法是以下两步: 1)ORADIM -DELETE -SID oradb 删除数据库服务项 2)ORADIM -NEW -SID oradb 新增数据库服务项 注:这个过程中如果出错,就重启计算机! 4、ORA-12154:TNS:能解析服务名 因:ORACLE 的网络服务名没有正确配置。请使用“Net8 Configuration Assistant”工 具向导之“本地网络服务名配置”配置 TNS 即可。如果仍没有解决,请继续向下看。 5、ORA-1034 :TNS:ORACLE 不可用 因:ORACLE 的数据库服务正确启动,但是数据库没有打开! 使用命令: 1)svrmgrl 启动服务管理器

2)connect internal 以 internal 身份登陆 3)startup 打开数据库 6、ORA-12560:TNS:协议适配器错误 因:未知。 解决:必杀技打开“Windows 任务管理器”,杀死 ORACLE.exe 及 ORADIM.exe 进程,书 写自己的 ora_startup.bat,执行之! PS: 1、ora_startup.bat: net start OracleOraHome81TNSListener net start ORACLESERVICEORADB svrmgrl 一般情况下不用,不过有时少不了它的,具体步骤见第 5 步。 2、ora_shutdown.bat: net stop OracleOraHome81TNSListener net stop ORACLESERVICEORADB 3、ORACLE 相关服务名请参见“管理工具”之“服务”中以 ORACLE 开头的服务名 1、TNS-12154 Error 或 ORA-12154 特征:SQL*NET 没有找到连接串或别名 因 1:没有找到 TNSNAMES.ORA 文件,该文件的缺省路径为: Windows 95/98 client SQL*Net 2.xORAWIN95NETWORKADMIN

Net8ORAWIN95NET80admin Net8iORACLEORA81NETWORKADMIN Windows NT client SQL*Net 2.xORANTNETWORKADMIN Net8ORANTNET80ADMIN Net8iORACLEORA81NETWORKADMIN UNIX Client $ORACLE_HOME/NETWORK/ADMIN or /etc or /var/opt/oracle . 在客户端设置 TNS_ADMIN 在 HKEY_LOCAL_MACHINESoftwareOracle 设置 TNS_ADMIN. TNS_ADMIN 指向 TNSNAMES.ORA 文件的位置 措施:按上述说明检查文件位置 因 2:TNSNAMES.ORA 文件中内容格式不对 措施:检查文件格式,标准格式如下: DEV1.WORLD = ) ) ) ) 因 3:TNSNAMES.ORA 与 SQLNET.ORA 不一致

措施: SQLNET.ORA 格式如下: TRACE_LEVEL_CLIENT = OFF SQLNET.AUTHENTICATION_SERVICES = NAMES.DIRECTORY_PATH = AUTOMATIC_IPC = OFF 因为没有 NAMES.DEFAULT_DOMAIN=world,所以 DEV1.WORLD 连接串不能连接,可以在 TNSNAMES.ORA 中增加 DEV1 = ) ) ) ) 此时可连接。 2、NL-00462 Error 或 ORA-00462 特征:监听器无法启动 因:LISTENER.ORA 文件内容错误,例如,括号不匹配、参数名错误等、多余的空格等。 措施:重新文件 3、NL-00405 Error 或 ORA-00405 特征:LISTENER.ORA 文件不可读或找不到 因:LISTENER.ORA 文件内容错误,例如,括号不匹配、参数名错误等、多余的空格等。 措施:确保文件位置在缺省目录下$ORACLE_HOME/network/admin,或设置环境变量 TNS_ADMIN 指向这个文件所在位置。

4、TNS-01155 Error 或 ORA-01155 特征:LISTENER.ORA 文件中 SID_LIST_LISTENER 变量赋值不对 因:LISTENER.ORA 文件内容错误,SID_LIST_LISTENER 变量赋值不对。 措施:确保文件中赋值正确,$ORACLE_HOME/network/admin/samples 目录下有样例文 件,可供参考。 5、TNS-12537 、TNS-12560、TNS-00507 Error 特征:LISTENER.ORA 文件中引用了一个无效的协议适配程序 因:LISTENER.ORA 文件中 PROCOTOL 变量赋值不对。 措施:确保文件中赋值正确,一般用 TCP 协议,$ORACLE_HOME/network/admin/samples 目录下有样例文件,可供参考。用 adapters tnslsnr 检查协议程序 6、TNS-12203 Error 特征:不能与目标连接 因:监听器是否启动;别名是否配置 措施:检查监听器是否启动,例如 lsnrctl status;检查 TNSNAMES.ORA 的别名配置 7、TNS-12533 Error 特征:不能与目标连接 因:非法的 address 参数, 措施:检查 TNSNAMES.ORA 的 ADDRESS 参数 1)用 tnsping net_service_name 测试网络服务名是否配置正确!!

2)用 sqlplus 程序通过 test 网络服务名进行测试,如 sqlplus 。如果不能连接到数 据库,则在 tnsname.ora 文件中的 test 网络服务名(net service)后面加上 sqlnet.ora 文件 NAMES.DEFAULT_DOMAIN 参数的值, 什么情况下会引起 oracle 自动设置 NAMES.DEFAULT_DOMAIN 参数? 出现这种情况的典型环境为 windows 的客户端的‘我得电脑 à 属性 à 计算机名 à 更改 à 其它?à 此计算机的主 DNS 后缀’中设置了‘primary dns suffix’,因为在这种情况下安 装客户端时, 会在 sqlnet.ora 文件中自动设置 NAMES.DEFAULT_DOMAIN 参数, 或许当把计算 机加入域中安装 oracle 客户端时也会出现这种情况,有条件的话大家可以试一下。 我在设置 oracle 的客户端时一般手工修改 tnsnames.ora 文件,但是还有许多人喜欢 用图形工具配置,该图形工具最终还是修改 tnsnames.ora 文件,但是它有时会引起其它的 问题: 在用 oracle 的图形配置软件‘net assistant‘或‘Net Configuration Assistant’ 配置网络服务名时,假如已经设置了‘primary dns suffix’,但是在图形配置软件中写的 网络服务名的名字中没有‘primary dns suffix’,如只是写了 test,则图形配置软件会 自动在后面加上‘primary dns suffix’,使之变为 test.testserver.com,并存在 tnsnames.ora 中,而不管你的 sqlnet.ora 文件中是否有 NAMES.DEFAULT_DOMAIN 参数。此 时,用图形工具进行测试连接是通过的,但是假如此时 sqlnet.ora 文件中没有 NAMES.DEFAULT_DOMAIN 参数,则你在使用网络服务名时应该使用在 tnsnames.ora 中的 test.testserver.com,而不是你在图形配置软件中键入的 test。解决的办法为: 1 可以在 sqlnet.ora 文件中设置 NAMES.DEFAULT_DOMAIN= testserver.com,这时你可 以用 test 或 test.testserver.com 连接数据库 2 在 sqlnet.ora 文件中不设置 NAMES.DEFAULT_DOMAIN 参数,在 tnsnames.ora 文件中 将 test.testserver.com 中的.testserver.com 去掉,这时你可以用 test 连接数据库。