我已经研究 SQL Server 2019 和事务复制一段时间了,但遇到了瓶颈。查看复制监视器时,我看到错误“未找到该行...
我已经研究 SQL Server 2019 和事务复制一段时间了,但遇到了瓶颈。查看复制监视器时,我看到错误“在对表‘[dbo].[MessageQueue]’应用主键为:[Id] = 6039250 的复制 UPDATE 命令时,在订阅服务器上未找到该行”。此错误发生在分发服务器发送给订阅服务器的第一批数据上。
我知道上面是我备份发布者之后添加的一行,但我希望在 UPDATE 之前复制 INSERT。
发行商/分销商:本地 SQL Server 2019 标准
订阅者:SQL 托管实例
我使用备份/恢复方法进行初始化,因为当我将其投入生产时,我要处理的是 2TB 的数据库。我的测试数据库只有 150GB。
以下是我采取的措施:
-
创建发布者,我是通过 SSMS 向导完成的。
-
将发布的订阅选项设置为“允许从备份文件初始化”= True
-
将数据库备份到 Azure 存储帐户。我使用存储帐户的访问密钥作为凭证。另外,我不想破坏我的 DPM 服务器的日志链,所以我使用了
COPY_ONLY
.
CREATE CREDENTIAL [credential_name_here]
WITH IDENTITY = '<storage account name>',
SECRET = '<redacted>'
BACKUP DATABASE [myDatabase] TO URL = N'https://<redacted>.blob.core.windows.net/backups/myDatabase_replication.bak'
WITH CREDENTIAL = 'credential_name_here'
,COMPRESSION, COPY_ONLY, STATS = 5
use master
RESTORE DATABASE [myDatabase]
FROM URL = N'https://<redacted>.blob.core.windows.net/backups/myDatabase_replication.bak'
注意 我注释掉了几个选项。我尝试使用 @sync_type
, @backupdevicetype
& @backupdevicename
,但无法绕过错误“无法打开备份设备‘https://redacted.blob.core.windows.net/backups/myDatabase_replication.bak’。操作系统错误 86(指定的网络密码不正确。”)。”。
由于某些未知的原因,sp_addsubscription 不支持传递凭据...无论如何,据我所知。
USE [myDatabase]
GO
EXEC sp_addsubscription
@publication = N'pub_myDatabase',
@subscriber = '<redacted>.<redacted>.database.windows.net',
@destination_db = N'myDatabase',
@sync_type = 'replication support only',
--@sync_type = 'initialize with backup',
--@backupdevicetype ='URL',
--@backupdevicename = 'https://<redacted>.blob.core.windows.net/backups/myDatabase_replication.bak',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0
-- Configure the Distribution Agent job
exec [myDatabase]..sp_addpushsubscription_agent
@publication = N'pub_myDatabase',
@subscriber = '<redacted>.<redacted>.database.windows.net',
@subscriber_db = N'myDatabase',
@job_login = NULL, @job_password = NULL,
@subscriber_security_mode = 0,
@subscriber_login = '<redacted>', @subscriber_password = '<redacted>',
@frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0 -- Continuous
GO
-- Start Distribution agent
exec [myDatabase]..sp_startpushsubscription_agent
@publication = N'pub_myDatabase',
@subscriber = '<redacted>.<redacted>.database.windows.net',
@subscriber_db = N'myDatabase'
GO
此时,我检查了复制监视器并看到了前面提到的错误。任何提示和/或指导都将不胜感激!
事务复制正在尝试更新尚不存在的行。为什么?
下载声明:
本站所有软件和资料均为软件作者提供或网友推荐发布而来,仅供学习和研究使用,不得用于任何商业用途。如本站不慎侵犯你的版权请联系我,我将及时处理,并撤下相关内容!