- 论坛徽章:
- 0
|
数据库非归档模式,在sys用户下面
有三个日志组,
group1 current
group2 inactive
group3 inactive
此时查询
select * from scott.emp;
7369 SMITH CLERK 7902 17-DEC-80 800 20;
然后更新数据,不提交。
update scott.emp set sal=820;
接下来用rman执行脱机备份整个数据库
run{
shutdown immediate;
startup mount;
backup database format '/home/oracle/cold_backup.dbf';
alter database open;
}
此时查询
select * from scott.emp;
7369 SMITH CLERK 7902 17-DEC-80 800 20;
接下来用rman执行还原整个数据库
run{
shutdown abort;
startup mount;
restore database;
recover database;
alter database open resetlogs;
}
问题:
为什么此时查询
select * from scott.emp;
7369 SMITH CLERK 7902 17-DEC-80 800 20;
sal=800,而不是820?
上面的描述是我自己做的实验。。。
结果不是我想要的。
但是搞不懂原因
我的理解是。我执行update后,有个事务但是不提交,缓冲块已经脏了,
此时执行冷备份,shutdown immediate这个命令会启动完全检查点,执行干净关闭,把脏块写进数据文件里面(不管是否提交),
而冷备份不会备份联机重做日志文件。也就是说这个重做流已经丢失。
最后还原整个数据库时,是一个一致备份,可以重置日志,打开数据库。
我的理解就是数据文件已经被写入了未提交事务数据。应该显示这个脏数据sal=820;
可是结果却是sal=800,还是正确的数据。为什么?抓狂了 |
|