您的位置:首页 > 数据库 > Oracle

Oracle IMPDP/EXPDP使用小结

2011-12-10 21:36 567 查看
数据泵主要解决的问题

比IMP/EXP更加灵活,支持多种元数据过滤策略,多种导入/导出模式,如将A库B用户导到C库中D用户,则只需要REMAP_SCHEMA即可
空表问题,Oracle11G新的表并且表中无数据也未使用过则表的SEGMENT空间是不会分配的,这样在EXP时表是导不出来的,这个问题的解决就是给表分配SEGMENT或使用EXPDP了

SELECT 'ALTER TABLE ' || TABLE_NAME || ' ALLOCATE EXTENT;' FROM USER_TABLES WHERE NUM_ROWS=0,将查询结果导出成sql脚本执行即可

ALTER SYSTEM SET DEFERRED_SEGMENT_CREATION=FALSE SCOPE=BOTH

效率问题,普通情况下EXPDP/IMPDP要比EXP/IMP效率要高

导出指定的表的相关内容
EXPDP NSTCSA224/642506@NSDEV DIRECTORY=EXPDP_DIR DUMPFILE=NSTCSA224_TABLE.DMP TABLES=(GP_CELL_VALUES,GP_POST,IMES_ATTENTIONCLIENT) LOGFILE=NSTCSA224_TABLE.LOG VERSION=10.2.0.1
正常导入
IMPDP NSTCSA224/642506@NSDEV DIRECTORY=IMPDP_DIR DUMPFILE=NSTCSA224_TABLE.DMP LOGFILE='SMSDATA_TABLE.LOG' version=10.2.0.1
分析数据文件生成SQL文件,不真正导入到数据库
IMPDP NSTCSA224/642506@NSDEV DIRECTORY=IMPDP_DIR DUMPFILE=NSTCSA224_TABLE.DMP SQLFILE=SQLFILE.SQL
VERSION=10.2.0.1


通过DB_LINK远程使用数据泵
创建DB_LINK




执行导出

EXPDP NSTCSA224/642506@NSDEV DIRECTORY=IMPDP_DIR NETWORK_LINK=DB_LINK DUMPFILE=NSTCSA224_FB_TABLES.DMP LOGFILE=NSTCSA224_FB.LOG VERSION=11.1

注意,如果客户端数据泵与服务器的版本不一致将不能正常工作




重复导入时会使用到的TABLE_EXISTS_ACTION参数
这里TABLE_EXISTS_ACTION表示当前库中已经有某张表,然后导入的时候我们可以对已有的表做处理,如跳过、删除重建、追加数据等,更复杂些的导入/导出需求可以结合TABLE_EXISTS_ACTION、INCLUDE、EXCLUDE、CONTENT、QUERY等多个参数完成(可以查阅Oracle文档)

IMPDP NSTCSA224/642506@NSDEV DIRECTORY=IMPDP_DIR DUMPFILE=NSTCSA224.DMP LOGFILE=NSTCSA224.LOG TABLE_EXISTS_ACTION=SKIP
数据泵版本兼容问题
IMPDP/EXPDP是在Oracle 10加入的工具,该工具默认不向下兼容(即使用EXPDP导出的Oracle11G是不能被Oracle10G导入的),这时就需要EXPDP时加入VERSION标记。
正常情况下在源数据库上使用EXPDP命令加上VERSION标记后导出的数据库文件可正常被指定版本的IMPDP识别并导入,但在实际实践的过程中发现导出时加上相应版本号在有些情况下也并未能正常的再被版本指定的IMPDP导入,在这里我们遇到的问题就要是从Oracle
11.2.0.1上抽取版本为11.2.0.1之前的版本如10.2.0.1\11.1.0.2甚至是Oracle
9版本,但导出的数据文件并不能被低版本的Oracle导入。
此种情况下的一种解决办法



涉及到的一些命令

IMPDP USER_01/USER_01@ORCL DIRECTORY=IMPDP_DIR DUMPFILE=TEST_01.DMP LOGFILE=TEST_01.LOG

IMPDP USER_01/USER_01@ORCL DIRECTORY=IMPDP_DIR DUMPFILE=TEST_01.DMP SQLFILE=TEST_01.SQL TABLES=(A,B,C,D,E)
SQLPLUS中执行放到C:\盘下的某个SQL脚本



IMPDP USER_01/USER_01@ORCL DIRECTORY=IMPDP_DIR DUMPFILE=TEST_01.DMP LOGFILE=TEST_01.LOG TABLE_EXISTS_ACTION=SKIP
使用USER_01登陆当前数据库,查看数据对象与原始库对象是否一致,如表数量是否相等

SELECT COUNT(1) FROM USER_TABLES

重新编译函数\过程对象

利用第三方工具如PL/SQL Developer
手工

查:SELECT OBJECT_TYPE,COUNT(1) FROM USER_OBJECTS
WHERE STATUS='INVALID' GROUP BY OBJECT_TYPE
构建重新编译语句:SELECT 'ALTER ' || OBJECT_TYPE || ' ' ||
OBJECT_NAME || ' COMPILE;' FROM USER_OBJECTS WHERE STATUS='INVALID'
存储成SQL脚本然后执行

参考资源

Oracle®Database
Utilities11G Release 2(11.2)

baidu/google
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: