談談對Oracle處理DDL和DML語句的交易管理

來源:互聯網
上載者:User

一、先說問題

在開發過程中,遇到了Oracle DDL語句和DML語句需要在一個事務中一塊處理的情況,該方法要麼成功,要麼失敗。對於這個問題,sql server等資料庫是可以解決的,因為其能對DDL語句做復原,而oracle在執行ddl語句時會先執行commit,所以就不能對DDL語句復原了。

二、事務相關概念

1、 首先,說說資料庫對事務的相關定義:

在資料庫中事務是工作的邏輯單元 , 一個事務是由一個或多個完成一組的相關行為的 SQL 陳述式組成 , 通過事務機制確保這一組 SQL 陳述式所作的操作要麼完全成功執行 , 完成整個工作單元操作 , 要麼一點也不執行。  事務具有ACID特性(即:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)),ACID的概念在ISO/IEC 10026-1:1992檔案的第四段內有所說明(我找了半天也沒下載到這個標準,誰有的送我一份啊,呵呵)。

2、我機器的oracle版本為10g,10g對應的jdbc版本為3。看一下JDBC3有關事務概念:

JDBC3提到了事務和分散式交易。對於大家經常說的嵌套事務,沒有提及。資料庫本質上從來沒有過嵌套事務的概念,只是應用程式為了不同的目的將對事務的操作過程嵌套起來,即使是Oracle的自治事務也可劃為應用程式(預存程序或是觸發器什麼的), 從應用角度講,嵌套交易處理就是應用程式如何將應用程式層面的嵌套轉變為資料庫層面的單事務操作, 這方面Java領域的EJB,Spring提供瞭解決方案,另外提一下JTA,它提供了事務的suspend,resume功能,實質上其實資料庫事務那裡有什麼掛起什麼的概念,其僅僅是換了一個資料庫連接,這樣新的資料庫事務開始了,老的資料庫事務便不再操作,直接其被resume。)。

那麼接下來我們看看JDBC3中對事務的定義:

Transactions are used to provide data integrity, correct application semantics, and a consistent view of data during concurrent access. All JDBC compliant drivers are required to provide transaction support. Transaction management in the JDBC API mirrors the SQL99 specification and includes these concepts:
 Auto-commit mode
 Transaction isolation levels
 Savepoints

三、解決方案

要想解決一個問題,找到問題的關鍵所在,就等於成功了一半。如上所述,該問題的關鍵所在又是什麼呢?

oracle在執行ddl語句時會先執行commit,所以就不能對DDL語句進行復原。jdbc事務也不提供相關方法來進行復原(spring、ejb或許可以,但沒測試過,不好說)。

既然應用的一些架構不能提供該功能,就只能自己想辦法解決了,怎麼解決?反向操作!或許感覺有些麻煩,但不這麼做又如何呢,在操作SQL語句成功後,後邊跟著反向操作的定義(內部類派上用場了),在一個大的事務中,如果出現異常,在異常的地方把反向操作執行一把即可。再進一步,如果讓所有的DDL語句能和DML語句用不同的資料庫連接,那麼DML語句就不用反向操作了,節省了很多工作量,DML語句用事務的復原多好啊!當然這樣做的前提是,在DDL執行時,不能和DML操作的資源引起衝突,即鎖的問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.