Site icon Ron Ekins' – Oracle Technology, DevOps and Kubernetes Blog

Oracle database recovery using Storage Snapshot Optimization

Oracle Storage Snapshot Optimization enables you to use third-party storage snapshots to recover a databases to the current time or a specific point-in-time without having the database placed in backup mode.

To use Storage Snapshot Optimization, the snapshot technology must conform to the following requirements.

Storage Snapshot Optimization provides the following benefits.

If your storage vendor can’t guarantee compliance to the above requirements, you will then have to put the datafiles into backup mode by using the ALTER DATABASE or ALTER TABLESPACE statement with the BEGIN BACKUP clause.

Please note the Storage Snapshot Optimization option is only available to Oracle Database Enterprise Edition (EE) and Oracle Database Enterprise Edition on Engineered Systems (EE-ES) as per Oracle 19c Licensing Information.

Table 1-11 Snapshots and Cloning

Using Backup Mode

Place your data files in backup mode just before you take the snapshot.

When a tablespace is in backup mode, the database writes the before image for an entire block to the redo stream before modifying a block. The database also records changes to the block in the online redo log, thus increasing the volume of logging during the time the tablespace is in backup mode.

Backup mode also freezes the data file checkpoint until the file is removed from backup mode. The Oracle Database performs this safeguard because it cannot guarantee that a third-party backup tool copies the file header before copying the data blocks.

Once the snapshot has been created, use the ALTER DATABASE or ALTER TABLESPACE ALTER command with the END BACKUP clause to take the data files out of backup mode.

Historically, with disk based storage platforms there was a performance overhead whilst the database was in backup mode due to the increased logging during the time the database is in backup mode. With modern all-Flash-Storage platforms this is no longer an issue as the database only needs to be in backup mode for a very short period of time.

Using Storage Snapshot Optimization

I have defined a protection group which includes my data, control / redo and fast recovery area volumes on my lab Pure Storage FlashArray.

Let’s start by using the command line interface to take a protection group snapshot, I could also equally use with WebUI, REST API or SDKs to perform the same.

ssh -l ${FA_USER} ${FA_IP} purepgroup snap --suffix $SUFFIX ${PG_NAME}

Name                Source         Created                
z-oracle-DEVL.demo  z-oracle-DEVL  2021-07-12 15:36:43 BST
Protection Group Snapshot

Now we have a snapshot I will create a table with 1 million rows of random data.

SQL> CREATE TABLE test_table TABLESPACE USERS AS
  ( SELECT LEVEL id, 
         SYSDATE+DBMS_RANDOM.VALUE(-1000, 1000) date_value, 
         DBMS_RANDOM.string('A', 20) text_value
  FROM dual
  CONNECT BY LEVEL <= 1000000);

Shutdown Database

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

Unmount the ASM data volume.

SQL> alter diskgroup DATA1 dismount;

Restore ASM data volume from the storage protection group snapshot.

ssh -l ${FA_USER} ${FA_IP} purevol copy ${PG_NAME}.${SUFFIX}.${DATA_VOL} ${DATA_VOL} --overwrite

Name                  Size  Source                Created                  Serial                             
z-oracle-dg_oradata1  1T    z-oracle-dg_oradata1  2021-07-12 15:35:43 BST  50C939582B0F46C0003369D7

Mount the restored ASM data diskgroup volume prior to the creation of the 1 million row test table.

SQL> alter diskgroup DATA1 mount;

Start Oracle Database

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Jul 12 14:47:24 2021
Version 19.10.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup;
ORACLE instance started.

Total System Global Area 1.6267E+11 bytes
Fixed Size		   30386024 bytes
Variable Size		 1.9327E+10 bytes
Database Buffers	 1.4281E+11 bytes
Redo Buffers		  506482688 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '+DATA1/DEVL/system01.dbf'

Oracle informs us that the database needs recovery, our datafiles have been rolled back

Recover Database

SQL> alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';

Session altered.

SQL> RECOVER DATABASE SNAPSHOT TIME '2021/07/12 15:35:43';

Media recovery complete.

SQL> alter database open;

Database altered.

Check Test Table

SQL> select count(*) as "Number of Test Table Rows" from test_table;
Number of Test Table Rows
-------------------------
		  1000000

SQL> select text_value from test_table where rownum <=10;
TEXT_VALUE
--------------------------------------------------------------------------------
bJzXUvUSOpVvHyFlSnci
nlhwwcyNgxLRnTJKaZfK
BdvvKlathsQbhjHCAygn
fXAbPufodqrKWAZESMMQ
lLhOuOMfnqZefGXHxVqw
awSilZuqalbiNUiLYlvT
PUSJTJOXGIJKqgDMlmjv
UrxwgHscZUWCPEcPFjfS
XUPQLeBzoNvQsxCzeuFo
NoBqFugKVPkqYMpAbyAW

Summary

In this post I have shared how we can use Storage Snapshot Optimization to recover an Oracle database using a storage snapshot.

[twitter-follow screen_name=’RonEkins’ show_count=’yes’]

Exit mobile version