-
Notifications
You must be signed in to change notification settings - Fork 11
dbfs
Autre méthode peut être préférable
- 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.
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.
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.
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.
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
-
Création du compte Oracle
dbfsadmsqlplus 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_areasqlplus 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
dbfsadmdans le walletmkstore -wrl $ORACLE_HOME/oracle/wallet \ -createCredential pdb01_oci dbfsadm dbfs
-
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
oracleau groupefuse:usermod -a -G fuse oracle -
Mettre à jour les droits sur
dfbfs_clientchown 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.dbfssurdbfs_clientln -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_otherau fichier/etc/fuse.conf -
Ajouter dans
/etc/fstabecho '/sbin/mount.dbfs#/@pdb01_oci /mnt/pdb01 fuse wallet,rw,user,allow_other,direct_io,noauto,default 0 0' >> /etc/fstab
-
Création du script
/home/grid/mount-dbfs-pdb01qui exécute les actions de montage/démontage du point de montage/mnt/pdb01cp ~/plescripts/db/dbfs/mount-dbfs ~/mount-dbfs-pdb01 -
Création d'une ressource locale
pdb.pdb01.dbfscrsctl 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
- Avec le compte
oracleexécuter le script :drop_dbfs.sh -db=... -pdb=.... - Pour désinstaller
fusecomplètement avec le compterootexécuter le scriptroot_drop_all.sh ...
- 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.
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.