ITPub博客

首页 > 数据库 > 国内数据库 > Oracle11g到DM8数据库迁移之数据库对象和数据量比对

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

原创 国内数据库 作者:zhaobw_0626 时间:2021-08-09 19:16:19 0 删除 编辑

       最近在用户现场迁移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)替换为真实场景中的模式名。



更多资讯请上达梦技术社区了解: 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69978967/viewspace-2712586/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: DM8数据备份还原
请登录后发表评论 登录
全部评论

注册时间:2020-07-13

  • 博文量
    6
  • 访问量
    7257