我需要创建 SQL 2008 R2 Enterprise 数据库的副本,并将其与原始数据库放在同一台服务器上。我将使用数据库的第二个副本作为主要为只读的网站的目标。我理解,如果我使用快照复制创建数据库的这个副本,则订阅数据库中的所有数据更改将在下次复制时被覆盖。Web 应用程序将尝试写入此数据库以记录登录尝试等,如果其源数据库是只读的,则将失败。就我而言,我不需要保留这些审计记录,因此每次应用新快照时都可以覆盖它们。
我的问题是 SQL Server 是否强制订阅者数据库为只读,是否有任何方法可以解决这个问题?
谢谢你,
内特
答案1
SQL Server 不会强制订阅数据库为只读。您可以修改订阅服务器上正在复制的表。只需注意以下问题:
- 如果发布者对同一条记录进行了更新,则订阅者的数据将被覆盖。
- 同步假定订阅服务器不会更新,因此如果同步尝试执行导致错误的操作,则复制将失败,直到问题得到解决。例如,如果您在订阅服务器上创建一条记录,然后在发布服务器上创建相同的记录。假设您在订阅服务器上有主键约束,则当复制尝试再次创建该记录时将引发异常。
为了更安全,您可以设置没有审计表的复制,然后在快照完成后手动添加审计表。这样审计表将独立于复制,因此您可以放心修改它们。但是,订阅者将不会拥有发布者上的审计记录。
答案2
您可能知道可以使用事务复制创建可更新订阅:http://technet.microsoft.com/en-us/library/ms152769(SQL.90).aspx