oracle dbfs檔案系統介紹及使用測試

datapeng發表於2017-11-20

一、DBFS介紹

The Oracle Database File System (DBFS) creates a standard file system interface on top

of files and directories that are stored indata base tables. DBFS is similar to NFS in that

it provides a shared network file systemthat looks like a local file system. Like NFS,

there is a server component and a clientcomponent.

 

Dbfs在檔案和目錄之上建立了一個標準的檔案系統結構,並且將資料儲存在資料庫基表裡面。DBFS很像NFS,因為它提供了一個與本地檔案系統相同的共享的網路檔案系統。與NFS一樣,由ServerClient組成。

 

In DBFS, the server is the Oracle Database.Files are stored as SecureFiles LOBs in a

database table. A set of PL/SQL proceduresimplement the file system access

primitives such as create, open, read,write, and list directory. The implementation of

the file system in the database is calledthe DBFS Content Store. The DBFS Content

Store allows each database user to createone or more file systems that can be mounted

by clients. Each file system has its owndedicated tables that hold the file system

content.

 

DBFS中,ServerOracle資料庫,檔案儲存在表的一個SecureFiles LOBs 欄位裡面。一個PLSQL儲存過程的集合,提供了訪問檔案系統的基本操作,比如說createopenreadwritels DBFS目錄庫允許每個資料庫使用者建立一個或多個檔案系統,並且可以被clients使用。每個檔案系統擁有專有的資料表,保證檔案系統的內容。

 

 

體系結構如下圖所示

 

 

 

 

二、Client端安裝fuse

確定fuse版本

uname –a

Linux DB-SERVER-02 2.6.18-164.el5#1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

 

本機kernelversion 2.6.18

Kernel version 2.6.x

x>9都需要使用 fuse-2.7.4

下載fuse安裝包

下載地址:

或者

檢查kernel-devel

# rpm –q kernel-devel

如果沒有安裝,掛載安裝盤後安裝package

安裝fuse

$ tar -xzvf fuse-2.7.4.tar.gz

$ cd [fuse_src_dir]

$ ./configure --prefix=/usr --with-kernel=[yourkernel dir]

$ make

$ sudo su

# make install

# /sbin/depmod

# /sbin/modprobe fuse

# chmod 666 /dev/fuse

# echo "/sbin/modprobe fuse" >>/etc/rc.modules

示例

檢視是否安裝了所需安裝包

[root@mytest ~]# rpm -q kernel-devel

package kernel-devel is not installed

掛載光碟

[root@mytest dev]# mount /dev/hdc /mnt

mount: block device /dev/hdc iswrite-protected, mounting read-only
安裝kernel-devel

[root@mytest Server]# rpm -ivh kernel-devel-2.6.18-308.el5.x86_64.rpm

Preparing...               ########################################### [100%]

  1:kernel-devel           ###########################################[100%]

檢視kernelversion

[root@mytest Server]# uname -a

Linux mytest 2.6.18-308.el5#1 SMP Sat Feb 25 12:40:07 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

 

ftp fuse2.7.4 上傳至伺服器/root目錄下

[root@mytest ~]# pwd

/root

[root@mytest ~]# ls -l fuse-2.7.4.tar.gz

-rw-r--r-- 1 root root 506658 Jun 11 13:54 fuse-2.7.4.tar.gz

解壓

[root@mytest ~]# tar -xzvf fuse-2.7.4.tar.gz

 

[root@mytest ~]# cd fuse-2.7.4

安裝

[root@mytest fuse-2.7.4]#./configure

[root@mytest fuse-2.7.4]#make

[root@mytest fuse-2.7.4]#make install

[root@mytest fuse-2.7.4]#/sbin/depmod

[root@mytest fuse-2.7.4]#/sbin/modprobe fuse

[root@mytest fuse-2.7.4]#chmod 666 /dev/fuse

[root@mytest fuse-2.7.4]#echo "/sbin/modprobe fuse" >> /etc/rc.modules

三、ServerOracle資料庫配置

Server端配置流程

1建立表空間

新建的表空間用來儲存dbfs中相關資料。

2建立使用者

新建使用者用來管理dbfs相關的檔案以及源資料

3授權

管理dbfs的使用者需要擁有相關許可權

4執行dbfs初始化指令碼

Dbfs配置指令碼路徑:

$ORACLE_HOME/rdbms/admin/dbfs_create_filesystem_advanced

注意,需要使用新建的使用者執行該指令碼。

示例

使用dba使用者登入

[oracle@mytest~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0Production on Thu Aug 2 13:40:42 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

開啟資料庫

SQL>startup

ORACLE instance started.

Total System Global Area 1653518336 bytes

Fixed Size                  2213896 bytes

Variable Size             956303352 bytes

Database Buffers          687865856 bytes

Redo Buffers                7135232 bytes

Database mounted.

Database opened.

建立表空間fsts(這裡使用大檔案表空間)

SQL>create bigfile tablespace fsts   

  2 datafile '/u01/apps/oracle/oradata/david/fsts01.dbf'   

  3  size500m ;

Tablespace created.

建立使用者dexter

SQL> create user dexter identified byxiaojun default tablespace fsts quota unlimited on fsts ;

User created.

授權

SQL>grant create session,create table , create procedure , dbfs_role to dexter ;

Grant succeeded.

SQL> conn dexter/xiaojun

Connected.

執行初始化指令碼

SQL>@?/rdbms/admin/dbfs_create_filesystem_advanced fsts dir1 nocompressnodeduplicate noencrypt non-partition

四、客戶端掛載

客戶端使用需要用到dbfs_client命令,相關的程式都在Oracle client中,所以客戶端必須安裝Oracle client

客戶端配置流程

1.使用root使用者

2. Add a new library path.

Command

# echo "/usr/local/lib" >>/etc/ld.so.conf.d/usr_local_lib.conf

3. Change directory to lib , and create thefollowing symbolic links to the

libclntsh.so.11.1 and libnnz11.so  libraries.

Command

# cd /usr/local/lib

# ln -s $ORACLE_HOME/lib/libclntsh.so.11.1

# ln -s $ORACLE_HOME/lib/libnnz11.so

4. Locate libfuse.so, and create a symbolic linkthis library.

# locate libfuse.so

 determined_path /libfuse.so

Command

# ln –s determined_path /libfuse.so

5. Run ldconfig to create the links and cache for the new symbolic links.

Command

# ldconfig

6. Create a symbolic link to dbfs_client  in /sbin as  mount.dbfs.

Command

# ln -s $ORACLE_HOME/bin/dbfs_client/sbin/mount.dbfs

7. Login as admin user. (Oracle recommends th atyou do not perform the next step

as root user.)

8. Mount the DBFS store.

Command

% dbfs_client @/dbfsdb -owallet,rw,user,direct_io /mnt/dbfs

9. [Optional] To test if the previo us step wassuccessful, list the dbfs directory.

Command

# ls /mnt/dbfs

後臺執行:

nohup dbfs_client ETLUser@DBConnectString/mnt/dbfs < passwordfile.f &

示例

[oracle@mytest~]$ mkdir /u01/dbfs

[oracle@mytest~]$ ls -l /u01

drwxr-xr-x 2 oracle oinstall       4096 Aug 2 13:51 dbfs

[root@mytest~]# echo "/usr/local/lib" >>/etc/ld.so.conf.d/usr_local_lib.conf

[root@mytest~]# cd /usr/local/lib

[root@mytestlib]# ln -s /u01/apps/oracle/product/11gr2/db_1/lib/libclntsh.so.11.1

[root@mytestlib]# ln -s /u01/apps/oracle/product/11gr2/db_1/lib/libnnz11.so

[root@mytestlib]# find / -name libfuse.so

/usr/local/lib/libfuse.so

[root@mytestlib]# ln -s /usr/local/lib/libfuse.so

[root@mytestlib]# ldconfig

[root@mytestlib]# ln -s /u01/apps/oracle/product/11gr2/db_1/bin/dbfs_client/sbin/mount.dbfs

[root@mytestlib]# su - oracle

 

配置密碼檔案

使用oracle使用者作為dbfs掛載的管理使用者 

建立密碼檔案

echo xiaojun > passwd.t

檢視客戶端的配置

[oracle@mytest~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora

DAVID =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST =mytest)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = david)

    )

  )

遠端可以登入

[oracle@mytest~]$ sqlplus dexter/xiaojun@david

SQL*Plus: Release 11.2.0.1.0Production on Thu Aug 2 14:17:32 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0- 64bit Production

With the Partitioning, OLAP, Data Mining andReal Application Testing options

SQL>

執行掛載命令

nohup dbfs_client dexter@david /u01/dbfs < passwd.t &

[1] 11665

[oracle@mytest ~]$ nohup: appending outputto `nohup.out'

[oracle@mytest ~]$ df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              30G   15G  14G  53% /

/dev/sda3             3.9G  473M 3.3G  13% /tmp

tmpfs                 2.0G  943M 1.1G  48% /dev/shm

/dev/hdc              3.7G  3.7G    0 100% /mnt

dbfs                  1.5M   57K 1.4M   4% /u01/dbfs

五、測試

[oracle@mytest ~]$ ll /u01

drwxr-xr-x 3 root   root              0 Aug  2 14:20 dbfs

[oracle@mytest ~]$ ll /u01/dbfs/

total 0

drwxrwxrwx 3 root root 0 Aug  2 14:09 dir1

[oracle@mytest~]$ echo test > /u01/dbfs/dir1/test.t

[oracle@mytest~]$ ll /u01/dbfs/dir1/

total 1

-rw-r--r--1 oracle oinstall 5 Aug  2 14:21 test.t

[oracle@mytest ~]$ cat /u01/dbfs/dir1/test.t

Test

[oracle@mytest~]$ mkdir /u01/dbfs/dir1/sub_dir

[oracle@mytest~]$ echo ffccddssdd > /u01/dbfs/dir1/sub_dir/test2.t

[oracle@mytest~]$ sqlplus dexter/xiaojun@david

SQL*Plus: Release 11.2.0.1.0Production on Thu Aug 2 14:28:49 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0- 64bit Production

With the Partitioning, OLAP, Data Mining andReal Application Testing options

Pathtype=1 表示檔案 2表示目錄

[sql] view plaincopyprint?

1.  SQL> select pathname , item , pathtype  from t_dir1 ;       

2.  PATHNAME             ITEM                 PATHTYPE  

3.  -------------------- ----------------------------   

4.  /test.t               test.t                      1  

5.  /sub_dir             sub_dir                    2  

6.  /sub_dir/test2.t        test2.t                     1  

7.  /                   ROOT                     2  

8.  /.sfs                .sfs                        2  

9.  /.sfs/attributes        attributes                   2  

10. /.sfs/tools            tools                      2  

11. /.sfs/snapshots        snapshots                  2  

12. /.sfs/RECYCLE      RECYCLE                 2  

13. /.sfs/content          content                    2  

14.    

15. 10 rows selected.  

SQL> select pathname , item , pathtype  from t_dir1 ;    

PATHNAME             ITEM                 PATHTYPE

-------------------- ----------------------------

/test.t               test.t                      1

/sub_dir             sub_dir                    2

/sub_dir/test2.t        test2.t                     1

/                   ROOT                     2

/.sfs                .sfs                        2

/.sfs/attributes        attributes                   2

/.sfs/tools            tools                      2

/.sfs/snapshots        snapshots                  2

/.sfs/RECYCLE      RECYCLE                 2

/.sfs/content          content                    2

 

10 rows selected.

 

配置完成

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29371470/viewspace-2147514/,如需轉載,請註明出處,否則將追究法律責任。

相關文章