0
点赞
收藏
分享

微信扫一扫

18c新特性——PDB snapshot Carousel 快照轮转


一、 关于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。

18c新特性——PDB snapshot Carousel 快照轮转_oracle


一个通用的策略是每天在同一时间生成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/

https://docs.oracle.com/en/database/oracle/oracle-database/18/multi/administering-pdb-snapshots.html#GUID-FF6DF540-0C22-451C-80B3-1ACA8C8CB7D2

举报

相关推荐

0 条评论