在之前使用Oracle过程中,经常遇到类似的问题,刚安装好的Oracle数据库(包括Oracle10g和Oracle11g),首次使用完全没有问题,重启电脑后,容易报错,无法识别当前的SID。这个问题出现过多次,以往的方法就是重装Oracle数据库。当然这是最笨的方法,治标不治本的。经过多次折腾,终于下定决心来弄清楚,这个问题的最根本原因。查找了不少资料,终于有了眉目。最终经过多番尝试,才确定是Oracle安装过程自动生成的监听文件中的路径不对。
这个是我电脑上Oracle的安装目录,E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN。在这个文件路径下面,是Oracle安装过程中,生成监听文件等一些重要文件。最重要的是listener.ora和tnsnames.ora这两个文件。问题就出在listener.ora文件中了。
下面是Oracle安装过程中自动生成的内容:
# listener.ora Network Configuration File: E:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
#SID_LIST_LISTENER =
# (SID_LIST =
# (SID_DESC =
# (SID_NAME = PLSExtProc)
# (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
# (PROGRAM = extproc)
# )
# )
#LISTENER =
# (DESCRIPTION_LIST =
# (DESCRIPTION =
# (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
# (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
# )
# )
下面是我修改后的内容:
# listener.ora Network Configuration File: E:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = E:\oracle\product
对比之后就能发现,系统生成的SID_NAME只是一个临时的别名,安装后首次使用没问题,重新启动服务,临时别名也可能发生改变,就无法识别了。
因此,我们有必要把系统临死生成的别名改成我们数据库实例名ORCL。
另外下面的ADDRESS也有同样的问题,需要自己做下修改。
附件里是我上传的listener.ora文件,供大家参考。