我在我的服务器上创建了一个出版物。我不得不使用这个特殊选项,以便我可以从备份初始化复制:
exec sp_addpublication
...
@allow_initialize_from_backup = N'true',
...
然后,我备份了我的数据库:
BACKUP DATABASE [MyDatabase]
TO URL = 'https://fakestorageaccount.blob.core.windows.net/mycontainer/MyDatabase.bak'
WITH CREDENTIAL = 'mycredential', COMPRESSION, STATS = 5;
GO
并在目标服务器上从中恢复:
RESTORE DATABASE [MyDatabase]
FROM URL = 'https://fakestorageaccount.blob.core.windows.net/mycontainer/MyDatabase.bak'
WITH CREDENTIAL = 'mycredential'
,MOVE 'MyDatabase' to 'SomePath\Data\MyDatabase.mdf'
,MOVE 'MyDatabase_log' to 'SomePath\Log\MyDatabase.ldf'
,STATS = 5
GO
现在我已准备好创建订阅者。我遇到的问题是我不知道为sp_addsubscription过程提供什么选项。
我可以使用普通硬盘而不是 URL 完成整个过程。我可以看到数据正在从源复制到目标。我备份到磁盘,将备份复制到目标服务器,还原,然后使用以下命令从备份初始化:
exec sp_addsubscription
@publication = N'MyPub',
@subscriber = N'MyTargetServer',
@destination_db = N'MyDatabase',
@subscription_type = N'Push',
@sync_type = N'initialize with backup',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0,
@backupdevicetype = 'disk',
@backupdevicename = 'D:\Backups\MyDatabase.bak'
我如何调整这些选项以便从 URL 初始化复制(在我的例子中是两个服务器都有凭据的 Azure blob 存储容器)?
这是一个很好的问题,但目前不支持从存储在 Windows Azure Blob 存储中的备份初始化订阅。我相信这将是一个非常棒的复制功能,我相信微软的人会同意的。我建议在UserVoice上提出这个想法。
但是,由于您已经恢复了备份,并且模式和数据已经存在于订阅者中,请尝试使用@sync_type为“仅复制支持”来执行 sp_addsubscription,看看是否满足您的需要。
有关手动初始化订阅的更多详细信息,请参阅如何:手动初始化订阅。