`
itspace
  • 浏览: 959079 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle ddl隐式提交注意点

阅读更多
今天在测试中意外发现Oracle ddl隐式提交需要注意的地方。我们都知道,在同一个会话中,ddl执行之前,会隐式进行commit操作。但之前的理解一直局限于这个ddl操作成功,之前的事务才隐式提交,但今天所做的测试,看来并非如此。
场景1:
Oracle ddl通过语法检查,但对象不存在。
在一号会话中:
引用
SQL> select * from zhoul;

         I NAME
---------- --------------------
         1 bbb
         2 bbb
         3 bbb


SQL> update zhoul set i=1*8 where i=1;

1 row updated.

发布一条符合ddl语法的语句,只是表格yuiyiuyiuyui不存在
引用
SQL> drop table yuiyiuyiuyui;
drop table yuiyiuyiuyui
           *
ERROR at line 1:
ORA-00942: table or view does not exist

在二号会话中查看事务已经提交:
引用
SQL> select * from zhoul;

         I NAME
---------- --------------------
         8 bbb
         2 bbb
         3 bbb

经过以上测试,可以看出对于ddl语句,只要经过语法检查,还会进行隐式提交。
场景2:
Oracle ddl通过语法检查,但对象没有相应权限
在一号会话中:
引用
SQL> select * from zhoul;

         I NAME
---------- --------------------
         1 bbb
         2 bbb
         3 bbb

SQL> select count(*) from sys.testddl;

  COUNT(*)
----------
        10

SQL> update zhoul set i=1*8 where i=1;

1 row updated.

没有drop sys.testddl对象权限
引用
SQL> drop table sys.testddl;
drop table sys.testddl
               *
ERROR at line 1:
ORA-01031: insufficient privileges

在二号会话中查看事务已经提交:
引用
SQL> select * from zhoul;

         I NAME
---------- --------------------
         8 bbb
         2 bbb
         3 bbb

场景3:
如果ddl语句不通过语法检查,那会出现什么情况呢?
在一号会话中:
引用
SQL> select * from zhoul;

         I NAME
---------- --------------------
         1 bbb
         2 bbb
         3 bbb

SQL>
SQL>  update zhoul set i=1*8 where i=1;

1 row updated.

发布一条不符合语法的ddl语句
引用
SQL> drop tablw dss;
drop tablw dss
     *
ERROR at line 1:
ORA-00950: invalid DROP option

在二号会话中可以看到并没有进行隐式提交。

引用
SQL> select * from zhoul;

         I NAME
---------- --------------------
         1 bbb
         2 bbb
         3 bbb


综上所述:
ddl总是提交在它之前正在进行的工作,从伪代码角度来讲,ddl进行如下处理:
begin 
    commit;
     parse the ddl --verify privileages and syntax
  begin
    do_the_ddl;
    commit;
    exception
   when others then
    rollback;
    end;
end;
分享到:
评论

相关推荐

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    《Oracle 从入门到精通》中的视频教程和PPT资料。 Oracle 11G从入门到精通视频的PPT 第1章-Oracle 11g数据库简介 认识Oracle 11g 回忆Oracle的产品版本 学习Oracle 11g的新特性 第2章-Oracle 11g的安装与测试...

    ORACLE11G宝典.rar 是光盘里面的内容,书太厚咧没法影印啊

     《Oracle11g宝典》以Oracle提供的示例数据库为背景,从基本原理、理论提高、实际操作、经验策略、应用开发等方面,结合命令行方式、开发工具的使用、管理工具的使用、Oracle与Windows之间的关系等知识点,按照学习...

    Oracle数据库表的基本操作以及空值问题的解决

    truncate:清空数据+隐式提交 2)DCL:数据控制语言 grant:授权 revoke:回收 3)DQL:数据查询语言 select:查询 4)DML:数据操纵语言,对数据起作用 insert:增添数据 delete:删除数据 update:修改数据

    Oracle8i_9i数据库基础

    第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...

    Oracle9i的init.ora参数中文说明

    说明: 确定查询是否获取表级的读取锁, 以防止在包含该查询的事务处理被提交之前更新任何对象读取。这种操作模式提供可重复的读取, 并确保在同一事务处理种对相同数据的两次查询看到的是相同的值。 值范围: TRUE | ...

    Oracle数据完整性和锁机制简析

    本课内容属于Oracle高级课程范畴,内容略微偏向理论性,但是与数据库程序开发和管理、优化密切相关;另外本课的部分内容在前面章节已经涉及,请注意理论联系实际。事务 事务(Transaction)从 通讯的角度看:是用户...

    Oraclet中的触发器

    在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块,不过有一点不同的是,触发器是隐式调用的,并不能接收参数。 触发器优点 (1)触发器能够实施的检查和操作比主键和外键约束、...

    PL/SQL 基础.doc

    2) Oracle客户端工具访问Oracle服务器的操作语言; 3) Oracle对SQL的扩充; 4. PL/SQL的优缺点 优点:1) 结构化模块化编程,不是面向对象; 2) 良好的可移植性(不管Oracle运行在何种操作系统); 3) 良好的可...

    数据库系统概论自己版.xmind

    事务:是在数据库应用中完成单一逻辑功能的操作集合 SQL标准规定当一条SQL语句被执行,就隐式地开始了一个事务。 Atomicity (原子性 要么一起done要么一起滚), Consistence (一致性), Isolation (隔离性), ...

    SQL性能优化

     其次,看是否用上正确的索引了,特别复杂的 SQL 语句,当其中 where 子句包含多个带有索引的字段时,更应该注意索引的选择是否合理。错误的索引不仅不会带来性能的提高,相反往往导致性能的降低。  针对如何用...

    PLSQLDeveloper下载

    而比较用户对象功能则允许您对所选对象进行比较,将不同点可视化,并运行或保存应用必要变动的SQL脚本。 导出用户对象——该工具可以导出用户所选对象的DDL(数据定义语言)语句。您可以方便的为其他用户重新创建...

    PL/SQL Developer8.04官网程序_keygen_汉化

    而比较用户对象功能则允许您对所选对象进行比较,将不同点可视化,并运行或保存应用必要变动的SQL脚本。 导出用户对象  该工具可以导出用户所选对象的DDL(数据定义语言)语句。您可以方便的为其他用户重新创建对象...

    mysql数据库的基本操作语法

    注意:alter modify不支持一次修改多个列,但是Oracle支持多列修改 但是MySQL可以通过多个modify的方式完成: alter table user modify tel varchar(15) default '02087654321' first, modify name varchar(20) ...

    数据库基础

    第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...

Global site tag (gtag.js) - Google Analytics