View a markdown version of this page

Oracle 到 PostgreSQL 的转换设置 - AWS Database Migration Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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_14 ORACLE_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 价值 结果达到了目标
TABLE DMS 架构转换会创建包含相同列的常规表。当您手动或使用复制工具管理刷新时,请使用此选项。
MATERIALIZED_VIEW DMS 架构转换会创建一个 PostgreSQL MATERIALIZED VIEW。当目标支持时使用此选项REFRESH MATERIALIZED VIEW

类型:字符串 (TABLE|MATERIALIZED_VIEW)

默认值TABLE

生成行 ID (GenerateRowId)

源 Oracle 数据库可以使用 ROWID 伪列。PostgreSQL 不支持类似功能。此设置指定 DMS 架构转换是否模拟转换后的代码中的ROWID伪列,以及 DMS 架构转换使用哪种数据类型进行仿真。

控制台标签 API/CLI 价值 行为
不要生成 false DMS 架构转换不会模拟ROWID伪列,而是将引用保留为操作项。当您的源 Oracle 代码不使用时,请使用此选项ROWID。转换后的代码运行得更快。
使用 bigint 数据类型来模拟 ROWID 伪列 true DMS 架构转换使用数据类型来模拟转换后的代码中的ROWID伪列。bigint
使用字符变化的数据类型来模拟 ROWID 伪列 GENERATE_AS_CHARACTER_DOMAIN_TYPE DMS 架构转换使用数据类型来模拟转换后的代码中的ROWID伪列。character varying

类型:字符串(枚举)

默认值false

代码

选择特定于您的源 Oracle 代码的转换设置。

对@@ 于 NUMBER 数据类型的列使用优化的数据类型映射 (UseOptimizedMappingForNumberConversion)

指定 DMS 架构转换是否根据精度和小数位数将每个 Oracle NUMBER 列映射到最适合的数值数据类型。

  • true— DMS 架构转换根据每NUMBER列的精度和小数位数将每列映射到最具体的 PostgreSQL 数字类型(例如SMALLINTINTEGERBIGINT或)。

  • false— DMS 架构转换将所有NUMBER列映射到。NUMERIC

类型:布尔值 (true|false)

默认值true

使用原生 PostgreSQL T O_CHAR 函数 () ToCharFunctionOracle

指定 DMS 架构转换是否在转换后的代码中模拟 Oracle TO_CHAR 函数。

  • false— DMS 架构转换在转换后的代码中模拟 Oracle TO_CHAR 行为。

  • true— DMS 架构转换转换TO_CHARTO_NCHAR调用原生 PostgreSQL 函数TO_CHAR。选择此选项可避免在您的格式字符串与 PostgreSQL 兼容时进行模拟。

类型:布尔值 (true|false)

默认值false

使用原生 PostgreSQL 的 TO_DATE 函数 () ToDateFunctionOracle

指定 DMS 架构转换是否在转换后的代码中模拟 Oracle TO_DATE 函数。

  • false— DMS 架构转换在转换后的代码中模拟 Oracle TO_DATE 行为。

  • true— DMS 架构转换将TO_DATE调用转换为原生 PostgreSQL 函数TO_DATE

类型:布尔值 (true|false)

默认值false

使用原生 PostgreSQL 的 TO_NUMBER 函数 () ToNumber

指定 DMS 架构转换是否在转换后的代码中模拟 Oracle TO_NUMBER 函数。

  • false— DMS 架构转换在转换后的代码中模拟 Oracle TO_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 } }