一、 关于PDB快照轮转
18c新特性PDB快照轮转(Snapshot Carousel)提供了在pdb级别下手工或者自动生成快照的功能。
PDB快照主要有两个作用:
- 通过闪回恢复数据到快照时间点
- 使用快照PDB查询历史数据
CDB需要使用local undo并处于归档模式下。每个PDB快照都会关联一个快照名称,可以在创建时定义也可以由系统自动生成。同时,每个快照也会关联创建时的时间戳和SCN。
每个PDB允许保存的最大快照数由MAX_PDB_SNAPSHOTS属性控制(可用alter database命令修改),最大和默认值均为8。当创建的PDB快照数量超过设置值时,最旧的PDB快照将会被轮转覆盖。如果限制设为0,会删除所有的PDB快照。
如下图:pdb1_prod为生产PDB,创建refresh PDB pdb1_test_master,让refreshPDB pdb1_test_master每天生成快照。当你需要测试用例时,可以指定snapshot创建PDB。
一个通用的策略是每天在同一时间生成PDB快照,另一种策略是在变更之前手动打快照。在这两种情况下,都可以使用可用的快照恢复PDB。
二、 基本用法
PDB快照的文件存放于文件系统上的物理文件,默认存放在PDB的数据文件相同的目录中,其不包含数据库归档文件archive log。相关视图:MAX_PDB_SNAPSHOTS、DBA_PDB_SNAPSHOTS、DBA_PDBS
PDB创建时默认开启快照功能,可以通过两种方式对PDB快照进行定义:
1. 手工方式
指定snapshot mode manual子句手工创建pdb快照
create pluggable database pdb1 snapshot mode manual;
2. 自动方式
默认情况下都是手动生成快照,可使用以下语句查看
SELECT SNAPSHOT_MODE,SNAPSHOT_INTERVAL/60 FROM DBA_PDBS;
SNAPSHOT_MODE SNAPSHOT_INTERVAL/60
------ ------------
MANUAL
使用SNAPSHOT MODE EVERY子句自动产生PDB快照,例如设置为每24小时生成PDB快照
alter session set container=ORCLPDB;
ALTER PLUGGABLE DATABASE SNAPSHOT MODE EVERY 24 HOURS;
-- 确认自动生成快照的时间间隔
SELECT SNAPSHOT_MODE,SNAPSHOT_INTERVAL/60 FROM DBA_PDBS;
SNAPSHOT_MODE SNAPSHOT_INTERVAL/60
------ ------------
AUTO 24
当时间量以分钟表示时,指定值必须小于3000;当时间量以小时表示时,指定值不能超过2000。
系统自动生成的snapshot以snap_开始,唯一标示结尾的命名规则,包含了快照当前的SCN,且扩展名为.PDB。
3. 查询当前PDB快照
SELECT CON_ID,CON_NAME,SNAPSHOT_NAME,SNAPSHOT_SCN,FULL_SNAPSHOT_PATH
FROM DBA_PDB_SNAPSHOTS
ORDER BY SNAP_SCN;
CON_ID CON_NAME SNAPSHOT_NAME SNAPSHOT_SCN FULL_SNAPSHOT_PATH
------- ---------- -------------------- -------- ---------------------------------------------
3 CDB1_PDB1 CDB1_PDB1_B4WEDLOAD 2962078 /disk1/oracle/dbs/snap_3489077498_2962078.pdb
3 CDB1_PDB1 CDB1_PDB1_AFWEDLOAD 2962938 /disk1/oracle/dbs/snap_3489077498_2962938.pdb
如果未指定快照名,系统会自动生成唯一名称的快照
ALTER PLUGGABLE DATABASE SNAPSHOT;
SELECT CON_ID,CON_NAME,SNAPSHOT_NAME,SNAPSHOT_SCN,FULL_SNAPSHOT_PATH
FROM DBA_PDB_SNAPSHOTS
ORDER BY SNAP_SCN;
CON_ID CON_NAME SNAPSHOT_NAME SNAP_SCN FULL_SNAPSHOT_PATH
---------- ---------- ------------------------- -------- ----------------------------------------------------
3 ORCLPDB SNAP_3034367141_987737800 2995234 /home/oradata/ORCL/orclpdb/snap_3034367141_2995234.pdb
4. 利用快照创建新PDB
PDB快照创建完成后,可以利用其创建新的PDB。使用的PDB快照可通过快照名称、快照SCN或者快照时间戳来指定。
从快照名创建PDB
create pluggable database pdb1_day_1 from pdb1 using snapshot <snapshot_name>;
基于SCN或时间点生产快照库
create pluggable database pdb1_day_2 from pdb1 using snapshot at scn <snapshot_SCN>;
与recover database until scn指定scn方式打开数据库不同,快照轮转只能指定创建快照时的scn,并且生成快照与利用快照创建pdb的时可能占据大量的物理空间与IO资源。
5. PDB快照用于对PDB的闪回
在出现用户错误或其他极端情况时,还可用于对PDB的闪回。实施步骤如下:
- 关闭PDB1
- 从指定PDB快照创建新的PDB
- 删除PDB1
- 重命名新的PDB为PDB1
- 打开PDB1
6. 设置PDB快照的最大数量
使用MAX_PDB_SNAPSHOTS设置PDB最大快照数。登录到需要设置的PDB中,通过视图CDB_PROPERTIES查询当前设置值,可以使用alter pluggabledatabase或alter database更改MAX_PDB_SNAPSHOTS值。
SELECT r.CON_ID,p.PDB_NAME,PROPERTY_NAME,PROPERTY_VALUE,DESCRIPTION
FROM CDB_PROPERTIES r,CDB_PDBS p
WHERE r.CON_ID = p.CON_ID AND PROPERTY_NAME LIKE 'MAX_PDB%'
ORDER BY PROPERTY_NAME;
CON_ID PDB_NAME PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
----- --------- ----------------- --------- ---------------------------------------------------------------
3 ORCLPDB MAX_PDB_SNAPSHOTS 7 maximum number of snapshots for a given PDB
3 ORCLPDB MAX_PDB_STORAGE UNLIMITED Maximum Space Usage of Datafiles and Local Tempfiles in Container
下面语句将当前pdb的快照数设置为7
alter session set container=ORCLPDB;
ALTER PLUGGABLE DATABASE SET MAX_PDB_SNAPSHOTS=7;
7. 删除快照
将MAX_PDB_SNAPSHOTS设置为0即可删除所有PDB快照,同时也关闭此功能。
ALTER PLUGGABLE DATABASE SET MAX_PDB_SNAPSHOTS=0;
SELECT CON_ID,CON_NAME,SNAPSHOT_NAME,SNAPSHOT_SCN,FULL_SNAPSHOT_PATH FROM DBA_PDB_SNAPSHOTS ORDER BY SNAPSHOT_SCN;
也可以使用ALTER PLUGGABLE DATABASE删除指定快照。
SELECT CON_ID,CON_NAME,SNAPSHOT_NAME,SNAPSHOT_SCN,FULL_SNAPSHOT_PATH FROM DBA_PDB_SNAPSHOTS ORDER BY SNAPSHOT_SCN;
CON_ID CON_NAME SNAPSHOT_NAME SNAP_SCN FULL_SNAPSHOT_PATH
---------- ---------- ------------------------- -------- -----------------------------------------------------
3 ORCLPDB CDB_CNDBA_20180813151200 2970060 /home/oradata/ORCL/orclpdb/snap_3034367141_2970060.pdb
3 ORCLPDB SNAP_3034367141_987737800 2995234 /home/oradata/ORCL/orclpdb/snap_3034367141_2995234.pdb
-- 删除指定PDB快照
ALTER PLUGGABLE DATABASE DROP SNAPSHOT CDB_CNDBA_20180813151200;
-- 再次查询PDB快照已经被删除
CON_ID CON_NAME SNAPSHOT_NAME SNAP_SCN FULL_SNAPSHOT_PATH
---------- ---------- ------------------------- -------- ---------------------------------------------------
3 ORCLPDB SNAP_3034367141_987737800 2995234 /home/oradata/ORCL/orclpdb/snap_3034367141_2995234.pdb
三、 快照轮转的缺点
1. 快照数量受限
虽然能够做到轮转,但毕竟数量有限,较为死板。在用户的实际测试环境中条件复杂多变,会限制测试环境的搭建。
2. 占据大量物理空间与IO资源
对于当前用户动辄几十T的数据量,在生成快照与用快照创建pdb的过程中,消耗的时间和占据的物理资源是巨大的。
3. 拘泥固定时间点
只能基于固定时间,即快照点创建,无法根据测试需要灵活指定时间点。面对不断变化的测试需求,如此死板的模式明显是不可能满足要求的。
4. 版本受限
最后是客观条件的限制,利用新特性需要在18c环境且启用了PDB功能,但目前很多用户依然是12.2及以下的环境,因此也仅仅只能远观而无法上手,对于实际工作很难产生推动作用。
参考
http://blog.itpub.net/26736162/viewspace-2653421/
标签:18c,SCN,快照,NAME,SNAPSHOT,snapshot,PDB,CON From: https://blog.51cto.com/u_13631369/6203186