记一次ORA-06512、ORA-29283

一、背景简介

上午应用找来,给了俩错误,错误信息如下

ORA-06512: 在 "SYS.UTL_FILE", line 536
ORA-29283: 文件操作无效

以上报错简单来说,就是调用 sys.utl_file 输出文件,但是输出的目录不存在,进一步沟通发现,用户输出的目录是一个挂载的共享的 windows 文件夹,没错,是在 linux 上挂了一个 windows 的文件夹。

二、解决过程

首先尝试直接将 windows 上的文件夹挂载上去

mount -t cifs //目标机器/目标目录 /test -o username=xxxx

但是这样挂载存在一个问题,就是文件的权限为 755 ,而 mount 命令只有 root 才能执行,这意味着 oracle 对文件夹没有写的权限,oracle 输出文件至挂载的 windows 需要写的权限,换用以下挂载方式。

mount -t cifs //目标机器/目标目录 /test -o username=xxxx,dir_mode=0777,file_mode=0777

至此,文件夹正确挂载好。
注意,每个节点都需要挂载

三、补充知识
1. 关于 oracle 里的文件夹

oracle 数据库并不能直接输出文件到 os 上的文件夹,而是通过创建数据库内部和 os 上的实际文件夹之间的关联输出文件,如

create or replace directory test  as '/test';

以上命令可在 oracle 数据库内部创建一个名叫 test 的目录,与其实际关联的 os 目录为 /test,要使目录正常可用,os 上必须实际存在这个目录且可用。

select * from dba_directories;

以上命令可以查询 oracle 数据库里所有的目录和与之对应的 os 目录。

2. 关于挂载

此次问题根本原因在于主机被重启了,而由于挂载需要输入口令,用户并没有将挂载命令写入 /etc/fstab 目录,导致主机重启后未能重新挂上。

remoteHost:/目录 /本地目录 nfs intr,hard,bg,vers=3 0 0

以上为 /etc/fstab 中一条。

umount /test

卸载的命令,/test 为待卸载的目录

mount
df -h

直接输 mount 命令 或者 df -h 可以查看挂载情况。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容