本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Oracle 到 PostgreSQL 的转换设置
当来源是 Oracle 且目标是 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 时,以下设置适用。您可以使用 AWS Management Console 或 ModifyConversionConfigurationAPI 操作配置这些设置。
本主题介绍特定于 Oracle 到 PostgreSQL 转换路径的设置。除了这些设置外,DMS Schema Conversion 还提供适用于所有源和目标对的设置,例如转换后的 SQL 中操作项注释的严重性级别以及使用生成式 AI 进行转换的选项。有关这些设置,请参阅常用转换设置。
使用 API 或 AWS CLI 时,请在部分名称ORACLE_TO_POSTGRESQLORACLE_TO_POSTGRESQL_14、或下方指定转换路径设置ORACLE_TO_POSTGRESQL_15。所有三个版本控制部分都接受相同的密钥。要查找您的项目使用的部分名称,请DescribeConversionConfiguration先致电并仅更新响应中存在的部分。
每个设置都显示 AWS Management Console 标签,后面是括号中的 AP AWS I 和 CLI 参数名称。使用 API 或 AWS CLI 配置设置时,请使用参数名称。这些设置的列出顺序与它们在中的显示顺序相同 AWS Management Console。
- 目标引擎版本 (
ORACLE_TO_POSTGRESQL_target_engine_version) -
为目标数据库选择引擎版本。此设置是 DMS 架构转换的转换目标 PostgreSQL 主要版本功能集,它决定了 DMS 架构转换适用的版本化设置部分(或)。
ORACLE_TO_POSTGRESQL_14ORACLE_TO_POSTGRESQL_15该值15以 PostgreSQL 15 及更高版本的功能为目标,14以 PostgreSQL 14 的功能为目标,因此您的目标数据库可以运行比您选择的值更高的版本(例如,PostgreSQL 16 目标的15值为)。与此页面上的其他设置不同,此设置不存储在转换路径部分。相反,它存储在顶级Conversion version部分中,如以下示例所示。{ "Conversion version": { "ORACLE_TO_POSTGRESQL_target_engine_version": "15" } }类型:字符串 (
14|15)默认值:
15 - 物化视图 ()
MaterializedViewConvert -
指定 DMS 架构转换如何转换目标上的 Oracle 实例化视图。
API/CLI 价值 结果达到了目标 TABLEDMS 架构转换会创建包含相同列的常规表。当您手动或使用复制工具管理刷新时,请使用此选项。 MATERIALIZED_VIEWDMS 架构转换会创建一个 PostgreSQL MATERIALIZED VIEW。当目标支持时使用此选项REFRESH MATERIALIZED VIEW。类型:字符串 (
TABLE|MATERIALIZED_VIEW)默认值:
TABLE - 生成行 ID (
GenerateRowId) -
源 Oracle 数据库可以使用
ROWID伪列。PostgreSQL 不支持类似功能。此设置指定 DMS 架构转换是否模拟转换后的代码中的ROWID伪列,以及 DMS 架构转换使用哪种数据类型进行仿真。控制台标签 API/CLI 价值 行为 不要生成 falseDMS 架构转换不会模拟 ROWID伪列,而是将引用保留为操作项。当您的源 Oracle 代码不使用时,请使用此选项ROWID。转换后的代码运行得更快。使用 bigint 数据类型来模拟 ROWID 伪列 trueDMS 架构转换使用数据类型来模拟转换后的代码中的 ROWID伪列。bigint使用字符变化的数据类型来模拟 ROWID 伪列 GENERATE_AS_CHARACTER_DOMAIN_TYPEDMS 架构转换使用数据类型来模拟转换后的代码中的 ROWID伪列。character varying类型:字符串(枚举)
默认值:
false
代码
选择特定于您的源 Oracle 代码的转换设置。
- 对@@ 于 NUMBER 数据类型的列使用优化的数据类型映射 (
UseOptimizedMappingForNumberConversion) -
指定 DMS 架构转换是否根据精度和小数位数将每个 Oracle
NUMBER列映射到最适合的数值数据类型。-
true— DMS 架构转换根据每NUMBER列的精度和小数位数将每列映射到最具体的 PostgreSQL 数字类型(例如SMALLINTINTEGER、BIGINT或)。 -
false— DMS 架构转换将所有NUMBER列映射到。NUMERIC
类型:布尔值 (
true|false)默认值:
true -
- 使用原生 PostgreSQL T O_CHAR 函数 ()
ToCharFunctionOracle -
指定 DMS 架构转换是否在转换后的代码中模拟 Oracle
TO_CHAR函数。-
false— DMS 架构转换在转换后的代码中模拟 OracleTO_CHAR行为。 -
true— DMS 架构转换转换TO_CHAR并TO_NCHAR调用原生 PostgreSQL 函数TO_CHAR。选择此选项可避免在您的格式字符串与 PostgreSQL 兼容时进行模拟。
类型:布尔值 (
true|false)默认值:
false -
- 使用原生 PostgreSQL 的 TO_DATE 函数 ()
ToDateFunctionOracle -
指定 DMS 架构转换是否在转换后的代码中模拟 Oracle
TO_DATE函数。-
false— DMS 架构转换在转换后的代码中模拟 OracleTO_DATE行为。 -
true— DMS 架构转换将TO_DATE调用转换为原生 PostgreSQL 函数TO_DATE。
类型:布尔值 (
true|false)默认值:
false -
- 使用原生 PostgreSQL 的 TO_NUMBER 函数 ()
ToNumber -
指定 DMS 架构转换是否在转换后的代码中模拟 Oracle
TO_NUMBER函数。-
false— DMS 架构转换在转换后的代码中模拟 OracleTO_NUMBER行为。 -
true— DMS 架构转换将TO_NUMBER调用转换为原生 PostgreSQL 函数TO_NUMBER。
类型:布尔值 (
true|false)默认值:
false -
- 在数据库和应用程序使用相同时区的情况下,提高转换后的代码的性能 (
ToTimeZone) -
指定 DMS 架构转换是否在转换后的代码中模拟时区。
-
true— DMS 架构转换不模拟时区。当您的数据库和应用程序使用相同的时区时,请使用此选项。转换后的代码运行得更快。 -
false— DMS 架构转换在转换后的代码中模拟时区。
类型:布尔值 (
true|false)默认值:
false -
- 使用源端生成的最后一个值填充转换后的序列 ()
AlertSequenceRestart -
指定 DMS 架构转换是否继续从源上生成的最后一个值开始转换后的序列。
-
true— DMS Schema Conversion 将每个转换后的序列设置为从源上生成的最后一个值开始,因此序列可以继续运行而不会发生冲突。 -
false— DMS 架构转换从其默认初始值开始转换后的序列。
类型:布尔值 (
true|false)默认值:
false -
- 将 NUMBER 数据类型的主键列和外键列转换为 BIGINT 数据类型 ()
ConvertNumberToBigint -
指定 DMS 架构转换是否将
NUMBER数据类型的主键和外键列转换为。BIGINT如果您的源数据库在这些列中存储浮点数,请谨慎使用以避免数据丢失。-
true— DMS 架构转换将主键和外键NUMBER列映射到。BIGINT -
false— DMS 架构转换使用这些列的标准数字映射。
类型:布尔值 (
true|false)默认值:
false -
- 仅转换活动触发器和约束 (
IgnoreDisabledTriggersConstraints) -
指定 DMS 架构转换是否在转换过程中跳过已停用的触发器和约束。
-
true— DMS 架构转换仅转换活动触发器和约束,而跳过已停用的触发器和约束。 -
false— DMS 架构转换转换所有触发器和约束,包括已停用的触发器和约束。
类型:布尔值 (
true|false)默认值:
false -
- 转换在被调用例程中创建的动态 SQL 代码 ()
ConvertOutputAsDynamic -
指定 DMS 架构转换是否将例程外部引用的字符串变量转换为动态 SQL。
-
true— DMS 架构转换将例程外部引用的字符串变量转换为动态 SQL。 -
false— DMS 架构转换不会将这些字符串变量转换为动态 SQL。
类型:布尔值 (
true|false)默认值:
false -
- 将过程转换为函数 (
ConvertProceduresToFunction) -
指定 DMS 架构转换是否将 Oracle 存储过程转换为 PostgreSQL 无效函数。
-
true— DMS 架构转换将 Oracle 存储过程转换为 PostgreSQL 无效函数。 -
false— DMS 架构转换将 Oracle 存储过程转换为 PostgreSQL 过程。
类型:布尔值 (
true|false)默认值:
false -
- 保留系统生成的约束的名称 (
ConvertSysConstraintNamesUsingOriginal) -
指定 DMS 架构转换是否在目标中保留 Oracle 系统生成的原始约束名称。如果您的源 Oracle 代码使用系统生成的约束名称在目标数据库中创建同名的约束,请使用此选项。
-
true— DMS 架构转换将 Oracle 系统生成的原始约束名称保留在目标中。 -
false— DMS 架构转换生成新的约束名称。
类型:布尔值 (
true|false)默认值:
false -
- 设置源数据库的时区 (
UseDefaultTimeZoneForSysdateEmulation) -
指定模拟 Oracle
SYSDATE函数的函数是否使用中的时区DefaultTimeZoneForSysdateEmulation,以便转换后的代码返回的值与源数据库相同。-
true— DMS 架构转换使用中指定的时区DefaultTimeZoneForSysdateEmulation进行SYSDATE仿真。 -
false— DMS 架构转换使用默认时区进行SYSDATE仿真。
类型:布尔值 (
true|false)默认值:
false -
DefaultTimeZoneForSysdateEmulation-
开启
SYSDATE仿真时,DMS 架构转换使用的时区。UseDefaultTimeZoneForSysdateEmulation指定有效的 IANA 时区名称,例如UTCAmerica/New_York、或Europe/Berlin。如果是,则此值UseDefaultTimeZoneForSysdateEmulation不起作用false。类型:字符串(IANA 时区名称)
默认值:
UTC
注意
AWS Management Console 列出了另一个选项,即 “添加引发用户定义异常的扩展包函数”,介于 “将过程转换为函数” 和 “保留系统生成的约束的名称” 之间。此选项仅在中配置 AWS Management Console ,无法通过 API 或 AWS CLI 获得。相关的严重性级别行为由ShowSeverityLevelInSql通用设置控制。有关更多信息,请参阅 常用转换设置。
Orace 内置例程
选择要在转换后的代码中使用的 Orafce 内置例程。Orafce 是一个 PostgreSQL 扩展,它提供了与 Oracle 内置函数兼容的例程。每个例程都有一个专用的布尔值设置。当您将例程设置为时true,DMS 架构转换会将匹配的 Oracle 内置函数转换为其 Orafce 例程。将其设置为时false,DMS 架构转换会将该函数保留为操作项以供手动审查。要使用这些例程,目标数据库上必须有 orafce 扩展。所有这些例程都默认为。false将例程设置为,true仅在您确认使用中的函数行为与 Orafce 例程兼容之后。
| 设置名称 | 甲骨文内置函数 |
|---|---|
AddMonthsBuiltinFunctionOracle |
ADD_MONTHS |
BitandBuiltinFunctionOracle |
BITAND |
CoshBuiltinFunctionOracle |
COSH |
DbmsAssertBuiltinFunctionOracle |
DBMS_ASSERT 程序包 |
DbmsOutputBuiltinFunctionOracle |
DBMS_OUTPUT 程序包 |
DbmsRandomBuiltinFunctionOracle |
DBMS_RANDOM 程序包 |
DbtimezoneBuiltinFunctionOracle |
DBTIMEZONE |
DecodeBuiltinFunctionOracle |
DECODE |
DumpBuiltinFunctionOracle |
DUMP |
InstrBuiltinFunctionOracle |
INSTR |
InstrbBuiltinFunctionOracle |
INSTRB |
LastDayBuiltinFunctionOracle |
LAST_DAY |
LengthBuiltinFunctionOracle |
LENGTH |
LengthbBuiltinFunctionOracle |
LENGTHB |
ListaggBuiltinFunctionOracle |
LISTAGG |
LnnvlBuiltinFunctionOracle |
LNNVL |
LpadBuiltinFunctionOracle |
LPAD |
LtrimBuiltinFunctionOracle |
LTRIM |
MedianBuiltinFunctionOracle |
MEDIAN |
MonthsBetweenBuiltinFunctionOracle |
MONTHS_BETWEEN |
NanvlBuiltinFunctionOracle |
NANVL |
NextDayBuiltinFunctionOracle |
NEXT_DAY |
NlssortBuiltinFunctionOracle |
NLSSORT |
Nvl2BuiltinFunctionOracle |
NVL2 |
NvlBuiltinFunctionOracle |
NVL |
RoundDateFmtBuiltinFunctionOracle |
ROUND(日期) |
RoundNumberBuiltinFunctionOracle |
ROUND(数字) |
RpadBuiltinFunctionOracle |
RPAD |
RtrimBuiltinFunctionOracle |
RTRIM |
SessiontimezoneBuiltinFunctionOracle |
SESSIONTIMEZONE |
SinhBuiltinFunctionOracle |
SINH |
SubstrBuiltinFunctionOracle |
SUBSTR |
SubstrbBuiltinFunctionOracle |
SUBSTRB |
SysdateBuiltinFunctionOracle |
SYSDATE |
TanhBuiltinFunctionOracle |
TANH |
ToCharDatetimeBuiltinFunctionOracle |
TO_CHAR(日期时间) |
ToCharNumberBuiltinFunctionOracle |
TO_CHAR(数字) |
ToDateBuiltinFunctionOracle |
TO_DATE |
ToMultiByteBuiltinFunctionOracle |
TO_MULTI_BYTE |
ToNumberBuiltinFunctionOracle |
TO_NUMBER |
ToSingleByteBuiltinFunctionOracle |
TO_SINGLE_BYTE |
TruncDateBuiltinFunctionOracle |
TRUNC(日期) |
TruncNumberBuiltinFunctionOracle |
TRUNC(数字) |
每个例程都是一个单独的布尔键。以下示例开启了 Oracle ADD_MONTHS、、NVL和函数的 Orafce 例程。SUBSTR添加或删除密钥以匹配源代码中的函数,并将相同的密钥应用于项目使用的每个部分名称。
{ "ORACLE_TO_POSTGRESQL_15": { "AddMonthsBuiltinFunctionOracle": true, "NvlBuiltinFunctionOracle": true, "SubstrBuiltinFunctionOracle": true } }
SQL 代码设置
配置 DMS 架构转换如何处理 PostgreSQL 不支持的 Oracle 内置对象。
- 将不支持的内置对象转换为存根对象 ()
ConvUnsupportedBuiltinsToStubs -
指定 DMS 架构转换是否将不支持的内置对象替换为存根对象。
-
false— DMS 架构转换将不支持的内置对象保留为评估报告中的操作项目。 -
true— DMS 架构转换将每个不支持的内置对象替换为具有相同签名的存根对象。转换后的对象会编译,因此您可以在处理单个存根之前部署和测试架构的其余部分。
类型:布尔值 (
true|false)默认值:
false -
- 在@@ 单独的架构中创建存根对象 ()
CreateStubsInSeparateSchema -
指定 DMS 架构转换是否在单独的架构中创建存根对象。 AWS Management Console 只有选中 “将不支持的内置对象转换为存根对象” 时,此选项才会出现在中,并且仅在启用该选项时才会生效。
-
true— DMS 架构转换在单独的架构中创建存根对象。这可以使您的应用程序架构保持干净,并可以轻松确定哪些存根仍需要实现。 -
false— DMS 架构转换在与转换后的对象相同的架构中创建存根对象。
类型:布尔值 (
true|false)默认值:
true -
示例:将 Oracle 配置为 PostgreSQL 设置
以下示例将物化视图保留为 PostgreSQL 实例化视图,使用bigint数据类型模拟ROWID伪列,并将过程转换为函数。对项目使用的每个部分名称应用相同的设置(请DescribeConversionConfiguration先检查输出)。
{ "ORACLE_TO_POSTGRESQL_15": { "MaterializedViewConvert": "MATERIALIZED_VIEW", "GenerateRowId": "true", "ConvertProceduresToFunction": true }, "ORACLE_TO_POSTGRESQL_14": { "MaterializedViewConvert": "MATERIALIZED_VIEW", "GenerateRowId": "true", "ConvertProceduresToFunction": true }, "ORACLE_TO_POSTGRESQL": { "MaterializedViewConvert": "MATERIALIZED_VIEW", "GenerateRowId": "true", "ConvertProceduresToFunction": true } }