How oracle can known which transactions were active in the time of failure?

[复制链接]
查看11 | 回复6 | 2010-1-4 13:39:56 | 显示全部楼层 |阅读模式
database no archive log
1. I have 3 redo log groups
2. I have 10 uncomitted transactions, 3 in redo 1 , 3 in redo 2 and 4 in redo 4
3. the uncomitted data are written to datafiles
4. redo 1 is overwritten by new redo
5. instance failre
6. we start database
I mean for example my uncomitted transactions in redo 1 has been overwritten then from where does Oracle
obtain information about these 4 uncomitted transactions?

many thanks for you in advance!
回复

使用道具 举报

千问 | 2010-1-4 13:39:56 | 显示全部楼层
maybe from undo segment
回复

使用道具 举报

千问 | 2010-1-4 13:39:56 | 显示全部楼层
I have another problem,
I have three redo groups , every groups has one 50-MB size logfile;
But I have a transaction which will generate 160MB size redo.
I should remind you this is a noarchived mode database.
So, would this transaction be processed , or fail ? and Why?
If you understand this question, your question will be answered by yourself.
回复

使用道具 举报

千问 | 2010-1-4 13:39:56 | 显示全部楼层
以前看到的一些答案,不知道是否是你想知道的
eygle---
如果数据库Crash,重新启动,很久远以前的未提交事务并不在Redo的恢复序列中。
但是未提交事务一定在回滚段事务表上存在,并且State=10,为活动事务。这就够了。
数据库启动之后,这些事务会被SMON逐个标记为Dead(不可能再活过来了),然后由SMON慢慢去回滚这些事务;也存在另外一种情况,后来的进程会去读这些未提交数据,发现Dead事务未提交,则主动进行回滚。

kamus---
1. 一个数据块发生更新,必然写回滚
2. 回滚段的block变化也记录在redo中
一份未提交的数据必定在回滚中有相应的前镜像,任何正常的恢复都一定会把这些变化重新构建出来。
回复

使用道具 举报

千问 | 2010-1-4 13:39:56 | 显示全部楼层
还是没有理解!
回复

使用道具 举报

千问 | 2010-1-4 13:39:56 | 显示全部楼层
因为当一个事物提交的时候,会产生一个redo entry 来标志着个txn commit的动作~
数据库恢复的时候,先前滚到最后的redo。然后如果没有发现前面事务的commit标记,就说明这个事务没有提交,就回滚这个事务
回复

使用道具 举报

千问 | 2010-1-4 13:39:56 | 显示全部楼层
具体内容,你dump redo 来看吧
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行