oracle数据库链接及数据合并的问题?

这两天弄电子学籍的数据库比较头疼,oracle方面不太熟悉只能一点点摸索了,要学的东西太多了。

目前学籍的数据库设计虽然是临时决定稍带拼凑之嫌,不过我觉得还是比较合理的。以市州为分类用4台oracle作为分支数据库,用一台oracle做省级合并的数据库,由于学籍的数据操作主要集中在市州层面,这样的分布式比集中式更能加快处理速度,将来如果有需要数据下放也比较好操作。

但是,面临的主要问题也是明显的,部分跨库操作和数据合并的有效性就是两个问题。

今天基本解决的跨库操作的问题,通过dblink。

首先保证所有的oracle能够识别其他的host,编辑/etc/hosts做命名和IP的对应;

编辑所有的tnsname.ora,保证所有的oracle均能够通过统一的命名访问其他的oracle,这里是oracle3、oracle4、oracle5、oracle6,一台oracle做为数据整合,命名为oracle1。

在所有的oracle上创建DATABASE LINK,为了方面所有的当前数据库操用户的用户名和密码保持一致。

CREATE PUBLIC DATABASE LINK “ORACLE3”  CONNECT TO “user001”
   IDENTIFIED BY “xxxx”  
   USING 'ORACLE3';

CREATE PUBLIC DATABASE LINK “ORACLE4”  CONNECT TO “user001”
   IDENTIFIED BY “xxxx”  
   USING 'ORACLE4';

CREATE PUBLIC DATABASE LINK “ORACLE5”  CONNECT TO “user001”
   IDENTIFIED BY “xxxx”  
   USING 'ORACLE5';

CREATE PUBLIC DATABASE LINK “ORACLE6”  CONNECT TO “user001”
   IDENTIFIED BY “xxxx”  
   USING 'ORACLE6';

这样在某一台数据库上都能够操作其他的数据库,例如

如果我们在oracle3上要查询oracle4上的一个表:
oracle3 sql> select id,name from table1@oracle4;

做insert或者uptate操作类似

但是做数据合并还是存在问题,开始想用快照方式来做,但是4个市州级oracle的数据修改如何合并到oracle1的一张表中?oracle了解太少了。。

一个不伦不类的临时解决方法就是,在4台市州的oracle数据库上做一个crontab,定期用
insert into table1@oracle1(id,name) select id,name from table1;
来从本地将数据插入oracle1的表中,在表中加一个识别字段,只选取新插入或者update的数据。

这样解决还是觉得相当麻烦,表结构要修改,前端脚本也要修改,唉,是个问题。。。

发表评论