迁移概述
(1)分析待移植系统,确定移植对象
(2)通过数据迁移工具DTS完成常规数据库对象以及数据的迁移
(3)DM 数据库和 MySQL 体系结构上存在差异,SQL 语法也存在一定的差异
(4)移植完成后对移植的结果进行校验,确保移植的完整性和正确性
(5)对应用系统进行移植、测试和优化
迁移前准备
1、统计mysql信息
迁移前先统计出需要迁移的库中的对象,提前了解迁移数据量、迁移数据对象、迁移数据类型为考虑迁移时长、周期提供依据。
1)确认mysql目标与参数
—查看参数设置
mysql> show variables;
—查看参数文件
[mysql@mysql test_db]$ vim /mysql/3306/my.cnf
2)统计数据对象
(1)统计目标database表数量
SELECT COUNT(*) TABLES, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ‘employees’ GROUP BY TABLE_SCHEMA;
(2)统计目标database视图数量
SELECT TABLE_SCHEMA,COUNT(*) VIEWS FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = ‘employees’ GROUP BY TABLE_SCHEMA;
(3)统计目标database函数、存储过程、触发器数量
—统计函数
SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE=‘FUNCTION’ AND ROUTINE_SCHEMA=‘employees’;
—统计触发器
SELECT TRIGGER_SCHEMA,TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA= ‘employees’;
—统计存储过程
SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE=‘PROCEDURE’ AND ROUTINE_SCHEMA=‘employees’;
(4)创建辅助表
—创建辅助表
CREATE TABLE MYSQL_TABLES(TAB_OWNER VARCHAR(100),TAB_NAME VARCHAR(100),TAB_COUNT INT);
—统计各表数据量
INSERT INTO MYSQL_TABLES SELECT TABLE_SCHEMA,TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘employees’ ORDER BY TABLE_ROWS DESC;
—查看各表数据
select * from MYSQL_TABLES
2、目的端达梦的创建
1)选择合适的版本
(1)建议使用当前最新版本的数据库,以保证功能全面和兼容性更强
(2)版本优先选择安装完整版
(3)版本与硬件环境一定要严格匹配,以减少干扰性的问题出现
2)选择合适的初始化参数
(1)页大小:数据页大小。页大小设置越大,最后数据文件的物理大小就越大,系统运行时每次从磁盘调入内存的数据单位就越大。
(2)簇大小:数据文件使用的簇大小
(3)大小写敏感: MYSQL 设置大小写敏感的细粒度可到字段级别,达梦是实例级别的,一旦设置,后续不可修改
(4)字符集: MYSQL 建表默认的字符编码是 UTF8_GENERAL_CI,所以建议在 MYSQL 迁移到 DM 时,在达梦端设置成大小写不敏感 CASE_SENSITIVE=0。如果 MYSQL 系统中使用的字符编码是 UTF8_GENERAL_CS,那么建议达梦端设置成大小写敏感 CASE_SENSITIVE=1。
(5)LENGTH_IN_CHAR:MYSQL4.0 以下版本以字节为单位,5.0 以上版本以字符为单位,当前一般是 5.0 以上,所以一般选择设置 1,该参数只能初始化阶段设置,后续不能修改。
3)配置合适的INI参数
(1)buffer和max_buffer:根据服务器运行服务所占资源进行分配,避免DM征用系统大量内存资源导致其他应用受影响。建议物理内存一半,且buffer=max_buffer。
(2)max_sessions:根据MySQL实际应用连接情况设置,避免迁移后创建连接过多导致的应用无法连接。
(3)ORDER_BY_NULLS_FLAG:控制排序时NULL值返回的位置,取值0、1、2。0表示 NULL 值始终在最前面返回;1表示ASC升序排序时 NULL 值在最后返回,DESC降序排序时NULL值在最前面返回,在参数等于1的情况下,NULL值的返回与 ORACLE 保持一致;2表示ASC升序排序时NULL值在最前面返回,DESC降序排序时 NULL 值在最后返回,在参数等于2的情况下,NULL值的返回与MYSQL保持一致。
(4)compatible_mode:0不兼容;1兼容SQL92标准;2兼容oracle;3兼容MS SQL SERVER;4兼容mysql;5兼容DM6;6兼容Teradata。4表示部分语法兼容mysql,重启数据库生效
4)设置合理的日志参数
扩大在线日志文件。在dts迁移过程中涉及到大量的读写操作,为避免redolog频繁切换,建议增大。
5)创建用户和表空间
(1)创建新的用户和表空间,不要把迁移数据迁移到系统管理员用户下和main表空间下
(2)明确源端要迁移的用户,在目标端创建对应的用户和表空间
(3)明确用户对象,并不是所有的用户对象都需要迁移
(4)避免多个分区表使用一个表空间导致过快达到maxsize
(5)明确目标用户所拥有的权限,避免后期因权限问题导致的对象无法操作
3、制定迁移计划
(1)选择合理的迁移顺序:先序列,再表,最后视图
(2)对于数据量大的表单独迁移
(3)对于分区表若数据量没有超过1亿建议迁移成普通表,在分区列上创建索引
(4)对于大字段较多的表,需修改批量提交的行数,避免迁移工具内存溢出
4、迁移前评估
通过DTS工具的评估模块对源端数据库进行迁移评估,包括数据对象和 SQL ,最终形成迁移评估报告。可通过迁移评估报告提前了解哪些数据对象或 sql 需要单独处理,方便后续迁移的顺利进行。
1)评估测试
—新建迁移评估
—连接源端MySQL
注:
当使用达梦迁移工具连接 mysql 5.7 时可能报错:“Communications link failure The last packet successfully received from the server was 20 milliseconds ago. The last packet sent successfully to the server was 20 milliseconds ago.”。
遇到报错时可进行以下排查:
(1)排查是否为网络问题导致连接不上 mysql 数据库,检查网络端口是否开放
(2)排查 mysql 数据库最大连接数设置或者连接超时问题
(3)是否由 SSL 协议导致,若是可进行如下操作,在URL里面添加&useSSL=false&,不进行SSL连接,通过账号密码进行连接。
2)选择评估项
—进行评估选项
—选定评估目标
3)获取评估信息
—源端信息预览
—评估结果
从评估结果中可以看到,源端的评估存在不兼容的情况,仔细查看日志,发现源端不兼容的对象是由于不存在相关表所造成的。在后面的正式迁移过程中,可以对该对象进行单独的处理。
迁移测试
1、确认源端MySQL信息
可通过DTS工具的评估模块获取源端MySQL信息。
2、创建目标端DM实例
—初始化实例
dminit PATH=/dmdata DB_NAME=my57 INSTANCE_NAME=my57 SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=16 EXTENT_SIZE=32 LENGTH_IN_CHAR=0 LOG_SIZE=1024 CASE_SENSITIVE=N CHARSET=1 PORT_NUM=8236
—实例启动测试
[dmdba@dm ~]$ /dmsoft/dmdbms/bin/dmserver /dmdata/my57/dm.ini
—修改ini参数(测试环境内存为4G)
Vim /dmdata/orcl/dm.ini
MAX_OS_MEMORY = 80
BUFFER = 2000
COMPATIBLE_MODE = 4
ORDER_BY_NULLS_FLAG=2
—修改日志大小
SQL> select * from v$rlogfile;
SQL> alter database resize logfile ‘my5701.log’ to 2048;
SQL> alter database resize logfile ‘my5702.log’ to 2048;
—创建用户和表空间
SQL> create tablespace emp DATAFILE ‘emp.DBF’ size 128 autoextend on next 1024 maxsize 65536;
SQL> create user employees identified by “dameng123” default tablespace emp;
3、DTS连接
1)选择迁移类别
2)测试源端连接
3)测试目标端连接
4、选择迁移目标
—这里不需要创建模式,在准备过程中创建用户时已经创建
5、迁移目标
1)迁移表
2)迁移视图
3)迁移剩余对象
在之前的迁移评估时,最终的评估信息显示会有一个存储过程的报错,在迁移剩余对象时果然出现了报错,通过错误信息获取创建语句进行单独处理。
迁移后注意
1、统计目的端对象和数据
1)统计表和数据量
—创建统计表
create table table_count (owner varchar(100),table_name varchar(100),cnt int);
—统计各表数据量
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=‘EMPLOYEES’ order by 1, 2)—owner根据实际情况调整
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;
—查询验证数据量
select * from “SYSDBA”.“TABLE_COUNT”;
2)统计对象
—查询并统计迁移对象
SELECT
A.USERNAME “用户名”,
(SELECT COUNT(1) FROM DBA_TABLES B WHERE B.OWNER = A.USERNAME) “表数量”,
( SELECT COUNT(1) FROM DBA_VIEWS G WHERE G.OWNER = A.USERNAME ) “视图数量”,
( SELECT COUNT(1) FROM DBA_TRIGGERS H WHERE H.OWNER = A.USERNAME ) “触发器数量”,
( SELECT COUNT(DISTINCT I.NAME) FROM DBA_SOURCE I WHERE I.OWNER = A.USERNAME AND I.TYPE = ‘FUNCTION’ ) “函数数量”,
( SELECT COUNT(1) FROM DBA_SEQUENCES J WHERE J.SEQUENCE_OWNER = A.USERNAME ) “序列数量”,
( SELECT COUNT(DISTINCT L.NAME) FROM DBA_SOURCE L WHERE L.OWNER = A.USERNAME AND L.TYPE = ‘PROCEDURE’ ) “存储过程数量”,
( SELECT COUNT(1) FROM DBA_DB_LINKS M WHERE M.OWNER = A.USERNAME ) “DBLINK数量”,
( SELECT COUNT(1) FROM DBA_INDEXES I WHERE UNIQUENESS = ‘UNIQUE’ AND OWNER =A.USERNAME OR INDEX_NAME NOT LIKE ‘INDEX335%’ AND OWNER =A.USERNAME) “索引数量”,
( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE=‘TYPE’ AND OWNER =A.USERNAME OR OBJECT_TYPE=‘CLASS’ AND OWNER =A.USERNAME ) “自定义类型”,
( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE=‘PACKAGE’ AND OWNER =A.USERNAME) “PKG数量”
FROM
DBA_USERS A WHERE A.USERNAME IN (‘EMPLOYEES’);
2、更新统计信息
数据核对完成后,应进行一次统计信息的更新。更新统计信息的目的是,在大批量迁移数据后,可能会导致数据库优化器根据错误的统计信息得到错误的查询计划,从而影响最终的查询结果。
SQL> call DBMS_STATS.GATHER_SCHEMA_STATS(‘EMPLOYEES’);
3、数据备份
在数据更新完统计信息后,在磁盘空间充足的情况下进行一次数据备份。
RMAN> backup database ‘/dmdata/my57/dm.ini’ full backupset ‘/dmbak/my57_full’;
4、开启SQL日志
数据库和应用系统迁移完成后开启SQL日志,对系统进行全方面测试,排查迁移过程中错误的地方,对慢SQL语句进行优化。在测试完成后要关闭追踪日志。
—开启SQL追踪
SP_SET_PARA_VALUE(1,‘SVR_LOG’,1);
—关闭SQL追踪
SP_SET_PARA_VALUE(1,‘SVR_LOG’,0);
社区地址:https://eco.dameng.com