以前IMP的时候,是实现自己手动删除,在导入,这个IMPDP能实现自动删除后再导入吗?
另外,有没有SQL能自动循环所有表,把数据删除?
不用删除,可以自动覆盖掉了。如下参考:
1.有两种导入方法:IMP和impdp。
2.IMP导入的时候:如果已经存在此表,会告诉你无法创建此表,因为表已经存在。同时使用参数full=yignore=y那就是全部导入,把dmp里的所有数据插入到表里面。
3.数据备份,使用命令:expuser/userfile=d:\user.dmpfull=y恢复时,使用命令:impuser/userFILE=d:\user.dmpfromuser=usertouser=userfull=yignore=y。
4.IMPDP导入的时候:用参数table_exists_action=replace进行删除后覆盖table_exists_action选项。
5.数据备份,使用命令:expdpuser/userdirectory=dump_dirdumpfile=schema.dmp
logfile=schema.logschemas=userjob_name=exp_user_schema恢复时。
注意事项:
Oracleimpdp是一个标准版本和企业版本的问题。标准版本中不支持某些函数。最好用相同的版本重新安装企业版本,包括导入较小的版本。如果必须使用当前库,则可以在导出时添加version=11.2.0。如果未能将其更改为10.2.0,请重试。
请问一下,下面这段话是什么意思?
应该用
TABLE_EXISTS_ACTION
Action to take if imported object already exists.
Valid keywords: (SKIP), APPEND, REPLACE and TRUNCATE.
就是说,在你的impdp命令后面加参数TABLE_EXISTS_ACTION=TRUNCATE 就可以删除目标库里的表的原来的数据再从dump文件里导入新的数据。其他的选项的意思,看
http://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_import.htm
谢谢了,我现在有个问题,想咨询一下,添麻烦了,不好意思。
impdp命令后面加参数TABLE_EXISTS_ACTION=TRUNCATE ,这个明白了,
但我现在有这么一个问题,比如说备份的时候是3个表,A,B,C,其中,A,B表是全表备份,C表是有条件备份。
导入的时候,我光想把A和B表存在的数据删除,C表的既存数据不删和这一次的累积,如果这样的话?加上上面那个参数实现不了吧?
可以分2次导入吧,每次导不同的表 impdp应该还有2个参数叫 include 和 exclude,你可以查下
追问感谢你的回答,
还想了解一下,expdp,带条件备份表的时候,不支持关联查询吗?比如像下边这样的SQL
,要备份的表名假设为AAA
query=“where exsits (select 1 from (select a from BBB) tmp where AAA.a = tmp.a )”
另外,比如说EXPDP的时候,指定tables=A,IMPDP的时候,指定tables=B,表A和B表结构一样,可以吗?
又添麻烦了,不好意思哈~
第一个问题, 我没试过,不知道,没听说不行
第二个,好像不可以。impdp有remap选项,可以把用户A的数据导入到用户B里面,但是没有听说可以remap一个表的。
追问超过3条要扣分的,你另开一个问题问问吧