设为首页 收藏本站
查看: 439|回复: 0

[经验分享] 认识Oracle DBFS文件系统

[复制链接]

尚未签到

发表于 2015-12-16 15:13:50 | 显示全部楼层 |阅读模式
  什么是DBFS
  DBFS,全称为Oracle DatabaseFilesystem,这是一个类似于NFS的可共享的网络文件系统,不同之处在于DBFS将文件以SecureFilesLOBs的形式存储在数据库中。
  
DSC0000.gif     
  

图1-DBFS结构

  相比较NFS,DBFS有诸多优点:
ü  除了可以使用标准的POSIX接口来访问、操作文件系统外,还支持PL/SQL、Java、OCI等方式方便的访问、操作文件系统;
ü  可以使用RMAN方便的将文件系统备份到磁带库或者云存储(目前只支持AmazonS3);
ü  可以使用DataGuard方便的使文件系统做到高可用;
  
  DBFS的安装
  同NFS一样,DBFS也分为服务端和客户端。为方便起见,实验环境服务端和客户端为同一台机器,操作系统为OracleLinux 6.5,数据库为11.2.0.4,数据存储使用ASM。
  1、服务端的安装
  首要条件是要有一个正常运行的Oracle数据库。需要先创建一个表空间用于DBFS的存储:
  

  • SQL> CREATE TABLESPACE DBFS_TEST_TBS DATAFILE '+DATA01'>

  • Tablespace created.
创建一个DBFS的用户,并赋予相应的权限:  
  
  

  • SQL> CREATE USER DBFS_TEST>

  • User created.

  • SQL> GRANT CREATE SESSION,RESOURCE,CREATE TABLE,CREATE PROCEDURE,DBFS_ROLE TO DBFS_TEST;

  • Grant succeeded.
以DBFS用户,这里为DBFS_TEST登录数据库,并创建DBFS文件系统:  

  • 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.
使用dbfs_create_filesystem.sql来创建文件系统(也可以使用dbfs_create_filesystem_advanced.sql来创建文件系统,该脚本可以提供更多的控制选项,如加密等,有兴趣的可以自己研究下^_^)。DBFS_TEST_TBS为我们之前创建的表空间的名称,DBFS_TEST_FS为创建的文件系统的名称(自己指定)。这样服务端就完成了。  
  
  
  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
在tnsnames中加入数据库的连接串:  

  • $ cat >> tnsnames.ora
  • DBFS_TEST =
  • (DESCRIPTION =
  • (ADDRESS_LIST =
  • (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  • )
  • (CONNECT_DATA =
  • (SERVICE_NAME = DBFS_TEST)(SERVER = DEDICATED)
  • )
  • )
 $ tnsping DBFS_TEST  
  
  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)
挂载DBFS:  

  • $ $ORACLE_HOME/bin/dbfs_client DBFS_TEST@DBFS_TEST /dbfs_test_fs
  • Password:
另开一个命令窗口,可以看到系统中已经挂载了一个新的文件系统,然后我们尝试创建一个文件:  

  • $ df -h
  • Filesystem                 >
  • /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
其中test是我们之前创建的一个测试文件,我们可以很方便的从数据库表中读出文件系统的内容。  
  需要注意的是执行挂载操作的的窗口不能关闭,挂载操作也不能CTRL+C结束,否则挂载点也就断开了。所以这种方式只适合临时使用,我们可以使用nohup将挂载放在后台,这样就能保证文件系统能一直正常使用了:
  

  • $ nohup $ORACLE_HOME/bin/dbfs_client DBFS_TEST@DBFS_TEST /dbfs_test_fs
  • [1] 4789
dbfs_test_password的内容是DBFS_TEST账号的密码:  

  • $ cat dbfs_test_password
  • DBFS_TEST
这种方式不是很安全,容易导致密码泄露,所以如果要更安全的方式可以使用wallet。同时DBFS还支持fstab,可以将挂载操作加到fstab中,以实现启动时自动挂载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-152125-1-1.html 上篇帖子: oracle10g 修改 sga pga 下篇帖子: Oracle ERP查看应收发票核销情况
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表