Как сравнить количество каждой таблицы в двух разных базах данных? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть две базы данных: db1 и db2 (db2 была полностью пустой). Я копировал все db1 в db2, но процесс был прерван, и мне нужно знать, какие таблицы еще осталось скопировать. Как можно сравнить количество каждой таблицы в этих двух базах данных, чтобы узнать, какие таблицы мне еще нужно перенести?

1 Ответ

1 голос
/ 23 апреля 2019

По сути, вам нужно перебрать словарь данных и сгенерировать динамический SQL, который выполняет подсчет для каждой таблицы.

Я предполагаю, что вы передаете только одну схему. Если это не так или вы не подключаетесь в качестве целевой схемы, вам нужно будет использовать ALL_TABLES вместо USER_TABLES и включить столбец OWNER в запрос на запуск и динамический запрос тоже.

declare
    n pls_integer;
    stmt varchar2(32767);
begin
     for r in ( select table_name from user_tables order by table_name ) loop
         stmt := 'select count(*) from ' || r.table_name;

         -- uncomment the next line to debug errors
         -- dbms_output.put_line(stmt); 

         execute immediate stmt into n;
         -- you may wish to only display empty tables
         -- if n = 0 then 
         dbms_output.put_line(r.table_name || ' = ' || lpad(n, 10));
         -- end if;
    end loop;
end;

Можно надеяться, что ваш процесс копирования данных был достаточно умен, чтобы фиксировать только заполненные таблицы. Если это так, вам нужно только запустить это в DB2. В противном случае на обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...