SQL * Loader-941: Ошибка при описании таблицы. Объект не существует при загрузке данных с использованием SQL Loader - PullRequest
1 голос
/ 06 октября 2019

У меня проблема с загрузчиком SQL, когда я пытаюсь загрузить данные в таблицу, которая существует. Однако по какой-то причине SQL Loader возвращает ошибки. Таблица находится в подключаемой базе данных, если это что-то означает или нет, я не уверен, но хотел бы включить ее в пост здесь на случай, если это поможет выяснить, где зависание.

Вот элемент управленияfile:

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 (например ,alking_data.c ## bigdaddy.walking_stats).

Все безрезультатно.

Некоторые команды SQL для доказательства существования таблицы (по крайней мере, из лучших)Я могу сказать, как я новичок в БД Oracle):

Это 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 в командной строке с аргументом пути к файлу, используя пользователей sys и C##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

Что касается жизни, я не могу понять, где я иду не так. Любые мысли или идеи очень ценятся. Я использую Oracle 18c XE, установленный на openSuse Leap 15.0, если это поможет. Заранее спасибо.

Правки :

Две вещи, которые я обнаружил, могут помочь (или нет). Сначала, как показано ниже, пользователь SYS не может подключиться напрямую к pdb, но может запустить alter session и установить для него контейнер после подключения к корневому контейнеру. Однако таблица walking_stats не видна пользователю SYS:

    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

Почти то же самое с пользователем 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.

...