DBLink 的作用是在局域网内,通过一台服务器上面的数据库访问另外一台服务器上面数据库的功能。
下面简单的介绍DBLink的配置:
服务器A:IP 192168110, 数据库实例名:orcl 数据库登录:test/test
服务器B:IP 19216811, 数据库实例名:orcl 数据库登录:user/user
在A服务器上的数据库可以访问服务器B的数据库时就需要用到dblink
首先打开plsql,选择到DbLink
有点点击new,进入编辑界面,分别输入dblink的名称,需要链接到另外一个数据库的用户名、密码、实例名等信息。填写核对无误后点击左下角的apply,进行保存。这样你的第一个dblink就创建好了
当然还可以直接用语句创建dblink。create public database link MyFirstDblink connect to user identified by "123456" USING '19216811/orcl'
语句创建好后,选中这条语句,点击执行按钮,或者F8快捷键保存。
这时候就可以使用查询语句啦,在表名称后面加@字符,便会自动出现你添加的DBLINK名称
当然还可以使用更新、删除语句啦。是不是很简单呢,有了dblink *** 作别人的数据库就更简单啦
分类: 电脑/网络 >> 软件
问题描述:
我在ms-sql中有db-a库(有表aaa),db-b库(有表bbb),db-c库(有表ccc)
表aaa表bbb表ccc中都有id字段,三表中另外分别有(aaa,bbb,ccc)3个字段值要根据id保持一致,
当db-a库(有表aaa)的aaa字段中有一个记录修改能自动触发修改另两个库中表bbb表ccc中对应字段bbb,ccc值
===================================下面例子我看不懂
CREATE trigger [数据库Atr_user] on [user]
for update,insert,delete
as
alter table 数据库B[user] DISABLE TRIGGER [数据库Btr_user]
-----------------------------------
if not exists (select from deleted) --插入
insert 数据库B[user](username,userpass,landtime) select username,password,lastlogin from inserted
else if not exists (select from inserted)--删除
delete 数据库B[user] where id in (select userid from deleted)
else--更新
update [user]
set
[user]username=iusername,
[user]userpass=ipassword
from 数据库B[user] as [user],
inserted as i
where [user]id=iuserid
alter table 数据库B[user] ENABLE TRIGGER [数据库Btr_user]
解析:
什么地方不懂
1 不懂触发器原理以及工作过程
2 不懂那个例子
不懂原理跟过程的话baidu一下会有很多,随便一本将数据库的书都会提到,不再赘述这个例子可能是有点长,我给你翻译一下吧
==================================
CREATE trigger [数据库Atr_user] on [user]
/ 建立触发器的基本语法 在数据库A的user表建立一个名字tr_user的触发器 /
for update,insert,delete
/监视 修改 插入 删除/
as
alter table 数据库B[user] DISABLE TRIGGER [数据库Btr_user]
/ 修改这个表的时候就不要做触发了,disable掉 /
-----------------------------------
if not exists (select from deleted) --插入
/ 如果deleted表为空,那么 /
insert 数据库B[user](username,userpass,landtime) select username,password,lastlogin from inserted
/ 将inserted表(就是对于触发器来说刚刚 入的 )插入到Buser /
else if not exists (select from inserted)--删除
/ 否则 如果 inserted 为空 /
delete 数据库B[user] where id in (select userid from deleted)
/ 那么删除Buser下id是deleted 中出现的id 这里用了in /
else--更新
update [user]
set
[user]username=iusername,
[user]userpass=ipassword
from 数据库B[user] as [user],
inserted as i
where [user]id=iuserid
/ update就很明显了,凡是updated的都来更新,保持一样就可以了 /
alter table 数据库B[user] ENABLE TRIGGER [数据库Btr_user]
这里用了一个技巧,根据inserted 以及deleted 来判断当前是插入或者删除,然后如果是插入的,那么另一个表删除,删除的另一个表插入更新最简单(可能是用来两个表互相交换数据,跟你的目的不一样)
如果你觉得难以理解,单独来创建三个触发器, insert delete update也行,这样就能减少一些判断比如insert
你可以先删除 bbb ccc里面id in inserted的(为了防止重复),然后再全部insert进去
不知道你为什么要这么做,感觉意义不大明显的冗余啊如果是想保留数据,那么定期添加一个计划任务来用数据传输服务多好 再说备份也是很好用的
希望我理解没有错误
这个啊,你可以使用dts进行 *** 作,很简单的,具体 *** 作方法:
打开企业管理器,在数据库下面找到data
transformation
services
这个,右键,新建一个package
然后先选源数据库
再选目的地,然后是transfrom
data
task。因为不知道你的数据是什么,和你要找数据库那个表里的数据,所以只能这样给你说了,网上很多dts的 *** 作方法,挺简单的。
如果你不是查询数据某个表单数据而是将数据库a整个导入到数据库b,那你就把a备份,然后附加到b。
你这个问题,跟DBLINK没有关系,就算是不用DBLINK在一个数据库里面也有可能会出现这个问题,
出现这个问题原因应该是你的SELECT时间太长了,在这段时间内,有些还没有被查询到的记录在查询执行期间被修改了。
如果可能的话,你可以拆分你的SELECT查询为很多个小的查询,让每个执行时间尽可能的短,把查询的数据保存到变量里,然后执行另一个库的插入 *** 作。
那就爱莫能助啦
怎么在不同数据库之间进行同步数据
数据库A和数据库B是建立在两台独立的数据库服务器上,那么采用dblink方式是一种可行的方式,存在两个数据同步过程:
一、数据库A正常运行的时候需要将数据同步到备用库即数据库B;
二、数据库A不正常的时候启用数据库B,在数据库A恢复正常之前的数据更新都发生在数据库B,那么需要将数据库B的数据同步给数据库A。
第一种方式:前提是数据库A和数据库B本地网是24小时互通的同时对数据同步实时性有比较高的要求,那么可以建立DBLINK,在两个库都建触发器,不管当前在哪个库发生数据更新的时候实时同步数据到目标数据库;
以上就是关于plsql语句如何dblink其他库全部的内容,包括:plsql语句如何dblink其他库、跨库触发器表同步时update数据同步如何实现、怎样用SQL把查询出来的A数据库中的数据转到B数据库中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)