Mit Datenbankversion 11g eingeführt, bietet Oracle mit Direct NFS einen integrierten NFS-Client, der unabhängig vom OS-basierten NFS-Client, der Oracle-Instanz direkten Zugriff auf den NFS Storage ermöglicht und damit Oracle-eigene Optimierungen realisiert. Zusätzlich kann darüber bspw. ein Multipathing über vier parallele Pfade implementiert werden, unabhängig von Switches, NIC-Bonding oder -Teaming. Die Oracle Instanz konfiguriert die NFS-Kommunikation automatisch und erleichtert damit auch die Konfiguration unter RAC. Mit Hilfe von Direct NFS kurz dNFS, können Oracle-Instanzen NFS Storge auch unter Windows nutzen.
Der Direct NFS Client unterstützt unter Datenbankversion 11g NFS Server mit NFSv3 und ab 12c NFSv3 bis NFSv4.1. Bevor Direct NFS jedoch genutzt werden kann, muss es zumindest bei einer Single-Instance aktiviert und eingerichtet werden. Dazu sind mindestens zwei Vorraussetzungen zu erfüllen. Erstens die Direct NFS ODM (Oracle Disk Manager) Library muss beim Start der Instanz geladen werden und zweitens Mount Point und NFS Storage müssen konfiguriert werden. Nachfolgend die mögliche Minimalkonfiguration jeweils unter Linux und Windows:
1. Direct NFS ODM Library laden
Unter Linux muss der Direct NFS Client aktiviert werden.
Linux: Einloggen als Oracle Software installation owner
> cd $ORACLE_HOME/rdbms/lib > make -f ins_rdbms.mk dnfs_on
Diese Variante ist allerdings erst ab 11.2 unterstützt.
Manuell kann man auch folgendermaßen vorgehen:
> cd $ORACLE_HOME/lib > mv libodm11.so libodm11.so.stub > ln -s libnfsodm11.so libodm11.so
Unter Windows muss die Standard ODM Library, oraodm11.dll durch die ODM NFS Library, oranfsodm11.dll im bin Verzeichnis ersetzt werden.
Windows: Datenbank herunterfahren und ins ORACLE_HOME\bin Verzeichnis wechseln
> copy oraodm11.dll oraodm11.dll.stub > copy /Y oranfsodm11.dll oraodm11.dll
Beim Starten der Datenbank sollte sowohl unter Linux als auch Windows im Alert Log folgende Zeile zu finden sein:
Oracle instance running with ODM: Oracle Direct NFS ODM Library Version 3.0
2. Mount Point und NFS Storage konfigurieren
a. Konfiguration des Mount Points
Linux:
Für das Erstellen des Mount Points genügt unter Linux generell die Konfiguration der /etc/fstab bzw. /etc/mtab. Zusätzlich kann die oranfstab erstellt werden, um Oracle spezifische Optionen zu nutzen. Der Direct NFS Client bestimmt die Einstellungen des oder der Mount Points in folgender Reihenfolge:
- $ORACLE_HOME/dbs/oranfstab
- /etc/oranfstab
- /etc/mtab
Linux: fstab Mount Optionen: Genrell sollte man „default“ eine Chance geben. Klappt das nicht sind die entscheidenden Einträge die NFS Buffer Size Parameter rsize und wsize. Oracle empfiehlt den Wert 32768. Im RAC sollte der Eintrag in der fstab auf jedem Node entsprechend gleich sein.
nas1:/volume1/oranfs /mnt/oranfs nfs rw,bg,hard,rsize=32768,wsize=32768,nfsvers=3,nointr,timeo=600,actimeo=0,tcp,addr=172.16.0.2 0 0
Linux: Optionale oranfstab (Mindestangaben Fett markiert):
server: nas1 # Alias frei wählbar path: 172.16.0.2 # IP NFS-Server local: 172.16.30.40 # Optional IP Datenbank-Server path: # Optional bis zu 4 path/local Paare für Multipathing local: # Optional weiterer Pfad export: /volume1/oranfs/oradata mount: /mnt/oranfs/oradata # export: NFS-Server Pfad, mount: Lokaler Pfad export: mount: # Optional weitere export/mount Pfade - unbegrenzt mnt_timeout: 30 # Optional Timeout bei fehlgeschlagenem Mounten dontroute # Optional Messages should not be routed by OS nfs_version: nfsv4.1 # Optional ab 12c + NFSv4 (default: NFSv3) management # Optional ab 12c use management interface for SNMP community # Optional ab 12c community string for SNMP server: nas2 # weitere Server durch Leerzeile getrennt path: 172.16.0.3 export: /volume/path/nfs mount: /local/path
Windows:
Im Gegensatz zu Linux muss unter Windows die oranfstab bereit gestellt werden. Der Direct NFS Client bestimmt ausschließlich über ORACLE_HOME\dbs\oranfstab die Mount Einstellungen. Die oranfstab muss entsprechend manuell (als Textfile ohne Dateiendung) angelegt werden. Der angegebene Mount-Pfad (hier: D:\oranfs\oradata) muss auf dem Oracle-Server nicht existieren. Bei Angabe des Pfades erkennt die Oracle-Instanz automatisch, dass es sich um einen NFS-Pfad handelt und legt die Dateien auf dem NFS-Server an. Im RAC muss auf allen Nodes die Datei entsprechend identisch angelegt werden.
Windows: oranfstab (Mindestangaben Fett markiert)
server: nas1 # Alias frei wählbar path: 172.16.0.2 # IP NFS-Server local: 172.16.30.40 # Optional IP Datenbank-Server path: # Optional bis zu 4 path/local Paare für Multipathing local: # Optional Multipathing für Lastverteilung und Failover export: /volume1/oranfs/oradata mount: D:\oranfs\oradata # export: NFS-Server Pfad, mount: Localer Pfad export: mount: # Optional weitere export/mount Pfade - unbegrenzt mnt_timeout: 30 # Optional Timeout bei fehlgeschlagenem Mounten uid: 65534 # Optional User ID für NFS Server Zugriff gid: 65534 # Optional Group ID für NFS Server Zugriff nfs_version: nfsv4.1 # Optional ab 12c + NFSv4 (default: NFSv3) server: nas2 # weitere Server durch Leerzeile getrennt path: 172.16.0.3 export: /volume/path/nfs mount: D:\local\path
b. Konfiguration des NFS Storage
Der NFS-Server muss zunächst mindestens NFS-Version 3 mitbringen.
Speziell bei Linux-basierten Servern gibt es ein Problem mit der Port-Reservierung, da die Oracle-Instanz nicht als root-User läuft. Daher muss zum Verhindern einer Abweisung durch den NFS-Server auf diesem die Export-Option insecure in der /etc/exports gesetzt werden. Hiermit werden Verbindungen über nicht-priviligierte Ports über 1024 zugelassen.
nas1> cat /etc/exports /volume1/oranfs *.carajandb.intra(rw,async,no_wdelay,insecure,root_squash,insecure_locks,sec=sys,anonuid=1024,anongid=100)
Damit das Anlegen eines Tablespace auf dem NFS-Server reibungslos klappt, sollten auch die Berechtigungen für den Export-Ordner richtig gesetzt sein.
Linux:
nas1> cd /volume1/oranfs > chown oracle:dba oradata > chmod 755 oradata
Windows: Der Direct NFS Client nutzt standardmäßig uid:65534 und gid:65534, was nobody und nogroup auf dem NFS-Server entsprechen sollte. Der Zugriff darüber sollte gewähreistet sein kann aber im Zweifel explizit in der oranfstab gesetzt werden. Für die richtigen Permissions legen wir auf dem NFS-Server einen User oracle und die Group ORA_DBA an und setzen die Berechtigungen entsprechend:
nas1> cd /volume1/oranfs > chown oracle:ORA_DBA oradata > chmod 755 oradata
c. Checks
Zunächst zur Abfrage ob der NFS Server verbunden ist:
select * from v$dnfs_servers; ID SVRNAME DIRNAME MNTPORT NFSPORT WTMAX RTMAX -- ------------ ------------------------ ------- ------- ------ ------ 1 nas1 /volume1/oranfs/oradata 892 2049 131072 131072
Ist die Konfiguration noch nicht richtig, liefert die Abfrage einfach keine Zeilen zurück. Nachdem die Instanz durchgestartet wurde, muss der Pfad beim ersten mal angesprochen werden bevor die View ein Ergebnis liefert. Zum Test ein File auf dem Mount anlegen und obige Abfrage nochmal absetzen:
Windows:
SQL> create tablespace test_tbs datafile 'D:\oranfs\oradata\test_tbs.dbf' size 10M;
Linux:
SQL> create tablespace test_tbs datafile '/mnt/oranfs/oradata/test_tbs.dbf' size 10M;
Funktioniert die Konfiguration, kann mit der Nachfolgenden Abfrage festgestellt werden ob tatsächlich der Zugriff über Direct NFS erfolgt. Liefert die Abfrage keine Zeilen zurück wird unter Linux weiter der NFS-Client des OS genutzt. Hilfe liefert dann nur das Alert Log und Trace Files.
select * from v$dnfs_files; FILENAME FILESIZE PNUM SVR_ID ------------------------------ -------- ---- ------ d:/oranfs/oradata/test_tbs.dbf 10493952 10 1
Noch weitere Infos liefern diese Views:
select * from v$dnfs_channels; select * from v$dnfs_stats;
d. Troubleshooting
Linux: Eine mögliche Fehlerquelle könnten die falsch gesetzten Permissions der oradism sein. Der Direct NFS Client braucht zum initialisieren der Kommunikation mit dem NFS Storage root Priviliegien. Hier ist dann der Owner nicht root sondern oracle. Das Alert Log gibt dann folgende Fehlermeldung:
Direct NFS: please check that oradism is setuid Direct NFS: warn could not mount /volume1/oranfs/oradata on svr 172.16.0.2 via dNFS > ls -l $ORACLE_HOME/bin/oradism -rwxr-x--- 1 oracle oinstall > chown root:root oradism > chmod 4755 oradism
Generell sehen die Permissions so aus:
> ls -l $ORACLE_HOME/bin/oradism -rwsr-x--- 1 root oinstall
For Oracle 12.2 Windows the DLL copy procedure does not work. Instead run enable_dnfs.bat (found in the bin directory).
Thanks for the update. Haven’t tested it yet.