什么是DBFS
DBFS,全称为Oracle Database Filesystem,这是一个类似于NFS的可共享的网络文件系统,不同之处在于DBFS将文件以SecureFiles LOBs的形式存储在数据库中。

图1-DBFS结构
相比较NFS,DBFS有诸多优点:
ü 除了可以使用标准的POSIX接口来访问、操作文件系统外,还支持PL/SQL、Java、OCI等方式方便的访问、操作文件系统;
ü 可以使用RMAN方便的将文件系统备份到磁带库或者云存储(目前只支持Amazon S3);
ü 可以使用DataGuard方便的使文件系统做到高可用;
DBFS的安装
同NFS一样,DBFS也分为服务端和客户端。为方便起见,实验环境服务端和客户端为同一台机器,操作系统为Oracle Linux 6.5,数据库为11.2.0.4,数据存储使用ASM。
1、服务端的安装
首要条件是要有一个正常运行的Oracle数据库。需要先创建一个表空间用于DBFS的存储:
- SQL> CREATE TABLESPACE DBFS_TEST_TBS DATAFILE '+DATA01' SIZE 1G;
- Tablespace created.
- SQL> CREATE USER DBFS_TEST IDENTIFIED BY DBFS_TEST DEFAULT TABLESPACE DBFS_TEST_TBS QUOTA UNLIMITED ON DBFS_TEST_TBS;
- User created.
- SQL> GRANT CREATE SESSION,RESOURCE,CREATE TABLE,CREATE PROCEDURE,DBFS_ROLE TO DBFS_TEST;
- Grant succeeded.
- SQL> conn DBFS_TEST/DBFS_TEST
- Connected.
- SQL> @?/rdbms/admin/dbfs_create_filesystem.sql DBFS_TEST_TBS DBFS_TEST_FS
- No errors.
- --------
- CREATE STORE:
- begin dbms_dbfs_sfs.createFilesystem(store_name => 'FS_DBFS_TEST_FS', tbl_name
- => 'T_DBFS_TEST_FS', tbl_tbs => 'DBFS_TEST_TBS', lob_tbs => 'DBFS_TEST_TBS',
- 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_DBFS_TEST_FS',
- provider_name => 'sample1', provider_package => 'dbms_dbfs_sfs'); end;
- --------
- MOUNT STORE:
- begin dbms_dbfs_content.mountStore(store_name=>'FS_DBFS_TEST_FS',
- store_mount=>'DBFS_TEST_FS'); end;
- --------
- CHMOD STORE:
- declare m integer; begin m := dbms_fuse.fs_chmod('/DBFS_TEST_FS', 16895); end;
- No errors.
2、客户端挂载
首先需要安装Oracle Database Client,Client的安装这里不再多讲。除了Client,还需要安装几个系统包kernel-devel、fuse、fuse-libs:
- # yum install kernel-devel
- # yum install fuse fuse-libs
- # echo "/usr/local/lib" >> /etc/ld.so.conf.d/usr_local_lib.conf
- # cd /usr/local/lib
# export ORACLE_HOME=/u01/app/oracle/product/database/11.2.0/db_1
# ln -s $ORACLE_HOME/lib/libclntsh.so.11.1
# ln -s $ORACLE_HOME/lib/libnnz11.so
# ln -s /lib64/libfuse.so //不同的操作系统下,fuse-lib的路径可能会不一样 - #
- # ldconfig
建立挂载点:
- # mkdir /dbfs_test_fs
- # chown oracle:oinstall /dbfs_test_fs
- $ cat >> tnsnames.ora
- DBFS_TEST =
- (DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
- )
- (CONNECT_DATA =
- (SERVICE_NAME = DBFS_TEST)(SERVER = DEDICATED)
- )
- )
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 26-MAY-2015 12:44:39
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = DBFS_TEST)(SERVER = DEDICATED)))
OK (10 msec)
- $ $ORACLE_HOME/bin/dbfs_client DBFS_TEST@DBFS_TEST /dbfs_test_fs
- Password:
- $ df -h
- Filesystem Size Used Avail Use% Mounted on
- /dev/mapper/vg_ogg-lv_sys 20G 15G 4.1G 78% /
- tmpfs 499M 287M 212M 58% /dev/shm
- /dev/sda1 477M 50M 403M 11% /boot
- /dev/mapper/vg_ogg-lv_data 18G 44M 17G 1% /data
- dbfs-DBFS_TEST@DBFS_TEST:/ 1023M 120K 1023M 1% /dbfs_test_fs
- $ cd /dbfs_test_fs/DBFS_TEST_FS
- $ cat > test
- fsdfad
- ^C
- $ ls -ltr
- total 1
- -rw-r--r--. 1 oracle oinstall 7 May 26 12:50 test
- $ cat test
- fsdfad
- > desc DBFS_TEST.T_DBFS_TEST_FS
- Name Null? Type
- ----------------------------------------------------------------------------------------- -------- ------------------------------------------------------------
- VOLID NOT NULL NUMBER
- CSNAP# NOT NULL NUMBER
- LSNAP# NUMBER
- PATHNAME NOT NULL VARCHAR2(1024)
- ITEM NOT NULL VARCHAR2(256)
- PATHTYPE NOT NULL NUMBER(38)
- FILEDATA BLOB
- POSIX_NLINK NUMBER(38)
- POSIX_MODE NUMBER(38)
- POSIX_UID NUMBER(38)
- POSIX_GID NUMBER(38)
- STD_ACCESS_TIME NOT NULL TIMESTAMP(6)
- STD_ACL VARCHAR2(1024)
- STD_CHANGE_TIME NOT NULL TIMESTAMP(6)
- STD_CONTENT_TYPE VARCHAR2(1024)
- STD_CREATION_TIME NOT NULL TIMESTAMP(6)
- STD_DELETED NOT NULL NUMBER(38)
- STD_GUID NOT NULL NUMBER(38)
- STD_MODIFICATION_TIME NOT NULL TIMESTAMP(6)
- STD_OWNER VARCHAR2(32)
- STD_PARENT_GUID NOT NULL NUMBER(38)
- STD_REFERENT VARCHAR2(1024)
- OPT_HASH_TYPE VARCHAR2(32)
- OPT_HASH_VALUE VARCHAR2(128)
- OPT_LOCK_COUNT NUMBER(38)
- OPT_LOCK_DATA VARCHAR2(128)
- OPT_LOCK_STATUS NUMBER(38)
-
- > SELECT VOLID,PATHNAME,ITEM FROM DBFS_TEST.T_DBFS_TEST_FS;
-
- VOLID PATHNAME ITEM
- ---------- ------------------------------------------------------------ ------------------------------------------------------------
- 0 /test test
- 0 / ROOT
- 0 /.sfs .sfs
- 0 /.sfs/attributes attributes
- 0 /.sfs/tools tools
- 0 /.sfs/snapshots snapshots
- 0 /.sfs/RECYCLE RECYCLE
- 0 /.sfs/content content
需要注意的是执行挂载操作的的窗口不能关闭,挂载操作也不能CTRL+C结束,否则挂载点也就断开了。所以这种方式只适合临时使用,我们可以使用nohup将挂载放在后台,这样就能保证文件系统能一直正常使用了:
- $ nohup $ORACLE_HOME/bin/dbfs_client DBFS_TEST@DBFS_TEST /dbfs_test_fs < dbfs_test_password &
- [1] 4789
- $ cat dbfs_test_password
- DBFS_TEST
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13885898/viewspace-1672059/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13885898/viewspace-1672059/