登录上Oracle用户,并使用 sqlplus "/as sysdba" 登录dba用户后,无论执行什么指令都会有如下提示:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
原因大致为:
1、监听没启
2、数据库实例没启
首先解决第一个问题,查看监听是否启动,使用
lsnrctl status
来查询监听的状态,报错如下:
[oracle@xxxxx ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 07-MAR-2022 17:20:54
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test02)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 2: No such file or directory
执行
lsnrctl start
来启动监听,提示如下:
[oracle@xxxxxxx ~]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 07-MAR-2022 17:21:39
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Starting /u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.3.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/yxptkfsjk02/listener/alert/log.xml
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test02)(PORT=1521)))
TNS-12545: Connect failed because target host or object does not exist
TNS-12560: TNS:protocol adapter error
TNS-00515: Connect failed because target host or object does not exist
Linux Error: 99: Cannot assign requested address
Listener failed to start. See the error message(s) above...
可以看到,是地址不对,找不到HOST=test02,应该是数据库创建的时候,运维随便复制的一份文件放了过来。
修改监听文件如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xx.xx.xx.xx)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
再次启动监听,成功,信息如下:
[oracle@xxxxx admin]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 07-MAR-2022 17:50:58
Copyright (c) 1991, 2011, Oracle. All rights reserved.
TNS-01106: Listener using listener name LISTENER has already been started
接着启动数据库实例:
[oracle@xxxxxx admin]$ sqlplus "/as sysdba"
SQL*Plus: Release 11.2.0.3.0 Production on Mon Mar 7 17:52:46 2022
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL>
SQL>
SQL>
SQL> startup
ORACLE instance started.
Total System Global Area 3691200512 bytes
Fixed Size 2233800 bytes
Variable Size 754977336 bytes
Database Buffers 2919235584 bytes
Redo Buffers 14753792 bytes
Database mounted.
Database opened.
数据库实例启动成功。
查询实例状态,为OPEN状态:
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL>
SQL>
后续问题,通过SQL plus 来连接实例完全正常,但是通过PLSQL来远程登录,总是报"无监听" 的错,后来把服务端network/admin下的配置文件,listener.ora 和 tnsnames.ora 中的IP,更改为主机名,同时切记需要在/etc/hosts中配置主机名和127.0.0.1的对应关系。
更改完成后,
1、重启监听
2、重启实例
3、再次通过SQL plus连接实例,正常。通过PLSQL来远程登录,正常。
问题:其实也不是IP改成主机名的问题,应该是需要在两个配置文件中,将IP改为127.0.0.1。通过这个本机IP来进行连接Oracle实例。