DBFS(Oracle Database File System)就是Oracle数据库11gR2中提供的能够在Linux和Solaris操作系统中将Oracle数据库当成文件系统来使用的功能.在DBFS内部,文件是以SecureFiles LOBs(对比与以前的BasicFiles LOBs)的形式存储在数据表中.这个功能第一个是存储图片或者文档,第二个功能就是在RAC或者XD中部署OGG是一个不错的选择.
安装fuse相关包
[root@xifenfei ~]# mount /dev/cdrom /media mount: block device /dev/cdrom is write-protected, mounting read-only [root@xifenfei ~]# cd /media/Server [root@xifenfei Server]# ls fuse* fuse-2.7.4-8.0.1.el5.x86_64.rpm fuse-devel-2.7.4-8.0.1.el5.x86_64.rpm fuse-libs-2.7.4-8.0.1.el5.x86_64.rpm fuse-devel-2.7.4-8.0.1.el5.i386.rpm fuse-libs-2.7.4-8.0.1.el5.i386.rpm [root@xifenfei Server]# rpm -ivh fuse-libs-2.7.4-8.0.1.el5.x86_64.rpm warning: fuse-libs-2.7.4-8.0.1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:fuse-libs ########################################### [100%] [root@xifenfei Server]# rpm -ivh fuse-devel-2.7.4-8.0.1.el5.x86_64.rpm warning: fuse-devel-2.7.4-8.0.1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:fuse-devel ########################################### [100%] [root@xifenfei Server]# rpm -ivh fuse-2.7.4-8.0.1.el5.x86_64.rpm warning: fuse-devel-2.7.4-8.0.1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:fuse ########################################### [100%]
系统配置
[root@xifenfei Server]# cd / [root@xifenfei /]# mkdir dbfs [root@xifenfei /]# chown ora11g:oinstall dbfs [root@xifenfei /]# ls -l|grep dbfs drwxr-xr-x 2 ora11g oinstall 4096 Sep 1 16:41 dbfs [root@xifenfei /]# echo "/usr/local/lib" >> /etc/ld.so.conf.d/usr_local_lib.conf [root@xifenfei /]# export ORACLE_HOME=/u01/oracle11 [root@xifenfei /]# ln -s $ORACLE_HOME/lib/libclntsh.so.11.1 /usr/local/lib/libclntsh.so.11.1 [root@xifenfei /]# ln -s $ORACLE_HOME/lib/libnnz11.so /usr/local/lib/libnnz11.so [root@xifenfei /]# ln -s /lib64/libfuse.so.2 /usr/local/lib/libfuse.so.2 [root@xifenfei /]# cd /usr/local/lib [root@xifenfei lib]# ls -l total 0 lrwxrwxrwx 1 root root 35 Sep 1 16:45 libclntsh.so.11.1 -> /u01/oracle11/lib/libclntsh.so.11.1 lrwxrwxrwx 1 root root 19 Sep 1 16:46 libfuse.so.2 -> /lib64/libfuse.so.2 lrwxrwxrwx 1 root root 29 Sep 1 16:46 libnnz11.so -> /u01/oracle11/lib/libnnz11.so [root@xifenfei lib]# ldconfig [root@xifenfei lib]# chmod +x /usr/bin/fusermount [root@xifenfei lib]# ls -l /usr/bin/fusermount lrwxrwxrwx 1 root root 15 Sep 1 16:37 /usr/bin/fusermount -> /bin/fusermount [root@xifenfei lib]# ls -l /bin/fusermount -rwsr-x--x 1 root fuse 23544 Oct 18 2011 /bin/fusermount
相关表空间/用户配置
SQL> create tablespace dbfs_ts 2 datafile '/u01/oradata/ora11g/xifenfei01.dbf' 3 size 20m autoextend on next 10m maxsize 30g; Tablespace created. SQL> create user dbfs identified by dbfs 2 default tablespace dbfs_ts 3 quota unlimited on dbfs_ts; User created. SQL> grant create session, resource, create view, dbfs_role to dbfs ; Grant succeeded.
创建filesystem
[ora11g@xifenfei admin]$ cd $ORACLE_HOME/rdbms/admin [ora11g@xifenfei admin]$ sqlplus dbfs/dbfs@ora11g SQL*Plus: Release 11.2.0.3.0 Production on Sat Sep 1 16:43:04 2012 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> @dbfs_create_filesystem.sql dbfs_ts my_dbfs No errors. -------- CREATE STORE: begin dbms_dbfs_sfs.createFilesystem(store_name => 'FS_MY_DBFS', tbl_name => 'T_MY_DBFS', tbl_tbs => 'dbfs_ts', lob_tbs => 'dbfs_ts', do_partition => false, partition_key => 1, do_compress => false, compression => '', do_dedup => false, do_encrypt => false); end; -------- REGISTER STORE: begin dbms_dbfs_content.registerStore(store_name=> 'FS_MY_DBFS', provider_name => 'sample1', provider_package => 'dbms_dbfs_sfs'); end; -------- MOUNT STORE: begin dbms_dbfs_content.mountStore(store_name=>'FS_MY_DBFS', store_mount=>'my_dbfs'); end; -------- CHMOD STORE: declare m integer; begin m := dbms_fuse.fs_chmod('/my_dbfs', 16895); end; No errors.
挂载dbfs
[ora11g@xifenfei ~]$ more /home/ora11g/xifenfei_pwd dbfs [ora11g@xifenfei ~]$ nohup dbfs_client dbfs@ora11g /dbfs <xifenfei_pwd & [1] 3694 [ora11g@xifenfei ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 3.9G 3.2G 462M 88% / /dev/sda1 99M 24M 71M 25% /boot tmpfs 1002M 184M 818M 19% /dev/shm /dev/sdb1 20G 8.9G 9.9G 48% /u01 df: `/dbfs': Resource temporarily unavailable
查询mos发现 OS 2.6.32-100.26.2.el5 to: 2.6.32-300.10.1.el5uek (Linux UEK Kernel)会出现该问题,解决方法是升级Kernel或者不使用UEK
[ora11g@xifenfei ~]$ uname -a Linux xifenfei 2.6.32-300.10.1.el5uek #1 SMP Wed Feb 22 17:37:40 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
不幸刚好中招,现在升级是不太可能的事情,只能使用其他kernel来启动系统(下图选择第二个)
重新挂载dbfs并且测试
[ora11g@xifenfei ~]$ uname -a Linux xifenfei 2.6.18-308.el5 #1 SMP Sat Feb 25 12:40:07 EST 2012 x86_64 x86_64 x86_64 GNU/Linux [ora11g@xifenfei ~]$ nohup dbfs_client dbfs@ora11g /dbfs <xifenfei_pwd & [1] 3694 [ora11g@xifenfei ~]$ nohup: appending output to `nohup.out' [ora11g@xifenfei ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 3.9G 3.2G 462M 88% / /dev/sda1 99M 24M 71M 25% /boot tmpfs 1006M 184M 822M 19% /dev/shm /dev/sdb1 20G 8.9G 9.9G 48% /u01 dbfs-dbfs@ora11g:/ 19M 120K 19M 1% /dbfs [ora11g@xifenfei ~]$ cd /dbfs [ora11g@xifenfei dbfs]$ ls my_dbfs [ora11g@xifenfei dbfs]$ cd my_dbfs/ [ora11g@xifenfei my_dbfs]$ ls [ora11g@xifenfei my_dbfs]$ cat /etc/passwd>xifenfei.chf [ora11g@xifenfei my_dbfs]$ ll total 2 -rw-r--r-- 1 ora11g oinstall 1736 Sep 1 21:05 xifenfei.chf
卸载dbfs
[ora11g@xifenfei ~]$ fusermount -u /dbfs [ora11g@xifenfei ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 3.9G 3.2G 462M 88% / /dev/sda1 99M 24M 71M 25% /boot tmpfs 1006M 184M 822M 19% /dev/shm /dev/sdb1 20G 8.9G 9.9G 48% /u01
删除filesystem
cd $ORACLE_HOME/rdbms/admin sqlplus dbfs_user/dbfs_user SQL> @dbfs_drop_filesystem.sql my_dbfs
Alert: DBFS Is Not Working After Upgrade Linux Kernel To UEK Linux. [ID 1434327.1]
完善mount方法