转自:https://www.cnblogs.com/happyday56/p/3849018.html

关键字:sql server复制

【SQL Server高可用性】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?

在SQL Server上配置好数据库复制后:

1、如果给表加了字段,会不会复制到订阅服务器呢?如果是删除1个字段呢?

2、如果新创建了1个表,会不会被同步过去呢?

3、如果新建了一个存储过程,会不会同步过去呢?

本文将会通过实验,回答上述问题。

1、首先,需要配置数据库复制。

这里为了简单起见,用了机器上的2个SQL Server 2008R2的实例。

两个实例分别是:MSSQLSERVER、SQL2008R2。

在配置时,以MSSQLSERVER为发布服务器,而SQL2008R2为订阅服务器,配置为请求订阅。

详细的配置方法,可以参考这篇文章,区别在于下面的文章中是配置成了推送订阅,有什么不明白的,可以在给我留言:

【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表

在两个实例上运行如下代码,来创建数据库和表:

create database w
go use w
go create table www(id int primary key ,v varchar(10))

下面是配置完成后的截图:

发布服务器

订阅服务器

2、对于已经发布的表www,增加1列,会自动同步吗?

在发布服务器上运行如下代码:

alter table www
add v2 varchar(10)

从订阅服务器的图中,并没有发现www表上新增的v2列,说明没有同步过去,那么这样怎么办呢?

这个时候,尝试“重新初始化订阅”:

这里进行重新初始化,成功了。如果不成功,可以按照弹出的错误窗口的提示,禁用分发代理,然后再次重新初始化订阅就可以了:

再次查看订阅服务器,发现www表,已经有了v2列了:

接下来,在发布服务器上,再增加一个字段,发现订阅服务器也自动增加了这个字段,而不需要重新初始化:

alter table www
add v3 datetime

然后,我们在发布服务器上删除v3字段,而订阅服务器上也自动删除了这个v3字段。

但有时候,也会报错,这个时候,可以再次尝试一下,一般就能删除这个字段。

3、新创建了1个表,会不会被同步过去呢?

这个得看是什么表,如果没有主键,那么就没办法复制到订阅服务器了。而如果是有主键的表,就可以复制。

先在发布服务器上创建2个表:

--没有主键
select * into abc
from sys.objects --有主键
create table abc123(a int primary key,b varchar(20),c datetime)

我们发现,在发布服务器上创建表后,和新增、删除列不同,并不会自动复制到订阅服务器上,那么怎么办呢?

其实,很简单,只需要找到发布,然后右键,选择“属性”:

在弹出的框中,在左边选择“项目”,在右边去掉“仅显示列表中已选中的项目”,然后给abc123表打手勾,就可以了,也就是让SQL Server也复制这个表到订阅服务器,否则SQL Server也不知道是否需要复杂:

不过,需要注意的是abc这个表上有一个红色的圈,因为是没有主键,这个表示不能复制的意思。

再次查看订阅服务器,发现表已经同步,而且对每个被同步的表,都会有3个存储过程,分别对应insert、update、delete:

如果没有同步,需要用上面提到的方法,重新初始化一下就可以了。

4、如果新建了一个存储过程,会不会同步过去呢?

其实这个和新建表是一样的,需要在设置发布的属性中的“项目”,把要发布的存储过程,打上勾就可以了。

那如果想修改存储过程呢?

这个一般会自动同步,所以修改后,自动就同步到订阅服务器了。

【SQL Server复制】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?的更多相关文章

  1. sql server查询数据库的大小和各数据表的大小

    查询出来的结果中各字段的详细说明参考MSDN资料:https://msdn.microsoft.com/zh-cn/library/ms188776.aspx 如果只是查询数据库的大小的话,直接使用以 ...

  2. SQL Server 在数据库中查找字符串(不知道表名的情况下 查找字符串)

    declare @key varchar(30)set @key = '广州' --替换为要查找的字符串DECLARE @tabName VARCHAR(40),@colName VARCHAR(40 ...

  3. 通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...

  4. 【转】通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...

  5. SQL复制表结构或表数据

    需求: 软件开发过程中,一般会部署两个数据库:一个测试数据库提供给开发和测试过程使用:一个运维数据库提供上线使用.当需求变化需增加表时,会遇到数据库表结构或表数据同步的问题,这时就要复制表结构或表数据 ...

  6. mysql复制表结构和表数据

    我们知道,在SQL Server中,如果要复制表结构和表数据的话,可以使用select into语句. select * into yanggb1 from yanggb; 但是在MySQL中是不支持 ...

  7. MySQL复制同一个服务器的表结构和表数据

    例如,现在服务器上有数据库 dbx 和 dby,dbx中有很多表,要把dbx中的表全部复制到dby,如下操作: 首先: use dby; [复制表结构] CREATE TABLE user LIKE ...

  8. mysql复制表结构及检查表、存储过程是否存在

    mysql命令行复制表结构的方法: 1.只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2  或者 CREATE TABLE 新表 LIKE 旧表 ...

  9. 【MySQL】MySQL复制表结构、表数据

    平常,复制.备份表,一般都直接操作IDE完成.但有时,一些初始化数据的脚本,在操作数据前,最好备份下操作表的结构.数据,不至于出错了被置于为难的境地. 所以复制表结构.表数据的语句就派上用场. > ...

  10. Mysql 复制表结构 及其表的内容

    顺便转一下Mysql复制表结构.表数据的方法: 1.复制表结构及数据到新表CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们 ...

随机推荐

  1. Java内存模型(JMM)的可见性

    JMM(Java Memory Model)内存模型之可见性 JMM是Java内存模型的缩写,本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字 ...

  2. pyqt5-橡皮筋控件QRubberBand

    提供一个矩形或线来指示选择或边界 一般结合鼠标事件一同协作 继承于 QWidget import sys from PyQt5.QtWidgets import QApplication, QWidg ...

  3. 《SaltStack技术入门与实践》—— Job管理

    Job管理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 在SaltStack里面执行任何一个操作都会在Master上产生一个jid号.Minion ...

  4. 对Moment.js的研究

    创建npm install moment --save-dev 日期格式化 moment().format('MMMM Do YYYY, h:mm:ss a'); // 六月 4日 2019, 6:2 ...

  5. Python的命令行参数(argparse)

    参考:https://www.cnblogs.com/lindaxin/p/7975697.html 参考:https://www.cnblogs.com/dengtou/p/8413609.html ...

  6. [CF535D]Tavas and Malekas 题解

    题意简述 有一个空着的长度为\(n\)的字符串\(ans\),再给出一个长度为\(m\)的序列\(a\),现要在序列中每个元素\(a_i\)的位置开始都规定必须为一个给定的字符串\(s\).问字符串\ ...

  7. 几种Android混淆和逆向工具介绍

    针对Android面临的安全风险,一些防止逆向的方法应运而生.代码混淆在X86架构上曾经被广泛研究,他被用于保护软件的只是产权,但是恶意软件也常常使用他来对抗杀毒软件或者对抗逆向分析者,代码混淆可以给 ...

  8. 3D Computer Grapihcs Using OpenGL - 09 Enable Depth Test

    启用Depth Test OpenGL是个3D绘图API,也就是说不只有xy坐标轴,还有第三个坐标轴z,z轴的方向是垂直于屏幕,指向屏幕内. 靠近人眼的方向是负方向,标准化设备坐标的最小值是-1, 最 ...

  9. android发送udp,tcp消息

    发送方创建步骤: 1.  创建一个DatagramSocket对象 DatagramSocket socket = new  DatagramSocket (4567); 2.  创建一个 InetA ...

  10. Mac下配置神器PhpStrom开发环境

    转载自:http://www.ifun.cc/blog/2014/02/09/macxia-pei-zhi-shen-qi-phpstromkai-fa-huan-jing/ php这么流行,不能不研 ...