正在看的ORACLE教程是:Oracle不同資料庫間對比分析指令碼。
Oracle資料庫開發應用中經常對資料庫管理員有這樣的需求,對比兩個不同執行個體間某模式下對象的差異或者對比兩個不同執行個體某模式下表定義的差異性,這在涉及到資料庫軟體的開發應用中是經常遇到的。一般資料庫軟體的開發都是首先在開發資料庫上進行,開發到一定程度後,系統投入運行,此時軟體處於維護階段。針對在系統運行中遇到的錯誤、bug等,還有應用系統的升級,經常需要調整背景程式,資料庫開發人員經常遇到這樣一種尷尬的事情,維護到一定時期,開發庫和運行庫之間出現了一些差異,而這些差異又是什麼。還有一種情況就是如果應用在很多地方同時使用,每次的後台升級,那些資料庫作了升級,那些還沒有作升級,如果沒有詳細記錄的話,也會造成我們的尷尬事情。
另外,如果要搭建Oracle的進階表複製環境,在規劃好了複製的架構以及複製的表後,在正式將需要複製的表加入到複製組之前,一個重要工作就是檢查這些需要複製的表在主節點和主定義節點間的差異性。如果這些表定義間存在任何細微的差別,如某個欄位在一個節點是允許Null,而在另一個節點是Not Null,在將表加入到複製組時都會出現這樣的錯誤,“ORA-23309 object string.string of type string exists”,其實造成這個錯誤的原因就是複製主定義節點和主節點之間表的定義存在某些差異,系統認為是兩個不同的表,但是在兩個資料庫中具有同樣的名稱。如果需要複製的表很多,手工對比兩個節點複製表之間的差異是需要很大工作量,而且不一定準確。
業界有名的資料庫軟體輔助產品供應商美國Embarcadero公司(www.embarcadero.com)在其全套資料庫解決方案中就相應提供了一個叫Change Manager的產品,該產品一個很大的用途就是對比分析不同執行個體間的差異。Oracle公司的OEM(oracle enterprise manager)包中也相應提供了一個工具叫做DB-Diff,也用來比較兩個資料庫間的差異。
其實對於普通的資料庫開發在某種程度上說根本不需要上面提到的這些工具軟體,況且這些產品不是隨便可以得到並且使用的。針對上面提到的這些問題,提供了兩個SQL指令碼,可以輕鬆實現對比分析兩個不同資料庫執行個體間對象的差異以及表定義的差異。
一、對比兩個不同執行個體下某模式中對象差異
在運行下面的指令碼之前,必須首先建立當然資料庫使用者和需要對比的兩個執行個體間的資料庫聯結。下面是運行該指令碼的一個例子。在SQL/PLUS下運行該指令碼,系統出現如下提示:
對象屬主(模式): repadmin
第一個執行個體的資料庫聯結名稱 (包括 @):@ora_zs
第一個執行個體的資料庫聯結名稱 (包括 @):@ora_sjjk
[NextPage]
其中程式要求輸入對象屬主,也就是對比那個使用者,這裡是repadmin使用者。然後是需要對比的執行個體聯結名稱,這裡是ora_zs和ora_sjjk,最後給出對比報告。
附:PL/SQL程式指令碼清單:
二、對比兩個不同模式下表定義的差異
運行方法和前面第一個指令碼一樣,這裡不再詳述。下面是一個運行執行個體結果:
對象屬主(模式): db_zgxt
第一個執行個體的資料庫聯結名稱 (包括 @):@ora_cx
第一個執行個體的資料庫聯結名稱 (包括 @):@ora_zs
上一頁