sqlserver同步机制——触发器同步


--注册远程服务器
exec sp_addlinkedserver '别名','','SQLOLEDB','服务器名或者IP'
exec sp_addlinkedsrvlogin '别名','false',null,'sa','sa'

--示例


exec sp_addlinkedserver 'WWW-07D4401AC5D','','SQLOLEDB','WWW-07D4401AC5D'
exec sp_addlinkedsrvlogin 'WWW-07D4401AC5D','false',null,'sa','sa'
select * from [WWW-07D4401AC5D].su.dbo.su
alter trigger tr_insert_author on su
for insert
as
set xact_abort on
--启动远程服务器的MSDTC服务
exec master..xp_cmdshell 'isql /S"WWW-07D4401AC5D" /U"sa" /P"sa" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output
--启动本机的MSDTC服务
exec master..xp_cmdshell 'net start msdtc',no_output
insert [WWW-07D4401AC5D].su.dbo.su(name,age)
values ('tony',20)

-------------------触发器------------

use[MKT5]
go
create trigger tr_insert_active_info on active_info
INSTEAD OF insert
as
set xact_abort on
insert wff.MKT5.dbo.active_info
select * from inserted

go

--修改同步
create trigger tr_update_active_info on active_info
INSTEAD OF update
as
set xact_abort on

declare @PK varchar(50),@table_name varchar(50),@sql varchar(5000)
set @table_name = 'active_info'
exec GetPK @table_name,null,null,@PK output


select @sql = (
N'delete b
from active_info b,deleted d
where b.'+@PK +'=d.'+@PK)

exec @sql

insert wff.MKT5.dbo.active_info
select * from inserted
go

--删除同步
create trigger tr_delete_active_info on active_info
INSTEAD OF delete
as
set xact_abort on

declare @PK varchar(50),@table_name varchar(50),@sql varchar(5000)
set @table_name = 'active_info'
exec GetPK @table_name,null,null,@PK output


select @sql = (
N'delete b
from active_info b,deleted d
where b.'+@PK +'=d.'+@PK)

exec @sql
go


PS:远程数据同步,必须打开MSDTC,必须打开135端口

启用网络 DTC 访问的步骤

启用网络DTC是分布式数据库事物控制的必要条件。设置过程应依下面步骤进行。

1) 单击“开始”,指向“控制面板”,然后单击“添加或删除程序”;

2) 单击“添加/删除 Windows 组件”;

3) 选择“应用程序服务器”,然后单击“详细信息”;

4) 选择“启用网络 DTC 访问”, 网络管理 、网络事务、XA 事务。另外,DTC 登录帐户一定要设置为“NT Authority"NetworkService”,并且事务管理器通讯不要求进行验证。然后单击“确定”;

5) 单击“下一步”;

6) 单击“完成”;

7) 停止分布式事务处理协调器服务,然后重新予以启动;

8) 停止 Microsoft SQL Server 和其他参与分布式事务处理的资源管理器服务(如 Microsoft 消息队列),然后将其重新启动。

二、Windows xp配置MSDTC的方法

控制面板-----〉管理工具-----〉组件服务



选择组件服务-----〉计算机--------〉我的电脑,再点击鼠标右键。






“点击安全性配置(I)….”按钮,选择项如下:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; using System.Data.SqlClient; using System.Text; using MySql.Data; using MySql.Data.MySqlClient; //本程序的功能是实时从mysql中读取一条记录中的一个字段,插入到sqlserver 中,经过长时间的运行,基本无错了, 而这数据同步,目前没有实时性强的软件,至少1分钟,太久了,自己写了一个, //可以自己设置同步时间,字符连接串等,给了源码,而且对程序进行了很多优化 容错性很强,懂点程序的 就可以直接修改源码 就可以用了。由于没有时间按做界面,只能自己修改了,不过已经很稳定了,为了给大家提供点方便,免得还去查大量的资料。 namespace tool { public partial class Form1 : Form { public string mysql_Conn = "Database='cmccbbs';Data Source='211.139.22.124';UserId='cmcc';Password='CMCC2014cmcc2014';charset='utf8';pooling=true"; public string mysql_sql = "select max(id) from pre_sms_tempsend"; // public string sql_server_Conn = "Data Source=lei; DataBase=test; User=sa;PWD=123456"; 211.222.229.124 public string id, phone, verify, last_id; SqlConnection my_sql_con; MySqlConnection con; MySqlCommand cmd; DataSet ds; public string sql_server_Conn = "Data Source=222.85.144.112,14444; DataBase=DB_CustomSMS; User=sms;PWD=sms2014"; // public string sql_sql = "select max(id) from pre_sms_tempsend"; MySqlDataAdapter md; public int ii = 0; public Form1() { InitializeComponent(); timer1.Interval = 1000; //连接mysql con = new MySql.Data.MySqlClient.MySqlConnection(mysql_Conn); con.Open(); cmd = new MySqlCommand("select * from pre_sms_tempsend order by id desc limit 1", con); cmd.Connection = con; md = new MySqlDataAdapter(); ds = new DataSet(); //这样做避免一直new,导致内存泄露 } private void button1_Click(object sender, EventArgs e) { if (button1.Text == "start") { timer1.Enabled = true; button1.Text = "stop"; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值