日期:2014-05-17  浏览次数:20981 次

dblink同步远程带有blob字段的表
目前在做一个功能:数据库双机热备份,采用dblink和触发器来实现两个数据库同步,但是在同步插入操作主数据库中一张带有blob字段表的时候出现了问题,oracle的触发器不可以直接访问远程表的blob字段,会报错:无法使用从远程表选择的 lob 定位器。
解决方法如下:1,在本地数据库创建一个结构和含有blob字段表相同的临时表。
  2,把新插入的数据插入到临时表中。
  3,再把临时表的数据用insert into remoteTable@dblink_name select * from temp的形式插入到远程数据库中

示例代码如下:
  CREATE GLOBAL TEMPORARY TABLE temp as select * from test(含有blob字段,字段名为file) where 1=2;
  触发器:
  create or replace trigger test_trigger
  after insert on test
  for each row
  begin
  if inserting then
  insert into temp (id,file,name) values (:new.id,:new.file,:new.name);
  insert into test@dblink_name select * from temp(只能用select * 的方式来插入,不然会报错)
where id=:new.id;
end if;
end;


------解决方案--------------------
嗯,触发器里面不要select * from temp; 方式不太好,万一temp表数据量大的话,会严重影响数据库的性能的。
------解决方案--------------------
厉害哦,学习了!居然可以这样的!
------解决方案--------------------
挺好的思路。加个精华。
------解决方案--------------------
支持你哈,是个好文章
------解决方案--------------------
恩,学习了。
这思想可以。

------解决方案--------------------
新思路,学习学习。
blob字段备份一直不方便
------解决方案--------------------
帮顶!!!!!!!!!!!!!!!!!!!!!!!!!!!
------解决方案--------------------
没试过,试试吧!!!!
------解决方案--------------------
再把临时表的数据用insert into remoteTable@dblink_name select * from temp的形式插入到远程数据库中 
这个怎么样
------解决方案--------------------
试试看.........
------解决方案--------------------
强悍!!!!!!!!!!!!!!!!!!!!!!!!1
------解决方案--------------------
jianshi le!!!
------解决方案--------------------
1 hao ,very good, good luck to you
------解决方案--------------------
顶,我曾经也有这样的困惑,有时间试一下
------解决方案--------------------
ding a ding
------解决方案--------------------
过年了,来看看,新年快乐!
------解决方案--------------------
新年后第一天上班,过来看看,学习了,拜个晚年
------解决方案--------------------
新思路,学习学习。 
新年快乐!
------解决方案--------------------
mark一下,咋都有人上班了呀!
------解决方案--------------------
探讨
引用:嗯,触发器里面不要select * from temp; 方式不太好,万一temp表数据量大的话,会严重影响数据库的性能的。

temp表只是个临时表,在commit以后里边数据会被清空掉(测试过了),所以不会出现这种情况,它相当于一个临时中转站