2013-06-11 2 views
1

Я использую Oracle 11g.Столбцовый стол для большего количества транзакций

Я пытаюсь реализовать сценарий одновременной загрузки в таблицу с восстановлением индекса. У меня мало потоков, которые пытаются реализовать этот сценарий: 1. загрузить данные из источника, 2. преобразовать данные, 3. отключить индекс таблицы DWH, 4. загружать данные в DWH, 5. rebuild индекс на таблице DWH. Я выключаю и восстанавливаю индексы для лучшей производительности, бывают ситуации, когда один поток перестраивает индекс, а другой пытается отключить его. То, что мне нужно сделать, это разместить некоторую блокировку между точками 2 и 3, которые будут выпущены после точки 5.

Недостаточно механизма Oracle, построенного в LOCK TABLE, поскольку блокировка освобождается по окончании транзакции, поэтому любой ALTER Заявление освобождает замок.

Вопрос в том, как решить проблему?

ответ

1

Проблема решена. То, что я хотел сделать, может быть легко достигнуто с помощью пакета DBMS_LOCK.

1. DBMS_LOCK.REQUEST(...) 
2. ALTER INDEX ... UNUSABLE 
3. Load data 
4. ALTER INDEX ... REBUILD 
5. DBMS_LOCK.RELEASE(...) 
0

Вы можете использовать DBMS_SCHEDULER:

  1. задания выполняются, что нагрузки и преобразовывать данные
  2. Выключать индексы
  3. выполнения заданий, что данные нагрузки в DWH
  4. перестраивать индексы

enter image description here

Использование цепочки:

+0

Это потребует довольно серьезных изменений в текущей архитектуре, мне нужно решить эту проблему, используя блокировки. – WojtusJ

+0

Можете ли вы создать таблицу состояний. Некоторые процедуры/SQL не будут выполняться, если предыдущий шаг еще не закончен. Возможно, у вас есть таблица с журналами? Все будет хорошо. –

+0

Вы можете создавать задания динамически, не мешая «архитектуре». 1) создать работу. 2) запустите его. 3) Бросьте задание. –

0

Вы должны варьироваться разметить таблицу на минут/часов основе времени ввода и позволяют индексы только тогда, когда время истекло. После создания каждого раздела должны быть отключены все индексы. Только один процесс может включать индексы.

Смежные вопросы