做程序开发工作,不免会与数据库打交道,掌握一招万能的数据库处理技巧变得尤为重要,比如,重启数据库(重启一次不好,就多重启几次,哈哈哈~)
一、登陆安装Oracle服务的系统,一般通过SSH、Xshell等工具进行连接
二、指令:cd $ORACLE_HOME,切换到oracle的安装目录
三、指令:echo $ORACLE_SID,查看当前Oracle实例
若存在多个实例,可以通过指令:ps -ef|grep pmon,查看当前服务安装的哪些实例:
(比如查询出来有 ora_pmon_Aikes,ora_pmon_Robert)
然后再通过指令:export ORACLE_SID=实例名,切换实例(export ORACLE_SID=Aikes)。
注:这里补充一下,一个服务器是可以安装多个Oracle实例的,而一个实例上又可以创建多个用户。例如:在PLSQL等数据库操作工具中,可以看到数据库连接信息为:AAAA@Aikes、BBBB@Aikes,CCCC@Robert,这里的Aikes就是Oracle实例,AAAA、BBBB只是实例上的不同用户而已;而Aikes和Robert就是两个不同的实例,它们也可以装在同一个服务器上。而AAAA和BBBB如果权限足够可以访问对方的表数据,AAAA.emp、BBBB.dept等;但是对于CCCC就需要创建dblink才能访问,这些都不是本章重点。
四、切换到正确实例后,就可以输入指令:sqlplus /nolog,进入SQLPlus窗口
五、接下来再sqlplus中,用系统管理员登录:connect / as sysdba,然后就可以进行重启数据库操作啦,常规都是先使用该指令停止数据库:shutdown immediate,然后使用:startup,启动数据库,完成重启操作。
注:停止数据库还有其他指令,但是immediate是相对安全稳妥的操作。
六、启动成功后,通过指令:exit退出即可。
-----------------------------------------------补充一个在重启数据库过程中遇到的问题及解决方法:
问题描述:在连接成功后,执行shutdown immediate时,卡顿了很久,我就强制将Xshell关闭。之后重新打开Xshell,输入nolog连接时,提示信息:connect to an idle instance ,然后输入connect /as sysdba指令后提示no log on。
问题分析(本人猜测):在进行shutdown immediate操作时存在未终止的Oracle进程,当我们强制中断后,Oracle显示为数据库关闭,但是其仍有进程在活动,导致重新连接提示:连接到一个空闲实例,进行登录操作又无法验证登录信息。此时数据库无法正常使用,也无法进行启动数据库等操作。
解决方案:该报错信息在网上也有记载,但大都是Oracle初始配置时产生的,其解决方案涉及到调整监听信息等对于该情况的问题毫无意义。正确的做法是终止掉该实例所有相关进程,重新使用系统管理员登录,启动Oracle实例即可。
解决步骤:
1. 使用该指令:ps -ef|grep ora_dbw0_$ORACLE_SID,查找残留的Oracle进程
oracle 35709 22137 0 15:12 pts/2 00:00:00 grep ora_dbw0_Aikes (35709即为进程对应pid)
2. 通过kill -9 pid,杀死残留进程
3. 打开到Oracle安装目录,切换到对应实例,输入指令:sqlplus sys as sysdba,连接到sqlplus
4. 可能会提示输入密码,直接回车就可以跳过
5. 输入指令:startup;,启动数据库实例,至此问题得以解决
若有描述不清或描述有误的地方,欢迎大家在评论区提问和指正。