在服务器A数据库TEST新建了一个本地发布(Local Publications)RPL_GES_MIS_TEST,在服务器B数据库RPL_TEST上创建了一个本地订阅(Local Subscriptions),它订阅了了这个发布RPL_GES_MIS_TEST.如下截图所示,本地发布只有DB_OBJECTS 、Location两个表

假设现在有一个需求,我们需要同步一个视图V_DB_OBJECTS(当然实际情况应该比这个复杂,有可能视图是多个表关联,测试场景我们先简化一下),视图代码如下

CREATE VIEW V_DB_OBJECTS

AS

 SELECT * FROM DB_OBJECTS WHERE type !='S';

我们右键单击RPL_GES_MIS_TEST的属性,在Articles里面添加了该视图

此时我们使用sp_helpsubscription查看订阅的特定的发布、项目、订阅服务器或订阅集关联的订阅信息。就会发现视图V_DB_OJBECTS的subscription status为1,表示订阅服务器正在请求数据,但尚未同步。

此时你右键单击对应的本地发布RPL_GES_MIS_TEST,选择“View Snapshopt Agent Status",如下所示,你会看到它提示快照生成了2个项目,意味着其实这个视图不在快照里面。

此时,你点击开始,重新生成快照,你会发现下面信息。快照重新初始化了3个项目。

那么我们有没有办法,在发布订阅里面,只同步一个新的视图,而不用初始化整个快照吗? 答案是有,其实方法很简单,具体可以参考我这篇文章SQL SERVER Transactional Replication中添加新表如何不初始化整个快照 。此处不做展开分析

CREATE VIEW V_DB_OBJECTS_2

AS

 SELECT * FROM DB_OBJECTS WHERE type !='S'

 

 

 

USE TEST;

GO

 

EXEC sp_changepublication

@publication = 'RPL_GES_MIS_TEST',

@property = 'allow_anonymous' ,

@value = 'false'

GO

EXEC sp_changepublication

@publication = 'RPL_GES_MIS_TEST',

@property = 'immediate_sync' ,

@value = 'false'

GO 

执行上面脚本后,我们在发布里面的项目(Articles)里面添加视图V_DB_OBJECTS_2,然后我们在View Snapshot Agent Status窗口,单击“Start"按钮,你会发现快照只生成了这个视图。如下所示

另外,可能有同学有疑问,如果我的视图已经通过Replication同步了,那么我修改视图有没有影响?会不会也同步过去呢? 如下所示,修改V_DB_OBJECTS_2

你会发现修改过后的视图很快就同步到订阅服务的数据库上,但是要注意,如果选项”Replicate schema changes"为False,那么此时对视图的修改是不会同步过去

另外需要注意:对视图的修改仅仅限制在视图的引用对象也在复制(Replication)当中,如果引用了一个不在复制(Replication)的项目,那么此时就会有问题了。其实不光是修改已经同步的视图,其实同步一张新的视图,如果视图引用的项目(对象)不在发布订阅(Replication)当中也会有问题,它会报如下错误:

Unable to replicate a view or function because the referenced objects or columns are not present on the Subscriber.

还有一种情况就是视图所引用的对象都在发布订阅当中,但是视图跨越了多个数据库,那么是否也有问题呢?

如下所示,视图引用了TEST数据库的表DB_OBJECTS和TTT数据库的表mmFrameModel, 而且TTT数据库的表mmFrameModel也同步到了订阅数据库RPL_DB_TEST当中,但是此时同步依然会有问题

CREATE VIEW V_TEST2

AS

 SELECT name  AS NAME  FROM DB_OBJECTS

 UNION ALL

 SELECT Machine_Model AS NAME FROM TTT.dbO.mmFrameModel;

有一个替换方案就是不同步视图,而是在同步了视图引用的对象后,在订阅的数据库上也创建同样逻辑的视图。只是这个替换方案有点麻烦的是,在修改了发布数据库上的视图后,一定要记得也同时手动修改订阅数据库的视图

SQL Server Replication 中关于视图的点滴的更多相关文章

  1. 如何用SQL脚本在SQL Server Replication中创建合并复制,以及怎么创建分区合并复制

    假设我们要创建合并复制的发布端数据库是EFDemo其中有四张表,订阅端数据库是EFDemoSubscription,如下图所示: 首先创建发布端快照代理Sql agent job:"EFDe ...

  2. SQL点滴15—在SQL Server 2008中调用C#程序

    原文:SQL点滴15-在SQL Server 2008中调用C#程序 T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可 ...

  3. SQL Server基础之《视图的概述和基本操作》

     数据库中的视图是一个虚拟表.同真实的表一样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,并且在引用视图时动态产生.本篇将通过一些实例来介绍视图的概念,视图的作用, ...

  4. SQL Server 索引中include的魅力(具有包含性列的索引)

    2010-01-11 20:44 by 听风吹雨, 22580 阅读, 24 评论, 收藏, 编辑 开文之前首先要讲讲几个概念 [覆盖查询] 当索引包含查询引用的所有列时,它通常称为“覆盖查询”. [ ...

  5. SQL Server 内存中OLTP内部机制概述(四)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  6. SQL Server 内存中OLTP内部机制概述(三)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  7. SQL Server 内存中OLTP内部机制概述(二)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  8. SQL Server 2008中新增的 1.变更数据捕获(CDC) 和 2.更改跟踪

    概述 1.变更数据捕获(CDC)        每一次的数据操作都会记录下来 2.更改跟踪       只会记录最新一条记录   以上两种的区别:         http://blog.csdn.n ...

  9. 浅析SQL Server 2005中的主动式通知机制

    一.引言 在开发多人同时访问的Web应用程序(其实不只这类程序)时,开发人员往往会在缓存策略的设计上狠下功夫.这是因为,如果将这种环境下不常变更的数据临时存放在应用程序服务器或是用户机器上的话,可以避 ...

随机推荐

  1. iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)

    1.nonnull:字面意思就能知道:不能为空(用来修饰属性,或者方法的参数,方法的返回值) 代码: //三种使用方式都可以 @property (nonatomic, copy, nonnull) ...

  2. js树形控件—zTree使用总结

    0 zTree简介 树形控件的使用是应用开发过程中必不可少的.zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 0.0 ...

  3. STM32CubeMX安装指南

    1.STM32CubeMX软件下载 地址:http://pan.baidu.com/s/1bn8sXOV 密码:6u3p 2.安装     1)安装Java SDK     2)安装SetupSTM3 ...

  4. QTableWidget详解(样式、右键菜单、表头塌陷、多选等)

    在Qt的开发过程中,时常会用到表单(QTableWidget)这个控件,网上的资料不少,但是都是最基本的,有一些比较经常遇到的问题也说得不太清楚.所以,今天就在这里总结一下! 以下为个人模拟Windo ...

  5. .NET Core全新路线图(译)

    标签: .NETCore 翻译 承接张善友大大的.NET Core全新路线图,翻译了原文,水平有限,尽量一观. 原文地址<.NET Core Roadmap>,原作者Scott Hunte ...

  6. WCF入门教程(四)通过Host代码方式来承载服务

    WCF入门教程(四)通过Host代码方式来承载服务 之前已经讲过WCF对外发布服务的具体方式. WCF入门教程(一)简介 Host承载,可以是web,也可以是控制台程序等等.比WebService有更 ...

  7. datagridview 单元格格式转换注意

    datagridview 单元格内容进行比较时要注意正确写法要用强制转换,否则出错Convert.ToString(grd_order.SelectedRows[0].Cells[1].Value)= ...

  8. 【C#进阶系列】30 学习总结

    前面学起来还是很顺的,毕竟很多都接触过. 后面学起来只能用“磨”来形容,以至于八章用了2个月.(当然也有相当一些原因是这两个月中发生了一些个人生活上的问题) 总的来说收获超大,这种感觉就像大一的时候学 ...

  9. Hadoop单机伪分布式

    环境配置:Ubuntu11.10,Hadoop1.0.0 安装ssh 1 apt-get install ssh 安装rsy 1 apt-get install rsync 配置ssh免密码登录 1 ...

  10. 排列组和在c语言中的应用

    排列组和在c中很常见,但是这个排列组和是通过循环来实现的,和数学中的还是有一点区别的,而且c中的方法也不尽相同,而且我遇到c中的数学问题总会纠结于数学上是怎么实现的但是我自己又不会,所以就没了兴趣,例 ...