Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较两个Perl数据库_Perl_Comparison_Compare_Teradata - Fatal编程技术网

比较两个Perl数据库

比较两个Perl数据库,perl,comparison,compare,teradata,Perl,Comparison,Compare,Teradata,我想使用Perl比较驻留在两台不同服务器上的两个不同的TERADATA数据库的数据结构/数据类型/长度 有可能这样做吗 添加了详细信息 我试图比较这两个数据库(一个PROD)和(一个DEV)环境数据库,比较PROD和DEV并记录差异,我无法导出到平面文件,然后导入到另一个位置,因为要复制的数据的大小超过500gb 我首先尝试比较PROD和DEV服务器数据库,然后根据模式/数据类型/长度的差异,从PROD导入到DEV中。您是否尝试过查询模式、表和列上的元数据(并将它们放入相关的数据结构中)——例如

我想使用Perl比较驻留在两台不同服务器上的两个不同的TERADATA数据库的数据结构/数据类型/长度

有可能这样做吗

添加了详细信息 我试图比较这两个数据库(一个PROD)和(一个DEV)环境数据库,比较PROD和DEV并记录差异,我无法导出到平面文件,然后导入到另一个位置,因为要复制的数据的大小超过500gb


我首先尝试比较PROD和DEV服务器数据库,然后根据模式/数据类型/长度的差异,从PROD导入到DEV中。

您是否尝试过查询模式、表和列上的元数据(并将它们放入相关的数据结构中)——例如:

{
   schema1=>
       [{table11=>[[column111,datatype111],[column112,datatype112],...],
        table12=>[[column121,datatype121],...
       ]
    ,schema2=>[{table21=>[[column211,datatype211],[column212,datatype212,...],
        etc...]
}

然后遍历每个数据结构,比较每个模式、表和列?除非您提供更多的细节,否则我认为您不会得到更多有用的答案。

您是否尝试过查询模式、表和列上的元数据(并将它们放入相关的数据结构中)——例如:

{
   schema1=>
       [{table11=>[[column111,datatype111],[column112,datatype112],...],
        table12=>[[column121,datatype121],...
       ]
    ,schema2=>[{table21=>[[column211,datatype211],[column212,datatype212,...],
        etc...]
}

然后遍历每个数据结构,比较每个模式、表和列?除非你给我们提供更多的细节,否则我认为你不会得到更多有用的答案。

我想到了几种不同的方法。如果两个数据库都可以从一台机器访问,那么可以将数据构建到Perl数据结构中,然后使用Test::More::is_deeph()检查差异


如果两个数据库都不可访问,则如上所述在Perl中构建数据,然后使用data::Dumper将结构打印到文件中。确保使用Sortkeys选项,以及在两次运行中使用相同的缩进/纯度等选项。最后,将两个输出文件复制到同一个位置,并在其上运行“diff”。

想到了几种不同的方法。如果两个数据库都可以从一台机器访问,那么可以将数据构建到Perl数据结构中,然后使用Test::More::is_deeph()检查差异


如果两个数据库都不可访问,则如上所述在Perl中构建数据,然后使用data::Dumper将结构打印到文件中。确保使用Sortkeys选项,以及在两次运行中使用相同的缩进/纯度等选项。最后,将两个输出文件复制到同一位置,并在其上运行“diff”。

根据您的问题,用纯Perl执行此操作可能很困难,但可以使用。假设MySQL位于
DB.YOURDOMAIN.COM
DB2.YOUROTHERDOMAIN.COM

my $db1 = DBI->connect(
     'DBI:mysql:database=DATABASE1;host=DB.YOURDOMAIN.COM;port=3306',
     'username', 'password',
     );
my $db2 = DBI->connect(
     'DBI:mysql:database=DATABASE1;host=DB2.YOUROTHERDOMAIN.COM;port=3306',
     'username', 'password',
     );
这将为您提供两个连接。从这里开始,您只需执行查询即可完成任务:

my $sth = $dbh->prepare("show tables");
while (my $row = $sth->fetchrow_hashref) {
   my $table_name = $row->{'Tables_in_DATABASE1'};
   ## Process this particular table.
}
对于您使用的各个表
说明

my $sth = $dbh->prepare("DESCRIBE table1");
while (my $row = $sth->fetchrow_hashref) {
    my $type = $row->{'Type'}; ## 'int(12)' for example.
    ## Process from there.
}

根据您的问题,在纯Perl中执行此操作可能很困难,但可以使用。假设MySQL位于
DB.YOURDOMAIN.COM
DB2.YOUROTHERDOMAIN.COM

my $db1 = DBI->connect(
     'DBI:mysql:database=DATABASE1;host=DB.YOURDOMAIN.COM;port=3306',
     'username', 'password',
     );
my $db2 = DBI->connect(
     'DBI:mysql:database=DATABASE1;host=DB2.YOUROTHERDOMAIN.COM;port=3306',
     'username', 'password',
     );
这将为您提供两个连接。从这里开始,您只需执行查询即可完成任务:

my $sth = $dbh->prepare("show tables");
while (my $row = $sth->fetchrow_hashref) {
   my $table_name = $row->{'Tables_in_DATABASE1'};
   ## Process this particular table.
}
对于您使用的各个表
说明

my $sth = $dbh->prepare("DESCRIBE table1");
while (my $row = $sth->fetchrow_hashref) {
    my $type = $row->{'Type'}; ## 'int(12)' for example.
    ## Process from there.
}

从一个数据库导出数据库,然后在另一个数据库上导入(以不同的名称)。然后您可以编写php来比较您使用的是哪个数据库?您可能必须找到DBMS提供的用于比较的任何内置方式,以及在perl脚本中实现该内置机制的任何内置方式。然后您可以编写php来比较您使用的是哪个数据库?您可能必须找到DBMS提供的任何内置方式来进行比较,并在perl脚本中实现该内置机制。请参阅上面添加的信息并提供示例脚本(如果可能)。非常感谢。请参阅上面添加的信息并提供示例脚本(如果可能)。非常感谢。在这种情况下,是的,您需要查询元数据。具体操作方式取决于您的RDBMS。上面添加了TERADATA。在这种情况下,您需要查找如何在TERADATA数据库中查询元数据。在这种情况下,您需要查询元数据。具体如何做取决于您的RDBMS。上面添加了TERADATA。在这种情况下,您需要查找如何在TERADATA数据库中查询元数据。好的。。。我不熟悉Teradata,但是根据这个()您可能有一些等效的命令。还有DBI的Teradata驱动程序:好的。。。我不熟悉Teradata,但是根据这个()您可能有一些等效的命令。然后是DBI的Teradata驱动程序: