1、登录到oracle用户
su - oracle
2、关闭监听
lsnrctl stop
3、杀掉oracle有关进程
#下面两条命令结合成一条
ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCAL=NO|awk '{print $2}'|xargs kill -9#查询pid
ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCAL=NO|awk '{print $2}'
#杀掉进程
kill -9
4、关闭数据库
sqlplus / as sysdba
#关闭数据库
shutdown immediate
#退出sqlplus
exit
5、重启监听
lsnrctl start
6、启动数据库
sqlplus / as sysdba
#启动数据库
startup
7、查看监听状态
#退出sqlplus
exit#查看监听状态
lsnrctl status
8、可能遇到的问题和解决方法
方案1:
shutdown immediate 时可能比较久,此时不要着急退出,等待一会等他报错
重启oracle startup时一直卡在Database mounted
可以等一会,如果等了很久没报错就退出然后重新来一遍重启流程
报错ORA-01012: not logged on
kill oracle 进程 或者关掉oracleps -ef|grep ora_dbw0_$ORACLE_SID kill -9 pid
在UAT环境进行数据库重启时,确实遇到了ORA-01012报错和一直卡在Database mounted的情况,按照如上操作步骤,数据库重启成功。
方案2:
shutdown immediate卡住了,可能是因为有一些会话或者进程正在运行并阻止数据库关闭,可以尝试一下步骤来解决问题:
- 使用SQL*Plus或其他工具连接到数据库
- 使用如下语句查询当前会话和进程
SELECT t.MACHINE, t.SID, t.SERIAL#, t.STATUS, t.USERNAME FROM v$session t; SELECT t.PID, t.SPID, t.USERNAME, t.PROGRAM FROM v$process t;
- 找到正在运行的会话或者进程,并尝试终止他们
alter system kill session 'SID,SERIAL#';
kill -9 PID
- 重复“步骤2和步骤3”,直到所有会话与进程都被终止
- 再次尝试执行shutdown immediate命令
阻止数据库关闭可能是因为有未完成的事务,长时间运行的查询,锁表、后台进程未完成等情况,这些问题通常会导致数据库重启卡主,可以尝试先解决这些问题后再进行数据库重启操作(v$transaction、v$session、v$process、v$locked_object、dba_objects相关视图或表进行查询)
!!!如果仍然无法关闭数据库,请考虑使用shutdown abort命令强制关闭数据库,但是请注意,这可能会导致数据库损坏和其他问题,因此在执行前请备份数据库。