请教下同步数据(用触发器同步数据或是其他都可以)

豆丁微信公众号
君,已阅读到文档的结尾了呢~~
利用触发器实现数据同步,mysql 触发器同步数据,触发器同步数据,oracle触发器同步数据,数据库同步 触发器,同步rs触发器,同步触发器,同步6脉冲触发器,mysql 触发器 同步,mysql 触发器 同步表
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
利用触发器实现数据同步
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口查看: 11906|回复: 16
用触发器实现两个数据库之间表数据同步
求职 : 认证徽章论坛徽章:33
最近一段时间前单位的同事问我有什么方法可以实现不同数据库之间表数据的同步,起初我告诉他可以用DATAGURAD,STREAM,物化视图等技术手段实现。但他告诉我需要同步数据的表并不多(有3-5张表需要同步)。我就想通过编写触发器实现要更为简单一些。通过几天的努力终于实现。通过一些简单的测试感觉效果还可以,特总结一下奉献给大家。之前论坛里有人问过此类问题,但很多高手都说可以用触发器实现,可是没有给出具体的实现方法。可能他们认为非常easy,呵呵!在这里我帖出实现的具体方法和触发器的代码给当前有此需求的兄弟。将来可能有此需求的兄弟可以将此作为备选方案,参考一下也可以。同时请论坛里的高手多指点,多给出改进意见。如果这篇文章对大家的工作有一定的帮助,那么希望大家能多给于支持。谢谢!我将把大家的支持化作持续、深入学习ORACLE的动力。
现在假设有两个数据库A,B,B库中的备用表需要和A库中的住表同步数据。主表和备用表表名相同(也可以不同),都叫a
1。首先建立在A库所在的机器建立访问B库的网络服务名prod,用NET-MANAGER完成
2。创建PUBLIC DATABASE LINK,先不指定用户名和密码
CREATE PUBLIC DATABASE LINK prod USING 'prod'& && && && && && && & 注意:&&'prod'表示第1步中创建的网络服务名,以sys/system用户创建
3。在需要访问远程数据库用户下创建私有DATABASE LINK(同PUBLIC DATABASE LINK名称相同),要具有CREATE DATABASE LINK权限。指定用户和密码 
CREATE DATABASE LINK prod CONNECT TO scott IDENTIFIED BY tiger&&注意:scott用户必须在B库中存在且指定相应的密码,和这里给出的密码要一致。
4。创建触发器
a表为实验表,表结构为user_id number(3) username varchar2(20)
更新或插入主表记录时和备份表同步数据的触发器,其中表a是主表,a@prod是备份表,即B库中的a表
create or repalce trigger sync_data1
after insert or update on a
merge into a@prod t2
using a t1 on(
t2.user_id=t1.user_id)
when matched then
update set t2.username=t1.username
when not matched then
insert (t2.user_id,t2.username) values(t1.user_id,t1.username)
end sync_data1;
删除主表记录时和备份表同步数据的触发器,其中a是主表,a@prod是备份表,即B库中的a表
create or replace trigger sync_data2
after delete on a
delete from a@prod
where user_id in(
select user_id from a@prod
select user_id from a);
end sync_data2;
create or replace trigger sync_data2
after delete on a
delete from a@prod
where rowid in(
select rowid from a@prod
select rowid from a);
end sync_data2;
经过本人的实验,当对A库中的主表进行更新,插入,删除后B库的备份表能和主表中的数据保持一致。至于具体的环境还要充分分析表结构以及表之间的关系等,这些问题可以和大家一起探讨。有不明白的地方可以给我发站内短消息。最后本人目前很想找1份初级/中级DBA工作,但是由于我之前没有专职DBA工作经历以及以往的技术工作经历不被看好,在找工作过程中被很多人力和技术经理给拒绝了。在这里我帖出自己在ORACLE方面掌握的一些技能,如果论坛里那位兄弟所在的单位或朋友需要ORACLE技术人员,麻烦大家给帮忙推荐一下。待遇方面我要求不高,只希望能给个上手的机会。多年做技术工作的我相信自己有能力把DBA工作做好。在此一并谢过大家了!
熟悉Oracle数据库体系结构,基础扎实
熟悉Oracle Data Guard/RAC等高可用技术的原理,安装和配置
熟悉Oracle的备份与恢复技术(RMAN)
熟悉IBM-AIX/HP-UX操作系统的使用
熟悉Redhat Linux操作系统的使用
熟悉SQL和PL/SQL存储过程、函数、触发器的编写
熟悉主流PC Server(HP/DELL)硬件环境和中低端存储设备
熟悉TCP/IP网络的基本原理和主流厂商设备的基本配置
熟悉应用服务器/Apache/Tomcat/Weblogic/Websphere在Unix/Linux环境中的配置
熟悉查询优化器的相关概念,具备一定的SQL语句调优能力
熟悉Linux/Unix shell脚本,能编写简单的维护脚本
了解MS sql server/Mysql数据库的原理,能进行基本的安装、备份、管理等操作
工作积极主动、为人正直,踏实肯干,善于与他人沟通合作。有良好的自学能力,多年技术工作经历积累下了丰富的IT知识,动手能力强。能快速地学习和吸收新知识并运用到实际工作中。
[ 本帖最后由 aks5201314 于
17:13 编辑 ]
求职 : 认证徽章论坛徽章:33
自己先顶一下!
求职 : 认证徽章论坛徽章:33
希望大家支持!
论坛徽章:2
兄弟你掌握的IT技能这么多,想找份中级dba工作,应该不难的吧?呵呵
求职 : 认证徽章论坛徽章:33
有些个人情况大家还不太了解,若那位puber帮忙推荐,容我详细说明个人情况。
论坛徽章:305
用触发器有两个明显的缺点:
1&&触发时,系统需要进行上下文切换,导致效率低下。
2&&触发器因为是同步执行,这要求后者得随时可用,换句话说,若源系统可用,目标系统不可用,
& &将导致系统不可用及数据不一致。
MV则没这缺点,所以,MV 也是个很好的选择。
求职 : 认证徽章论坛徽章:33
多谢楼上指点
求职 : 认证徽章论坛徽章:33
招聘 : 认证徽章论坛徽章:20
楼主其实还挺有实力&&找个好工作应该不是问题的 继续努力
论坛徽章:37
以你的能力,找份dba工作应该不难啊!
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号当前位置: →
→ 数据库结构同步之通过DDL触发器记录数据库结构的变更
数据库结构同步之通过DDL触发器记录数据库结构的变更
& 作者及来源: liulun - 博客园 &
&收藏到→_→:
摘要: 数据库结构同步之通过DDL触发器记录数据库结构的变更
"数据库结构同步之通过DDL触发器记录数据库结构的变更"::
在开发多人协作的项目的时候,一般要同时使用多个
常见的情况有:
一个开发者用的 (开发库),
一个测试者用的 (测试库),
一个正式开放给客户的 (正式库),
那么这三个 之间的的同步就将成为一个问题
如:当开发者a在&开发库&中添加了一个表,开发者b修改了一个表...
这些 结构的变更势必要同步到&测试库&和&正式库&中去
但肉手记录 结构变更的方式即麻烦由容易出错...
如之奈何?
思考过程:
之前曾在 达人邹建那里看到一篇帖子(找不到了),
但试过之后发现,很多情况都会出异常...就放弃了
后来在wcf达人artech这里看到一篇文章
追踪记录每笔业务操作数据改变的利器&&sqlcdc
此文章是针对 表记录curd操作的日志
并非表结构
后来我在文章评论中向artech请教了我的问题,
得到了ddl trigger的答案&
记下来并分享
代码及解释:
--创建记录 结构变更的表
create table logtable (db_user nvarchar(200), eventtype nvarchar(200), sqlstring nvarchar(2000),changetime datetime);
create trigger logtrigger
for drop_table, alter_table ,create_table
declare @data xml
set @data = eventdata()
insert logtable
(db_user, eventtype, sqlstring,changetime)
(convert(nvarchar(100), current_user),
@data.value('(/event_instance/eventtype)[1]', 'nvarchar(100)'),
@data.value('(/event_instance/tsqlcommand)[1]', 'nvarchar(2000)'),
&和普通的创建的过程类似
就说其中的两个地方吧
1.for drop_table, alter_table ,create_table  这里只记录了这几个事件
  如果记录更多的事件请使用
  for ddl_ _level_events
  了解更多的事件情况请访问
  http://msdn.microsoft.com/en-us/library/ms186456(sql.90).aspx
2.set @data = eventdata()  eventdata()是 自身的方法
  返回有关服此文来自: 马开东博客
转载请注明出处 网址:
务器或 事件的信息(xml格式)  
  只有直接在 ddl 或登录内部引用 eventdata 时,eventdata 才会返回数据。
  如果 eventdata 由其他例程调用(即使这些例程由 ddl 或登录进行调用),将返回 null。
  @data.value('(/event_instance/eventtype)[1]
  这是使用xquery检索xml中的数据
  详细的xquery教程请看这里
  http://www.w3school.com.cn/xquery/index.asp
--想删除表logtable必须先删除这个
drop trigger logtrigger
drop table logtable
以上代码均在mssqlserver2008下测试通过
其他 没有测试搜索此文相关文章: 结构同步之通过DDL记录 结构的变更此文来自: 马开东博客
网址: 站长QQ
数据库结构同步之通过DDL触发器记录数据库结构的变更_博客园相关文章
博客园_总排行榜
博客园_最新
博客园_月排行榜
博客园_周排行榜
博客园_日排行榜}

我要回帖

更多关于 数据库触发器作用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信