国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle不同數據庫間的對比分析腳本

2024-08-29 13:34:34
字體:
來源:轉載
供稿:網友
     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 其中程序要求輸入對象屬主,也就是對比那個用戶,這里是repadmin用戶。然后是需要對比的實例聯接名稱,這里是ora_zs和ora_sjjk,最后給出對比報告。 附:PL/SQL程序腳本清單:
set linesize 80set verify offset feedback offset pause off;accept obj_owner prompt '對象屬主(模式): 'accept inst_1_dblink prompt '第一個實例的數據庫聯接名稱 (包括 @):'accept inst_2_dblink prompt '第一個實例的數據庫聯接名稱 (包括 @):'clear breaksttitle offset heading offcolumn datetime noprint new_value datetimecolumn inst_code1_name noprint new_value inst_code1_namecolumn inst_code2_name noprint new_value inst_code2_nameselect to_char(sysdate,'MM/DD/YY') datetime from dual/select global_name inst_code1_name from global_name&inst_1_dblink/select global_name inst_code2_name from global_name&inst_2_dblink/set feedback onset heading onset newpage 0ttitle col 25 '對象比較結果報告單' -col 53 '日期: ' datetime -skip 1 col 60 '頁: ' sql.pno -skip 1 col 10 '屬主: ' obj_owner -skip 1 center '對象在 &inst_code1_name 但不在 &inst_code2_name ' -skip 2column object_type format a15 heading '對象類型';column object_name format a35 heading '對象名稱';column status format a10 heading '狀態';SELECT OBJECT_NAME, OBJECT_TYPE, STATUSFROM ALL_OBJECTS&inst_1_dblinkWHERE OWNER = UPPER('&OBJ_OWNER')AND OBJECT_TYPE != 'SYNONYM'MINUSSELECT OBJECT_NAME, OBJECT_TYPE, STATUSFROM ALL_OBJECTS&inst_2_dblink
WHERE OWNER = UPPER('&OBJ_OWNER')AND OBJECT_TYPE != 'SYNONYM'ORDER BY 2,3/ttitle col 25 '對象比較結果報告單' -col 53 '日期: ' datetime -skip 1 col 60 '頁: ' sql.pno -skip 1 col 10 '屬主: ' obj_owner -skip 1 center '對象在 &inst_code2_name 但不在 &inst_code1_name ' -skip 2SELECT OBJECT_NAME, OBJECT_TYPE, STATUSFROM ALL_OBJECTS&inst_2_dblinkWHERE OWNER = UPPER('&OBJ_OWNER')AND OBJECT_TYPE != 'SYNONYM'MINUSSELECT OBJECT_NAME, OBJECT_TYPE, STATUSFROM ALL_OBJECTS&inst_1_dblinkWHERE OWNER = UPPER('&OBJ_OWNER')AND OBJECT_TYPE != 'SYNONYM'ORDER BY 2,3/
二、對比兩個不同模式下表定義的差異 運行方法和前面第一個腳本一樣,這里不再詳述。下面是一個運行實例結果: 對象屬主(模式): db_zgxt 第一個實例的數據庫聯接名稱 (包括 @):@ora_cx 第一個實例的數據庫聯接名稱 (包括 @):@ora_zs 附:PL/SQL程序腳本清單:
SET PAGESIZE 60SET LINESIZE 110SET VERIFY OFFSET FEEDBACK OFFSET PAUSE OFFACCEPT obj_owner PROMPT '對象屬主(模式): 'ACCEPT inst_1_dblink PROMPT '第一個實例的數據庫聯接名稱 (包括 @):'ACCEPT inst_2_dblink PROMPT '第一個實例的數據庫聯接名稱 (包括 @):'clear breaksTTITLE offSET HEADING offCOLUMN datetime noprint new_value datetimeCOLUMN inst_code1_name noprint new_value inst_code1_nameCOLUMN inst_code2_name noprint new_value inst_code2_nameSELECT TO_CHAR(SYSDATE,'MM/DD/YY') datetime FROM DUAL/SELECT global_name inst_code1_name FROM global_name&inst_1_dblink/SELECT global_name inst_code2_name FROM global_name&inst_2_dblink/SET feedback ONSET HEADING ONTTITLE COL 30 '對象比較結果報告單' -COL 63 '日期: ' datetime -SKIP 1 COL 68 '頁: ' sql.pno -SKIP 1 COL 10 '屬主: ' obj_owner -SKIP 1 CENTER '&inst_code1_name 和 &inst_code2_name 之間表定義的差別明細' -SKIP 2COLUMN table_name format a25 HEADING '表名';COLUMN column_name format a25 HEADING '列名';COLUMN data_type format a8 HEADING '數據類型';COLUMN data_length format 999 HEADING '長度';COLUMN data_precision format 999 HEADING '精度';COLUMN nullable format a5 HEADING '是否可空';COLUMN inst_code format a15 HEADING '實例';SELECT '&inst_code1_name' inst_code, table_name, column_name, data_type, data_length, data_precision, nullableFROM all_tab_COLUMNs&inst_1_dblinkWHERE owner = UPPER('&obj_owner')AND table_name in (SELECT table_name FROM all_tables&inst_2_dblinkWHERE owner = UPPER('&obj_owner'))MINUSSELECT '&inst_code1_name' inst_code, table_name, column_name, data_type, data_length, data_precision, nullableFROM all_tab_columns&inst_2_dblinkWHERE owner = UPPER('&obj_owner')UNIONSELECT '&inst_code2_name' inst_code, table_name, column_name, data_type, data_length, data_precision, nullableFROM all_tab_COLUMNs&inst_2_dblinkWHERE owner = UPPER('&obj_owner')AND table_name in (SELECT table_name FROM all_tables&inst_1_dblinkWHERE owner = UPPER('&obj_owner'))MINUSSELECT '&inst_code2_name' inst_code, table_name, column_name, data_type, data_length, data_precision, nullable
FROM all_tab_columns&inst_1_dblinkWHERE owner = UPPER('&obj_owner')ORDER BY 2, 3/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 年辖:市辖区| 全椒县| 柞水县| 古田县| 剑河县| 仙桃市| 南京市| 大庆市| 京山县| 确山县| 宣化县| 郎溪县| 万宁市| 遂宁市| 天祝| 新闻| 固阳县| 邢台县| 莎车县| 克拉玛依市| 黄龙县| 拉孜县| 赣州市| 石林| 新泰市| 漾濞| 九龙城区| 桑植县| 兰坪| 皮山县| 巴楚县| 平安县| 墨脱县| 云阳县| 鄂托克前旗| 怀集县| 通河县| 天全县| 石城县| 宁安市| 锡林浩特市|