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 中关于视图的点滴相关推荐
- Sql Server数据库中创建视图
if exists(select * from sysobjects where Name='View_Canny_SalesOrderDetail1_ZXJ') drop view View_Can ...
- 深入浅出SQL Server Replication第一篇:走近Replication(上)
深入浅出SQL Server Replication第一篇:走近Replication(上) 对于很多的SQL Server DBA而言,Replication不是什么新鲜的事物了,也是大家常常说的& ...
- sql server 快照_添加新文章,删除文章,更改快照文件夹路径和SQL Server复制中的数据筛选器行
sql server 快照 In the last articles, we have learned Configuring Snapshot and Transactional SQL Serve ...
- 如何对两个大型SQL Server数据库中的数据进行快速估计比较,以查看它们是否相等
Bringing impactful analysis into a data always comes with challenges. In many cases, we rely on auto ...
- SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008
SQL Server 2008中Analysis Services的新特性 --深入SQL Server 2008 内容简介: 本书涵盖了SQL Server 2008引入的新功能.作者之一Rober ...
- SQL Server 2005中的分析服务功能[转]
XXXX(不知道为什么CnBlogs上的人这么抵制XXXX,呵呵--)上推出了"体验SQL Server 2005"活动,当然啦,一些关于SQL Server 2005的文章被翻译 ...
- sql server 2005 中的同义词
在SQL SERVER 2005中,终于出现了同义词了,大大方便了使用. 同义词是用来实现下列用途的数据库对象: 为本地或远程服务器上的另一个数据库对象(称为"基对象")提供备选名 ...
- 访问MS Access 系统表 MSysObjects ,在SQL SERVER 2005中访问
首先设置MS Access,给予访问MSysObjects 的权限 1. Open Microsoft Access 2. From the Tools menu, select the Option ...
- mysql raiserror_RAISERROR在SQL Server数据库中的用法
raiserror 是由单词 raise error 组成 raise 增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...
最新文章
- 海门工业机器人_海门凹凸模压标机推荐-无锡胜宝机电
- 苹果发布第三财季财报 盘后股价上涨5%
- 定时器回调函数怎么写_ESP8266_04管脚控制与软件定时器
- 产品方法论之:菜鸟做加法,高手做减法!
- Python标准库collections模块的Counter类
- 支持python开发的环境有哪些变化_Python开发实践:打造完美的项目工程环境
- Linux或者Mac解压乱码问题
- java f.lenth返回值_long length
- javascript天生就具备类似c#中的委托功能
- InstallSield更新包快速入门文档
- 多目标数据关联基本方法
- DigitalRealty公司在达拉斯新建一个数据中心
- Linux操作系统分区格式Ext2,Ext3,Ext4的区别
- win10中 有道词典不能联网/发音解决方法
- 怎么冻结表格前几行和前几列_如何冻结表格前几列
- _id随机的 es_ES再现偷ID事件?仅与阿水ID相差1个字,玩家却释怀,原是系统作梗...
- 人与人之间的交往艺术
- Unity如何将fbx格式模型的材质拆分、编辑模型
- Office 远程代码执行漏洞复现过程
- 无损音乐统一音量大小好吗_您可以无损增加MP3文件的音量吗?
热门文章
- 在哪里能收到python实例代码-python实例代码
- python流程控制语句-python学习 流程控制语句详解
- 自学python推荐书籍2019-2019最全Python入门学习路线,绝
- python多线程爬虫实例-python 多线程爬虫 实例
- python使用符号 表示单行注释-Python编程规范之注释
- python怎么安装pandas模块-python如何导入安装pandas模块并使用别名
- Ubuntu16.04 Linux上比较好用的截图工具Flameshot
- Opengl-面剔除(一种优化方式)
- LeetCode Pow(x, n)
- nodejs 实践:express 最佳实践(五) connect解析