Некоторые методы ручного секционирования Oracle? доступны и в OracleS, но здесь внесено одно существенное усовершенствование. В OracleS имеются триггеры INSTEAD OF, позволяющие превращать представление UNION ALL или представление секции в обновляемый объект. На данном этапе мы не видим существенных причин, по которым вам следовало бы пользоваться ручным секционированием в новых приложениях, работающих только под OracleS, за исключением случаев, когда секционированные таблицы неприемлемы (например, когда секции должны быть распределены по нескольким физическим базам данных).
В приведенном выше примере с телефонными звонками автоматическое секционирование, скорее всего, будет не только приемлемо, но и крайне желательно. Наш метод секционирования можно задать в скрипте создания таблицы:
CREATE TABLE calls
( call_from     NUMBER(12)
, call_to      NUMBER(18)
, call_start    DATE
, call_seconds  NUMBER(6) -- рекомендуется ставить перед первичным ключом ключ секционирования
, PRIMARY_KEY (call_start, call_from)
)
STORAGE (INITIAL 100M NEXT 100M) LOGGING
PARTITION BY RANGE (call_start)
( PARTITION calls__old VALUES LESS THEN ( ' Ol-JAN-98 ' ) TABLESPACE ts97
, PARTITION calls9801 VALUES LESS THEN ('Ol-FEB-98') TABLESPACE ts98
, PARTITION calls9802 VALUES LESS THEN ('Ol-MAR-98')
TABLESPACE ts98 ) ;
Все вызовы, датированные январем 1998 года, которые вставляются в таблицу CALLS, автоматически помещаются в секцию CALLS9801. Далее мы можем отключить отдельные секции таблицы (например, чтобы загрузить какие-то дополнительные данные или выполнить резервное копирование) и продолжать одновременно работать с остальными секциями, обращаясь к ним по имени таблицы.
Предупреждение:
Читатели, работающие с проектом Year 2000, вероятно, ужаснутся, увидев в примере двузначные цифры. Мы должны сделать признание.
Дейв составлял пример, стремясь к тому, чтобы его было легче читать. Форма, показанная в наших примерах и в примерах, приведенных в документации Oracle, по крайней мере в бета-версии, не работает корректно с датами 21-го века. Естественно, разработчики должны требовать, чтобы все значения года указывались с помощью функции TO_DATE в четырехзначном формате, или настаивать на использовании маски RR для года в инициализационном параметре NLS_DATE_FORMAT.
52	Oracle S