Oracle redo,
What is it?
Oracle redo日志是由 redo record组成的,而redo record记录的是oraclesegment中单个block的改变,把这些改变记录下来,用于重建oracle 数据库,redo record还有记录的是:undo segment中的block的改变,redo也可以用来恢复oracle undosegment。
Commit之后的信息是什么?
Commit是提交:
从逻辑上来说,把你对数据库的修改提交给数据库,告诉数据库这些改动我提交了,表里的改变确定了。
物理上来说发生了什么?
1:oracle会把redo log buffer中的信息都sync到disk中,把redo的信息都同步到硬盘中
2:oracle会自动生成一个SYSTEM CHANGENUMBER ,记录数据库的改变
下面是另外一个问题:commit是什么?
我的理解是:如果你对数据库做了一个修改,update或者是insert,如果你不commit的话,你的修改结果只能在你的这个session中看到,如果你退出了这些修改就作废了,没用了
为什么是这样?
这样又延伸出了另外的一个问题,commit之后并没有如我之前认为的一样,把缓存中的东西都sync到disk中,而是把redo log buffer中的内容sync到disk中,然后生成一个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中的undo和rollback可以结合在一块
而oracle的redo和commit可以很有效的结合在一块
这真的非常奇怪,而且很有意思。Veryfunny stuff
And another thing ,transaction
Do you have to define a transaction beforeyou are there ?
Transaction和这些DML的关系式什么?
Transaction和SCN的关系式什么?
Transaction?如果我没有定义transaction的话,那么rollback又会有什么问题?
Lots and lots of things
转载于:https://blog.51cto.com/yuangeqingtian/1364236