Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1
  • 2

ТЕМА: Очистка временных таблиц в Oracle

Очистка временных таблиц в Oracle 24 июль 2011 10:59 #2941

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 43
  • Спасибо получено: 0
В общем, такая проблема.
На очистку временной таблицы (delete from table_1) тратится довольно значительное время. Чтобы ускорить процесс, было решено пользоваться
оператором truncate (truncate table autotran.table_1). Естественно, поместив
его в процу, выполняющуюся в автономной транзакции (чтобы не происходил commit текущей транзакции). Всё бы хорошо, да сервер БД (Oracle 7.3 Enterprise Edition) при ее выполнении периодически падает со статусом 600 (Internal error, возникает по различным причинам...). Никто с подобным не сталкивался? Может, подскажете чего?
Текст процы:
PROCEDURE L_AUTONOMOUS_EXECUTE (
OperatorText IN VARCHAR)
AS
PRAGMA AUTONOMOUS_TRANSACTION;
except EXCEPTION;
BEGIN
EXECUTE IMMEDIATE OperatorText ;
EXCEPTION
WHEN except THEN
ROLLBACK;
END;
Входной параметр:
'truncate table autotran.table_1'

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Очистка временных таблиц в Oracle 24 июль 2011 11:00 #2942

  • Doc
  • Doc аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 57
  • Спасибо получено: 1
А что 7.3 автономные транзакции и execute immediate поддерживает?
И если поддерживает то фактически, но неофициально, со всеми вытекающими багами и последствиями (например, ORA 600)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Очистка временных таблиц в Oracle 24 июль 2011 11:01 #2943

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 43
  • Спасибо получено: 0
Мдааа... :(Заказчика ведь фиг убедишь использовать более свежую версию - хотя бы восьмерку :(А есть другие способы почистить таблицу (более быстрые, чем delete), реализуемые без использования авт. транзакций и execute immediate?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Очистка временных таблиц в Oracle 24 июль 2011 11:01 #2944

  • Doc
  • Doc аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 57
  • Спасибо получено: 1
Более быстрого способа нет, но можно попробовать создать таблицу с nologging. Тогда по идее должно быть быстрее, но не настолько быстро как truncate.

А что, без временной таблицы нельзя обойтись?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Очистка временных таблиц в Oracle 24 июль 2011 11:03 #2945

  • Pesok
  • Pesok аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 34
  • Спасибо получено: 0
Привет.
В 7 еще и nologging официально нет. Там все называется unrecoverable и вешается только на команду. На разделы базы - нет.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Очистка временных таблиц в Oracle 24 июль 2011 11:04 #2946

  • Myk
  • Myk аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 43
  • Спасибо получено: 0
Без временных таблиц, к сожалению, нельзя... Отчет довольно нехилый, куча разных таблиц перебирается, много логики, частных случаев и т.п...
Насчет nologging - спасибо, попробую...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2