Я нахожусь в процессе создания устройства хранения данных базы данных для моего приложения, состоящего на единственной таблице с огромным объемом данных (сотни миллионов записей). Я - планирование наличия индекса в день поле, так как я буду делать пакетное восстановление всех записей в установленный срок времени время от времени (например, получая все записи в течение следующего дня, в полночь).
Так как количество записей огромно, и производительность является важным беспокойством в этой системе, я хотел бы знать, существует ли способ, которым я могу динамично разделить свою таблицу так, чтобы я мог получить записи быстрее, создав и усекая разделы, поскольку они больше не необходимы. Например, как я пошел бы о создании раздела в течение следующего дня и заполнения его с остальной частью данных после того, как я сделан, обработав сегодняшние записи?
вы можете автоматизировать процесс создания или сокращения разделов с помощью динамического SQL . Вы должны написать процедуры с помощью EXECUTE IMMEDIATE или DBMS_SQL
и запланировать их с помощью DBMS_JOB
или DBMS_SCHEDULER
( DBMS_SCHEDULER
] является функцией 10g и более универсален, чем DBMS_JOB
).
Вы, вероятно, захотите сначала создать операторы секционирования вручную, а потом автоматизировать процесс, когда будете уверены в DDL. Вы найдете весь синтаксис в документации для оператора ALTER TABLE .
В 11g мы можем определить разделы INTERVAL, и Oracle автоматически создаст новые разделы, когда получит новые записи, ключи которых не помещаются ни в один из существующих диапазонов. Это очень крутая функция. Подробнее .
Следует иметь в виду, что разделение на разделы является платным дополнением к лицензии Enterprise Edition. Так что использовать это недешево.