Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

157

积分

0

好友

14

主题
1#
发表于 2012-6-13 16:53:36 | 查看: 6643| 回复: 5
在执行shutdown immediate时,oracle会对未提交事务进行回滚,在回滚的过程中又在另一个会话执行了shutdown abort.
那么下次启动时的smon tx recovery是重新回滚死事务呢还是断点续回?
2#
发表于 2012-6-13 17:03:40
应该是重新开始,因为你在shutdown的时候进行回滚并没有完成,所以日志中不会记录,在startup时,SMON会自动读取重做日志文件,进行恢复,所以回滚过程将重新开始。

回复 只看该作者 道具 举报

3#
发表于 2012-6-13 17:39:09
求楼主操作记录,实在不清楚 shutdown immediate 时如何开启另一个会话

回复 只看该作者 道具 举报

4#
发表于 2012-6-13 17:41:55
回滚是startup起来后进行的,而不是shutdown的时候进行的。

回复 只看该作者 道具 举报

5#
发表于 2012-6-13 17:53:23
应该她想说的是rollback后shutdown abort吧。。

回复 只看该作者 道具 举报

6#
发表于 2012-6-13 20:37:01
举一个例子 来说明该问题:

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production


SQL> select count(*) from maclean_large;

  COUNT(*)
----------
  39058944


SQL>  delete maclean_large;


执行以上DELETE语句耗费大量时间 在中途KILL 该前台进程

[oracle@vrh8 bdump]$ kill -9 4185

PMON 发现dead process 后会post smon让他来 recover dead transaction

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

SUM(DISTINCT(KTUXESIZ))
-----------------------
                 151405

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

SUM(DISTINCT(KTUXESIZ))
-----------------------
                 149543

x$KTUXE 视图的ktuxesiz=》number of undo blocks used by the transaction , ktuxesiz减少说明 正在回滚rollback

SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.


SQL> alter database open;

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

SUM(DISTINCT(KTUXESIZ))
-----------------------
                 144585

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

SUM(DISTINCT(KTUXESIZ))
-----------------------
                 143118

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

SUM(DISTINCT(KTUXESIZ))
-----------------------
                 141861



可以看到 KTUXESIZ 是延续之前的rollback成果的  ,所以SMON 不是在做trans recovery时 被打断 就需要从头开始,  仔细想一下 这样也是不科学的,所以 SMON的trans recovery是可continuable的

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-15 22:40 , Processed in 0.048204 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569