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;