2台MSSQL服务器某数据库怎么同步

2台MSSQL服务器某数据库怎么同步,第1张

通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。

如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。

主库的主机关机时,数据只能读不能写,并且从库的主机关机后,数据仍然可读可写,这个不好弄,如果你对lua脚本有所了解,修改mysql-proxy 的读写分离脚本或许可以实现。 不过主库关机时不能访问,并且从库关机仍可读可写,这个不需要配读写分离,这本来就是主从复制的基本能力,从库只是备用的而已。从库关闭后再开启,slave IO线程会自动从中断处二进制日志的位置开始复制主机的二进制日志,slave SQL线程会读取并执行这些二进制日志中的SQL。 总之,不需要特别的配置,这是主从复制的基本能力。

二者数据同步的关键在于mysql数据库中主键,方案是在redis启动时区mysql读取所有表键值存入redis中,往redis写数据是,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键。

参考代码如下:

String tbname = "login";

//获取mysql表主键值--redis启动时

long id = MySQLgetID(tbname);

//设置redis主键值--redis启动时

redisServiceset(tbname, StringvalueOf(id));

Systemoutprintln(id);

long l = redisServiceincr(tbname);

Systemoutprintln(l);

Login login = new Login();

loginsetId(l);

loginsetName("redis");

redisServicehmset(StringvalueOf(logingetId()), login);

boolean b = MySQLinsert("insert into login(id,name) values(" + logingetId()

+ ",'" + logingetName() + "')");

/

队列处理器更新mysql失败:

清除缓存数据,同时主键值自减

/

if (!b)

{

redisServicedelKeyAndDecr

(tbname, "Login:"+StringvalueOf(logingetId()));

// redisServicedelete("Login:"+StringvalueOf(logingetId()));

//redisServicedecr(tbname);

}

Systemoutprintln(redisServiceexists("Login:"+StringvalueOf(logingetId())));

Systemoutprintln(redisServiceget(tbname));

方法一:

在 SQL Server 里面, 创建一个 针对 MySQL 的数据库链接。

  然后 在 SQL Server 里面, 设定一个 数据库作业。  定时向 MySQL数据库链接 同步数据。

方法二:

用数据库快照就能实现啊

Oracle快照原理及实现总结

Oracle数据库的快照是一个表,它包含有对一个本地或远程数据库上一个或多个表或视图的查询的结果。对于中大型数据库,业务数据库里所有的数据同步到另外一个处理服务器上最佳的选择还是使用SnapShot方式,即快照的方式。

由于工作需要,今天需要将业务数据库里所有的数据同步到另外一个处理服务器上。在做方案的时候,想了很多方法,当然最快的办法还是使用物理热备的方式。

但是我个人认为如果对于中大型数据库(我们的数据库有300G左右)最佳的选择还是使用SnapShot方式,即快照的方式。

Oracle数据库的快照是一个表,它包含有对一个本地或远程数据库上一个或多个表或视图的查询的结果。也就是说快照根本的原理就是将本地或远程数据库上的一个查询结果保存在一个表中。

以下是我建立的Snapshot,目的是从业务数据库上将数据Copy到处理数据库上,是不同的两个服务器之间对数据copy。

第一步:在处理服务器上的Oracle终端,建立database link,业务数据库服务器SID为TEST

create database link TEST_DBLINKUSORACLECOM

connect to AMICOS identified by AMICOS

using 'test';

第二步:在业务数据库上对应的表建立快照日志

Create snapshot log on A_Table;

第三步:建立Snapshot 快照名称为:Test_SnapShot

Create snapshot Test_SnapShot

REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/24

as select from A_Table@TEST_DBLINK

说明:REFRESH是刷新方法

刷新方式有:COMPLETE和FAST两种,而START WITH是说明开始执行的时间。

Next是下次执行的时间

而AS以后是构成快照的查询方法。

相关的方法:

更改快照

ALTER SNAPSHOT Test_SnapShot

REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/2;

手动刷新快照 在命令界面执行:

EXEC DBMS_SNAPSHOTREFRESH('Test_SnapShot ','C');

第一个参数是要刷新的快照名

第二个参数是刷新的方式,F----FAST, C---COMPLETE

查看快照最后刷新的日期

SELECT NAME,LAST_REFRESH

FROM ALL_SNAPSHOT_REFRESH_TIMES;

最后非常的方案:

1:为需要做Snapshot的表建立Snapshot日志

create snapshot log on t1 with rowid; 这里使用ROWID建立日记的参数

2:采用Fast的方式建立快照,使用rowid做为参考参数

create snapshot fb_test_b refresh fast with rowid start with sysdate next sysdate+1/1440 as select from fb_test_b@my_dblink;

最好能按照rowid来建立快照。要不然就必须要为表建立Primary Key。

以上就是关于2台MSSQL服务器某数据库怎么同步全部的内容,包括:2台MSSQL服务器某数据库怎么同步、数据库mysql里的数据 与sqlserver里的数据同步、mysql数据库怎样自动将最近修改的另一个表里面的数据同步到一个数据表里面等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/9375569.html

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

发表评论

登录后才能评论

评论列表(0条)

保存