本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
RDS使用 My SQL 或 Amazon Aurora My 从 Oracle 迁移到亚马逊 SQL AWS Schema Conversion Tool
要在转换后的 “我的SQL代码” 中模拟 Oracle 数据库函数,请使用中的 AWS SCT Oracle to My SQL 扩展包。有关扩展包的更多信息,请参阅将扩展包与 AWS Schema Conversion Tool。
主题
“我SQL作为目标数据库” 的权限
“我” SQL 作为目标所需的权限如下:
CREATE开启* 。 *
ALTER开启* 。 *
DROP开启* 。 *
INDEX开启* 。 *
REFERENCES开启* 。 *
SELECT开启* 。 *
CREATEVIEW开启* 。 *
SHOWVIEW开启* 。 *
TRIGGER开启* 。 *
CREATEROUTINE开启* 。 *
ALTERROUTINE开启* 。 *
EXECUTE开启* 。 *
CREATETEMPORARYTABLES开启* 。 *
AWS_LAMBDA_ACCESS
INSERT,UPDATEon AWS _ ORACLE _ EXT。 *
INSERT,UPDATE,DELETEO AWS N _ ORACLE _ EXT _ DATA。 *
如果您使用 My SQL Database 5.7 或更低版本作为目标,则授予 INVOKE LAMBDA *.* 权限而不是 _。AWS LAMBDA ACCESS对于 “我的SQL数据库” 版本 8.0 及更高版本,请授予 AWS LAMBDA _ ACCESS 权限。
您可以使用以下代码示例创建数据库用户并授予权限。
CREATE USER '
user_name
' IDENTIFIED BY 'your_password
'; GRANT CREATE ON *.* TO 'user_name
'; GRANT ALTER ON *.* TO 'user_name
'; GRANT DROP ON *.* TO 'user_name
'; GRANT INDEX ON *.* TO 'user_name
'; GRANT REFERENCES ON *.* TO 'user_name
'; GRANT SELECT ON *.* TO 'user_name
'; GRANT CREATE VIEW ON *.* TO 'user_name
'; GRANT SHOW VIEW ON *.* TO 'user_name
'; GRANT TRIGGER ON *.* TO 'user_name
'; GRANT CREATE ROUTINE ON *.* TO 'user_name
'; GRANT ALTER ROUTINE ON *.* TO 'user_name
'; GRANT EXECUTE ON *.* TO 'user_name
'; GRANT CREATE TEMPORARY TABLES ON *.* TO 'user_name
'; GRANT AWS_LAMBDA_ACCESS TO 'user_name
'; GRANT INSERT, UPDATE ON AWS_ORACLE_EXT.* TO 'user_name
'; GRANT INSERT, UPDATE, DELETE ON AWS_ORACLE_EXT_DATA.* TO 'user_name
';
在前面的示例中,替换 user_name
用你的用户名。然后,替换 your_password
使用安全的密码。
如果您使用 My SQL Database 5.7 或更低版本作为目标,请使用GRANT INVOKE LAMBDA ON *.* TO '
而不是。user_name
'GRANT AWS_LAMBDA_ACCESS TO '
user_name
'
要使用 Amazon f RDS or My SQL 或 Aurora My SQL 作为目标,请将lower_case_table_names
参数设置为1
。此值意味着 “我的SQL服务器” 在处理表、索引、触发器和数据库等对象名称的标识符时不区分大小写。如果目标实例中已开启二进制日志记录,请将 log_bin_trust_function_creators
参数设置为 1
。在这种情况下,您无需使用 DETERMINISTIC
、READS SQL DATA
或 NO SQL
特性创建存储函数。要配置这些参数,请创建新的数据库参数组或修改现有数据库参数组。
Oracle 到 My 的SQL转换设置
要编辑 Oracle 到 My 的SQL转换设置,请选择中的 “设置” AWS SCT,然后选择 “转换设置”。从上方的列表中选择 Oracle,然后选择 Oracle — My SQL。 AWS SCT 显示 Oracle 到 My SQL 转换的所有可用设置。
中的 Oracle 到 “我的SQL转换” 设置 AWS SCT 包括以下选项:
-
限制转换后的代码中操作项的注释数量。
对于在转换后的代码中为所选严重性及更高的措施项添加注释,请选择措施项的严重性。 AWS SCT 在转换后的代码中为选定严重性及更高的措施项添加注释。
例如,要最大限度地减少转换后的代码中的注释数量,请选择仅错误。要在转换后的代码中包含所有操作项的注释,请选择所有消息。
-
为了解决这个问题,你的源 Oracle 数据库可以使用
ROWID
伪列,但是 My SQL 不支持类似的功能。 AWS SCT 可以在转换后的代码中模拟ROWID
伪列。为此,请为生成行 ID?选择生成为身份 。如果源 Oracle 代码不使用
ROWID
伪列,请为生成行 ID?选择不生成。在这种情况下,转换后的代码运行更快。 -
用于处理您的源 Oracle 代码,前提是该代码包含
TO_CHAR
TO_DATE
、和TO_NUMBER
函数,其参数是 My SQL 不支持的参数。默认情况下, AWS SCT 会在转换后的代码中模拟这些参数的用法。当您的源 Oracle 代码仅包含 Postgre SQL 支持的参数时,您可以使用原生 My SQL
TO_CHAR
TO_DATE
、和TO_NUMBER
函数。在这种情况下,转换后的代码运行更快。要仅包含这些参数,请选择以下值:函数 TO_ CHAR () 不使用 Oracle 特定的格式化字符串
函数 TO_ DATE () 不使用 Oracle 特定的格式化字符串
函数 TO_ NUMBER () 不使用 Oracle 特定的格式化字符串
-
解决数据库和应用程序在不同的时区运行的问题。默认情况下, AWS SCT 在转换后的代码中模拟时区。但是,当数据库和应用程序使用相同的时区时,您不需要这种模拟。在这种情况下,选择客户端时区与服务器端时区相匹配。
迁移注意事项
将 Oracle 转换为 RDS for My SQL 或 Aurora My 时SQL,要更改语句的运行顺序,可以使用GOTO
语句和标签。SQL语句后面的任何 PL/ GOTO
语句都将被跳过,并继续在标签处进行处理。可在过程、批处理或语句块中的任意位置使用 GOTO
语句和标签。您也可以接下来的GOTO语句。
我的SQL不使用GOTO
语句。当 AWS SCT 转换包含GOTO
语句的代码时,它会将该语句转换为使用BEGIN…END
或LOOP…END LOOP
语句。
您可以在下表中找到如何 AWS SCT 转换GOTO
语句的示例。
Oracle 语句 | 我的SQL陈述 |
---|---|
|
|
|
|
|
|
将 Oracle 中的对WITH账单转换为 My SQL 或 Amazon Aurora 我的RDS对账单 SQL
您可以在 Oracle 中使用子WITH句(subquery_factoring)为子查询块分配名称(query_name)。然后,您可以通过指定查询名称来引用查询中的子查询块多位置。如果子查询块不包含链接或参数(本地、过程、函数、包),则 AWS SCT 会将该子句转换为视图或临时表。
将子句转换为临时表的好处是,对子查询的重复引用可能更有效。效率之所以更高,是因为可以轻松地从临时表中检索数据,而不是每次引用都需要数据。您可以通过使用额外的视图或临时表模拟。视图名称使用格式 <procedure_name>$<subselect_alias>
。
您可以在下表中找到示例。
Oracle 语句 | 我的SQL陈述 |
---|---|
|
|
|
|
|
|