oracle 11.2.0.2创建DBFS

来源:互联网 发布:手办淘宝店推荐贴吧 编辑:程序博客网 时间:2024/03/29 13:51

由于最近需要在项目中使用到外部表加DBFS的方式加载数据,所以需要创建DBFS
在此记录下创建的过程和遇到的问题

1、安装fuse
oracle enterprise linux 5.5的光盘中,在Server目录下找到fuse相关的rpm,安装相应fuse软件包
2、配置fuse(下面操作不知道有什么用,只是按照文档上操作)
/sbin/depmod
/sbin/modprobe fuse
chmod 666 /dev/fuse
echo "/sbin/modprobe fuse" >> /etc/rc.modules
chmod 700 /etc/rc.modules

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

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
ln -s $ORACLE_HOME/lib/libclntsh.so.11.1 /usr/local/lib/libclntsh.so.11.1
ln -s $ORACLE_HOME/lib/libnnz11.so /usr/local/lib/libnnz11.so
ln -s /lib64/libfuse.so.2 /usr/local/lib/libfuse.so.2

ldconfig

3、链接数据库创建DBFS用户表空间
create tablespace bigfile dbfs datafile '+DATA/DBFS.dbf' size 1G;

4、创建dbfs数据库用户并赋权
create user dbfs identified by "oracle"
default tablespace dbfs
quota unlimited on dbfs ;

grant create session, create table, create procedure, dbfs_role to dbfs;

5、创建DBFS目录在操作系统上需要的目录
mkdir /home/oracle/DBFS

6、进入$ORACLE_HOME/rdbms/admin并用sqlplus连接数据库
sqlplus dbfs/oracle@dbname

@dbfs_create_filesystem_advanced.sql dbfs dbfs nocompress nodeduplicate noencrypt non-partition

7、配置dbfs的悬挂点
echo oracle> passwd.txt
nohup $ORACLE_HOME/bin/dbfs_clientdbfs@dbname -o direct_io /home/oracle/DBFS < passwd.txt &

fuse: failed to exec fusermount: Permission denied
权限不足,查看权限如下:
 [root@rac11ga bin]# pwd
/usr/bin
[root@rac11ga bin]# ll fuse*
lrwxrwxrwx 1 root root 15 Apr 29 14:01 fusermount -> /bin/fusermount
[root@rac11ga bin]# ll /bin/fusermount
-rwsr-x--- 1 root fuse 27072 Jul  2  2009 /bin/fusermount
由环境变量PATH=/opt/oracle/product/11.2.0/dbhome_1/bin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
可知优先使用/bin/fusermount,所以权限不足:
对/bin目录下的可执行文件赋权
[root@rac11ga bin]# chmod a+x /bin/fusermount
执行成功

8、确认是否配置成功
ps -ef | grepdbfs_client 可以看到相应的进程

使用df命令可以看到挂载的DBFS目录

上面是使用oracle用户配置DBFS,但是在实际使用的时候有问题
当把外部表的目录指定为DBFS目录时报无法找到指定文件的异常。

通过查询,了解到需要使用dbfs_client的下面两个参数来配置dbfs的悬挂点
 -o allow_root         Allows root access to the filesystem.
                        This option requires setting 'user_allow_other' parameter in '/etc/fuse.conf'.
  -o allow_other        Allows other users access to the file system.
                        This option requires setting 'user_allow_other' parameter in '/etc/fuse.conf'.

但是在/etc目录下没有发现fuse.conf文件
手工在/etc目录下创建fuse.conf文件,并在文件中输入内容:user_allow_other并保存
使用命令nohup $ORACLE_HOME/bin/dbfs_clientdbfs@dbname -o direct_io,allow_root,allow_other /home/oracle/DBFS < passwd.txt &
悬挂DBFS,但是报错,说allow_root参数和allow_other参数相互包含,导致无法悬挂DBFS
但是如果只使用其中一个参数挂载DBFS,使用DBFS时还是报错,实在是悲剧啊。

后来想到一个变通的方法:在root用户下挂载,只指定allow_other参数,问题解决,外部表目录可以正常使用DBFS目录。
nohup $ORACLE_HOME/bin/dbfs_clientdbfs@dbname -o direct_io,allow_other /home/oracle/DBFS < passwd.txt &


注:后来听一个同事说,在oracle 11.2.0.1 上可以正常使用命令:
nohup $ORACLE_HOME/bin/dbfs_clientdbfs@dbname -o direct_io,allow_root,allow_other /home/oracle/DBFS < passwd.txt &

不晓得是什么问题导致在我安装的11.2.02上不行,需要深入学习了解。

原创粉丝点击