最近尝试演示该案例时 无法使用Oracle命令shutdown数据库
ORA-01033:Oracle误删数据文件导致登陆失败
一直处于卡死状态 无任何反应
重启服务和实例依然无效
科普
Oracle详细的shutdown和startup参数解释如下:
shutdown命令用来关闭当前实例,有4个可选参数:
shutdown normal | transactional | immediate | abort
不带参数时默认是normal。
这几个参数的差异体现在以下几个维度:
- 是否允许新的连接;
- 当前已连接的回话是否自动断开;
- 当前未提交的事务是等待用户提交完成还是自动回滚;
- 关闭时是否需要做检查点;
- 启动时是否需要进行实例恢复。
shutdown normal:
不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。
shutdown transactional:
不允许新的连接、不等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。
shutdown immediate:
不允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。
shutdown abort:
不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。
另外,对于normal、transactional、immediate,db bUFFER cACHE的内容写入了数据文件,没有提交的事务被回滚,所有的资源被释放,数据库被“干净”的关闭。
对于abort,db bUFFER cACHE的内容没有写入数据文件,没有提交的事务也没有回滚。数据库没有DISMOUNT和关闭,数据文件也没有关闭。当数据库启动时,需要通过REDO LOG恢复数据,通过回滚段对事务回滚,对资源进行释放。
shutdown命令用来启动当前实例
startup [force] [restrict] [pfile= FILENAME] [open [recover][ DATABASE] | mount | nomount]
startup open:
startup缺省的参数就是open,打开数据库,允许数据库的访问。当前实例的控制文件中所描述的所有文件都已经打开。
startup mount:
mount数据库,仅仅给dba进行管理操作,不允许数据库的用户访问。仅仅只是当前实例的控制文件被打开,数据文件未打开。
startup nomount:
仅仅通过初始化文件,分配出sga区,启动数据库后台进程,没有打开控制文件和数据文件。不能任何访问数据库。
startup pfile= FILENAME:
以FILENAME为初始化文件启动数据库,不是采用缺省初始化文件。
startup force:
中止当前数据库的运行,并开始重新正常的启动数据库。
startup restrict:
只允许具有restricted session权限的用户访问数据库。
startup recover:
数据库启动,并开始介质恢复。
注意事项
长时间无法断开连接
shutdown normal
要等所有连接活动释放后才退出,所以当连接活动没释放将没有反应。
shutdownn immeditate
如果连接活动太多,也会出项长时间没反应的问题。
解决方案
方案1
a、这个方法是不等待会话结束就直接关闭掉数据库,一般情况下事不推荐使用的。实在关不掉的话,一般也没有什么问题。跟直接KILL进程差不多。
shutdown abort
b、执行上述命令后启动数据库
startup
方案2
这个方法是直接关闭掉数据库然后再重启数据库,这个方式也可以达到关闭的目的。
startup force