powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
9 сообщений из 9, страница 1 из 1
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
    #39301221
snopov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грузим большие объемы (порядка 500 тыс. записей) каждые 5 минут с помощью sqlldr в секционированную таблицу. Секции по часам, плюс есть еще подсекции (12 штук). Контрол файл:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
OPTIONS (DIRECT=TRUE, ERRORS=500000)
UNRECOVERABLE
load data
infile '{FILENAME}'
append
into table TBL_NAME
fields terminated by '|'
TRAILING NULLCOLS
(
)



Иногда при загрузке возникает deadlock. При этом обнаружили непонятную проблему. Ожидаем, что при возникновении ошибки Oracle должен выполнить rollback всех загруженных строк. Но проверка данных в целевой таблице показала, что данные не откатились, а были загружены.

Как такое можно объяснить?
...
Рейтинг: 0 / 0
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
    #39301319
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
snopovКак такое можно объяснить?
Промежуточными commit - см. лог работы лодыря ("Commit point reached").
Обратите внимание на
http://emrebaransel.blogspot.ru/2008/10/sql-loader-performance-using-larger.html
...
Рейтинг: 0 / 0
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
    #39301330
snopov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том-то и дело, что промежуточных коммитов не должно быть.
ROWS параметр у нас не задан.
А судя по документации "You can use the ROWS parameter to specify the frequency of the commit points. If the ROWS parameter is not specified, the entire load is rolled back."
...
Рейтинг: 0 / 0
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
    #39301378
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
snopovВ том-то и дело, что промежуточных коммитов не должно быть.
ROWS параметр у нас не задан.
Лог лодыря уже посмотрите, что попусту интернеты сотрясать...
ROWS по умолчанию, если мне не изменяет склероз, что-то вроде 64 - если столько строк в bind array помещается.
Если не помещается - то, соответственно, меньше.
...
Рейтинг: 0 / 0
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
    #39301503
snopov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В логе лоадера промежуточных коммитов нет.
И из документации я привел это "If the ROWS parameter is not specified, the entire load is rolled back.".
Насколько я понимаю, тут сказано, что если параметр ROWS не определен, то все данные должны быть откачены.
...
Рейтинг: 0 / 0
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
    #39301571
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все же интересно было бы взглянуть лог загрузки
Поведение, которое ты описываешь, указано в доке для Discontinued Direct Path Loads Because of Space errors when loading data into an unpartitioned table, one partition of a partitioned table, or one subpartition of a composite partitioned table
А это не очень похоже на Deadlock, да и 12 подсекций -- это HASH?
...
Рейтинг: 0 / 0
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
    #39301708
snopov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12 секций - HASH

А не такое должно быть поведение (для фатал еррор)?
http://docs.oracle.com/cd/E11882_01/server.112/e22490/ldr_control_file.htm#SUTIL1097

Вот лог загрузки:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
SQL*Loader: Release 12.1.0.2.0 - Production on Wed Aug 31 04:00:00 2016

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

Control File:   /tmp/ctl.Gu07nFvAOk
Data File:      /var/log/2016-08-31-03-11.log
  Bad File:     /var/log/load_20160831040000.bad
  Discard File:  none specified
 
 (Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 500000
Continuation:    none specified
Path used:      Direct

Load is UNRECOVERABLE; invalidation redo is produced.

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

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
COLUMN_1                             FIRST     *   |       CHARACTER            
COLUMN_2                             NEXT     *   |       CHARACTER            
COLUMN_3                          NEXT     *   |       CHARACTER            
COLUMN_4                                NEXT     *   |       CHARACTER            
COLUMN_5                             NEXT     *   |       CHARACTER            

SQL*Loader-925: Error while uldlgs: OCIStmtExecute (ptc_hp)
ORA-00060: deadlock detected while waiting for resource

SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.

Table TABLE_LOG:
  0 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.

  Date conversion cache disabled due to overflow (default size: 1000)

  Sub-Partition SSPY_31_03_01: 21764 Rows loaded.
  Sub-Partition SSPY_31_03_02: 22608 Rows loaded.
  Sub-Partition SSPY_31_03_03: 22509 Rows loaded.
  Sub-Partition SSPY_31_03_04: 22401 Rows loaded.
  Sub-Partition SSPY_31_03_05: 21832 Rows loaded.
  Sub-Partition SSPY_31_03_06: 22451 Rows loaded.
  Sub-Partition SSPY_31_03_07: 21987 Rows loaded.
  Sub-Partition SSPY_31_03_08: 21984 Rows loaded.
  Sub-Partition SSPY_31_03_09: 21981 Rows loaded.
  Sub-Partition SSPY_31_03_10: 21868 Rows loaded.
  Sub-Partition SSPY_31_03_11: 21892 Rows loaded.
  Sub-Partition SSPY_31_03_12: 22158 Rows loaded.
  Sub-Partition SSPY_31_03_13: 22585 Rows loaded.
  Sub-Partition SSPY_31_03_14: 22168 Rows loaded.
  Sub-Partition SSPY_31_03_15: 21789 Rows loaded.
  Sub-Partition SSPY_31_03_16: 22663 Rows loaded.
  Sub-Partition SSPY_31_04_01: 12 Rows loaded.
  Sub-Partition SSPY_31_04_02: 19 Rows loaded.
  Sub-Partition SSPY_31_04_03: 14 Rows loaded.
  Sub-Partition SSPY_31_04_04: 19 Rows loaded.
  Sub-Partition SSPY_31_04_05: 20 Rows loaded.
  Sub-Partition SSPY_31_04_06: 14 Rows loaded.
  Sub-Partition SSPY_31_04_07: 15 Rows loaded.
  Sub-Partition SSPY_31_04_08: 18 Rows loaded.
  Sub-Partition SSPY_31_04_09: 16 Rows loaded.
  Sub-Partition SSPY_31_04_10: 16 Rows loaded.
  Sub-Partition SSPY_31_04_11: 21 Rows loaded.
  Sub-Partition SSPY_31_04_12: 17 Rows loaded.
  Sub-Partition SSPY_31_04_13: 17 Rows loaded.
  Sub-Partition SSPY_31_04_14: 15 Rows loaded.
  Sub-Partition SSPY_31_04_15: 12 Rows loaded.
  Sub-Partition SSPY_31_04_16: 11 Rows loaded.

Bind array size not used in direct path.
Column array  rows :   10000
Stream buffer bytes:16777216
Read   buffer bytes: 1048576

Total logical records skipped:          0
Total logical records read:        354896
Total logical records rejected:         0
Total logical records discarded:        0
Total stream buffers loaded by SQL*Loader main thread:       86
Total stream buffers loaded by SQL*Loader load thread:        0

Run began on Wed Aug 31 04:00:00 2016
Run ended on Wed Aug 31 04:03:55 2016

Elapsed time was:     00:03:55.37
CPU time was:         00:00:02.15
...
Рейтинг: 0 / 0
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
    #39301813
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я и говорю, непохоже
Но в доке такое поведение описано в одном случае

А тут и одновременно несколько секций и ошибка совсем не по нехватке места

А deadlock из-за чего?
Можно в трейсе посмотреть граф блокировок и выполняемые операторы
Может это действительно рекурсивный оператор по выделению места (хотя нужны ли они, наверняка ведь LMT) и он считает это Space error? Но с 12 секциями все равно не получается натянуть на глобус
...
Рейтинг: 0 / 0
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
    #39301947
snopov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deadlock из-за сбора статистики dbms_stat-ом по секции таблицы.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]