Linux 下 Oracle 执行报错: shared memory realm does not exist

登录上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实例。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值