我需要配置2个数据库之间的合并复制。这些数据库具有外键完整性,这使得复制无法工作,因此我使用:
- 删除用户数据库中的所有FKs,
- 复制,
- 重建fk。
然而,这使得订阅者数据库容易受到FK违反的影响。
我的问题是:
- 复制是否锁定订阅者数据库,引发事务,并在此过程中以任何方式使数据库不可用?
- 如果没有,我可以通过TSQL手动启动这样的锁吗?
- 如果以上都不可能,是不是我错过了什么?
不知道由复制启动的锁,但是为了维护时间,您可以将整个数据库设置为single_user或restricted_user。
ALTER DATABASE SET RESTRICTED_USER
我推荐第二个,因为它允许访问数据库的所有用户,引用:
db_owner的成员固定了数据库角色和dbcreatorSysadmin固定服务器角色
(参见:http://msdn.microsoft.com/en-us/library/aa933082%28SQL.80%29.aspx)
,只限制普通用户。它将等待直到所有常规用户连接完成
ALTER DATABASE SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
将立即终止所有此类连接。这个
select DATABASEPROPERTYEX ('ocon_reportdb','UserAccess') DATABASEPROPERTYEX_UserAccess
读取当前状态
:还有一些维护活动,比如由数据库引擎执行的统计信息。使用WITH ROLLBACK IMMEDIATE
也会终止这些连接,所以要小心
UPDATE2: specs to have access in restricted_user-mode