exp全库导出
su - oracle
exp 'user/"123456"@127.0.0.1:1521/orcl' full=y file=/home/oracle/orcl_full.dmp
但是用exp常规导出会很慢,于是有加入Direct=y参数,但是可能会有异常,今天同事分享了一个案例
数据库版本是Oracle 11G,使用exp导出数据,然后imp导入。
IMP-00019: row rejected due to oracle error 1400
IMP-00003: ORACLE error 1400 encountered
ORA-01400: cannot insert NULL into ("HSVSDATA"."TFJYGH"."EN_LXSDS")
从生产导一个属主到测试,使用了Direct=y导出,结果导入报如上错误,原因是如下:
原因是11g的一个新特性:为了改善性能,对表新增非空且有缺省值列的时候,ORACLE不会全表更新,只是改了数据字典,这种情况下,exp如果加了参数direct=y导致了丢失了字段值.不会导出字段的缺省值,所以报错了。
11g下的exp 还是别加direct=y 了。
imp全库导入
用imp导入数据使用ignore=y参数的话,如果表存在,那么会追加数据到表中。
如果不限制ignore参数的话,系统默认是ignore=n,当遇到已经存在的表导入数据时会提示对象已存在的错误。我们要根据实际的需求来决定是否使用这个参数,有些人为了让导入的过程不出现错误而使用这个参数,我认为没有必要,这个参数要谨慎使用,否则数据库中多了很多重复数据都不知道什么原因。