美文网首页
记一次ORA-06512、ORA-29283

记一次ORA-06512、ORA-29283

作者: Reiko士兵 | 来源:发表于2019-10-14 10:11 被阅读0次
一、背景简介

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

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 可以查看挂载情况。

相关文章

网友评论

      本文标题:记一次ORA-06512、ORA-29283

      本文链接:https://www.haomeiwen.com/subject/qsnqyctx.html