Oracle数据泵expdp和impdp
数据泵的流程
1.数据泵的组成
a】数据泵核心部分程序包:DBMS_DATAPUMP
b】提供元数据的程序包:DBMS_MATADATA
c】命令行程序:EXPDP,IMPDP
2.数据泵文件
a】转储文件:此文件包含对象数据
b】日志文件:记录操作信息和结果
c】SQL文件:将导入作业中的DDL语句写入SQLFILE指定的参数文件中
3.数据泵的目录和文件位置--逻辑概念,逻辑目录
若以sys或system用户完成数据泵的导入导出时,可以使用缺省的目录 DATA_PUMP_DIR
如果设置了环境变量 ORACLE_BASE,则DATA_PUMP_DIR缺省目录位置是:
$ORACLE_BASE/admin/database_name/dpdump
否则是:
$ORACLE_HOME/dmin/dtabase_name/dpdump
也可以指定自定义创建的directory
#设置列显示宽度 col directory_name for a25 col DIRECTORY_PATH for a80 select directory_name,directory_path from dba_directories;
建立目录
#创建目录,这里的dmpbak是逻辑目录,后面的/home/oracle/dmpbak是真实路径,这个真实路径需要提前创建,必须是存在的。 create or replace directory dmpbak as '/home/oracle/dmpbak'; #删除目录 drop directory dmpbak; #授权 grant read,write on directory dmpbak to 用户名; #给所有用户授权dmpbak目录的读写使用 grant all on directory dmpbak to public; #dump job 查询 select * from dba+_datapump_jobs;
备份恢复
前提准备:建立备份恢复的目录
a】表的备份恢复
#导出,多表之间用逗号隔开 expdp 用户名/密码 directory=逻辑目录 dumpfile=文件名.dmp logfile=expdp_日志文件名.log tables=表1,表2,表3
#导出时也可以加入条件 query="'where xxx=x '" #模拟误删除表xxx drop table name xxx purge; drop table name yyy purge; #恢复导入 impdp 用户名/密码 directory=逻辑目录名 dumpfile=expdp导出的.dmp logfile=导入日志名.log #需要注意导入日志和导出日志是各自独立的,之间没有关系
#remap_table 导入时将表名替换
在impdp语句最后加上 remap_table=原表名:新表名
b】用户的备份恢复
#用户导出,通常用system管理员用户 expdp 用户名/密码 directory=逻辑目录名 dumpfile=xxx.dmp logfile=xxx.log schemas=用户名 #导入时更换用户,这个操作会创建新用户 impdp 用户名/密码 directory=逻辑目录名 dumpfile=xxx.dmp logfile=xxx.log remap_schemas=原用户名:新用户名 #连接 conn 用户名/密码 #查看当前用户 show user #查看用户有哪些表 select table_name from user_tables; #删除用户的操作,cascade的意思是将关联的权限也一并删除 drop user xxx cascade;
c】数据库的备份恢复(迁移)
#导出整个数据库,使用管理员 expdp system/xxx directory=逻辑目录名 dumpfile=xxx.dmp full=y logfile=xxx.log #导入 impdp system/xxx directory=逻辑目录名 dumpfile=xxx logfile=xxx.log full=y #整个数据库迁移一般用rman