10g和之前,只有exp和imp,11g以后,就推荐使用expdp和impdp来导出、还原了。
但是,exp和imp还是有一些不可替代的优势,就是它们能够在客户端运行,而expdp和impdp只能在服务器端运行。
不过,客户端机器上要安装相应的oracle客户端才行。好比说,你的机器是一个客户端,只装了oracle 10g的客户端,而服务器的oralce是12c的,那么你在你机器上运行exp、imp来操作服务器这个12c数据库,是不行的,一定要在你机器上装12c客户端才行。
另外,用exp和imp可以备份、还原指定表(expdp、impdp应该也可以?),还原的时候,要求目标库要存在相应的表,没有的话,它会报错,不会替你自动创建。
但是,如果有的话,它是自动替你清掉目前的数据,将自己的数据插进去的。没有什么append的选项。impdp有。这时候,可以灵活变通一下:
在目标库中,将目标表的数据select into另一张新表,保存下来,然后imp;完了之后再从新表中将旧数据select into回来。
2017.07.26修改
以上结论不正确,不知道我当时是怎么得出这个结论的。事实上,用imp还原指定表,目标库中不一定要存在相应表,没有该表的话,系统会自动创建一个;相反,如果存在该表,需要指定参数ignore=Y,否则无法导入。所以,通常为了省事,都是将原表先删除再导入。
也许这是12C下的imp特有的?
相关文章:
expdp与impdp导出导入指定表