ASM und PDB Snapshot Copy

Mit der Multitenant Architektur können neue PDBs auf verschiedene Arten erstellt werden. Eine Variante ist, die neue PDB als sogenannten Snapshot Copy einer vorhandenen PDB zu erstellen. Dabei wird die neue PDB nicht komplett von der Quelle kopiert, sondern es wird nur die Differenz von der Quell-PDB zur Ziel-PDB gespeichert. Das spart natürlich Storage. Unterstützt das Dateisystem Snapshots, so werden diese Dateisystem-Snapshots dafür verwendet, das klappt z.B. mit ACFS. Ansonsten muss das Dateisystem sparseness unterstützen, also das Anlegen von Files in einer Größe X wobei der Platz nur reserviert, nicht aber physisch belegt wird. 

Während der DOAG Konferenz 2020 kam die Frage auf, ob das auch mit Datenfiles direkt in ASM funktioniert. Probieren wir es aus.

 

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDBASM1                        READ WRITE NO
SQL> show parameter clonedb

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
clonedb                              boolean     FALSE
clonedb_dir                          string
SQL> select file_name from cdb_data_files;

FILE_NAME
--------------------------------------------------------------------------------
+DATA/ASMSE2/DATAFILE/undotbs1.293.1056972257
+DATA/ASMSE2/DATAFILE/system.284.1056972207
+DATA/ASMSE2/DATAFILE/sysaux.292.1056972243
+DATA/ASMSE2/DATAFILE/users.304.1056973161
+DATA/ASMSE2/B48865836FE9D1C6E0533E24100AE822/DATAFILE/system.301.1056972901
+DATA/ASMSE2/B48865836FE9D1C6E0533E24100AE822/DATAFILE/sysaux.302.1056972901
+DATA/ASMSE2/B48865836FE9D1C6E0533E24100AE822/DATAFILE/undotbs1.300.1056972901
+DATA/ASMSE2/B48865836FE9D1C6E0533E24100AE822/DATAFILE/users.305.1056973161

8 rows selected.

SQL> create pluggable database pdbasm2 from pdbasm1 snapshot copy;
create pluggable database pdbasm2 from pdbasm1 snapshot copy
*
ERROR at line 1:
ORA-65169: error encountered while attempting to copy file
+DATA/ASMSE2/B48865836FE9D1C6E0533E24100AE822/DATAFILE/users.305.1056973161
ORA-17517: Database cloning using storage snapshot failed on file
8:+DATA/ASMSE2/B48865836FE9D1C6E0533E24100AE822/DATAFILE/users.305.1056973161

 

Das funktioniert schon mal nicht, ist aber logisch, denn ASM selbst unterstützt keine Storage Snapshots. Das geht nur über dem Umweg ACFS. Also bleibt nur der zweite Weg. Dazu muss der Parameter "clonedb" auf "TRUE" gesetzt und die Container-Datenbank neu gestartet werden um die Änderung zu aktivieren.

 

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

System altered.

SQL> startup force
ORACLE instance started.

Total System Global Area 4294963760 bytes
Fixed Size                  9142832 bytes
Variable Size             855638016 bytes
Database Buffers         3405774848 bytes
Redo Buffers               24408064 bytes
Database mounted.
Database opened.
SQL> show parameter clonedb

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
clonedb                              boolean     TRUE
clonedb_dir                          string
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDBASM1                        READ WRITE NO

SQL> create pluggable database pdbasm2 from pdbasm1 snapshot copy;
create pluggable database pdbasm2 from pdbasm1 snapshot copy
*
ERROR at line 1:
ORA-65081: database or pluggable database is not open in read only mode

 

Die nächste Einschränkung schlägt zu, denn ohne Storage Snapshots muss die Quell-PDB read-only geöffnet sein und darf auch während der gesamten Lebensdauer von Snapshot Copies nicht wieder read-write geöffnet werden. Also nächster Versuch:

 

SQL> alter pluggable database pdbasm1 close;

Pluggable database altered.

SQL> alter pluggable database pdbasm1 open read only;

Pluggable database altered.

SQL> create pluggable database pdbasm2 from pdbasm1 snapshot copy;
create pluggable database pdbasm2 from pdbasm1 snapshot copy
*
ERROR at line 1:
ORA-65169: error encountered while attempting to copy file
+DATA/ASMSE2/B48865836FE9D1C6E0533E24100AE822/DATAFILE/users.305.1056973161
ORA-17517: Database cloning using storage snapshot failed on file
8:+DATA/ASMSE2/B48865836FE9D1C6E0533E24100AE822/DATAFILE/users.305.1056973161

 

Aber auch das war nicht von Erfolg gekrönt. Offenbar unterstützt ASM selbst auch keine Sparseness und somit kann eine PDB auch nicht als Snapshot Copy angelegt werden. 

Wenn also ASM im Einsatz ist, was ja unter anderem auf vielen Engineered Systems wie den ODAs der Fall ist, sollte man immer ACFS einsetzen um den maximalen Vorteil aus der neuen Container Architektur ziehen zu können.

Verwandte Blogbeiträge:

Kommentare

Keine Kommentare

Kommentar schreiben

* Diese Felder sind erforderlich