
这个其实最好是做stream,这样可以保证同步更新。但是如果为了一张表做stream看起来又有些不那么值当。
dblink无法远程提交,我只能勉强提出一个方案供参考。
首先数据库AB间互相建立dblink;也就是两个dblink(A到B,B到A)
另外A数据库连接B数据库,所用的B数据库的用户是一个特殊的用户,除了这个dblink以外,其他的地方根本用不到的。
B到A的触发器则只需要读取权限就可以了。
在数据库A上建立触发器,after insert后触发,触发的内容是利用dblink登陆B数据库,登陆后随便查询个什么,都可以然后退出登陆。(直接退出也可以,主要是怕数据库记录不到登陆,登陆触发器有时似乎不那么好用,如果实在不好用可以在这个特殊用户 建立一张表,然后每次登陆都drop这张表,用drop触发器,这个没问题)
B数据库建立一个登陆触发器(或drop触发器),只要那个特殊用户登陆,那么就启动,就是查询A数据库的表a,然后更新表b,然后提交。如果是drop或create触发器,别忘了再重新create和drop,不然表会越来越多或者无表drop。
你的那个方法是复制表的结构用的。需要粘贴在查询分析器里。粘出来是建表的sql语句
新库中建好结构一样的表格后在查询分析器执行
select into bnewtable from aoldtable
B数据库存在表
use B
go
insert into tablename
select from Aschematablename
B数据库不存在表,用下面语句就省得建表了
use B
go
select into tablename
from Aschematablename
schema系统默认的是dbo,可以根据自己的需要做修改
建立一个临时表,有两列,一列用来记录在A里的主键值,另一列记录在B里的主键值,然后停止主外键关系,导入数据,根据临时表的记录,更新级联表里的外键值=新的主键值。
举个例子:
A:主键1,2,3,6
B:主键1,3,5
主键表数据合并后,B的主键是1,3,5,6(A的2),7(A的6)
临时表记录的是(2,6)和(6,7)两条记录
然后更新级联表级联字段,=2的更新为6,=6的更新为7
最后再加上主外键关系。
如果有多个有主键表,每个表都要做这么一遍,记得新导入一个主键表时,临时表要清空。
或者,如果能在B的表先去掉主键自增,然后把A的主键表数据原样导入B,此时B的主键表里和A的主键编号就是一样的了,再导入级联表,然后恢复主键自增就更好了。不过我不会ACCESS,不知道去掉主键自增能不能做得到。第一个办法的原理应该是可行的,放在任何一种库上都行。
insert into Bb(col1,col2,,coln)
select col1,col2,,coln
from Aa
where
条件就是要确定你要的那条记录
以上就是关于Oracle 数据库A中表a的数据如何“实时”更新到数据库B中表b中全部的内容,包括:Oracle 数据库A中表a的数据如何“实时”更新到数据库B中表b中、在SQL的两个数据库里,我想把数据库A里的一张表复制到数据库B里,如何 *** 作、如何将A数据库内的表复制到B数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)