1. 错误描述
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENER_ORCL'
这个错误在数据库服务启动时出现,如我的安装目录D:\app\orcl\product\12.1.0\dbhome_1\database\oradim.log文件里。
2. 初次尝试
根据http://jingyan.baidu.com/article/5552ef47c73eef518ffbc908.html的描述;应做如下几步:
1. 先看oracle的监听和oracle的服务是否都启动了。启动oracle监听:cmd命令行窗口下,输入lsnrctl start,回车即启动监听。
2. 查看oracle的sid叫什么,比如创建数据库的时候,实例名叫“orcl”,那么先手工设置一下oralce的sid,cmd命令窗口中,set ORACLE_SID=orcl
3. 再输入sqlplus /nolog,回车。再输入 conn / as sysdba;回车
4. 再输入startup,回车.这步是启动oracle服务。如果startup启动被告知已经启动了,可以先输入shutdown immediate;等shutdown结束之后,再输入startup。
然后我就照做了:
C:\Users\uchoice>set ORACLE_SID=orcl
C:\Users\uchoice>echo %ORACLE_SID%
orcl
C:\Users\uchoice>sqlplus /nolog
SQL*Plus: Release 12.1.0.2.0 Production on 星期一 9月 12 18:35:10 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL> conn / as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
###ORA-01017: invalid username/password;错误是我的sqlnet.ora文件里SQLNET.AUTHENTICATION_SERVICES= (NONE)引起的,应改为SQLNET.AUTHENTICATION_SERVICES= (NTS),具体原理未深究
SQL> conn sys as sysdba
输入口令:
已连接到空闲例程。
SQL> show parameter
ORA-01034: ORACLE not available
进程 ID: 0
会话 ID: 0 序列号: 0
SQL> startup mount
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENER_ORCL'
SQL> exit
已断开连接
其实我在命令行里执行了startup, startup mount; shutdown immediate;等命令,都是失败的,所以和这个网友遇到的情况不一样。
3. 再次尝试
然后看到这边博文,http://blog.chinaunix.net/uid-24612962-id-3189342.html, 我做了如下探究:
C:\Users\uchoice>sqlplus / as sysdba
###这里之所以可以登录成功,是因为我修改了sqlnet.ora文件。
SQL*Plus: Release 12.1.0.2.0 Production on 星期一 9月 12 19:13:25 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
已连接到空闲例程。
SQL> create pfile from spfile;
###在D:\app\orcl\product\12.1.0\dbhome_1\database目录下生成了INITorcl001.ORA文件,与已经存在地SPFILEORCL.ORA文件内容相似。
文件已创建。
SQL> startup nomount pfile='D:\app\orcl\product\12.1.0\dbhome_1\database\INITorcl.ORA'
####这一步执行失败,你们不必再试
SP2-0642: SQL*Plus 内部错误状态 2133, 上下文 3113:0:0
继续执行将不安全
ORA-03113: 通信通道的文件结尾
进程 ID: 0
会话 ID: 0 序列号: 0
SQL> create spfile from pfile;
###此命令重新生成了D:\app\orcl\product\12.1.0\dbhome_1\database\SPFILEORCL.ORA文件,
###需要把*.local_listener='LISTENER_ORCL'内容
修改为*.local_listener='(ADDRESS_LIST=(Address=(Protocol=tcp) (Host=192.168.1.197)(Port=1521)))'
文件已创建。
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 2550136832 bytes
Fixed Size 3048872 bytes
Variable Size 671091288 bytes
Database Buffers 1862270976 bytes
Redo Buffers 13725696 bytes
数据库装载完毕。
数据库已经打开。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL> startup;
ORACLE 例程已经启动。
Total System Global Area 2550136832 bytes
Fixed Size 3048872 bytes
Variable Size 671091288 bytes
Database Buffers 1862270976 bytes
Redo Buffers 13725696 bytes
数据库装载完毕。
数据库已经打开。
我这次之所以没有按照原博文做,是因为我的oracle是12c的,我的spfileorcl.ora在database文件夹下,而不是dbs下。
4. 结果
然后我使用pl/sql developer重新连数据库时,我的c##test用户居然告诉我密码错误。但是我中途并没有改他的密码。不知为何。接着我只能sqlplus / as sysdba,alter user c##test identified by test;改密码。最后成功连接数据库。