索引视图的SQL Server事务复制

时间:2012-09-10 20:17:28

标签: sql-server sql-server-2008 database-replication transactional-replication indexed-view

我正在为索引视图进行事务复制。我有其他复制模式绑定视图,使用NOEXPAND提示引用索引视图。即使在为索引视图调用sp_addarticle之后调用sp_addarticle作为NOEXPANDing视图,我也收到错误:

Hint 'noexpand' on object '...' is invalid.

因为在索引视图上创建索引之前,SQL Server正在尝试在目标服务器上创建NOEXPANDing视图。

有没有办法强制SQL Server在NOEXPANDing视图启动之前完成复制索引视图索引?

2 个答案:

答案 0 :(得分:1)

查看分发服务器数据库,您将找到复制前后的脚本。这些是直接的sql脚本,因此您可以修改它们并在其中添加您喜欢的任何内容。

这意味着您可以修改pre-repl脚本以避免错误,并修改post-repl脚本以在创建索引后添加noexpanding视图。

答案 1 :(得分:0)

我想我找到了一种更简单的方法。

使用GUI向复制添加索引视图时,只会复制架构定义,这意味着如果它们包含NOEXPAND提示,则尝试访问这些视图的任何存储过程都会出错。

现在我猜你可以搞乱前/后脚本,但是使用MSDN上的这篇文章:Indexed Views - Replications - NoExpand Hint似乎有一个更简单的选择。

您可以通过更改sp_addarticle的脚本来复制索引,并将@schema_option从 0x0000000008000001 替换为 0x0000000008000051 。以下示例允许在订阅服务器上生成聚簇索引和非聚簇索引。

这会自动提取索引,也意味着编写脚本的次数也会减少。