环境: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