关于Oracle数据库中的undo回滚段
程序员文章站
2022-03-26 08:05:51
...
Oracle数据库当中,关于日志与回滚那一部分,与别的数据库确实有很大的不同。为了避免在写日志的同时后台进程对日志文件的读操作,Oracle使用了单独的回滚段来记录“旧”的数据。这样可以达到并行读写的目的,整体I/O效率提高了不少,但也引入了一些问题。
最经典的莫过于ORA-01555:snapshot too old错误了。
1.什么操作产生最多的撤消?
Insert产生最小的撤消,但是应该产生相当多的redo数据。因为undo回滚面只需要记录要“删除”那些新行的id。
Update一般是第二位(通常情况下),所要做的是记录修改过的字段值,常见的情况是update整行数据的一小部分。
Delete才会产生最多的撤消,一个事务有可能就是delete一张超大的表,结果导致回滚段不够用,出现上述错误。
2.set transaction语句调用回滚段
Set transaction语句用于“选择”事务要使用的回滚段。这主要是为了对某些较大的操作能够确保有大的回滚段。对于某些特定的事务,可能有必要这么做。
若有必要的话,可以进行一个最优的设置,让回滚段扩展到一定大小后缩小为原来大小,因为不必拥有一个特别的“大回滚段”。
上一篇: ASP注入详细命令40条第1/2页
推荐阅读
-
Oracle中 关于数据库存储过程和存储函数的使用
-
Oracle回滚段的概念,用法和规划及问题的解决
-
关于Oracle中sys、system和Scott用户下的数据库连接问题
-
Oracle中 关于数据库存储过程和存储函数的使用
-
查找 oracle 数据库中包含某一字段的所有表的表名
-
Oracle回滚段的概念,用法和规划及问题的解决
-
Oracle中 关于数据库存储过程和存储函数的使用
-
Oracle中 关于数据库存储过程和存储函数的使用
-
关于MySQL中的事务、回滚(rollback)、提交(commit)
-
【PL/SQL】 ROLLBACK WHEN EXECUTE A PROCEDURE Analysis & Output | oracle数据库: 回滚案例的输出与分析