逻辑备份
逻辑备份是指使用工具exp或expdp将数据库对象的结构和数据导出到二进制文件的过程。当数据库对象被误操作而损坏后就可以使用工具imp或impdp利用备份的文件把数据对象导入到数据库中进行恢复。逻辑备份是物理备份方式的一种补充,多用于数据迁移。
1. 命令
1. 导出数据
# 创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
create or replace directory dump1 as '/u01/app/oracle/dump1';
# 查看管理理员目录(同时查看目录是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select * from dba_directories;
# 给导出数据用户赋予在指定目录的操作权限,最好以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
2. 导入数据
(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_ACTION=app
2. 示例
# 创建用户
create user test1 identified by test1 default tablespace test1;
# 创建表
create table EMP20
(
employee_id NUMBER(6),
first_name VARCHAR2(20),
last_name VARCHAR2(25) not null,
email VARCHAR2(25) not null,
phone_number VARCHAR2(20),
hire_date DATE not null,
job_id VARCHAR2(10) not null,
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
manager_id NUMBER(6),
department_id NUMBER(4)
);
# 创建导出目录(之后手动创建目录)
create or replace directory dump1 as '/u01/app/oracle/dump1';
# 授予test1操作权限
grant read,write on directory dump1 to test1;
# 导出test1用户数据
expdp system/oracle directory=dump1 dumpfile=test1.dmp schemas=test1;
# 将test1所有数据导入到另一个用户test2(要先创建)
impdp system/oracle directory=dump1 dumpfile=test1.dmp remap_schema=test1:test2