У меня проблема с загрузчиком 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
.