2

我正在考虑在 Amazon RDS 中创建一个只读数据库,使用他们的 DMS 从现场数据库复制数据。在 Amazon DMS 的一般限制列表中,其中之一是:

由于 SQL Server TLOG 缓冲区大小的限制,对包含超过 8000 字节信息(包括标题和映射信息)的行所做的更改无法正确处理。

这适用于什么情况?我的印象是一个表每行最多可以包含 8,060 个字节。我知道varchar, nvarchar, varbinary, sql_variant, 或 CLR 用户定义类型被推入另一行,并在其位置上放置一个指针。这是指这个吗?我试图了解会发生这种情况的任何情况。

另外,我如何确定哪些表(如果有)会受到影响?

4

1 回答 1

1

好的,看来我现在可以回答我自己的问题了,至少在一个用例中。

它与组合列的可能大小无关,但如前所述,与其中的数据量有关。创建一个带有 id 和 9 个 varchar(1000) 列的表。用 1000 个字节填充前 8 个字节,所有内容都按原样复制。用数据填充剩余的列,并且不会复制更新(大概是因为列数据被推离页面)。奇怪的是, varchar(max) 似乎并没有以这种方式受到影响。

要定位具有受此影响的行的表,请运行以下命令,注意MaximumRecordSize列:

dbcc showcontig with tableresults

解决此问题的一种方法是将有问题的表拆分为较小的相关表(也就是对其进行规范化),然后执行连接以检索数据。根据数据库的大小,这可能可行,也可能不可行。

于 2017-09-13T10:09:53.203 回答