Oracle 18C新特性之PDB snapshot Carousel--PDB快照轮播

0    44    1

👉 本文共约11417个字,系统预计阅读时间或需43分钟。

| 关于PDB快照 Carousel

Oracle18c新特新 pdb snapshot Carousel( PDB快照轮播(Snapshot Carousel) )提供了在pdb级别下手工或者自动生成快照的功能,为开发测试用例提供了便捷。CDB为local undo和归档模式下,指定MAX_PDB_SNAPSHOTS控制pdb最多生成快照的数量,当快照超过最大数量时,会覆盖最旧的快照。

在Oracle 18c数据库中,创建PDB时可以同时为PDB创建快照,完整的保存快照创建时间点的PDB数据。PDB快照主要有两个作用:

通过闪回恢复数据到快照时间点

使用快照PDB查询历史数据

每个PDB快照都会关联一个快照名称,可以在创建时定义也可以由系统自动生成。同时,每个快照也会关联创建时的时间戳和SCN。每个PDB允许保存的最大PDB快照数量由MAX_PDB_SNAPSHOTS属性控制,最大和默认值均为8。当创建的PDB快照数量超过定义时,最先创建的PDB快照将会被删除。使用alter database命令可以修改最大允许的PDB快照数量,如果将限制设为0,则会删除所有的PDB快照。

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

img

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

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

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

img

相关视图:MAX_PDB_SNAPSHOTS、DBA_PDB_SNAPSHOTS、DBA_PDBS

PDB创建时默认开始快照功能,可以通过两种方式对PDB快照进行定义:

\1. 手工方式

创建或修改PDB是指定snapshot mode manual字句,这是PDB创建时的默认行为

create pluggable database pdb1 snapshot mode manual;

\2. 定义一个自动创建的时间周期

alter pluggable database pdb1 snapshot mode every 24 hours;

当时间量以分钟表示时,指定值必须小于3000;当时间量以小时表示时,指定值不能超过2000。

PDB快照创建完成后,可以利用其创建新的PDB。使用的PDB快照可通过快照名称、快照SCN或者快照时间戳来指定。

create pluggable database pdb1_day_1 from pdb1 using snapshot ;

create pluggable database pdb1_day_2 from pdb1 using snapshot at scn ;

在出现用户错误或其他极端情况时,PDB快照还可用于对PDB的闪回。实施步骤如下:

  1. 关闭PDB1
  2. 从指定PDB快照创建新的PDB
  3. 删除PDB1
  4. 重命名新的PDB为PDB1
  5. 打开PDB1

| 设置PDB快照的最大数量

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

如下为设置PDB snapshot的例子

下面语句将当前pdb的快照数设置为7

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

| 配置自动生成PDB快照

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

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


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

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

| 手工创建PDB快照

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

  • CDB必须是LOCAL UNDO模式
  • 用户必须有权限创建和删除PDB

下面查询出当前PDB的快照

如果你不指定快照名,系统自动生成唯一名称的快照,下面即为不指定名字创建快照

| 删除PDB快照

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

| 从snapshot创建PDB

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

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

与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的环境,因此也仅仅只能远观而无法上手,对于实际工作很难产生推动作用。

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

答案是必须有!

16 Administering a PDB Snapshot Carousel

您可以为指定的PDB配置一个PDB快照库,手动或自动创建快照,并设置快照的最大数量。

This section contains the following topics:

Parent topic: Administering a Multitenant Environment

16.1 About PDB Snapshot Carousel

PDB快照是PDB的时间点副本。您可以使用create PLUGGABLE DATABASE(或ALTER PLUGGABLE DATABASE)的SNAPSHOT子句手动创建快照,也可以使用each interval子句自动创建快照

. A PDB snapshot carousel 快照库.

This section contains the following topics:

Parent topic: Administering a PDB Snapshot Carousel

16.1.1 Purpose of PDB Snapshot Carousel

PDB快照库是维护最近的PDB副本库以便进行时间点恢复和克隆的一种有用方法。
克隆用于开发和测试的PDBs

在一个典型的开发用例中,您克隆一个产品PDB来进行测试。当CDB处于ARCHIVELOG模式和本地撤销模式时,源生产PDB可以以读/写模式打开,并在操作过程中充分发挥功能。这种技术被称为热克隆。当SCN完成时,热克隆在事务上与源PDB一致of the ALTER PLUGGABLE DATABASE ... OPEN statement.

例如,当名为pdb1_prod的生产PDB处于打开状态并正在使用时,您将创建一个名为pdb1_test_master的可刷新克隆。然后配置pdb1_test_master来每天创建自动快照。当您需要新的PDBs进行测试时,请创建任何快照的完整克隆,然后使用 CREATE PLUGGABLE DATABASE ... SNAPSHOT COPY .

下图显示了从4月5日拍摄的PDB快照创建的克隆pdb1_test_full1。图中显示了从pdb1_test_full1创建的三个PDBs快照副本。

Figure 16-1 Automatic Snapshots of a Refreshable Clone PDB

Description of Figure 16-1 follows
Description of "Figure 16-1 Automatic Snapshots of a Refreshable Clone PDB"

使用PDB快照库进行时间点恢复

典型的策略是每天在同一时间对PDB进行快照。另一种策略是在数据加载之前手动进行快照。在这两种情况下,PDB快照库都允许您使用任何可用快照恢复PDB。

例如,名为pdb1_prod的销售历史记录PDB每天在12:01生成一个自动快照。在4/9周一下午的daily data load中,您意外加载了错误的数据,损坏了PDB。您可以基于Monday 4/9快照创建一个新的生产PDB,删除损坏的PDB,然后重试数据加载。

Figure 16-2 Restore a Production PDB Using a Snapshot

Description of Figure 16-2 follows
Description of "Figure 16-2 Restore a Production PDB Using a Snapshot"

See Also:

Parent topic: About PDB Snapshot Carousel

16.1.2 How PDB Snapshot Carousel Works

The carousel 对于特定的PDB,是该PDB的一个循环复制库。

数据库根据需要或自动地在库中创建连续的副本。当达到快照限制时,数据库将重写最旧的快照。

This section includes the following topics:

Parent topic: About PDB Snapshot Carousel

16.1.2.1 Contents of a PDB Snapshot

PDB快照的数据文件驻留在文件系统上的归档文件中。
不包括存档的重做日志文件。通常,归档文件存储在与PDB的数据文件相同的目录中。对于系统生成的快照名称,snap_以惟一标识符为前缀,该标识符包含快照SCN。该归档文件的扩展名是.pdb。

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

数据库使用隐式的using snapshot子句获取快照。在使用创建可插入数据库快照获取快照时,不能指定快照复制子句。

Note:

使用USING snapshot子句创建的PDB快照和使用snapshot copy子句创建的快照复制PDB是两种不同类型的快照,它们不应该混淆。USING SNAPSHOT子句创建一个不需要物化的完整PDB。快照复制子句创建了一个稀疏的PDB,如果您想删除它所基于的PDB快照,就必须将其物化。

虽然PDB快照carousel中的快照始终是完整的PDB,但是您可以在carousel中获取快照的快照副本。在这种情况下,快照副本是一个稀疏克隆。

See Also:

" How a Snapshot Copy PDB Differs from a Standard Clone "

Parent topic: How PDB Snapshot Carousel Works

16.1.2.2 Contents of a PDB Snapshot Carousel

PDB快照库是一个PDB的所有现有快照的集合。
max_pdb_snapshot属性指定库中允许的最大快照数量。当前设置在CDB_PROPERTIES视图中是可见的。

下图显示了cdb1_pdb1的库。在本例中,数据库每24小时自动获取一个快照,维护一组8个快照。创建了前8个快照之后,每个新快照都会替换旧快照。例如,星期二4/10快照替换星期一4/2快照;星期三4/11快照取代星期二4/3快照;等等。

Figure 16-3 PDB Snapshot Carousel

Description of Figure 16-3 follows
Description of "Figure 16-3 PDB Snapshot Carousel"

Parent topic: How PDB Snapshot Carousel Works

16.1.3 User Interface for PDB Snapshot Carousel

The SNAPSHOT MODE clause controls creation of snapshots, and determines whether creation is manual, automatic, or disabled.

CREATE PLUGGABLE DATABASE Statement

要为PDB设置快照模式,请在快照模式中使用以下值之一 clause of ALTER PLUGGABLE DATABASE or CREATE PLUGGABLE DATABASE :

  • MANUAL

    This clause, which is the default, enables the creation of manual snapshots of the PDB. To create a snapshot on demand, specify the SNAPSHOT snapshot_name clause in an ALTER PLUGGABLE DATABASE or CREATE PLUGGABLE DATABASE statement.

  • EVERY snapshot_interval [MINUTES|HOURS]

    This clause enables the automatic creation of snapshots after an interval of time. The following restrictions apply to the interval specified:

    • The minutes value must be less than 3000 .
    • The hours value must be less than 2000 .

    The database assigns each automatic snapshot a system-generated name. Note that manual snapshots are also supported for the PDB when EVERY is specified.

  • NONE

    This clause disables snapshot creation for the PDB.

See Also:

MAX_PDB_SNAPSHOTS Database Property

要设置PDB的最大快照数量,请在ALTER PLUGGABLE DATABASE或CREATE PLUGGABLE DATABASE中指定max_pdb_snapshot属性。属性的默认值是8,这也是最大值。当创建了允许的最大快照数量时,数据库将清除最旧的快照。CDB_PROPERTIES视图显示了max_pdb_snapshot的设置。

See Also:

Oracle Database SQL Language Reference for the syntax of the ALTER PLUGGABLE DATABASE statement

DBA_PDB_SNAPSHOTS and DBA_PDBS

The following data dictionary views provide snapshot information:

  • The DBA_PDB_SNAPSHOTS view metadata about the snapshots, including name, creation SCN, creation time, and file name.
  • The DBA_PDBS view has a SNAPSHOT_MODE and SNAPSHOT_INTERVAL column.

See Also:

Oracle Database Reference to learn about DBA_PDB_SNAPSHOTS and DBA_PDBS

Parent topic: About PDB Snapshot Carousel

16.2 Setting the Maximum Number of Snapshots in a PDB Snapshot Carousel

You can set the maximum number of PDB snapshots for a PDB.

max_pdb_snapshot数据库属性设置PDB快照旋转木马中每个PDB的最大快照数量。默认最大值是8。不能将属性设置为大于8的数字。

Prerequisites

The PDB must be open in read/write mode.

To set the maximum number of PDB snapshots for a PDB:

  1. In SQL*Plus, ensure that the current container is the PDB for which you want to set the limit.
  2. Optionally, query CDB_PROPERTIES for the current setting of the SET MAX_PDB_SNAPSHOTS property.
  3. Run an ALTER PLUGGABLE DATABASE or ALTER DATABASE statement with the SET MAX_PDB_SNAPSHOTS clause.

Example 16-1 Setting the Maximum Number of PDB Snapshots for a PDB

The following query shows the maximum in the carousel for cdb1_pdb1 (sample output included):

The following SQL statement sets the maximum number of PDB snapshots for the current PDB to 7:

Example 16-2 Dropping All Snapshots in a PDB Snapshot Carousel

To drop all snapshots in a PDB snapshot carousel, set the MAX_PDB_SNAPSHOTS database property to `` (zero), as shown in the following statement:

This technique is faster than executing ALTER PLUGGABLE DATABASE ... DROP SNAPSHOTsnapshot_name for every snapshot.

See Also:

" About Container Access in a CDB "

Parent topic: Administering a PDB Snapshot Carousel

16.3 Configuring Automatic PDB Snapshots

在创建或更改PDB时,通过使用快照模式EVERY子句为自动快照配置PDB。
默认情况下,PDB是为手动快照配置的。

Prerequisites

Note the following prerequisites for the ALTER PLUGGABLE DATABASE SNAPSHOT statement:

  • The CDB must be in local undo mode.
  • The administrator must have the privileges to create a PDB and drop a PDB.

To configure automatic snapshots when altering a PDB:

  1. In SQL*Plus, log in as an administrator to the PDB whose snapshot mode you intend to configure.
  2. Optionally, query DBA_PDBS to determine the current snapshot mode.
  3. Run ALTER PLUGGABLE DATABASE with the SNAPSHOT MODE EVERY interval clause, specifying either MINUTES or HOURS .

To configure automatic snapshots when creating a PDB:

  1. In SQL*Plus, log in as an administrator to the CDB root or application root.
  2. Optionally, query DBA_PDBS to determine the current snapshot mode.
  3. Run CREATE PLUGGABLE DATABASE with the SNAPSHOT MODE EVERY interval clause, specifying either MINUTES or HOURS .

Example 16-3 为现有PDB每天配置一个自动快照

本例假设您已登录到要更改其快照模式的PDB。查询数据字典,确认PDB目前处于手动模式(包括示例输出):

Change the snapshot mode to every 24 hours:

Confirm the change to automatic mode:

Example 16-4 Creating a PDB That Takes Snapshots Every Two Hours

This example assumes that you are logged in to the CDB root. The following statement creates cdb1_pdb3 from an existing PDB named cdb1_pdb1 , and configures it to take snapshots automatically every 2 hours:

See Also:

Parent topic: Administering a PDB Snapshot Carousel

16.4 Creating PDB Snapshots Manually

To create a PDB snapshot manually, specify the SNAPSHOT snapshot_name clause in ALTER PLUGGABLE DATABASE or CREATE PLUGGABLE DATABASE .

Prerequisites

Note the following prerequisites for the ALTER PLUGGABLE DATABASE SNAPSHOT statement:

  • The CDB must be in local undo mode.
  • The administrator must have the privileges to create a PDB and drop a PDB.

To create a PDB snapshot:

  1. In SQL*Plus, log in as an administrator to the PDB whose snapshot you intend to create.
  2. Optionally, query DBA_PDBS to confirm that the snapshot mode is not set to NONE .
  3. Run an ALTER PLUGGABLE DATABASE statement with the SNAPSHOT clause.

Example 16-5 Creating a Snapshot with a User-Specified Name

以下SQL语句创建两个cdb1_pdb1的PDB快照,一个在周三数据加载之前,一个在周三数据加载之后:

The following query of DBA_PDB_SNAPSHOTS shows the locations of two snapshots of the PDB named cdb1_pdb1 (sample output included):

If you do not specify a PDB snapshot name, then the database generates a unique name.

Example 16-6 创建具有系统指定名称的快照

下面的SQL语句创建一个快照,但没有指定名称:

The following sample query shows that the database assigned the snapshot a name prefixed with SNAP_ :

See Also:

Parent topic: Administering a PDB Snapshot Carousel

16.5 Dropping a PDB Snapshot

You can drop a PDB snapshot by running an ALTER PLUGGABLE DATABASE statement with the DROP SNAPSHOT clause.

To drop all PDB snapshots based on a PDB, set the MAX_PDB_SNAPSHOTS property in the PDB to ``(zero).

To drop a PDB snapshot:

  1. In SQL*Plus, ensure that the current container is the PDB from which you created the PDB snapshot.
  2. Run an ALTER PLUGGABLE DATABASE statement with the DROP SNAPSHOT clause.

Example 16-7 Dropping a PDB Snapshot

The following SQL statement drops a PDB snapshot named sales_snap :

See Also:

" About Container Access in a CDB "

Parent topic: Administering a PDB Snapshot Carousel

ORACLE 18C新特性-PDB快照轮播(SNAPSHOT CAROUSEL)

版权声明:本文为Buddy Yuan原创文章,未经允许不得转载。原文地址:
Oracle 18c推出的一个新功能就是PDB快照轮播,最多可以创建8个pdb的快照,而这8个构成的一组快照就被称作快照轮播。当达到第8个快照限制时,新的快照就会覆盖最旧的快照,就像redo log一样。PDB的快照主要作用是当出现了问题可以闪回到快照的时间点,另一个功能是基于快照来查询历史数据。

默认情况下是手动创建快照,我们可以把它改成自动创建。

要返回手动模式,输入mode manual即可。

手动创建快照,可以自己指定名字,也可以使用系统自动生成的名字。通过查看DBA_PDB_SNAPSHOTS视图,可以找到快照存放的路径及创建快照的SCN号。

如果要删除快照,则有两种方法,第一种就是使用alter pluggable database删除,第二种是修改max_pdb_snapshots参数,当max_pdb_snapshots参数设置成0时,将删除全部快照。

演示了上述功能之后,还有一个功能,就是我们可以根据快照创建pdb。

这样我们就根据快照创建了一个新的PDB,假设当前PDB出现了数据覆盖,我们就可以使用这个历史快照的PDB来恢复数据。
当然还有一个很好用的功能就是我们在创建pdb的过程中把他设置成15分钟产生一个快照。当然配置这个功能有一个先决条件:CDB必须处于本地undo模式.

可以看到每隔5分钟自动创建一个快照

我们可以做个实验测试一下。在生成快照之前创建一个表插入点数据,这里上一次快照是23:43分。

23点48分产生了新的快照,此时我们使用新的快照做一个克隆,登陆到ORCLPDB4数据库后,我们会发现是有数据的。

这个功能对于测试人员非常有用,例如移动电信现在有BCV环境,专门用于经分抽数及测试,而这个BCV环境是底层同步的一个克隆。使用18c数据库,我们就可以直接创建快照,然后使用快照克隆一个新数据库形成BCV环境给经分抽数及测试使用了。

18c的新特性快照轮播不能创建在ASM中--ORA-17517

若PDB 的数据文件存储在 18c 、 19c 的非 ASM 存储中,则可以正常使用,但是若 PDB 的数据文件存储在 18c 、 19c 的 ASM 中,则创建快照会报错 ORA-17517 ,目前无解

SYS@lhr19cdb> alter pluggable database snapshot test_snapshot;

alter pluggable database snapshot test_snapshot

*

ERROR at line 1:

ORA-00604: error occurred at recursive SQL level 1

ORA-65169: error encountered while attempting to copy file +DATA/LHR19CDB/A2ED06838339ABB0E053343BA8C0289C/DATAFILE/undotbs1.270.1037379889

ORA-17517: Database cloning using storage snapshot failed on file 8:+DATA/LHR19CDB/A2ED06838339ABB0E053343BA8C0289C/DATAFILE/undotbs1.270.1037379889

Create PDB From Snapshot Copy Throws ORA-65169/ORA-17525 Errors (Doc ID 2084589.1)


In this Document

Symptoms
Cause
Solution
References

APPLIES TO:

Oracle Database Cloud Schema Service - Version N/A and later
Oracle Database Exadata Cloud Machine - Version N/A and later
Oracle Database Exadata Express Cloud Service - Version N/A and later
Oracle Cloud Infrastructure - Database Service - Version N/A and later
Oracle Database Cloud Exadata Service - Version N/A and later
Information in this document applies to any platform.

SYMPTOMS

On 12c database, create pdb from snapshot copy throws ora-65169/ora-17525 errors :

create pluggable database pclone1 from pclone snapshot copy file_name_convert=('/oradata/testclone/datafile/o1_mf_systemc5bocwh0.dbf','/oradata/testclone2/system01.dbf','/oradata/testclone/datafile/o1_mf_sysauxc5bocwh3.dbf','/oradata/testclone2/sysaux01.dbf','/oradata/testclone/datafile/o1_mf_usersc5bocwh5.dbf','/oradata/testclone2/users01.dbf','/oradata/testclone/datafile/o1_mf_tempc5bocwh5.dbf','/oradata/testclone2/temp01.dbf')
*
ERROR at line 1:
ORA-65169: error encountered while attempting to copy file
/oradata/testclone/datafile/o1_mf_syst
emc5bocwh0.dbf
ORA-17525: Database clone using storage snapshot not supported on file
/oradata/testclone/datafile/o1_mf_syst
emc5bocwh0.dbf

CAUSE

\1. The storage does not support file snapshots.
\2. clonedb was not set .

SOLUTION

The ORA-17525 error is thrown because the storage does not support file snapshots. Use a compatible storage.

Or)

Set clonedb=TRUE

SQL> alter system set clonedb=true scope=spfile;

Then restart database


标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

3 − 2 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部