回滚DDL语句对oracle数据库有何影响

作者&投稿:简泉 (若有异议请与网页底部的电邮联系)
ORACLE数据库,请问 DDL语句能回滚吗?DLL语句,会被记录在REDO日志中吗?~

不能回滚,也不会记录到redo中,10g以后如果启动了flashback, drop 语句删除的表可以从回收站找回来,truncate语句则没有办法,只能使用数据库闪回或者从有效备份当中进行恢复。

ddl语句的回滚不可以回滚

在Oracle中DDL语句将转化为修改数据字典表的DML语句。一个简单的修改表的DDL语句,会导致Oracle在后台通过递归SQL语句进行大量的查询和修改的操作。
在Oracle中,Oracle执行DDL前会发出一个COMMIT语句,然后执行DDL操作,最后再发出一个COMMIT操作。
从现在开始,假设DDL并不会自动提交,而是事务中的一部分。
那么DDL就要满足READ COMMIT隔离机制,也就是说,用户执行的DDL语句在提交前,其他用户是无法看到的。比如A用户执行CREATE TABLE T的语句,然后对T执行了一些DML。而这时其他会话是无法看到T表的。
A会话执行了ALTER TABLE T MODIFY CREATED DEFAULT SYSDATE NOT NULL,然后对T表进行了一些插入,但是没有提交。
这时B会话尝试插入T表,如果DDL语句不是事务的一部分,那么B的插入和A会话的插入之间没有冲突,但是现在情况不同,由于A执行了T表的修改,为CREATED列增加了默认值并设置为NOT NULL,而且这个修改B会话当前是看不到的,因为A并没有提交修改。这时如果B会话的插入没有提供CREATED列的值,则插入操作将被锁定。对于B而言,表结构中CREATED列仍然是可空的,因此允许插入CREATED列为空的记录,但是由于A已经设置T的CREATED列非空,且包含默认值,因此B的插入必须被锁定,否则如果A和B全部提交,A会话会发现即使执行了DDL语句,T表中仍然存在CREATED为空的记录。Oracle为了实现DDL可以回滚的功能,且实现多版本读一致性,那么就必须在DDL发生后,将修改的表锁定,避免其他会话的访问造成不一致。这会导致Oracle中出现锁升级的情况,并且严重的影响Oracle的并发性,而且会大大增加死锁产生的几率。
也许有人奇怪SQLSERVER或一些其他的数据库为什么可以实现DDL语句的回滚。事实上,前面提到了Oracle也是有能力实现DDL回滚的,只是这会极大的影响Oracle的并发性。要知道,Oracle的锁机制和多版本读一致性使得Oracle的并发性在所有数据库产品中首屈一指。显然为了实现DDL的回滚而损失最值得称道的并发性,Oracle认为得不偿失。其他数据库之所以可以实现,是因为这些数据库的锁机制本身就存在一定缺陷,比如大量的锁会占用系统的资源、读写操作互相阻塞、行级锁可能自动升级为表级锁。


求解一个关于sql多个or查询
select * from dede_competition where (1=i and classify like '%$classify%') or (1=i and level like '%$level%') or (1=i and reward like '%$reward%') or (1=i and `ability` like '%$ability%') or (1=i and `DDL` like '%$ddl%') ORDER BY `signupTime`...

sql查询中的in或者or怎么用的呢?
假定表名test,列id是数值类型。用同一个字段的多 个值作为条件来查询可以使用in或者or。具体语句如下:1、select * from test where id in (1,2,3)go 2、select * from testwhere id= 1orid =2orid=3 go 布局化查询言语(Structured Query Language)简称SQL(发音:\/es kju el\/ S-Q-L),...

大学生现状之ddl战神
Digital Deadlines, or DDL, stand for the final submission date of tasks or assignments. It's often referred to as the driving force, reflecting the intense pressure it creates among students.Imagine this scenario: A professor assigned homework for next Monday, granting a full week to...

sql = "Truncate Table ImportFacultyInformation"如果执行正确应该返 ...
MSDN 解释是 executeUpdate Method (java.lang.String) (SQLServerStatement)An int that indicates the number of rows affected, or 0 if using a DDL statement.so理论上应该是0(truncate table 是ddl语句).没装java,老兄随便建个表去试试看不就知道了。参考资料:http:\/\/msdn.microsoft.com\/en-...

SQL 语法速成手册(干货满满,建议收藏!)
DDL 的主要功能是 定义数据库对象 。DDL 的核心指令是 CREATE 、 ALTER 、 DROP 。数据操纵语言(Data Manipulation Language, DML)是用于数据库操作,对数据库其中的对象和数据运行访问工作的编程语句。DML 的主要功能是 访问数据 ,因此其语法都是以 读写数据库 ...

oracle中的trigger有几种啊
create or replace trigger trigger_name instead of insert|update|delete on view_name for each row 三、DDL触发器:当发出CREATE、ALTER、DROP、TRUNCATE命令时会触发已定义好的DDL触发器,这种触发器可以用来监控某个用户或整个数据库的所有对象的结构变化 语法:create or replace trigger trigger_name...

sql中或如何表示(sql中?)
是用or来表示的。语法:Boolean_expression或Boolean_expression 当在一个语句中使用多个逻辑运算符时,将两个条件组组合起来,并在and运算符之后计算or运算符,尽管括号的特殊使用可能会改变计算顺序。结构化查询语言(SQL)是一种特殊用途的编程语言,是一种数据库查询和编程语言,用于访问数据和查询、...

oracle触发器如何使用
3.DDL触发器: 触发事件时数据库对象的创建和修改4.数据库事件触发器:定义在数据库或者模式上,由数据库事件触发3)组成:1.触发事件:引发触发器被触发的事件 DML语句(INSERT, UPDATE, DELETE语句对表或视图执行数据处理操作)、DDL语句(如CREATE、ALTER、DROP语句在数据库中创建、修改、删除模式对象)...

怎样判断java的statement执行create table 等ddl时是否成功
DDL statement.Returns:either the row count for INSERT, UPDATE or DELETE statements, or 0 for SQL statements that return nothing 它的返回值:如果是dml,返回影响的行数,如果是ddl,返回0.但是它会抛异常的啊,所以如果删除\/创建失败,它就会抛一个 SQLException 的异常,你要捕获并处理这个异常!

PL\/SQL基础的执行部分
DDL语句与EXECUTE IMMEDIATE一起使用或者是DBMS_SQL调用。执行一个PL\/SQL块SQL*PLUS中匿名的PL\/SQL块的执行是在PL\/SQL块后输入\/来执行,如下面的例子所示:declarev_comm_percent constant number:=10;beginupdate empset comm=sal*v_comm_percentwhere deptno=10;endSQL> \/PL\/SQL procedure ...

普宁市13879309645: ORACLE数据库,请问 DDL语句能回滚吗?DLL语句,会被记录在REDO日志中吗?
播建伏甲: 不能回滚,也不会记录到redo中,10g以后如果启动了flashback, drop 语句删除的表可以从回收站找回来,truncate语句则没有办法,只能使用数据库闪回或者从有效备份当中进行恢复.

普宁市13879309645: oracle中DDL DML指什么? -
播建伏甲: DDL create table 创建表 alter table 修改表 drop table 删除表 truncate table 删除表中所有行 create index 创建索引 drop index 删除索引 当执行DDL语句时,在每一条语句前后,oracle都将提交当前的事务.如果用户使用insert命令将记录插入到数...

普宁市13879309645: 如果实现oracle中DDL语句的回滚 -
播建伏甲: ddl语句的回滚不可以回滚

普宁市13879309645: 关于oracle里面delete,trancate,drop的区别和用法.详细点.谢谢 -
播建伏甲: delete:属于DML语句,删除数据库中指定条件的数据,相应语法:DELETE table WHERE a = b;执行该语句后,需要使用commit进行提交才能反映到数据库中TRUNCATE:(不是trancate)属于DDL语句,快速的删除指定表的所有数据,...

普宁市13879309645: oracle中DDL和DML能在同一事务并一同回滚吗
播建伏甲: DML比如create table,不能使用事务管理,不能回滚.

普宁市13879309645: Oracle中的回滚? -
播建伏甲: 就三条回滚了 第二条: INSERT INTO nn values('abc','aaa'); 第三条: INSERT INTO nn values('def','ddd'); 第四条: INSERT INTO nn values('ghi','ggg'); 因为create table想回滚也回滚不了 当上边这条未提交,直接回滚的话,就相当于数据库没有写入

普宁市13879309645: 高手指点oracle闪回表有哪些限制?
播建伏甲: 用百度能搜大把出来吧....使用的限制和注意事项:1. 使用闪回表语句恢复表到出现人为或应用错误事件之前的状态.2. 可以闪回到过去多长时间取决于系统中undo数据量的大小.3. 并且oracle数据库无法恢复通过DDL语句修改了结构的表...

普宁市13879309645: oracle中的保存点是什么 -
播建伏甲: SCN是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字.Oracle数据库中一共有4种SCN分别为 : 系统检查点SCN: 系统检查点SCN位于控制文件中,当检查点进程启动时(ckpt),Oracle就把系统检查点的SCN存储到控制文...

普宁市13879309645: DDL语句为什么不能回滚 -
播建伏甲: 这个问题来自: 在Oracle中DDL语句将转化为修改数据字典表的DML语句.一个简单的修改表的DDL语句,会导致Oracle在后台通过递归SQL语句进行大量的查询和修改的操作. 在Oracle中,Oracle执行DDL前会发出一个COMMIT语...

普宁市13879309645: oracle如何确保前面执行的DML 操作物理存储到数据库中? 如何取消前面执行的DML操作? -
播建伏甲: 对数据库做数据写盘,即将数据存储到物理磁盘中: SQL> alter system checkpoint;如果前面的DML操作没有commit,则可以直接rollback;如果提交了,只能用闪回了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网