oracle的导入导出expdp和impdp

环境:oracle12c

1、exp、imp和expdp、impdp的区别

    前者是客户端工具程序,通过网络的方式导出文件到本地。

    后者是服务器端工具程序,直接在服务器端进行导入导出,不走网络

2、expdp、impdp查看帮助方式

$ expdp help=y
$ impdp help=y

3、expdp导出

Format:  expdp KEYWORD=value or KEYWORD=(value1,value2,...,valueN)

1)Fine-grained object and data selection 
过滤数据和过滤对象
CONTENT Specifies data to unload.
Valid keyword values are: [ALL], DATA_ONLY and METADATA_ONLY.

QUERY
Predicate clause used to export a subset of a table.
For example, QUERY=employees:"WHERE department_id > 10".

INCLUDE
Include specific object types.
For example, INCLUDE=TABLE_DATA.  include=[object_type]:[name_clause]
include=package,function,table:"='emp'"
include=table:"IN('dept','emp')"
include=table,view

EXCLUDE
Exclude specific object types.
For example, EXCLUDE=SCHEMA:"='HR'".


SAMPLE
Percentage of data to be exported. 
sample=emp:50


REUSE_DUMPFILES
Overwrite destination dump file if it exists [NO].


LOGFILE
Specify log file name [export.log].


JOB_NAME
Name of export job to create.


ESTIMATE_ONLY
Calculate job estimates without performing the export [NO].

ESTIMATE
Calculate job estimates.
Valid keyword values are: [BLOCKS] and STATISTICS.


DUMPFILE
Specify list of destination dump file names [expdat.dmp].
For example, DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp.


DIRECTORY
Directory object to be used for dump and log files.

4、创建datapump的导出文件存储的目录对象-directorie

desc dba_directories ;                             #数据字典
SELECT * FROM dba_directories;                     #试图
[oracle@12c ~]$ mkdir dpdir
[oracle@12c ~]$ ll /home/oracle/dpdir
CREATE DIRECTORY dpdir AS '/home/oracle/dpdir';    #创建directory

SELECT * FROM dba_directories
WHERE directory_name='DPDIR';
SYS    DPDIR    /home/oracle/dpdir    0

每个目录都包含了read write两个权限 将该权限授予用户或角色
SELECT * FROM dba_tab_privs
WHERE grantee='HR' AND table_name='DPDIR';  --no rows

GRANT READ,WRITE ON DIRECTORY dpdir TO hr;      #赋予用户读写权限
SELECT * FROM dba_tab_privs
WHERE grantee='HR' AND table_name='DPDIR';      #查看用户权限
HR    SYS    DPDIR    SYS    READ    NO    NO    NO    DIRECTORY    NO
HR    SYS    DPDIR    SYS    WRITE    NO    NO    NO    DIRECTORY

5、执行方式

命令行界面
参数文件界面    使用parfile   PARFILE Specify parameter file name.
交互式命令界面  expdp  impdp
EMCC WEB界面

6、导入导出的模式

full                                      #全库
schema                                    #对象
table                                     #表
tablespace                                #表空间
tansportable tablespace
transportable database

7、导出table

TABLES  
Identifies a list of tables to export.
For example, TABLES=HR.EMPLOYEES,SH.SALES:SALES_1995.   #命令模式

[oracle@12c /]$ expdp hr/hr directory=dpdir dumpfile=employees.dmp tables=employees logfile=employees.log job_name=employees_job
[oracle@12c /]$ expdp hr/hr directory=dpdir dumpfile=employees.dmp tables=employees logfile=employees.log job_name=employees_job reuse_dumpfiles=yes
[oracle@12c /]$ expdp hr/hr directory=dpdir dumpfile=employees.dmp tables=employees logfile=employees.log job_name=employees_job reuse_dumpfiles=yes query="'WHERE rownum<11'"
$ vim employees.par                                     #参数文件模式
directory=dpdir
dumpfile=employee.dmp
tables=employees,departments
logfile=employee.log
content=metadata_only
job_name=employees_job
reuse_dumpfiles=yes
[oracle@12c ~]$ expdp hr/hr parfile=/home/oracle/employees.par

8、导入导出schemas 

schemas 
[oracle@12c ~]$ expdp system/oracle directory=dpdir dumpfile=hr_schema.dmp schemas=hr logfile=hr_schema.log job_name=hr_schema_job

[oracle@12c ~]$ expdp \'sys/oracle as sysdba\' directory=dpdir dumpfile=hr_schema.dmp schemas=hr logfile=hr_schema.log job_name=hr_schema_job reuse_dumpfiles=yes


SELECT * FROM dba_roles          #查看导入导出角色权限
WHERE role LIKE 'EXP%' OR role LIKE 'IMP%';
EXP_FULL_DATABASE    14    NO    NONE    YES    Y    YES    NO
IMP_FULL_DATABASE    15    NO    NONE    YES    Y    YES    NO

PARALLEL Change the number of active workers for current job.

9、全库导入导出

FULL Export entire database [NO].
[oracle@12c ~]$ expdp \'sys/oracle as sysdba\' directory=dpdir dumpfile=full20200718.dmp full=y logfile=full20200718.log job_name=full20200818_job reuse_dumpfiles=yes

10、表空间导出导入

#模拟表空间中有不同类型数据table、index、其他用户表
Identifies a list of tablespaces to export.
SELECT tablespace_name FROM dba_tablespaces;

SELECT tablespace_name,file_name FROM dba_data_files;

CREATE TABLESPACE tbs05 
DATAFILE '/u01/app/oradata/ORCL/datafile/tbs0501.dbf' SIZE 100M;

CREATE TABLE hr.tt01 TABLESPACE  tbs05
AS
SELECT * FROM dba_objects;

SQL> conn hr/hr
Connected.
SQL> DROP TABLE TEST01;

Table dropped.
SQL> CREATE TABLE test01(
  2  ID NUMBER PRIMARY KEY,
  3  name VARCHAR2(20)
  4  ) TABLESPACE tbs05;

Table created.
SQL> INSERT INTO test01 VALUES(1,'A');
1 row created.
SQL> COMMIT;


SELECT table_name,owner FROM dba_tables
WHERE tablespace_name='TBS05';
TEST01    SYS
TT01    HR
TEST01    HR

SELECT index_name,owner FROM dba_indexes
WHERE tablespace_name='TBS05';
SYS_C007706    HR
SYS_C007708    SYS

[oracle@12c ~]$ expdp \'sys/oracle as sysdba\' directory=dpdir dumpfile=tbs05_0718.dmp logfile=tbs05_0718.log tablespaces=tbs05

SELECT file_name FROM dba_data_files
WHERE tablespace_name='TBS05';
/u01/app/oradata/ORCL/datafile/tbs0501.dbf
--模拟表空间文件出现问题  使用impdp进行恢复

11、可传输表空间TRANSPORT_TABLESPACES(方法:将表的源数据(表的定义)导出,导入到目标库,data_file直接拷贝到目标库

TRANSPORT_TABLESPACES  TTS 将表空间从一个数据库copy到另一个数据库  可以跨平台
List of tablespaces from which metadata will be unloaded.   表空间对象的metadata


1、查看源和目标端操作系统的平台是否支持
SELECT * FROM v$transportable_platform
ORDER BY platform_id;

0x123456
big   低地址存放高位  buf[0] 0x12、 buf[1] 0x34 、 buf[2] 0x56
little  低地址存放低位 buf[0] 0x56、 buf[1] 0x34 、 buf[2] 0x12


SELECT * FROM v$transportable_platform
ORDER BY platform_id;

desc v$database

SELECT d.platform_name,endian_format FROM v$transportable_platform tp,v$database d
WHERE tp.platform_name=d.platform_name;
Linux x86 64-bit    Little

2 检查表空间的自包含性
desc dbms_tts
TRANSPORT_SET_CHECK          TS_LIST                  CLOB           IN             
                             INCL_CONSTRAINTS         PL/SQL BOOLEAN IN     DEFAULT 
                             FULL_CHECK               PL/SQL BOOLEAN IN     DEFAULT 
EXECUTE dbms_tts.transport_set_check('TBS05',TRUE,TRUE);

SELECT * FROM transport_set_violations;   --检查表空间自包含检查结果
ORA-39907: 索引 HR.TEST02_IDX (在表空间 TBS02 中) 指向表 HR.TEST02 (在表空间 TBS05 中)。
3、将表空间设置为read-only
SELECT tablespace_name,status FROM dba_tablespaces
WHERE tablespace_name='TBS05';
TBS05    ONLINE
ALTER TABLESPACE tbs05 READ ONLY;

SELECT tablespace_name,status FROM dba_tablespaces
WHERE tablespace_name='TBS05';
TBS05    READ ONLY

4、生成transport tablespace Sets
包含表空间的数据文件   --将原有的文件直接拷贝到目标
表空间及对象 metadata   --expdp生成
[oracle@12c ~]$ expdp \'sys/oracle as sysdba\' directory=dpdir dumpfile=source_tbs05.dmp transport_tablespaces=tbs05 logfile=source_tbs05.log

SELECT file_name FROM dba_data_files
WHERE tablespace_name='TBS05';

[oracle@12c dpdir]$ ll /home/oracle/dpdir/source_tbs05.dmp 
-rw-r-----. 1 oracle oinstall 249856 Jul 19 16:18 /home/oracle/dpdir/source_tbs05.dmp
/u01/app/oradata/ORCL/datafile/tbs0501.dbf
将metadata文件和表空间tbs05的数据文件拷贝到目标服务器端 

5、将表空间的文件和metadata的文件拷贝到目标端
源端:
rman target /
rman> convert tablespace tbs05 to platform '目标平台' FORMAT '转换后的文件';

6、在target系统上使用impdp
$impdp \'sys/oracle as sysdba\' directory=dpdir dumpfile=source_tbs05.dmp transport_datafiles='目标服务器的数据文件' logfile=test_tbs05.log
将表空间设置为读写


SELECT * FROM dba_datapump_jobs;
SYS    FULL20200818_JOB    EXPORT                            FULL                              NOT RUNNING    0    0    0

SELECT * FROM dba_objects
WHERE object_name='FULL20200818_JOB';
SYS    FULL20200818_JOB        75125    75125    TABLE    19-7月 -20    19-7月 -20    2020-07-19:16:29:45    VALID    N    N    N    1        NONE        N    N    USING_NLS_COMP    N    N                

SELECT * FROM v$fixed_table
WHERE name LIKE '%LONGOPS%'
V$SESSION_LONGOPS    4294951245    VIEW    65537    0
SELECT * FROM v$session_longops
ORDER  BY start_time DESC;

12、导出交互模式

[oracle@12c dpdir]$ expdp \'sys/oracle as sysdba\' directory=dpdir dumpfile=full20200718.dmp full=y logfile=full20200718.log job_name=full20200818_job reuse_dumpfiles=yes

ctr+c 退出当前的模式
Export> help
Export> status
Export> stop_job   #停止job
Export> start_job
Export> continue_client
$ expdp \'sys/oracle as sysdba\' attach=FULL20200818_JOB    #重新开始导出

13、导出重定义(改名称,替换字段内容)

#重定义几种类型
remap_datafile remap_tablespace remap_table remap_data #创建一个表进行测试 CREATE TABLE hr.test01(
id NUMBER, name VARCHAR2(20), val NUMBER ); #插入数据 INSERT INTO hr.test01 VALUES(1,'ABC',1000); INSERT INTO hr.test01 VALUES(2,'EDG',2000); COMMIT; #重定义数据的语法(使用的是package) REMAP_DATA Specify a data conversion function. For example, REMAP_DATA=EMP.EMPNO:REMAPPKG.EMPNO. #对name、val字段进行重定义,编写package包定义 CREATE OR REPLACE PACKAGE hr.test01_pkg #包定义 IS FUNCTION f_remap_name(var_name VARCHAR2) RETURN VARCHAR2; FUNCTION f_remap_val(var_val NUMBER) RETURN NUMBER; END; / CREATE OR REPLACE PACKAGE BODY hr.test01_pkg #包主体 IS FUNCTION f_remap_name(var_name VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN dbms_random.string('A',5); END; FUNCTION f_remap_val(var_val NUMBER) RETURN NUMBER AS BEGIN RETURN floor(dbms_random.value(1,100000)); END; END; / expdp remap_data参数导出数据进行转换 #导出使用包的方法进行数据转换 expdp hr/hr directory=dpdir dumpfile=test01_0718.dmp tables=test01 remap_data=test01.name:test01_pkg.f_remap_name,test01.val:test01_pkg.f_remap_val SELECT * FROM hr.test01; 1 ABC 1000 2 EDG 2000 impdp hr/hr dumpfile=test01_0718.dmp directory=dpdir tables=test01 remap_table=test01:test02 #直接使用hr进行导入 impdp \'sys/oracle as sysdba\' dumpfile=test01_0718.dmp directory=dpdir tables=test01 remap_table=test01:test02 remap_schema=hr:scott #使用dba进行导入 SELECT * FROM hr.test02; 1 lAjvg 22119 2 yLWdW 44967
做一个决定,并不难,难的是付诸行动,并且坚持到底。
原文地址:https://www.cnblogs.com/wukc/p/13337604.html