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:
- Pour une présentation complète de DBFS avec Exadata, téléchargez la présentation de Kevin Closson intitulée: « Oracle Exadata Storage Server Technical Deep Dive. Part IV«
- Le projet Fuse sur Sourceforge.net et la page de téléchargement pour Fuse 2.7.3.
- Comment configurer un wallet pour stocker les credentials d’un utilisateur sur le site de Tim Hall.
- Les sections suivantes de la documentation: DBFS File System Client, DBFS Content API, DBFS SecureFile Store, DBFS Hierarchical Store et Creating a DBFS Store
2 réflexions sur “Oracle 11.2 (aka 11gR2) : DBFS et SecureFile Provider Store”
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 !
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.