现有A,B两个库,通过复制软件将A库4个用户下的所有对象复制到B库对应的用户下,
现想通过建立数据库链接的形式比对A,B两端4个用户下的表的行数是否一致,
我采用的是的如下方法:select 'select count(*) from '||table_name from user_tables 
minus
select 'select count(*) from '||table_name from user_tables@to_A当用户下的表比表多时这种方法就不合适了,很麻烦,有哪位给出一种更好的方法?

解决方案 »

  1.   

    表的行数?是指每个表的数据量吧user_tables里有个字段是记录表数据量的,拿出来比就是了。
      

  2.   

    给楼主一个函数,表名是传入参数,如果返回0,则两表数据量相等,返回1则不等.CREATE OR REPLACE FUNCTION comp_tab_rows(p_tname VARCHAR2) RETURN NUMBER AS 
      strsql1 VARCHAR2(4000); 
      strsql2 VARCHAR2(4000); 
      intcount1 NUMBER; 
      intcount2 NUMBER; 
    BEGIN 
      strsql1 := 'SELECT COUNT(*) FROM ' || p_tname;    --求本地表的数据量
      strsql2 := 'SELECT COUNT(*) FROM ' || p_tname || '@to_a'; --求远程表的数据量
      EXECUTE IMMEDIATE strsql1 INTO intcount1; 
      EXECUTE IMMEDIATE strsql2 INTO intcount2; 
      IF intcount1 = intcount2 THEN
        RETURN 0;
      ELSE
        RETURN 1;
      END IF;
    END; 

      

  3.   

    谢谢!chenqiyu\我想实现某个用户下所有表的比较怎么样好点呢?表多的话这种方法可能有点麻烦的,
      

  4.   

    我看了下user_tables视图下的num_rows表没有内容啊,显示不了表的行数
      

  5.   


    同意这样的思路,做强大一点的话,可以做的和xplan一样,用自己的一些表来做结果的收集,比如结果条数,数据结构,做的更强大的,对记录也进行比较。