Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите подумать про SQLLoader  [new]
Badamushto
Member

Откуда: xz
Сообщений: 28
Здравствуйте.
Попробую описать проблему...

Есть некая таблица TB_TEMP, в которую лодырем грузятся строки из файлов, файлы размером 3-10 Мб. Загрузка организована баш скриптом, как появляется файл в каталоге, то генерируется ctl и стартует лодырь, с загрузкой проблем нет. Файлы появляются с периодичностью 3-6 минут.

Теперь дальше, эту TB_TEMP разбирает джоб и по умолчанию она должна быть пустой, тоесть джоб копирует все что есть в TB_TEMP в другую таблицу и после чего должен почистить TB_TEMP, чистить думаю truncate TB_TEMP.

Так вот вопрос как организовать чистку TB_TEMP чтобы чистилось только то что уже скопировано в другую таблицу и обезопаситься от удаления новых строк (лодырь ведь постоянно подливает новые порции).

Как не попасть в ситуацию когда строки скопированы, тут лодырь плюнул новую порцию и после чего я делаю truncate...



Както так.
23 мар 11, 07:29    [10411931]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
serpv
Member

Откуда: n-ск
Сообщений: 220
почему бы вообще не обойтись без TB_TEMP и SQLLoader, загружая джобом данные куда и как надо непосредственно из файлов, подключаемых в качестве внешней таблицы.
23 мар 11, 07:57    [10411943]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Badamushto
Member

Откуда: xz
Сообщений: 28
Схема с sqlldrом уже настроена и заточена, на чтото новое пока времени нет.

Я вот думаю какнибудь научить лодыря смотреть пользовательскую блокировку dbms_lock, прежде чем загружать чтобы он смотрел, ну не он а чтото сразу до него%) если стоит блокировка то delay n секунд, блокировки нет - загружай смело. Тогда в джобе которые копирует и чистит TB_TEMP также смотреть активность лодыря, если работает то ждем, лодыря нет то выполняем копирование строк и чистку TB_TEMP...
23 мар 11, 08:08    [10411953]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
-2-
Member

Откуда:
Сообщений: 15330
Badamushto,

добавь колонку с нарастающим номером загрузки, заполняемую из сиквенса.
23 мар 11, 08:22    [10411970]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
serpv
Member

Откуда: n-ск
Сообщений: 220
почему считаете, что реализация с dbms_lock и перепроверками-задержками будет проще, чем сочинение ddl для create table organization external (по мотивам настроек лоадера)?
чем не нравится: как появляется файл в каталоге, то генерируется ddl для drop-create table и стартует загрузочный джоб или скрипт (я так понял уже готовый).
23 мар 11, 08:33    [10411973]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Elic
Member

Откуда:
Сообщений: 29990
Badamushto
как организовать чистку TB_TEMP чтобы чистилось только то что уже скопировано в другую таблицу и обезопаситься от удаления новых строк
delete returning
forall insert
23 мар 11, 08:35    [10411974]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Badamushto
Member

Откуда: xz
Сообщений: 28
serpv
почему считаете, что реализация с dbms_lock и перепроверками-задержками будет проще, чем сочинение ddl для create table organization external (по мотивам настроек лоадера)?
чем не нравится: как появляется файл в каталоге, то генерируется ddl для drop-create table и стартует загрузочный джоб или скрипт (я так понял уже готовый).


Все новое пугает, не работал я еще с внешними таблицами, если не сложно обрисуйте примерный алгоритм действий учитывая следующие условия: - есть некий каталог куда с вышеназванной периодичностью падают файлы, у файлов имена разные (уникальные, формат такой n1103231400, тоесть в имя файла включены дата и время)
23 мар 11, 08:42    [10411980]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
serpv
Member

Откуда: n-ск
Сообщений: 220
алгоритм:
serpv
как появляется файл в каталоге, то генерируется ddl для drop-create table и стартует загрузочный джоб или скрипт (я так понял уже готовый)
23 мар 11, 08:44    [10411982]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
serpv
Member

Откуда: n-ск
Сообщений: 220
Badamushto
Все новое пугает
ну нового должно быть не так уж и много
Behavior Differences Between SQL*Loader and External Tables
23 мар 11, 08:51    [10412006]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51785

Badamushto
Так вот вопрос как организовать чистку TB_TEMP чтобы чистилось только то что уже
скопировано в другую таблицу и обезопаситься от удаления новых строк (лодырь ведь
постоянно подливает новые порции).

Работай в SERIALIZABLE транзакции.

Posted via ActualForum NNTP Server 1.4

23 мар 11, 11:51    [10412871]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
-2-
Member

Откуда:
Сообщений: 15330
Dimitry Sibiryakov,

И надейся, что никто ничего не сделает с таблицей.
23 мар 11, 12:35    [10413222]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51785

-2-
И надейся, что никто ничего не сделает с таблицей.

А разве уровни изоляции выше RC не гарантируют, что ты будешь видеть таблицу неизменной
что бы другие с ней ни делали?..

Posted via ActualForum NNTP Server 1.4

23 мар 11, 12:36    [10413238]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Elic
Member

Откуда:
Сообщений: 29990
Dimitry Sibiryakov
А разве уровни изоляции выше RC не гарантируют, что ты будешь видеть таблицу неизменной что бы другие с ней ни делали?..
RTFM Using Serializable Transactions for Concurrency Control (FAQ)
23 мар 11, 13:47    [10413689]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51785

Elic
RTFM Using Serializable Transactions for Concurrency Control

Ну и?.. Ты думаешь, что "джоб копирует все что есть в TB_TEMP в другую таблицу" включает в
себя UPDATE? Тогда твой телепатер круче моего.

Posted via ActualForum NNTP Server 1.4

23 мар 11, 13:52    [10413720]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Elic
Member

Откуда:
Сообщений: 29990
Dimitry Sibiryakov
Ты думаешь, что "джоб копирует все что есть в TB_TEMP в другую таблицу" включает в себя UPDATE?
Разуй глаза, и почитай на пару слов дальше этой цитаты.
23 мар 11, 13:55    [10413751]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51785

Elic
Разуй глаза, и почитай на пару слов дальше этой цитаты.

Перечитал весь топик. Не нашёл ни одного упоминания update вообще, только вставки и
удаления. С какого перепугу при них может вылезти ORA-08177?

Posted via ActualForum NNTP Server 1.4

23 мар 11, 14:01    [10413801]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Elic
Member

Откуда:
Сообщений: 29990
Dimitry Sibiryakov
только вставки и удаления. С какого перепугу при них может вылезти ORA-08177?
Сериализуется доступ к тому, что помечено scn-ом. При norowdependencies (по умолчанию) это блок.
create table tmp (id int) /*rowdependencies*/;
insert into tmp values(1);
commit;

declare
  procedure p
  is
    pragma autonomous_transaction;
  begin
    insert into tmp values(9999999);
    commit;
  end p;
begin
  set transaction isolation level serializable;
  p;
  delete tmp where id = 1;
end;
/

*
ERROR at line 1:
ORA-08177: can't serialize access for this transaction
ORA-06512: at line 12
23 мар 11, 14:41    [10414051]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51785

Какое разочарование...

Posted via ActualForum NNTP Server 1.4

23 мар 11, 15:14    [10414283]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Elic
Member

Откуда:
Сообщений: 29990
Dimitry Sibiryakov
Какое разочарование...
Если не раскомментаривать, то наверное.
23 мар 11, 15:22    [10414354]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Badamushto
Member

Откуда: xz
Сообщений: 28
serpv,

Несколько вопросов:

1. Из скрипта я делаю внешнюю таблицу
2. Из скрипта я запускаю процедуру на копирование из внешней в свою, в ней я так понимаю можно делать дроп внешней.
3. Как потом грамотно можно организовать, чтобы скрипт узнал что с этим файлов все готово можно переходить в следующему? заводить цикл в скрипте и спрашивать постоянно базу?
24 мар 11, 11:56    [10417736]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Vlad_2005
Member

Откуда: Москва
Сообщений: 70
А вот если создать еще одну вспомогательную партицированную табличку с одной каким нибудь всепоглощающим ключом?
В нее sqlloader грузит данные.
Джоб грузит данные из такой же, но обычной таблицы.
Сначал в джобе делается exchange partition, выгружаются данные, и в конце Truncate table.

Теперь все готово для следующего цикла.
24 мар 11, 16:01    [10419846]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
serpv
Member

Откуда: n-ск
Сообщений: 220
Badamushto
3. Как потом грамотно можно организовать, чтобы скрипт узнал что с этим файлов все готово можно переходить в следующему? заводить цикл в скрипте и спрашивать постоянно базу?

например, я думаю, тот факт, что процедура, выполняющая insert into my_table select ... from ext_table завершилась без ошибок и исключений можно считать достаточным основанием для того, что-бы принять решение, что с этим файлом все готово :)
дроп существующей внешней я бы поместил непосредственно перед пересозданием очередной внешней таблицы.
25 мар 11, 07:35    [10421996]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Badamushto
Member

Откуда: xz
Сообщений: 28
ПОявился снова вопрос:)

Лодырь запускается из башскрипта по расписанию...затем есть некая процедура которая работает с той таблицей в которую грузит данные лодырь... Так вот вопрос, как грамотно можно в процедуре смотреть запущена ли сессия лодыря (в конкретную таблицу, так как сессий лодыря у меня одновременно может быть несколько) и если да то sleep если нет то работаем с таблицей.
29 апр 11, 05:49    [10584183]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
-2-
Member

Откуда:
Сообщений: 15330
Badamushto,

lock table in share mode
29 апр 11, 10:20    [10584903]     Ответить | Цитировать Сообщить модератору
 Re: Помогите подумать про SQLLoader  [new]
Badamushto
Member

Откуда: xz
Сообщений: 28
Имеется ввиду смотреть v$locked_object?
29 апр 11, 11:13    [10585370]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить