2014-10-03 52 views
0

我在其中也有在SIT中使用大約600表的數據庫。在我們轉向UAT時,我需要比較SIT中與UAT中不同的表(列名,數據類型,大小)的DDL。我正在研究以下方法。 (我沒有PERM空間)我寧願在數據庫中這樣做,而不是導出數據並通過unix進行比較。在不同的服務器比較DDL表 - Teradata的,

第一種方法:

create volatile table SIT (s_tablename varchar(30), s_ddl varchar(30000)) on commit preserve rows; 
create volatile table UAT (u_tablename varchar(30), u_ddl varchar(30000)) on commit preserve rows; 
DATABASE SIT; 

我怎麼能產生上述的DDL與SELECT語句插入到上面的數值?

1 SELECT 'SHOW TABLE ' || TRIM(TABLENAME) from dbc.tables where databasename='SIT' and tablekind='T' order by tablename; 

如果我能有顯示錶即所得的,DDL與表名一起,我可以運行一個直接插入選擇到SIT表(類似下圖)

insert into SIT select trim(tablename <DDL_OF_TABLE> from dbc.tables where databasename='SIT' and tablekind='T' 

進入UAT的數值是合適的,這樣我就可以按照下面的方式加入它們以找出差異。

select sit.s_tablename, uat.u_tablename from sit left join uat on sit.s_tablename = uat.u_tablename and sit.s_ddl=uat.u_ddl where uat.u_tablename is NULL; 

第二種方法:

選擇從dbc.columns來自兩個如下坐和UAT所有列信息並且將它們在Excel工作表(SIT,UAT有兩種不同的服務器)進行比較。

SEL TABLENAME, COLUMNNAME, COLUMNFORMAT, COLUMNTYYPE, COLUMNLENGTH, NULLABLE, DECIMALTOTALDIGITS, DECIMALFRACTIONALDIGITS FROM DBC.COLUMNS WHERE DATABASENAME='SIT'ORDER BY TABLENAME, COLUMNNAME 

2A) -

由於所得是巨大的(187000行 - 周邊600表),Excel表單正在非常長進行比較,並給所得到的。我可以將上述查詢分解成塊並進行比較。但是,我試圖在一部分中實現這一點。

2B) -

還有一個選項是導入上述選擇結果爲通過SQL助理易失性表(我沒有訪問運行實用程序),並下文做了減法運算。

sel * from SIT minus sel * from UAT; 

但是,我覺得這是一個耗時的過程,通過SQL助手導入將大約187000行加載到2個易失性表中。另外,在上面的dbc.columns選擇過程中,我應該使用zeroifnull或其他函數來克服null處理,以避免出現任何進一步的問題。

能否請您闡述雙方的方法或任何更可行的解決方案的利弊?

回答

0

Teradata的工作室15.00

Teradata的最終取代現任SQL助手現在提供了一個比較對象嚮導來比較相同或不同的Teradata數據庫之間的對象。它將對象DDL並排放置在比較編輯器中,並突出顯示差異。這可以從Teradata的開發人員交換免費下載。(需要註冊 - 不收費)

第三方架構比較工具

有供應商提供的IDE工具,跨數據庫環境執行模式比較的能力。有些工具爲他們的工具提供免費評估期,而另一些則要求您事先許可產品。 AquaFold和AtanaSuite是想到的兩個選項。

SHOW表輸出的BTEQ出口

您可以編寫腳本顯示錶輸出要導出爲SIT和UAT平面文件。使用平面文件,您可以使用Notepad ++(開源Windows文本編輯器)等工具,它們可以執行兩個文件的比較並突出顯示差異。這可能是一個比前兩個更好的選擇,在處理需要比較的大量對象時可能不那麼友好。

如果與UNIX腳本您的精明(SED,AWK,正則表達式),另一種選擇你可能腳本的東西爲你執行比較爲好。根據您使用腳本的全面程度,您的里程可能會因此而異。

實施更好的版本控制流程

東西,我相信許多商店可以做得更好,尤其是在處理作爲其企業數據環境的複雜性增加。挑戰在於,在處理數據庫中的DDL更改時,許多軟件工程師依賴的工具並不那麼友好。你會發現有一些更好的已知環境的產品,比如SQL Server和Oracle。 Teradata更少。除了這些工具可能更多是一個流程問題,因爲它涉及許多商店的發佈管理。

希望這會有所幫助。