|
我们知道,一个事务在未被提交 前,其做的任何修改都 是可以被回滚(Rollbac k)的。这些回滚数据就被
放到回滚段(Rollback Segment)上。此外,一致性读(Read Consistency)、数据库恢复(Recover)都会用
到回滚段。
任何数据块的修改都会被记录在回滚段中,甚至 Redo Log 也会产生回滚记录。当任何一个非只读(只有
查询)的事务开始时,oracle 会自动为其指定下一个可用的回滚段。事务中任何数据变化都被写入回滚段
中。如果事务回滚,Oracle 根据回滚段中的回滚记录将 buffer cache 中的“脏”数据恢复,释放回滚段空间。
当事务被提交,由于要保证一致性读,Oracle 并不会立即释放回滚段中的数据,而是会保留一段时间。
2.1.6. Archive Log
当 Oracle 的 Archive Log 模式被激活后,所有 Redo Log 数据都会被写入 Archive Log 文件中以便日后进行
恢复。当发生日志组切换时,ARCn(Arc hive 进程,可以存在多个)进程就会将 Redo Log 文件拷贝到指
定存储目录中去,成为 Archive Log 文件。
2.1.7. Direct-Pa th Insert
这里,我们还要介绍一种特殊的写操作——Direc t-Path Insert(直接路径插入)。Direct -Path Insert 通过直接
在表中已存在的数据后面添加数据,直接将数据写入数据文件中,而忽略掉了 Buffer Cache。
我们前面提到,为了能在意外时恢复数据,每一个数据修改都会被记录到 Redo Log 中。然而,由于 Redo Log
需要写入到物理文件中去,是一个比较消耗性能的操作。为了提高性能,我们在批量写入数据时就可以通
过 Direct-Path Insert 的指定 NOLOGING 的方式来避免写 Redo Log。
有多种方法可以指定 Direct-Path Insert:
A.CTAS(CREATE TABLE AS SELECT)
B.SQL*Loader 指定 Direct 参数。
C.在语句中指定 APPEND 提示。
如果你觉得有用,看完后不要忘记回头顶我一个!!!
[ 本帖最后由 man26 于 2011-1-7 23:18 编辑 ] |
|