Sybase:支持的数据类型、对象和操作
本节包含有关 Oracle GoldenGate for Sybase 支持的数据类型、对象和操作的信息。
支持的 Sybase 数据类型
整数
-
BIGINT -
BIT -
DECIMAL -
INT(有符号和无符号) -
TINYINT(有符号和无符号) -
NUMERIC -
SMALLINT(有符号和无符号)
支持的限制
-
在不涉及计算或转换的情况下将数据移动到同一数据类型的目标列时,支持
NUMERIC和DECIMAL(固定点),不会丢失完整性。当必须执行计算或转换时,Oracle GoldenGate 支持带符号长整型(32 位)的最大值。 -
Sybase 数据库之间的自动映射支持
BIT。要在 Sybase 和其他数据库类型之间移动BIT数据,Oracle GoldenGate 会将BIT数据视为二进制文件。在这种情况下,需要满足以下条件:BIT列必须映射到相应的源列或目标列,并在TABLE或MAP语句中使用COLMAP子句。
-
对于 Sybase 15.7 及更高版本,无法复制以下数据类型:
-
BIGINT(作为键列) -
BIGDATETIME -
BIGTIME
-
-
复制
TINYINT且提取不在复制的相同版本中时,即使在相同的 Sybase 版本之间复制,也需要创建sourcedef和/或targetdef文件。
浮点数
-
DOUBLE -
FLOAT -
REAL
支持的限制
浮点数对范围和精度的支持取决于主机。一般来说,精度精确到 16 位有效数字,但应查看数据库文档以确定预期的近似值。Oracle GoldenGate 舍入或截断超过支持精度的值。
字符数据
-
CHAR -
NCHAR -
NVARCHAR -
VARCHAR -
UNICHAR UNIVARCHAR支持限制-
这些数据类型受数据库支持的最大长度支持,这是最大页大小。
- 当 Sybase 数据库是目标并且源是异构数据库并且您从源复制到目标时,使用 Sybase
char_length或datalength函数提取NVARCHAR复制结果可能会导致数据完整性问题。如果使用的 Sybase 发行版早于适用于 Windows x64 平台的 Adaptive Server Enterprise 15.5 EBF 21262:15.5 ESD #5.3,则会发生这种情况。
日期和时间戳
-
BIGDATETIME -
BIGTIME -
DATE -
DATETIME -
SMALLDATETIME -
TIME
支持的限制
-
Oracle GoldenGate 支持从 0001/01/03:00:00 到 9999/12/31:23:59:59 的时间戳数据。如果时间戳从 GMT 转换为本地时间,则这些限制也适用于生成的时间戳。根据时区,转换可能会增加或减去小时数,这可能会导致时间戳超过支持的下限或上限。
-
Oracle GoldenGate 不支持负日期。
大型对象
-
BINARY -
IMAGE -
TEXT -
UNITEXT -
VARBINARY
支持的限制
-
TEXT、UNITEXT和IMAGE的长度最多支持 2 GB。 -
从其他数据库(如 Oracle
BLOB和CLOB)复制的大型对象可以映射到 SybaseCHAR、VARCHAR、BINARY和VARBINARY列。要防止在复制的大对象大于目标列的大小时复制异常终止,请在复制参数文件中将DBOPTIONS参数与ALLOWLOBDATATRUNCATE选项一起使用。有关详细信息,请参阅《 Reference for Oracle GoldenGate for Windows and UNIX 》。 -
要将数据从允许空
LOB列的源数据库移动到 Sybase 目标,请在 Replicat 参数文件中将DBOPTIONS参数与EMPTYLOBSTRING选项一起使用。此参数接受字符串值并阻止 Replicat 将目标列设置为 Sybase 不允许的NULL。有关详细信息,请参阅《 Reference for Oracle GoldenGate for Windows and UNIX 》。 -
当源表包含多个相同的行时,可能会导致目标表中出现
LOB不一致。如果源表缺少主键或其他唯一行标识符,则会发生这种情况。这些行由 Replicat 插入到目标上,但是如果在后续源操作中更新了LOB数据,则只会将其复制到目标上插入的第一行。 -
不要对行内 LOB 列使用
NOT NULL约束条件。如果要使用NOT NULL约束条件,请在行外 LOB 列上使用它们。 -
如果需要直接从表中提取行内 LOB 数据,必须使用
FETCHCOLS/FETCHMODCOLS。 -
Oracle GoldenGate for Sybase 15.7 及更高版本不支持行内 LOB 列复制(但是,它仍然可以将数据推送到 Replicat 数据库中的行内 LOB 列)。这意味着复制中包含的表不能具有任何行内 LOB 列。如果任何复制表包含行内 LOB 列,则 Oracle GoldenGate 将异常终止。如果需要行内 LOB 支持,请与 Oracle 技术支持联系以获取更多信息。
资金类型
-
MONEY -
SMALLMONEY
支持者的限制
在不涉及计算或转换的情况下将数据移动到相同数据类型的目标列时,支持货币数据类型,不会丢失完整性。当必须执行计算或转换时,Oracle GoldenGate 支持带符号长整型(32 位)的最大值。
IDENTITY 类型
仅在一个方向上复制支持 IDENTITY 数据类型,但对于双向配置不支持。
text、image 和 unitext 数据类型
在 Sybase 15.7 版本中,LOB 文本、图像和 unitext 数据类型现在在 BATCHSQL 模式下受支持。LOB 的数据长度限制为 4K。如果包含 LOB 列且大小超过 4K 的记录,则这些记录将从批中排除,并一次执行一个。LOB 列现在已绑定,而在以前的 Sybase 版本(15.5 或 15.0)中,LOB 未绑定。可以使用 DBPOTIONS LEGACYLOBREPLICATION 参数来使用旧行为。此支持仅适用于在 Sybase 版本 15.7 及更高版本上运行的复制。
用户定义的数据类型
完全支持用户定义的数据类型。
不支持的 Sybase 数据类型
本节列出了 Oracle GoldenGate 不支持的 Sybase 数据类型。
-
不支持
TIMESTAMP数据。虽然由于数据库限制,无法将数据应用于 Sybase 时间戳列,但会捕获时间戳列数据。插入或更新相应行后,数据库会自动填充此列。要排除 Oracle GoldenGate 捕获的时间戳列,请使用TABLE参数的COLSEXCEPT选项。因为系统生成时间戳,所以源值和目标值将不同。 -
不支持 Java
rowobject数据类型。
Sybase 支持的操作和对象
本节列出了 Oracle GoldenGate 支持的数据操作和数据库对象。
-
在 Sybase 表上提取和复制插入、更新和删除操作,这些表的长度最多为 512 KB。
-
数据库支持的每个表的最大列数和最大列大小。
-
延迟插入、延迟间接插入、延迟更新和延迟删除。使用延迟更新可能会导致目标上受影响的 SQL 的主键约束条件违规。如果出现这些错误,请使用 Replicat 参数
HANDLECOLLISIONS。 -
TRUNCATE TABLE,如果受影响表的名称在所有方案中都是唯一的。如果表名并非在所有方案中唯一,请为这些表使用IGNORETRUNCATES参数以防止复制异常终止。 -
GETTRUNCATES和IGNORETRUNCATES(按提取和复制)。 -
使用系统加密密码加密的数据。
-
在初始加载期间提取数组,由
FETCHBATCHSIZE参数控制。 -
ASE 15.7 SP110 及更高版本上的
BATCHSQL复制功能在以下平台上:-
AIX
-
Linux x64
-
Sun Solaris SPARC
-
Sun Solaris x64
-
Windows x64
在某些情况下,
BatchSQL不支持CS_NUMERIC和CS_DECIMAL数据类型,因为 Sybase 特定 CT 库中有 bug。对于 Sybase 数据库版本 157 SP110,支持在 BatchSql 模式下复制 LOB。这将提高 LOB 复制性能。它限制为 16384 字节的 LOB 数据,这意味着如果 LOB 数据超过 16384 字节,则不会通过BATCHSQL模式处理数据,而是将模式切换为“正常”。 -
-
对计算列支持的限制如下:
-
完全支持持久性计算列。更改值存在于事务处理日志中,可以捕获到线索中。
-
不能对行内 LOB 列使用
NOT NULL约束条件。如果需要使用NOT NULL约束条件,请仅对行外 LOB 列执行此操作。 -
具有非持久计算列的表,但不会捕获这些列的更改数据,因为数据库不会将其写入事务处理日志。要复制非持久计算列的数据,请使用
TABLE参数的FETCHCOLS或FETCHMODCOLS选项从表中提取列数据。请记住,在数据库中更改列的时间与提取正在处理的事务处理记录的数据的时间之间,数据值存在差异会导致差异。 -
复制不会对任何计算的列应用 DML,即使该列的数据位于线索中也是如此,因为数据库不允许对该类型的列执行 DML 操作。源持久性计算列或提取的非持久性列中的数据可以应用于非计算列的目标列。
-
在初始加载中,所有数据都直接从源表中选择,而不是从事务处理日志中选择。因此,在初始加载中,所有列(包括非持久计算列)的数据值将写入到线索中或发送到目标,具体取决于所使用的方法。但是,与应用更改数据时一样,Replicat 不会将初始加载数据应用于计算的列,因为数据库不允许对该类型的列执行 DML。
-
不使用定义为键列、索引列或
TABLE或MAP语句中KEYCOLS子句一部分的持久计算列。如果唯一键或索引包括计算的列,并且 Oracle GoldenGate 必须使用该键,则将忽略计算的列。此外,如果唯一键或索引包含计算的列,并且该列是表中的唯一标识符,则除计算的列以外,所有列都将用作标识符来查找目标行。因此,如果余下的列不强制唯一性,则在键或索引中存在计算的列会影响数据完整性。Sybase 不支持将非持久计算列作为密钥的一部分,因此 Oracle GoldenGate 也不支持。 -
要支持
TRUNCATE TABLE,所有表名在一个数据库内的所有方案中都应该是唯一的。此规则适用于提取和复制。
-
-
自动心跳表支持的限制如下:
-
心跳频率以分钟为单位接受,并且应为介于 1 和 133 之间的整数(包括两者)。
-
对于
GG_HEARTBEAT_SEED、GG_HEARTBEAT和GG_HEARTBEAT_HISTORY表的incoming_routing_path和outgoing_routing_path,如果复制异常终止超过 1500 个字符,则会发生数据截断。这些表的incoming_routing_path和outgoing_routing_path大小在 ASCII 中设置为 1500 个字符,以多字节字符表示的最大字节数为 500。确保传入和传出路由路径字符串在指定的限制内。 -
必须先在 ASE 服务器上配置 Sybase 作业调度程序,然后才能运行 Oracle GoldenGate 心跳功能。
-
要使心跳表功能正常运行,登录用户必须具有
replication_role、js_admin_role和js_user_role角色。
-
Sybase 不支持的操作和对象
本节列出了 Oracle GoldenGate 不支持的数据操作和数据库对象。
-
不支持复制实体化视图或预计算结果集。因此,无法为实体化视图添加 trandata。有关详细信息,请参见 Sybase ASE 文档。
-
使用用户定义的密码加密的数据。
-
提取或复制 DDL(数据定义语言)操作。
-
多提取配置。只有一个提取可以保留上下文以读取 Sybase 事务处理日志。
-
由于
SHOWSYNTAX在DYNSQL模式下受支持,因此NODYNSQL已过时。 -
表名包含下划线后跟一些字符的数据,但不支持空格(例如
'zzz_j')。Oracle GoldenGate 无法使用 GGSCI、DEFGEN、EXTRACT或REPLICAT处理包含此类型字符串的记录。此外,此类型的数据不能与 Oracle GoldenGate 通配符 (*) 一起使用。如果表名中确实存在此类型的数据,则必须从数据库中删除此类表名,然后重新启动应用程序以处理和尊重 Oracle GoldenGate 通配符。