ORACLE UNDO/REDO
Yushan Bai
目前仍热衷于ORACLE数据库,博客内容基本为原创,欢迎指点交流!
展开
-
一次ORA-01578 NOLOGGING 坏块的处理
问题: 某系统的ORACLE数据库从Windows迁移到LINUX环境后,又搭建了DATAGUARD备机,以及设置了正常的RMAN备份策略。正常运行几天后,业务人员反馈程序使用时报错,截图中是ORA-01578错误,第一反应好可怕,但是想到有RMAN备份及DG备机,也不太担心。**问题排查:**开始接入系统进行检查,对于坏块的检查,使用RMAN的会快一点,对于检查出的坏块,通过视图vdatab...原创 2020-06-04 21:25:46 · 556 阅读 · 0 评论 -
使用logmnr对其它用户的操作执行日志挖掘的四个对比实验
日志挖掘概念:结论如下:执行日志挖掘操作的可以使用DBA用户或SYSDBA用户,不能使用普通用户。日志挖掘可以查看到当前用户自己的操作,也可以查看到其它用户的操作。其它用户已经执行但未提交的操作,也可以查到。可以挖掘到其它DBA用户或SYSDBA用户的操作。-----有些语句的返回提示如下面一句连接后的“Connected.”这种为节约篇幅,删了。不要质疑哈哈。BYS@原创 2013-09-11 08:34:10 · 1857 阅读 · 0 评论 -
非IMU模式下一条update语句产生REDO RECORD条数的探究
注意:每个实验前最好做下日志切换,更详细方法及本篇DUMP的TRACE文件见下载附件,或者另一篇博客 :非IMU模式下DML语句产生的REDO日志内容格式解读实验1:BYS@ bys3>select * from dept; DEPTNO DNAME LOC---------- -------------- -------------原创 2014-01-07 10:32:57 · 2047 阅读 · 1 评论 -
REDO日志的删除添加实验
1.重做日志组及MEMBER:重做日志组可以控制了日志文件不至于太大,提高系统效率。每个重做日志文件REDOLOG叫做成员 MEMBER,多个重做日志文件为一个重做日志组GROUP,ORACLE数据库正常工作需要至少两个重做日志组,默认一个组只有一个成员。LGWR在任意时刻只能写一组重做日志组,LGWR后台 进程正在写的重做日志组称当前CURRENT重做日志组,LGWR把完全相同的原创 2013-09-08 09:34:18 · 4934 阅读 · 0 评论 -
重现ORA-01555的示例
ORA-01555是因为回滚段中的原数据镜像被覆盖,一致性读时查询时不到。模拟ORA-01555错误 :1.配置一个不能自动扩展的UNDO表空间这里要提前创建一个UNDO表空间,大小5M并且表空间不支持自动扩展。所需语句是:create undo tablespace test1_undo datafile '/u01/app/oracle/oradata/bys001/tes原创 2013-09-08 10:01:04 · 1784 阅读 · 0 评论 -
IMU模式下DML语句所产生的REDO RECORD格式解读
总结:IMU模式下DML语句所产生的REDO RECORD格式,是先有操作的 change rector,再有向向UNDO段头的事务表写事务信息的change rector,再提交操作的change rector后,才进行把数据修改前值放到UNDO的change rector。注意:实验中INSERT和DELETE是先后做的,UPDATE操作是其它时间做的,UPDATE实验时的表数据和另两步不原创 2014-01-08 21:58:29 · 2842 阅读 · 1 评论 -
非IMU模式下DML语句产生的REDO日志内容格式解读
实验内容:非IMU模式下DML语句产生的REDO日志内容格式解读最详细的解读是UPDATE的。实验环境准备11G中默认是开启IMU特性的,做此实验需要关闭此特性。alter system set "_in_memory_undo"=false;alter system set "_in_memory_undo"=true; --实验结束后使用此语句改回使用IMU特性。修改原创 2014-01-06 23:27:13 · 1933 阅读 · 1 评论 -
深入解析Oracle IMU模式下的REDO格式
借老郭的上图,说明一下:UPDATE语句从第一步到第九步的对应是:第一步:将更改的数据存放到PGA 第二步:将BUFFER CACHE中旧数据拷贝到共享池的私有IMU buffer第三步:将PGA中修改后的数据存放到private redo第四步:修改buffre cache中的数据注:我实验了做到这一步,执行update语句后迅速(3秒内)的进行DUMP REDO LO原创 2014-01-09 12:24:43 · 4412 阅读 · 1 评论 -
redo相关概念
重做redo 撤销undo是ORACLE的重要特性,用认保证事务的可恢复性和可回退性。REDO用来保证数据库的事务可以被重演,使得故障后,数据可以被恢复1.REDO功能通过三个组件实现:redolog buffer ,位于SGA中,是一块循环使用的内存区域,保存数据库变更的相关信息并以重做条目redoentries形式存储,包括INSERT,UPDATA,DELETE,CREATE,A原创 2013-09-07 19:44:05 · 2079 阅读 · 0 评论 -
logmnr挖掘中间有DDL的操作示例-对于执行DDL前的操作无法挖掘
对于执行DDL前的操作无法挖掘,但是不报错。只显示DDL语句及DDL之后的DML操作。更多logmnr挖掘DML操作,详见:使用logmnr使用logmnr对其它用户的操作执行日志挖掘的四个对比实验BYS@ bys3>select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER原创 2013-12-19 14:50:28 · 1688 阅读 · 0 评论 -
普通表与临时表DML操作会产生REDO/UNDO对比与分析
ORACLE临时表介绍:ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。Oracle临时表分为 会话级临时表 和 事务级临时原创 2013-09-17 08:39:34 · 3123 阅读 · 0 评论 -
DDL操作产生UNDO和REDO的示例
DDL操作产生产生UNDO和REDO。原因是:delete 需要把每个有数据的数据块读出来,写上delete标记, 另外还要把delete的内容拷一份到undo,还要把它的动作记到redo。而truncate , 就是在系统表(或者tablespace bitmap)里面,把相关的extent 的 标记未未使用,另外把dba_objects(obj$)里的data_object_id换一下原创 2013-09-07 20:35:41 · 2677 阅读 · 0 评论 -
切换UNDO表空间--DDL使事务自动提交
一个事务只能被指派被一个undo段服务,一个事务生成的撤销数据无法被分配到多个undo段中,但是一个undo段可以为多个事务服务。今天一个切换UNDO表空间时,发现未提交的数据,在切换UNDO表空间后被自动提交了。原因:切换undo表空间相当于执行ddl语句,会自动提交事务。1.会话1:执行DML操作后不提交,同时修改UNDO表空间。SQL> set time on16:2原创 2013-09-07 20:58:10 · 1537 阅读 · 0 评论 -
利用logminer,恢复delete误删除操作的数据
使用DBA账户操作1.打开追加日志SQL>alter database add supplemental log data;SQL>select supplemental_log_data_min from v$database;SUPPLEME--------YES2.记录DML操作前后的SCNSQL> select * from test; A原创 2013-09-07 21:08:02 · 2452 阅读 · 0 评论 -
创建并切换UNDO表空间
ORACLE数据库只有一个当前UNDO有空间。1.查看当前UNDO表空间SQL> show parameter undo;NAME TYPE VALUE------------------------------------ ----------- --------------------------原创 2013-09-07 20:42:00 · 1686 阅读 · 0 评论 -
一致性读和current read演示
1.一致性读:假设从9点时发出一条查询,此查询语句运行了一分钟,那么查询的是9点时表内信息,如果在9时至9:00:30之间修改并提交了数据,查询语句扔查询结果仍是9点时的表内的数据。实验步骤如下:在SESSION1中发出查询语句(增加条件延长查询语句运行时间) 在SESSION2中修改并提交。(需要在SESSION1查询语句运行期间进行) SESSION1:9:26:5原创 2013-09-07 21:20:26 · 1507 阅读 · 0 评论 -
延迟块清除的产生和避免示例
实验一:延迟块清除的产生1.先构建一个1万条数据的表create table test as select * from dba_objects where rownum2.使用循环来插入数据。初始数据1W条,则每次循环后表内数据量依次是2,4 ,8 ,16 ,32 ,64 ,128, 256,512,1024,需要10次循环。beginfor i in 1 .. 10 l原创 2013-09-07 21:26:27 · 1321 阅读 · 0 评论 -
undo相关概念及初始化参数
1.UNDO:是为了保证数据库中多个用户间的读一致性和能够回退事务,ORACLE提供一种机制,能够为变更的数据构造一种前镜像berore image数据(保存修改之前的旧值),以保证能回滚或撤销对数据库所作的修改,同时为数据恢复以及一致性读服务。ORACLE自动管理的撤销undo表空间,automatic undo management,AUM如修改某条数据update emp set s原创 2013-09-07 19:53:17 · 1512 阅读 · 0 评论 -
对比DML操作产生的REDO及UNDO大小
结论:相同数据量的数据操作:INSERT产生最少REDO;UPDATA首先的REDO居中;DELETE产生最多REDO。DELETE产生UNDO最多,UPDATE次之,INSERT产生UNDO最少。DML操作数据未COMMIT时,无查询到REDO信息变化-----这是10G后Oracle的新特性:IMU。Redo先放在共享池中,Commit时,再传入Log Buffer原创 2013-09-07 20:19:06 · 2597 阅读 · 0 评论 -
Oracle更新一条数据然后提交的整个经过(包括undo,redo,后台进程)
语句:UPDATE TEST SET A=999 WHERE A=1;1.首先UPDATE操作开始前数据块读入DATA BUFFER CACHE(或者已经在内存中)。然后在修改前将要修改的数据放到回滚段(或者已经在内存中),回滚段发生变化,产生REDO。REDO BUFFER-演示tranID file block row column value test 4原创 2013-09-07 20:03:16 · 3393 阅读 · 0 评论