Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке? / 9 сообщений из 9, страница 1 из 1
31.08.2016, 15:34:49
    #39301221
snopov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
Грузим большие объемы (порядка 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
31.08.2016, 16:56:29
    #39301319
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
snopovКак такое можно объяснить?
Промежуточными commit - см. лог работы лодыря ("Commit point reached").
Обратите внимание на
http://emrebaransel.blogspot.ru/2008/10/sql-loader-performance-using-larger.html
...
Рейтинг: 0 / 0
31.08.2016, 17:06:31
    #39301330
snopov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
В том-то и дело, что промежуточных коммитов не должно быть.
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
31.08.2016, 17:52:11
    #39301378
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
snopovВ том-то и дело, что промежуточных коммитов не должно быть.
ROWS параметр у нас не задан.
Лог лодыря уже посмотрите, что попусту интернеты сотрясать...
ROWS по умолчанию, если мне не изменяет склероз, что-то вроде 64 - если столько строк в bind array помещается.
Если не помещается - то, соответственно, меньше.
...
Рейтинг: 0 / 0
31.08.2016, 21:12:33
    #39301503
snopov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
В логе лоадера промежуточных коммитов нет.
И из документации я привел это "If the ROWS parameter is not specified, the entire load is rolled back.".
Насколько я понимаю, тут сказано, что если параметр ROWS не определен, то все данные должны быть откачены.
...
Рейтинг: 0 / 0
01.09.2016, 02:59:34
    #39301571
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
И все же интересно было бы взглянуть лог загрузки
Поведение, которое ты описываешь, указано в доке для 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
01.09.2016, 10:37:51
    #39301708
snopov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
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
01.09.2016, 12:15:58
    #39301813
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oracle. Загрузка sqlldr direct. Работает ли откат при ошибке?
Да я и говорю, непохоже
Но в доке такое поведение описано в одном случае

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

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


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