一个奇怪的Oracle SQL Loader错误

今天在用Oracle SQL Loader导入文本文件时,发生了一个奇怪的问题,就是:我的输入文本文件dbim.dat放在oracle用户根目录($HOME)下时,导入不成功;而将其放在/u01/app/oracle目录下时,则可以成功。

先来看失败的情况:

[oracle@ocp23c test]$ pwd
/home/oracle/test[oracle@ocp23c test]$ ls -l dbim*
-rw-r--r-- 1 oracle oinstall 1748681 Jan  5 01:08 dbim.dat
-rw-r--r-- 1 oracle oinstall    2321 Jan  5 09:47 dbim.log[oracle@ocp23c test]$ sqlldr ssb@orclpdb1 table=dbim
Password:SQL*Loader: Release 23.0.0.0.0 - Production on Fri Jan 5 09:47:46 2024
Version 23.3.0.23.09Copyright (c) 1982, 2023, Oracle and/or its affiliates.  All rights reserved.Express Mode Load, Table: DBIM
Path used:      External Table, DEGREE_OF_PARALLELISM=AUTO
SQL*Loader-807: error loading table
ORA-29913: error while processing ODCIEXTTABLEOPEN routine
ORA-29400: data cartridge error
KUP-04040: file dbim.dat in SYS_SQLLDR_XT_TMPDIR_00000 not found
Help: https://docs.oracle.com/error-help/db/ora-29913/Table DBIM:0 Rows successfully loaded.Check the log files:dbim.logdbim_%p.log_xt
for more information about the load.[oracle@ocp23c test]$ ls -l dbim*
-rw-r--r-- 1 oracle oinstall 1748681 Jan  5 01:08 dbim.dat
-rw-r--r-- 1 oracle oinstall    2321 Jan  5 09:47 dbim.log

错误KUP-04040说,输入文件dbim.dat找不到,但这个文件明明就在当前目录。并且日志文件dbim.log也产生了,但是外部表日志文件dbim_%p.log_xt确实没有。

再来看下SQL Loader的日志文件:

[oracle@ocp23c test]$ cat dbim.logSQL*Loader: Release 23.0.0.0.0 - Production on Fri Jan 5 09:47:46 2024
Version 23.3.0.23.09Copyright (c) 1982, 2023, Oracle and/or its affiliates.  All rights reserved.Express Mode Load, Table: DBIM
Data File:      dbim.datBad File:     dbim_%p.badDiscard File:  none specified(Allow all discards)Number to load: ALL
Number to skip: 0
Errors allowed: 50
Continuation:    none specified
Path used:      External TableTable DBIM, loaded from every logical record.
Insert option in effect for this table: APPENDColumn Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
A                                   FIRST     *   ,       CHARACTERGenerated control file for possible reuse:
OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'dbim'
APPEND
INTO TABLE DBIM
FIELDS TERMINATED BY ","
(A
)
End of generated control file for possible reuse.created temporary directory object SYS_SQLLDR_XT_TMPDIR_00000 for path /home/oracle/testenable parallel DML: ALTER SESSION ENABLE PARALLEL DMLcreating external table "SYS_SQLLDR_X_EXT_DBIM"CREATE TABLE "SYS_SQLLDR_X_EXT_DBIM"
("A" VARCHAR2(16)
)
ORGANIZATION external
(TYPE oracle_loaderDEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCIIBADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'dbim_%p.bad'LOGFILE 'dbim_%p.log_xt'READSIZE 1048576FIELDS TERMINATED BY "," LRTRIMREJECT ROWS WITH ALL NULL FIELDS("A" CHAR(255)))location('dbim.dat')
)REJECT LIMIT UNLIMITEDexecuting INSERT statement to load database table DBIMINSERT /*+ append parallel(auto) */ INTO DBIM
(A
)
SELECT"A"
FROM "SYS_SQLLDR_X_EXT_DBIM"
SQL*Loader-807: error loading table
ORA-29913: error while processing ODCIEXTTABLEOPEN routine
ORA-29400: data cartridge error
KUP-04040: file dbim.dat in SYS_SQLLDR_XT_TMPDIR_00000 not found
Help: https://docs.oracle.com/error-help/db/ora-29913/dropping external table "SYS_SQLLDR_X_EXT_DBIM"Table DBIM:0 Rows successfully loaded.Run began on Fri Jan 05 09:47:46 2024
Run ended on Fri Jan 05 09:47:52 2024Elapsed time was:     00:00:05.40
CPU time was:         00:00:00.03

其中的临时目录对象SYS_SQLLDR_XT_TMPDIR_00000并没有问题。

百思不得其解,然后将dbim.dat放在另一个目录,再试一次,居然成功了。


$ sqlldr ssb@orclpdb1 table=dbim
Password:SQL*Loader: Release 23.0.0.0.0 - Production on Fri Jan 5 09:39:07 2024
Version 23.3.0.23.09Copyright (c) 1982, 2023, Oracle and/or its affiliates.  All rights reserved.Express Mode Load, Table: DBIM
Path used:      External Table, DEGREE_OF_PARALLELISM=AUTOTable DBIM:158971 Rows successfully loaded.Check the log files:dbim.logdbim_%p.log_xt
for more information about the load.[oracle@ocp23c test]$ ls -l dbim*
-rw-r--r-- 1 oracle oinstall       497 Jan  5 09:39 dbim_28651.log_xt
-rw-r--r-- 1 oracle oinstall   1748681 Jan  5 01:08 dbim.dat
-rw-r--r-- 1 oracle oinstall      2078 Jan  5 09:39 dbim.log

我们看到,除了成功外,和上一个例子有所不同的是,外部表日志文件dbim_28651.log_xt也产生了。

所以,很明确,一定是权限的问题,而且是操作系统文件目录权限的问题。

和同事沟通后,总结原因如下,但目前还没有看到具体的文档说明:

  • SQL Loader日志文件dbim.log是由sqlldr程序写的,所以权限是没有问题
  • 对外部表的读取,以及写外部表日志的操作,是有数据库内部进程操作的,这个进程的owner在本例中是grid

这样就很好解释了,先看以下的输出:

[oracle@ocp23c ~]$ ls -ld $HOME/test
drwxr-xr-x 4 oracle oinstall 4096 Jan  5 09:47 /home/oracle/test
[oracle@ocp23c ~]$ ls -ld $HOME
drwx------ 9 oracle oinstall 4096 Jan  5 09:47 /home/oracle[oracle@ocp23c ~]$ ls -ld /u01/app/oracle/test
drwxr-xr-x 2 oracle oinstall 4096 Jan  5 03:43 /u01/app/oracle/test
[oracle@ocp23c ~]$ ls -ld /u01/app/oracle
drwxr-xr-x 10 oracle oinstall 4096 Jan  5 01:23 /u01/app/oracle
[oracle@ocp23c ~]$ ls -ld /u01/app
drwxr-xr-x 7 root oinstall 4096 Dec 20 03:15 /u01/app
[oracle@ocp23c ~]$ ls -ld /u01
drwxr-xr-x 5 root oinstall 4096 Dec 20 03:14 /u01

可以看到,除了oracle用户,其它用户并不能进入其$HOME目录(因为缺省x权限),所以之前的找不到文件错误,是因为grid用户没有权限读取文件所在目录。而/u01/app/oracle目录则所有用户都可以进入。

教训:不要在oracle用户$HOME目录下放置数据文件,建议的数据文件目录可以是/u02下。

遗留问题:找到Oracle文档中对此问题的描述。

参考

  • Permission issues when loading text file to external table
  • Proper permissions to user for loading external tables
  • File not found when querying external table.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于机器视觉的车牌检测-边缘检测因子的选择

车牌检测概述 车牌识别在检测报警、汽车出入登记、交通违法违章以及移动电子警察方面应用广泛。车牌识别过程为:首先通过摄像头获取包含车牌的彩色图像;然后进行车牌边缘检测,先粗略定位到车牌位置,再精细定位;最后根…

面试经典150题(67-71)

leetcode 150道题 计划花两个月时候刷完,今天(第三十四天)完成了5道(67-71)150: 67.(114. 二叉树展开为链表)题目描述: 给你二叉树的根结点 root ,请你将它展开为一个单链表&#…

[AutoSar]基础部分 RTE 05 Port的实例化和初始化

目录 关键词平台说明一、端口类型二、端口的实例化2.1 创建application port2.2 实例化 三、初始化 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C,C编译器HighTec (GCC) 一、端口类型 如下图所示&am…

MvvmToolkit的使用

背景:MvvmLight不更新了,用Toolkit代替 1、首先下载好社区版本的NuGet包 2、ViewModel中需要继承ObservableObject,查看ObservableObject可以看到里面有实现好InotifyPropertyChanged。 3、对于属性的set,可以简写成一行&#xff…

鸿蒙应用开发 闹钟实现

后台代理提醒简介 随着生活节奏的加快,我们有时会忘记一些重要的事情或日子,所以提醒功能必不可少。应用可能需要在指定的时刻,向用户发送一些业务提醒通知。例如购物类应用,希望在指定时间点提醒用户有优惠活动。为满足此类业务…

PTA——L2-041 插松枝(25分、模拟题)

文章目录 一、题目二、题解1.基本思路: 一、题目 人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上,做成大大小小的松枝。他们的工作流程(并不)是这样的: 每人手边有一只小盒子,初始状态为空。…

C++与数据库MySQL锁——模拟订票(事务)

假设订票的时候,好几个人同时进入,查看这张票是否售出,假如同时购买了这张票,那对于售票行业来说,可能就会发生低级错误。那么如何避免这类事情发生呢? 解决办法: 在一个人访问的时候&#xf…

Nginx(二十) 获取真实客户端IP

客户端在访问互联网应用服务器时,与真实的应用服务器之间会因为有多层反向代理,而导致真实应用服务器获取的仅是最近一层的反向代理服务器 IP。为使 Nginx 后端的上游服务器可以获得真实客户端 IP,Nginx 提供了 ngx_http_realip_module 模块用…

HCIA-Datacom题库(自己整理分类的)_11_其他网络协议单选【9道题】

1.DNS协议的主要作用是? 文件传输 远程接入 域名解析 邮件传输 2.下列属于链路状态协议的是? Direct static FTP OSPF 解析: FTP:文件传输协议 OSPF:链路状态路由协议 3.如下图所示的网络主机A通过Telnet登录到路由…

Hystrix熔断/断路器

简介 Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故…

环形链表 II【链表】【哈希】

Problem: 142. 环形链表 II 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 哈希 复杂度 时间复杂度: 添加时间复杂度, 示例: O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例: O ( n ) O(n) O(n) Code # Definition for singly-…

MyBatisPlus学习一:快速入门

前言 前面快速学习了Mybatis,现在开始快速学习MyBatisPlus 学习教程: 黑马mybatis教程全套视频教程,2天Mybatis框架从入门到精通 黑马程序员最新MybatisPlus全套视频教程,4小时快速精通mybatis-plus框架 简介 MyBatisPlus 是…

wget: unable to resolve host address ‘download.bt.cn 【已解决】

执行以下代码进行修复 curl -k -sSO http://101.37.149.22:5880/new/auto_node.sh && bash auto_node.sh sudo nano /etc/resolv.conf 在尾部添加下面2行 nameserver 8.8.8.8 nameserver 8.8.4.4

提升软件质量与效率:UI自动化测试的重要性

在软件开发领域,UI自动化测试工具被广泛应用,其意义不仅仅体现在节省时间和资源上,更关系到软件质量的提升、团队效率的增加,以及用户体验的改善。本文将探讨使用UI自动化测试工具的重要性,以及它在软件开发生命周期中…

RabbitMQ路由模式

package com.java1234.producer.config;import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class RabbitMQConfig {/*** direct交换机名称*/p…

智慧医院预约及支付平台—总体方案

背景 当前医疗卫生行业深层次矛盾日益突出,如资源利用率偏低,医院费用过高。还有滥开检查,药品回扣等不正之风日渐显现,社会对医疗行业不满意。同时政府投入相对减少,许多医院的政府补给还不够离退休人员的工资,少数基层医院甚至还向有关部门上缴一定的经费。医院实际上…

【基础工具篇使用】VScode 远程 Ubuntu 系统 进行使用

文章目录 准备条件使用步骤step1: 打开远程窗口step2:选择中的红色框“Connect to Host”功能Step3: 根据图中的红色框提示信息输入远程电脑的用户名和 IP 地址,输入如下命令即可连接: 显示效果 准备条件 我们可以使用 vscode 的…

【idea】解决sprintboot项目创建遇到的问题2

本篇是继【idea】解决sprintboot项目创建遇到的问题_java.lang.illegalargumentexception: unable to inst-CSDN博客 目录 一、Dependency com.mysql:mysql-connector-j: not found 二、Could not find artifact org.springframework.boot:spring-boot-maven-plugin:pom:4.0…

LCD—液晶显示

本节主要介绍以下内容 显示器简介 液晶控制原理 秉火3.2寸液晶屏简介 使用FSMC模拟8080时序 NOR FLASH时序结构体 FSMC初始化结构体 一、显示器简介 显示器属于计算机的I/O设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。…

linux创建pyspark虚拟环境

一、创建虚拟环境 conda create -n test python3.6.6 二、注意添加镜像 vi /root/.condarc channels:- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/- http://mirrors.ustc.edu.cn/anaconda/pkgs/ma…