q3256 发表于 2018-9-12 13:02:54

oracle REDO和UNDO·

  Oracle redo,
  What is it?
  Oracle redo日志是由 redo record组成的,而redo record记录的是oraclesegment中单个block的改变,把这些改变记录下来,用于重建oracle 数据库,redorecord还有记录的是: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中,而是把redolog buffer中的内容sync到disk中,然后生成一个scn。
  但是你在select 做查询的时候,数据是同步的,但是此时硬盘并没有同步,这说明是在BUFFER CACHE中取得block,取得的数据。
  Oracle undo
  和oracleredo是相同的,有一个oracle undorecord记录对oracle database的修改。
  记录在undosegment中,和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

页: [1]
查看完整版本: oracle REDO和UNDO·