plsql语句如何dblink其他库

plsql语句如何dblink其他库,第1张

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数据库中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10158405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存