比较不同服务器中的表的DDL - Teradata,

时间:2014-10-03 06:44:12

标签: compare teradata ddl

我有一个数据库,其中有大约600个表在SIT中使用。当我们转向UAT时,我需要比较SIT中与UAT中不同的表(列名,数据类型,大小)的DDL。我正在考虑以下方法。 (我没有PERM空间)我更喜欢在数据库中执行此操作,而不是导出数据并通过unix进行比较。

第一种方法:

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;  

如何使用select语句生成上述DDL以插入上述值?

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

如果我可以得到SHOW TABLE的结果,即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; 

第二种方法:

从sit和uat中选择dbc.columns中的所有列信息,如下所示,并在excel表中进行比较(SIT,UAT在2个不同的服务器中)。

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助手将上面的select结果导入到volatile表中(我没有运行实用程序的权限)并执行如下的减号操作。

sel * from SIT minus sel * from UAT;

但是,我觉得通过SQL助手导入将大约187000行加载到2个易失性表中是一个耗时的过程。另外,我应该在上面的select over dbc.columns期间使用zeroifnull或其他函数克服null处理,以避免任何进一步的问题。

请您澄清两种方法的利弊或更可行的解决方案吗?

1 个答案:

答案 0 :(得分:0)

Teradata Studio 15.00

Teradata最终替代现有SQL Assistant现在提供了一个比较对象向导,用于比较相同或不同Teradata数据库之间的对象。它将对象DDL并排放置在Compare Editor中并突出显示差异。这可以从Teradata的Developer Exchange免费下载。 (需要注册 - 免费)

第三方架构比较工具

有些供应商提供的IDE工具能够跨数据库环境执行模式比较。有些需要为他们的工具提供免费评估期,而有些则需要您预先许可产品。 AquaFold和AtanaSuite是我想到的两种选择。

显示SHOW TABLE输出的BTEQ

您可以将SHOW TABLE输出编写脚本以导出为SIT和UAT的平面文件。使用平面文件,您可以使用Notepad ++(开源Windows文本编辑器)等工具,它可以执行两个文件的比较并突出显示差异。这可能是比前两个更好的选择,在处理需要比较的大量对象时可能不那么友好。

另一个选择,如果您使用UNIX脚本(sed,awk,正则表达式)的精明,您可以编写脚本来执行比较。根据您对脚本的掌握程度,您的里程可能因此选项而异。

实施更好的版本控制流程

我相信很多商店可以做得更好,特别是随着企业数据环境的复杂性增加。面临的挑战是,在处理数据库中的DDL更改时,许多软件工程师所依赖的工具并不那么友好。您会发现有一些知名环境的产品,如SQL Server和Oracle。 Teradata更少。除此之外的工具可能更多是一个过程问题,因为它与许多商店的发布管理有关。

希望这有帮助。

相关问题