Oracle数据库外部表问题.ORA-29913,ORA-29400和KUP-04004



编辑:我解决了一些类Path的问题,现在我会在日志文件中获得以下错误,这些错误是执行"选择 *"

时生成的。

UP-04004:错误阅读文件/home/oracle/tweet-dataloc/nosql.dat

KUP-04017:操作系统消息:错误0

kup-04017:操作系统消息:/home/oracle/processor/nosql_stream:第4行:java:没有这样的文件或目录

请注意,该文件正好在该路径中,并且具有777个权限。编辑的结尾

我正在制作一个指向Oracle NOSQL数据库的外部表格,其中数据存储为键值对。

请注意,在此示例中,我将所有用户都可以访问的所有用户都放置在/TMP中,因此我们将所有与OS相关的问题删除

首先,我在SQL开发人员中创建两个虚拟目录,授予我的用户(nosqluser(,当然,创建外部表:

CREATE DIRECTORY ext_tab AS '/tmp/tweet-dataloc';
CREATE DIRECTORY nosql_bin_dir AS '/tmp/processor';
GRANT READ, WRITE ON DIRECTORY ext_tab TO nosqluser;
GRANT READ, EXECUTE ON DIRECTORY nosql_bin_dir TO nosqluser;

然后,我创建表如下:

CREATE TABLE "NOSQLUSER"."TWEETS3" 

("CREATED_AT" VARCHAR2(80 BYTE), 
    "ID_STR" VARCHAR2(80 BYTE), 
    "TEXT" VARCHAR2(200 BYTE), 
    "NAME" VARCHAR2(80 BYTE), 
    "LOCATION" VARCHAR2(80 BYTE), 
    "VERIFIED" VARCHAR2(80 BYTE), 
    "FOLLOWERS_COUNT" NUMBER, 
    "FRIENDS_COUNT" NUMBER, 
    "LISTED_COUNT" NUMBER, 
    "FAVOURITES_COUNT" NUMBER, 
    "STATUSES_COUNT" NUMBER, 
    "CREATED_AT_USER" VARCHAR2(80 BYTE), 
    "COUNTRY" VARCHAR2(80 BYTE), 
    "COUNTRY_CODE" VARCHAR2(80 BYTE), 
    "FULL_NAME_PLACE" VARCHAR2(80 BYTE), 
    "NAME_PLACE" VARCHAR2(80 BYTE), 
    "PLACE_TYPE" VARCHAR2(80 BYTE), 
    "IS_QUOTE_STATUS" VARCHAR2(80 BYTE), 
    "QUOTE_COUNT" NUMBER, 
    "REPLY_COUNT" NUMBER, 
    "FAVORITE_COUNT" NUMBER, 
    "RETWEET_COUNT" NUMBER, 
    "FAVORITED" VARCHAR2(80 BYTE), 
    "RETWEETED" VARCHAR2(80 BYTE), 
    "FILTER_LEVEL" VARCHAR2(80 BYTE), 
    "LANG" VARCHAR2(80 BYTE), 
    "TIMESTAMP_MS" VARCHAR2(80 BYTE)
   ) 
   ORGANIZATION EXTERNAL( 
      TYPE ORACLE_LOADER
      DEFAULT DIRECTORY "EXT_TAB2"
      ACCESS PARAMETERS( 
          records delimited by newline
          preprocessor nosql_bin_dir2:'nosql_stream'
          fields terminated by '|' 
          missing field values are null 
          reject rows with all null fields 
      )
      LOCATION ('nosql.dat')
    )
   REJECT LIMIT UNLIMITED ;

最后,我向您展示了我的nosql_stream脚本和nosql.dat文件的样子。/tmp/processor/nosql_stream:

#!/bin/bash
export PATH=$PATH:/usr/java/latest/bin
export CLASSPATH=/home/oracle/processor/*
java oracle.kv.exttab.Preproc $*

/tmp/tweet-dataloc/nosql.dat:

<config version="1">
  <component name="publish" type="params" validate="true">
    <property name="oracle.kv.exttab.connection.url" value="jdbc:oracle:thin:/@//relacional:1521/ORCLPDB1.localdomain" type="STRING"/>
    <property name="oracle.kv.exttab.connection.user" value="nosqluser" type="STRING"/>
    <property name="oracle.kv.exttab.tableName" value="nosqluser.tweets2" type="STRING"/>
  </component>
  <component name="nosql_stream" type="params" validate="true">
    <property name="oracle.kv.exttab.externalTableFileNumber" value="0" type="INT"/>
    <property name="oracle.kv.exttab.totalExternalTableFiles" value="1" type="INT"/>
    <property name="oracle.kv.formatterClass" value="formatter.TweetFormatter" type="STRING"/>
    <property name="oracle.kv.hosts" value="bequi_kvlite_1:5000" type="STRING"/>
    <property name="oracle.kv.kvstore" value="kvstore" type="STRING"/>
  </component>
</config>

通过在NOSQL数据库结束上执行的发布函数生成最后一个文件。您可以在此处关注该过程。

现在,问题即使记录是像您可以看到的那样:

星期五5月10日08:16:34 0000 2019 | 1126762942307811331 | RT @AnnKnownyy:未来医生,律师,工程师,工程师,医疗技术,护士,CPA,心理学家,外交官,外交官,外交官,生物学家,生物学家,教师,建筑师,建筑师,Offi?Sycamore Girl?| Caloocan City,Caloocan City,National Capita | False | 85 | 190 | 0 | 7804 | 3131 | SAT MAR 21 00:09:46 0000 2015 ||||||||||| false | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | false| false | low | en | 1557476194346

星期五5月10日08:16:34 0000 2019 | 112676294347953664 |大学 伊巴丹(UI(2018/2019学术会议的学费时间表? http somelink?学习 更多| olusegunfapohunda |地球| false | 592 | 5 | 3 | 104 | 6851 | thu 2月11日 21:49:57 0000 2010 ||||||错误| 0 | 0 | 0 | 0 | 0 | false | false | low | en | 1557476194594

星期五5月10日08:16:34 0000 2019 | 1126762943498948609 | rt @zinadabo1:pls 我们需要帮助,我只是被告知Rotimi Akeredolu增加了 州立大学的学费从35K到150k。

数据无法访问。当我做一个"从nosqluser.tweets3中进行选择"时,我得到的是:

RA-29913:从ODCIEXTTABLEFETCH执行呼叫的错误

ora-29400:数据cartdrige中的错误

kup-04004:错误阅读文件/tmp/tweet-dataloc/nosql.dat

由于显示了寄存器,因此我知道NOSQL数据库可访问,并且数据格式并正确读取。实际上,到这里应该完成该过程,所以为什么我无法访问我的数据呢?

nosql_stream文件必须看起来像:

#!/bin/bash
$JAVA_HOME/bin/java oracle.kv.exttab.Preproc $*

换句话说,即使在环境变量或.bashrc文件中已经指定了Java的nosql_stream,即使它已在其中指定。

这说明了为什么它在部署12C的容器上工作,因为它是"本机" Linux系统,并使我们成为这些变量;同时,通过本地SQL开发人员无法正确访问这些开发人员,因此无法正确执行该文件。

最新更新