快速的关闭ORACLE数据库

2020-03-02  本文已影响0人  轻飘飘D

1.确定干净的关闭数据库 多少回滚(以字节计算)
( 为测试目的,先对某表做插入,但不commit)

select sum(used_ublk)*(block size of the undo/rollback segment tablespace block size)  from v$transcation;

#其实这里是有经验的,最好这个回滚量不要太大,否则重新启动之后,要回滚很长时间的.
SQL> select sum(used_ublk) from v$transaction; 
SUM(USED_UBLK)
--------------
         1

2.Shutdown abort数据库

#发起这个命令之后。将快速终止所有进程(客户端和后台进程)。不会产生任何回滚操作。
SQL> shutdown abort

3.Startup Restrict

#做这一步是为了让数据库回滚,SMON做回滚的时候,最好不要让其他Session连进来,以免其他Session执行同样的SQL报错。
SQL> startup restrict
ORACLE instance started.
Total System Global Area 1185853440 bytes
Fixed Size          2252664 bytes
Variable Size         771752072 bytes
Database Buffers      402653184 bytes
Redo Buffers            9195520 bytes
Database mounted.
Database opened.

4.观察SMON回滚的进度[通过下面的查询查看回滚(块的个数)]

SQL> select sum(distinct(ktuxesiz)) from x$ktuxe where ktuxecfl = 'DEAD';

SUM(DISTINCT(KTUXESIZ))
-----------------------
              0

5.当回滚完成后【(有 可能 启动后立刻就完成了) 步骤4 结果为0 】发起shutdown immediate

SQL> shutdown immediate;

6.最后 再Startup

SQL> startup;
这样我们就完成了快速干净的关闭掉一个数据库.当然在运行Shutdown Abort的时候,也是有一定风险的,这个风险的几率极低.我曾经在一套8.1.7的数据库上运行shurdown abort后出现ORA-00600的错误.所以我们要执行该命令之前要关注一下I/O,如果I/O不是很大,我觉得是没问题的。再说了既然MOS有这样的文档
上一篇 下一篇

猜你喜欢

热点阅读