скрипт для удаления миллионов строк из таблицы оракулов по возрасту или дате - PullRequest
0 голосов
/ 16 января 2012

Есть ли возможность написать скрипт в oracle, который удаляет строки из таблицы в зависимости от возраста. я хочу удалить строки s. У меня есть таблица с миллионами строк, и я хочу сохранить только последние 3 месяца строк. У меня есть следующая таблица с именами столбцов как

Я очень плохо знаком с базами данных. Как мне написать скрипт для этого?

Ответы [ 3 ]

2 голосов
/ 17 января 2012

С таким количеством строк, удаленных в одной транзакции, вы также должны предсказать, что будет использовано много места для отмены. Все строки, которые вы удаляете, будут кратко сохранены в табличном пространстве отмены, чтобы позволить вам откатить транзакцию и, что более важно, позволить другим пользователям видеть строки, пока вы не УСТАНОВИТЕ свое удаление. См. эту ветку асктом для совета.

1 голос
/ 17 января 2012

Также рассмотрите вариант сохранения нужных вам строк в новой таблице и затем отбрасывания старой таблицы.

Что-то вроде ..

create table new_table_2_months
as
select * 
  from table1
  where date_column > (sysdate-60)

drop table table1;

alter table new_table_2_months rename to table1;

Убедитесь, что вы такжепосмотрите на ограничения, индексы и другие объекты, если они применимы к исходной таблице.И не забудьте ИСПЫТАТЬ, ИСПЫТАТЬ, ИСПЫТАТЬ.

1 голос
/ 17 января 2012

Поскольку FEED_DT_TM является DATE, нет необходимости использовать TO_DATE для приведения его к DATE.Просто

DELETE FROM your_table_name
 WHERE sysdate - feed_dt_tm >= 120
...