Skip to content

Ohne Umwege – Oracle Datenbanken mit Direct NFS betreiben

Seit der Version 11g bietet die Oracle Datenbank die Möglichkeit, Datenbankinhalte die auf einem NFS Share abgelegt sind, direkt (also ohne das Betriebssystem) über die DB Software (RDBMS) anzubinden. Den dazu benötigten Treiber bringt die Oracle Software selbst mit. Das bietet mehrere Vorteile, vor allem, dass die Anbindung an den NFS Server über mehrere Pfade Redundant aufgebaut werden kann. Mit einigen Befehlen ist die Einrichtung abgeschlossen.

Von folgenden Voraussetzungen wird hier ausgegangen. Die Oracle DB Software (im Beispiel 19.8) ist auf einem Linux System installiert. Von einem vorhandenen NFS Export wird ebenfalls ausgegangen. In meinem Fall nutze ich einen NFS Share, den ich über mein Synology NAS freigegeben habe.

root@nas:~# showmount --exports
 Export list for nas:
 /volume2/ora19nfs_data 192.168.2.1/24

Wenn diese Voraussetzungen gegeben sind, geht es los mit der Konfiguration auf dem Datenbankserver. Zunächst aktivieren wir DirectNFS für die Datenbank Software. Dazu wechseln wir als Oracle OS Benutzer in den folgenden Pfad und aktivieren das DirectNFS Feature.

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk dnfs_on

Anschließend binden wir für die Datenbankkonfiguration den NFS Share im Betriebssystem ein. Dieser Schritt hat mich Anfangs verwirrt, da ich genau das vermeiden wollte. Nach etwas Überlegung macht es jedoch Sinn. Es ist notwendig, da ansonsten das Arbeiten über das Betriebssystem mit der Datenbank nicht möglich wäre und die Datenbank nicht startbar ist. Zuerst legen wir den Mount Punkt an und pflegen dann unseren NFS Share in die Datei /etc/fstab ein. Abschließend mounten wir den Share und legen die gewünschten Unterverzeichnisse an.

mkdir -p /db_data/ORA19NFS
chown -R oracle:dba /db_data

vi /etc/fstab
# Folgende Zeile dort einfügen. Die Pfade sind entsprechend eurer Umgebung anzupassen
nas:/volume2/ora19nfs_data /db_data/ORA19NFS nfs rw,bg,hard,nointr,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0 0 0

mount -a
df -h
 …
 nas:/volume2/ora19nfs_data  2.7T  732G  2.0T  27% /db_data/ORA19NFS

Als nächstes legen wir uns eine Datei oranfstab an unter $ORACLE_HOME/dbs/. In meinem Fall habe ich keine Anbindung über mehrere Netzwerkpfade, eine Beschreibung über die möglichen Konfigurationen der oranfstab könnt ihr hier finden.

server: nas
local: 192.168.2.109
path: 192.168.2.210
export: /volume2/ora19nfs_data mount: /db_data/ORA19NFS

Weitere Pfade können einfach angegeben werden, indem die Parameter local und path dupliziert und mit anderen IP Adressen angegeben werden. Es können so bis zu 4 Pfade spezifiziert werden. Sollte es mehrere NFS Exporte und Mount Punkte geben, können diese ebenfalls als Liste dortgeführt werden. Ebenfalls ist es möglich verschiedene NFS Versionen mittels nfs_version anzugeben. Hier findet ihr einen Artikel, der die verschiedenen NFS Versionen aus Performancesicht gegenüberstellt.

Wenn wir jetzt eine Datenbank erstellen (bspw. über den dbca) und später die Datenbank hochfahren, werden wir im Alert.log der Datenbank einen Eintrag wie diesen hier finden:

2021-06-03T21:19:09.972950+02:00
Oracle instance running with ODM: Oracle Direct NFS ODM Library Version 6.0

Dieser verrät uns, dass die Datenbank mittels DirectNFS auf den Share zugreift. Wenn wir uns an der Datenbank mittels sqlplus anmelden, können wir desweiteren über die Views v$dnfs_servers und v$dnfs_files den Status der DirectNFS Anbindung und der Datenbankinhalte auf den verschiedenen Shares (falls wir mehrere eingebunden haben) erkennen.

select svrname, dirname, nfsversion from v$dnfs_servers;

SVRNAME              DIRNAME                 NFSVERSION
nashomelab           /volume2/ora19nfs_data  NFSv3.0

select filename from v$dnfs_files;

FILENAME
/db_data/ORA19NFS/admin/cntrl/control01ORA19NFS.ctl
/db_data/ORA19NFS/redo01/control02ORA19NFS.ctl
/db_data/ORA19NFS/redo02/control03ORA19NFS.ctl
/db_data/ORA19NFS/data01/system01.dbf
/db_data/ORA19NFS/data01/sysaux01.dbf
/db_data/ORA19NFS/data01/undo01.dbf
/db_data/ORA19NFS/data01/users01.dbf
/db_data/ORA19NFS/temp/temp01.dbf
/db_data/ORA19NFS/redo01/redo01a.log
/db_data/ORA19NFS/redo02/redo01b.log
/db_data/ORA19NFS/redo01/redo02a.log
/db_data/ORA19NFS/redo02/redo02b.log
/db_data/ORA19NFS/redo01/redo03a.log
/db_data/ORA19NFS/redo02/redo03b.log

Leider ist die Performance in meinem Homelab aufgrund der schwachen Netzwerkanbindung zu meinem NAS nicht aussagekräftig. Dennoch habe ich im beruflichen Umfeld einige (produktive) Datenbanken mittels DirectNFS aufgebaut und gerade wenn es keine (kostenintensive) SAN Infrastruktur gibt, ist diese Art der Anbindung recht schnell und vor allem Ausfallsicher konfigurierbar.

Philip

Leave a Reply

Your email address will not be published. Required fields are marked *