Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复制如何在订阅服务器上保留数据-SQL Server_Sql_Sql Server_Azure_Replication_Rmo - Fatal编程技术网

复制如何在订阅服务器上保留数据-SQL Server

复制如何在订阅服务器上保留数据-SQL Server,sql,sql-server,azure,replication,rmo,Sql,Sql Server,Azure,Replication,Rmo,我们有一个本地数据库,将数据保留2个月。我正在使用SQL事务复制将本地数据库复制到云数据库中。我们的想法是希望节省一年的数据。我禁止复制删除,这非常有效。但是,如果出于任何原因重新初始化复制,或者有人在发布服务器中再次运行快照代理,我将丢失云中的所有数据,并获取本地数据库的当前映像!我能做些什么来阻止订户端发生这种情况?有没有办法让订阅服务器或云忽略所有形式的删除或重新初始化,而只是继续从本地数据库构建复制数据?仅运行快照代理只会生成一个新快照-默认情况下,这不会导致现有订阅重新初始化。事实上,

我们有一个本地数据库,将数据保留2个月。我正在使用SQL事务复制将本地数据库复制到云数据库中。我们的想法是希望节省一年的数据。我禁止复制删除,这非常有效。但是,如果出于任何原因重新初始化复制,或者有人在发布服务器中再次运行快照代理,我将丢失云中的所有数据,并获取本地数据库的当前映像!我能做些什么来阻止订户端发生这种情况?有没有办法让订阅服务器或云忽略所有形式的删除或重新初始化,而只是继续从本地数据库构建复制数据?

仅运行快照代理只会生成一个新快照-默认情况下,这不会导致现有订阅重新初始化。事实上,您可以向发布中添加新项目,而无需重新初始化,只需添加新项目,然后生成新快照即可。至少对于非云设置,我没有Azure的经验。因此,如果您发现使用快照重新初始化某些内容,您就做错了。至于重新初始化的一般问题,最干净的方法可能是将项目配置为在发布服务器上保留现有表并删除,作为处理现有表的方法,而不是什么都不做并截断。然后,在订阅服务器上,您可以拒绝删除,但通常很难让它与具有广泛权限的帐户配合使用,或者创建一个只会产生错误的INSTEAD OF DELETE触发器。显然,需要禁用这些触发器才能进行合法的重新初始化。您能告诉我保留现有表并删除是什么意思吗?您是在谈论文章属性->目标对象->名称正在使用时的操作->保持现有对象不变吗?某个地方有人提到了这一点,我试了一下。它不会删除订阅服务器上的数据或表,但最终将永远出现重复的错误。我试图忽略发布者的错误,但它不起作用,我在批量选择中得到了错误。我认为这仍然是一个复制错误。我从分发代理那里得到的错误是进程无法批量复制到表tablename中。重新初始化将始终希望复制数据,即使您设法跳过删除操作。而且它会尝试批量复制来初始化一个表——不给它权限会阻止重新初始化,代价是复制完全不可能,因为它永远不会通过初始阶段。恐怕唯一真正的解决办法是:永远不要重新初始化。使其不可能随意地这样做。如果确实发生这种情况,请接受您将丢失数据的事实,并进行相应的计划,即恢复备份、将数据保存在辅助表中等等。