Сравните две базы данных Perl - PullRequest
0 голосов
/ 27 июля 2011

Я хочу сравнить структуры данных / типы данных / длины двух разных TERADATA баз данных, расположенных на двух разных серверах , используя Perl

Возможно ли это сделать?

Добавлены детали Я пытаюсь сравнить эти две базы данных (одна PROD) и (одна DEV) базы данных среды и сравнить PROD с DEV и записать различия, я не могу экспортировать в плоский файл, а затем импортировать в другое место, потому что размер копируемые данные превышают 500 ГБ.

Сначала я пытаюсь сравнить PROD с базами данных сервера DEV, затем с различиями в схемах / типах данных / длине импортировать в DEV из PROD.

Ответы [ 3 ]

2 голосов
/ 27 июля 2011

Выполнение этого в чистом Perl, по вашему вопросу, может быть трудным, но это может быть сделано с использованием DBI. Предполагая 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.
}

Для отдельных таблиц вы можете использовать describe:

my $sth = $dbh->prepare("DESCRIBE table1");
while (my $row = $sth->fetchrow_hashref) {
    my $type = $row->{'Type'}; ## 'int(12)' for example.
    ## Process from there.
}
1 голос
/ 27 июля 2011

Несколько разных методов приходят на ум.Если обе базы данных доступны с одного компьютера, вы можете встроить данные в структуры данных Perl, а затем использовать Test :: More :: is_deeply () для проверки различий.

Если базы данных недоступны,затем создайте данные в Perl, как указано выше, и затем используйте Data :: Dumper для печати структуры в файл.Обязательно используйте опцию Sortkeys, а также тот же отступ / Purity / etc.варианты на обеих трассах.Наконец, скопируйте два выходных файла в одно и то же место и запустите на них 'diff'.

0 голосов
/ 27 июля 2011

Вы пытались запрашивать метаданные на схемах, таблицах и столбцах (и помещать каждый в соответствующую структуру данных) - например:

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

и затем обойти каждую структуру данных, сравнивая каждую схему, таблицу и столбец? Если вы не дадите нам больше подробностей, я не думаю, что вы получите гораздо больше полезного ответа.

...