Oracle 11.2 (aka 11gR2) : DBFS et SecureFile Provider Store

En plus d’Oracle ASM Cluster File System (ACFS), Oracle 11g Release 2 (aka 11gR2) offre un autre système de fichiers avec des fonctionnalités très différentes, Oracle DBFS. Disponible sur RHEL5 et Oracle EL5, ce système de fichiers peut être monté grace à FUSE (Filesystem in Userspace) comme un FileSystem classique ou manipulé directement avec le programme dbfs_client
Derrière DBFS, un fournisseur de stockage (Store Provider) assure la persistence des fichiers. Oracle offre 2 implémentations de Store Provider:

  • le « SecureFile Provider Store » qui, comme son nom l’indique, permet de stocker les fichiers dans une structure de type SecureFile LOB (partitionnée par défaut).
  • le « Hierarchical Store » qui permet de stocker des fichiers sur des systèmes hiérarchiques comme, par exemple, des bandes oun pour être vraiment à la page, des systèmes de type cloud storage, avec en l’occurence Amazon S3.

Mais Oracle 11.2 ne s’arrête pas là puisque la version offre des interfaces qui permettent d’implémenter son propre Store Provider. Pour vous faire une idée et pour les plus anciens d’entre nous, cela ressemble bien, au moins de loin, à une sorte de renaissance d’Oracle iFS avec des performances qui vous scotcheraient au plafond.
Enfin assez rêvé ! Cet article présente comment débuter avec DBFS et le SecureFile Provider Store en quelques minutes. Il ne vous restera plus qu’à pousser l’expérience plus loin… voire beaucoup plus loin

Créer un utilisateur et le référentiel SecureFile Provider Store

Dans un premier temps, vous créez un utilisateur qui contiendra le fournisseur de stoackage du système de fichiers sous la forme de Lob SecureFile. Pour cela, il faut créer un utilisateur de votre choix, lui donner le privilèges et roles adéquats et exécuter le script dbfs_create_filesystem.sql ou dbfs_create_filesystem_advanced.sql. Vous trouverez ci-dessous un exemple typique de configuration pour une base de données nommée WHITE :

. oraenv
WHITE
sqlplus / as sysdba
create tablespace dbfs_tbspc
datafile '/u01/app/oracle/oradata/WHITE/dbfs_tbspc01.dbf'
size 25M autoextend on maxsize 4G;
create user dbfs
identified by dbfs
default tablespace dbfs_tbspc
temporary tablespace temp
quota unlimited on dbfs_tbspc;
grant connect, resource to dbfs;
grant dbfs_role to dbfs;
exit;
cd $ORACLE_HOME/rdbms/admin
sqlplus dbfs/dbfs
@dbfs_create_filesystem.sql dbfs_tbspc myfs
exit;

Configurer un Wallet pour stocker le mot de passe de l’utilisateur de la base de données

Le client (comprenez le système de fichiers) ne doit pas forcément résider sur le même serveur que la ou les instances de bases de données; toutefois vous devrez installer un client Oracle sur ce système. Dans le script ci-dessous, vous trouverez une configuration réseau qui utilise un wallet pour stocker le mot de passe de connection à la base de données. Comme le système de fichiers est monté par l’utilisateur root, cette configuration utilise un répertoire particulier pour stocker les fichiers de configuration du réseau et le wallet :

mkdir -p /root/oracle/tnsadmin
mkdir -p /root/oracle/wallet
mkstore -wrl /root/oracle/wallet -create
mkstore -wrl /root/oracle/wallet -createCredential white dbfs dbfs
mkstore -wrl /root/oracle/wallet -listCredential
cat > /root/oracle/tnsadmin/sqlnet.ora <<EOF
WALLET_LOCATION =
   (SOURCE =
     (METHOD = FILE)
     (METHOD_DATA =
       (DIRECTORY = /root/oracle/wallet)
     )
   )
SQLNET.WALLET_OVERRIDE = TRUE
EOF
cat > /root/oracle/tnsadmin/tnsnames.ora <<EOF
WHITE =
    (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)
                           (HOST = arkzoyd)
                           (PORT = 1521)
        )
        (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = WHITE)
        )
    )
EOF
. oraenv
WHITE
export TNS_ADMIN=/root/oracle/tnsadmin
sqlplus /@white
select user from dual;
USER
-----
DBFS

Installer FUSE sur RHEL5/OEL5

Comme je l’ai indiqué en introduction, si vous voulez monter le système de fichier sur votre client, vous devrez installer utiliser RHEL5 ou Oracle EL5 et installer FUSE. La procédure est exactement la même que celle décrite dans la documentation. Commencez par installer les sources de votre noyaux Linux:

yum install kernel-devel

Vous pouvez ensuite télécharger FUSE 2.7.3 et l’installer sous l’utilisateur root comme dans le script ci-dessous:

su - root
mkdir /root/fuse
wget http://sourceforge.net/projects/fuse/files/fuse-2.X/2.7.3/fuse-2.7.3.tar.gz/download
tar -xzvf fuse-2.7.3.tar.gz
cd fuse-2.7.3
./configure --prefix=/usr
 --with-kernel=/usr/src/kernels/`uname -r`-`uname -p`
make
make install
/sbin/depmod
/sbin/modprobe fuse
chmod 666 /dev/fuse
echo "/sbin/modprobe fuse" >> /etc/rc.modules

Monter le système de fichiers sur /mnt/dbfs

Une fois FUSE installé, il suffit d’utiliser le programme dbfs_client pour démarrer le système de fichiers:

mkdir /mnt/dbfs
dbfs_client /@white -o wallet -o rw /mnt/dbfs
df -h /mnt/dbfs
Filesystem            Size  Used Avail Use% Mounted on
dbfs                   18M   11M  7.0M  60% /mnt/dbfs

Remarquez la taille du système de fichiers !

Tester le système de fichiers

Les systèmes de fichiers que vous avez créé dans l’utilisateur DBFS apparaissent comme un sous répertoire du point de montage; si vous regardez dans le schéma, vous découvrirez une table T_MYFS avec une colonne de type BLOB qui contient vos données :

ls -l /mnt/dbfs
total 0
drwxrwxrwx 3 root root 0 Sep 14 16:03 myfs

Remarquez que si vous utilisez de l’espace dans votre système de fichiers, sa taille augmente comme le script ci-dessous le met en évidence :

dd if=/dev/zero of=/mnt/dbfs/myfs/file.zero
   bs=1024k count=5
df -h /mnt/dbfs
Filesystem            Size  Used Avail Use% Mounted on
dbfs                   28M   16M   12M  57% /mnt/dbfs

Démonter le système de fichiers

… et détruire la table et les package du système de fichier, il suffit d’utiliser fusermount avec l’option -u comme ci-dessous :

fusermount -u /mnt/dbfs

Vous pouvez ensuite supprimer la table qui stockait les données du système de fichiers (si c’est bien ce que vous voulez !) à l’aide du script @dbfs_drop_filesystem.sql :

sqlplus dbfs/dbfs
@dbfs_drop_filesystem.sql myfs

Conclusion

Ce n’est qu’une très brève introduction et il reste beaucoup de questions en suspend auxquelles la documentation répond : comment monter automatiquement le système de fichiers en utilisant /etc/fstab ? Comment sauvegarder le système de fichiers ? Comment utiliser le système de fichier en mode ligne de commande ? Comment utiliser dbfs avec un cluster ? Comment tracer et déboguer DBFS ? Comment utiliser les différentes options de chiffrement et de compression du système de fichiers ? Comment développer son propre store provider ? J’espère bien qu’on pourra partager avec vous nos expériences le jour où vous voudrez utiliser ce nouveau composant à destination des applications…

Référence:

2 réflexions sur “Oracle 11.2 (aka 11gR2) : DBFS et SecureFile Provider Store”

  1. DBFS est très éloigné d’OCFS. Mais, je partage ta vision avec l’arrivée d’ACFS et la possibilité d’y installer des ORACLE_HOME. Ca prendra sans doute encore du temps mais on peut facilement imaginer qu’il y aura de moins en mois d’OCFS dans les configurations Oracle sur Linux et Windows. Il faut dire que ça avait déjà bien commencé (moi le premier) avec l’arrivée d’ASM.
    Il faudrait peut-être poser cette question sur la liste de diffusion d’OCFS ( [ocfs2-users] ).
    Je ne m’en fait pas trop pour OCFS cela étant. Le système de fichiers est intégré au Kernel Linux depuis la version 2.6.16 et il a le soutien de nombreux développeurs, y compris Suse. Redhat a tendance à supporter GFS qui fonctionne également avec RAC (officiellement au moins). Cela étant, j’ai vu de gros projets qui utilisent massivement cette fonctionnalité et qui contiennent zéro Oracle.
    Enfin, pour ouvrir le débat encore un peu plus autours des filesystems, j’avoue que je suis (pour le coup d’un oeil très intéressé) les progrès de BTRFS (et son frère CRFS). Mais c’est une autre histoire !

  2. Impressionnant l’investissement d’Oracle sur le stockage…
    Cela me fait rebondir sur OCFS2, quel est son avenir. J’étais déjà pessimiste avec ASM mais maintenant faut-il l’enterrer ?.
    As-tu un conseil sur son utilisation et son avenir ?

Les commentaires sont fermés.