使用EXPDP和IMPDP时应该注意的事项:
EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。
expdp或impdp命令时,可暂不指出用户名/密码@实例名 as 身份,然后根据提示再输入,如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
create directory dpdata1 as 'd:\test\dump';
二、查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select * from dba_directories;
三、给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。
grant read,write on directory dpdata1 to scott;
四、导出数据
1)按用户导
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
2)并行进程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
3)按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
4)按查询条件导
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
5)按表空间导
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
6)导整个数据库
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
五、还原数据
1)导到指定用户下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
2)改变表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)导入表空间
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4)导入数据库
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5)追加数据
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACT
ORACLE备份还原(expdp/impdp)
1. 创建目录
SQL> create directory dump_file as ‘/db/backup’;
2. 目录赋权限
SQL> grant read,write on directorydump_file to bam;
查看目录
SQL> select * from dba_directories;
3. 备份
SQL>expdp user/pwd directory=dump_filedumpfile=expdp_%U.dmp logfile=expdp.log filesize=20G
4. 还原
SQL>impdp user/pwd directory=dump_filedumpfile=expdp_%U.dmp logfile=impdp.log
备份内容(content):
(1)备份所有(对象结构、数据):content = all(默认)
(2)逻辑备份(只有对象结构):content = metadata_only
(3)数据备份(只有数据):content = data_only(导入时,需要确保数据定义已经存在,如果已经存在,导入时最好指定data_only)
过滤已经存在的数据(table_exists_action):
(1)table_exists_action = skip:跳过该表,继续处理下一个表(如果同时指定了CONTENT参数为Data_only的话,skip参数无效,默认为append)
(2)table_exists_action = append:继续添加数据
(3)table_exists_action = truncate:截断表,再添加数据
(4)table_exists_action = replace:删除并重建表,再添加数据(如果同时指定了CONTENT参数为Data_only的话,replace参数无效)
重定义对象所属用户(Remap_schema):
语法:REMAP_SCHEMA=Source_schema:Target_schema[,Source_schema:Target_schema]
(Remap_schema=a:b,c:d这个可以,但是不能在同一个IMPDP命令中指定remap_schema=a:b,a:c.)
重定义对象的表空间(remap_tablespace):
REMAP_TABLESPACE=Source_tablespace:Target_tablespace[,Source_tablespace:Target_tablespace]
优化导入/导出效率(parallel):
(1)对于导出来说,由于dump文件只能由一个线程进行操作(包括I/O处理),因此如果输出的DUMP文件只有一个,即使你指定再多的并行,实际工作仍然是一个,而且还会触发ORA-39095错误。因此,建议设置该参数小于或等于生成的DUMP文件数量。那么,如何控制生成的DUMP文件数量呢?
EXPDP命令提供了一个FILESIZE参数,用来指定单个DUMP文件的最大容量,要有效的利用parallel参数,filesize参数必不可少。
举例:某用户对象占用了4G左右的空间,实际导出后的DUMP文件约为3G,我们尝试在导出该用户时指定并行度为4,设置单个文件不超过500M,则设置:parallel = 4;
(2)对于导入来说,使用parallel参数则要简单的多,我认为导入更能体现parallel参数的优势。参数设置为几,则认为同时将几张表的内容导入到库中。
举例:某dmp文件中包含了200张表,我们尝试在导入该DMP文件时指定并行度为10,则设置:parallel = 10。