印象中oracle是支持4种标准的隔离级别的,但是今天在测试中,发现oracle只支持读提交和串行化2个隔离级别,汗!!
SQL> alter session set isolation_level =read uncommitted;
alter session set isolation_level =read uncommitted
*
第 1 行出现错误:
ORA-02183: 有效选项: ISOLATION_LEVEL { SERIALIZABLE | READ COMMITTED }
默认情况下oracle是非自动提交的。
SQL> show autocommit;
autocommit OFF
可以设置autocommit on开启自动提交。
在非默认提交下,一些情况下可以导致隐式提交。
session A;
SQL> insert into test values(22);
已创建 1 行。
SQL> grant select on test to public;
授权成功。
sessionB
SQL> select * from test;
MONEY
22
12
在b会话中看到了A中插入的值,另外a在insert后,exit会话后,也是隐式提交的。但是如果a是insert后,直接关闭了cmd窗口,那么这个记录是没有提交的。
一些隐式提交的条件,这些隐式提交的命令要与dml操作在一个session中执行。
隐式提交:用SQL命令间接完成的提交为隐式提交。这些命令是:ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。