Blog 
Oracle Direct NFS unter Linux und Windows konfigurieren für 11g und 12c

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:

  1. $ORACLE_HOME/dbs/oranfstab
  2. /etc/oranfstab
  3. /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

2 Kommentare zu “Oracle Direct NFS unter Linux und Windows konfigurieren für 11g und 12c

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Was kann CarajanDB für Sie tun?