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;

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

转载于:https://www.cnblogs.com/kerrycode/p/5294723.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kbmmw 5.0 中的REST 服务

目前关于REST 服务的话题越来越热,kbmmw 在5.0 里面开始支持rest。今天我就试一下kbmmw 的 rest 服务。闲话少说,开始。 老规矩,放上两个kbmMWServer1和 kbmMWHTTPSysServerTransport1两个控件。 设置kbmMWHTTPSysServerTransport1的server 属…

php7 匿名继承类_PHP7匿名类的用法示例

本文实例讲述了PHP7匿名类的用法。分享给大家供大家参考,具体如下:/*** Created by PhpStorm.* User: Itboot* Date: 2019/1/17* Time: 18:15*/class An{private $num;protected $age 15;public function __construct() {$this->num 1;}protected f…

python中不需要函数重载的原因

函数重载主要是为了解决两个问题: 1.可变参数类型 2.可变参数个数 并且函数重载一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不…

多租户saas 架构_[译/注] Force.com 多租户互联网应用开发平台的设计

原文地址 http://cloud.pubs.dbs.uni-leipzig.de/sites/cloud.pubs.dbs.uni-leipzig.de/files/p889-weissman-1.pdf译注:原文发表于 ACM,2009年6月作者Craig D Weissman, CTO, Salesforce.comSteve Bobrowski, Technical Marketing Consultant, Salesfor…

富文本

View Code转载于:https://www.cnblogs.com/baidaye/p/5295448.html

Jenkins持续集成——用户管理

一、基于安全矩阵系统管理 —>Configure Global Security相关权限的作用:其中有一些比较特别的权限:最大的权限是Overall的Administer,拥有该权限可以做任何事情。最基本的权限是Overall的Read,用户必须赋予阅读的权限&#xf…

pythonui教学视频_分享软件开发相关视频教程(Java、C++、Python、UI设计、HTML5、iOS)...

以下是我收藏的关于开发及其他教程,基本都是花钱在网上买的,网盘没有加密的,虽然特别爱学习,但并不可能有这么多的精力学习这么多,技术总是很快就被新的淘汰掉,放在网盘中确实太浪费呀,分享出去…

JAVA Set接口和其常用子类HashSet集合

Set接口,它里面的集合,所存储的元素就是不重复的。 HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法。 保证HashSet集合元素的唯一,其实就是根据对象的hashCode和…

python初始化函数_当你学会了Python爬虫,网上的图片素材就免费了

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。加入作者的python学习圈子:1156465813 即可免费获取,资料全在群文件里。资料可以领取包括不限于Python实战演练、PDF电子文档…

第三周作业(一)单元测试

下载vs2015安装包,打开进行安装. 选择颜色 安装完成,需要登录 启动vs 单元测试 1.打开vs界面。 2.新建项目。选择Visual C# 创建类库。 3.点击确定后,进入代码编辑界面。 4.根据书中代码,写入程序,并进行测试。 转载于…

React-Native-lesson

React-Native-lesson 一、React-Native入门指南 lesson2: 认识代码结构lesson4: 学会React-Native布局(一)lesson6: UI组件lesson8: 自己动手写组件 https://github.com/vczero/toilet React Native完全开发的独立App,支持ES6语法&#xff0c…

1、如何进行字符串常量中的字符定位_Java String:字符串常量池,我相信会有很多朋友不很理解这部分...

作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池:字符串常量池的设计意图是什么?字符串常量池…

Egret中使用P2物理引擎

游戏中的对象按照物理规律移动,体现重力、引力、反作用力、加速度等物体特性,实现自由落体、摇摆运动、抛物线运动,以及物理碰撞现象的模拟。用于模拟物理碰撞、物理运动的引擎称为物理引擎。 来自瑞典斯德哥尔摩大学的Stefan Hedman基于Java…

react项目_如何从零开始创建React项目(三种方式)

在开发React项目前最关键的当然是项目的创建,现在的前端工程化使得前端项目的创建也变得越来越复杂,在这里介绍三种从零开始创建React项目的方式,分别是在浏览器中直接引入、使用官方脚手架create-react-app、使用Webpack创建。浏览器中通过标…

利用JSONP解决AJAX跨域问题的原理与jQuery解决方案

写在前面 跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨域问题的一种…

江西理工大学南昌校区cool code竞赛

这次比赛原本就是来打酱油的,想做个签到题就走!一开始不知道1002是签到题,一直死磕1001,WA了四发过了,回头一看Rank,三十名,我靠!看了1001的AC率,在我AC之前只有一个人AC…

mysql 枚举_详解MySQL数据类型之枚举类型ENUM的用法

本节主要内容:MySQL数据类型之枚举类型ENUMMySQL数据库提供针对字符串存储的一种特殊数据类型:枚举类型ENUM,这种数据类型可以给予我们更多提高性能、降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特…

# 异运算_小学数学运算三要点:定律、法则与顺序(解析)

很多孩子的数学不好,尤其是女孩子。家长往往认定为数学不好就是孩子不擅长,能力差。其实未必,有的孩子数学不好的原因并不在于智商,而是没有理解到数学的方法与逻辑,比如小学的运算中,很多孩子并没有了解到…

如何实现一个教师与学生教学辅助平台?

在软件工程的学习过程中,我们要完成一个团体项目,关于个人教学辅助系统,对于这个,还有太多要学。对于如何实现其中的功能,我们会利用到html,css等语言来编写网页前端,同样也会用到数据库的知识。…

证明创建runnable实例和普通类时间一样长

import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;//证明创建runnable实例和普通类时间一样长public class Test002 { private Concurre…