1

当我尝试将数据加载到确实存在的表中时,我遇到了 SQL Loader 的问题。但是,由于某种原因,SQL Loader 返回错误。如果这意味着什么,该表位于可插入数据库中,我不确定但想将其包含在此处的帖子中,以防它有助于找出挂断的位置。

这是控制文件:

OPTIONS (SKIP=1)
LOAD DATA
INFILE '/home/joshua/Practice_Data/Fitness_DB_Data/aug_2019_hiking_stats.csv'
INSERT INTO TABLE WALKING_STATS
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(day_walked,cal_burned,miles_walked,duration,mph,shoe_id)

我尝试了INTO TABLE三种不同的子句:只有表名(如本例所示)和模式名(例如,C##bigdaddy.walking_stats),以及带有前缀的 pdb(例如,walking_data.c##bigdaddy .walking_stats)。

一切都无济于事。

一些用于证明该表确实存在的 SQL 命令(至少我是 Oracle DB 的新手):

这是 pdb:

SQL> sho con_name;

CON_NAME
------------------------------
WALKING_DATA

用户架构在那里:

SQL> select user from dual;

USER
--------------------------------------------------------------------------------
C##BIGDADDY

桌子在那里,尽管它是空的:

SQL> desc walking_stats;
 Name                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DAY_WALKED                     DATE
 CAL_BURNED                     NUMBER(4,2)
 MILES_WALKED                       NUMBER(3,2)
 DURATION                       TIMESTAMP(6)
 MPH                            NUMBER(2,1)
 SHOE_ID                        NUMBER

SQL> select count(*) from walking_stats;

  COUNT(*)
----------
     0

TAB视图显示它:

SQL> select * from tab;

TNAME             TABTYPE    CLUSTERID
------------------------- ------------- ----------
WALKING_STATS         TABLE

显示user_tables它并且它是有效的:

SQL> select table_name, status from user_tables where table_name = 'WALKING_STATS';

TABLE_NAME        STATUS
------------------------- --------
WALKING_STATS         VALID

all_objects表还显示:

SQL> select owner, object_name, object_type, status from all_objects where owner = 'C##BIGDADDY';

OWNER       OBJECT_NAME OBJECT_TYPE STATUS
--------------- --------------- --------------- ---------------
C##BIGDADDY WALKING_STATS   TABLE       VALID

SQL> select owner, object_name, object_type, status from all_objects where object_name = 'WALKING_STATS';

OWNER       OBJECT_NAME OBJECT_TYPE STATUS
--------------- --------------- --------------- ---------------
C##BIGDADDY WALKING_STATS   TABLE       VALID

以下是 csv 数据文件的前几行:

day_walked,cal_burned,miles_walked,duration,mph,shoe_id
2019-08-01,358.1,3.53,01:05:51,3.2,6
2019-08-02,354.7,3.46,01:05:12,3.2,6
2019-08-04,354.2,3.55,01:05:07,3.3,6
2019-08-05,351.3,3.52,01:04:36,3.3,6

最后在命令行上运行带有文件路径位置参数的 sqlldr 命令,同时使用sysC##BIGDADDY用户(它们都对表具有 INSERT 权限):

sys 用户不起作用:

joshua@linux-t1zu:~> sqlldr control='/home/joshua/Practice_Data/Fitness_DB_Data/upload_stats.ctl'
Username:sys as sysdba
Password:

SQL*Loader: Release 18.0.0.0.0 - Production on Sun Oct 6 07:43:05 2019
Version 18.4.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

Path used:      Conventional
SQL*Loader-941: Error during describe of table WALKING_STATS
ORA-04043: object WALKING_STATS does not exist

用户 C##BIGDADDY 也没有:

joshua@linux-t1zu:~> sqlldr control='/home/joshua/Practice_Data/Fitness_DB_Data/upload_stats.ctl'
Username:C##BIGDADDY
Password:

SQL*Loader: Release 18.0.0.0.0 - Production on Sun Oct 6 07:44:52 2019
Version 18.4.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

Path used:      Conventional
SQL*Loader-941: Error during describe of table WALKING_STATS
ORA-04043: object WALKING_STATS does not exist

对于我的生活,我无法弄清楚我哪里出错了。非常感谢任何想法或想法。我正在使用安装在 openSuse Leap 15.0 上的 Oracle 18c XE,如果有帮助的话。先感谢您。

编辑

我发现的两件事可能有帮助(或没有帮助)。首先如下图,SYS用户不能直接连接pdb,但是alter session连接root容器后可以运行并设置容器给它。但是,表格walking_statsSYS用户不可见:

    joshua@linux-t1zu:~> sqlplus SYS/password_here@WALKING_DATA

    SQL*Plus: Release 18.0.0.0.0 - Production on Sun Oct 6 10:39:38 2019
    Version 18.4.0.0.0

    Copyright (c) 1982, 2018, Oracle.  All rights reserved.

    ERROR:
    ORA-12154: TNS:could not resolve the connect identifier specified


    Enter user-name: SYS AS SYSDBA
    Enter password: 

    Connected to:
    Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
    Version 18.4.0.0.0

    SQL> sho con_name;

    CON_NAME
    ------------------------------
    CDB$ROOT
    SQL> alter session set container = WALKING_DATA;

    Session altered.

    SQL> sho con_name;

    CON_NAME
    ------------------------------
    WALKING_DATA

SQL> select user from dual;

USER
--------------------------------------------------------------------------------
SYS

SQL> DESC WALKING_STATS;
ERROR:
ORA-04043: object WALKING_STATS does not exist


SQL> select * from tab where tname ='WALKING_STATS';

no rows selected

与 user 几乎相同的事情C##BIGDADDY

joshua@linux-t1zu:~> sqlplus C##BIGDADDY/password_here@WALKING_DATA

SQL*Plus: Release 18.0.0.0.0 - Production on Sun Oct 6 10:48:36 2019
Version 18.4.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified


Enter user-name: C##BIGDADDY
Enter password: 
Last Successful login time: Sun Oct 06 2019 07:45:07 -05:00

Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0

SQL> sho con_name;

CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container = WALKING_DATA;

Session altered.

SQL> sho con_name;

CON_NAME
------------------------------
WALKING_DATA
SQL> desc walking_stats;
 Name                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DAY_WALKED                     DATE
 CAL_BURNED                     NUMBER(4,2)
 MILES_WALKED                       NUMBER(3,2)
 DURATION                       TIMESTAMP(6)
 MPH                            NUMBER(2,1)
 SHOE_ID                        NUMBER

SQL> select count(*) from walking_stats;

  COUNT(*)
----------
     0

但是,用户C##BIGDADDY可以从表中查看和选择walking_stats

4

0 回答 0