10Moracle 11g单机环境,请问oracle如何统计两个库相同用户下所有对象和表的记录数呢?
能把对象名称,对象类型,对象状态,以及表记录数列出来吗?小白不懂
刚从A库把一个用户迁移到B库下,领导想核对下表记录以及对象是否完全一致,要做个表。
现在两边库都没有接入应用,是完全静止的
-- 使用下面语句生成表的收集统计信息语句,然后再执行。
select 'exec dbms_stats.gather_table_stats(ownname=>'||''''||owner||''''||',tabname=>'||''''||table_name||''''||');' from all_tables where owner='用户';

– 最后创建2个库的dblink
– 最后做两个库的:user_tables的关联
select table_name,num_rows from user_tables;
比对表的个数及数据量,大致按这个思路就行。
评论
有用 0
SELECT '' || owner || '' owner,
object_type object_type,
count(*) obj_count
FROM dba_objects d
WHERE owner IN ('你要比对的用户')
GROUP BY owner, object_type
ORDER BY owner, object_type;
评论
有用 0收集统计信息,不一定是100%的。如果要求大概的也可以。
如果要求对比两个是不是要什么其他背后的隐情呢?怀疑恢复丢失,还是传输不一致?
评论
有用 0收集用户的操作我没有研究过,但收集表应该是100%的。
其实我这思路就是把表的记录统计到一张表里方便比对,你也可以写一个过程,每个表count(*) 一下,然后插入到一个汇总表里。
评论
有用 0数据校验的话需要从以下几个维度校验数据,利用统计信息进行统计不太准确。
1、校验用户数量。======================》确认没有遗漏的业务用户。
select username from dba_users;
2、校验用户下对象的数量。=================》确认业务用户下总对象个数一致
SELECT D.OWNER,COUNT(1)
FROM dba_objects d
WHERE d.OWNER in ('USER1','USER2')
AND NOT EXISTS (SELECT 1 FROM DBA_RECYCLEBIN B WHERE B.object_name=D.OBJECT_NAME AND D.OWNER=B.owner)
GROUP BY D.OWNER
ORDER BY D.OWNER ;
3、每个用户下各个对象的数量 ===================》确认各业务用户下各个对象类别的数量一致
select OWNER,OBJECT_TYPE,count(*) from dba_objects where owner in ('USER1','USER2')
group by OWNER,OBJECT_TYPE order by owner;
https://blog.csdn.net/baoyuhang0/article/details/110235675
4、对比表的行数。 ===========================》确认各业务用户下各表的行数一致。
参考http://blog.chinaunix.net/uid-23672197-id-3137954.html 里面的脚本,对每个用户的每个表进行校验。
评论
有用 0
墨值悬赏



