Oracle PDB Snapshot Carousel(快照轮播)
Oracle PDB Snapshot Carousel(快照轮播)
适用版本:Oracle Database 12.2 / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
PDB Snapshot Carousel 是 12.2 引入的特性[1],自动为 PDB 创建多个快照,支持快速回滚到历史版本:
核心特性:
- 自动定时创建快照
- 最多保留 8 个快照(默认)
- 支持快照克隆
- 支持快照恢复
2. 启用 Snapshot Carousel
2.1 设置快照数量
-- 设置最多保留 8 个快照
ALTER SYSTEM SET max_pdb_snapshots=8 SCOPE=BOTH;
-- 关闭快照
ALTER SYSTEM SET max_pdb_snapshots=0 SCOPE=BOTH;
2.2 PDB 级别设置
-- 切换到 PDB
ALTER SESSION SET CONTAINER = hrpdb;
-- 设置 PDB 级别
ALTER SYSTEM SET max_pdb_snapshots=8 SCOPE=BOTH;
3. 手动创建快照
3.1 创建快照
-- 在 CDB$ROOT 或 PDB 中
ALTER SESSION SET CONTAINER = hrpdb;
-- 创建快照
ALTER PLUGGABLE DATABASE SNAPSHOT;
-- 命名快照
ALTER PLUGGABLE DATABASE SNAPSHOT snap_20260721;
-- 每隔 N 分钟自动快照
ALTER PLUGGABLE DATABASE SNAPSHOT MODE EVERY 60 MINUTES;
3.2 停止自动快照
ALTER PLUGGABLE DATABASE SNAPSHOT MODE NONE;
4. 查看快照
4.1 PDB 快照列表
SELECT
con_id,
snapshot_name,
snapshot_scn,
snapshot_time,
full_snapshot_path
FROM dba_pdb_snapshots
ORDER BY snapshot_time DESC;
4.2 当前模式
SELECT
con_id,
snapshot_mode,
snapshot_interval
FROM v$pdbs;
5. 从快照克隆 PDB
5.1 创建克隆 PDB
-- 从快照创建 PDB
CREATE PLUGGABLE DATABASE hrpdb_test
FROM hrpdb
SNAPSHOT snap_20260721;
-- 打开
ALTER PLUGGABLE DATABASE hrpdb_test OPEN;
5.2 用途
- 测试环境快速搭建
- 数据回溯分析
- Bug 复现
6. 从快照恢复 PDB
6.1 完全恢复
-- 关闭 PDB
ALTER PLUGGABLE DATABASE hrpdb CLOSE;
-- 从快照恢复
ALTER PLUGGABLE DATABASE hrpdb
SNAPSHOT RECOVER snap_20260721;
-- 打开
ALTER PLUGGABLE DATABASE hrpdb OPEN;
6.2 注意事项
- 仅支持 19c+
- 快照之后的数据丢失
- 需关闭 PDB
7. 删除快照
7.1 删除指定快照
ALTER PLUGGABLE DATABASE hrpdb
SNAPSHOT DELETE snap_20260721;
7.2 删除所有快照
-- 关闭快照功能
ALTER PLUGGABLE DATABASE hrpdb SNAPSHOT MODE NONE;
-- 设置保留数为 0
ALTER SYSTEM SET max_pdb_snapshots=0 SCOPE=BOTH;
8. 存储管理
8.1 快照存储位置
-- 默认位置
-- $ORACLE_BASE/oradata/<db_unique_name>/<pdb_name>/snapshot/
-- 自定义位置
ALTER SYSTEM SET pdb_snapshot_dir='/u01/snapshots' SCOPE=BOTH;
8.2 快照大小
-- 查看快照文件
SELECT
snapshot_name,
full_snapshot_path,
bytes/1024/1024 AS size_mb
FROM dba_pdb_snapshots;
9. Snapshot Carousel 工作机制
9.1 轮转机制
创建顺序:snap1 → snap2 → snap3 → ... → snap8 → snap9
保留 8 个:
snap1 snap2 snap3 snap4 snap5 snap6 snap7 snap8
创建 snap9 时:
snap2 snap3 snap4 snap5 snap6 snap7 snap8 snap9
(删除 snap1)
9.2 增量存储
- 第一个快照:完整 PDB 副本
- 后续快照:增量(仅变化块)
10. 监控快照
10.1 快照统计
SELECT
con_id,
count(*) AS snapshot_count,
max(snapshot_time) AS last_snapshot
FROM dba_pdb_snapshots
GROUP BY con_id;
10.2 空间使用
SELECT
p.name,
sum(d.bytes)/1024/1024/1024 AS size_gb
FROM v$datafile d, v$pdbs p
WHERE d.con_id = p.con_id
AND d.name LIKE '%snapshot%'
GROUP BY p.name;
11. 常见坑与排错
11.1 ORA-65114: 超过最大快照数
现象:无法创建新快照。
修复:
-- 1. 增加 max_pdb_snapshots
ALTER SYSTEM SET max_pdb_snapshots=16 SCOPE=BOTH;
-- 2. 或删除旧快照
ALTER PLUGGABLE DATABASE hrpdb SNAPSHOT DELETE snap_old;
11.2 快照创建失败
现象:ORA-65115。
修复:
-- 1. 检查存储空间
! df -h
-- 2. 检查 PDB 状态
SELECT name, open_mode FROM v$pdbs WHERE name='HRPDB';
-- 3. PDB 必须处于 READ WRITE
11.3 快照恢复失败
现象:ORA-65160。
修复:
-- 1. 检查 PDB 是否关闭
SELECT name, open_mode FROM v$pdbs WHERE name='HRPDB';
-- 必须 MOUNT
-- 2. 检查快照是否存在
SELECT snapshot_name FROM dba_pdb_snapshots;
11.4 快照路径错误
现象:找不到快照文件。
修复:
-- 1. 检查路径
SELECT full_snapshot_path FROM dba_pdb_snapshots;
-- 2. 检查文件
! ls -l /u01/oradata/orcl/hrpdb/snapshot/
12. 最佳实践
- 关键业务启用快照:快速回滚
- 合理设置间隔:60-240 分钟
- 监控快照空间:dba_pdb_snapshots
- 快照数 8 个:平衡空间与历史
- 测试环境用快照克隆:快速搭建
- 快照恢复谨慎:数据会丢失
- 生产用 19c+:特性完善
- 快照存储独立磁盘:避免争用
- 定期审查快照:清理无用
- 快照替代部分备份:快速恢复
13. 参考资料
[1] Oracle Multitenant Administrator’s Guide 19c, “PDB Snapshot Carousel” https://docs.oracle.com/en/database/oracle/oracle-database/19/multi/pdb-snapshot-carousel.html