暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

Oracle11g迁移达梦DM8

原创 杨凯同学 2023-09-29
953

Oracle11g迁移达梦DM8


  1. 概述

随着国家对自主可控的日益重视,目前在党政机关、军队、大型央企、国企等行业和区域中面临越来越多的国产化,去IOE的需求,其中最难的是去ORACLE,所以公司基于安可项目对oracle迁移国产数据库达梦进行测试.

  1. 迁移过程
    1. 迁移工具、环境

迁移工具

迁移用户

源端数据库版本

目标端数控版本

DM数据迁移工具(DM自带)

LYJOA

Oracle11.2.0.4

(ip:90.90.90.17)

DM8(ip:90.90.90.18)

    1. 迁移对象

LYJOA用户下:所有表(数据量)、分区表、视图、物化视图、序列、自定义类型 触发器 同义词 存储过程、函数、包

    1. 迁移前对源端oracle数据库系统分析

分析目的:(迁移完成做数据校验)

统计oracle数据库基础信息

--统计页大小

select name,value from v$parameter where name ='db_block_size';

--查询编码格式

select * from v$nls_parameters a where a.PARAMETER='NLS_CHARACTERSET';

统计oracle数据中的对象以及表数据量

--根据指定用户统计用户下的各对象类型和数目

select object_type,count(*) from all_objects where owner='LYJOA' group by object_type;

--创建移植辅助表,统计指定用户下所有的对象并插入到辅助表中

create table oracle_objects(obj_owner varchar(100),obj_name varchar(100),obj_type varchar(50));

insert into oracle_objects select owner,object_name,object_type from all_objects where owner='LYJOA';

select * from oracle_objects;

--创建移植辅助表,统计每个表的数据量并插入到移植辅助表中

create table oracle_tables(tab_owner varchar(100),tab_name varchar(100),tab_count int);

begin

for rec in (select owner,object_name from all_objects where owner='LYJOA' and object_type='TABLE') loop

begin

execute immediate 'insert into oracle_tables select '''|| rec.owner ||''','''|| rec.object_name ||''',count(*) from '|| rec.owner || '.' || rec.object_name;

exception when others then

dbms_output.putline( rec.owner || '.' || rec.object_name || 'get count error');

end;

end loop;

end;

select * from oracle_tables;

    1. 目标端DM数据库初始化参数设置

(1)关于页大小 PAGE_SIZE。建议设置页大小为8KB,注:安装达梦库时必须设置好

(2)关于字符集CHARSET。建议采用默认值GB18030

(3)INI 参数文件:COMPATIBLE_MODE设置为2

    1. 创建用户和表空间

从Oracle移植到DM8,要求必须创建新的用户和表空间,不要把数据迁移到系统管

理员SYSDBA用户下和MAIN表空间下。

首先需要分析本次移植 Oracle 源库需要移植的是哪一个或者哪几个用户的数据,然

后分别创建这些需要移植的用户和对应的表空间;

创建表空间语句:

create tablespace "MDOA" datafile '/dm/dmdbms/data/DAMENG/MDOA.DBF' size 200 autoextend on maxsize 16777215

创建用户语句:

create user "LYJOA" identified by "******" default tablespace "MDOA"

default index tablespace "MDOA";

授权:

grant "RESOURCE","PUBLIC" to "LYJOA";

    1. 迁移步骤

(1)建立源端oracle数据库数据源:

C:\Users\yangkai\AppData\Local\Temp\1573799853(1).png

(2)建立目的达梦数据库数据源

C:\Users\yangkai\AppData\Local\Temp\1573799902(1).png

(3)选择迁移对象

C:\Users\yangkai\AppData\Local\Temp\1573800345(1).png

C:\Users\yangkai\AppData\Local\Temp\1573801546(1).png

C:\Users\yangkai\AppData\Local\Temp\1573801611(1).png

    1. 核对数据库移植结果

统计达梦数据基础信息

--统计页大小 select page;

--通过编码格式 select unicode;

--统计大小写敏感参数 select case_sensitive;

 统计达梦数据中的对象以及表数据量

a. 根据指定用户统计用户下的各对象类型和数目

select object_type,count(*) from all_objects where owner='LYJOA' group by object_type;

b. 统计指定用户下所有的对象,并记录到新的记录表中

create table dm_objects(obj_owner varchar(100),obj_name varchar(100),obj_type varchar(50)); insert into dm_objects select owner,object_name,object_type from all_objects where owner='LYJOA';

c. 统计每个表的数据量到表数据记录表

1. create table dm_tables(tab_owner varchar(100),tab_name varchar(100),tab_count int);

2. begin for rec in (select owner,object_name from all_objects where owner='LYJOA' and object_type='TABLE') loop begin execute immediate 'insert into dm_tables select '''|| rec.owner ||''','''|| rec.object_name ||''',count(*) from '|| rec.owner || '.' || rec.object_name; exception when others then print rec.owner || '.' || rec.object_name || 'get count error'; end; end loop; end;

3. select * from dm_tables;

对比达梦数据库中对象和oracle库中对象以及数据量差异

a. 比对对象,找出没有迁移的对象

select * from oracle_objects where (obj_owner,obj_name) not in ( select obj_owner,obj_name from dm_objects ) --and obj_type='TABLE' ;

b. 比对表数据量,找出数据量不相等的表

select a.tab_owner,a.tab_name,a.tab_count-b.tab_count from oracle_tables a, dm_tables b where a.tab_owner=b.tab_owner and a.tab_name=b.tab_name and a.tab_count-b.tab_count<>0

    1. 数据库移植完毕后的收尾工作

 更新统计信息 数据核对完成无问题后,应进行一次全库的统计信息更新工作。统计信息更新脚本示例如下:

DBMS_STATS.GATHER_SCHEMA_STATS( 'LYJOA', --LYJOA为模式名 100, FALSE, 'FOR ALL COLUMNS SIZE AUTO');

更新统计信息的目的在于大批量迁移数据后,可能会导致数据库优化器根据错误的统计信息 得到错误的查询计划,严重影响查询性能。  数据备份 再对数据更新完统计信息后,在数据量不大,磁盘空间足够

    1. 迁移兼容总结

序列的最少值不一样:oracle是0,dameng是1

CREATE SEQUENCE "LYJOA"."SEQ_ZWGL_WORK_CONTACT_ID"

INCREMENT BY 1

START WITH 22

MAXVALUE 9223372036854775807

MINVALUE 0 改为 MINVALUE 1

CACHE 20;

最后修改时间:2023-10-07 08:47:44
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论