如何实现两个数据库的同步

如何实现两个数据库的同步,第1张

sql同步使用dblink同步数据。

具体参考实例:

1、在win下创建linux的DBLINK

a查看linux下的tnsnamesora文件

[oracle@myrac1 admin]$ cat tnsnamesora

# tnsnamesora Network Configuration File: /s01/app/oracle/product/1120/dbhome_1/network/admin/tnsnamesora

# Generated by Oracle configuration tools

HJJ =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = myrac1oraclecom)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = hjj)

)

)

b创建dblink

SQL> create database link win_lin_link connect to hjj identified by xxxx

2 using '(DESCRIPTION =

3 (ADDRESS = (PROTOCOL = TCP)(HOST = 1921681171)(PORT = 1521))

4 (CONNECT_DATA =

5 (SERVER = DEDICATED)

6 (SERVICE_NAME = hjj)

7 )

8 )'

9 /

Database link created

2在win下创建trigger

SQL> create or replace trigger trig_win_emp

2 after insert on emp

3 for each row

4 begin

5 insert into emp@win_lin_link values(:newempno,:newempname,:newempsalary);

6 end;

7 /

Trigger created

3测试

4结果

win下插入数据

SQL> insert into emp values('E001','LYN',2300);

1 row created

SQL>COMMIT;

Commit complete

SQL> select from emp;

EMPNO EMPNAME EMPSALARY

---------------------------------------- ---------------------------------------- ----------

E001 LYN 2300

SQL> select from emp@win_lin_link;

EMPNO EMPNAME EMPSALARY

---------------------------------------- ---------------------------------------- ----------

E001 LYN 2300

linux下查看数据

SQL> select from emp;

EMPNO EMPNAME EMPSALARY

-------------------- -------------------- ----------

E001 LYN 2300

前提条件

您需要在您RDS for MySQL所在的云账号下开通阿里云数据传输服务。并 点击此处

下载dts-ads-writer插件到您的一台服务器上并解压(需要该服务器可以访问互联网,建议使用阿里云ECS以最大限度保障可用性)。服务器上需要有Java

6或以上的运行环境(JRE/JDK)。

*** 作步骤

1 在分析型数据库上创建目标表,数据更新类型为实时写入,字段名称和MySQL中的建议均相同;

2 在阿里云数据传输的控制台上创建数据订阅通道,并记录这个通道的ID;

(见: >

1、如果RDS上的数据没有发生增删改的 *** 作的话,可以生成物理备份或者逻辑备份,然后将物理备份和逻辑备份通过Xtrabackup或者mysqldump将数据导入到自建库。

2、如果在物理备份已经生成后对于数据库仍然有增删改的 *** 作的话,则需要您在恢复物理备份后还需要追加后续的binlog文件,可以通过API/控制台获取binlog文件去追加增量数据。

这里有一个非常需要注意的一点是在解压出来物理备份文件后除了数据和索引文件外还有得到如下图中的一些文件。

由于在物理备份上应用binlog是需要记录binlog的pos点的,所有的RDS都是采用主备架构保证高可用性的,为保证主库正常对外提供服务,备份 *** 作是在从库上执行的,但是生成出来的binlog文件却既有可能是主库或者从库上生成(两个binlog文件的pos点是不一致的)。提供给用户的也可能是这里面的任意一份,因此在物理备份文件中给用户提供了两个binlog文件的pos点,如下图:

用户在应用binlog的时候需要两个pos点都测试一下,哪个pos点可以在binlog中找到从这个pos点开始应用binlog。 

3、用户想要将RDS上的增量数据同步在自建库的binlog上可以使用DTS的数据订阅功能,可以通过SDK消费增量数据即可再自己应用该数据。

为方便完成指定数据表的同步 *** 作,可以采用dblink与merge结合的方法完成。

*** 作环境: 此数据库服务器ip为19216819676,有center与branch两个库,一般需要将center的表数据同步到branch,center为源库,branch为目标库,具体步骤如下:

1在源库创建到目标库的dblink

create database link branch     --输入所要创建dblink的名称,自定义 

  connect to dbuser identified by “password”  --设置连接远程数据库的用户名和密码 

  using '19216819676/branch';  --指定目标数据库的连接方式,可用tns名称

在创建dblink时,要注意,有时候可能会报用户名和密码错误,但实际上我们所输入的账户信息是正确的,此时就注意将密码的大小写按服务器上所设置的输入,并在账号密码前号加上双引号(服务器版本不同造成的)。

2成功后验证dblink

select from tb_bd_action@branch; --查询创建好的brach库

正常情况下,如果创建dblink成功,可采用该方式访问到远程数据库的表

3通过merge语句完成表数据同步

此例中需要将center库中的tb_sys_sqlscripe表同步到branch,简单的语法如下:

merge into tb_sys_sqlscripe@branch b using tb_sys_sqlscripe c on (bpk=cpk)  --从center将表merge到branch,同步的依据是两个表的pk

when matched then  update set bsqlscripe=csqlscripe,bauthor=cauthor  --如果pk值是相同则将指定表的值更新到目标表

when not matched then   --如果pk值不一至,则将源表中的数据整条插入到目标表中

insert values (cpk, cfk, ccreatetime, clastmodifytime,cauthor,cmodule,cdeleteflag, cscripttype);

commit;               --记得merge后必须commit,否则更改未能提交

4为方便每次需要同步时自动完成同步工作,可将该语句做成存储过程或脚本来定时执行或按要求手动执行,简单说一下创建脚本的方法:

a创建merge文件夹

b先将merge语句写完整后,存到mergesql文件中

c新建mergebat文件,编辑后写入以下内容

sqlplus user/password@serverip/database @"%cd%\mergesql"

不同服务器数据库之间的数据 *** 作 --创建链接服务器 exec sp_addlinkedserver 'ITSV ', '', 'SQLOLEDB ', '远程服务器名或ip地址 'exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码'--查询示例 selectfrom ITSV数据库名dbo表名 --导入示例 selectinto 表from ITSV数据库名dbo表名 --以后不再使用时删除链接服务器 exec sp_dropserver 'ITSV ', 'droplogins '--连接远程/局域网数据(openrowset/openquery/opendatasource) --1、openrowset --查询示例 selectfromopenrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码',数据库名dbo表名) --生成本地表 selectinto 表fromopenrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码',数据库名dbo表名) --把本地表导入远程表 insertopenrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码',数据库名dbo表名) selectfrom 本地表 --更新本地表 update b set b列A=a列A fromopenrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码',数据库名dbo表名)as a innerjoin 本地表 b on acolumn1=bcolumn1 --openquery用法需要创建一个连接 --首先创建一个连接创建链接服务器 exec sp_addlinkedserver 'ITSV ', '', 'SQLOLEDB ', '远程服务器名或ip地址 '--查询selectFROMopenquery(ITSV, 'SELECT FROM 数据库dbo表名 ') --把本地表导入远程表 insertopenquery(ITSV, 'SELECT FROM 数据库dbo表名 ') selectfrom 本地表 --更新本地表 update b set b列B=a列B FROMopenquery(ITSV, 'SELECT FROM 数据库dbo表名 ') as a innerjoin 本地表 b on a列A=b列A --3、opendatasource/openrowset SELECTFROMopendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' )testdboroy_ta --把本地表导入远程表 insertopendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ')数据库dbo表名 selectfromSQL code 用强制订阅实现数据库同步 *** 作 大量和批量的数据可以用数据库的同步机制处理: // 说明:为方便 *** 作,所有 *** 作均在发布服务器(分发服务器)上 *** 作,并使用推模式在客户机器使用强制订阅方式。 有疑问联系作者:zlp321001@hotmailcom 测试通过 //--1:环境服务器环境: 机器名称: ZehuaDb *** 作系统:Windows 2000 Server 数据库版本:SQL 2000 Server 个人版 客户端机器名称:Zlp *** 作系统:Windows 2000 Server 数据库版本:SQL 2000 Server 个人版 --2:建用户帐号在服务器端建立域用户帐号我的电脑管理->本地用户和组->用户->建立UserName:zlp UserPwd:zlp --3:重新启动服务器MSSQLServer我的电脑->控制面版->管理工具->服务->MSSQLServer 服务 (更改为:域用户帐号,我们新建的zlp用户 /zlp,密码:zlp) --4:安装分发服务器A:配置分发服务器工具->复制->配置发布、订阅服务器和分发->下一步->下一步(所有的均采用默认配置) B:配置发布服务器工具->复制->创建和管理发布->选择要发布的数据库(SZ)->下一步->快照发布->下一步-> 选择要发布的内容->下一步->下一步->下一步->完成C:强制配置订阅服务器(推模式,拉模式与此雷同) 工具->复制->配置发布、订阅服务器和分发->订阅服务器->新建->SQL Server数据库->输入客户端服务器名称(ZLP)->使用SQL Server 身份验证(sa,空密码)->确定->应用->确定D:初始化订阅复制监视器->发布服务器(ZEHUADB)->双击订阅->强制新建->下一步->选择启用的订阅服务器->ZLP-> 下一步->下一步->下一步->下一步->完成--5:测试配置是否成功复制监视器->发布服务器(ZEHUADB)->双击SZ:SZ->点状态->点立即运行代理程序查看:复制监视器->发布服务器(ZEHUADB)->SZ:SZ->选择ZLP:SZ(类型强制)->鼠标右键->启动同步处理如果没有错误标志(红色叉),恭喜您配置成功 --6:测试数据 --在服务器执行:选择一个表,执行如下SQL insertinto WQ_NEWSGROUP_S select'测试成功',5 复制监视器->发布服务器(ZEHUADB)->SZ:SZ->快照->启动代理程序 ->ZLP:SZ(强制)->启动同步处理 去查看同步的 WQ_NEWSGROUP_S 是否插入了一条新的记录 测试完毕,通过。

这个问题比较有难度哦!

这里只能提供一些范例给你参考下:

SQLServer2000同步复制技术实现步骤

一、 预备工作

1发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户

--治理工具

--计算机治理

--用户和组

--右键用户

--新建用户

--建立一个隶属于administrator组的登陆windows的用户(SynUser)

2在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录, *** 作:

我的电脑--D:\ 新建一个目录,名为: PUB

--右键这个新建的目录

--属性--共享

--选择 "共享该文件夹 "

--通过 "权限 "按纽来设置具体的用户权限,保证第一步中创建的用户(SynUser) 具有对该文件夹的所有权限

--确定

3设置SQL代理(SQLSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置)

开始--程序--治理工具--服务

--右键SQLSERVERAGENT

--属性--登陆--选择 "此账户 "

--输入或者选择第一步中创建的windows登录用户名(SynUser)

-- "密码 "中输入该用户的密码

4设置SQL Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置)

企业治理器

--右键SQL实例--属性

--安全性--身份验证

--选择 "SQL Server 和 Windows "

--确定

5在发布服务器和订阅服务器上互相注册

企业治理器

--右键SQL Server组

--新建SQL Server注册

--下一步--可用的服务器中,输入你要注册的远程服务器名 --添加

--下一步--连接使用,选择第二个 "SQL Server身份验证 "

--下一步--输入用户名和密码(SynUser)

--下一步--选择SQL Server组,也可以创建一个新组

--下一步--完成

6对于只能用IP,不能用计算机名的,为其注册服务器别名(此步在实施中没用到)

(在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP)

开始--程序--Microsoft SQL Server--客户端网络实用工具

--别名--添加

--网络库选择 "tcp/ip "--服务器别名输入SQL服务器名

--连接参数--服务器名称中输入SQL服务器ip地址

--假如你修改了SQL的端口,取消选择 "动态决定端口 ",并输入对应的端口号

二、 正式配置

1、配置发布服务器

打开企业治理器,在发布服务器(B、C、D)上执行以下步骤:

(1) 从[工具]下拉菜单的[复制]子菜单中选择[配置发布、订阅服务器和分发]出现配置发布和分发向导

(2) [下一步] 选择分发服务器 可以选择把发布服务器自己作为分发服务器或者其他sql的服务器(选择自己)

(3) [下一步] 设置快照文件夹

采用默认\\servername\Pub

(4) [下一步] 自定义配置

可以选择:是,让我设置分发数据库属性启用发布服务器或设置发布设置

否,使用下列默认设置(推荐)

(5) [下一步] 设置分发数据库名称和位置 采用默认值

(6) [下一步] 启用发布服务器 选择作为发布的服务器

(7) [下一步] 选择需要发布的数据库和发布类型

(8) [下一步] 选择注册订阅服务器

(9) [下一步] 完成配置

2、创建出版物

发布服务器B、C、D上

(1)从[工具]菜单的[复制]子菜单中选择[创建和治理发布]命令

(2)选择要创建出版物的数据库,然后单击[创建发布]

(3)在[创建发布向导]的提示对话框中单击[下一步]系统就会d出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)

(4)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,

SQLSERVER答应在不同的数据库如 orACLE或ACCESS之间进行数据复制。

但是在这里我们选择运行 "SQL SERVER 2000 "的数据库服务器

(5)单击[下一步]系统就d出一个定义文章的对话框也就是选择要出版的表

注重: 假如前面选择了事务发布 则再这一步中只能选择带有主键的表

(6)选择发布名称和描述

(7)自定义发布属性 向导提供的选择:

是 我将自定义数据筛选,启用匿名订阅和或其他自定义属性

否 根据指定方式创建发布 (建议采用自定义的方式)

(8)[下一步] 选择筛选发布的方式

(9)[下一步] 可以选择是否答应匿名订阅

1)假如选择署名订阅,则需要在发布服务器上添加订阅服务器

方法: [工具]-> [复制]-> [配置发布、订阅服务器和分发的属性]-> [订阅服务器] 中添加

否则在订阅服务器上请求订阅时会出现的提示:改发布不答应匿名订阅

假如仍然需要匿名订阅则用以下解决办法

[企业治理器]-> [复制]-> [发布内容]-> [属性]-> [订阅选项] 选择答应匿名请求订阅

2)假如选择匿名订阅,则配置订阅服务器时不会出现以上提示

(10)[下一步] 设置快照 代理程序调度

(11)[下一步] 完成配置

当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。

更具体的你可以看这里:

>

MySQL数据同步主要有三种方式:

1利用MySQL自身的数据库同步功能

2利用MySQL数据库的特性(数据库存在固顶目录,并且以文件形式存储),进行数据库目录同步以达到数据同步目的

3利用专用的MySQL数据库同步软件

1利用MySQL自身的数据库同步功能(下面参考自网上的文章,写的非常详细了)

MySQL从32315版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能

数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是mycnf),在unix环境下在/etc/mysql/mycnf或者在mysql用户的home目录下的mycnf。

windows环境中,如果c:根目录下有mycnf文件则取该配置文件。当运行mysql的winmysqladminexe工具时候,该工具会把c:根目录下的mycnf命名为mycnfbak。并在winnt目录下创建myini。mysql服务器启动时候会读该配置文件。所以可以把mycnf中的内容拷贝到myini文件中,用myini文件作为mysql服务器的配置文件。

设置方法:

设置范例环境:

*** 作系统:window2000professional

mysql:404-beta-max-nt-log

Aip:10101022

Bip:10101053

A:设置

1增加一个用户最为同步的用户帐号:

GRANTFILEONTObackup@'10101053'IDENTIFIEDBY‘1234’

2增加一个数据库作为同步数据库:

createdatabasebackup

B:设置

1增加一个用户最为同步的用户帐号:

GRANTFILEONTObackup@'10101022'IDENTIFIEDBY‘1234’

2增加一个数据库作为同步数据库:

createdatabasebackup

主从模式:A->B

A为master

修改Amysql的myini文件。在mysqld配置项中加入下面配置:

server-id=1

log-bin

#设置需要记录log可以设置log-bin=c:mysqlbakmysqllog设置日志文件的目录,

#其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。

binlog-do-db=backup#指定需要日志的数据库

重起数据库服务。

用showmasterstatus命令看日志情况。

B为slave

修改Bmysql的myini文件。在mysqld配置项中加入下面配置:

server-id=2

master-host=10101022

master-user=backup#同步用户帐号

master-password=1234

master-port=3306

master-connect-retry=60预设重试间隔60秒

replicate-do-db=backup告诉slave只做backup数据库的更新

重起数据库

用showslavestatus看同步配置情况。

注意:由于设置了slave的配置信息,mysql在数据库目录下生成masterinfo

所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。

双机互备模式。

如果在A加入slave设置,在B加入master设置,则可以做B->A的同步。

在A的配置文件中mysqld配置项加入以下设置:

master-host=10101053

master-user=backup

master-password=1234

replicate-do-db=backup

master-connect-retry=10

在B的配置文件中mysqld配置项加入以下设置:

log-bin=c:mysqllogmysqllog

binlog-do-db=backup

注意:当有错误产生时err日志文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slavestart

重起AB机器,则可以实现双向的热备。

测试:

向B批量插入大数据量表AA(1872000)条

A数据库每秒钟可以更新2500条数据。

2数据库目录同步,方法和文件同步一样,设置好需要同步的两个数据库目录就可以了!

缺点很明显,数据同步只能单向进行,可以作为备份方案

3用专用的MySQL同步软件进行同步

这方面的软件有SQLBalance和MyReplicator,优点是方便直观,还有很多争强功能!

缺点和2一样,只能单项同步!

当然你也可以修改镜像网站的程序为提交数据到母数据库,读取则在当前镜像下的数据,不过,修改起来麻烦!普通用户修改也非常难!呵呵,大家了解一下就可以!给大家一个思路!有能力的朋友可以试试阿!

4关于MySQL论坛的数据同步

由于数据来源的不可控制(不好表达),论坛数据是实时的,而且还要考虑来自镜像论坛的数据,如何实现镜像论坛与母论坛数据同步呢

用1中介绍的MySQL自带的数据库同步功能互相备份模式就可以实现的!

不过,具体的应用我没有测试!稳定性不敢保证!

有能力的朋友推荐用下面这种思路来同步,相对来说减少点效率,但能减少发生的错误!

比如镜像论坛数据同步:

1母论坛和镜像论坛的数据全写在母论坛数据库里,主从模式,读取只在本地读取,这个需要修改程序!

2每次写数据,都同时提交到两个数据库中,安全,但是效率很差,也得修改程序!

MSSQL

MSSQL数据同步利用数据库复制技术实现数据同步更新(来自网络,也是非常完美的教程)

复制的概念

复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。

SQL复制的基本元素包括

出版服务器、订阅服务器、分发服务器、出版物、文章

SQL复制的工作原理

SQLSERVER主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器

SQLSERVER复制技术类型

SQLSERVER提供了三种复制技术,分别是:

1、快照复制(呆会我们就使用这个)

2、事务复制

3、合并复制

只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。

第一先来配置出版服务器

(1)选中指定[服务器]节点

(2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令

(3)系统d出一个对话框点[下一步]然后看着提示一直 *** 作到完成。

(4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)

第二创建出版物

(1)选中指定的服务器

(2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会d出一个对话框

(3)选择要创建出版物的数据库,然后单击[创建发布]

(4)在[创建发布向导]的提示对话框中单击[下一步]系统就会d出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)

(5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQLSERVER2000"的数据库服务器

(6)单击[下一步]系统就d出一个定义文章的对话框也就是选择要出版的表

(7)然后[下一步]直到 *** 作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。

第三设计订阅

(1)选中指定的订阅服务器

(2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]

(3)按照单击[下一步] *** 作直到系统会提示检查SQLSERVER代理服务的运行状态,执行复制 *** 作的前提条件是SQLSERVER代理服务必须已经启动。

(4)单击[完成]。完成订阅 *** 作。

完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:/ProgramFiles/MicrosoftSQLServer/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表—

一个手工同步的方案

--定时同步服务器上的数据

--例子:

--测试环境,SQLServer2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test

--服务器上的表(查询分析器连接到服务器上创建)

createtable[user](idintprimarykey,numbervarchar(4),namevarchar(10))

go

--以下在局域网(本机 *** 作)

--本机的表,state说明:null表示新增记录,1表示修改过的记录,0表示无变化的记录

ifexists(selectfromdbosysobjectswhereid=object_id(N'[user]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

droptable[user]

GO

createtable[user](idintidentity(1,1),numbervarchar(4),namevarchar(10),statebit)

go

--创建触发器,维护state字段的值

createtriggert_stateon[user]

afterupdate

as

update[user]setstate=1

from[user]ajoininsertedbonaid=bid

whereastateisnotnull

go

--为了方便同步处理,创建链接服务器到要同步的服务器

--这里的远程服务器名为:xz,用户名为:sa,无密码

ifexists(select1frommastersysserverswheresrvname='srv_lnk')

execsp_dropserver'srv_lnk','droplogins'

go

execsp_addlinkedserver'srv_lnk','','SQLOLEDB','xz'

execsp_addlinkedsrvlogin'srv_lnk','false',null,'sa'

go

--创建同步处理的存储过程

ifexists(selectfromdbosysobjectswhereid=object_id(N'[dbo][p_synchro]')andOBJECTPROPERTY(id,N'IsProcedure')=1)

dropprocedure[dbo][p_synchro]

GO

createprocp_synchro

as

--setXACT_ABORTon

--启动远程服务器的MSDTC服务

--execmasterxp_cmdshell'isql/S"xz"/U"sa"/P""/q"execmasterxp_cmdshell''netstartmsdtc'',no_output"',no_output

--启动本机的MSDTC服务

--execmasterxp_cmdshell'netstartmsdtc',no_output

--进行分布事务处理,如果表用标识列做主键,用下面的方法

--BEGINDISTRIBUTEDTRANSACTION

--同步删除的数据

deletefromsrv_lnktestdbo[user]

whereidnotin(selectidfrom[user])

--同步新增的数据

insertintosrv_lnktestdbo[user]

selectid,number,namefrom[user]wherestateisnull

--同步修改的数据

updatesrv_lnktestdbo[user]set

number=bnumber,name=bname

fromsrv_lnktestdbo[user]a

join[user]bonaid=bid

wherebstate=1

--同步后更新本机的标志

update[user]setstate=0whereisnull(state,1)=1

--COMMITTRAN

go

--创建作业,定时执行数据同步的存储过程

ifexists(SELECT1frommsdbsysjobswherename='数据处理')

EXECUTEmsdbdbosp_delete_job@job_name='数据处理'

execmsdbsp_add_job@job_name='数据处理'

--创建作业步骤

declare@sqlvarchar(800),@dbnamevarchar(250)

select@sql='execp_synchro'--数据处理的命令

,@dbname=db_name()--执行数据处理的数据库名

execmsdbsp_add_jobstep@job_name='数据处理',

@step_name='数据同步',

@subsystem='TSQL',

@database_name=@dbname,

@command=@sql,

@retry_attempts=5,--重试次数

@retry_interval=5--重试间隔

--创建调度

EXECmsdbsp_add_jobschedule@job_name='数据处理',

@name='时间安排',

@freq_type=4,--每天

@freq_interval=1,--每天执行一次

@active_start_time=00000--0点执行

go

以上就是关于如何实现两个数据库的同步全部的内容,包括:如何实现两个数据库的同步、如何对MySQL数据库中的数据进行实时同步、mysql如何实现两个数据库数据结构实时同步等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9362666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存