1. 首页 > Oracle教程 > 正文

Oracle教程FG373-PDB闪回

本文档风哥主要介绍Oracle数据库PDB闪回相关知识,包括PDB闪回的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 PDB闪回的概念

Oracle数据库PDB闪回是指在多租户容器数据库(CDB)中将PDB恢复到过去某个时间点的状态,包括闪回数据库、闪回表、闪回查询等功能。PDB闪回可以实现数据的快速恢复,减少数据丢失,提高数据库的可用性。PDB闪回包括闪回日志、闪回恢复区、闪回时间点等组件。更多视频教程www.fgedu.net.cn

PDB闪回的特点:

  • 支持PDB级别的闪回
  • 支持闪回数据库
  • 支持闪回表
  • 支持闪回查询
  • 提高数据恢复效率

1.2 PDB闪回的方法

Oracle数据库PDB闪回的方法:

  • 闪回数据库:将整个PDB恢复到过去某个时间点
  • 闪回表:将表恢复到过去某个时间点
  • 闪回查询:查询过去某个时间点的数据
  • 闪回删除:恢复已删除的表
  • 闪回归档日志:使用归档日志进行闪回

1.3 PDB闪回的要求

Oracle数据库PDB闪回的要求:

  • CDB架构:必须在CDB架构中配置闪回
  • 系统资源:足够的CPU、内存和磁盘空间
  • 权限:需要SYSDBA权限
  • 兼容性:Oracle数据库版本必须支持PDB闪回
  • 配置:需要配置适当的参数和选项
风哥提示:PDB闪回是Oracle数据库多租户架构的核心功能,通过PDB闪回,可以实现数据的快速恢复,减少数据丢失,提高数据库的可用性。

Part02-生产环境规划与建议

2.1 PDB闪回规划

Oracle数据库PDB闪回规划要点:

# PDB闪回规划步骤
1. 分析业务需求
2. 评估系统资源
3. 设计闪回方案
4. 规划闪回架构
5. 规划闪回日志
6. 规划闪回恢复区
7. 测试和验证

# 适用场景
– 多租户数据库
– 需要数据快速恢复的系统
– 需要减少数据丢失的系统
– 需要时间点恢复的系统
– 需要表级恢复的系统

# 不适用场景
– 单租户数据库
– 闪回需求简单的系统
– 低恢复需求系统

2.2 PDB闪回设计

Oracle数据库PDB闪回设计建议:

# PDB闪回设计原则
– 基于业务需求设计
– 基于资源需求设计
– 最小化闪回时间
– 最大化数据保护
– 合理配置参数

# PDB闪回设计策略
– 合理规划闪回架构
– 配置适当的闪回日志
– 配置适当的闪回恢复区
– 配置适当的闪回时间点
– 配置适当的闪回监控

# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计闪回方案
4. 规划闪回架构
5. 测试闪回效果
6. 调整配置

2.3 PDB闪回最佳实践

Oracle数据库PDB闪回最佳实践:

  • 规划闪回架构:根据业务需求规划闪回架构,最小化闪回时间
  • 配置闪回日志:为PDB配置合理的闪回日志
  • 监控闪回使用:监控闪回使用情况,及时发现和处理问题
  • 定期测试闪回:定期测试闪回功能,确保数据可恢复
  • 设置闪回告警:设置闪回告警,及时发现闪回问题
  • 定期review:定期review闪回配置,优化闪回策略
生产环境建议:PDB闪回规划应基于业务需求和系统资源,规划闪回架构,配置闪回日志,监控闪回使用,定期测试闪回,设置闪回告警,定期review,确保数据安全。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 PDB闪回实施

3.1.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

# 切换到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 启用闪回数据库

# 切换到CDB
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闪回

# 切换到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闪回

# 切换到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闪回状态

# 切换到CDB
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闪回功能

# 切换到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闪回功能成功

风哥提示:验证PDB闪回是否成功,需要检查闪回状态、闪回日志、闪回恢复区、闪回功能等,确保数据库运行正常。学习交流加群风哥QQ113257174

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

# 解决效果
– 闪回恢复区空间充足
– 闪回日志充足
– 闪回功能正常
– 数据可恢复

生产环境建议:配置PDB闪回前,需要分析业务需求和系统资源,确保闪回配置合理。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 PDB闪回经验

Oracle数据库PDB闪回经验:

  • 规划闪回架构:根据业务需求规划闪回架构,最小化闪回时间
  • 配置闪回日志:为PDB配置合理的闪回日志
  • 监控闪回使用:监控闪回使用情况,及时发现和处理问题
  • 定期测试闪回:定期测试闪回功能,确保数据可恢复
  • 设置闪回告警:设置闪回告警,及时发现闪回问题
  • 定期review:定期review闪回配置,优化闪回策略
风哥提示:PDB闪回是Oracle数据库多租户架构的核心功能,通过规划闪回架构,配置闪回日志,监控闪回使用,定期测试闪回,设置闪回告警,定期review,可以显著提高数据恢复效率和数据库可用性。from oracle:www.itpux.com

5.2 PDB闪回检查清单

# 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:数据库配置助手,用于创建和管理数据库
持续改进:PDB闪回是一个持续的过程,需要定期review和优化。建议建立PDB闪回的规范和流程,不断改进数据恢复效率和数据库可用性。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息