本文档风哥主要介绍Oracle数据库PDB闪回相关知识,包括PDB闪回的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PDB闪回的概念
Oracle数据库PDB闪回是指在多租户容器数据库(CDB)中将PDB恢复到过去某个时间点的状态,包括闪回数据库、闪回表、闪回查询等功能。PDB闪回可以实现数据的快速恢复,减少数据丢失,提高数据库的可用性。PDB闪回包括闪回日志、闪回恢复区、闪回时间点等组件。更多视频教程www.fgedu.net.cn
- 支持PDB级别的闪回
- 支持闪回数据库
- 支持闪回表
- 支持闪回查询
- 提高数据恢复效率
1.2 PDB闪回的方法
Oracle数据库PDB闪回的方法:
- 闪回数据库:将整个PDB恢复到过去某个时间点
- 闪回表:将表恢复到过去某个时间点
- 闪回查询:查询过去某个时间点的数据
- 闪回删除:恢复已删除的表
- 闪回归档日志:使用归档日志进行闪回
1.3 PDB闪回的要求
Oracle数据库PDB闪回的要求:
- CDB架构:必须在CDB架构中配置闪回
- 系统资源:足够的CPU、内存和磁盘空间
- 权限:需要SYSDBA权限
- 兼容性:Oracle数据库版本必须支持PDB闪回
- 配置:需要配置适当的参数和选项
Part02-生产环境规划与建议
2.1 PDB闪回规划
Oracle数据库PDB闪回规划要点:
1. 分析业务需求
2. 评估系统资源
3. 设计闪回方案
4. 规划闪回架构
5. 规划闪回日志
6. 规划闪回恢复区
7. 测试和验证
# 适用场景
– 多租户数据库
– 需要数据快速恢复的系统
– 需要减少数据丢失的系统
– 需要时间点恢复的系统
– 需要表级恢复的系统
# 不适用场景
– 单租户数据库
– 闪回需求简单的系统
– 低恢复需求系统
2.2 PDB闪回设计
Oracle数据库PDB闪回设计建议:
– 基于业务需求设计
– 基于资源需求设计
– 最小化闪回时间
– 最大化数据保护
– 合理配置参数
# PDB闪回设计策略
– 合理规划闪回架构
– 配置适当的闪回日志
– 配置适当的闪回恢复区
– 配置适当的闪回时间点
– 配置适当的闪回监控
# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计闪回方案
4. 规划闪回架构
5. 测试闪回效果
6. 调整配置
2.3 PDB闪回最佳实践
Oracle数据库PDB闪回最佳实践:
- 规划闪回架构:根据业务需求规划闪回架构,最小化闪回时间
- 配置闪回日志:为PDB配置合理的闪回日志
- 监控闪回使用:监控闪回使用情况,及时发现和处理问题
- 定期测试闪回:定期测试闪回功能,确保数据可恢复
- 设置闪回告警:设置闪回告警,及时发现闪回问题
- 定期review:定期review闪回配置,优化闪回策略
Part03-生产环境项目实施方案
3.1 PDB闪回实施
3.1.1 配置闪回恢复区
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 切换到CDB
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 查看闪回恢复区配置
SQL> SHOW PARAMETER db_recovery_file_dest;
NAME TYPE VALUE
———————————— ———– ——————————
db_recovery_file_dest string /oracle/app/oracle/fast_recovery_area
db_recovery_file_dest_size big integer 10G
SQL> SHOW PARAMETER db_flashback_retention_target;
NAME TYPE VALUE
———————————— ———– ——————————
db_flashback_retention_target integer 1440
# 配置闪回恢复区
SQL> ALTER SYSTEM SET db_recovery_file_dest = ‘/oracle/app/oracle/fast_recovery_area’ SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET db_recovery_file_dest_size = 20G SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET db_flashback_retention_target = 2880 SCOPE = BOTH;
System altered.
# 验证闪回恢复区配置
SQL> SHOW PARAMETER db_recovery_file_dest;
NAME TYPE VALUE
———————————— ———– ——————————
db_recovery_file_dest string /oracle/app/oracle/fast_recovery_area
db_recovery_file_dest_size big integer 20G
SQL> SHOW PARAMETER db_flashback_retention_target;
NAME TYPE VALUE
———————————— ———– ——————————
db_flashback_retention_target integer 2880
# 验证闪回恢复区配置成功
3.1.2 启用闪回数据库
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 查看闪回数据库状态
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
——————
NO
# 配置归档模式
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT;
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 9140416 bytes
Variable Size 503316480 bytes
Database Buffers 318767104 bytes
Redo Buffers 7737600 bytes
Database mounted.
SQL> ALTER DATABASE ARCHIVELOG;
Database altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> ARCHIVE LOG LIST;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 1
Next log sequence to archive 2
Current log sequence 2
# 启用闪回数据库
SQL> ALTER DATABASE FLASHBACK ON;
Database altered.
# 验证闪回数据库状态
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
——————
YES
# 验证闪回数据库启用成功
3.2 PDB闪回配置
3.2.1 配置PDB闪回
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看PDB闪回状态
SQL> SELECT con_id, name, open_mode, flashback_on FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE FLASHBACK_ON
—— ——— ————– ————–
2 PDB$SEED READ ONLY NO
3 SALESPDB READ WRITE YES
4 HRPDB READ WRITE YES
5 APP_ROOT READ WRITE YES
6 APP_PDB1 READ WRITE YES
# 创建测试表
SQL> CREATE TABLE test_flashback (
id NUMBER,
name VARCHAR2(100),
created_date DATE DEFAULT SYSDATE
);
Table created.
SQL> INSERT INTO test_flashback (id, name) VALUES (1, ‘Test 1’);
1 row created.
SQL> INSERT INTO test_flashback (id, name) VALUES (2, ‘Test 2’);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT * FROM test_flashback;
ID NAME CREATED_DATE
———- ———– ————-
1 Test 1 31-MAR-26
2 Test 2 31-MAR-26
# 记录当前时间
SQL> SELECT TO_CHAR(SYSDATE, ‘YYYY-MM-DD HH24:MI:SS’) AS current_time FROM dual;
CURRENT_TIME
——————-
2026-03-31 10:00:00
# 删除数据
SQL> DELETE FROM test_flashback WHERE id = 1;
1 row deleted.
SQL> COMMIT;
Commit complete.
SQL> SELECT * FROM test_flashback;
ID NAME CREATED_DATE
———- ———– ————-
2 Test 2 31-MAR-26
# 验证PDB闪回配置成功
3.2.2 执行PDB闪回
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 关闭PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb CLOSE;
Pluggable database altered.
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB MOUNTED
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 闪回PDB到指定时间点
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb FLASHBACK TO TIMESTAMP TO_TIMESTAMP(‘2026-03-31 10:00:00’, ‘YYYY-MM-DD HH24:MI:SS’);
Pluggable database altered.
# 打开PDB
SQL> ALTER PLUGGABLE DATABASE fgfgfgsalespdb OPEN;
Pluggable database altered.
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 验证数据恢复
SQL> SELECT * FROM test_flashback;
ID NAME CREATED_DATE
———- ———– ————-
1 Test 1 31-MAR-26
2 Test 2 31-MAR-26
# 验证PDB闪回成功
3.3 PDB闪回验证
3.3.1 验证PDB闪回状态
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 查看闪回数据库状态
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
——————
YES
# 查看闪回恢复区使用情况
SQL> SELECT name,
space_limit/1024/1024/1024 AS space_limit_gb,
space_used/1024/1024/1024 AS space_used_gb,
space_reclaimable/1024/1024/1024 AS space_reclaimable_gb,
number_of_files
FROM v$recovery_file_dest;
NAME SPACE_LIMIT_GB SPACE_USED_GB SPACE_RECLAIMABLE_GB NUMBER_OF_FILES
———————————— ————- ————– ——————– —————
/oracle/app/oracle/fast_recovery_area 20.00 2.50 0.50 150
# 查看闪回日志
SQL> SELECT name,
bytes/1024/1024/1024 AS size_gb,
first_change#,
next_change#,
threads
FROM v$flashback_database_logfile
ORDER BY first_change# DESC
FETCH FIRST 5 ROWS ONLY;
NAME SIZE_GB FIRST_CHANGE# NEXT_CHANGE# THREADS
——————————————————- ———- ————- ———— ———-
/oracle/app/oracle/fast_recovery_area/ORCLCDB/flashback/o1_mf_ 0.50 1234567 1234568 1
/oracle/app/oracle/fast_recovery_area/ORCLCDB/flashback/o1_mf_ 0.50 1234566 1234567 1
/oracle/app/oracle/fast_recovery_area/ORCLCDB/flashback/o1_mf_ 0.50 1234565 1234566 1
/oracle/app/oracle/fast_recovery_area/ORCLCDB/flashback/o1_mf_ 0.50 1234564 1234565 1
/oracle/app/oracle/fast_recovery_area/ORCLCDB/flashback/o1_mf_ 0.50 1234563 1234564 1
# 验证PDB闪回状态成功
3.3.2 验证PDB闪回功能
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 创建测试表
SQL> CREATE TABLE test_verify (
id NUMBER,
name VARCHAR2(100),
created_date DATE DEFAULT SYSDATE
);
Table created.
SQL> INSERT INTO test_verify (id, name) VALUES (1, ‘Verify 1’);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT * FROM test_verify;
ID NAME CREATED_DATE
———- ———– ————-
1 Verify 1 31-MAR-26
# 记录SCN
SQL> SELECT current_scn FROM v$database;
CURRENT_SCN
———–
12345678
# 删除数据
SQL> DELETE FROM test_verify WHERE id = 1;
1 row deleted.
SQL> COMMIT;
Commit complete.
SQL> SELECT * FROM test_verify;
no rows selected
# 闪回表到指定SCN
SQL> FLASHBACK TABLE test_verify TO SCN 12345678;
Flashback complete.
SQL> SELECT * FROM test_verify;
ID NAME CREATED_DATE
———- ———– ————-
1 Verify 1 31-MAR-26
# 验证PDB闪回功能成功
Part04-生产案例与实战讲解
4.1 PDB闪回案例
在某企业的生产环境中,需要为PDB配置闪回功能。
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:为PDB配置闪回功能
# 实施方案
1. 查看PDB
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
2. 配置闪回恢复区
SQL> ALTER SYSTEM SET db_recovery_file_dest = ‘/oracle/app/oracle/fast_recovery_area’ SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET db_recovery_file_dest_size = 20G SCOPE = BOTH;
System altered.
3. 启用闪回数据库
SQL> ALTER DATABASE FLASHBACK ON;
Database altered.
4. 验证闪回状态
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
——————
YES
# 实施效果
– 成功配置PDB闪回
– 闪回状态正常
– 闪回日志正常
– 数据恢复效率提高
4.2 PDB闪回优化案例
在某金融机构的生产环境中,需要优化PDB闪回,提高闪回效率。
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:PDB闪回需要优化
# 优化方案
1. 查看闪回配置
SQL> SHOW PARAMETER db_flashback_retention_target;
NAME TYPE VALUE
———————————— ———– ——————————
db_flashback_retention_target integer 1440
2. 优化闪回配置
SQL> ALTER SYSTEM SET db_flashback_retention_target = 2880 SCOPE = BOTH;
System altered.
SQL> ALTER SYSTEM SET db_recovery_file_dest_size = 30G SCOPE = BOTH;
System altered.
3. 验证优化效果
SQL> SHOW PARAMETER db_flashback_retention_target;
NAME TYPE VALUE
———————————— ———– ——————————
db_flashback_retention_target integer 2880
SQL> SHOW PARAMETER db_recovery_file_dest_size;
NAME TYPE VALUE
———————————— ———– ——————————
db_recovery_file_dest_size big integer 30G
# 优化效果
– 闪回配置优化
– 闪回时间延长
– 数据保护提高
– 闪回效率提高
4.3 PDB闪回问题处理
在某电商网站的生产环境中,PDB闪回出现问题,需要处理。
– 闪回失败
– 闪回日志不足
– 数据无法恢复
# 分析步骤
1. 查看闪回日志
SQL> SELECT name,
bytes/1024/1024/1024 AS size_gb,
first_change#,
next_change#
FROM v$flashback_database_logfile
ORDER BY first_change# DESC
FETCH FIRST 5 ROWS ONLY;
NAME SIZE_GB FIRST_CHANGE# NEXT_CHANGE#
——————————————————- ———- ————- ———-
/oracle/app/oracle/fast_recovery_area/ORCLCDB/flashback/o1_mf_ 0.50 1234567 1234568
/oracle/app/oracle/fast_recovery_area/ORCLCDB/flashback/o1_mf_ 0.50 1234566 1234567
/oracle/app/oracle/fast_recovery_area/ORCLCDB/flashback/o1_mf_ 0.50 1234565 1234566
/oracle/app/oracle/fast_recovery_area/ORCLCDB/flashback/o1_mf_ 0.50 1234564 1234565
/oracle/app/oracle/fast_recovery_area/ORCLCDB/flashback/o1_mf_ 0.50 1234563 1234564
2. 查看闪回恢复区使用情况
SQL> SELECT name,
space_limit/1024/1024/1024 AS space_limit_gb,
space_used/1024/1024/1024 AS space_used_gb,
space_reclaimable/1024/1024/1024 AS space_reclaimable_gb
FROM v$recovery_file_dest;
NAME SPACE_LIMIT_GB SPACE_USED_GB SPACE_RECLAIMABLE_GB
———————————— ————- ————– ——————–
/oracle/app/oracle/fast_recovery_area 20.00 20.00 0.00
# 问题原因
– 闪回恢复区空间不足
– 闪回日志不足
– 闪回失败
# 解决方案
1. 增加闪回恢复区空间
SQL> ALTER SYSTEM SET db_recovery_file_dest_size = 40G SCOPE = BOTH;
System altered.
2. 清理旧闪回日志
SQL> ALTER DATABASE FLASHBACK OFF;
Database altered.
SQL> ALTER DATABASE FLASHBACK ON;
Database altered.
3. 验证闪回恢复区
SQL> SELECT name,
space_limit/1024/1024/1024 AS space_limit_gb,
space_used/1024/1024/1024 AS space_used_gb,
space_reclaimable/1024/1024/1024 AS space_reclaimable_gb
FROM v$recovery_file_dest;
NAME SPACE_LIMIT_GB SPACE_USED_GB SPACE_RECLAIMABLE_GB
———————————— ————- ————– ——————–
/oracle/app/oracle/fast_recovery_area 40.00 5.00 2.00
# 解决效果
– 闪回恢复区空间充足
– 闪回日志充足
– 闪回功能正常
– 数据可恢复
Part05-风哥经验总结与分享
5.1 PDB闪回经验
Oracle数据库PDB闪回经验:
- 规划闪回架构:根据业务需求规划闪回架构,最小化闪回时间
- 配置闪回日志:为PDB配置合理的闪回日志
- 监控闪回使用:监控闪回使用情况,及时发现和处理问题
- 定期测试闪回:定期测试闪回功能,确保数据可恢复
- 设置闪回告警:设置闪回告警,及时发现闪回问题
- 定期review:定期review闪回配置,优化闪回策略
5.2 PDB闪回检查清单
– [ ] 检查系统资源
– [ ] 检查CDB架构
– [ ] 检查PDB闪回需求
– [ ] 检查磁盘空间
– [ ] 检查归档模式
– [ ] 检查闪回恢复区
– [ ] 规划闪回架构
– [ ] 配置闪回恢复区
– [ ] 启用闪回数据库
– [ ] 验证闪回功能
# PDB闪回问题处理流程
1. 检查系统资源
2. 检查CDB架构
3. 检查PDB闪回需求
4. 规划闪回架构
5. 配置闪回恢复区
6. 启用闪回数据库
7. 验证闪回功能
8. 处理闪回问题
9. 优化配置
10. 监控闪回使用情况
5.3 PDB闪回工具
Oracle数据库PDB闪回常用工具:
- SQL*Plus:SQL命令行工具,用于执行SQL命令
- RMAN:恢复管理器,用于备份和恢复数据库
- Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
- SQL Developer:SQL开发工具,用于开发和调试SQL
- Data Pump:数据泵,用于导入导出数据
- DBCA:数据库配置助手,用于创建和管理数据库
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
