欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle expdp/impdp使用

程序员文章站 2024-03-13 16:48:21
...

使用前需要确定导入导出的文件路径,oracle通过directory来识别系统上的文件路径。

1.查看有哪些目錄可供使用

SQL> select * from dba_directories;
OWNER   DIRECTORY_NAME            DIRECTORY_PATH
SYS	XMLDIR	                  /oracle/11204/rdbms/xml
SYS	ORACLE_OCM_CONFIG_DIR	  /oracle/11204/ccr/hosts/zzltestdb/state
SYS	DATA_PUMP_DIR	          /oracle/admin/zzloracle/dpdump/
SYS	ORACLE_OCM_CONFIG_DIR2	  /oracle/11204/ccr/state

2.创建自己的导出导入目录

SQL> CREATE DIRECTORY MYDIR AS '/Data/mydir';

3.expdp导出
以下是直接导出的方式

--按照schema导出所有对象
expdp user/passwd directory=MYDIR dumpfile=hr.dmp schemas=hr content=METADATA_ONLY  logfile=hr.log
--按照schema导出指定表(包含授权、索引及trigger,sequence不会被出),tables选项和schemas选项不能同时出现,指定owner需要在表名前写出
expdp user/passwd directory=MYDIR dumpfile=user.dmp tables=hr.user,hr.company content=METADATA_ONLY  logfile=user.log
--使用sys用戶导出	
expdp \'sys/oracle as sysdba\' directory=MYDIR dumpfile=hr.dmp  schemas=hr content=ALL logfile=hr.LOG
--导出指定类型的指定对象,在linux命令行中,' " ( ) $ #需要使用\转义,否则expdp报错无法识别 
expdp \'sys/oracle as sysdba\' directory=MYDIR dumpfile=hr.dmp  schemas=hr INCLUDE=VIEW:\"in\(\'v\$user\',\'v\$company\'\)\"
--根据条件导出表的部分数据
expdp user/passwd directory=MYDIR dumpfile=user.dmp tables=hr.user,hr.company content=METADATA_ONLY  logfile=user.log query=\"where ADD_DATE \>=to_Date\(\'2019-05-01\',\'YYYY-MM-DD\'\)\"
--全库导出,%U从01开始递增,parallel(并行)为几就会生成几个文件,filesize参数和parallel共存时会导致filesize失效,full=y是全库导出 compression是压缩
expdp user/passwd directory=mydir dumpfile=testdb_%U.dmp logfile=testdb.log full=y content=ALL  compression=ALL parallel=10

以下为脚本导出,脚本导出的好处是不用转义,条件清晰

# vi /Data/mydir/myexpdp.par
  DIRECTORY=MYDIR
  DUMPFILE=user.dmp
  CONTENT=METADATA_ONLY
  LOGFILE=user.log
  schemas=hr
# expdp user/passwd parfile=myexpdp.par 

4.impdp导入
导入语句和导出相差不多,后面跟的关键词只有个别差异

--有了导出文件可以直接导入,schemas如果想导入所有的就不用写,如果指定就可以写,content相同,如果只导入数据则用data_only,数据和结构都要则用all,metadata_only是数据不要其他都要
impdp user/passwd directory=MYDIR dumpfile=hr.dmp schemas=hr content=METADATA_ONLY  logfile=hr.log
--导入指定表,conten条件不写时,导出指定的什么,导入就会是什么(例如导出是data_only,导入也就只有数据)
impdp user/passwd directory=MYDIR dumpfile=user.dmp tables=hr.user,hr.company logfile=user.log
--导入带有表结构时,表空间的处理,REMAP_TABLESPACE=old_tablespace:new_tablespace为替换表空间
--不想一个个改表空间时可以选择TRANSFORM=segment_attributes:n,意思是导入后使用schema的默认表空间
impdp user/passwd directory=MYDIR dumpfile=user.dmp tables=hr.user,hr.company content=METADATA_ONLY logfile=user.log REMAP_TABLESPACE=user_tablespace:test_tablespace
--导入到不同owner下的相同表名里
impdp user/passwd directory=MYDIR dumpfile=user.dmp remap_schema=hr:emp tables=hr.user,hr.company logfile=user.log
--导入到不同owner下的不同表名里,多表的话要一一对应,不然默认导入相同表名内
impdp user/passwd directory=MYDIR dumpfile=user.dmp remap_schema=hr:emp REMAP_TABLE=user:company content=data_only logfile=user.log

5.19c的expdp

--19c导出需要加一个@指定PDB,导出文件可向下兼容,添加version即可指定版本
expdp user/passwd@PITIMDB directory=mydir dumpfile=hr.dmp logfile=hr.log content=all tables=hr.emp version=11.2.0.4.0

6.exp导出sys等系统用户下的对象

--expdp无法导出sys等系统用户下的对象,可以使用传统exp导出解决,更多命令可以使用exp help=y来查看
exp "'sys/oracle as sysdba'" file=/Data/mydir/FGA_LOG.dmp log=/Data/mydir/FGA_LOG.log tables=SYS.FGA_LOG\$ 
--exp导出的文件只能imp导入,expdp同理
imp "'sys/oracle as sysdba'" file=/Data/mydir/FGA_LOG.dmp log=/Data/mydir/FGA_LOG.log fromuser=sys touser=test data_only=y

7.导入导出进度查看

--进入命令行后可以使用status查看进度,kill_job杀死任务
impdp user/passwd attach=SYS_IMPORT_FULL_01

8.查看导出的表所在的表空间

SELECT DISTINCT TABLESPACE_NAME FROM DBA_TABLES WHERE OWNER='owner' 
UNION 
SELECT DISTINCT TABLESPACE_NAME  FROM DBA_INDEXES  WHERE OWNER='owner' 
UNION 
SELECT DISTINCT TABLESPACE_NAME FROM DBA_TAB_PARTITIONS   WHERE TABLE_OWNER='owner' 
UNION 
SELECT DISTINCT TABLESPACE_NAME FROM DBA_IND_PARTITIONS   WHERE INDEX_OWNER='owner'
相关标签: oracle oracle