限制
如果要使用自动方案演化功能,请考虑以下限制:
-
Replicat 仅在经典和协调模式下支持自动模式(不支持并行模式)。
-
双向复制不支持自动模式。
-
自动方案不适用于 MAPEXCEPTION 子句中使用的表。在启动复制之前,用户必须显式创建相应的异常表。
-
自动模式不支持 COLMATCH 参数。
-
自动方案不会将源不可见/隐藏列从源传播到目标。
-
自动方案不符合 DDLSUBST 参数。
-
自动方案不会将源表中存在的所有索引或约束条件传播到相应的目标表。
-
自动方案不符合任何源列级字符集和/或整理。对应的列级字符集或整理未与目标列关联。
-
自动方案不会将任何表级字符集与目标表关联。
-
自动方案不会将任何列级字符集或整理与目标列关联。
使用自动方案时,请确保检查在源上使用的字符集以及目标系统上可用的字符集。不要假定源字符集在目标系统上必须可用。如果数据库并非全部使用某种形式的 Unicode,则尤其如此。此时,使用自动模式时,通过确保任何目标数据库都使用 UTF-8 或 UTF-16 作为其字符列来提供与源数据库字符集的最佳兼容性。当 IBM Db2 数据库是源时,最明显地说明了这一点。对于 z/OS 的 Db2 和 i 的 Db2,源数据通常是 EBCDIC 的某种形式,如果目标是任何其他数据库系列,则这些字符集不太可能在目标中直接表示。对于 ASCII 字符集也可以提出类似的担忧,因为并非所有数据库都普遍支持它们。
重要提示:对于目标数据库,使用 Unicode 可能需要扩展字符字段的长度,以确保从不是 Unicode 本身的源进行映射时,适当的大小可用。如果目标数据库使用比源数据库使用的字节数更多的字节来表示字符,则用户必须为所有此类列使用
AUTOSCHEMAOPTIONS TYPEMAP,并使用更宽和兼容的目标数据类型以避免任何可能的数据截断。 -
-
自动方案不支持
AUTO-INCREMENT类型的源列,并且不会创建/更改具有相同自动增量属性的对应目标列。 -
当源 MySQL 表仅包含唯一键且不包含主键时,自动方案可能无法在目标表上正确创建主键/唯一键。未提供正确密钥信息的 MySQL 数据库。
注意:这不是自动方案施加的某种限制,而是 MySQL 源。
- 如果源数据库为 Oracle Database 19c,则自动模式可能无法正确推导目标列的空值。
注意:这不是自动方案限制,而是源 Oracle Database 19c 未提供正确的关键字信息。Oracle 源 char 和 varchar2 类型列始终使用字节语义进行求值,即使源 DDL 使用 char 语义也是如此。
-
如果 Oracle 源表未定义主键,但只有一个唯一键,其中包含任何虚拟列、可为空的列、用户定义的数据类型、扩展的长
varchar列或基于函数的索引列作为有效键列,则自动方案不会在目标表上创建此类列作为主键/唯一键。 -
如果源是 PostgreSQL 数据库,并且源表包含任何 LOB 列作为关键字的一部分,则用户必须在其提取参数文件中指定
DBOPTIONS MAXLOBKEYLEN <value>。否则,默认情况下(不带任何AUTOSCHEMAOPTIONS TYPEMAP),自动方案将在目标上创建长度为零的对应列。 -
对于源 PostgreSQL
Array类型,“自动模式”将创建CLOB类型,或对应目标列的等效类型。必须指定AUTOSCHEMAOPTIONS TYPEMAP以根据源 PostgreSQLArray列名称选择合适的目标类型。 -
对于具有多字节数据库字符集的 Oracle 源
CLOB列,默认情况下会为目标列选择NCLOB或等效目标类型。要覆盖,必须使用TYPEMAP。 -
对于 z/OS 的 Db2,复制 UTF-16 数据需要 EBCDIC 或 Unicode 数据库。其他双字节编码不受显式支持。
-
对于复制 UTF-16 数据的 IBM Db2(以前称为 Db2 for LUW)数据库需要 Unicode 数据库。其他双字节编码不受显式支持。
-
对于源
ENUM类型列,自动模式将char作为 MySQL 上的目标类型。如果需要,请使用TYPEMAP改用VARCHAR。 -
对于精度小于 8 的源数字列/小数列,必须根据源列名称而不是源数据类型名称指定
AUTOSCHEMAOPTIONS TYPEMAP。 - 必须基于源列名称指定
AUTOSCHEMAOPTIONS TYPEMAP,而不是基于类型源列的源数据类型名称:- 长度大于 4000 的字符/变量类型列。
- 时间 (p)
- 时间 (p) 无时区
- 时间 (p) 与时区
- TIMESTAMP(p)
- TIMESTAMP(p) 无时区
- 带有时区的 TIMESTAMP(p)
- 所有 INTERVAL 变量
- 源 SQL Server 向量类型列
-
自动方案不支持将
COLMAP子句与包含双引号的列名一起使用。COLMAP子句中特定列映射中使用的目标列名(映射到一个源列名)不能与源表中的任何其他列名相同。 -
当运行 GoldenGate 的系统的区域设置是多字节字符集(如中文或日语)(例如 zh_CN.UTF-8)时,ASCII 中可能会出现很少的自动模式错误消息。
-
在 SQL Server 目标上,对于不带小数秒的任何源
datetime/timestamp类型,必须指定对应源类型(或列名)的AUTOSCHEMAOPTIONS TYPEMAP,并将datetime2(0)指定为指定的替换目标类型。 -
在 Db2 z/OS 目标上,自动方案不支持使用单个
ALTER TABLE DDL删除多个列。您可以重新运行在 OGG 错误(来自复制报告文件)中报告的失败 DDL,然后重新启动复制。 -
在 SQLServer 目标上,自动模式无法正确检测/执行从
VARCHAR(n)到TEXT或VARCHAR(max)的列修改。 AUTOSCHEMAOPTIONS TYPEMAP不适用于目标类型规范:- NUMBER (p,s)
- NUMERIC(p,s)
- DECIMAL(p,s)
- 带时区的 TIMESTAMP(p)
- 带时区的 TIME(p):解决方法是使用 TIME(p) 作为目标类型名称规范,而不是不带时区的 TIME(p),因为两者在语义上是等效的。
- 不带时区的 TIMESTAMP(p) 作为一种解决方法,您可以使用
TIMESTAMP(p)作为目标类型名称规范,而不是不带时区的TIMESTAMP(p),因为两者在语义上是等效的。 - 变量二进制(最大)
- Varchar(max):解决方法是使用 CLOB 作为目标类型名称规范,而不是 varchar(max)
- Nvarchar(max):解决方法是使用 NCLOB 作为目标类型名称规范,而不是 nvarchar(max)
-
在 SQLServer 目标上,在类型规范中指定
Vector维是必需的。指定基本类型(如float16或float32)是可选的。 -
对于
DATETIME类型的 SQLServer 源列,Autoschema 无法区分DATETIME和DATETIME2(3)。因此,在使用显式TYPEMAP子句时,必须配置基于源列名称的TYPEMAP,而不是基于源类型名称的类型映射。 -
对于 DB2AS400 目标
NCHAR列,自动方案无法正确检测所需的列类型修改。 -
如果将 PostgreSQL 上的任何 Oracle GoldenGate Delivery(或 PostgreSQL 兼容)数据库配置为使用 PostgreSQL 本机 ODBC 驱动程序,则自动方案不会正确检测变更表修改列用例。
-
对于 IBM Db2 for i,作业可能看起来“挂起”并且没有进展。例如,如果请求的操作可能会导致数据截断问题,则在复制上使用自动方案时,这更有可能发生。根据 IBM i 系统的配置方式,复制作业可以置于消息等待 (Message Wait,MSGW) 状态,系统正在等待用户提供作业解决特定问题时应采取的操作。目前,GoldenGate 无法直接解决此问题,您必须在 IBM i 端处理此问题。
-
对于源 Snowflake 列类型
TIMESTAMP_NTZ(p)、TIMESTAMP_LTZ(p)或TIMESTAMP_TZ(p),自动模式会将它们映射到相应的时间戳列,但日期时间精度为 0。为了避免小数秒的数据截断,必须使用AUTOSCHEMAOPTIONS TYPEMAP在目标上选择所需的类型。 -
自动方案不会区分 PostgreSQL 源
JSON和JSONB列类型。对于 PostgreSQL 源JSONB类型,必须基于源列名而不是列类型使用AUTOSCHEMAOPTIONS TYPEMAP。 -
自动模式不会区分 PostgreSQL 源无限制数字列(无精度和刻度的数字)和 PostgreSQL 源数字类型(1000、100)。对于 PostgreSQL 源数字 (1000,100) 类型列,必须基于源列名而不是列类型使用
AUTOSCHEMAOPTIONS TYPEMAP。 -
对于 Snowflake 源列类型
ARRAY、GEOGRAPHY和GEOMETRY,自动模式映射到目标上的JSON类型(如果支持)或CLOB类型。要选择目标上的其他类型,用户必须使用AUTOSCHEMAOPTIONS TYPEMAP。 - 未正确显示包含
AUTOSCHEMAOPTIONS TYPEMAP中基于源列名称的规范部分的信息性消息。