oracle查看联机日志,测试未提交的事务会不会记录到联机日志中

一、实验目的

测试未提交的DML会不会记录到联机日志中。

二、实验步骤

1)查看日志模式

SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

SUPPLEMENTAL_LOG_DATA_MIN

-------------------------

YES

SQL>

2)插入测试数据

SQL> create table dyh.hello(id number);

SQL> insert into dyh.hello values(0);  --不提交

SQL> select * from dyh.hello;

ID

----------

0

SQL>

在另一个会话:

SQL> select * from dyh.hello;

no rows selected

3)直接ABORT关闭数据库

SQL> shutdown abort;

[oracle@dyh31 ~]$ cp /u01/app/oracle/oradata/dyh/group01.log /tmp/       这个是插入数据0的联机日志

4)启动实例

SQL> startup open;

[oracle@dyh31 ~]$ cp /u01/app/oracle/oradata/dyh/group02.log /tmp/     这个是启动成功后的当前日志

5)使用logmnr工具分析

a.分析第一个日志

BEGIN

dbms_logmnr.add_logfile(logfilename=>'/tmp/group01.log',options=>dbms_logmnr.NEW);

END;

/

begin

dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

end;

/

SELECT L.SCN,L.SQL_REDO,L.SQL_UNDO FROM v$logmnr_contents l where l.TABLE_NAME='HELLO';

842988        create table dyh.hello(id number);

843000        insert into "DYH"."HELLO"("ID") values ('0');        delete from "DYH"."HELLO" where "ID" = '0' and ROWID = 'AAACgkAAEAAAAXaAAA';

--未提交的数据记录在了日志文件中,同时记录了回滚操作

b.分析第二个日志

BEGIN

dbms_logmnr.add_logfile(logfilename=>'/tmp/group02.log',options=>dbms_logmnr.NEW);

END;

/

begin

dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

end;

/

SELECT L.SCN,L.SQL_REDO,L.SQL_UNDO FROM v$logmnr_contents l where l.TABLE_NAME='HELLO';

863133        delete from "DYH"."HELLO" where ROWID = 'AAACgkAAEAAAAXaAAA';

--open时,执行了回滚操作。

三、实验结论:

1)DDL及DML操作会立即记录到联机日志中,不管事务有没有提交,对于DML操作,还会记录回滚SQL.

2)对于异常关闭时没有提交的事务,ORACLE数据库在open之前会先进行回滚操作,回滚操作记录在open后的当前联机日志文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值