Oracle教程(5)数据泵备份教程与实战
一、数据泵介绍
数据泵(Data Pump)是 Oracle 10g 开始引入的命令行逻辑备份与恢复工具。通过 expdp / impdp ,可以对所有数据库对象(模式、表数据、表空间等)进行高效导出和导入,并且支持多进程并行导出导入、可暂停恢复备份作业、灵活的对象过滤与重映射(如 REMAP_SCHEMA、REMAP_TABLESPACE、REMAP_TABLE 等),还能直接在数据库间通过网络链路完成数据传输,无需落地中间文件。
二、备份前置工作
1、创建数据泵目录
数据泵目录是 Oracle 中定义的逻辑目录,用于配置导出和导入数据的存放位置,在进行导出和导入操作时都需要指定该目录
#登录数据库后创建逻辑目录 CREATE DIRECTORY DATA_PUMP_DIR AS '/u01/app/oracle/admin/backup/';
2、创建备份用户
CREATE USER backup_user IDENTIFIED BY "YourPassword123!"; GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO backup_user;
3、授予用户备份权限
GRANT CREATE SESSION TO backup_user; GRANT EXP_FULL_DATABASE TO backup_user; GRANT IMP_FULL_DATABASE TO backup_user;
4、授予用户数据泵目录权限
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO backup_user;
三、expdp / impdp 常用选项说明
expdp username/password@db SERVICE_NAME directory=DATA_PUMP_DIR dumpfile=backup.dmp logfile=backup.log schemas=SCHEMA_NAME
1、expdp常用选项
· 文件相关
username/password:执行备份的数据库用户名和密码
@db:指定需要连接的数据库实例,可以通过tnsnames.ora查看
directory=DUMP_DIR:指示数据泵目录,即一开始创建的逻辑目录
dumpfile=backup.dmp:指定备份文件名
logfile=backup.log:备份日志
PARALLEL=4:并行备份,可以提高到处速度
COMPRESSION=ALL:压缩备份,ALL表示数据 + 元数据全部压缩,还可以设置为METADATA_ONLY(默认)、DATA_ONLY、NONE
JOB_NAME=my_backup:给任务命名,方便监控和恢复
FLASHBACK_TIME="TO_TIMESTAMP('2024-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')":导出某一时间点的一致性数据
· 备份范围(四选一)
FULL=Y:导出整个数据库
SCHEMAS=$SCHEMA_NAME:导出指定 Schema
TABLES=$SCHEMA_NAME_$TABLE_NAME:导出指定表
TABLESPACES=TBS1,TBS2:导出指定表空间
· 过滤
CONTENT=ALL:指定需要导出的数据,默认为ALL,此外还有DATA_ONLY 和 METADATA_ONLY
QUERY=$TABLE_NAME:"WHERE deptno=10":按照过滤条件进行备份
EXCLUDE=TABLE:"IN ('TMP','LOG','TEMP')":备份时排除指定对象
INCLUDE=TABLE:"IN ('EMP','DEPT','SALARY')":备份时只包含指定对象
2、impdp常用选项
dumpfile=backup.dmp:指定备份文件
logfile=restore.log:指定恢复过程的日志文件
schemas=SCHEMA_NAME:指定要恢复的模式名
TABLE_EXISTS_ACTION=REPLACE:导入时如果表已存在的处理方式,支持SKIP(跳过)、APPEND(追加)、TRUNCATE(先清空)和REPLACE(替换)
remap_tablespace=old_tablespace:new_tablespace:如果要恢复到不同的表空间,通过 remap_tablespace 参数进行映射,如果导出还原时表空间名一致就可以不用该选项
四、expdp / impdp 使用实例
1、expdp导出示例
· 完整备份
expdp username/password@db directory=DATA_PUMP_DIR dumpfile=all_tables.dmp logfile=all_tables.log full=yes
· 备份特定的表
expdp username/password@db directory=DATA_PUMP_DIR dumpfile=table_backup.dmp logfile=table_backup.log tables=SCHEMA_NAME.TABLE_NAME
· 只导出表结构
expdp username/password@db directory=DATA_PUMP_DIR dumpfile=structure_only.dmp logfile=structure_only.log content=metadata_only schemas=SCHEMA_NAME
· 并行导出
expdp username/password@db directory=DATA_PUMP_DIR dumpfile=backup%U.dmp logfile=backup.log schemas=SCHEMA_NAME parallel=4
2、impdp导出示例
· 从完整备份恢复
impdp username/password@db directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=full_restore.log full=yes
· 恢复指定表
impdp username/password@db directory=DATA_PUMP_DIR dumpfile=table_backup.dmp logfile=table_restore.log tables=SCHEMA_NAME.TABLE_NAME
· 导入数据到指定表空间
impdp username/password@db directory=DATA_PUMP_DIR dumpfile=backup.dmp logfile=restore.log remap_tablespace=old_tablespace:new_tablespace
五、监控数据泵作业
· 查看当前数据泵作业
SELECT * FROM DBA_DATAPUMP_JOBS;
· 查看作业进度
SELECT * FROM DBA_DATAPUMP_SESSIONS;
六、备份还原实战
将A服务器 Oracle 中的 IPLAT.HISTRORY_LOG 表恢复到B服务器 Oralce 中进行归档,恢复后保持表名不变或者使用一张新表保存,但是SCHEMA需要保持一致
1、源库创建 DIRECTORY
DIRECTORY 是 Oracle 中的数据库对象,用于指定数据库和操作系统物理路径的映射关系,把数据库内的一个名字和服务器磁盘上的真实路径关联起来。在对 Oracle 进行备份时,不允许直接写操作系统路径,而是需要先创建 DIRECTORY 对象,再把这个对象的权限授予具体用户
-- 查看已有 directory SELECT directory_name, directory_path FROM dba_directories; -- 如不存在,创建一个(路径需提前在 OS 上建好) CREATE OR REPLACE DIRECTORY dp_dir AS '/data/datapump'; -- 授权给 iplat 用户 GRANT READ, WRITE ON DIRECTORY dp_dir TO iplat;
2、导出数据
注意 DIRECTORY 的名字要与数据库中已有的 DIRECTORY 保持一致
expdp iplat/密码@服务名 DIRECTORY=DUMPDIR \ DUMPFILE=em_hi_log_$(date +%Y%m%d).dmp \ LOGFILE=em_hi_log_exp_$(date +%Y%m%d).log \ TABLES=iplat.EM_HI_LOG \ COMPRESSION=ALL
3、目标库创建DIRECTORY
确认目标库 DUMPDIR 目录对象存在,如果不存话按照上面的步骤创建
SELECT directory_name, directory_path FROM dba_directories WHERE directory_name = 'DUMPDIR';
4、目标库创建用户
确认 iplat 用户存在,如果不存在需要提前创建
SELECT username, account_status FROM dba_users WHERE username = 'IPLAT';
5、确认目标库存在表空间
源库用的是 DS_IPLAT01表空间,如果目标库不进行表空间映射的话就需要保持一致;如果要不存在该表空间就要先行创建,避免写入到默认表空间
SELECT tablespace_name, status FROM dba_tablespaces WHERE tablespace_name = 'DS_IPLAT01'; --创建表空间 CREATE TABLESPACE DS_IPLAT01 \ DATAFILE '/u01/oradata/orcl/ds_iplat01_01.dbf' SIZE 10G \ AUTOEXTEND ON NEXT 1000M MAXSIZE 32G EXTENT MANAGEMENT LOCALSEGMENT SPACE MANAGEMENT AUTO;
6、导入数据
这里使用REMAP_TABLE将表名进行了修改
impdp 'iplat/123456' \ DIRECTORY=DUMPDIR DUMPFILE=em_hi_log_20260611.dmp \ LOGFILE=em_hi_log_imp_20260611.log \ TABLES=iplat.EM_HI_LOG \ REMAP_TABLE=iplat.EM_HI_LOG:EM_HI_LOG_202606
猜你喜欢
MySQL | Oracle Oracle教程(6)SGA\PGA\REDO核心参数调优
一、Oracle核心参数介绍1、SGASGA(System Global Area)是 Oracle 实例启动时分配的共享内存区域,所有连接到该实例的会话都共用这块内存,是整个数据库实例对外提供服务的...
MySQL | Oracle MySQL教程(13)基于Position或GTID实现主从复制
一、MySQL主从复制概述主从复制是MySQL高可用与横向扩展的基础方案,其核心依赖于 MySQL 自身的 Binlog 机制。主节点的 Binlog 记录了数据库上所有的 DDL 与 DML 操作(...
MySQL | Oracle MySQL教程(12)锁的原理与常见锁问题处理
一、数据库锁的作用数据库锁主要用于解决并发问题,当并发操作发生时,数据库依靠锁来控制这些并发请求对资源(锁是针对资源而非事务)的访问规则,因为被上锁的资源不会被其他事务修改,因为可以保证事务之间的隔离...
MySQL | Oracle 【MySQL 8.0】MySQL 8.0新特性介绍与升级方法
一、MySQL 8.0主要新特性截至2023年12月,MySQL官方发布的稳定版为8.0.35,另有一个MySQL8.2为创新版,所以暂不做考虑· 快速新增/删除列虽然 MySQL 在8.0 以前就已...
MySQL | Oracle 【MySQL 8.0】MySQL5.7升级MySQL8.0的步骤与常见问题
一、为什么推荐将MySQL从5.7升级到8.0MySQL5.7的生命周期已经在2023年10月结束,沿用老版本将存在以下问题:· 所有漏洞不再修复,如自增ID回退问题· 核心新特性无法使用,...
文章评论