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



我有一个数据库,其中大约有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值,这样我就可以按照下面的方式LEFT JOIN来找出差异。

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; 

第二种方法:

从sat和uat中选择dbc.columns中的所有列信息,如下所示,并在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助手将上面的select result导入到volatile表中(我没有运行实用程序的权限),并执行下面的减号操作。

sel * from SIT minus sel * from UAT;

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

你能解释一下这两种方法的利弊,或者任何更可行的解决方案吗?

Teradata Studio 15.00

Teradata最终取代了现有的SQL Assistant,现在提供了一个比较对象向导,可以在相同或不同的Teradata数据库之间比较对象。它将对象DDL并排放置在比较编辑器中,并突出显示差异。这可以从Teradata的开发者交易所免费下载。(需要注册-免费)

第三方架构比较工具

有些供应商提供的IDE工具能够跨数据库环境执行模式比较。有些提供免费的工具评估期,而另一些则要求您提前获得产品许可。AquaFold和AtanaSuite是我脑海中的两个选项。

SHOW TABLE输出的BTEQ导出

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

另一种选择是,如果你精通UNIX脚本(sed、awk、正则表达式),你可能也可以编写一些脚本来为你执行比较。您的里程数可能因此选项而异,具体取决于您对脚本编写的彻底程度。

实施更好的版本控制流程

我相信许多商店可以更好地处理这些问题,尤其是随着企业数据环境的复杂性增加。挑战在于,软件工程师所依赖的许多工具在处理数据库中的DDL更改时并不那么友好。您会发现,有些产品适用于一些更知名的环境,如SQL Server和Oracle。Teradata更少。撇开工具不谈,这可能更多的是一个过程问题,因为它与许多商店的发布管理有关。

希望这能有所帮助。

最新更新