将您的数据库从
IBM Db2 z/OS
迁移 到适用
于 MySQL 的 亚马逊关系数据库服务 (Amazon RDS)
或
Amazon A urora MySQL 兼容版
是一个多阶段的过程,通常包括评估、数据库架构转换、数据迁移、功能测试、性能调整以及跨越各个阶段的许多其他步骤。
您可以使用
亚马逊云科技 架构转换工具
(亚马逊云科技 SCT) 将您的数据库架构转换为与目标数据库兼容的格式。
亚马逊云科技 数据库迁移服务
(亚马逊云科技 DMS) 支持许多最受欢迎的
源
和
目标
数据库引擎,可帮助您快速安全地将数据库迁移到 亚马逊云科技。
使用 亚马逊云科技 SCT 进行架构转换是一个半自动的过程,因此目标数据库中可能会丢失数据库对象或关键功能。因此,架构验证是一个重要的里程碑,它可以防止在架构转换期间丢失数据库对象,并证明要迁移的所有内容都已成功迁移。
在这篇文章中,我们将向您介绍如何验证从 Db2 z/OS 迁移到适用于 MySQL 的亚马逊 RDS 或 Amazon Aurora MySQL 兼容版本的数据库架构对象。
在之前的一篇文章中,我们已经介绍了 Db2 z/OS 与
亚马逊 Aurora PostgreSQL
兼容版之间的类似验证。
校验数据库对象
在成功将源架构对象从 Db2 z/OS 转换为其等效 MySQL 架构对象后,应立即执行架构验证。要进行验证,我们首先需要了解不同类型的 Db2 z/OS 数据库对象及其等效的 MySQL 数据库对象类型。
以下列表显示了您可以在 Db2 z/OS(源)和相应的 MySQL 数据库(目标)之间进行比较的数据库对象。我们应该彻底验证这些对象,以减少数据库迁移后期阶段出现的问题。
-
架构
-
桌子
-
观点
-
主键
-
外键
-
索引
-
触发器
-
程序
-
函数
在以下部分中,我们将深入探讨每种对象类型,并使用 SQL 查询进行验证,以帮助我们识别任何缺失的迁移架构对象。
如果您发现任何架构对象存在差异,请从
亚马逊云科技 SCT 日志
中找出失败的原因 ,手动将这些对象转换为目标数据库等效对象,然后在目标数据库上创建对象。例如,在 Db2 z/OS 中创建数据分区表的 SQL 语法与 MySQL 不同。因此,这些表不是在目标数据库上创建的。在目标数据库上运行表分区之前,您需要手动更正 SQL 脚本以替换表分区的目标等效语法。
我们在这些部分中使用的查询不包括源数据库和目标数据库中的系统架构。在适用的情况下,我们将涵盖摘要级别和详细级别的验证。您可以根据需要进一步修改这些查询以包括更多审查。
注意:
下一节中使用的 示例显示了匹配的计数。
这些查询可能会对包含大量对象的实例(取决于引擎版本)产生负面性能影响,因此请在非工作时间或在克隆实例上运行它们。
迁移注意事项
查看转换后的数据类型可以帮助您确定是否需要调整现有索引和查询计划以在 MySQL 中获得最佳性能。它允许您考虑诸如索引适当的数据类型、列长度和排序规则设置等因素。
同样,请检查您的索引,因为不同的数据库系统的索引机制各不相同。在转换过程中,亚马逊云科技 SCT 尝试将索引从源数据库映射到 MySQL。但是,索引结构、语法和优化技术可能有所不同。查看转换后的索引可以确保 MySQL 中的索引策略符合最佳实践并利用 MySQL 的索引功能。
架构
架构用于表示在应用程序或微服务中提供相关功能的数据库对象的集合。您应该使用以下 SQL 查询在源数据库和目标数据库中验证架构:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT DISTINCT CREATOR AS SCHEMA_NAME
FROM SYSIBM.SYSTABLES
WHERE CREATOR NOT LIKE 'SYS%' ORDER BY SCHEMA_NAME;
|
select schema_name
from INFORMATION_SCHEMA.schemata
where SCHEMA_NAME not in ('information_schema',
'performance_schema', 'sys', 'mysql')
and SCHEMA_NAME not like 'aws_db2z/OS%'
order by schema_name;
|
|
|
|
扩展包
当您转换数据库或数据仓库架构时,亚马逊云科技 SCT 可能会向您的目标数据库添加其他架构。这些架构实现了将转换后的架构写入目标数据库时所需的源数据库的 SQL 系统函数。这些额外的架构被称为
扩展包
。
将数据库从 Db2 z/OS 迁移到适用于 MySQL 的亚马逊 RDS 或亚马逊 Aurora MySQL 兼容版时,AWS SCT 会创建两个扩展包:a
ws_db2z/os_Ext_Ext_D
ata,如以下示例代码所示:
|
MySQL Query
|
select schema_name
from INFORMATION_SCHEMA.schemata
where SCHEMA_NAME in ('aws_db2z/OS_ext','aws_db2z/OS_ext_data')
order by schema_name;
|
|
|
在验证源数据库和目标数据库中的原生等效选项后,可以将这些扩展包架构直接部署到目标数据库。
桌子
亚马逊云科技 SCT 使用默认或自定义映射规则将源 Db2 z/OS 表转换为具有适当数据类型和相对表定义的等效 MySQL 目标表。
假设源数据库没有任何分区表,以下 SQL 查询返回所有表的计数和详细级别信息:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT TAB.CREATOR AS SCHEMA_NAME,
COUNT(TAB.NAME) AS TABLE_COUNT FROM SYSIBM.SYSTABLES TAB
WHERE TAB.TYPE = 'T'
AND TAB.CREATOR NOT LIKE 'SYS%'
GROUP BY TAB.CREATOR
ORDER BY TAB.CREATOR;
|
SELECT table_schema AS Schema_name,
Count(table_name) AS Tables_Count
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema not in ('information_schema',
'performance_schema', 'sys', 'mysql')
and table_schema not like 'aws_db2z/OS%'
GROUP BY table_schema
ORDER BY table_schema;
|
|
|
|
有关详细级别的信息,请使用以下查询:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT TAB.CREATOR AS SCHEMA_NAME,
TAB.NAME AS TABLE_NAME FROM SYSIBM.SYSTABLES TAB
WHERE TAB.TYPE = 'T'
AND TAB.CREATOR NOT LIKE 'SYS%'
ORDER BY TAB.CREATOR,TAB.NAME;
|
SELECT table_schema AS Schema_name,
table_name AS Table_Name
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema not in ('information_schema',
'performance_schema', 'sys', 'mysql')
and table_schema not like 'aws_db2z/OS%'
ORDER BY table_schema,table_name;
|
|
|
|
观点
视图是存储查询的结果集,其查询方式与表等持久数据库集合对象相同。您可以通过在源数据库和目标数据库上使用以下查询来验证 亚马逊云科技 SCT 转换的视图数:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT TAB.CREATOR AS SCHEMA_NAME,
COUNT(TAB.NAME) AS VIEW_COUNT
FROM SYSIBM.SYSTABLES TAB
WHERE TAB.TYPE = 'V'
AND TAB.CREATOR NOT LIKE 'SYS%'
GROUP BY TAB.CREATOR
ORDER BY TAB.CREATOR;
|
SELECT TABLE_SCHEMA AS Schema_Name,
count(TABLE_NAME) AS View_Count
FROM information_schema.VIEWS
where table_schema not in ('information_schema',
'performance_schema', 'sys', 'mysql')
and table_schema not like 'aws_db2z/OS%'
group by TABLE_SCHEMA
order by TABLE_SCHEMA;
|
|
|
|
有关详细级别的信息,请使用以下查询:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT TAB.CREATOR AS SCHEMA_NAME,
TAB.NAME AS VIEW_NAME
FROM SYSIBM.SYSTABLES TAB
WHERE TAB.TYPE = 'V'
AND TAB.CREATOR NOT LIKE 'SYS%'
ORDER BY TAB.CREATOR, TAB.NAME;
|
SELECT TABLE_SCHEMA AS Schema_Name,
TABLE_NAME AS View_Name
FROM information_schema.VIEWS
where table_schema not in ('information_schema',
'performance_schema', 'sys', 'mysql')
and table_schema not like 'aws_db2z/OS%'
order by TABLE_SCHEMA,TABLE_NAME;
|
|
|
|
主键
主键是一列或一组列,其值唯一地标识表中的每一行。以下查询可帮助您提取源数据库和目标数据库中主键的计数和详细信息:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT TBCREATOR AS
SCHEMA_NAME,COUNT(CONSTNAME) AS PK_COUNT
FROM SYSIBM.SYSTABCONST
WHERE TBCREATOR NOT LIKE 'SYS%'
AND TYPE='P'
GROUP BY TBCREATOR
Order by TBCREATOR;
|
SELECT cons.CONSTRAINT_SCHEMA as SCHEMA_NAME
, count(cons.CONSTRAINT_NAME) as PK_Count
FROM information_schema.TABLE_CONSTRAINTS cons
where cons.constraint_type in ('PRIMARY KEY')
and cons.table_schema not in ('information_schema',
'sys', 'performance_schema', 'mysql')
and cons.table_schema not like 'aws_db2z/OS%'
group by cons.CONSTRAINT_SCHEMA
order by cons.CONSTRAINT_SCHEMA;
|
|
|
|
要验证包括约束条件中的列名及其序号位置在内的详细信息,可以使用以下查询:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT TBCREATOR AS TABLE_SCHEMA, TBNAME AS TABLE_NAME,
CONSTNAME AS CONSTRTAINT_NAME,
COLNAME AS COLUMN_NAME,
COLSEQ AS POSITION
FROM SYSIBM.SYSKEYCOLUSE
WHERE TBCREATOR NOT LIKE 'SYS%'
ORDER BY TBCREATOR,TBNAME, COLNAME,COLSEQ;
|
SELECT cons.CONSTRAINT_SCHEMA as SCHEMA_NAME
, col_use.TABLE_NAME
, cons.CONSTRAINT_NAME
, col_use.COLUMN_NAME
, col_use.ORDINAL_POSITION as POSITION
FROM information_schema.TABLE_CONSTRAINTS cons
join information_schema.KEY_COLUMN_USAGE col_use
on cons.CONSTRAINT_SCHEMA=col_use.CONSTRAINT_SCHEMA
and cons.CONSTRAINT_NAME=col_use.CONSTRAINT_NAME
and cons.TABLE_SCHEMA=col_use.TABLE_SCHEMA
and cons.TABLE_NAME=col_use.TABLE_NAME
where cons.constraint_type in ('PRIMARY KEY')
and cons.table_schema not in ('information_schema',
'sys', 'performance_schema', 'mysql')
and cons.table_schema not like 'aws_db2z/OS%'
order by cons.CONSTRAINT_SCHEMA, col_use.TABLE_NAME,col_use.COLUMN_NAME
,col_use.ORDINAL_POSITION;
|
|
|
|
外键
外键将父表中的数据链接到另一个子表中的数据。外键约束有助于保持表之间的引用完整性。您可以使用以下查询来获取有关源数据库和目标数据库中外键的计数和详细信息:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT FK.CREATOR AS SCHEMA_NAME,COUNT(*) AS FK_COUNT
FROM SYSIBM.SYSFOREIGNKEYS FK
WHERE
FK.CREATOR NOT LIKE 'SYS%'
GROUP BY FK.CREATOR
ORDER BY FK.CREATOR;
|
SELECT TABLE_SCHEMA as SCHEMA_NAME,
count(*) as FK_COUNT
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA not in ('information_schema',
'sys', 'performance_schema', 'mysql')
and TABLE_SCHEMA not like 'aws_db2z/OS%'
and REFERENCED_TABLE_SCHEMA IS NOT NULL
group by TABLE_SCHEMA
order by TABLE_SCHEMA;
|
|
|
有关详细信息,请使用以下查询:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT FK.CREATOR AS SCHEMA_NAME,
REL.TBNAME AS TABLE_NAME,
FK.COLNAME AS COLUMN_NAME,
REL.RELNAME AS FK_CONST_NAME,
REL.REFTBNAME AS FOREIGN_TABLE_NAME
FROM SYSIBM.SYSFOREIGNKEYS FK
LEFT OUTER JOIN SYSIBM.SYSRELS REL
ON FK.CREATOR = REL.REFTBCREATOR AND FK.TBNAME = REL.TBNAME
WHERE
FK.CREATOR NOT LIKE 'SYS%'
ORDER BY FK.CREATOR, REL.TBNAME, REL.RELNAME, REL.REFTBNAME, FK.COLNAME;
|
SELECT TABLE_SCHEMA as schema_name,
TABLE_NAME as table_name,
COLUMN_NAME ,
CONSTRAINT_NAME as fk_constraint_name,
REFERENCED_TABLE_NAME as foreign_table_name,
REFERENCED_COLUMN_NAME as foreign_column_name
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA not in ('information_schema',
'sys', 'performance_schema', 'mysql')
and TABLE_SCHEMA not like 'aws_db2z/OS%'
and REFERENCED_TABLE_SCHEMA IS NOT NULL
order by TABLE_SCHEMA, TABLE_NAME,
CONSTRAINT_NAME, REFERENCED_TABLE_NAME, COLUMN_NAME;
|
|
|
|
索引
索引
在提高查询性能方面起着关键作用。由于调整方法因数据库而异,因此 Db2 z/OS 和 MySQL 数据库之间的索引数量及其类型有所不同。
通过以下查询,您可以获取 Db2 z/OS 和 MySQL 数据库中的索引数量及其类型。
唯一索引
使用以下查询获取唯一索引:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT IND.CREATOR AS SCHEMA_NAME,
COUNT(*) AS UNIQUE_COUNT
FROM SYSIBM.SYSINDEXES IND
INNER JOIN SYSIBM.SYSTABLES T ON IND.CREATOR=T.CREATOR AND IND.TBNAME=T.NAME
WHERE IND.CREATOR NOT LIKE 'SYS%' AND IND.UNIQUERULE in ('U')
AND T.TYPE='T'
GROUP BY IND.CREATOR
ORDER BY IND.CREATOR;
|
SELECT cons.table_schema as SCHEMA_NAME
, count(distinct cons.table_name) as unique_count
FROM information_schema.TABLE_CONSTRAINTS cons
join information_schema.KEY_COLUMN_USAGE col_use
on cons.CONSTRAINT_SCHEMA=col_use.CONSTRAINT_SCHEMA
and cons.CONSTRAINT_NAME=col_use.CONSTRAINT_NAME
and cons.TABLE_SCHEMA=col_use.TABLE_SCHEMA
and cons.TABLE_NAME=col_use.TABLE_NAME
where cons.constraint_type in ('UNIQUE')
and cons.table_schema not in ('information_schema',
'sys', 'performance_schema', 'mysql')
and cons.table_schema not like 'aws_db2z/OS%'
group by cons.table_schema
order by cons.table_schema;
|
|
|
|
有关详细信息,请使用以下查询:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT IND.CREATOR AS SCHEMA_NAME,
IND.TBNAME AS TABLE_NAME,
IND.NAME AS CONTRAINT_NAME,
'Unique Index' AS CONSTRAINT_TYPE,
COL.COLNAME AS COLUMN_NAME
FROM SYSIBM.SYSINDEXES IND
LEFT OUTER JOIN SYSIBM.SYSKEYS COL ON IND.CREATOR = COL.IXCREATOR
AND IND.NAME = COL.IXNAME
WHERE IND.CREATOR NOT LIKE 'SYS%' AND IND.UNIQUERULE IN ('U')
ORDER BY IND.CREATOR, IND.TBNAME,IND.NAME, COL.COLNAME;
|
SELECT cons.table_schema as SCHEMA_NAME
, cons.TABLE_NAME
, cons.CONSTRAINT_NAME as CONSTRAINT_NAME
,'Unique Index' as constraint_type
, col_use.COLUMN_NAME
FROM information_schema.TABLE_CONSTRAINTS cons
join information_schema.KEY_COLUMN_USAGE col_use
on cons.CONSTRAINT_SCHEMA=col_use.CONSTRAINT_SCHEMA
and cons.CONSTRAINT_NAME=col_use.CONSTRAINT_NAME
and cons.TABLE_SCHEMA=col_use.TABLE_SCHEMA
and cons.TABLE_NAME=col_use.TABLE_NAME
where cons.constraint_type in ('UNIQUE')
and cons.table_schema not in ('information_schema',
'sys', 'performance_schema', 'mysql')
and cons.table_schema not like 'aws_db2z/OS%'
order by cons.table_schema, cons.TABLE_NAME,
cons.CONSTRAINT_NAME, col_use.COLUMN_NAME;
|
|
|
|
非唯一索引
MySQL 在外键和引用键上创建隐式索引,因此可以快速进行外键检查并且不需要表扫描。本节中使用的 MySQL 数据库查询不包括此类索引,因此您可以对源进行验证而不会出现任何不匹配的情况:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT IND.CREATOR AS SCHEMA_NAME,
COUNT(*) AS NON_UNIQUE_COUNT
FROM SYSIBM.SYSINDEXES IND
WHERE IND.CREATOR NOT LIKE 'SYS%' AND IND.UNIQUERULE in ('D')
GROUP BY IND.CREATOR
ORDER BY IND.CREATOR;
|
SELECT idx.table_schema
,count(idx.index_name) as index_count
FROM INFORMATION_SCHEMA.STATISTICS idx
WHERE idx.TABLE_SCHEMA not in ('information_schema',
'sys', 'performance_schema', 'mysql', 'DB2INST1')
and idx.table_schema not like 'aws_db2z/OS%'
and idx.index_name not in ('PRIMARY')
and idx.non_unique = 1
and index_name not like 'FK_%'
group by idx.table_schema
order by idx.table_schema;
|
|
|
|
有关详细信息,请使用以下查询:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT IND.CREATOR AS SCHEMA_NAME,
IND.TBNAME AS TABLE_NAME,
IND.NAME AS CONTRAINT_NAME,
'Non-Unique Index' AS CONSTRAINT_TYPE,
COL.COLNAME AS COLUMN_NAME
FROM SYSIBM.SYSINDEXES IND
LEFT OUTER JOIN SYSIBM.SYSKEYS COL ON IND.CREATOR = COL.IXCREATOR
AND IND.NAME = COL.IXNAME
WHERE IND.CREATOR NOT LIKE 'SYS%' AND IND.UNIQUERULE IN ('D')
ORDER BY IND.CREATOR, IND.TBNAME,IND.NAME, COL.COLNAME;
|
SELECT idx.table_schema AS SCHEMA_NAME,
idx.table_name,
idx.index_name AS CONTRAINT_NAME,
'Non-Unique Index' as constraint_type,
idx.column_name
FROM INFORMATION_SCHEMA.STATISTICS idx
WHERE idx.TABLE_SCHEMA not in ('information_schema',
'sys', 'performance_schema', 'mysql', 'DB2INST1')
and idx.table_schema not like 'aws_db2z/OS%'
and idx.index_name not in ('PRIMARY')
and idx.non_unique = 1
and index_name not like 'FK_%'
order by idx.table_schema
, idx.table_name
, idx.index_name
, idx.column_name;
|
|
|
|
触发器
触发器
定义了一组操作,这些操作是为了响应关联表中的行插入、更新或删除而执行的。以下查询为您提供了源数据库和目标数据库触发器的数量和详细信息:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT SCHEMA AS SCHEMA_NAME,
COUNT(*) AS TRIGGER_COUNT
FROM SYSIBM.SYSTRIGGERS
WHERE SCHEMA NOT LIKE 'SYS%'
GROUP BY SCHEMA
ORDER BY SCHEMA;
|
SELECT tgr.EVENT_OBJECT_SCHEMA as TABLE_SCHEMA
, count(tgr.TRIGGER_NAME) as trigger_count
FROM information_schema.triggers tgr
where tgr.TRIGGER_SCHEMA not in ('sys','performance_schema','mysql')
and tgr.TRIGGER_SCHEMA not like 'aws_db2z/OS%'
group by tgr.EVENT_OBJECT_SCHEMA
order by tgr.EVENT_OBJECT_SCHEMA;
|
|
|
|
有关详细级别的信息,请使用以下查询:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT SCHEMA AS SCHEMA_NAME,
NAME AS TRIGGER_NAME,
TBNAME AS TABLE_NAME,
CASE TRIGTIME
WHEN 'B' THEN 'BEFORE'
WHEN 'A' THEN 'AFTER'
WHEN 'I' THEN 'INSTEAD OF'
END AS ACTIVATION,
RTRIM(CASE WHEN TRIGEVENT ='U' THEN 'UPDATE ' ELSE '' END
||
CASE WHEN TRIGEVENT ='D' THEN 'DELETE ' ELSE '' END
||
CASE WHEN TRIGEVENT ='I' THEN 'INSERT ' ELSE '' END) AS EVENT
FROM SYSIBM.SYSTRIGGERS
WHERE SCHEMA NOT LIKE 'SYS%'
ORDER BY SCHEMA, NAME, TBNAME;
|
SELECT tgr.EVENT_OBJECT_SCHEMA as TABLE_SCHEMA
,tgr.TRIGGER_NAME
,tgr.EVENT_OBJECT_TABLE as Table_name
,tgr.ACTION_TIMING as activation
,tgr.EVENT_MANIPULATION as event
FROM information_schema.triggers tgr
where tgr.TRIGGER_SCHEMA not in ('sys', 'performance_schema', 'mysql')
and tgr.TRIGGER_SCHEMA not like 'aws_db2z/OS%'
order by tgr.EVENT_OBJECT_SCHEMA, tgr.TRIGGER_NAME, tgr.EVENT_OBJECT_TABLE;
|
|
|
|
程序
存储过程
是存储在数据库中的预编译 SQL 语句的集合,可以从应用程序中调用。存储过程可以提高工作效率,因为相似的 SQL 语句或业务逻辑可以整合并在应用程序或其他程序中重复使用。以下查询为您提供了源数据库和目标数据库的存储过程的数量和详细信息:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT SCHEMA AS SCHEMA_NAME,
COUNT(*) AS PROC_COUNT
FROM SYSIBM.SYSROUTINES
WHERE ROUTINETYPE = 'P'
AND SCHEMA NOT LIKE 'SYS%'
GROUP BY SCHEMA
ORDER BY SCHEMA;
|
SELECT rtn.ROUTINE_SCHEMA as SCHEMA_NAME
,count(*) as proc_count
FROM information_schema.ROUTINES rtn
where rtn.ROUTINE_TYPE = 'PROCEDURE'
and rtn.ROUTINE_SCHEMA not in ('information_schema','sys',
'performance_schema', 'mysql')
and rtn.ROUTINE_SCHEMA not like 'aws_db2z/OS%'
group by rtn.ROUTINE_TYPE
order by rtn.ROUTINE_TYPE;
|
|
|
|
要获得详细级别的信息,请使用以下查询:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT SCHEMA AS SCHEMA_NAME,
NAME AS PROCEDURE_NAME
FROM SYSIBM.SYSROUTINES
WHERE ROUTINETYPE = 'P'
AND SCHEMA NOT LIKE 'SYS%'
ORDER BY SCHEMA,NAME;
|
SELECT rtn.ROUTINE_SCHEMA as SCHEMA_NAME
,rtn.ROUTINE_NAME as PROCEDURE_NAME
FROM information_schema.ROUTINES rtn
where rtn.ROUTINE_TYPE = 'PROCEDURE'
and rtn.ROUTINE_SCHEMA not in ('information_schema','sys',
'performance_schema', 'mysql')
and rtn.ROUTINE_SCHEMA not like 'aws_db2z/OS%'
ORDER BY SCHEMA_NAME, PROCEDURE_NAME;
|
|
|
|
函数
函数根据给定的输入实现特定的业务或功能逻辑,并返回预定义的输出。以下查询为您提供了源数据库和目标数据库的函数数量和详细信息:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT SCHEMA AS SCHEMA_NAME,
COUNT(*) AS PROC_COUNT
FROM SYSIBM.SYSROUTINES
WHERE ROUTINETYPE = 'F'
AND SCHEMA NOT LIKE 'SYS%'
GROUP BY SCHEMA
ORDER BY SCHEMA;
|
SELECT rtn.ROUTINE_SCHEMA as SCHEMA_NAME
,count(*) as func_count
FROM information_schema.ROUTINES rtn
where rtn.ROUTINE_TYPE = 'FUNCTION'
and rtn.ROUTINE_SCHEMA not in ('information_schema',
'sys', 'performance_schema', 'mysql')
and rtn.ROUTINE_SCHEMA not like 'aws_db2z/OS%'
group by rtn.ROUTINE_TYPE
order by rtn.ROUTINE_TYPE;
|
|
|
|
要获得详细级别的信息,请使用以下查询:
|
Db2 for z/OS Query
|
MySQL Query
|
SELECT SCHEMA AS SCHEMA_NAME,
NAME AS PROCEDURE_NAME
FROM SYSIBM.SYSROUTINES
WHERE ROUTINETYPE = 'F'
AND SCHEMA NOT LIKE 'SYS%'
ORDER BY SCHEMA,NAME;
|
SELECT rtn.ROUTINE_SCHEMA as SCHEMA_NAME
,rtn.ROUTINE_NAME as FUNCTION_NAME
FROM information_schema.ROUTINES rtn
where rtn.ROUTINE_TYPE = 'FUNCTION'
and rtn.ROUTINE_SCHEMA not in ('information_schema',
'sys', 'performance_schema', 'mysql')
and rtn.ROUTINE_SCHEMA not like 'aws_db2z/OS%'
ORDER BY SCHEMA_NAME, FUNCTION_NAME;
|
|
|
|
实用的 MySQL 目录表
下表总结了一些 Db2 z/OS 对象及其在 MySQL 上的相应对象,这些对象对数据库对象验证很有帮助。对于具有许多对象和并发工作负载的 MySQL 数据库,本文中提供的查询可能需要更长的时间才能完成。可以使用 MySQL 8.0 中的
数据字典更改
在一定程度上对此进行改进
|
Db2 z/OS
|
MySQL
|
|
sysibm.systables/ sysibm.syscolumns
|
information_schema.tables
|
|
sysibm.systables/ sysibm.syscolumns
|
information_schema.views
|
|
sysibm.systables/ sysibm.syscolumns / sysibm.sysforeignkeys / sysibm.sysrels
|
information_schema.table_constraints
|
|
sysibm.sysroutines
|
information_schema.routines
|
|
sysibm.systriggers
|
information_schema.triggers
|
|
sysibm.systables / sysibm.systablespace / sysibm.systablepart
|
Information_schema.partitions
|
处理 MySQL 中不支持的对象
对于 MySQL 不支持的 Db2 z/OS 对象(例如别名、序列或实例化查询表),必须手动将此类数据库对象从 Db2 Z/OS 转换为 MySQL 以实现类似功能。您可以使用本文中提供的查询来迭代验证迁移的对象,以识别差距并修复这些差距。
结论
数据库对象验证是深入了解迁移准确性的重要步骤。它确认所有数据库对象是否都已正确迁移以及目标数据库的完整性。它确保了依赖应用程序进程的业务连续性。
在这篇文章中,我们讨论了使用针对 Db2 z/OS 源和 RDS for MySQL 或 Aurora MySQL 目标数据库的元数据查询对数据库对象进行迁移后的验证。您可以在源数据库和目标数据库上运行本文中提供的查询,以检索元数据并比较输出以确认迁移是否成功。
如果您有任何意见或问题,请告诉我们。我们非常重视您的反馈!
作者简介
Sai Parthasaradhi
是 亚马逊云科技 专业服务的数据库迁移专家。他与客户紧密合作,帮助他们在 亚马逊云科技 上迁移数据库并对其进行现代化改造。
Pavithra Balasubramanian
是印度亚马逊网络服务的数据库顾问。她热衷于帮助客户完成云采用之旅,重点是将传统数据库迁移到亚马逊云科技 Cloud。
Vikas Gupta
是 亚马逊云科技 专业服务的首席数据库迁移顾问。他喜欢自动化手动流程并增强用户体验。他帮助客户在 亚马逊云科技 云中迁移和现代化工作负载,特别关注现代应用程序架构和开发最佳实践。