记一次突发异常断电后的Oracle 11g版本数据库重启过程及报错排查记录【测试成功】

艺帆风顺 发布于 2025-04-03 21 次阅读


一、需求背景

    某项目使用oracle数据库,突发断电后发现数据库没有自启动,尝试手工执行启动,发现相关的启动命令未生效。

    [oracle@hostname root]$ lsnrctl startbash: lsnrctl: 未找到命令...

        切换到主目录直接执行,提示

    二、排查步骤

    1、查找oracle默认路径

        find / -name sqlplus

      [root@hostname ~]# find / -name sqlplus/home/oracle/data/oracle/product/11.2.0/db_1/bin/sqlplus/home/oracle/data/oracle/product/11.2.0/db_1/sqlplus

      可以确定oracle路径为:/home/oracle/data/oracle/product/11.2.0/db_1/

      2、配置环境变量

        export ORACLE_HOME=/home/oracle/data/oracle/product/11.2.0/db_1/export PATH=$PATH:$ORACLE_HOME/binexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

        以上几条命令分别为:

            1)#设置Oracle Home目录;

            2) #将Oracle二进制文件所在目录加入PATH路径

            3)#设置系统搜索动态链接库路径

            ORACLE_HOME变量应设置为Oracle 11g的安装目录,PATH变量应包含Oracle 11g的二进制文件所在目录,LD_LIBRARY_PATH变量应包含Oracle 11g的动态链接库所在目录。

         重点:配置SID环境变量

            export ORACLE_SID=orcl

          export ORACLE_HOME=/home/oracle/data/oracle/product/11.2.0/db_1/export PATH=$PATH:$ORACLE_HOME/binexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATHexport ORACLE_SID=orcl

          3、配置监听

              lsnrctl start         #启动监听

              lsnrctl status       #查看监听状态

            [root@hostname bin]# lsnrctl status
            LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-APR-2024 11:11:32
            Copyright (c) 1991, 2009, Oracle. All rights reserved.
            Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))STATUS of the LISTENER------------------------Alias LISTENERVersion TNSLSNR for Linux: Version 11.2.0.1.0 - ProductionStart Date 26-APR-2024 10:55:18Uptime 0 days 0 hr. 16 min. 13 secTrace Level offSecurity ON: Local OS AuthenticationSNMP OFFListener Parameter File /home/oracle/data/oracle/product/11.2.0/db_1/network/admin/listener.oraListener Log File /home/oracle/data/oracle/diag/tnslsnr/hostname/listener/alert/log.xmlListening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hostname)(PORT=1521)))Services Summary...Service "orcl" has 2 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Instance "orcl", status BLOCKED, has 1 handler(s) for this service...Service "orclXDB" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service...The command completed successfully

            关闭监听器:

            lsnrctl stop

            4、启动数据库

                sqlplus / as sysdba        #连接到数据库

                或者:

              sqlplus /nologconn /as sysdba

                  SQL> startup            #启动数据库实例

                SQL> startupORACLE instance started.
                Total System ... ...Database mounted.Database opened.

                    关闭数据库实例

                  SQL> shutdownDatabase closed.Database dismounted.ORACLE instance shut down.   

                  三、常见报错

                  ORA-12162  12505 TNS错误

                      ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

                    ERROR:ORA-12162: TNS:net service name is incorrectly specified
                      Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor  at oracle.net.ns.NSProtocol.connect(NSProtocol.java:399) at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1140) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340) ... 122 common frames omitted

                         

                          原因:未设置系统环境变量ORACLE_SID导致ORA-12162错误

                          解决:export ORACLE_SID=orcl

                         之后重新执行启动。