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

Oracle 18C新特性之PDB snapshot Carousel(快照輪播)

 

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

 

 

| 關於PDB快照 Carousel面試

Oracle18c新特新 pdb snapshot Carousel( PDB快照輪播(Snapshot Carousel) )提供了在pdb級別下手工或者自動生成快照的功能,爲開發測試用例提供了便捷。CDB爲local undo和歸檔模式下,指定MAX_PDB_SNAPSHOTS控制pdb最多生成快照的數量,當快照超過最大數量時,會覆蓋最舊的快照。sql

 

在Oracle 18c數據庫中,建立PDB時能夠同時爲PDB建立快照,完整的保存快照建立時間點的PDB數據。PDB快照主要有兩個做用:數據庫

經過閃回恢復數據到快照時間點網絡

使用快照PDB查詢歷史數據session

 

每一個PDB快照都會關聯一個快照名稱,能夠在建立時定義也能夠由系統自動生成。同時,每一個快照也會關聯建立時的時間戳和SCN。每一個PDB容許保存的最大PDB快照數量由MAX_PDB_SNAPSHOTS屬性控制,最大和默認值均爲8。當建立的PDB快照數量超過定義時,最早建立的PDB快照將會被刪除。使用alter database命令能夠修改最大容許的PDB快照數量,若是將限制設爲0,則會刪除全部的PDB快照。oracle

 


 

以下圖:pdb1_prod爲生產PDB,而後建立refresh PDB pdb1_test_master,讓refreshPDB pdb1_test_master天天生成快照。當你須要測試用例時,那麼你能夠指定snapshot建立PDB。app

一個通用的策略是天天在同一時間生成PDB快照。另外一種策略是在數據加載以前手動抓取快照。在這兩種狀況下,均可以從snapshot Carousel中使用任何可用的快照恢復PDB。less

 

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

數據庫按需或自動建立carousel中的連續副本。當達到快照限制時,數據庫將覆蓋舊的快照。PDB快照的文件存放在文件系統上的物理文件。其不包含數據庫歸檔文件archive log。默認存放在PDB的數據文件相同的目錄中。系統自動生成的snapshot以snap_開始,惟一標示結尾的命名規則,包含了快照當前的SCN,而且擴展名爲.PDB。ide

 

相關視圖: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 <snapshot_name>;

create pluggable database pdb1_day_2 from pdb1 using snapshot at scn <snapshot_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的例子

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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

1

2

3

4

5

6

進入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.

 

想要刪除全部的快照,咱們只須要執行下面一條命令便可。   

1

2

3

4

5

6

7

8

9

10

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快照。

1

2

3

4

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

S_MODE SNAP_INT_HRS

------ ------------

MANUAL

 

更改自動建立模式爲每24小時自動生成PDB快照

1

2

3

4

5

6

7

8

9

10

11

12

進入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小時自動獲取快照:

1

2

3

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

1

2

3

YAO.CHONG>   ALTER     PLUGGABLE   DATABASE     SNAPSHOT test_snapshot; 

Pluggable   database     altered.

Elapsed: 00:03:15.66/快照大小481M,3分鐘,

 

下面查詢出當前PDB的快照   

1

2

3

4

5

6

7

8

9

10

11

12

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

 

若是你不指定快照名,系統自動生成惟一名稱的快照,下面即爲不指定名字建立快照

1

2

3

4

5

6

7

8

9

10

11

12

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刪除當前的快照。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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,彷佛有些雞肋。

1

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的環境,所以也僅僅只能遠觀而沒法上手,對於實際工做很難產生推進做用。

說到這,是否還有更好的解決辦法呢?

答案是必須有!

 

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。

數據庫使用隱式的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 database assigns each automatic snapshot a system-generated name. Note that manual snapshots are also supported for the PDB when  EVERY  is specified.

    • The minutes value must be less than  3000 .

    • The hours value must be less than  2000 .

  • 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):

SET LINESIZE 150COL CON_ID FORMAT 99999COL PROPERTY_NAME FORMAT a17COL PDB_NAME FORMAT a9COL VALUE FORMAT a3COL DESCRIPTION FORMAT a43SELECT r.CON_ID, p.PDB_NAME, PROPERTY_NAME,PROPERTY_VALUE AS value, DESCRIPTIONFROM   CDB_PROPERTIES r, CDB_PDBS pWHERE  r.CON_ID = p.CON_IDAND    PROPERTY_NAME LIKE 'MAX_PDB%' ORDER BY PROPERTY_NAME;CON_ID PDB_NAME  PROPERTY_NAME     VAL DESCRIPTION------ --------- ----------------- --- -------------------------------------------3 CDB1_PDB1 MAX_PDB_SNAPSHOTS 8   maximum number of snapshots for a given PDB

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

ALTER PLUGGABLE DATABASE SET MAX_PDB_SNAPSHOTS=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:

ALTER PLUGGABLE DATABASE SET MAX_PDB_SNAPSHOTS=0;

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目前處於手動模式(包括示例輸出):

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

Change the snapshot mode to every 24 hours:

ALTER PLUGGABLE DATABASE SNAPSHOT MODE EVERY 24 HOURS;

Confirm the change to automatic mode:

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

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:

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

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快照,一個在週三數據加載以前,一個在週三數據加載以後:

ALTER PLUGGABLE DATABASE SNAPSHOT cdb1_pdb1_b4wedload;-- data loadALTER PLUGGABLE DATABASE SNAPSHOT cdb1_pdb1_afwedload;

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

SET LINESIZE 150COL CON_NAME FORMAT a10COL SNAPSHOT_NAME FORMAT a20COL SNAP_SCN FORMAT 9999999COL FULL_SNAPSHOT_PATH FORMAT a45SELECT CON_ID, CON_NAME, SNAPSHOT_NAME,SNAPSHOT_SCN AS snap_scn, FULL_SNAPSHOT_PATHFROM   DBA_PDB_SNAPSHOTSORDER 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.pdb3 CDB1_PDB1  CDB1_PDB1_AFWEDLOAD   2962938 /disk1/oracle/dbs/snap_3489077498_2962938.pdb

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

Example 16-6 建立具備系統指定名稱的快照

下面的SQL語句建立一個快照,但沒有指定名稱:

ALTER PLUGGABLE DATABASE SNAPSHOT;

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

SET LINESIZE 150COL CON_NAME FORMAT a10COL SNAPSHOT_NAME FORMAT a25COL SNAP_SCN FORMAT 9999999COL FULL_SNAPSHOT_PATH FORMAT a45SELECT CON_ID, CON_NAME, SNAPSHOT_NAME,SNAPSHOT_SCN AS snap_scn, FULL_SNAPSHOT_PATHFROM   DBA_PDB_SNAPSHOTSORDER 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.pdb3 CDB1_PDB1  CDB1_PDB1_AFWEDLOAD        2962938 /disk1/oracle/dbs/snap_3489077498_2962938.pdb3 CDB1_PDB1  SNAP_3489077498_960130367  2993525 /disk1/oracle/dbs/snap_3489077498_2993525.pdb

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 :

ALTER PLUGGABLE DATABASE DROP SNAPSHOT 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快照輪播(Snapshot Carousel) 
Oracle 18c推出的一個新功能就是PDB快照輪播,最多能夠建立8個pdb的快照,而這8個構成的一組快照就被稱做快照輪播。當達到第8個快照限制時,新的快照就會覆蓋最舊的快照,就像redo log同樣。PDB的快照主要做用是當出現了問題能夠閃回到快照的時間點,另外一個功能是基於快照來查詢歷史數據。

<span style="color:#444444"><span style="color:#222222">SQL> SELECT r.CON_ID, p.PDB_NAME, PROPERTY_NAME,
  2      PROPERTY_VALUE AS value, DESCRIPTION
  3      FROM   CDB_PROPERTIES r, CDB_PDBS p
  4      WHERE  r.CON_ID = p.CON_ID
  5      AND    PROPERTY_NAME LIKE 'MAX_PDB%'
  6      AND    description like 'maximum%'
  7      ORDER BY PROPERTY_NAME;
    CON_ID PDB_NAME             PROPERTY_NAME        VALUE                DESCRIPTION
---------- -------------------- -------------------- -------------------- ----------------------------------------------------------------------
         3 ORCLPDB1             MAX_PDB_SNAPSHOTS    8                    maximum number of snapshots for a given PDB
</span></span>

默認狀況下是手動建立快照,咱們能夠把它改爲自動建立。

<span style="color:#444444"><span style="color:#222222">SQL> select snapshot_mode,snapshot_interval/60 from dba_pdbs;
SNAPSH SNAPSHOT_INTERVAL/60
------ --------------------
MANUAL
SQL> alter pluggable database snapshot mode every 4 hours;
Pluggable database altered.
SQL> select snapshot_mode,snapshot_interval/60 from dba_pdbs;
SNAPSH SNAPSHOT_INTERVAL/60
------ --------------------
AUTO                      4
</span></span>

要返回手動模式,輸入mode manual便可。

<span style="color:#444444"><span style="color:#222222">SQL> alter pluggable database snapshot mode manual;
Pluggable database altered.
SQL> alter pluggable database snapshot;
Pluggable database altered.
</span></span>

手動建立快照,能夠本身指定名字,也可使用系統自動生成的名字。經過查看DBA_PDB_SNAPSHOTS視圖,能夠找到快照存放的路徑及建立快照的SCN號。

<span style="color:#444444"><span style="color:#222222">SQL> 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 ORCLPDB1             SNAP_2953839490_989014667    2821702 /opt/oracle/oradata/ORCLCDB/ORCLPDB1/snap_2953839490_2821702.pdb
         3 ORCLPDB1             PDB_SNAP                     2823303 /opt/oracle/oradata/ORCLCDB/ORCLPDB1/snap_2953839490_2823303.pdb
         3 ORCLPDB1             SNAP_2953839490_989015970    2823679 /opt/oracle/oradata/ORCLCDB/ORCLPDB1/snap_2953839490_2823679.pdb
[oracle@oracle-18c-vagrant ORCLPDB1]$ ls -lsh
total 1.3G
4.0K drwxr-x---. 8 oracle oinstall 4.0K Oct  8 22:39 ORCLCDB
171M -rw-r--r--. 1 oracle oinstall 171M Oct  8 22:18 snap_2953839490_2821702.pdb
171M -rw-r--r--. 1 oracle oinstall 171M Oct  8 22:38 snap_2953839490_2823303.pdb
171M -rw-r--r--. 1 oracle oinstall 171M Oct  8 22:40 snap_2953839490_2823679.pdb
371M -rw-r-----. 1 oracle oinstall 371M Oct  8 22:39 sysaux01.dbf
271M -rw-r-----. 1 oracle oinstall 271M Oct  8 22:39 system01.dbf
 56K -rw-r-----. 1 oracle oinstall  63M Oct  1 23:21 temp01.dbf
101M -rw-r-----. 1 oracle oinstall 101M Oct  8 22:39 undotbs01.dbf
5.1M -rw-r-----. 1 oracle oinstall 5.1M Oct  8 22:39 users01.dbf
</span></span>

若是要刪除快照,則有兩種方法,第一種就是使用alter pluggable database刪除,第二種是修改max_pdb_snapshots參數,當max_pdb_snapshots參數設置成0時,將刪除所有快照。

<span style="color:#444444"><span style="color:#222222">SQL> alter pluggable database drop snapshot SNAP_2953839490_989015970;
Pluggable database altered.
SQL> SELECT CON_ID, CON_NAME, SNAPSHOT_NAME, SNAPSHOT_SCN AS snap_scn, SNAPSHOT_TIME, FULL_SNAPSHOT_PATH FROM  DBA_PDB_SNAPSHOTS ORDER BY SNAP_SCN;
    CON_ID CON_NAME             SNAPSHOT_NAME               SNAP_SCN SNAPSHOT_TIME FULL_SNAPSHOT_PATH
---------- -------------------- ------------------------- ---------- ------------- ---------------------------------------------------------------------------
         3 ORCLPDB1             SNAP_2953839490_989014667    2821702    1539008272 /opt/oracle/oradata/ORCLCDB/ORCLPDB1/snap_2953839490_2821702.pdb
         3 ORCLPDB1             PDB_SNAP                     2823303    1539009503 /opt/oracle/oradata/ORCLCDB/ORCLPDB1/snap_2953839490_2823303.pdb
SQL> alter pluggable database set max_pdb_snapshots=0;
Pluggable database altered.
SQL> SELECT CON_ID, CON_NAME, SNAPSHOT_NAME, SNAPSHOT_SCN AS snap_scn, SNAPSHOT_TIME, FULL_SNAPSHOT_PATH FROM  DBA_PDB_SNAPSHOTS ORDER BY SNAP_SCN;
no rows selected
</span></span>

演示了上述功能以後,還有一個功能,就是咱們能夠根據快照建立pdb。

<span style="color:#444444"><span style="color:#222222">SQL> alter pluggable database set max_pdb_snapshots=8;
Pluggable database altered
SQL> alter pluggable database snapshot pdb_snap;
Pluggable database altered.
SQL> SELECT CON_ID, CON_NAME, SNAPSHOT_NAME, SNAPSHOT_SCN AS snap_scn, SNAPSHOT_TIME, FULL_SNAPSHOT_PATH FROM  DBA_PDB_SNAPSHOTS ORDER BY SNAP_SCN;
    CON_ID CON_NAME             SNAPSHOT_NAME               SNAP_SCN SNAPSHOT_TIME FULL_SNAPSHOT_PATH
---------- -------------------- ------------------------- ---------- ------------- ---------------------------------------------------------------------------
         3 ORCLPDB1             PDB_SNAP                     2825283    1539010328 /opt/oracle/oradata/ORCLCDB/ORCLPDB1/snap_2953839490_2825283.pdb
SQL> !
[oracle@oracle-18c-vagrant ~]$ mkdir -p /opt/oracle/oradata/ORCLCDB/ORCLPDB2
SQL> create pluggable database ORCLPDB2 from ORCLPDB1 using snapshot PDB_SNAP create_file_dest='/opt/oracle/oradata/ORCLCDB/ORCLPDB2';  
create pluggable database ORCLPDB2 from ORCLPDB1 using snapshot PDB_SNAP create_file_dest='/opt/oracle/oradata/ORCLCDB/ORCLPDB2'
*
ERROR at line 1:
ORA-65040: operation not allowed from within a pluggable database       
SQL> alter session set container=CDB$ROOT;
Session altered.
SQL> create pluggable database ORCLPDB2 from ORCLPDB1 using snapshot PDB_SNAP create_file_dest='/opt/oracle/oradata/ORCLCDB/ORCLPDB2';  
Pluggable database created.
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
         5 ORCLPDB2                       MOUNTED
SQL> alter pluggable database ORCLPDB2 open; 
Pluggable database altered.
</span></span>

這樣咱們就根據快照建立了一個新的PDB,假設當前PDB出現了數據覆蓋,咱們就可使用這個歷史快照的PDB來恢復數據。 
固然還有一個很好用的功能就是咱們在建立pdb的過程當中把他設置成15分鐘產生一個快照。固然配置這個功能有一個先決條件:CDB必須處於本地undo模式.

<span style="color:#444444"><span style="color:#222222">SQL> create pluggable database ORCLPDB3 from ORCLPDB1 file_name_convert=('ORCLPDB1','ORCLPDB3') snapshot mode every 5 minutes;
Pluggable database created.
</span></span>

能夠看到每隔5分鐘自動建立一個快照

<span style="color:#444444"><span style="color:#222222">[oracle@oracle-18c-vagrant ORCLPDB3]$ ls -lrt snap*
-rw-r--r--. 1 oracle oinstall 179134736 Oct  8 23:13 snap_2091710291_2830531.pdb
-rw-r--r--. 1 oracle oinstall 179167158 Oct  8 23:18 snap_2091710291_2832545.pdb
-rw-r--r--. 1 oracle oinstall 179285979 Oct  8 23:23 snap_2091710291_2833104.pdb
-rw-r--r--. 1 oracle oinstall 179284365 Oct  8 23:28 snap_2091710291_2833687.pdb
-rw-r--r--. 1 oracle oinstall 179302205 Oct  8 23:33 snap_2091710291_2834965.pdb
-rw-r--r--. 1 oracle oinstall 179315484 Oct  8 23:38 snap_2091710291_2836695.pdb
-rw-r--r--. 1 oracle oinstall 115724288 Oct  8 23:43 snap_2091710291_2837222.pdb
</span></span>

咱們能夠作個實驗測試一下。在生成快照以前建立一個表插入點數據,這裏上一次快照是23:43分。

<span style="color:#444444"><span style="color:#222222">SQL> alter session set container=ORCLPDB3;
Session altered.
SQL> create table a1 as select * from dba_objects;
Table created.
SQL> select count(1) from a1;
  COUNT(1)
----------
     72897
[oracle@oracle-18c-vagrant ORCLPDB3]$ ls -lrt snap*
-rw-r--r--. 1 oracle oinstall 179134736 Oct  8 23:13 snap_2091710291_2830531.pdb
-rw-r--r--. 1 oracle oinstall 179167158 Oct  8 23:18 snap_2091710291_2832545.pdb
-rw-r--r--. 1 oracle oinstall 179285979 Oct  8 23:23 snap_2091710291_2833104.pdb
-rw-r--r--. 1 oracle oinstall 179284365 Oct  8 23:28 snap_2091710291_2833687.pdb
-rw-r--r--. 1 oracle oinstall 179302205 Oct  8 23:33 snap_2091710291_2834965.pdb
-rw-r--r--. 1 oracle oinstall 179315484 Oct  8 23:38 snap_2091710291_2836695.pdb
-rw-r--r--. 1 oracle oinstall 179353508 Oct  8 23:43 snap_2091710291_2837222.pdb
-rw-r--r--. 1 oracle oinstall   5767168 Oct  8 23:48 snap_2091710291_2839217.pdb
SQL> SELECT CON_ID, CON_NAME, SNAPSHOT_NAME, SNAPSHOT_SCN AS snap_scn, SNAPSHOT_TIME, FULL_SNAPSHOT_PATH FROM  DBA_PDB_SNAPSHOTS ORDER BY SNAP_SCN;
    CON_ID CON_NAME             SNAPSHOT_NAME               SNAP_SCN SNAPSHOT_TIME FULL_SNAPSHOT_PATH
---------- -------------------- ------------------------- ---------- ------------- ---------------------------------------------------------------------------
         7 ORCLPDB3             SNAP_2091710291_989017984    2830531    1539011592 /opt/oracle/oradata/ORCLCDB/ORCLPDB3/snap_2091710291_2830531.pdb
         7 ORCLPDB3             SNAP_2091710291_989018284    2832545    1539011887 /opt/oracle/oradata/ORCLCDB/ORCLPDB3/snap_2091710291_2832545.pdb
         7 ORCLPDB3             SNAP_2091710291_989018584    2833104    1539012188 /opt/oracle/oradata/ORCLCDB/ORCLPDB3/snap_2091710291_2833104.pdb
         7 ORCLPDB3             SNAP_2091710291_989018884    2833687    1539012489 /opt/oracle/oradata/ORCLCDB/ORCLPDB3/snap_2091710291_2833687.pdb
         7 ORCLPDB3             SNAP_2091710291_989019184    2834965    1539012787 /opt/oracle/oradata/ORCLCDB/ORCLPDB3/snap_2091710291_2834965.pdb
         7 ORCLPDB3             SNAP_2091710291_989019484    2836695    1539013087 /opt/oracle/oradata/ORCLCDB/ORCLPDB3/snap_2091710291_2836695.pdb
         7 ORCLPDB3             SNAP_2091710291_989019784    2837222    1539013386 /opt/oracle/oradata/ORCLCDB/ORCLPDB3/snap_2091710291_2837222.pdb
         7 ORCLPDB3             SNAP_2091710291_989020084    2839217    1539013686 /opt/oracle/oradata/ORCLCDB/ORCLPDB3/snap_2091710291_2839217.pdb
</span></span>

23點48分產生了新的快照,此時咱們使用新的快照作一個克隆,登錄到ORCLPDB4數據庫後,咱們會發現是有數據的。

<span style="color:#444444"><span style="color:#222222">SQL> alter session set container=CDB$ROOT;
Session altered.
SQL> create pluggable database ORCLPDB4 from ORCLPDB3 using snapshot SNAP_2091710291_989020084  create_file_dest='/opt/oracle/oradata/ORCLCDB/ORCLPDB4';
Pluggable database created
SQL> alter pluggable database ORCLPDB4 open;
Pluggable database altered.
SQL> alter session set container=ORCLPDB4;
Session altered.
SQL> select count(1) from a1;
  COUNT(1)
----------
     72897
</span></span>

這個功能對於測試人員很是有用,例如移動電信如今有BCV環境,專門用於經分抽數及測試,而這個BCV環境是底層同步的一個克隆。使用18c數據庫,咱們就能夠直接建立快照,而後使用快照克隆一個新數據庫造成BCV環境給經分抽數及測試使用了。

 

 

 



About Me

........................................................................................................................

● 本文做者:小麥苗,部份內容整理自網絡,如有侵權請聯繫小麥苗刪除

● 本文在itpub、博客園、CSDN和我的微 信公衆號( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、我的簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 數據庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ羣號: 230161599 (滿) 、618766405

● 微 信羣:可加我微 信,我拉你們進羣,非誠勿擾

● 聯繫我請加QQ好友 ( 646634621 ) ,註明添加原因

● 於 2019-08-01 06:00 ~ 2019-08-31 24:00 在西安完成

● 最新修改時間:2019-08-01 06:00 ~ 2019-08-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網絡,如有侵權或不當之處還請諒解

● 版權全部,歡迎分享本文,轉載請保留出處

........................................................................................................................

● 小麥苗的微店 : https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

● 小麥苗出版的數據庫類叢書 : http://blog.itpub.net/26736162/viewspace-2142121/

● 小麥苗OCP、OCM、高可用網絡班 : http://blog.itpub.net/26736162/viewspace-2148098/

● 小麥苗騰訊課堂主頁 : https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端 掃描下面的二維碼來關注小麥苗的微 信公衆號( xiaomaimiaolhr )及QQ羣(DBA寶典)、添加小麥苗微 信, 學習最實用的數據庫技術。

........................................................................................................................

歡迎與我聯繫
相關文章
相關標籤/搜索