exp/imp和expdp/impdp的逻辑哲学
2013-04-10oracle数据库中,exp/imp是client工具程序,expdp/impdp是server工具程序,但是在client/server都可以用。
实例:
select * from dba_directories;
create or replace directory expdp_dir1 as '/data1/backup';
grant read,write on directory expdp_dir1 to user01;
grant read,write on directory expdp_dir1 to public;
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1
expdp tables=order dumpfile=contact.dmp DIRECTORY=expdp_dir1 parallel=2 log=act.log COMPRESSION=all
注意在ORACLE 10g下 COMPRESSION只有METADATA_ONLY和NONE两个选项,ORACLE 11g下才有DATA_ONLY选项。
expdp version检查版本。
1、文件不通用
imp只适用exp导出的文件,用expdp导出的文件不适用。
impdp只适用于expdp导出的文件,用exp导出的文件不适用。
expdp/impdb使用时可暂时不指定user/pw@instance,根据提示再输入:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1
2、查看帮助:
exp help=y
imp help=y
expdp help=y
impdp help=y
3、exp/imp实例
exp/imp {u_name}/{u_pwd}@{local_svrname} fromuser={from_user} touser={u_name} file={dmp_file_path} ignore=y tablespaces={tbs_name};
a)、指定用户
exp user01/password1 file=$bakfile OWNER=user01 log=${today}.log
imp user01/password1 file=$bakfile FULL=y
b)、指定表
exp user01/password1 file=table123.dmp tables=table1,table2,table3;
imp user01/password1 file=table123.dmp tables=table1,table2,table3;
c)、指定查询条件
exp userid/pass tables=(tables1,table2) query=\"where rownum<=10\" file=bak.dmp
exp userid/pass file=account.dmp query=\"where rownum\<\=100\" tables=account
d)、备份脚本 vi exp.sh . ~/.bash_profile today=`date '+%Y-%m-%d'`
exp system/oracle file=/oracle/exp/$today.dmp log=/oracle/exp/$today.log owner=user01 buffer=4096000
#保留30天内备份数据 /usr/bin/find /oracle/exp/*.dmp -ctime +30 -exec rm -rf {} \;
4、为了用impdp/expdp,你需要做一些准备活动: 创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
SQL> create directory data_pump_dir1 as 'f:\dump';
(create directory dir_dump1 as '/data1/dump1';)
给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。
grant read,write on directory data_pump_dir1 to scott;
SQL> grant read,write on directory data_pump_dir1 to emr;
查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
SQL> col DIRECTORY_PATH format a50
SQL> set linesize 200
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ --------------------------------------------------
SYS DATA_PUMP_DIR /u02/oracle/10.2.0/rdbms/log/
SYS DPDATA1 /u02/dump
SYS ORACLE_OCM_CONFIG_DIR /u02/oracle/10.2.0/ccr/state
5、操作系统中创建需要的路径:
mkdir f:\dump
mkdir /data1/dump
6、按用户expdp导出:
expdp emr/emr@emr SCHEMAS=emr DUMPFILE=expdp.dmp DIRECTORY=data_pump_dir;
expdb实例:
a)、按用户导
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
b)、并行进程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
c)、按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
d)、按查询条件导
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
e)、按表空间导
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
exp 'system/123456' tablespaces=TS01 file=ts01.dmp
f)、导整个数据库
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
7、将dmp文件复制到data_pump_dir设定的路径,按用户还原(提前创建好所需的tablespace和user):
impdp emr/emr@emr SCHEMAS=emr DUMPFILE=expdp.dmp DIRECTORY=data_pump_dir;
还原数据实例:
a)、导到指定用户下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
b)、改变表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
c)、导入表空间
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
d)、导入数据库
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
e)、当使用IMPDP完成数据库导入时,如遇到表已存在时,Oracle提供给我们如下四种处理方式:
a.忽略(SKIP,默认行为);
b.在原有数据基础上继续增加(APPEND);
c.先DROP表,然后创建表,最后完成数据插入(REPLACE);
d.先TRUNCATE,再完成数据插入(TRUNCATE)。
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=REPLACE;
8、expdp/impdp的EXCLUDE/INCLUDE用法
EXCLUDE=SEQUENCE,VIEW --过滤所有的SEQUENCE,VIEW
EXCLUDE=TABLE:"IN ('EMP','DEPT')" --过滤表对象EMP,DEPT
EXCLUDE=SEQUENCE,VIEW,TABLE:"IN ('EMP','DEPT')" --过滤所有的SEQUENCE,VIEW以及表对象EMP,DEPT
EXCLUDE=INDEX:"= 'INDX_NAME'" --过滤指定的索引对象INDX_NAME
INCLUDE=PROCEDURE:"LIKE 'PROC_U%'" --包含以PROC_U开头的所有存储过程(_ 符号代表任意单个字符)
INCLUDE=TABLE:"> 'E' " --包含大于字符E的所有表对象
相关日志
- oracle中drop一个表,让数据文件释放空间
- oracle批量杀掉死锁进程
- ORA-00257: archiver error. Connect internal only, until freed. (DBD ERROR: OCISessionBegin)
- oracle同义词SYNONYM
- substr()函数
- oracle create dblink
- oracle 启动归档模式
- oracle表空间文件
- linux删除oracle表空间文件后空间不释放
- nagios check_oracle_health install shell
- oracle最大连接数processes
- nagios check_oracle_health
- cx_Oracle for python
- 数据库查询重复行shell脚本
- oracle导入txt数据文件实例
- mysql导入txt数据文件实例
- 修改NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET字符集
- NLS_NCHAR_CHARACTERSET和NLS_CHARACTERSET的区别
- 如何安装mysql-5.6.12
- 设置NLS_LANG环境变量
- Oracle Golden Gate数据库同步技术
- mysql或oracle合并行函数
- Oracle InstantClient安装步骤
- shell sqlplus run sql
- oracle误删datafile
- mysqld_safe — MySQL Server Startup Script
- 如何禁用mysql端口3306
- oracle触发器实例 (8)
- sql语句处理BLOB (8)
- Drizzle A database for the Cloud (1)
- SGA/PGA的设置与调整 (9)
- 根据v$SGA_TARGET_ADVICE设置SGA SIZE (6)
- shmmax/shmall和sga_max_size/sga_target应该设置多大 (3)
- oracle安装后期stop big port (1)
- OLTP和OLAP的区别 (3)
- mysql创建数据库及用户 (1)
- Mysql分支MariaDB简介 (6)
- ORA-01843: not a valid month (3)
- sql语句where 1=1和1=2的作用 (4)
- 如何安装mysql-5.5.31 (8)
- rlwrap实现sqlplus使用上下键查历史命令
- CentOS_x64_6.3 install Oracle 10.2.0.1报错ins_emdb.mk (2)