有时候老天就是爱和你开玩笑,昨天好不easy配置好Oracle。可以用PL/SQL正常登录使用,今天突然就不行了。而且错误十分诡异,没有提示什么错误代码。输入usernamepassword,点击登录后PL/SQL没有反映。直接卡死。
我就郁闷了。都不给提示怎么解决这个问题呢。突然想到Oracle肯定会有记录日志的地方。去查看一下应该会有惊喜。
Oracle日志位置:D:appNiuNiuproduct11.2.0dbhome_1databaseoradim.log
果然发现了两个错误:
Tue Jun 23 15:32:41 2015
D:appNiuNiuproduct11.2.0dbhome_1inoradim.exe -startup -sid drp -usrpwd * -log oradim.log -nocheck 0
Tue Jun 23 15:32:48 2015
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name ‘LISTENER_DRP’
如日志显示的这两个错误:ORA-00119和ORA-00132,可能是由于这两个错误才导致PL/SQL不能正常登录。
找到错误根源就好说了,解决这两个问题就可以:
方案一:查看tnsname.ora文件,是否有这段字符串;没有的话加入即依照实际情况就可以。
LISTENER_DRP =
(ADDRESS = (PROTOCOL = TCP)(HOST = Niu)(PORT = 1521))
当中DRP为你的数据库sid,host为主机名。
方案二:tnsname.ora文件没有错误的情况下。也有可能出现这个问题,仅仅能採取方案二了。
网上找了非常多资料,主要意思是先用spfile产生pfile。再改动local_listener的參数,再又一次产生spfile文件,过程例如以下:
1、通过spfile复制一份pfile參数文件(注意:oracle中的pfile指的就是init.ora文件,比如以下命令创建的pfile文件就是“INITdrp.ORA”;spfile文件就是SPFILEDRP.ORA)
SQL> create pfile from spfile='D:appNiuNiuproduct11.2.0dbhome_1databaseSPFILEDRP.ORA';
2、改动pfile參数文件(也即改动init.ora文件。即本文的INITdrp.ORA文件)
经过第一步以后,在$ORACLE_HOME/database文件夹会生成文件init.ora,由于我的oracle实例名为drp,所以我的pfile文件为INITdrp.ORA。用记事本打开该文件。找到local_listener这一行,然后将其值改动为:
(ADDRESS_LIST=(Address=(Protocol=tcp) (Host=your_hostname)(Port=1521)))
当中的your_hostname为你的主机名。
3、又一次产生spfile文件SPFILEDRP.ORA
SQL> create spfile from pfile='D:appNiuNiuproduct11.2.0dbhome_1databaseINITdrp.ORA';
4、使用startup命令。又一次启动数据库就可以。
整个流程如图所看到的:
报错时要学会查看Oracle错误日志里面的信息。有时候报的错误并非表面上的那样,须要我们寻根问底才行。