装载远程数据库的海量数据表到本地库

0
远程数据库有一个海量数据表的需要加载到本地数据库,数量500亿左右,有什么快捷的办法?
一开始考虑使用expdp,impdp,看看大家还有没有更简单快捷的办法。
已邀请:
1

老头子 - 专注是唯一的捷径 2015-10-10 回答

几个字段, 表体积多大
 
解决方案:
实在不行试试表空间迁移吧,这个很快,也不会影响远程主机的性能,但是数据未必同步
如果是异步传输也能满足你的需求,那你可以试下表空间迁移。

1.源和目标DB必须是oracle8i以上的版本;
2.源和目标DB必须在相同的硬件和OS平台上;
3.源和目标DB的块尺寸应该一样;
4.目标DB中不能存在与源DB中要迁移的表空间相同名字的表空间;
5.要迁移的表空间应该是个自包含的表空间,即该表空间中的对象不能参考别的表空间中的对象。例如:表空间包含一个索引,该索引所在的表也应该在该表空间中;
6.要迁移的表空间如果包含分区表,则所有分区都必须在该表空间下。

迁移的步骤:
1.检查表空间是否是自包含:
Execute sys.dbms_tts.transport_set_check(‘tablespace_name1,…’,true);
Select * from sys.transport_set_violations;
如果在执行完select后,显示“no rows selected”则表明为自包含表空间。
2.设置表空间为只读
Alter tablespace tablespace_name read only;
3.用EXPORT生成元数据卸出文件
exp file=xx.dmp transport_tablespace=y tablespaces=(tablespace_name,…) constraints=n
4.查询该表空间所对应的数据文件
select file_name,tablespace_name from dba_data_files where tablespace_name='tablespace_name’;
5.复制数据文件到目标DB的相应目录
6.修改表空间为可读写
Alter tablespace tablespace_name read write;
7.用IMPORT导入
imp file=xxx.dmp transport_tablespace=y tablespaces=tablespace_name datafiles=('/path') fromuser=('user_name') touser=('user_name')
其中只有transport_tablespace和datafiles语句是必须提供的。如果没有指定tablespaces或tts_owners,则认为这些关键字的值与卸出文件中的关键字相同。如没有指定fromuser和touser,则oracle将这些对象装入与源DB中拥有这些对象的用户名相同的用户中。目标DB中必须已经存在同名用户。
8.将表空间改为可读写
Alter tablespace tablespace_name read write;

要回复问题请先登录注册