触发器同步

--不同服务器数据库之间的数据操作
--************************************************************************************
1、--创建链接服务器 
exec sp_addlinkedserver   'ITSV'' ''SQLOLEDB''远程服务器名或ip地址 ' 
exec sp_addlinkedsrvlogin  'ITSV''false ',null'用户名''密码' 
exec sp_serveroption 'ITSV','rpc out',true
 
 
2、启动两台服务器的MSDTC服务 
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。
 
3、打开双方的135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。
使用“telnet IP 135”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放
 
 
4、--如要创建触发器   
create   trigger   t_test   on   test   
for   insert,update,delete   
as 
--加上下面两句,否则会提示新事务不能登记到指定事务处理器
set    xact_abort   on  
begin  distributed   tran 
    delete   from   openrowset('sqloledb','xz';'sa';'',test.dbo.test)   
    where   id   in(select   id   from   deleted)   
    insert   into   openrowset('sqloledb','xz';'sa';'',test.dbo.test)   
    select   *   from   inserted   
commit tran
 
--查询示例 
select from ITSV.数据库名.dbo.表名 
 
--导入示例 
select into 表 from ITSV.数据库名.dbo.表名 
 
--以后不再使用时删除链接服务器 

exec sp_dropserver  'ITSV ''droplogins ' 





单击“开始”、“运行”,然后键入 dcomcnfg 以启动“组件服务”管理控制台。

Oracle触发器实现同步更新主要用于在对一个表进行插入、更新或删除操作时,自动将相应的更改同步到另一个表。以下是几种不同场景下的实现方法和示例: ### 插入或更新数据时同步到另一个用户的表 当对 `SCOTT.DEPT` 表进行插入或更新操作时,将数据同步到 `test.DEPT` 表: ```sql CREATE OR REPLACE TRIGGER dept_insert_update AFTER update or insert on SCOTT.DEPT for each row DECLARE myname varchar2 ( 22 ); begin case when inserting then insert into test.DEPT (DEPTNO,DNAME,LOC) VALUES(:new.DEPTNO,:new.DNAME,:new.LOC); when updating then update test.DEPT SET DNAME = :new.DNAME, LOC = :new.LOC WHERE DEPTNO = :new.DEPTNO; end case; end; ``` 此触发器使用 `case` 语句区分插入和更新操作。插入时,将新行数据插入到目标表;更新时,根据 `DEPTNO` 更新目标表相应行的数据 [^1]。 ### 更新一张表时同步更新另一张表 当对 `t1` 表进行更新操作时,同步更新 `t2` 表: ```sql create or replace trigger test1 after update on t1 for each row declare PRAGMA AUTONOMOUS_TRANSACTION; begin update t2 set t2.name = (select t1.name from t1 where t2.id = t1.id); COMMIT; end; ``` 该触发器使用自治事务,在 `t1` 表更新后,通过子查询从 `t1` 表获取最新的 `name` 值并更新到 `t2` 表 [^2]。 ### 插入、更新或删除数据时同步到另一张表 当对 `user_info` 表进行插入、更新或删除操作时,同步更新 `User_info_temp` 表: ```sql create or replace trigger UserToTemp after insert or update or delete on user_info for each row declare integrity_error exception; errno integer; errmsg char(200); dummy integer; found boolean; begin if inserting then insert into User_info_temp(ID,UserName,PassWord,CreateDate,Status) values(:NEW.ID,:NEW.UserName,:NEW.PassWord,:new.CreateDate,:NEW.Status); elsif updating then update User_info_temp set ID=:NEW.ID,UserName=:NEW.UserName,PassWord=:NEW.PassWord,Status=:NEW.Status where id=:OLD.id; elsif deleting then delete from User_info_temp where id=:OLD.id; end if; exception when integrity_error then raise_application_error(errno, errmsg); end; ``` 此触发器使用 `if-elsif` 语句区分插入、更新和删除操作,分别执行相应的同步操作。同时,添加了异常处理,当出现完整性错误时抛出应用程序错误 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值