服务器间的复制

来源:互联网 发布:吕斌拳击 知乎 编辑:程序博客网 时间:2024/04/27 18:17
 

现在局域网下有两台sqlserver,  存放着相同的库和表, 假设A服务器里数据库叫As,有张表叫At,表里有三个字段。
AS服务器下AT表里的字段如下
Id    Name    Time
1     B301    4
2     C203    5
3     D403    6
4     E504    8

在B服务器里存在与AS服务器同样的库名,同样的表名,同样的字段名。

我想当在A服务器这张表里加入一条数据时,也把数据更新到B服务器里,使得两台服务器两张表里的数据保持同步并完全一样?

请问有高手知道能告诉我么?
----------------------------------------------------------

方案一,
1,先建立联结服务器
2,建立触发器

方案2,sqlserver的复制功能

对于方案一,转给你些资料:
/********************链接数据库 *******************************/
exec OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=远程ip;User ID=sa;Password=密码'
         ).库名.dbo.存储过程名

select * into 本地库名..表名 from OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=远程ip;User ID=sa;Password=密码'
         ).库名.dbo.表名

insert 本地库名..表名 select * from OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=远程ip;User ID=sa;Password=密码'
         ).库名.dbo.表名

或使用联结服务器:
EXEC sp_addlinkedserver '别名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=远程名;UID=用户;PWD=密码;'
exec sp_addlinkedsrvlogin  @rmtsrvname='别名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密码'
GO
然后你就可以如下:
select * from 别名.库名.dbo.表名
insert 库名.dbo.表名 select * from 别名.库名.dbo.表名
select * into 库名.dbo.新表名 from 别名.库名.dbo.表名
go
触发器的例子:

create trigger ***** on *** for insert
 insert into 你的备份表 select *,'增加','新',getdate() from inserted
create trigger ***** on *** for update
 insert into 你的备份表 select *,'更改','新',getdate() from inserted
 insert into 你的备份表 select *,'更改','旧',getdate() from deleted
create trigger ***** on *** for delete
 insert into 你的备份表 select *,'删除','旧',getdate() from deleted