Oracle redo

What is it?

Oracle redo日志是由 redo record组成的,而redo record记录的是oraclesegment中单个block的改变,把这些改变记录下来,用于重建oracle 数据库,redo  record还有记录的是:undo segment中的block的改变,redo也可以用来恢复oracle undosegment


Commit之后的信息是什么?

Commit是提交:

从逻辑上来说,把你对数据库的修改提交给数据库,告诉数据库这些改动我提交了,表里的改变确定了。


物理上来说发生了什么?

1oracle会把redo log buffer中的信息都syncdisk中,把redo的信息都同步到硬盘中

2oracle会自动生成一个SYSTEM CHANGENUMBER ,记录数据库的改变



下面是另外一个问题:commit是什么?

我的理解是:如果你对数据库做了一个修改,update或者是insert,如果你不commit的话,你的修改结果只能在你的这个session中看到,如果你退出了这些修改就作废了,没用了


为什么是这样?

这样又延伸出了另外的一个问题,commit之后并没有如我之前认为的一样,把缓存中的东西都syncdisk中,而是把redo  log buffer中的内容syncdisk中,然后生成一个scn


但是你在select 做查询的时候,数据是同步的,但是此时硬盘并没有同步,这说明是在BUFFER CACHE中取得block,取得的数据。



Oracle undo


oracleredo是相同的,有一个oracle undorecord记录对oracle database的修改。

记录在undo  segment中,和redo相似。


Undo是用来rollback,逻辑的rollback,比如说,oracle执行的对数据库的修改,逻辑上执行一个逻辑上相反的命令比如说:

Insert----delete

Update----update




Undo是如何实现这些功能的?



我现在发现了一个很有意思的东西:oracle中的undorollback可以结合在一块


oracleredocommit可以很有效的结合在一块




这真的非常奇怪,而且很有意思。Veryfunny stuff



And another thing ,transaction


Do you have to define a transaction beforeyou are there ?

Transaction和这些DML的关系式什么?

TransactionSCN的关系式什么?

Transaction?如果我没有定义transaction的话,那么rollback又会有什么问题?


Lots and lots of things