建立 SQLSERVER 触发器 在一个服务器上的数据库中插入数据时同时插入到另一个服务器上的数据库的表中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建立 SQLSERVER 触发器 在一个服务器上的数据库中插入数据时同时插入到另一个服务器上的数据库的表中相关的知识,希望对你有一定的参考价值。

建立SQL SERVER 触发器 在一台服务器上的数据库的表中插入数据时触发触发器将插入的数据插入到另一台服务器上面的数据库中,第一台服务器192.5.1.9,数据库NSDL(sql server 2000);第二台服务器192.5.1.32,数据库TESTDatabase(sql server 2008)。急需大神支教!要SQL语句,之前做的出错了

这个有个教程的连接;你可以参考下。http://www.cnblogs.com/w-y-f/archive/2012/05/07/2488474.html 参考技术A 远程链接服务器不允许省略架构,把..改成.dbo.追问

sp_addlinkedserver 'XIANGDONGYUN\SA'
这句SQL语句我是应该在那一个服务器上面执行?当我将插入语句放在不同的服务上面的时候就不行了,我把这句话在’XIANGDONGYUN\SA‘服务器上面执行了一次,然后直接在这个服务器上面执行了插入语句才可以,这是为什么?

追答

额。。你不会建链接服务器啊~

exec sp_addlinkedserver   '别名', '', 'SQLOLEDB', 'ip'
exec sp_addlinkedsrvlogin  '别名', 'false',null, '账号', '密码'

这个当然是在其他服务器上执行了

Etl工具将sqlserver数据同步到oracle设计说明

参考技术A

软件说明



通过etl工具定时将SqlServer指定的表数据同步到oracle数据库

在数据库建立增删改的触发器。触发器将变更放到临时表里。

通过etl工具读取临时表同步给oracle

优点:比较实时
缺点:影响到业务系统,因为需要在业务系统建立触发器


实例说明:

例如在sqlserver有一张用户表(sys_user)需定时同步oracle数据库的用户表,

包括新增、删除、修改同步

给同步的表建三类触发器:
insert触发器:向表中插入数据时被触发;
update触发器:修改表中数据时被触发;
delete触发器:从表中删除数据时被触发。


以sqlserver的用户表举例,

Sqlserver的sys_user表,有两个字段id,name

具体流程:

以新增数据举例

Ø 一、在sqlserver新建触发器trigger_sysuser_insert

if (object_id(\'trigger_sysuser_insert\') is not null)

drop trigger trigger_sysuser_insert

go

create trigger trigger_sysuser_insert

on sys_user --表名

for insert --插入后触发

--instead of insert --插入前触发,使用插入前触发时,不执行默认插入

as


--开始执行逻辑

declare @id int, @name varchar(20);

select @id = id, @name = name from sys_user; -------------- inserted 存放了当前插入的值

--select @name,@age


---创建临时表

if not exists (select * from sysobjects where id = object_id(\'##sys_user_insert\')

and OBJECTPROPERTY(id, \'IsUserTable\') = 1)

create table ##sys_user_insert

(

id int,

name varchar(32)

);


insert into ##sys_user_insert (id,name) values(@id,@name);

go



在sys_user新增数据时会被触发,将新增的数据加入临时表##sys_user_insert,此时

的临时表 ##sys_user_insert会增加一条记录


Ø 二、配置elt流程



节点1 从临时表读取数据,写入数据流

节点2 从数据流获取数据写入oracle

节点3 从sqlserver的临时表删除已经被同步的记录


Ø 三、建立作业调度

设置调度周期


适用增量数据同步

在要同步的源表里有时间戳字段,每当数据发生新增,时间戳会记录发生变化的时间,etl工具根据时间范围定时同步数据

优点:基本不影响业务系统
缺点:要求源表必须有时间戳这一列,适用增量场景,修改、删除不太适用

定时清空oracle数据源,将sqlserver的数据全盘拷贝到oracle数据源。一般用于数据量不大,实时性要求不高的场景。

优点:基本不影响业务系统,开发、部署都很简单
缺点:效率低


Etl流程

结论

准能现场数据同步,涉及增、删、改的同步,比较适用触发器的方式进行数据同步,但触发器仍会存在失效的情况,若现场有数据质量系统,定期数据稽核,查缺补漏,保证两边数据库的一致性;

以上是关于建立 SQLSERVER 触发器 在一个服务器上的数据库中插入数据时同时插入到另一个服务器上的数据库的表中的主要内容,如果未能解决你的问题,请参考以下文章

SQL server 建立的触发器子查询返回值不唯一,需要用多个返回值如何操作

sqlserver触发器使用

SQLServer 触发器

sqlserver怎么把服务器上的数据库备份到本地,不是局域网的服务器?

怎样访问公网上的sqlserver

Etl工具将sqlserver数据同步到oracle设计说明