oracle 比較兩個用戶下表結構差異


oracle11g,現有2個用戶a和b,想要比較兩個用戶下表結構的差異

 

1.確保這兩個用戶都能訪問元數據表:user_tab_columns

2.如果以a登陸,在a下創建DBLINK,以訪問b用戶的元數據表user_tab_columns(Oracle里面,視圖SYS.USER_TAB_COLS和SYS.USER_TAB_COLUMNS都保存了當前用戶的表、視圖和Clusters中的列信息。通過檢索這兩個表,可以方便的獲取到表的結構。)

創建語句:

create public database link  linkB connect to linkBusername identified by linkBpasswd
   using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = x.x.x.x)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME =jk1)
))';

linkB為dblink名稱 ,linkBusername用戶名  linkBpasswd密碼

3.執行sql

select * from (
select t1.TABLE_NAME,t1.COLUMN_NAME,t1.DATA_TYPE from user_tab_columns t1 where not exists(
select 1 from (user_tab_columns@linkB) t2 where t1.TABLE_NAME=t2.TABLE_NAME
and t1.DATA_TYPE=t2.DATA_TYPE and t1.COLUMN_NAME=t2.COLUMN_NAME
)) t ;

也可以選取需要的幾個字段進行查詢。進行order by

 

可以利用Oracle的這個特性,做數據庫的升級維護工作。
比如我們要重構一張表,增加xx字段。普通的DDL語句一般都這么寫沒問題:

Sql
alter table A add (xx varchar2(255)) ;
然后如果我們做的好一點,還要求這個升級腳本是可以重復執行的。那怎么辦呢?
可以寫一個sql,邏輯是先到user_tab_columns去查詢這張表是否有xx字段,如果沒有,就執行上面這句sql語句。否則如果已經存在就不動


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM