2014-10-03 42 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更少。除了这些工具可能更多是一个流程问题,因为它涉及许多商店的发布管理。

希望这会有所帮助。