oracle数据库自动提交事务(autocommit)

oracle数据库自动提交事务(autocommit)为OFF,但事务自动提交了

   

oracle数据库自动提交事务(autocommit)_第1张图片

问题描述:如上图所示,以scott账号登陆,执行delete from dept where deptno=50后,再换system账号登陆,发现deptno=50的数据行已经被删除了,而show autocommit=OFF;

原因:切换用户,用的是connect命令,是会提交事务的。

解决方法:再打开一个控制台sqlplus用另一用户登录啊。在一个sqlplus不可能用多个session的。如图

oracle数据库自动提交事务(autocommit)_第2张图片



附加知识:

提交数据有三种类型:
显式提交、隐式提交及自动提交。下面分别说明这三种类型。
1、显式提交:用COMMIT命令直接完成的提交为显式提交。其格式为:SQL>COMMIT;
2、隐式提交:用SQL命令间接完成的提交为隐式提交。这些命令是:ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
3、自动提交:若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:SQL>SET AUTOCOMMIT ON;

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

在sqlplus里的话,可以设置环境变量
set autocommit on
不过太频繁的提交也不好的。提交一次LGWR就要写一下LOG。

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

追问

    那么ora11g中那个控制台的运行环境怎么配置、使用?

    回答

    不用配置啊。默认时autocommit 为off,但当你用数据定义语言DDL (即第二种隐式提交命令时),即使autocommit 为off也是会提交事务的。如果你想回到提交事务之前的某个点,可设savapoint,然会用rollback to savepoint。

    在你的问题补充我看出问题来,你切换用户,应该用的是connect命令,是会提交事务的。其实你完全可以再打开一个控制台sqlplus用另一用户登录啊。在一个sqlplus不可能用多个session的

附加:

事务要对对象进行某类操作,则先要申请获取该对象对应的锁(什么锁类型 对应允许事务对对象进行什么类操作) 各类操作对应锁类型叠加组合   事务结束释放自己在对象上锁 类型叠加组合   其他


事务在该对象上锁 类型叠加组合还在          事务A获取该对象对应的锁时,即该对象被(事务A)锁定,其他事务就不能修改该对象


DDL语句,即在当前还处于活动(或说是执行)的事务上自动创建开启一个隐式事务并执行(手动)提交(语句)


DML语句,即ocistmtexecute函数中的参数mode为oci_commit_on_success时则在当前还处于活动(或说是执行)的事务上自动创建开启一个隐式事务并执行(手动)提交(语句),ocistmtexecute函数


中的参数mode不为oci_commit_on_success时则在当前还处于活动(或说是执行)的事务上执行该DML语句并等待用户输入执行(手动)提交(语句)。
注释:
判断ocistmtexecute函数中的参数mode为oci_commit_on_success时则在当前还处于活动(或说是执行)的事务上是佛自动创建开启一个隐式事务?
先ocitransbegin()显示创建开启一个事务
后执行DML语句,ocistmtexecute函数中的参数mode为oci_commit_on_success
再后执行DML语句,ocistmtexecute函数中的参数mode不为oci_commit_on_success,看该语句是否出错.


错了,说明前一个DML提交了该显示事务,自己并没有创基一个隐式事务。

DDL语句,即ocistmtexecute函数中的参数mode写死不为oci_commit_on_success

DML语句,即ocistmtexecute函数中的参数mode没有写死

命令set autocommit on实际是修改ocistmtexecute函数中的参数mode的值,所以当你用数据定义语言DDL (即第二种隐式提交命令时),即使autocommit 为off也是会提交事务的。


一个会话下的一个事务内的select语句可以查看本事务对数据的该表,一个会话下可以有多个事务


参考:

http://wenku.baidu.com/link?url=aLEOPfmUStSvYaAvpyb65zQZlgQEhavhzVX27N_58V4rnAPq82YFtqT_7PBU-_1lg1gteC5xBXfRXF34L5t8x4bfeydTFrnOEVrhswpbgyi&pn=51

第8章 oracle数据操作与事务控制


你可能感兴趣的:(oracle数据库自动提交事务(autocommit))