Table of Contents

Overview

It is public knowledge that NFS is SLOW solution for Oracle in any way. Even though it is a supported option for Oracle RAC, it is VERY BAD idea, because of the over caching and the fact that Oracle will have to use the default system driver to send it commands and requests.

Thankfully, there is a solution for that called NFS Direct, which bypasses the default NFS driver and issues direct requests to the NFS. Direct NFS provides faster performance than what can be provided by the operating system's NFS driver as Oracle bypasses the operating system and generates exactly the requests it needs (no user configuration or tuning required). Data is cached just once in user space, which saves memory (no second copy in kernel space). Performance is further improved by load balancing across multiple network interfaces (if available).

Implementation

Direct NFS is fairly easy to implement. Since it searched for the default location for NFS information:

/etc/mtab

/etc/fstab

/etc/oranfstab

Oracle needs to find the NFS in at least one of these files. P.S. Bear in mind that the oranfstab has different configuration syntax than the usual /etc/fstab:

server: TAURUS
local:  IP_NFS_SERVER
path:  IP_DEST_SERVER
export: /be_ora_logs mount: /backup

To enable the Direct NFS after that is very easy:

Enable

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

Disable

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

After you have enabled the NFS, a message in the alert log should be displayed:

Oracle instance running with ODM: Oracle Direct NFS ODM Library Version 4.0

Possible troubles

By default, Windows “blocks” writes by NFS direct….not so smart, so check that from windows as follows:

PS C:\Windows\system32> reg query HKLM\Software\Microsoft\ServerForNFS\CurrentVersion\Exports /s

HKEY_LOCAL_MACHINE\Software\Microsoft\ServerForNFS\CurrentVersion\Exports\0
    Path    REG_SZ    F:\be_ora_logs
    Alias    REG_SZ    be_ora_logs
    GlobalPerm    REG_DWORD    0x1
    AllowAnonymousAccess    REG_DWORD    0x2
    RestrictChown    REG_DWORD    0x1     <- This little fellow.
    SymbolicLinks    REG_DWORD    0x1
    TruncateNames    REG_DWORD    0x0
    UnmappedUID    REG_DWORD    0xfffffffe
    UnmappedGID    REG_DWORD    0xfffffffe
    Encoding    REG_DWORD    0x7
    SecurityFlavors    REG_DWORD    0x2
    NumClients    REG_DWORD    0x5
    Clients    REG_SZ    N,server1,server2

PS C:\Windows\system32>

If you change it to “0”, should be fine:

PS C:\Users\Administrator> reg add HKLM\Software\Microsoft\ServerForNFS\CurrentVersion\Exports\0 /v RestrictChown /t REG_DWORD /d 0

Verify

PS C:\Windows\system32> reg query HKLM\Software\Microsoft\ServerForNFS\CurrentVersion\Exports /s

HKEY_LOCAL_MACHINE\Software\Microsoft\ServerForNFS\CurrentVersion\Exports\0
    Path    REG_SZ    F:\be_ora_logs
    Alias    REG_SZ    be_ora_logs
    GlobalPerm    REG_DWORD    0x1
    AllowAnonymousAccess    REG_DWORD    0x2
    RestrictChown    REG_DWORD    0x0     <- Fixed
    SymbolicLinks    REG_DWORD    0x1
    TruncateNames    REG_DWORD    0x0
    UnmappedUID    REG_DWORD    0xfffffffe
    UnmappedGID    REG_DWORD    0xfffffffe
    Encoding    REG_DWORD    0x7
    SecurityFlavors    REG_DWORD    0x2
    NumClients    REG_DWORD    0x5
    Clients    REG_SZ    N,server1,server2

After that, restart the NFS service and all should be running normally :)

Verify

You can verify if the NFS driver has been configured as follows:

SQL> select * from v$dnfs_servers;

        ID SVRNAME              DIRNAME            MNTPORT    NFSPORT NFSVERSION            WTMAX      RTMAX     CON_ID RDMAENABLE   RDMAPORT SECURITY
---------- -------------------- --------------- ---------- ---------- ---------------- ---------- ---------- ---------- ---------- ---------- ----------
         1 10.200.15.30         /be_ora_logs          2049       2049 NFSv3.0               32768      32768          0 No                  0 sys
SQL>

That shows us that the NFS is configured on server: 10.200.15.30 on this partition: /be_ora_logs

You can also verify if the NFS is ACTUALLY used during a backup. You should be able to observe the following output:

SQL> select CH_ID, SVR_ID, SENDS, RECVS, PINGS from v$dnfs_channels;

     CH_ID     SVR_ID      SENDS      RECVS      PINGS
---------- ---------- ---------- ---------- ----------
         0          2        366        608          0