有时需要复制的数据库比较大,复制太慢,或容易出错。
数据库小,简单的 就没这么复杂了,直接导出dmp或用工具都可以。这篇是针对比较大,选择性复制,且复制总是失败的情况。
方法如下。
工具 sqldeveloper.
思路:先复制表和数据(选择性复制表数据),再复制视图,触发器序列等。以免触发器序列等对复制数据时造成干扰,导致复制失败。
1.
例:从A复制到B
建立源数据库连接 A
建立目标连接B
2.点击工具:数据库复制。
在此之前可以先在源数据库上查询下数据量比较大的表,
select segment_name, round(bytes/1024/1024/1024,3) g,segment_type
from user_segments
where segment_type = 'TABLE' or segment_type = 'TABLE PARTITION' order by g desc
,或者自己知道哪些表大,没有必要copy,心中有数就行
3.
选择好A , 和 B 连接,
点击下一步
4.
只选择表,其它全部取消掉。
尤其是触发器和序列不要选,以免后边复制数据的时候 生成新的id(造成跟源数据id不一致)等等。
点击下一步。
5.这一步是复制上一步选择的项,表结构需要传输的数据量很小,可以直接下一步,当然也可以按名称模糊搜索选择性复制。
6.指定数据。根据前边sql查到的结果,结合实际情况可以把一些不想要的数据表排除掉。对象where字句可以指定复制符合where语句的数据。
7.确认一下源和目标数据库有没有选错,然后下 一步。直到复制完成(进度框最好不要点后台运行),中间若出是否继续提示框,一般直接选择是。
8.以上是第一大步。
下边复制剩余的DDL.
重复第一步,将复制数据选项去掉
9.选择除表以外的选项。数据库连接可能会通过触发器等的调用对链接目标数据库有影响,需小心,或复制下来后,处理下。
然后直接下一步直到最后复制完成。
注意事项:
1.源和目标连接不要搞反了。
2.复制数据过程中不要点后台运行,再弹出的进度框里可以查看进度。有的表复制特别慢,或复制不下来,那就要重新复制 在6步的时候 要将其排除除掉或特殊处理下。 (第一步的查询表大小的sql语句,基本可用。但有些表依然复制太慢,具体原因没细究。)