Skip to content
PhilippeLeroux edited this page Oct 28, 2017 · 10 revisions

Table of Contents


Création d'un FS de type DBFS

Autre méthode peut être préférable

Documentation DBFS

Clusterware Administration

  • Nom du CDC : DAISY
  • Nom du PDB : pdb01
  • Nom du service : pdb01_oci
  • Point de montage : /mnt/pdb01

Le PDB contiendra un FS nommé staging_area qui sera visible de l'OS depuis le point de montage /mnt/pdb01. Le point de montage sera monté automatiquement à l'ouverture du PDB et démonté à la fermeture de la base.

Pour ne pas avoir à saisir de mot de passe, le 'Wallet Manager' est utilisé, sauf avec la 12.2 standalone avec le Grid Infra ou le Wallet ne fonctionne pas.

Création du FS staging_area dans le PDB

Avec le compte oracle exécuter le script create_dbfs.sh :

cd ~/plescripts/db/dbfs
./create_dbfs.sh -db=daisy -pdb=pdb01 -service=pdb01_oci

Le FS créé se nomme staging_area, à ce stade son contenu n'est accessible qu'avec la commande oracle dbfs_client, exemple :

oracle@srvdaisy01:DAISY:dbfs> dbfs_client /@pdb01_oci --command ls dbfs:/staging_area/
dbfs:/staging_area/create_crs_resource_for_dbfs.sh
dbfs:/staging_area/create_dbfs.sql
dbfs:/staging_area/create_user_dbfs.sql
dbfs:/staging_area/drop_all.sh
dbfs:/staging_area/drop_dbfs.sql
dbfs:/staging_area/readme.md
dbfs:/staging_area/automount_dbfs.sh
dbfs:/staging_area/configure_fuse_and_dbfs_mount_point.sh
dbfs:/staging_area/create_dbfs.sh

oracle@srvdaisy01:DAISY:dbfs>

Ne pas ajouter * pour lister le répertoire, la syntaxe dbfs:/staging_area/* ne fonctionne pas.

Le fichier ~/pdb01_dbfs.cfg contient toutes les informations sur le compte gérant le DBFS dans la base. Ce fichier est utilisé par les autres scripts pour éviter de ressaisir les mêmes informations.

Sur un RAC le script doit être exécuté sur un seul nœud, le 'wallet store' sera dupliqué sur les autres nœuds s'il n'est pas stocké sur un CFS.

Note : Maintenant le script appel les scripts root et grid via su. L'exécution du script root pouvant être annulée, l'utilisation de ces scripts et décrite ci dessous.

Rendre visible le FS staging_area depuis l'OS

Ce script est maintenant appeler par le script create_dbfs.sh.

Avec le compte root exécuter le script configure_fuse_and_dbfs_mount_point.sh :

[root@srvdaisy01 ~]# cd ~/plescripts/db/dbfs
[root@srvdaisy01 dbfs]# ./configure_fuse_and_dbfs_mount_point.sh -db=daisy -pdb=pdb01 -service=pdb01_oci

Le script créé le point de montage /mnt/pdb01 qui contiendra le FS staging_area créé avec le script oracle.

Notes : Après l'exécution du script, si le Grid Infra n'est pas installé, il faut se déconnecter du compte oracle pour exécuter la commande mount /mnt/pdb01 la configuration du compte étant modifiée.

Une entrée est ajoutée dans /etc/fstab qui permet au compte Oracle de monter et démonter le FS.

  • fstab : /sbin/mount.dbfs#/@pdb01_oci /mnt/pdb01 fuse wallet,rw,user,allow_other,direct_io,noauto,default 0 0
  • Monter le FS : mount /mnt/pdb01
  • Démonter le FS : fusermount -u /mnt/pdb01

Actuellement l'option automount n'est pas supportée par fuse.

Sur un RAC le script s'exécute de lui-même sur les autres nœuds.

Monter le FS à l'ouverture du PDB

Ce script est maintenant appeler par le script create_dbfs.sh.

Si le grid n'est pas installé (base sur FS) le montage doit se faire manuellement depuis le compte oracle : mount /mnt/pdb01

Le point de montage /mnt/pdb01 doit être démonté sur tous les nœuds sinon le script échouera.

Avec le compte grid exécuter le script create_crs_resource_for_dbfs.sh

grid@srvdaisy01:+ASM:~> cd plescripts/db/dbfs/
grid@srvdaisy01:+ASM:dbfs> ./create_crs_resource_for_dbfs.sh -db=daisy -pdb=pdb01 -service=pdb01_oci
[...]
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
pdb.pdb01.dbfs
               ONLINE  ONLINE       srvdaisy01               STABLE
               ONLINE  ONLINE       srvdaisy02               STABLE
--------------------------------------------------------------------------------

La ressource pdb.pdb01.dbfs se base sur le script ~/mount-dbfs-pdb01 pour gérer le FS.

Avec des ressources de type locale il n'est pas possible de passer des paramètres au script ou bien d'utiliser dès variables d'environnement. Le suffix pdb01 permet donc au script de connaître le nom du point de montage.

Chaque PDB contenant un DBFS aura donc son script.

Visualisation du point de montage depuis le compte oracle

Le contenu du répertoire est maintenant visible :

oracle@srvdaisy01:DAISY:dbfs> ll /mnt/pdb01/staging_area/
total 20
-rwxr-xr-- 1 kangs users  686 Dec 16 17:15 automount_dbfs.sh
-rwxr-xr-- 1 kangs users 3695 Dec 16 17:15 create_crs_resource_for_dbfs.sh
-rwxrwxr-- 1 kangs users 2909 Dec 16 17:15 create_dbfs.sh
-rw-r--r-- 1 kangs users   77 Dec 16 17:15 create_dbfs.sql
-rw-rw-r-- 1 kangs users  408 Dec 16 17:15 create_user_dbfs.sql
-rwxr-xr-- 1 kangs users  486 Dec 16 17:15 drop_all.sh
-rw-r--r-- 1 kangs users   64 Dec 16 17:15 drop_dbfs.sql
-rw-rw-r-- 1 kangs users 4266 Dec 16 17:15 readme.md
-rwxrwxr-- 1 kangs users 3590 Dec 16 17:15 configure_fuse_and_dbfs_mount_point.sh
-rw-rw-r-- 1 kangs users  841 Dec 16 17:15 todo.txt

Description des étapes.

Compte oracle

  • Création du compte Oracle dbfsadm

     sqlplus sys/Oracle12@pdb01_oci
     create tablespace dbfsadm_tbs;
    
     create user dbfsadm identified by dbfs
     default tablespace dbfsadm_tbs
     temporary tablespace temp
     quota unlimited on dbfsadm_tbs;
    
     grant create session, resource, create view, dbfs_role to dbfsadm;
    
  • Création du dbfs staging_area

     sqlplus dbfsadm/dbfs@pdb01_oci
     @$ORACLE_HOME/rdbms/admin/dbfs_create_filesystem.sql dbfsadm_tbs staging_area nocompress nodeduplicate noencrypt partition
    
  • Création du wallet

     mkstore -wrl $ORACLE_HOME/oracle/wallet -create
     orapki wallet create -wallet $ORACLE_HOME/oracle/wallet	-auto_login
    
  • Ajout de l'utisateur dbfsadm dans le wallet

     mkstore -wrl $ORACLE_HOME/oracle/wallet	\
     			-createCredential pdb01_oci dbfsadm dbfs
    

Compte root

  • Installer fuse : yum -y -q install fuse fuse-libs

  • Mettre à jour le cache des libs

     cd /usr/local/lib
     echo '/usr/local/lib' >> /etc/ld.so.conf.d/usr_local_lib.conf
     ln -s $ORACLE_HOME/lib/libclntsh.so.12.1
     ln -s $ORACLE_HOME/lib/libnnz12.so
     ln -s $ORACLE_HOME/lib/libclntshcore.so.12.1
     ln -s $ORACLE_HOME/lib64/libfuse.so.2 libfuse.so
     ldconfig
    
  • Ajouter oracle au groupe fuse : usermod -a -G fuse oracle

  • Mettre à jour les droits sur dfbfs_client

     chown oracle.fuse $ORACLE_HOME/bin/dbfs_client
     chmod u+rwxs,g+rx-w,o-rwx $ORACLE_HOME/bin/dbfs_client
    
  • Création du symlink /sbin/mount.dbfs sur dbfs_client

     ln -s $ORACLE_HOME/bin/dbfs_client /sbin/mount.dbfs
    
  • Création du point de montage

     mkdir /mnt/pdb01
     chown oracle.oinstall /mnt/pdb01
    
  • Ajouter user_allow_other au fichier /etc/fuse.conf

  • Ajouter dans /etc/fstab

     echo '/sbin/mount.dbfs#/@pdb01_oci /mnt/pdb01 fuse wallet,rw,user,allow_other,direct_io,noauto,default 0 0' >> /etc/fstab
    

Compte grid

  • Création du script /home/grid/mount-dbfs-pdb01 qui exécute les actions de montage/démontage du point de montage /mnt/pdb01

     cp ~/plescripts/db/dbfs/mount-dbfs ~/mount-dbfs-pdb01
    
  • Création d'une ressource locale pdb.pdb01.dbfs

     crsctl add resource pdb.pdb01.dbfs										\
     	-type local_resource												\
     	-attr "ACTION_SCRIPT='/home/grid/mount-dbfs-pdb01'					\
     		,CHECK_INTERVAL=3600,RESTART_ATTEMPTS=10						\
     		,START_DEPENDENCIES='pullup:always(ora.daisy.pdb01_oci.svc)'	\
     		,STOP_DEPENDENCIES='hard(intermediate:ora.daisy.db)'			\
     		,SCRIPT_TIMEOUT=300"
    
     crsctl start resource pdb.pdb01.dbfs
    

Supprimer un DBFS

  • Avec le compte oracle exécuter le script : drop_dbfs.sh -db=... -pdb=....
  • Pour désinstaller fuse complètement avec le compte root exécuter le script root_drop_all.sh ...

TODO

  • Il faudrait que le point de montage soit démonté si le service du PDB est stoppé.
  • Ne pas être obliger d'utiliser -f pour stopper la DB.

BUG Dataguard

Sur un Dataguard avec le Grid Infra la bascule se passe correctement. Sans le Grid Infra il est impossible de monter le DBFS sur le nœud ou a été construit la physical.

Clone this wiki locally