La version 12c d’Oracle Grid Infrastructure introduit de nombreuses nouveautés dans le support d’ACFS, le système de fichiers clusterisés d’Oracle. Nous abordons dans ce posting la capacité d’ACFS d’être le système de fichier de votre base de données ainsi que sa capacité de mise en œuvre des snapshots.

Rappel sur ACFS

Ce système de fichier est apparu avec la version 11.2 du cluster Oracle. Il s’appuie sur ASM ainsi qu’ADVM pour ASM Dynamic Volume Manager. Il est disponible dans la version cluster et serveur autonome (Oracle restart) de Grid Infrastructure pour Linux et Windows. Il permet de stocker toutes sortes de fichiers mais pas ceux d’une base de données.

Chaque version intermédiaire de 11gR2 a mis en œuvre de nouvelles fonctionnalités d’ACFS:

  • ACFS snapshot
  • ACFS security
  • ACFS Encryption
  • ACFS replication
  • ACFS Tagging

Quoi de neuf avec ACFS Oracle 12c?

Il y a des améliorations pour toutes les fonctions qui font passer le nombre d’options de la commande acfsutil de 360 à plus de 450, ainsi qu’un portage d’ACFS sur AIX et Solaris.

Notons aussi l’extension du support aux fichiers de base de données – sans précision sur le comportement dans le cadre d’un cluster.

Pourquoi ACFS pour votre database?

Il y a plusieurs avantages à utiliser les datafiles d’une base sur un système de fichier plutôt que dans ASM, mais un avantage me semble plus important que les autres: la capacité de mise en œuvre des snapshots d’ACFS.

Instancier une base sur un systeme de fichier ACFS est strictement identique à la mise en oeuvre sur ext2, ext3, etc.
Nous avons par defaut disk_asynch_io = TRUE et filesystemio_options = NONE – comme pour une instance utilisant ASM.

Rappel: Oracle controle l’accés aux disques au travers des deux paramètres ci-dessus, la note ID  751463.1 explique le comportement de ceux-ci dans le cas d’utilisation d’ASM. Les I/O sont asynchrones

Snapshots ACFS

En version 11.2.0.2, il y avait 2 options possibles:

  1. snap create snapname mount_point
  2. snap delete snapname mount_point

En version 12.1, nous avons maintenant 16 options possibles. Celles-ci nous permettent de créer, modifier, supprimer et connaitre l’état d’un snapshot.

Nous allons ici utiliser que trois de ces commandes pour tester un backup et le restore d’une base.

  1. snap create
  2. snap info
  3. snap delete

Mise en oeuvre d’un backup par snapshot

Un snapshot sur une base ouverte n’a de sens que si celle-ci est en archivelog. Donc, tout d’abord, passons la base en mode archive:

Activation de l’archivage:

 

startup mount
alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST';
alter database archivelog ;
alter database open ;
archive log list ;
alter system switch logfile;

Pour que l’on puisse executer la création du snapshot depuis la base Oracle, il faut paramétrer la commande sudo pour une utilisation transparente de afcsutil.
La commande de backup par snapshot sera alors l’enchaînement d’une mise en mode backup de la base, suivi de la création d’un snapshot:

Création d’un snapshot:

 

--
-- tache de backup par snapshot d'une base 
--
alter database begin backup ;
! sudo acfsutil snap create last-bkp-acfsdb /u03
alter database end backup;
--
-- list des snapshots 
! sudo acfsutil snap info /u03
--
-- end backup
--
exit

Résultat de l’éxecution:

Oracle Database 12c Enterprise Edition Release 12.1.0.0.2 - 64bit Beta
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Database altered.acfsutil snap create: Snapshot operation is complete.
Database altered.snapshot name:               last-bkp-acfsdb
RO snapshot or RW snapshot:  RO
parent name:                 /u03
snapshot creation time:      Fri Sep 28 17:22:26 2012    number of snapshots:  1
    snapshot space usage: 60030976

La création du snapshot est instantanée, mais cela ne nous préserve pas d’une perte du disque.
Il faut dans une deuxieme étape recopier le snapshot sur un autre filesystem ou une autre machine. Dans notre exemple, nous procédons par la commande tar.
Une fois le snapshot préservé, on le supprime sur le filesystem de la base:

Copy du snapshot et suppression:

#
# copy du snapshot vers un autre disque ..
## copy des fichiers ou tar.
cd /u03/.ACFS/snaps/last-bkp-acfsdbtar czvf /u00/app/oracle/admin/acfsdb/backup/last-bkp-acfsdb-data.tar.gz oradata 
tar czvf /u00/app/oracle/admin/acfsdb/backup/last-bkp-acfsdb-FRA.tar.gz fast_recovery_area 
#
cd /u00/app/oracle/admin/acfsdb/backup
#-
# creation d'un repertoire avec la date 
#
tag="bck-`date +%Y%m%d_%H%M%S`"
mkdir $tag
mv last-bkp-acfsdb-*.tar.gz $tag
#
#- suppression du snapshot
#-
sudo acfsutil snap delete last-bkp-acfsdb /u03
#

Test de restoration:

On “crash” la base en supprimant un fichier: rm /u03/oradata/acfsdb/testtbs01.dbf

SQL> select count(*) from testtbs1;
select count(*) from testtbs1
                     *
ERROR at line 1:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/u03/oradata/acfsdb/testtbs01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3SQL> shutdown abort;
ORACLE instance shut down.
SQL> exit

La base étant inaccessible on organise un restore des fichiers de la base – sans écraser les redolog files et les control files.

Commandes:

D’abord on renome les fichiers redolog et controlfile. On recopie à partir du tar les fichiers se trouvant dans les deux fichiers last-bkp-acfsdb-data.tar.gz et last-bkp-acfsdb-FRA.tar.gz
On replace les fichiers redolog et controlfile précèdemment mis de coté. On redémarre la base en mode mount et on fait un recover:

SQL> startup mount;
ORACLE instance started.Total System Global Area  943669248 bytes
Fixed Size      2267176 bytes
Variable Size    251660248 bytes
Database Buffers   683671552 bytes
Redo Buffers      6070272 bytes
Database mounted.
SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.SQL> select count(*) from testtbs1;  COUNT(*)
----------
     88302

N. B.: La consommation d’espace peut être vu par la commande df -h ou par les commandes acfsutil info fs et acfsutil snap info /u03.

Conclusion

Les commandes d’ACFS permettent de mettre en œuvre facilement un backup d’une base sur ce système de fichier. On notera que rien n’est encore apparu du coté de RMAN pour prendre en compte cette capacité d’ACFS.