DDL会产生两次commit操作

简介: DDL操作为什么需要两次commit操作呢?

以下是我做的测试,在ddl完成之前 就提交了。
1.、会话1上的操作
SQL> select * from t2;
no rows selected
SQL> insert into t2 values(1,'gyj1');
1 row created.
SQL> drop table t200;
drop table t200
*
ERROR at line 1:
ORA-00942: table or view does not exist
2、会话2上的操作
SQL> select * from t2;
ID NAME


1 gyj1

在会话2能看到会话1中插入数据。

3、继续实验
drop table t2;
select current_scn from v$database;
create table t2 (id int,name varchar2(10));
select current_scn from v$database;

SQL> select current_scn from v$database;
create table t2 (id int,name varchar2(10));
select current_scn from v$database;

CURRENT_SCN

2030192
SQL>
Table created.
SQL>

CURRENT_SCN

2030199
SQL> select object_id from dba_objects where object_name='T2' and wner='GYJ';

OBJECT_ID

76443

alter system dump logfile '/u01/app/oracle/oradata/ocp/redo01.log' scn min 2030192 scn max 2030199;
从日志中转存的部分内容:
REDO RECORD - Thread:1 RBA: 0x0000b5.000000fb.0058 LEN: 0x0060 VLD: 0x01
SCN: 0x0000.001efa71 SUBSCN: 1 12/06/2012 07:33:07
CHANGE #1 TYP:0 CLS:33 AFN:3 DBA:0x00c00100 OBJ:4294967295 SCN:0x0000.001efa70 SEQ:2 OP:5.4 ENC:0 RBL:0
ktucm redo: slt: 0x001d sqn: 0x000004db srt: 0 sta: 9 flg: 0x2 ktucf redo: uba: 0x00c0028d.01a2.03 ext: 2 spc: 7832 fbi: 0

REDO RECORD - Thread:1 RBA: 0x0000b5.00000100.01bc LEN: 0x0170 VLD: 0x01
SCN: 0x0000.001efa72 SUBSCN: 1 12/06/2012 07:33:07
CHANGE #1 MEDIA RECOVERY MARKER SCN:0x0000.00000000 SEQ:0 OP:24.1 ENC:0
REDO RECORD - Thread:1 RBA: 0x0000b5.00000102.0010 LEN: 0x00dc VLD: 0x05
SCN: 0x0000.001efa75 SUBSCN: 1 12/06/2012 07:33:07
(LWN RBA: 0x0000b5.00000102.0010 LEN: 0001 NST: 0001 SCN: 0x0000.001efa73)
CHANGE #1 TYP:0 CLS:33 AFN:3 DBA:0x00c00100 OBJ:4294967295 SCN:0x0000.001efa71 SEQ:1 OP:5.4 ENC:0 RBL:0

在这两个scn之间有两个OP=5.4的操作,即commit操作。

相关文章
|
8月前
|
SQL Oracle 关系型数据库
DDL、DML和DCL的区别与理解
DDL、DML和DCL的区别与理解
248 1
DDL、DML和DCL的区别与理解
|
7月前
|
SQL 数据库
DML的有关方法,练习
DML的有关方法,练习
|
5月前
|
SQL 存储 安全
DDL、DML、DCL 的区别
【8月更文挑战第1天】
260 0
DDL、DML、DCL 的区别
|
7月前
|
SQL 关系型数据库 MySQL
MySQL数据库——事务操作-begin-commit-rollback
MySQL数据库——事务操作-begin-commit-rollback
62 1
|
8月前
|
SQL 数据库 索引
|
SQL 关系型数据库 MySQL
【MySQL】利用binlog回滚DML操作
数据库运行过程中难免会发生误操作,特别是在测试环境 开发人员或测试人员有时会误删或者更新错误某些数据。这时可以用binlog闪回DML操作。
413 0
|
存储 Oracle 关系型数据库
关于Oracle存储过程中是否需要写commit的问题
关于Oracle存储过程中是否需要写commit的问题
|
SQL 关系型数据库 MySQL
DDL--DML
DDL--DML
148 0
|
SQL 存储 缓存
MySQL Online DDL增量DML记录和回放的源码实现
中分析并验证了MySQL进行在线创建索引时,不会因为执行时间过长或业务压力较大,在回放增量DML时加锁时间过久而对业务造成严重影响,本文从MySQL 8.0.19源码出发,分析MySQL是如何实现的。同时也确认是否在回放DML时会报duplicate key。 核心处理流程和对象 增量DML处理流程主要在http://row0log.cc中。 /** @file row/row0log.cc Modification log for online index creation and online table rebuild Created 2011-05-26 Marko Make
222 0
|
SQL 存储 关系型数据库