记一次达梦数据库的迁移 |
您所在的位置:网站首页 › MySQL数据库迁移db2 › 记一次达梦数据库的迁移 |
随着数据库技术的发展,以及国家政策的支持,中国的数据库市场尤其是在中国IT技术国产化追赶的脚步下,以芯片,操作系统和数据库技术方面发展迅速。中国的数据库市场上目前的现状仍然是以ORACLE、DB2和 MS SQLserver以及MYSQL 为主并占据了主要市场份额,但是可以看到传统外国数据库厂商的市场份额在持续下降。在产品技术类型方面,随着非关系型和混合型数据库的发展,部分原来属于关系型数据库的市场必将替换为更适应适应于业务场景的非关系型和混合型数据库。同时,开源数据库和国产数据库厂商也在持续发力,以后在数据库产品市场必将会以国产数据库为主,外国的数据库产品会越来越少,同时国内各数据库厂商不会一家独大,一定是各种国产数据库百花齐放的场面出现。当前企业在综合考虑费用和性能的同时,会在不同的国产数据库中进行替换,同时各个数据库厂商在抢占市场的时候也会向客户推介替换掉国外的传统数据库,这也推动了国产数据库的不断发展。因而在这种情形下,异构数据库之间进行数据迁移的场景,尤其是从传统的ORACLE、DB2和SQLerver以及MYSQL数据库迁移到到国产数据库的场景会逐渐增多。 达梦数据库作为国产数据库产品的先行者和市场份额的重要参与者,这里以某个业务系统从MYSQL数据库迁移到达梦数据库的异构数据库迁移过程。 业务系统数据库异构移植过程,和普通部署数据库,搭建架构不同的是,由于原数据中通常已经有业务数据,为了迁移后更好的运行,首先需要对原来使用的应用平台和数据库进行环境情况的记录分析。这里将整个迁移过程分为四部分,如下说明。 第一部分、前期对业务系统后台架构的调研收集信息 以某业务系统mysql数据库迁移到达梦数据库为例,有以下表格内的几个方面需要统计记录: 1 应用程序部署的服务器操作系统 2 应用程序开发语言和平台 3 应用程序开发数据库接口 4 数据库部署的服务器操作系统 5 数据库产品类型和版本: 6 需要移植的数据库对象: (通常包括表、视图、存储过程、触发器、函数、自定义类型等) 第二部分、迁移前收集MYSQL数据库信息,及创建移植辅助表 1、在MYSQL数据库上查询大小写敏感性、数据库和用户,并确认 可以通过向业务系统开发及后台管理人员,最终确认待迁移的用户和库。命令如下: show variables like '%case_table%'; show databases; select username from dba_users ; 其中,%case_table%变量的值为0是区分大小写的,1是不区分大小写的。 2、统计 MySQL 数据中的对象以及表数据量 根据指定用户统计用户下的对象数目,其中以下语句中的db_name,要替换为前面查询并确认的数据库名称。 (1)统计表数目 SELECT count(*) TABLES, table_schema FROM information_schema.TABLES where table_schema = 'db_name' GROUP BY table_schema; (2)统计存储过程 select `name` from MySQL.proc where db = 'db_name' and `type` = 'PROCEDURE'; (3)统计函数 select `name` from MySQL.proc where db = 'db_name' and `type` = 'FUNCTION' 3、在MYSQL数据库中创建辅助表,并插入移植对象的统计数据 create table MySQLs_tables(tab_owner varchar(100),tab_name varchar(100),tab_count int); insert into MySQLs_tables select TABLE_SCHEMA,table_name,table_rows from information_schema.TABLES where TABLE_SCHEMA = 'db_name' order by table_rows desc; select * from MySQLs_tables; 4、安装部署DM数据库并配置相关参数 4.1安装DM数据库软件 此处不在说明安装步骤,命令示例如下: ./DMInstall.bin -i ,然后按照提示进行安装。 4.2初始化数据库 需要根据mysql数据库确认的字符集、pagesize、大小写敏感性进行数据库的初始化 示例说明,如下: ./dminit PATH=/data/dmdbms PAGE_SIZE=32 LOG_SIZE=2048 CHARSET=1 CASE_SENSITIVE=N 4.3 修改dm.ini文件兼容MYSQL数据库参数 修改 COMPATIBLE_MODE的参数值为4 不同的值兼容不同的数据库。具体可参见达梦官网数据库手册 4.4 建库后查询数据库参数,再次验证数据库初始化操作的正确性 select page; select unicode; select case_sensitive; 5、在DM达梦数据库创建表空间和用户,对应MYSQL数据库中的用户和库 确认mysql移植的是哪几个用户的数据,然后创建用户和用户对应的表空间,以下为示例命令: CREATE TABLESPACE "TEST" DATAFILE 'TEST.DBF' SIZE 128 AUTOEXTEND ON NEXT 2048; CREATE USER "TEST" IDENTIFIED BY "TEST1234" DEFAULT TABLESPACE "TEST" DEFAULT INDEX TABLESPACE "TEST"; GRANT "PUBLIC","RESOURCE","VTI","SOI" TO "TEST"; ALTER USER "TEST" LIMIT FAILED_LOGIN_ATTEMPS UNLIMITED, PASSWORD_LOCK_TIME UNLIMITED, PASSWORD_GRACE_TIME UNLIMITED; 创建用户和表空间的步骤,根据用户的数量可分别执行多次,创建相应的用户和表空间。 以上,准备工作已经做完。下一步可以进行数据迁移工作。 第三部分、数据库迁移工作 达梦数据库有独创的DTS数据迁移同步工具,可以使用 DTS进行MYSQL到DM达梦数据的迁移 3.1、表、视图和数据的迁移 新建工程,主要是填写工程名 在右侧的目录树,在工程下有迁移项目,右键点击,选择新建迁移,主要是填写迁移名称 点击,下一步。 选择迁移方式,此次选择 MYSQL ==> DM8 配置迁移信息。连接MYSQL数据源,和DM数据库目的端。 选择“从数据源复制对象”,选择目的模式。 选择要迁移的数据对象 审阅迁移任务,点击“完成”按钮。 迁移任务完成,成功如下图。 注:如果迁移工作中有失败提示,可以查看每条失败记录的操作的失败详细信息。查看失败信息后,可在工具中根据提示点击操作按钮,进行重复迁移操作。 注:MYSQL迁移到DM数据库中常见的几个问题 MySQL 的字段可以定义 CURRENT_TIMESTAMP 类型,在选中创建失败的表之后,点击下方“转换”按钮,然后进行字段类型中将CURRENT_TIMESTAMP()改为sysdate,即可。 2.在 MySQL 中时间类型 TIMESTAMP 默认 default 值的问题。 和 处理 CURRENT_TIMESTAMP类型的方法基本一样,在选中创建失败的表之后,点击下方“转换”按钮,然后进行字段类型中默认值修改为'0001-01-01',即可。 以上问题可以在DTS工具中的转换界面进行输入解决。 3.2、触发器和存储过程的迁移 首先,可以先从 MySQL 导出用户对象 sql 脚本,MySQL 导出存储过程及函数的执行命令: MySQLdump -hhostname -uusername -ppassword -ntd -R databasename > prorandfunc.sql 然后,将导出的 sql 脚本,经人工修改之后,再导入到达梦数据库中运行。 3.3、检查DM达梦数据库中迁移过来的数据,并进行比对 a. 根据指定用户统计用户下的各对象类型和数目 select object_type,count(*) from all_objects where owner='OATEST' 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='OATEST'; c. 统计每个表的数据量到表数据记录表 create table dm_tables(tab_owner varchar(100),tab_name varchar(100),tab_count int); declare begin for rec in (select owner,object_name from all_objects where owner='OATEST' and object_type='TABLE') loop execute immediate 'insert into dm_tables select '''|| rec.owner ||''','''|| rec.object_name ||''',count(*) from '|| rec.owner || '.' || rec.object_name; end loop; end; select * from dm_tables; d.对比达梦数据库中对象和 MySQL 库中对象以及数据量差异: select a.tab_owner,a.tab_name,a.tab_count-b.tab_count from MySQL_tables a, dm_tables b where a.tab_owner=b.tab_owner and a.tab_name=b.tab_name and .tab_count-b.tab_count0; 第四部分,迁移收尾工作: 更新统计信息统计信息更新脚本示例如下: DBMS_STATS.GATHER_SCHEMA_STATS( 'HNSIMIS', 100, FALSE, 'FOR ALL COLUMNS SIZE AUTO'); ------其中 HNSIMIS 为模式名 2.开启归档并备份数据库 ALTER DATABASE MOUNT ; ALTER DATABASE ARCHIVELOG ; ALTER DATABASE ADD ARCHIVELOG 'DEST = /dmdata/DAMENG/arch_log, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 2048'; ALTER DATABASE OPEN ; 在disql 模式下,进行联机备份 select checkpoint(100); BACKUP DATABASE FULL BACKUPSET '/dmdata/DAMENG/dm_bak/db_fullbak_01'; 3. 数据库对象脚本定义备份保留 脚本对象导出可通过达梦数据迁移 DTS 工具来进行。执行步骤如下: 后面直接点“下一步”即可。 至此,数据库的迁移部分应完成。 但是数据库迁移后,业务系统若要能运行起来,通常还要配合应用进行配置。 此处以java为例进行简要说明: DM的驱动分为 DMJdbcDriver14、DMJdbcDriver15、DMJdbcDriver16、DMJdbcDriver17,分别 对应 Jdk1.4、Jdk1.5、Jdk1.6、jdk1.7; Jdbc 驱动包路径在安装路径下的drivers/jdbc目录下。 应用程序文件中配置 DM的驱动: 定义 DM JDBC 驱动串 String jdbcString = "dm.jdbc.driver.DmDriver"; 定义 DM URL 连接串 String urlString = "jdbc:dm://SHRSG?comOra=true"; --集群的服务名连接方式 String urlString = "jdbc:dm://127.0.0.1:5236 "; --单机连接方式 如果使用了 hibernate,需要进行 dialect 的配置修改,如下: hibernate.dialect=org.hibernate.dialect.DmDialect 如果是其他非java类型应用的配置问题,具体参见达梦官网手册。 达梦技术社区 https://eco.dameng.com |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |