我有两个数据库:db1和db2(db2完全为空)。我正在将所有的db1复制到db2,但是进度被中断了,我需要知道还有哪些表需要复制。如何比较这两个数据库中每个表的计数,以了解仍然需要转移哪些表?
答案 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上运行它。否则两者都可以。