关于Oracle使用SQL/Plus或者PL/SQL连接失败的使用若干经验
网上常见解决方法前篇一律,都是检查核对tnsnames.ora,listener.ora,sqlnet.ora,在这里你将看到每种错误的排查方法,以减少你时间在网上查找各种坑抑或不是坑。。。
常见错误
(1)、提示无监听程序
检查监听状态,cmdà lsnrctl status,查看是否正常
说明是监听程序没有启动,也可以查询服务(services.msc)是否运行正常,检查..\ product\11.2.0\dbhome_1\NETWORK\ADMIN目录下的listener.ora文件格式是否正确,注意空格、换行符等特殊字符的影响,正确格式为
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = F:\app\LincWoodz\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS ="EXTPROC_DLLS=ONLY:F:\app\LincWoodz\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = F:\app\LincWoodz\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
ADR_BASE_LISTENER = F:\app\LincWoodz
请注意红色字体关键位置。
检查无误后使用cmd>> lsnrctl start 启动,检查是否启动正常,正常应含有至少两个实例服务,如下截图红色线框内
(2)、ora-12518 TNS: 监听程序无法分发客户机连接,此情况一般是实例服务oracleserviceorcl没有启动造成,使用cmdànet start oracleserviceorcl 启动实例服务
(3)、ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务(最常见错误)
A:先检查tnsnames.ora文件中的配置是否正确,如下
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT= 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
如果和listener.ora中配置不一致,请修改。若修改一致后还是无法连接,提示相同错误,请使用lsnrctl status检查监听是否启动正常,如果启动正常,如果如下情况:
特别注意检服务摘要只有CLRExtProc一个实例,而没有用户自己实例(orcl),检查oracleserviceorcl实例服务是否正运行,如果正在运行,但是用lsnrctl status查看时没有注册该实例时,手动设置监听和实例服务的关系,设置前你再次检查监听和实例服务是否正常运行,设置过程如下:
检查orcl服务设置是否正确(如果是IP、计算机名,127 IP地址检查方法一样),然后选择
在右侧下拉列表选择数据库服务,设置orcl实例服务和监听的对应关系,
设置完成后请重新连接,一般至此可完成,如果依然无法连接,请重启监听和实例服务。
添加之后listener.ora文件中会增加如下红色部分:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME =orcl)
(ORACLE_HOME =F:\app\LincWoodz\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
(SID_DESC =
(PROGRAM = extproc)
(SID_NAME = CLRExtProc)
(ORACLE_HOME = F:\app\LincWoodz\product\11.2.0\dbhome_1)
)
)
(4)、ORA-01031: insufficient privileges 使用sqlplus / as sysdba 连接是提示无效权限
此时
系统验证失败,将sqlnet.ora中参数改为NONE à NTS活着ALL,改All需要重启计算机,否则会提示,SQLNET.AUTHENTICATION_SERVICES= (NTS)
此时如果不知道sys密码也是重新生成密码校验文件,格式:
以sqlplus/nolog输入orapwd file=%oracle_home%/database/PWD+sid.ora password=sys
(这里无法显示图片,需要的童鞋可以下载资源搜索题目标题)
--愿你好运! ---繁星守护