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

数据库A中,如何在pl/sql过程里操作数据库B中的表?
公司做数据库的整合迁移,   需要写pl/sql存储过程来将旧数据库B中的表移植到新的数据库A里。
1.   我想,应该是在新的数据库A里写存储过程,查询旧数据库B里的表。请问应该如何做啊,语法是怎样的?

2.   有谁懂数据库的整合迁移,例如,将原有的2个数据库,整合到一个数据库中。网上查到的ETL内容多是泛泛的谈理论。有谁实际做过,指点一下吧,或者有什么学习资料分享一下也好^_^

先谢谢了   ^_^

------解决方案--------------------
查另一个数据库可以使用dblink,蛮简单的,试试看
------解决方案--------------------
迁移是小问题,比较麻烦的是整合,所谓的整合,一般发生在原来存在旧系统和大量的旧数据,后来开发的新系统,对象结构发生了变化但是原来的旧对象中的部分或全部数据还是要保留,一般可以考虑下面思路:
1、建立一个空的整合目标库C,分别和新旧环境建立数据链接,这里假设旧库为A,新库为B,分别建立数据链接C_TO_A,C_TO_B;
2、通过对比新库与旧库的数据结构差异,确定需要整合的对象(可以通过对比两个库的all_tab_columns表中各个表的各个字段的差异获得字段差异情况),并将需要直接从旧库中移植的表名列表导出;
3、通过exp myuser/password@A file=myfile.dmp tables=table1,table2,... 导出需要直接移植的表和视图等对象,导入到整合库C中;
4、如果有在新库中新增旧库中没有的对象,则也用3中的命令导出导入到整合目标库;
5、对于结构发生更改或只需要导部分数据的表,建立一个sql脚本,例如某个表结构以B库中结构为准但要导入A库中最近一年的数据可以这么写:
create table table1 as select * from table1@C_TO_B where 1 > 2; --只建结构不导数据;
insert into table1(col1,col2,...) select col1,col2,... from table1@C_TO_B where col_date > sysdate - 365;
(如果字段很多,挨个敲很麻烦的话,字段列表可以直接用pl/sql通过all_tab_columns表用sql语句直接生成)
6、对于需要修改当前值到制定值的squence以及其他特殊对象,人工建立如下sql集:
drop sequence myseq_1;
create sequence myseq_1 ...;
7、5和6中的sql集在挺机整合前不要执行,一定要停机整合时再执行,以保证数据的及时和完整性,成功执行后,必须检查是否有未成功编译的视图、过程、包等用户对象,重新编译未通过的对象;
8、数据整合完毕后,进行基本业务测试,验证整合是否成功
9、验证无误后,可以考虑将整合完成的数据导出后再导入到各目标数据库,注意,由于整合时有很多ddl和dml操作发生会产生很多log,为最大限度的提高目标库效率,不推荐直接把目标库C作为最终目标库,建议整合完成后进行一次导入导出;

总之,数据整合是跟数据对比连在一起的,虽然没有太高的复杂度,但数据量大了会非常容易出错,不管采用什么方案,必须仔细编制各步骤脚本并多次测试,而且一定要考虑脚本效率,必须进行整合时间测试,合理优化整合方案在有限的停机整合时间内实现完美整合,中间不要怕麻烦,同时也要懂得利用sql脚本和word、excel、批处理等工具尽量去简化操作,大数据量迁移时由于不能保证人能紧盯每个步骤,一定要在脚本中定义日志输出机制,以便事后复核是否有步骤因网络等异常造成失败并尽快采取补救措施
------解决方案--------------------
up
------解决方案--------------------
厉害