如何比较两个不同数据库中每个表的计数?

时间:2019-04-23 14:56:20

标签: database oracle

我有两个数据库:db1和db2(db2完全为空)。我正在将所有的db1复制到db2,但是进度被中断了,我需要知道还有哪些表需要复制。如何比较这两个数据库中每个表的计数,以了解仍然需要转移哪些表?

1 个答案:

答案 0 :(得分:1)

基本上,您需要遍历数据字典并生成一些动态SQL,该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上运行它。否则两者都可以。