SQL SERVER 2008数据库同步复制
SQLSERVER数据同步方案

SQLSERVER数据同步方案SQL Server是一种常用的关系型数据库管理系统,用于存储和管理大量的结构化数据。
在分布式环境中,数据同步是一项重要的任务。
数据同步方案可以确保多个数据库实例之间的数据保持一致性,从而避免数据冲突和错误。
以下是针对SQL Server的数据同步方案的一些建议和实践。
一、数据同步需求:1.数据一致性:确保多个数据库实例的数据保持同步,避免冲突和错误。
2.数据可靠性:保证数据的完整性和可用性,确保数据不会丢失或损坏。
3.数据时效性:实时或定期同步数据,以便及时反映最新的数据变更。
二、实现数据同步的方法:1. 事务复制(Transaction Replication):将源数据库中的事务日志传播到目标数据库,实现对数据的实时复制和同步。
这种方法适合于需要实时同步数据的场景,例如多个数据库实例用于读写分离或负载均衡。
2. 快照复制(Snapshot Replication):将源数据库中的数据复制到目标数据库,以实现数据的初始复制。
这种方法适用于数据量较大的场景,例如主备数据库之间的数据同步。
3. 合并复制(Merge Replication):将多个数据库实例之间的数据变更合并到一起,以实现数据的双向同步。
这种方法适用于分布式系统中数据频繁变更的场景,例如销售和服务人员经常离线工作的场景。
4. 数据同步工具:通过使用第三方工具(如Attunity Replicate、GoldenGate等)来实现数据的实时同步和复制。
这种方法可以提供更高级的数据同步功能,例如数据转换、过滤和冲突解决等。
三、数据同步实施步骤:1.确定数据同步需求:确定数据同步的频率、方向和粒度要求,以及特定的业务需求和目标。
2.设计数据同步方案:根据数据同步需求,选择适合的数据同步方法,并设计相应的架构和算法。
3.配置源数据库和目标数据库:配置源数据库和目标数据库的连接和权限,以便正确读取和写入数据。
SqlServer数据库同步方案详解

SqlServer数据库同步是项目中常用到的环节,若一个项目中的数据同时存在于不同的数据库服务器中,而这些数据库需要被多个不同的网域调用时,配置SqlServer数据库同步是个比较好的解决方案。
SqlServer数据库同步的配置比较烦锁,下面对其配置详细步骤进行介绍:一、数据复制前提条件1. 数据库故障还原模型必需为完全还原模型。
2. 所有被同步的数据表都必须要用主键。
3. 发布服务器、分发服务器和订阅服务器必须使用计算机名称来进行SQLSERVER服务器的注册。
4. SQLSERVER必需启动代理服务,且代理服务必需以本地计算机的帐号运行。
二、解决前提条件实施步骤1. 将数据库故障还原模型调整为完全还原模型。
具体步骤如下:打开SQLSERVER企业管理器——选择对应的数据库——单击右键选择属性——选择”选项”——故障还原模型选择完全还原模型。
2. 所有被同步的数据表都必须要用主键。
(主要指事务复制)如果没有主键的数据表,增加一个字段名称为id,类型为int 型,标识为自增1的字段。
3. 发布服务器、分发服务器和订阅服务器必须使用计算机名称来进行SQLSERVER服务器的注册。
在企业管理器里面注册的服务器,如果需要用作发布服务器、分发服务器和订阅服务器,都必需以服务器名称进行注册。
不得使用IP地址以及别名进行注册,比如LOCAL, “.”以及LOCALHOST等。
如果非同一网段或者远程服务器,需要将其对应关系加到本地系统网络配置文件中。
文件的具体位置在%systemroot%\system32\drivers\etc\hosts配置方式: 用记事本打开hosts文件,在文件的最下方添加IP地址和主机名的对应关系。
如图:SQLSERVER必需启动代理服务,且代理服务必需以本地计算机的帐号运行。
启动SQLSERVER代理的方法:我的电脑——单击右键”管理”——服务——SQLSERVERAGENT 将其设为自动启动。
零点起飞学SQL Sever之SQL Server 28复制

+ 分发服务器中包含分发数据库,其中存储
着所有类型复制的元数据和历史记录数据 以及事务性复制的事务。若要建立复制, 必须配置分发服务器。只能为每台发布服 务器分配一个分发服务器实例。 + 在SQL Server 2008的角色中,中间的角色 是分发服务器。用户可以使用SQL Server Management Studio工具来配置分发服务器。
+ 复制是在数据库之间对数据和数据库对象
进行复制和分发,然后在数据库之间进行 同步以保持数据一致性的一组技术。使用 复制,可以通过局域网和广域网、拨号连 接、无线连接和Internet将数据分发到不同 位置以及分发给远程或移动用户。
+ 一般的复制涉及源(数据对象)和目标
(数据对象)。在SQL Server 2008中,复 制的源数据对象所在的数据库引擎服务实 例称为发布服务器,复制的目标数据对象 所在的数据库引擎服务实例称为订阅服务 器,把数据对象从发布服务器移动到订阅 服务器的服务称为分布服务器。
+ 在创建发布之后,用户可பைடு நூலகம்在SQL Server
Management Studio工具中,利用“发布属 性”对话框来查看和修改发布属性。
+ 在成功配置分发服务器并且成功创建发布
后,就可以开始订阅了。订阅是对发布中 的数据和数据对象的副本的请求。订阅定 义将接收哪个发布,以及接收的时间和放 置数据库对象的位置等。 + 用户可以在SQL Server Management Studio 工具中,利用“发布属性”对话框来查看 和修改发布属性。
+ 在成功配置分发服务器后,在SQL Server
Management Studio的“对象资源管理器”窗口 中,右击“复制”节点,出现“发布服务器属 性”、“分发服务器属性”和“禁用发布和分 发”3个菜单命令。利用这些菜单项,可以查 看和维护发布和分发服务器。 + 1.查看发布服务器属性 + 2.查看分发服务器属性 + 3.禁用发布和分发服务器
SqlServer将一个数据库中表的数据复制到另一个数据库的表中

SqlServer将一个数据库中表的数据复制到另一个数据库的表中首先,要在A和B数据库中创建两个同名同结构的表,其中B数据库的表为目标表.复制语句如下:SqlConnection ConectionFrom = new SqlConnection("Data Source=192.168.1.59;Initial Catalog=A;uid=dev;pwd=dev");//数据库连接语句,看情况自己改string sqlfrom = "SELECT * FROM FLFTD_NFLOutLine";//查表语句,看情况自己改SqlDataAdapter adfrom = new SqlDataAdapter(sqlfrom, ConectionFrom);DataTable dtfrom = new DataTable();adfrom.Fill(dtfrom);SqlConnection ConectionTo = new SqlConnection("Data Source=192.168.1.59;Initial Catalog=B;uid=dev;pwd=dev");//数据库连接语句,看情况自己改string sqlto = "SELECT * FROM FLFTD_NFLOutLine"; //查表语句,看情况自己改SqlDataAdapter adto = new SqlDataAdapter(sqlto, ConectionTo);DataTable dtto = new DataTable();adto.Fill(dtto);//填结构// dtto = dtfrom.Copy();//不好用//dtto.Merge(dtfrom);//不好用for (int i = 0; i < dtfrom.Rows.Count; i++){DataRow dr = dtto.NewRow();//根据datatable结构新建行for (int j = 0; j < dtfrom.Columns.Count; j++){dr[j] = dtfrom.Rows[i][j];//复制}dtto.Rows.Add(dr);//添加该行}SqlCommandBuilder cb = new SqlCommandBuilder(adto);adto.Update(dtto);//可以理解为把内存中的ds值写入数据库用具体思想非常简单,就是用不同的adapter绑定2个不同DataTable,从一个DataTable拷贝到另一个DataTable.但是问题在于使用DataTable的Copy和Merge方法都无效,虽然在内存中可以看到dtto表已赋值,但是执行Update方法之后,数据库仍未改变.我怀疑是Copy方法返回一个新的DataTable引用覆盖了原来和adapter绑定的表相关联的引用.所以必须一个一个的赋值^_^.......。
SQL Server 2008 R2 异库复制

SQL Server 2008 R2 异库复制环境:
OS:Windows Server 2008 R2 SP1
DB: SQL Server 2008 R2
源数据库:testa 目标数据库:testb
表:student(id,name,address)
*address默认值为GZ
复制之前确认SQL Server 网络代理服务为开启状态!
进入复制数据库界面
(源服务器、目标服务器都为主机名或IP地址)
根据业务情况选择:
情况一:停机环境下可以勾选使用分离和附加方法
情况二:业务生产时间可以使用SQL管理对象方法
*实践仅为模拟环境,模拟情况二。
实际操作建议在停机时进行复制。
(复制,源数据库为testa)
(目标数据库为testb)
(保存传输日志)
(复制已完成,复制时长根据数据库大小而定;查看执行报告文件)
CDW_WIN-P5EH5N6T9VN_WIN-P5EH5N6T9VN_1_2016-10-17_23-38-14.txt 进入SQL Server Management Studio,刷新数据库
打开testb数据库,查看student表设计结构
数据库复制完成!。
SqlServer2008 数据库同步的两种方式(Sql JOB)

SqlServer2008 数据库同步的两种方式(Sql JOB)2011-05-27 16:59 by tyb1222, 1487 visits, 收藏, 编辑数据库同步是一种比较常用的功能。
以下结合我自己的体会整理的,如果有理解不完全或者有误的地方望大牛不理赐教。
下面介绍的就是数据库同步的两种方式:1、SQL JOB的方式sql Job的方式同步数据库就是通过SQL语句,将一个数据源中的数据同步到目标数据库中。
特点是它可以灵活的通过SQL的方式进行数据库之间的同步操作。
可以在制定的时间时间作为任务计划自动执行。
缺点是需要写SQL来进行操作。
既然是数据库之间的同步就涉及到数据库之间的连接。
建立连接是同步的第一步。
SQL Server建立连接可以通过系统存储过程建立【是否还有其他方式,我还不清楚】。
存储过程有以下几个:sp_droplinkedsrvlogin、sp_dropserver、sp_addlinkedserver、sp_addlinkedsrvlogin。
前面两个是删除数据库之间连接的,后两个是建立数据库之间连接的。
删除连接存储过程参数用法如下:a)sp_droplinkedsrvlogin语法sp_addlinkedsrvlogin [ @rmtsrvname =] 'rmtsrvname'[ ,[ @useself =] 'useself'][ , [ @locallogin=] 'locallogin'][ ,[ @rmtuser =] 'rmtuser'][ ,[ @rmtpassword =] 'rmtpassword']参数[@rmtsrvname=] 'rmtsrvname'是应用登录映射的链接服务器名称。
rmtsrvname的数据类型为sysname,没有默认设置。
[@useself =] 'useself'决定用于连接到远程服务器的登录名称。
MSSQLServer2008复制(发布与订阅)

MSSQLServer2008发布与订阅1名词解释发布服务器发布服务器是一种数据库实例,它通过复制向其他位置提供数据。
发布服务器可以有一个或多个发布,每个发布定义一组要复制的具有逻辑关系的对象和数据。
分发服务器分发服务器也是一种数据库实例,它起着存储区的作用,用于复制与一个或多个发布服务器相关联的特定数据。
每个发布服务器都与分发服务器中的单个数据库(称作分发数据库)相关联。
分发数据库存储复制状态数据和有关发布的元数据,并且在某些情况下为从发布服务器向订阅服务器移动的数据起着排队的作用。
在很多情况下,一个数据库服务器实例充当发布服务器和分发服务器两个角色。
这称为“本地分发服务器”。
当发布服务器和分发服务器按各自的数据库服务器实例配置时,把分发服务器称为“远程分发服务器”。
订阅服务器订阅服务器是接收复制数据的数据库实例。
订阅服务器可以接收来自多个发布服务器和发布的数据。
根据所选的复制类型,订阅服务器还可以将数据更改传递回发布服务器或者将数据重新发布到其他订阅服务器。
项目项目用于标识发布中包含的数据库对象。
一次发布可以包含不同类型的项目,包括表、视图、存储过程和其他对象。
当把表作为项目发布时,可以用筛选器限制发送到订阅服务器的数据的列和行。
发布发布是一个数据库中的一个或多个项目的集合。
将多个项目分组成一个发布,使得更便于指定一组作为一个单元复制的、具有逻辑关系的数据库对象和数据。
订阅订阅是把发布副本传递到订阅服务器的请求。
订阅定义将接收的发布和接收的时间、地点。
有两种类型的订阅:推送订阅和请求订阅。
有关推送订阅和请求订阅的详细信息,请参阅订阅发布。
2配置分发和发布若要创建发布,请提供下列信息:•分发服务器。
•快照文件的位置。
•发布数据库。
•要创建的发布的类型(快照发布、事务发布、具有可更新订阅的事务发布或合并发布)。
•包含在发布中的数据和数据库对象(项目)。
•用于所有发布类型的静态行筛选器和列筛选器,以及用于合并发布的参数化行筛选器和联接筛选器。
sql server复制技术

SQL Server复制技术是一种用于在不同数据库之间复制数据的高效、可靠的技术。
通过SQL Server复制技术,用户可以在不同的数据库之间同步数据,实现数据的备份、数据共享或者数据分发等功能。
SQL Server复制技术具有多种不同的复制类型和配置选项,可以满足不同场景下的数据同步需求。
一、SQL Server复制技术的基本原理1. 发布者-订阅者模型SQL Server复制技术采用发布者-订阅者模型,其中包括发布者、分发者和订阅者三个角色。
发布者负责发布数据的变化,分发者负责将变化的数据分发到订阅者,订阅者接收到数据的变化并将其应用到自己的数据库中。
2. 数据复制的过程数据复制的过程主要包括数据的捕获、数据的传送和数据的应用。
当发布者的数据发生变化时,这些变化会被捕获并传送到分发者,分发者再将这些变化传送给订阅者,最终订阅者将这些变化应用到自己的数据库中。
二、SQL Server复制技术的应用场景1. 数据备份与灾难恢复SQL Server复制技术可以用于实现数据的备份与灾难恢复。
通过将数据同步到不同的数据库中,可以保证数据的安全性和可靠性,当一个数据库发生故障时,可以快速地切换到另一个数据库进行数据恢复。
2. 数据共享与数据分发SQL Server复制技术也可以用于实现数据的共享与分发。
通过将数据同步到不同的数据库中,可以实现不同部门或者不同业务系统之间的数据共享和数据分发,提高数据的利用率和共享效率。
3. 数据报告和数据分析SQL Server复制技术还可以用于实现数据报告和数据分析。
通过将生产数据库中的数据同步到报告数据库或者分析数据库中,可以保证数据报告和数据分析的准确性和及时性,提高数据分析的效率和准确度。
三、SQL Server复制技术的优点1. 灵活性高SQL Server复制技术提供了多种不同的复制类型和配置选项,可以满足不同场景下的数据同步需求,可以灵活地选择合适的复制方式和配置参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL Server 2008数据库复制实现数据库同步备份
SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份。
这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数据库服务器,备份服务器只在主服务器出现故障时投入使用。
它是一种优于文件备份的数据库备份解决方案。
在选择数据库同步备份解决方案时,我们评估了两种方式:SQL Server 2008的数据库镜像和SQL Server 2008数据库复制。
数据库镜像的优点是系统能自动发现主服务器故障,并且自动切换至镜像服务器。
但缺点是配置复杂,镜像数据库中的数据不可见(在SQL Server Management Studio中,只能看到镜像数据库处于镜像状态,无法进行任何数据库操作,最简单的查询也不行。
想眼见为实,看看镜像数据库中的数据是否正确都不行。
只有将镜像数据库切换主数据库才可见)。
如果你要使用数据库镜像,强烈推荐killkill写的SQL Server 2005 镜像构建手册,我们就是按照这篇文章完成了数据库镜像部署测试。
最终,我们选择了SQL Server 2008数据库复制。
下面通过一个示例和大家一起学习一下如何部署SQL Server 2008数据库复制。
测试环境:Windows Server 2008 R2 + SQL Server 2008 R2(英文版),两台服务器,一台主数据库服务器CNBlogsDB1,一台备份数据库服务器CNBlogsDB2。
复制原理:我们采用的是基于快照的事务复制。
主数据库服务器生成快照,备份库服务器读取并加载该快照,然后不停地从主数据库服务器复制事务日志。
见下图:
图片来自SQL Server联机丛书
安装与配置步骤:
一、在两台服务器上安装好SQL Server 2008 R2,主要安装的组件:Database Engine(含SQL Server Replication),Management Tools。
二、主数据库服务器(发布服务器)的配置:
1. 在主数据库服务器CNBlogsDB1新建示例数据库CNBlogsDemo(注意Recovery mode要
使用默认值Full,只有这个模式才能进行事务复制),然后建立一张测试表,比如:CNBlogsTest。
2. 设置存放快照的文件夹:
创建发布之前,先设置一下存放快照的文件夹,创建发布后会在该文件夹生成快照文件,订阅服务器需要在初始化时加载该快照文件。
选择Replication》Local Publications》属性,在出现的窗口中选择Publishers,如下图:
点击红框处的按钮,出现设置窗口:
在Default Snapshot Folder中设置快照文件存放路径。
3. 在主数据库服务器创建发布:
在Replication》Local Publications中选择New Publication,出现一个向导。
先选择要发布的数据库CNBlogsDemo,然后选择发布类型Transational publication,如下图:
点击Next,出现错误:
原来所有要复制的表都需要有主键,刚才建CNBlogsTest表时,没有建主键。
建一下主键,并重新启动向导就可以了。
接着选择要复制的对象:
点Next,Next,进入Snapshot Agent窗口,选择Create a snapshot immediately and keep the snapshot available to initialize subscriptions,见下图:
Next,进入Agent Security:
选择Security Settings,进行相应的帐户设置:
一个是设置运行Snapshot Agent的Windows帐户,我们这里选择与SQL Server Agent同样的帐户。
一个是设置连接发布服务器的SQL帐户,我们这里就用主数据库服务器的sa帐户。
继续:OK,Next,Next,为这个发布起个名字:
点击Finish,就开始正式创建发布,创建成功就会出现如下窗口:
这时查看快照文件夹,就会看到unc文件夹,快照文件就在这个文件夹中。
这里要考虑这样一个问题,如何让订阅服务器通过网络访问这个快照文件夹。
我们在这个问题上折腾了一些时间,本来想通过共享文件夹的方式,但又不想打开匿名共享,折腾了半天,没搞定订阅服务器访问共享文件夹用户验证的问题。
于是采用了FTP的方式,所以,下面介绍一下如何让订阅服务器通过FTP访问快照文件。
4. 设置快照的FTP访问
首先在主数据库服务器上开通FTP服务,建立一个指向快照文件夹的FTP站点,设置好可以远程连接的FTP帐户。
然后在这台发布服务器设置一下FTP客户端配置。
配置方法如下:
在Replication》Local Publications中选择刚才创建的发布[CNBlogsDemo]:CNBlogsDemo_Publication,选择属性》FTP Snapshot,如下图:
选中Allow Subscribers to download snapshot files using FTP,并设置一下FTP客户端连接参数,订阅服务器就是通过这里的设置连接FTP服务器的(注:Path from the FTP root folder 的设置要和上图一样,设置为:/ftp)。
点击OK,这时会在快照文件夹中创建一个ftp文件夹,并在该文件夹中生成快照文件。
这样,发布服务器就配置好了,下面配置订阅服务器。
三、备份数据库服务器(订阅服务器)的配置:
进入订阅服务器CNBlogsDB2,创建与发布服务器同名的数据库CNBlogsDemo,使用完全恢复模式。
在Replication》Local Subscriptions中选择New Subscriptions,进入向导。
Next,进入选择发布服务器的窗口,选择Find SQL Server Publisher,出现服务器连接窗口:
这里要注意的是Server Name中一定要填写发布服务器的计算机名,如果计算机名连接不上,要在hosts文件中加一个IP地址解析。
成功连接发布服务器之后,就可以看到刚才在主数据库服务器上创建的发布:
Next,进入“分发代理工作位置”的选择窗口:
我们这里选择pull subscriptions,把数据给拉过来,这样主数据库服务器的负担会轻些。
Next,选择订阅服务器上的数据库,之前我们已经建好同名的数据库,所以系统自己会找到。
Next,进入分发代理安全设置窗口:
点击红框内的按钮,进入设置窗口:
设置如上图,Connect to the Distributor处设置的是发布服务器的sa帐户。
OK, Next, Next, Next:
Next, Finish, Success:
备份数据库的订阅就建好了!
现在来瞧一瞧订阅服务器CNBlogsDB2上的用于复制的数据库CNBlogsDemo:
看!我们在发布服务器上建立的表CNBlogsTest复制过来了。
现在我们去发布服务器CNBlogsDB1上添加一条记录:
再去订阅服务器CNBlogsDB2瞧一瞧:
数据立即同步过来了!搞定!
遇到的问题:
在测试过程中被两个问题折腾了很长时间。
1)发布服务器的Log Reader Agent不能启动,错误信息:
·The process could not execute 'sp_replcmds' on 'YCSERVER006'. (Source: MSSQL_REPL, Error number: MSSQL_REPL20011)
Get help: http://help/MSSQL_REPL20011
·Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission. (Source: MSSQLServer, Error number: 15517)
Get help: http://help/15517
·The process could not execute 'sp_replcmds' on 'YCSERVER006'. (Source: MSSQL_REPL, Error number: MSSQL_REPL22037)
Get help: http://help/MSSQL_REPL22037
开始测试时,附加了一个现有数据库进行复制遇到了这个问题,附加的是一下SQL Server 2005数据库文件,Owner为空,改为sa问题就解决了,如下图:
2)第二个问题就是前面已经描述过的订阅服务器访问发布服务器上的快照文件夹的问题,后来通过FTP的方式解决的。