Руководства, Инструкции, Бланки

Sql Loader руководство img-1

Sql Loader руководство

Категория: Руководства

Описание

Загрузка Данных с SQL*Loader, Управляющий Файл

Загрузка Данных с SQL*Loader, Управляющий Файл

Управляющий файл SQL*Loader является текстовым файлом, который содержит инструкции языка определения данных (DDL). DDL используется, чтобы управлять следующими аспектами сеанса SQL*Loader:

Где SQL*Loader ищет данные для загрузки

Каким образом отформатированные данные должен ожидать SQL*Loader

Как SQL*Loader конфигурируется (включая управление памятью, критерии выборки и исключений, обработка прерванной загрузки и так далее), когда он загружает данные

Как SQL*Loader управляет загружаемыми данными

Объяснение этого демонстрационного управляющего файла (по номерам строк) следующее:

Комментарии могут вставляться где угодно в разделе команд файла, но они не должны появиться в данных. Любой комментарий предваряется двумя дефисами. Весь текст справа от двойного дефиса игнорируется до конца строки.

Оператор LOAD DATA указывает SQL*Loader, что это - начало новой загрузки данных. Если Вы продолжаете загрузку, которая была прервана в процессе работы, используйте оператор CONTINUE LOAD DATA.

Ключевое слово INFILE определяет имя файла данных, содержащего данные, которые Вы хотите загрузить.

Ключевое слово BADFILE определяет имя файла, в который помещаются исключенные записи.

Ключевое слово DISCARDFILE определяет имя файла, в который помещаются забракованные записи.

Ключевое слово APPEND является одной из опций, которые можно использовать, загружая данные в таблицу, которая не пуста. Чтобы загрузить данные в таблицу, которая пуста, используйте ключевое слово INSERT.

Ключевое слово INTO TABLE позволяет Вам идентифицировать таблицы, поля и типы данных. Оно определяет отношение между записями в файле данных и таблицами в базе данных.

Предложение WHEN определяет одно или более условий на поля, которым должна соответствовать каждая запись прежде, чем SQL*Loader загрузит данные. В этом примере SQL*Loader загружает запись, только если 57-ой символ является десятичной точкой. Эта десятичная точка разграничивает доллары и центы в поле и заставляет исключать записи, у которых поле SAL не имеет значения.

Предложение TRAILING NULLCOLS указывает SQL*Loader обрабатывать любые относительно расположенные столбцы, которые отсутствуют в записи, как нулевые столбцы.

Остаток управляющего файла содержит cписок полей, предоставляющих информацию о форматах столбцов в таблице, которая загружается.

Другие статьи

Шаг 138 - БД Oracle - SQL*Loader Способы загрузки - ЧАСТЬ II

Шаг 138 - БД Oracle - SQL*Loader Способы загрузки - ЧАСТЬ II


www.ПЕРВЫЕ ШАГИ.ru. Шаг 138 - БД Oracle - SQL*Loader Способы загрузки - ЧАСТЬ II



Шаг 138 - БД Oracle - SQL*Loader Способы загрузки - ЧАСТЬ II

С фиксированной длинной все ясно, но что я не припомню, чтобы мне где-то
попадались, такие данные, да и вам такое может понадобиться редко! Поверь те
мне, если только в особых случаях. Как правило, я всегда работал и работаю с
данными переменной длинны! И вот как. Очень неплохим и полезным средством для
загрузки разнообразных данных в Oracle. как это ни странно, является
MS Access. Да, вы будете смеяться, но это так! В нем есть очень забавная
формировалка экспорта данных, в текстовом формате с разделителями! Вот этот
механизм, мне очень помогает! Я сгружаю в MS Access разнообразные
xls. dbf. mdb и т.д. А, на выходе получаю стройные ряды
текстовых файлов для загрузки в Oracle. Все просто замечательно! Итак,
что-то я разболтался! Давайте снова зальем данные в таблицу PRODUCTS для
чего снова ее вычистим:

Сечас можете взять файлы из прошлого шага или
сделать новые, как вам больше нравиться, но я все пройду до конца, чтобы вы не
путались! Файл PRODUCTS.bat можно оставить без изменений, а вот два
других будем переделывать! Для начала контрольный файл переписываем вот так:

Здесь FIELDS TERMINATED BY ';' означает, что границы данных определены
по символу "; ", а OPTIONALLY ENCLOSED BY '"' определяет, что
данные могут содержать символ обрамления. TRAILING NULLCOLS говорит о
том, что если поле для загрузки не имеет данных в файле данных, то в поле
записать NULL. Далее идет просто описание полей и все! А, вот
PRODUCTS.dat будет иметь следующее содержимое:

Видите данные отделены символом ";" друг от друга и все! Естественно, откуда
я знаю все эти позиции, так гораздо проще и быстрее! А, если записей скажем
миллион или десять! А. ) Запускаем файл загрузки на исполнение и получаем
следующее:

Ничего нового вроде нет! И содержимое таблицы тоже самое, что и в первом случае. Смотрим:

А, вот содержимое файла журнала уже другое, как и следовало ожидать:

Обратите внимание, что поля PRICE. QTY_ON_HAND обозначены как
CHARACTER. а в реальной таблице они имеют другой тип! Именно здесь и
сработало неявное преобразование. Вот так грузятся данные переменной длинны. Еще
один способ, загрузки носит название - загрузка вложенных данных. Давайте
рассмотрим его. Итак, для начала очистим нашу учебную табличку:

Теперь слейте вместе файлы PRODUCTS.ctl и PRODUCTS.dat ,
например, вот так:

Затем смените расширение файла PRODUCTS.txt на PRODUCTS.ctl и
отредактируйте его содержимое вот так:

Здесь слово BEGINDATA означает начала блока загружаемых данных. В
данном случае контрольный файл выполняет двойную функцию и описывает правила
загрузки и несет данные для нее! Если вам такой способ кажется более удачным,
можете его использовать, если нет, то это как вам удобнее. Обратите так же
внимание, что после ключевого слова INFILE стоит просто знак "*".
Содержимое журнала после такой загрузки будет такое:

Отличие только в записи файла данных, все остальное, так же как и в прошлый раз. Для
примера можете попробовать загрузку с опциями загрузки для таблиц, например
TRUNCATE. Удачи. )

Текущий рейтинг темы: Нет

Пример использования Oracle SQL*Loader

Пример использования Oracle SQL*Loader

Пример использования Oracle SQL*Loader

Очень часто возникает потребность загрузить в СУБД Oracle какие-нибудь данные из текстовых или бинарных файлов.
Часто программисты для решения этой задачи разрабатывают свои средства, не догадываясь, что в Oracle уже есть мощный инструмент, специально разработанный для импорта данных из файлов. Этот инструмент называется - SQL*Loader .
Цель этого очерка познакомить читателя с основными приемами работы с SQL*Loader .
За более детальной информацией обращайтесь к документации.

Итак, допустим нам надо импортировать данные из такого вот файла.

Файл состоит из шапки и строк с данными.
Причем, нам надо импортировать не просто так, а выполнив определенные правила:
  • импортировать все, кроме строк с Id=20;
  • импортировать поля Id, text;
  • пропустить поля void1, void2;
  • вместо полей value1 и value2 импортировать их сумму, т.е. value1+value2;
  • импортировать бинарный файл, имя которого находится в поле file.
При импорте надо учесть, что все поля могут быть переменной длины, а разделителем служит символ ";".

Данные будем импортировать в эту таблицу:

Утилита SQL*Loader запускается следующей строкой:

  • scott/scott@dbstart - типовая строка подключения к базе;
  • control.txt - этот так называемый управляющий файл;
  • loader.log - это файл логирования процесса загрузки.
В управляющем файле находятся инструкции для SQL*Loader'а, где брать данные и куда их следует положить.
Кроме того, в этом файле можно описать и требования, предъявленные к процессу импорта.
Вот текст файла: Прокомментируем текст.
  • options (skip=1) - указание пропустить первую строку файла (заголовок);
  • load data characterset CL8MSWIN1251 - задание кодировки файла данных;
  • infile 'example.dat' - файл с исходными данными;
  • badfile 'example.bad' - в этот файл запишутся данные, которые не были импортированы по причине ошибок, например, строка в поле типа number;
  • discardfile 'example.dis' - в этот файл попадут строки, которые не соответствуют условию загрузки, в нашем случае здесь будет строка с id=20;
  • Replace - говорит о том, что если в таблице уже есть данные, их надо заменить;
  • into table tLoader when id<>'20' - указание имени таблицы и условия фильтрации данных;
  • fields terminated by ';' optionally encosed by '"' - поля разделяются символом ";", и могут содержать кавычки;
Далее идет описание формата данных:
  • поле Id - целое число;
  • поля void1 и void2 пропускаем;
  • поле char_data помещаем в таблицу;
  • Поле value1 пропускаем, но значение запоминаем;
  • Значение val получаем как сумму значения текущего поля и предыдущего, которое запомнили;
  • Имя файла blob_filename зачитываем и сохраняем и выполняем загрузку image_data LOBFILE(blob_filename) TERMINATED BY EOF бинарного фалйа.
Дополнительно отмечу, что совпадение названий полей в шапке файла и полей в управляющем файле сделано для удобства, эти наименования могут не совпадать.

Как видите, SQL*Loader - это мощное средство СУБД Oracle, которое позволяет решить большинство типовых задач импорта данных.

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.

Sqlldr как подгрузить

Sqlldr как подгрузить .cvs [new]

Откуда: Самара
Сообщений: 489

CREATE TABLE "SYSTEM"."IMEI_IC"
( "IMEI" VARCHAR2(20 CHAR) NOT NULL ENABLE,
"MODEL" VARCHAR2(100 CHAR),
"N_DOC" VARCHAR2(100 CHAR),
"DATA_H" VARCHAR2(100 CHAR),
"INICIATOR" VARCHAR2(100 CHAR),
"DATA_P" VARCHAR2(100 CHAR),
CONSTRAINT "IMEI_IC_PK" PRIMARY KEY ("IMEI")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ;

и файл .exel который конвертирую в .cvs
Названия столбцов идентичны (в exel и oracle)
Ну сколько не бился, ну не получается создать управляющий файл с логом. не грузится.
Подскажите пожалуйста.


конекчуть батником вида

sqlldr userid=system/pass@imeidb control=exel.txt

LOAD DATA
INFILE 'C:\1.csv'
BADFILE 'C:\2.bad'
INTO TABLE IMEI_IC INSERT
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(IMEI, MODEL, N_DOC, DATA_H, INICIATOR, DATA_P)

Откуда: Самара
Сообщений: 489

конект ОК,
но результат следующий


SQL*Loader: Release 11.2.0.2.0 - Production on Пн Дек 15 16:38:48 2014

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

Control File: control.txt
Data File: C:\1.csv
Bad File: C:\2.bad
Discard File: none specified

(Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional

Table IMEI_IC, loaded from every logical record.
Insert option in effect for this table: INSERT
TRAILING NULLCOLS option in effect

Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
IMEI FIRST *. CHARACTER
MODEL NEXT *. CHARACTER
N_DOC NEXT *. CHARACTER
DATA_H NEXT *. CHARACTER
INICIATOR NEXT *. CHARACTER
DATA_P NEXT *. CHARACTER

SQL*Loader-601: For INSERT option, table must be empty. Error on table IMEI_IC

Откуда: Самара
Сообщений: 489

SQL*Loader: Release 11.2.0.2.0 - Production on Пн Дек 15 16:58:40 2014

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

Control File: control.txt
Data File: C:\2.csv
Bad File: C:\55.bad
Discard File: none specified

(Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional

Table IMEI_IC, loaded from every logical record.
Insert option in effect for this table: INSERT
TRAILING NULLCOLS option in effect

Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
IMEI FIRST *. CHARACTER
MODEL NEXT *. CHARACTER
N_DOC NEXT *. CHARACTER
DATA_H NEXT *. CHARACTER
INICIATOR NEXT *. CHARACTER
DATA_P NEXT *. CHARACTER

Record 38: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 62: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 63: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 64: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 65: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 66: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 67: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 68: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 69: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 70: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 71: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 72: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 73: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 74: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 75: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 76: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 77: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 78: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 79: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 81: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 90: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 94: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 101: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 102: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 103: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 104: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 105: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 106: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 107: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 108: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 109: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 110: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 111: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 112: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 113: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 114: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 115: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 116: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 117: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)

Record 118: Rejected - Error on table IMEI_IC.
ORA-00001: нарушено ограничение уникальности (SYSTEM.IMEI_IC_PK)


Table IMEI_IC:
84 Rows successfully loaded.
40 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.


Space allocated for bind array: 99072 bytes(64 rows)
Read buffer bytes: 1048576

Total logical records skipped: 0
Total logical records read: 124
Total logical records rejected: 40
Total logical records discarded: 0

Run began on Пн Дек 15 16:58:40 2014
Run ended on Пн Дек 15 16:58:40 2014

Elapsed time was: 00:00:00.23
CPU time was: 00:00:00.08

Пример использования Oracle SQL*Loader

Пример использования Oracle SQL*Loader

Пример использования Oracle SQL*Loader

Очень часто возникает потребность загрузить в СУБД Oracle какие-нибудь данные из текстовых или бинарных файлов.
Часто программисты для решения этой задачи разрабатывают свои средства, не догадываясь, что в Oracle уже есть мощный инструмент, специально разработанный для импорта данных из файлов. Этот инструмент называется - SQL*Loader .
Цель этого очерка познакомить читателя с основными приемами работы с SQL*Loader .
За более детальной информацией обращайтесь к документации.

Итак, допустим нам надо импортировать данные из такого вот файла.

Файл состоит из шапки и строк с данными.
Причем, нам надо импортировать не просто так, а выполнив определенные правила:
  • импортировать все, кроме строк с Id=20;
  • импортировать поля Id, text;
  • пропустить поля void1, void2;
  • вместо полей value1 и value2 импортировать их сумму, т.е. value1+value2;
  • импортировать бинарный файл, имя которого находится в поле file.
При импорте надо учесть, что все поля могут быть переменной длины, а разделителем служит символ ";".

Данные будем импортировать в эту таблицу:

Утилита SQL*Loader запускается следующей строкой:

  • scott/scott@dbstart - типовая строка подключения к базе;
  • control.txt - этот так называемый управляющий файл;
  • loader.log - это файл логирования процесса загрузки.
В управляющем файле находятся инструкции для SQL*Loader'а, где брать данные и куда их следует положить.
Кроме того, в этом файле можно описать и требования, предъявленные к процессу импорта.
Вот текст файла: Прокомментируем текст.
  • options (skip=1) - указание пропустить первую строку файла (заголовок);
  • load data characterset CL8MSWIN1251 - задание кодировки файла данных;
  • infile 'example.dat' - файл с исходными данными;
  • badfile 'example.bad' - в этот файл запишутся данные, которые не были импортированы по причине ошибок, например, строка в поле типа number;
  • discardfile 'example.dis' - в этот файл попадут строки, которые не соответствуют условию загрузки, в нашем случае здесь будет строка с id=20;
  • Replace - говорит о том, что если в таблице уже есть данные, их надо заменить;
  • into table tLoader when id<>'20' - указание имени таблицы и условия фильтрации данных;
  • fields terminated by ';' optionally encosed by '"' - поля разделяются символом ";", и могут содержать кавычки;
Далее идет описание формата данных:
  • поле Id - целое число;
  • поля void1 и void2 пропускаем;
  • поле char_data помещаем в таблицу;
  • Поле value1 пропускаем, но значение запоминаем;
  • Значение val получаем как сумму значения текущего поля и предыдущего, которое запомнили;
  • Имя файла blob_filename зачитываем и сохраняем и выполняем загрузку image_data LOBFILE(blob_filename) TERMINATED BY EOF бинарного фалйа.
Дополнительно отмечу, что совпадение названий полей в шапке файла и полей в управляющем файле сделано для удобства, эти наименования могут не совпадать.

Как видите, SQL*Loader - это мощное средство СУБД Oracle, которое позволяет решить большинство типовых задач импорта данных.

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.