dnfs
oracle 11.2.0.3 的dnfs与之前版本的dnfs配置还是有很多区别的,在测试后,整理下面的测试过程来说明oracle 11.2.0.3中的dnfs配置过程。
环境:
centos 6.5
Oracle 11.2.0.3
说明:
Oracle 11.2.0.3中的DNFS,是在操作系统的nfs目录挂载正常后,在nfs client端上按照一定步骤启用oracle的DNFS,从而提高nfs性能。
所以整个测试过程也分为两个阶段,第一个阶段是操作系统上的nfs配置和挂载,需要在nfs的server端和client端分别操作,该阶段与oracle数据库无关;
第二个阶段,只需要在nfs的client端进行,主要配置oracle文件,替换lib,在oracle中确认状态;
整个测试过程中都以oracle用户为命令操作用户,如果需要root权限,则使用sudo方式;
nfs Server端: IP为10.0.1.100;Hostname为enmoedu2.example.com ;nfs目录为/vol/oradata
nfs Client端: IP为10.0.1.200;Hostname为enmoedu1.example.com ;nfs挂载目录为/u01/nfs
阶段一:启用nfs服务
NFS服务端:
1.确认nfs和portmap服务状态:
sudo /etc/init.d/nfs status
sudo /etc/rc.d/init.d/portmap status
如果没有启动,使用下面的命令启用:
sudo /etc/init.d/nfs start
sudo /etc/rc.d/init.d/portmap start
2.配置nfs导出文件:
$ cat /etc/exports
/vol/oradata *(rw,sync,no_wdelay,insecure,insecure_locks,no_root_squash)
注:参数设置内容说明:
第一部分为本地要导出的文件路径,在本例中,就是将/vol/oradata目录作为nfs共享出去;
第二部分指定可以连接的主机,可以指定nfs客户端IP地址,如果为*号,就说明所有的客户端都可以连接改nfs共享;
第三部分小括号内的参数,对nfs共享目录的权限等进行了说明,如可以读写,加密,锁定等设置;
3.导出文件确认:
whereis exportfs
sudo /usr/sbin/exportfs
sudo /usr/sbin/exportfs -rv
建立一个测试文件:
touch /vol/ordata/1.txt
echo "123" > /vol/oradata/1.txt
确认挂载状态:
$ sudo /usr/sbin/showmount -e
Export list for enmoedu2:
/vol/oradata *
$
如果客户端挂载了nfs目录,可以看到下面的结果:
$ sudo /usr/sbin/showmount -a
All mount points on enmoedu2:
192.0.2.11:/vol/oradata
NFS客户端:
1.确认portmap服务状态,
只有portmap服务启动时,客户端才能挂载NFS共享目录:
sudo /etc/rc.d/init.d/portmap status
如果服务没有启动,使用下面的命令启动:
sudo /etc/rc.d/init.d/portmap start
2.客户端服务启动后,创建挂载点并挂载nfs目录:
cd /u01/
mkdir nfs
mount 192.0.0.2:/vol/oradata /u01/nfs
3.确认共享文件内容:
cat /u01/nfs/1.txt
如果再nfs客户端能够正常挂载nfs目录,并看到里面的内容与server端一致,则说明操作系统的nfs目录挂载正常。
阶段二:在NFS客户端设置并使用DNFS
Oracle DNFS是在操作系统NFS挂载正常的情况下,在客户端设置挂载命令,并对相应的oracle数据库lib进行替换,绕过操作系统的NFS驱动,使用oracle的DNFS驱动。
配置DNFS有几点需要注意:
DNFS的配置全部在NFS客户端进行,NFS服务端不需要进行任何操作;
DNFS的配置步骤,先编写oranfstab文件,然后替换lib对象,启动DNFS,如果客户端数据库是open状态,替换后需要重启生效;
DNFS配置完毕后,没有使用时,在v$dnfs_servers视图中查询不到,只有客户端使用这个目录,创建了文件后,才会显示nfs服务端信息;
NFS Client端启用DNFS步骤:
1.使用oracle用户编辑$ORACLE_HOME/dbs/oranfstab文件,内容如下
$ cd $ORACLE_HOME/dbs
$ cat oranfstab
server: enmoedu2.example.com
path:192.0.2.12
export: /vol/oradata mount: /u01/nfs
注:参数设置内容说明:
server为NFS服务的名称,一般填写服务端的主机名;
path是NFS服务器的名称,一般填写服务端的IP地址;
export是nfs服务器导出的路径;mount是nfs本地挂载的路径;
2.替换相关lib,启用DNFS
启用DNFS的步骤:
$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk dnfs_on
rm -f /u01/APP/oracle/product/11.2.0/db_1/lib/libodm11.so; cp /u01/app/oracle/product/11.2.0/db_1/lib/libnfsodm11.so /u01/app/oracle/product/11.2.0/db_1/lib/libodm11.so
注:该步骤与之前版本有有不同,11.2.0.3将操作封装成了上面的命令,之前版本是用这样的方式:
修改libodm11.so库文件的链接对象
$cd $ORACLE_HOME/lib
$mv libodm11.so libodm11.so.bak
$ln -s libnfsodm11.so libodm11.so
3.重启数据库,确认DNFS生效状态
如果nfs客户端数据库已经启动,则重启oracle数据库:
sqlplus / as sysdba
shutdown immediate
startup
启动后,查询nfs服务视图的内容:
SQL> select * from v$dnfs_servers;
no rows selected
结果发现服务视图内容为空,这并不是说,DNFS配置失败,即使配置成功,client并没有使用DNFS,也不会显示服务端信息;
在nfs的客户端数据库上,创建一个使用DNFS的表空间:
SQL> create tablespace dnfs datafile '/u01/nfs/dnfs01.dbf' size 20m;
Tablespace created.
此时再次查看nfs服务视图内容:
SQL> select * from v$dnfs_servers;
ID SVRNAME dirname MNTPORT NFSPORT WTMAX RTMAX
---------- ------------------------- -------------------- ---------- ---------- ---------- ----------
1 enmoedu2.example.com /vol/oradata 657 2049 32768 32768
可以看到,已经有了相关nfs服务器信息,上述在DNFS上创建表空的过程,在alert日志中记录为:
Tue May 19 15:36:19 2015
create tablespace dnfs datafile '/u01/nfs/dnfs01.dbf' size 20m
Tue May 19 15:36:19 2015
Starting background process SMCO
Tue May 19 15:36:19 2015
SMCO started with pid=24, OS id=13603
Tue May 19 15:36:20 2015
Direct NFS: channel id [0] path [192.0.2.12] to filer [enmoedu2.example.com] via local [] is UP
Direct NFS: channel id [1] path [192.0.2.12] to filer [enmoedu2.example.com] via local [] is UP
ERRORs in file /u01/app/oracle/diag/rdbms/prod1/PROD1/trace/PROD1_ora_13539.trc:
ORA-27041: unable to open file
linux Error: 2: No such file or directory
Additional information: 44
Additional information: 1432096244
Completed: create tablespace dnfs datafile '/u01/nfs/dnfs01.dbf' size 20m
日志中显示了DNFS的使用过程。
最后在NFS服务端上,查看DNFS的端口信息为:
[oracle@enmoedu2 dbs]$ sudo netstat -an |grep 2049
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN
tcp 0 0 192.0.2.12:2049 192.0.2.11:26409 ESTABLISHED
tcp 0 0 192.0.2.12:2049 192.0.2.11:59448 ESTABLISHED
tcp 0 0 192.0.2.12:2049 192.0.2.11:45394 ESTABLISHED
tcp 0 0 192.0.2.12:2049 192.0.2.11:1009 ESTABLISHED
udp 0 0 0.0.0.0:2049 0.0.0.0:*