Oracle ddl隱式提交注意點
之前我對於ddl的隱式提交也僅限於ddl操作成功,則隱式提交。看了這篇文章,然後試了一下( Oracle 10.2.0.5.0 - 64bit),確如文章中所述。MARK~ |
來自:http://itspace.iteye.com/blog/1000379
文章分類:資料庫今天在測試中意外發現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;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23650854/viewspace-697662/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql隱式提交事務transaction一點筆記MySql筆記
- 【DDL】DDL的隱式commit和自治事務MIT
- DDL操作的自動提交
- 執行oracle DDL語句要注意的問題Oracle
- 【DDL】DDL執行過程及其隱式COMMIT行為的探查與演示MIT
- 【隱式轉換】注意隱式轉換將導致索引無法使用索引
- oracle 隱式金鑰Oracle
- Oracle 隱式轉換Oracle
- Oracle隱式引數Oracle
- 再論執行oracle DDL語句要注意的問題Oracle
- 開發者提交產品前需要注意的幾個點
- mysql 5.5 lock tables與隱式事務提交commitMySqlMIT
- DML, DDL操作的自動提交問題
- Oracle10g 使用注意點Oracle
- Oracle vs PostgreSQL,研發注意事項(2)-DDL語句與事務OracleSQL
- Oracle的months_between(date1,date2)函式注意點Oracle函式
- Oracle使用cursor for隱式遊標Oracle
- oracle匯出DDLOracle
- oracle顯式授權和隱式授權Oracle
- SSL證書提交申請稽核後要注意的幾點事項
- 分散式服務介面設計注意點分散式
- 自定義函式索引使用及其注意點函式索引
- 3.0 ORACLE移植到MYSQL改造注意要點OracleMySql
- Linux上安裝oracle的注意點LinuxOracle
- ORACLE DDL觸發器Oracle觸發器
- oracle ddl 觸發器Oracle觸發器
- 通過JavaScript定義函式的注意點JavaScript函式
- oracle資料隱式轉換規則Oracle
- MySQL和Oracle中的隱式轉換MySqlOracle
- sybase遷移oracle的一些注意點Oracle
- oracle資料遷移注意點(結合lzgaj)Oracle
- oracle獲取ddl指令碼Oracle指令碼
- Oracle 獲取ddl語句Oracle
- 為Oracle配置DDL複製Oracle
- oracle追蹤誤操作DDLOracle
- Oracle DDL 執行過程Oracle
- css注意點CSS
- Oracle 10g 邏輯Standby 建立及注意點Oracle 10g