Как запустить Oracle Proc без журнала транзакций? - PullRequest
0 голосов
/ 25 августа 2011

В Oracle, когда у нас есть процедура, которая удаляет много данных, я думаю, она обновляет «журналы транзакций».Когда мы фиксируем, журнал очищается.

Но при большом количестве операций удаления журнал заполняется.Есть ли способ запустить процесс без регистрации?

Ответы [ 2 ]

4 голосов
/ 25 августа 2011

Какую проблему вы пытаетесь решить? Я предполагаю, что вы беспокоитесь о производительности, но вы говорите, что проблема в том, что «журнал заполнится», что может указывать на то, что вы столкнулись с некоторой ошибкой в ​​процессе.

Какая часть данных в таблице удаляется?

Если вы удаляете все данные из таблицы, вы можете вместо этого сделать TRUNCATE.

TRUNCATE TABLE <<table name>>

- это оператор DDL, который удалит все данные из таблицы. Поскольку это DDL и его нельзя откатить, генерируется очень мало REDO и UNDO (Oracle имеет отдельные средства для REDO и UNDO, а SQL Server помещает оба в один и тот же журнал транзакций).

Если вы удаляете большую часть данных из таблицы, вероятно, было бы эффективнее

INSERT /*+ APPEND */ INTO staging_table( column_list )
  SELECT column_list
    FROM table_name
   WHERE <<criteria for the data to save>>

TRUNCATE TABLE table_name;

INSERT /*+ APPEND */ INTO table_name( column_list )
  SELECT column_list
    FROM staging_table

Может быть еще эффективнее удалить старую таблицу и переименовать промежуточную таблицу в имя старой таблицы, но это может потребовать воссоздания ряда ограничений и индексов.

Если вы регулярно занимаетесь чем-то вроде архивирования старых данных, другой возможностью будет разделение таблицы по некоторому столбцу даты и периодическое удаление самого старого раздела. Это также очень эффективно, но для него требуется опция разделения, которая является дополнительной опцией по сравнению с лицензией Enterprise Edition.

1 голос
/ 25 августа 2011

Журнал транзакций в журнале oracle называется журналом повторов.Если изменения не будут записаны в журнал повторов, вы не сможете их восстановить.Некоторые операции, такие как загрузка данных или построение индекса, могут быть помечены как невосстановимые.

Утверждение о заполнении журнала неверно.В журнале повторов используется набор файлов.Как только последний заполнен, он начинает писать первый снова.Если архивирование включено, файл копируется в место назначения архива перед его перезаписью.Возможно то, что переключение журнала повторов должно ждать завершения архивирования (или в месте назначения архивации нет места).Таким образом, правильное решение - правильно определить размер журналов повторов.Это включает в себя количество групп журнала повторов.

Предыдущее решение использовать усечение не будет работать, так как задействовано несколько таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...