|
Программирование >> Oracle
Глава 9 загрузить. Управляющий файл может содержать даже данные, которые необходимо загрузить. В следующем примере создается простой управляющий файл и описываются используемые на каждом шаге команды: LOAD DATA LOAD DATA. Эта команда указывает утилите SQLLDR, что необходимо сделать (в данном случае - загрузить данные). А еще можно указывать действие CONTINUE LOAD для возобновления загрузки. Эта опция используется только для продолжения непосредственной загрузки нескольких таблиц. INFILE * INFILE *. Эта конструкция указывает SQLLDR, что данные, которые необходимо загрузить, находятся в самом управляющем файле (см. ниже). В этой конструкции можно также указать имя другого файла, содержащего данные. При необходимости в командной строке можно переопределить имя файла, задаваемого в конструкции INFILE. Учтите, что опции командной строки имеют преимущество над установками, заданными в управляющем файле, как будет рассмотрено в разделе Предупреждения . INTO TABLE DEPT INTO TABLE DEPT. Эта конструкция указывает, в какую таблицу загружаются данные; в нашем случае это таблица DEPT. FIELDS TERMINATED BY , FIELDS TERMINATED BY Эта конструкция указывает, что данные будут представлены в виде списка значений через запятую. Есть десятки способов описать загружаемые данные в SQLLDR, это - лишь один из наиболее часто используемых. (DEPTNO, DNAME, LOC (DEPTNO, DNAME, LOC). Эта конструкция указывает, какие столбцы загружаются, их порядок следования в загружаемых данных и типы. При этом указываются типы данных во входном потоке, а не типы соответствующих столбцов в базе данных. В нашем случае используется стандартный формат CHAR(255), что вполне подходит. BEGINDATA BEGINDATA. Эта конструкция указывает утилите SQLLDR, что описание загружаемых данных закончено и что со следующей строки идут данные, которые необходимо загрузить в таблицу DEPT: 10,Sales,Virginia 20.Accounting,Virginia 3 0,Consulting,Virginia 40,Finance,Virginia Итак, вот управляющий файл в одном из наиболее простых и типичных форматов - для загрузки в таблицу данных со столбцами, определяемыми разделителем. В этой гла- Загрузка данн1х 457 ве будут рассмотрены намного более сложные примеры, но для начального знакомства он вполне пригоден. Чтобы применить этот управляющий файл, достаточно создать пустую таблицу DEPT: tkyte@TKYTE816> create table dept 2 (deptno number(2) constraint emp pk primary key, 3 dname varchar2(14) , 4 loc varchar2(13) Table created. и выполнить следующую команду: C:\sglldr>sqlldr userid=tkyte/tkyte control=demol.ctl SQLLDR: Release 8.1.6.0.0 - Production on Sat Apr 14 10:54:56 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved. Commit point reached - logical record count 4 Если таблица не пуста, будет выдано сообщение об ошибке: SQLLDR-601: For INSERT option, table must be empty. Error on table DEPT Так происходит потому, что в управляющем файле используются почти исключительно стандартные установки, а стандартно при загрузке выполняется операция INSERT (еще возможны APPEND, TRUNCATE или REPLACE). При выполнении операции INSERT предполагается, что таблица пуста. Если необходимо добавить записи в таблицу DEPT, можно указать операцию APPEND, а для замены данных в таблице DEPT - операцию REPLACE или TRUNCATE. При каждой попытке загрузки генерируется журнальный файл. Журнальный файл для нашего примера будет иметь следующий вид: SQLLDR: Release 8.1.6.0.0 - Production on Sat Apr 14 10:58:02 2001 (с) Copyright 1999 Oracle Corporation. All rights reserved. Control File: demol.ctl Data File: demol.ctl Bad File: demol.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 65536 bytes Continuation: none specified Path used: Conventional Table DEPT, loaded from every logical record. Insert option in effect for this table: INSERT Глава 9 Column Name Position Len Term Encl Datatype DEPTNO DNAME FIRST NEXT NEXT CHARACTER CHARACTER CHARACTER Table DEFT: 4 Rows successfully loaded. 0 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: 49536 bytes(64 rows) Space allocated for memory besides bind array: 0 bytes Total logical Total logical Total logical Total logical records skipped: records read: records rejected: records discarded: 2001 2001 Run began on Sat Apr 14 10:58:02 Run ended on Sat Apr 14 10:58:02 Elapsed time was: 00:00:00.11 CPU time was: 00:00:00.04 В журнальном файле представлены различные характеристики выполненной загрузки. Можно увидеть использованные опции (стандартные или явно указанные). Можно узнать, сколько записей прочитано, сколько из них было загружено и т.д. Указаны имена файлов BAD и DISCARD. Указана даже продолжительность загрузки. Журнальные файлы позволяют проверить, успешно ли прошла загрузка, и не было ли сообщений об ошибках. Если при загрузке данных были ошибки SQL (загружаемые данные - плохие , и соответствующие записи помещены в BAD-файл), эти ошибки записываются в журнальный файл. Информация в журнальном файле не нуждается в комментариях, поэтому мы не будем его рассматривать. Как сделать... Теперь мы переходим к наиболее часто задаваемым, по моему опыту, вопросам о загрузке и выгрузке данных из базы данных Oracle с помощью утилиты SQLLDR. Загрузка данных с разделителями Данные с разделителями, т.е. разделенные некоторым специальным символом и, возможно, взятые в кавычки, - наиболее популярный в настоящее время формат обычных файлов. На больших ЭВМ чаще всего используются файлы с записями фиксированной длины и фиксированного формата, но в UNIX и NT нормой при обмене данными является текстовый файл с разделителями. В этом разделе мы изучим популярные опции, используемые при загрузке данных с разделителями.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |