【问题标题】:Compare DDL of tables in different servers - Teradata,比较不同服务器中表的 DDL - Teradata,
【发布时间】:2014-11-28 05:49:47
【问题描述】:

我有一个数据库,其中在 SIT 中使用了大约 600 个表。当我们转向 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; 

第二种方法:

从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 助手将上述选择结果导入 volatile 表中(我无权运行实用程序)并执行以下减号操作。

sel * from SIT minus sel * from UAT;

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

您能否说明这两种方法的优缺点或任何更可行的解决方案?

【问题讨论】:

    标签: compare teradata ddl


    【解决方案1】:

    Teradata Studio 15.00

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

    第三方架构比较工具

    有些供应商提供的 IDE 工具能够跨数据库环境执行架构比较。有些为其工具提供免费评估期,而另一些则要求您预先获得产品许可。 AquaFold 和 AtanaSuite 是我想到的两个选项。

    BTEQ 导出 SHOW TABLE 输出

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

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

    实施更好的版本控制流程

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 2021-07-02
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多