ITPub博客

首页 > 数据库 > Oracle > 18C新特性之PDB snapshot Carousel,够用吗?

18C新特性之PDB snapshot Carousel,够用吗?

原创 Oracle 作者:沃趣科技 时间:2018-10-12 09:59:49 0 删除 编辑

| 关于PDB快照Carousel

Oracle18c新特新 pdb snapshot Carousel提供了在pdb级别下手工或者自动生成快照的功能,为开发测试用例提供了便捷。CDB为local undo和归档模式下,指定MAX_PDB_SNAPSHOTS控制pdb最多生成快照的数量,当快照超过最大数量时,会覆盖最旧的快照,我们可以通过快照生成我们想测试使用的相应pdb,下面将带你领略下新特性的优势与劣势。

如下图:pdb1_prod为生产PDB,然后创建refresh PDB pdb1_test_master,让refreshPDB pdb1_test_master每天生成快照。当你需要测试用例时,那么你可以指定snapshot创建PDB。

一个通用的策略是每天在同一时间生成PDB快照。另一种策略是在数据加载之前手动抓取快照。在这两种情况下,都可以从snapshot Carousel中使用任何可用的快照恢复PDB。


1. PDB快照Carousel是如何工作的

数据库按需或自动创建carousel中的连续副本。当达到快照限制时,数据库将覆盖旧的快照。PDB快照的文件存放在文件系统上的物理文件。其不包含数据库归档文件archive log。默认存放在PDB的数据文件相同的目录中。系统自动生成的snapshot以snap_开始,唯一标示结尾的命名规则,包含了快照当前的SCN,并且扩展名为.PDB。


相关视图:MAX_PDB_SNAPSHOTS、DBA_PDB_SNAPSHOTS、DBA_PDBS


|  设置PDB快照的最大数量

使用MAX_PDB_SNAPSHOTS参数设置PDB快照最大快照数,首先登录到需要设置的PDB中,通过视图CDB_PROPERTIES查询当前MAX_PDB_SNAPSHOT值,可以使用alter pluggabledatabase/alter database更改MAX_PDB_SNAPSHOTS值。

如下为设置PDB snapshot的例子

SET LINESIZE 1500
COL CON_ID FORMAT 99999
COL PROPERTY_NAME FORMAT a17
COL PDB_NAME FORMAT a9
COL VALUE FORMAT a12
COL DESCRIPTION FORMAT a90
SELECT r.CON_ID, p.PDB_NAME, PROPERTY_NAME,PROPERTY_VALUE AS 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       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

进入PDB
YAO.CHONG> alter session set container = ORCLPDB;
Session altered.
Elapsed: 00:00:00.01
YAO.CHONG> ALTER PLUGGABLE DATABASE SET MAX_PDB_SNAPSHOTS=7;
Pluggable database altered.


想要删除所有的快照,我们只需要执行下面一条命令即可。

ALTER PLUGGABLE DATABASE SET MAX_PDB_SNAPSHOTS=0;
SET LINESIZE 150
COL CON_NAME FORMAT a10
COL SNAPSHOT_NAME FORMAT a25
COL SNAP_SCN FORMAT 9999999
COL FULL_SNAPSHOT_PATH FORMAT a45
SELECT CON_ID,CON_NAME,SNAPSHOT_NAME,SNAPSHOT_SCN AS snap_scn, FULL_SNAPSHOT_PATH 
FROM  DBA_PDB_SNAPSHOTS
ORDER BY SNAP_SCN;
##都没了


| 配置自动生成PDB快照

默认情况下都是手动生成快照,使用SNAPSHOT MODE EVERY子句自动产生PDB快照。

SELECT SNAPSHOT_MODE "S_MODE", SNAPSHOT_INTERVAL/60 "SNAP_INT_HRS" FROM DBA_PDBS;
S_MODE SNAP_INT_HRS
------ ------------
MANUAL


更改自动创建模式为每24小时自动生成PDB快照

进入PDB里面去执行
YAO.CHONG > alter session set container = ORCLPDB;
Session altered.
Elapsed: 00:00:00.01
YAO.CHONG> ALTER PLUGGABLE DATABASE SNAPSHOT MODE EVERY 24 HOURS;
Pluggable database altered.
Elapsed: 00:00:00.17
#确认自动生成快照的时间间隔
SELECT SNAPSHOT_MODE "S_MODE", SNAPSHOT_INTERVAL/60 "SNAP_INT_HRS" FROM DBA_PDBS;
S_MODE SNAP_INT_HRS
------ ------------
AUTO             24


下面是每2小时生成快照的例子

首先登录到CDB根目录。以下语句从名为cdb1_pdb1的现有PDB创建cdb1_pdb3,并将其配置为每2小时自动获取快照:

CREATE PLUGGABLE DATABASE cdb1_pdb3 FROM cdb1_pdb1
FILE_NAME_CONVERT=('cdb1_pdb1','cdb1_pdb3')
SNAPSHOT MODE EVERY 120 MINUTES;


| 手工创建PDB快照

使用ALTER PLUGGABLE DATABASE/CREATE PLUGGABLE DATABASE手动生成快照。使用ALTER PLUGGABLE DATABASE SNAPSHOT语句需要满足的要求。

  • CDB必须是LOCAL UNDO模式

  • 用户必须有权限创建和删除PDB

YAO.CHONG> ALTER PLUGGABLE DATABASE SNAPSHOT test_snapshot; 
Pluggable database altered.
Elapsed: 00:03:15.66/快照大小481M,3分钟,


下面查询出当前PDB的快照

SET LINESIZE 150
COL CON_NAME FORMAT a10
COL SNAPSHOT_NAME FORMAT a30
COL SNAP_SCN FORMAT 9999999
COL FULL_SNAPSHOT_PATH FORMAT a70
SELECT CON_ID, CON_NAME, SNAPSHOT_NAME,SNAPSHOT_SCN AS snap_scn, FULL_SNAPSHOT_PATH 
FROM DBA_PDB_SNAPSHOTS
ORDER BY SNAP_SCN;
CON_ID CON_NAME   SNAPSHOT_NAME        SNAP_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;
SET LINESIZE 150
COL CON_NAME FORMAT a10
COL SNAPSHOT_NAME FORMAT a25
COL SNAP_SCN FORMAT 9999999
COL FULL_SNAPSHOT_PATH FORMAT a45
SELECT CON_ID, CON_NAME, SNAPSHOT_NAME,SNAPSHOT_SCN AS snap_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


| 删除PDB快照

将MAX_PDB_SNAPSHOTS设置为0,即删除所有PDB快照,同时也关闭此功能。同样也可以使用ALTER PLUGGABLE DATABASE删除当前的快照。

SET LINESIZE 150
COL CON_NAME FORMAT a10
COL SNAPSHOT_NAME FORMAT a25
COL SNAP_SCN FORMAT 9999999
COL FULL_SNAPSHOT_PATH FORMAT a45
SELECT CON_ID,CON_NAME,SNAPSHOT_NAME,SNAPSHOT_SCN AS snap_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    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
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


| 从snapshot创建PDB

alter system set db_create_file_dest ='/home/oradata/ORCL/orclpdb';
conn / as sysdba
YAO.CHONG> create pluggable database pdb_snap_test from orclpdb using snapshot test_snapshot;
Pluggable database created.
Elapsed: 00:00:39.13
YAO.CHONG> show pdbs;
CON_ID CON_NAME              OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
 2 PDB$SEED              READ ONLY  NO
 3 ORCLPDB            READ WRITE NO
 4 PDB_SNAP_TEST          MOUNTED
YAO.CHONG> alter pluggable database PDB_SNAP_TEST open;
Pluggable database altered.
Elapsed: 00:00:09.28
YAO.CHONG> alter pluggable database PDB_SNAP_TEST close;
Pluggable database altered.
Elapsed: 00:00:01.11
YAO.CHONG> drop pluggable database PDB_SNAP_TEST including datafiles;
Pluggable database dropped.
Elapsed: 00:00:00.67


| 基于SCN或时间点生产快照库

在阅读官方文档时,看到生成PDB可以基于SCN,我心中不禁暗喜,当再仔细查阅一番则不然,简直万念俱寂、黯然销魂。提供的基于SCN生成的快照库只能是基于当前生成快照时间点的SCN,似乎有些鸡肋。

create pluggable database pdb_snap_test from orclpdb using snapshot at SCN 3620951;

与recover database until scn指定scn方式打开数据库不同,pdb snapshot Carousel指定scn生成的PDB只能是创建snapshot时的固定scn,并且生成快照与snapshot生成pdb的过程中占据了大量的物理空间与IO资源。

那么问题来了,说了这么多关于PDB snapshot Carousel的优势与好处,是否就说明已经找到了最佳的解决方案呢?

Hold on.

凡事有利也有弊,同样PDB snapshot Carousel也不能幸免。

快照数量受限

虽然能够做到Carousel轮转,但毕竟数量有限,较为死板。在用户的实际测试环境中条件复杂多变,会限制测试环境的搭建.

占据大量物理空间与IO资源

对于当前用户动辄几十T的数据量,在生成snapshot与snapshot创建pdb的过程中,消耗的时间和占据的物理资源是巨大的。

拘泥固定时间点

对于PDBsnapshot Carouse而言,只能基于固定时间,即快照点创建,无法根据测试需要灵活指定时间点。面对不断变化的测试需求,如此死板的模式明显是不可能满足要求的。

版本受限

最后是客观条件的限制,利用新特性需要满足是在18C的环境下且启用了PDB功能,但目前很多用户依然是10G\11G\12C的环境,因此也仅仅只能远观而无法上手,对于实际工作很难产生推动作用。

说到这,是否还有更好的解决办法呢?

答案是必须有!

沃趣科技QBackup数据库备份容灾云平台 ,可基于指定的的任意时间点创建开发测试环境,精确到秒级。是一款集合了CDP备份,历史数据秒极恢复,灾备保护等功能的一体化云平台。

支持主流的Oracle、MySQL数据库,可同时对大量数据库做集中式备份和管理,并对备份进行持续校验以确保数据的可恢复性。此外,QBackup还可用于应用测试、预发布、性能优化、POC等诸多应用场景。


|  作者简介

姚崇·沃趣科技高级数据库技术专家

熟悉Oracle数据库内部机制,丰富的数据库及RAC集群层故障诊断、性能调优、OWI、数据库备份恢复及迁移经验。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28218939/viewspace-2216135/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
杭州沃趣科技股份有限公司创建于2012年(股票代码:839849),是一家专注为企业用户提供基于高性能、高可用、可扩展的开放数据库云平台解决方案的国产厂商。公司创始团队为原阿里巴巴数据库技术团队核心骨干,凭借丰富的研发及运维经验,为行业客户提供数据库云产品及软硬件一体化解决方案。

注册时间:2016-07-18

  • 博文量
    191
  • 访问量
    621999