原文:SQL Server Replication 中关于视图的点滴

在服务器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 Server数据库中创建视图

    if exists(select * from sysobjects where Name='View_Canny_SalesOrderDetail1_ZXJ') drop view View_Can ...

  2. 深入浅出SQL Server Replication第一篇:走近Replication(上)

    深入浅出SQL Server Replication第一篇:走近Replication(上) 对于很多的SQL Server DBA而言,Replication不是什么新鲜的事物了,也是大家常常说的& ...

  3. sql server 快照_添加新文章,删除文章,更改快照文件夹路径和SQL Server复制中的数据筛选器行

    sql server 快照 In the last articles, we have learned Configuring Snapshot and Transactional SQL Serve ...

  4. 如何对两个大型SQL Server数据库中的数据进行快速估计比较,以查看它们是否相等

    Bringing impactful analysis into a data always comes with challenges. In many cases, we rely on auto ...

  5. SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008

    SQL Server 2008中Analysis Services的新特性 --深入SQL Server 2008 内容简介: 本书涵盖了SQL Server 2008引入的新功能.作者之一Rober ...

  6. SQL Server 2005中的分析服务功能[转]

    XXXX(不知道为什么CnBlogs上的人这么抵制XXXX,呵呵--)上推出了"体验SQL Server 2005"活动,当然啦,一些关于SQL Server 2005的文章被翻译 ...

  7. sql server 2005 中的同义词

    在SQL SERVER 2005中,终于出现了同义词了,大大方便了使用. 同义词是用来实现下列用途的数据库对象: 为本地或远程服务器上的另一个数据库对象(称为"基对象")提供备选名 ...

  8. 访问MS Access 系统表 MSysObjects ,在SQL SERVER 2005中访问

    首先设置MS Access,给予访问MSysObjects 的权限 1. Open Microsoft Access 2. From the Tools menu, select the Option ...

  9. mysql raiserror_RAISERROR在SQL Server数据库中的用法

    raiserror  是由单词 raise error 组成 raise  增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...

最新文章

  1. 海门工业机器人_海门凹凸模压标机推荐-无锡胜宝机电
  2. 苹果发布第三财季财报 盘后股价上涨5%
  3. 定时器回调函数怎么写_ESP8266_04管脚控制与软件定时器
  4. 产品方法论之:菜鸟做加法,高手做减法!
  5. Python标准库collections模块的Counter类
  6. 支持python开发的环境有哪些变化_Python开发实践:打造完美的项目工程环境
  7. Linux或者Mac解压乱码问题
  8. java f.lenth返回值_long length
  9. javascript天生就具备类似c#中的委托功能
  10. InstallSield更新包快速入门文档
  11. 多目标数据关联基本方法
  12. DigitalRealty公司在达拉斯新建一个数据中心
  13. Linux操作系统分区格式Ext2,Ext3,Ext4的区别
  14. win10中 有道词典不能联网/发音解决方法
  15. 怎么冻结表格前几行和前几列_如何冻结表格前几列
  16. _id随机的 es_ES再现偷ID事件?仅与阿水ID相差1个字,玩家却释怀,原是系统作梗...
  17. 人与人之间的交往艺术
  18. Unity如何将fbx格式模型的材质拆分、编辑模型
  19. Office 远程代码执行漏洞复现过程
  20. 无损音乐统一音量大小好吗_您可以无损增加MP3文件的音量吗?

热门文章

  1. 在哪里能收到python实例代码-python实例代码
  2. python流程控制语句-python学习 流程控制语句详解
  3. 自学python推荐书籍2019-2019最全Python入门学习路线,绝
  4. python多线程爬虫实例-python 多线程爬虫 实例
  5. python使用符号 表示单行注释-Python编程规范之注释
  6. python怎么安装pandas模块-python如何导入安装pandas模块并使用别名
  7. Ubuntu16.04 Linux上比较好用的截图工具Flameshot
  8. Opengl-面剔除(一种优化方式)
  9. LeetCode Pow(x, n)
  10. nodejs 实践:express 最佳实践(五) connect解析