今天在启动服务器上的ORACLE时遇到如下错误:
SQL> startup;
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name ’LISTENER_ORCL’
然后,在网上找了一些资料,解决了此问题。
解决的方式如下(这是网上的一位达人解决方案,我照他的步骤顺利解决,不过决定还是做一个笔记):
第一步:复制一份pfile参数文件(注意:oracle中的pfile指的就是init<sid>.ora文件)
$ ./sqlplus / as sysdba;
SQL> create pfile from spfile=’/u01/oracle/product/10.2.0/db_1/dbs/spfileorcl.ora’;
第二步:修改pfile参数文件(也即修改init<sid>.ora文件)
经过第一步以后,你就会在$ORACLE_HOME/dbs目录下发现有这么一个文件init<sid>.ora,这就是你第一步创建的文件。由于我的oracle实例名为orcl,所以我的pfile文件为initorcl.ora。
用gedit打开,找到local_listener这一行,然后将其值修改为:
(ADDRESS_LIST=(Address=(Protocol=tcp) (Host=your_hostname)(Port=1521)))
其中的your_hostname为你的主机名,其实导致ORA-00119和ORA-00132错误的原因就很可能是你修改了你的hostname,但是我看了一下我的tnsname.ora文件里面的那个LISTENER_ORCL(可能你不是这个名字)和后面修改的your_hostname一致,我做的只是将tnsname.ora文件中的(ADDRESS_LIST=(Address=(Protocol=tcp) (Host=your_hostname)(Port=1521)))复制到pfile文件的“local_listener=”后面,然后就顺利启动了数据库,我也不知道为什么直接用*.local_listener=’LISTENER_ORCL’就找不到,而一定要*.local_listener=’(ADDRESS_LIST=(Address=(Protocol=tcp) (Host=your_hostname)(Port=1521)))’才可以,这个问题以后研究一下。
以下是我的一个修改样例:
修改之前可能是这样
*.local_listener=’LISTENER_ORCL’
修改后的值大概就是这个样子了
*.local_listener=’(ADDRESS_LIST=(Address=(Protocol=tcp) (Host=your_hostname)(Port=1521)))’
然后保存退出
第三步:以pfile创建spfile
使用以下命令创建spfile
SQL> create spfile from pfile=’/u01/oracle/product/10.2.0/db_1/dbs/initorcl.ora’;
第四步:启动数据库
SQL> startup;
ORACLE instance started.
Total System Global Area *** bytes
Fixed Size *** bytes
Variable Size *** bytes
Database Buffers *** bytes
Redo Buffers *** bytes
Database mounted.
Database opened.
***********************************
在oracle92上创建了一个测试数据库,忘记了创建spfile(9208默认仍然是pfile启动数据库的),同时修改了监听器的名字什么的,然后过了几天重启数据库的时候,发现数据库启动的时候报错
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name ’LISTENER_ORCL’
检查的时候,发现确实没有spfile,之前修改监听器什么的都只是在内存里面修改了,没保存到pfile文件里去
问题原因:数据库在启动的时候会尝试解析tnsnames.ora里的listener名字,看是否存在该listener,如果不存在则提示错误。
解决方式:
1. 如果有pfile,则用pfile启动数据库;如果不存在pfile,但有之前的spfile,那么可以通过create pfile from spfile='/home/..../spfileXXXX.ora'来生成pfile,并可手动编辑pfile文件
startup pfile='/home/.../initorcl.ora'
2. 检查spfile的值,并创建spfile
SQL> show parameter spfile
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
spfile string
SQL> create spfile from pfile='/home/ora92/admin/orcl/pfile/initorcl.ora.515200911423'
2 ;
File created.
SQL> show parameter spfile
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
spfile string
SQL> startup force
ORACLE instance started.
Total System Global Area 2837416920 bytes
Fixed Size 744408 bytes
Variable Size 687865856 bytes
Database Buffers 2147483648 bytes
Redo Buffers 1323008 bytes
Database mounted.
Database opened.
SQL> show parameter spfile
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
spfile string
?/dbs/spfile@.ora
3. 检查local_listener的值,并设置成需要的值
SQL> show parameter listener
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
local_listener string
mts_listener_address string
mts_multiple_listeners boolean
FALSE
remote_listener string
SQL> alter system set local_listener=' (ADDRESS = (PROTOCOL = TCP)(HOST = mddbstandby.163.com)(PORT = 9521))' scope=both;
System altered.
SQL> startup force
ORACLE instance started.
Total System Global Area 2837416920 bytes
Fixed Size 744408 bytes
Variable Size 687865856 bytes
Database Buffers 2147483648 bytes
Redo Buffers 1323008 bytes
Database mounted.
Database opened.
SQL> show parameter local_listener
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
local_listener string
(ADDRESS = (PROTOCOL = TCP)(H
OST = mddbstandby.163.com)(POR
T = 9521))
SQL>