一、需求背景
某项目使用oracle数据库,突发断电后发现数据库没有自启动,尝试手工执行启动,发现相关的启动命令未生效。
[oracle@hostname root]$ lsnrctl start
bash: 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/bin
export 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/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export 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 LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 26-APR-2024 10:55:18
Uptime 0 days 0 hr. 16 min. 13 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/data/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /home/oracle/data/oracle/diag/tnslsnr/hostname/listener/alert/log.xml
Listening 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 /nolog
conn /as sysdba
SQL> startup #启动数据库实例
ORACLE instance started.
Total System
Database mounted.
Database opened.
关闭数据库实例
Database 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
之后重新执行启动。