首页 > 代码库 > redo
redo
--创建redosize的视图
create or replace view redo_size
as
select value
from v$mystat, v$statname
where v$mystat.statistic# = v$statname.statistic#
and v$statname.name = ‘redo size‘;
--如何估计重做的量
·估计“事务”的大小——需要修改多少数据。
·是否增加 10~20%的额外开销,取决于要修改的行数,行越多,额外开销越少。
·对 UPDATE,此值加倍。
--NOLOGGING 操作:
·会产生一定数量的重做,用来保护数据字典。根本没有办法避免这些重做的产生,虽然可以比
以前明显地少,但是仍然有一些。
·NOLOGGING 不能防止后面的操作产生重做。
--在 NOLOGGING 模式中可能执行的操作是:
·索引创建和 ALTER(重建)。
·经/*+APPEND*/提示,使用“直接路径插入”批量的 INSERT。
·LOB 操作(大对象更新不必记录到日志)。
·用 CREASE TABLE AS SELECT 创建表。
·各种 ALTER TABLE 操作,例如 MOVE 和 SPLIT。
·TRUNCATE(但不需要 NOLOGGING 语句,因为总是在 NOLOGGING 模式中执行)。
--临时表 应该把临时表作为 INSERT 和 SELECT 操作的首选对象
·INSERT 产生很少甚至没有回滚/重做。
·DELETE 对临时表和对正常表产生同样多的重做。
·UPDATE 对临时表产生的重做只有 UPDATE 对正常表产生的重做的一半。
--dbms_logmnr分析重做日志
--什么操作产生最多/最少的撤消
。INSERT 将产生最少数量的撤销,因为 Oracle 所要做
的是记录要“删除”的行 ID。UPDATE 一般是第二位(在大多数情况),所要做的是记录修改过的字节,
最常见的情况足 UPDATE 整行数拥的一小部分。一般,DELETE 产生最多的撤消。
--SET TRANSACTION SQL 语句被用来“选择”事务要使用的回滚段。
--“ORA-01555: Snapshot too old”错误原因 set transaction use rollback segment rbs_small;
·对在系统上执行的工作,回滚段太小。
·程序产生交叉 COMMIT(实际上是上面情况的一种变种)。
·块清除。
redo