`
itspace
  • 浏览: 985416 次
  • 性别: 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隐式游标和显式游标

    - **概念**:隐式游标是Oracle在后台自动管理的一种游标,每当执行一个DML(插入、更新、删除)或DDL语句时,系统都会自动打开、处理并关闭一个隐式游标。 - **常用隐式游标属性**: - `sql%rowcount`:返回上一...

    Oracle Certified Professional 071-fullOracle数据库12C.pdf

    提交有三种方式:显示提交(使用COMMIT命令)、隐式提交(某些DDL命令执行后自动提交)和自动提交(AUTOCOMMIT开启时,DML语句执行后自动提交)。了解这些提交类型对于理解数据库操作的事务管理至关重要。 在基本...

    oracle pl/sql编程

    - **DDL语句执行特点**:执行DDL语句前后的事务会被隐式提交。例如,如果先执行了`INSERT`语句插入数据,然后接着执行`CREATE TABLE`这样的DDL语句,那么插入的数据会被自动提交,无需手动使用`COMMIT`命令。 #### ...

    Oracle事务与锁定

    2. 执行DDL(Data Definition Language)或DCL(Data Control Language)语句,如CREATE、ALTER、GRANT等,DDL语句会隐式提交当前事务。 3. 出现错误导致事务终止。 4. 系统崩溃。 Oracle的锁定机制在事务处理中起...

    ORACLE数据库选择题.doc

    知识点:事务、隐式提交、CREATE TABLE 语句。 9. 创建视图: CREATE VIEW 语句可以创建视图,用于显示每一课的课名、课时,并按教师 ID 排序。 知识点:CREATE VIEW 语句、视图、连接查询。 10. 更新教师工资:...

    ORACLE数据库选择题.docx

    8. 未完成事务的隐式提交:在Oracle中,执行`COMMIT`命令会显式提交事务,而服务器掉电会导致所有未提交的事务被隐式提交,因为事务无法正常完成。选项C是正确的。 9. 视图的创建:创建视图时可以基于连接查询,...

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

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

    Oracle的日常基础检查,优化笔记

    值得注意的是,每次执行DDL语句后,Oracle会隐式提交当前事务。 2. DML(数据操纵语言)命令:用于查询和修改现有模式对象中的数据,包括DELETE、INSERT、SELECT和UPDATE语句,以及EXPLAIN PLAN(用于分析SQL执行...

    oracle测试题,有答案

    - **案例解析**:题目中提到的`CREATE TABLE`命令会导致未完成的事务隐式提交,这是因为DDL语句通常被视为独立的事务单元,它们的执行会自动提交之前的任何事务更改。 ### 10. 插入数据时的字符和数字数据处理 - *...

    Informix迁移至Oracle数据库的研究.pdf

    - Oracle的DML(数据操纵语言)和DDL(数据定义语言)语法与Informix不同,部分Informix的关键字和内嵌函数在Oracle中可能不被支持。例如,DML语句的写法、条件判断的表达方式等都需要相应调整。 4. **DML关键字和...

    DDL与DML

    在本文中,我们将详细讲述DDL和DML在Oracle中的使用方法。 数据定义语言(DDL) DDL是SQL的一种语言,用于定义数据库的结构,如创建、修改或删除数据库对象,例如表、索引、视图、存储过程等。DDL语句包括CREATE、...

    oracle数据操作和控制语言详解

    * TRUNCATE 是一个 DDL 语言,向其他所有的 DDL 语言一样,他将被隐式提交,不能对 TRUNCATE 使用 ROLLBACK 命令。 * TRUNCATE 将重新设置高水平线和所有的索引。 * TRUNCATE 不能触发任何 DELETE 触发器。 * 不能...

    Oracle企业面试题集锦

    根据给定的文件信息,以下是从标题、描述、标签以及部分内容中提炼出的关于Oracle的详细知识点: ### Oracle与SQL Server 2005的区别 1. **平台兼容性**:Oracle可以在多种平台上运行,而SQL Server仅限于Windows...

    Oracle与SQL Server事务处理的比较.pdf

    Oracle允许用户对DDL语句使用事务控制语句(如COMMIT或ROLLBACK),因此DDL语句的执行不会自动提交事务,这一点与SQL Server不同。 4. 锁机制的区别: Oracle和SQL Server在处理事务时的锁机制也有不同。SQL Server...

    比较详细的oracle教程

    - **事务**:理解事务的概念、ACID特性,以及如何在Oracle中管理事务,包括事务的提交、回滚和保存点的使用。 - **用户管理**:教授如何在Oracle数据库中创建和管理用户,包括授予和回收权限、角色管理等。 - **...

    完美Oracle数据库知识学习文档总汇.docx

    首先,Oracle数据库的DDL语句如CREATE、ALTER、DROP等,在执行时会自动进行隐式的COMMIT操作,这意味着DDL执行前的所有未提交更改都将被提交,无法通过ROLLBACK撤销。这是Oracle的一个特性,需要用户在执行DDL前谨慎...

    ORACLE数据库事务处理和故障恢复

    * DDL封锁(字典封锁):DDL封锁保护模式对象(如表)的定义,DDL操作将影响对象,一个DDL语句隐式地提交一个事务。 * 内部封锁:保护内部数据库和内存结构,这些结构对用户是不可见的。 五、手工的数据封锁 在...

    Oracle Streams Step by Step PPT

    逻辑变更记录(LCR)是CDC的关键概念,它记录了数据库中已提交更改的差异,无论这些更改是DDL(数据定义语言)还是DML(数据操纵语言)。LCR使得在不同环境间传输数据时能够保持语义的一致性。 配置Oracle Streams、...

    Oracle 10g 系统管理员简明教程目录

    本教程目录涵盖了 Oracle 10g 系统管理员需要掌握的知识点,包括 Oracle 10g 的安装、配置、数据库结构、SQL 语句、PL/SQL 编程等方面。 安装和配置 * Oracle 10g 的安装类型:包括 Enterprise Edition、Standard ...

Global site tag (gtag.js) - Google Analytics