第一部分问题:
据我所知,Oracle DB 中的 RedoLog 用于保护数据库免受数据丢失。我理解 RedoLog 的一个例子是在事务中断后恢复数据。例如,如果突然断电。但我无法理解的是,DB 是否会在下次启动时直接应用 RedoLog 中的更改?DB 是否会将在 RedoLog 中的更改直接提交到 DataFiles。或者它只是启动事务并更改缓冲区中的块并将其标记为脏块?但是,谁会将这些脏块提交到 DB 文件中呢?如何继续被中断的事务?
第二部分问题: 如果我有以下 DML 在事务中: 假设
我刚刚在TEST_TABLE中增加了A的值。所以,如果事务失败,并且我的DML语句被写入RedoLog,它将在下次打开数据库时被还原。但是,如果另一个DB实例在数据文件中更改了A的值,那么重做更改向量在RedoLog中会怎样(实际上可能发生吗,在ORACLE RCA中可能吗?)它会增加旧值还是新值?对于我的糟糕的英语表示歉意。感谢任何答案。
第二部分问题: 如果我有以下 DML 在事务中: 假设
id = 1
的值为 a = 1
UPDATE test_table
SET a = (SELECT a FROM test_table WHERE id = 1) + 1
WHERE id = 1;
我刚刚在TEST_TABLE中增加了A的值。所以,如果事务失败,并且我的DML语句被写入RedoLog,它将在下次打开数据库时被还原。但是,如果另一个DB实例在数据文件中更改了A的值,那么重做更改向量在RedoLog中会怎样(实际上可能发生吗,在ORACLE RCA中可能吗?)它会增加旧值还是新值?对于我的糟糕的英语表示歉意。感谢任何答案。
UPDATE test_table SET a = a + 1 WHERE id = 1 ;
- ypercubeᵀᴹ