actuate8 oracle11g,Oracle11g到DM8数据库迁移之数据库对象和数据量比对

最近在用户现场迁移Oracle数据库数据到达梦数据库。在迁移后需要比对源库(Oracle11g)和目标库(DM8)的数据库对象和数据量是否一致,为了提高迁移效率,在Oracle和达梦数据库上分别编写了存储过程将统计结果动态插入临时表中,具体步骤如下:

一、统计源库(Oracle)的数据对象数量和数据库表的数据量:

1、创建临时表,用于存放统计结果:

--创建数据库对象清单表

create table object_list (owner varchar2(100),object_name varchar2(100),object_type varchar2(100));

--创建数据库对象统计结果表:

create table object_count (owner varchar2(100),object_type varchar2(100),cnt int);

--创建数据库表的数据量统计表:

create table table_count (owner varchar2(100),table_name varchar2(100),cnt int);

2、遍历数据库对象,存入数据库对象清单表(object_list):

declare

v_owner VARCHAR2(100);

v_objname VARCHAR2(100);

v_objtype VARCHAR2(100);

CURSOR obj_cursor IS select owner,object_name,object_type from dba_objects where owner='HR' order by 1, 2;

begin

FOR obj_record IN obj_cursor LOOP

--DBMS_OUTPUT.PUT_LINE('用户名:'||obj_record.owner||',对象名:'||obj_record.object_name||',对象类型:'||obj_record.object_type);

insert into object_list values(obj_record.owner,obj_record.object_name,obj_record.object_type);

END LOOP;

commit;

end;

3、将数据库对象统计结果插入数据库对象统计结果表(object_count):

insert into object_count select owner,object_type,count(*) from object_list group by owner,object_type order by count(*) desc;

commit;

4、查询数据库对象清单和数据库对象统计结果:

select owner,object_type,object_name from object_list order by 1,2,3;

select owner,object_type,cnt from object_count order by cnt desc;

5、查询数据库表的数据量,插入数据量统计表(table_count):

declare

v_owner VARCHAR2(100);

v_tabname VARCHAR2(100);

stmt  VARCHAR2(200);

num_rows number;

CURSOR tab_cursor IS

select owner,table_name from dba_tables where owner='HR' order by 1, 2;

begin

FOR tab_record IN tab_cursor LOOP

--DBMS_OUTPUT.PUT_LINE('用户名:'||tab_record.owner||',表名:'||tab_record.table_name);

stmt:='select count(1) from '||tab_record.owner||'.'||tab_record.table_name;

--DBMS_OUTPUT.put_line(stmt);

execute immediate stmt into num_rows;

insert into table_count values(tab_record.owner,tab_record.table_name,num_rows);

END LOOP;

commit;

end;

6、将object_count和table_count表按照cnt倒序排序并导出为excel表格;

二、使用DMETL、DMDTS或DMDBLINK等方式进行数据迁移;

三、迁移结束后,统计目标库(DM)的数据对象数量和数据库表的数据量:

1、创建临时表,用于存放统计结果:

--创建数据库对象清单表

create table object_list (owner varchar2(100),object_name varchar2(100),object_type varchar2(100));

--创建数据库对象统计结果表:

create table object_count (owner varchar2(100),object_type varchar2(100),cnt int);

--创建数据库表的数据量统计表:

create table table_count (owner varchar2(100),table_name varchar2(100),cnt int);

2、遍历数据库对象,存入数据库对象清单表(object_list):

declare

v_owner VARCHAR2(100);

v_objname VARCHAR2(100);

v_objtype VARCHAR2(100);

begin

for rec in (select owner,object_name,object_type from dba_objects where owner='DMHR' order by 1, 2)

loop

select rec.owner,rec.object_name,rec.object_type into v_owner,v_objname,v_objtype from dual;

EXECUTE IMMEDIATE 'insert into object_list values('''||v_owner||''','''||v_objname||''','''||v_objtype||''');';

end loop;

end;

3、将数据库对象统计结果插入数据库对象统计结果表(object_count):

--truncate table object_count;

insert into object_count select owner,object_type,count(*) from object_list group by owner,object_type order by count(*) desc;

commit;

4、查询数据库对象清单和数据库对象统计结果:

select owner,object_type,object_name from object_list order by 1,2,3;

select owner,object_type,cnt from object_count order by cnt desc;

5、查询表的数据量,插入数据量统计表(table_count):

declare

v_owner VARCHAR2(100);

v_tabname VARCHAR2(100);

stmt  VARCHAR2(200);

num_rows number;

begin

for rec in (select owner,table_name from dba_tables where owner='DMHR' order by 1, 2)

loop

select rec.owner,rec.table_name into v_owner,v_tabname from dual;

stmt := 'select count(*) from "' || v_owner || '"."' || v_tabname || '"';

EXECUTE IMMEDIATE stmt INTO num_rows;

EXECUTE IMMEDIATE 'insert into table_count values('''||v_owner||''','''||v_tabname||''','''||to_number(num_rows)||''');';

end loop;

end;

6、将object_count和table_count表按照cnt倒序排序并导出为excel表格;

三、将源库和目标库中导出的excel表格合并进行手工比对或导入同一个数据库下面用语句进行关联比对,检查数据库对象是否有漏迁和重复迁移的情况;

四、提示:在具体实施过程中要将源库(Oracle)中的模式名(HR)、目标库中的模式名(DMHR)替换为真实场景中的模式名。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值