• 关于ORA-01034和ORA-27101的一种解决方法


    1 先看oracle的监听和oracle的服务是否都启动了。启动oracle监听:
    cmd的命令行窗口下,输入lsnrctl start,回车即启动监听。

    2 查看oracle的sid叫什么,比如创建数据库的时候,实例名叫“abc”,那么先手工设置一下oralce的sid,cmd命令窗口中,setORACLE_SID=abc

    3 再输入sqlplus  /nolog,回车
    再输入 conn / as sysdba;回车

    4 再输入startup,回车.这步是启动oracle服务。如果startup启动被告知已经启动了,可以先输入shutdownimmediate;等shutdown结束之后,再输入startup。

    5 过几秒钟等命令运行完成,就能连接了。这个时候,可以输入"select * fromuser_tables;"测试一下,看是否有查询结果。

    6 出现ORA-01034和ORA-27101的原因是多方面的:主要是oracle当前的服务不可用,shared memoryrealm does notexist,是因为oracle没有启动或没有正常启动,共享内存并没有分配给当前实例.所以,通过设置实例名,再用操作系统身份验证的方式,启动数据库。这样数据库就正常启动了,就不会报ORA-01034和ORA-27101两个启动异常了。
    -------------------------------------------------------------------------------------------

    今天在测试库上遇到了ORA-27101的错误,当通过客户端连接到db时返回如下:

    [oracle@bluerin admin]$ sqlplus system/oracle@test

    SQL*Plus: Release 11.1.0.6.0 - Production on Tue Aug 10 11:05:042010

    Copyright (c) 1982, 2007,Oracle.  All rightsreserved.

    ERROR:
    ORA-01034: ORACLE not available
    ORA-27101: shared memory realm does not exist
    Linux-x86_64 Error: 2: No such file or directory
    Process ID: 0
    Session ID: 0 Serial number: 0

    对于这个问题第一印象,可能会觉得没有足够的内存空间,来创建共享内存段

    1.首先检查内核参数设置以及alert.log 文件

    fs.file-max = 6553600
    kernel.shmall = 2097152
    kernel.shmmax = 2147483648
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    net.ipv4.ip_local_port_range = 9000 65500
    net.core.rmem_default = 4194304
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048576

    查看后都没有问题,主机有足够的内存,数据库也已经在启动状态:

    SQL> select open_mode from v$database;

    OPEN_MODE
    ----------
    READ WRITE

    2.之后发现在报错之后,继续输入用户名和密码确可以登陆

    Enter user-name: system
    Enter password:

    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bitProduction
    With the Partitioning, OLAP, Data Mining and Real ApplicationTesting options

    SQL>

    3.查看sqlnet.log日志

    [oracle@bluerin log]$ pwd
    /u01/app/product/11.1.0/db_1/network/log
    [oracle@bluerin log]$ cat sqlnet.log
    Directory does not exist for read/write[/u01/app/product/11.1.0/db_1/log][/u01/app/product/11.1.0/db_1/log/diag/clients]


    ***********************************************************************
    Fatal NI connect error 12541, connecting to:
     (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.201.1.134)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=Oracle8)(CID=(PROGRAM=java@localhost)(HOST=localhost)(USER=oracle))))

      VERSIONINFORMATION:
            TNSfor Linux: Version 11.1.0.6.0 - Production
            TCP/IPNT Protocol Adapter for Linux: Version 11.1.0.6.0 -Production
      Time: 05-AUG-201018:30:51
      Tracing not turnedon.
      Tns errorstruct:
        nsmain err code: 12541
        TNS-12541:TNS:no listener
        nssecondary err code: 12560
        ntmain err code: 511
        TNS-00511:No listener
        ntsecondary err code: 111
        ntOS err code: 0


    ***********************************************************************

    提示找不到listener......

    4.检查listener是否配置正确

    [oracle@bluerin alert]$ cat/u01/app/product/11.1.0/db_1/network/admin/listener.ora
    # listener.ora Network Configuration File:/u01/app/product/11.1.0/db_1//network/admin/listener.ora
    # Generated by Oracle configuration tools.

    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC=
          (ORACLE_HOME= /u01/app/product/11.1.0/db_1)
          (SID_NAME= siebtest)
        )
      )

    LISTENER =
      (DESCRIPTION=
        (ADDRESS= (PROTOCOL = TCP)(HOST = 10.201.1.134)(PORT = 1521))
      )

    [oracle@bluerin ~]$ tnsping test

    Used parameter files:
    /u01/app/product/11.1.0/db_1/network/admin/sqlnet.ora


    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS =(PROTOCOL = TCP)(HOST = 10.201.1.134)(PORT = 1521))) (CONNECT_DATA= (SERVICE_NAME = siebtest)))
    OK (0 msec)

    listener 配置没有问题。。。

    5.由于实例已经在启动的状态,这时候考虑到实例注册的问题

    SQL> show parameter local_listener

    NAME                                 TYPE        VALUE
    ------------------------------------ -----------------------------------------
    local_listener                       string

    发现local_listener没有值。。。。。

    6.设置local_listener参数

    SQL> alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=10.201.1.134)(PORT=1521)(SID=siebtest))';

    System altered.

    SQL> alter system register;

    System altered.

    7.再次登陆成功

    [oracle@bluerin alert]$ sqlplus system/oracle@test

    SQL*Plus: Release 11.1.0.6.0 - Production on Tue Aug 10 12:51:112010

    Copyright (c) 1982, 2007,Oracle.  All rightsreserved.


    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bitProduction
    With the Partitioning, OLAP, Data Mining and Real ApplicationTesting options

    SQL>

     

     总结:

        如果LOCAL_LISTENER丢失,会导致自动实例注册失败,数据库实例不会识别Listener,当Listener连接

    数据库实例的时候,由于Listener没有注册,导致了 ORA-27101: shared memory realm does notexist.

     

     

    转自:https://blog.csdn.net/qq_39611053/article/details/79031101

  • 相关阅读:
    浏览器缓存机制
    linux mail命令用法
    linux下Memcached安装以及PHP的调用
    JAVA和C# 3DES加密解密
    C++中函数调用时的三种参数传递方式详解

    const的用法,特别是用在函数前面与后面的区别!
    海底捞的“七宗罪”
    解决Qt5.7.0 cannot find -lGL
    怎么删除桌面右键"打开好桌道壁纸"
  • 原文地址:https://www.cnblogs.com/justlove/p/12379857.html
Copyright © 2020-2023  润新知