Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / LCD / Хранение БД.doc
Скачиваний:
50
Добавлен:
16.04.2013
Размер:
173.06 Кб
Скачать

Разделенные таблицы

Как показано на рис. $.12, в Oracle8 можно разбивать области хранения таблиц на более мелкие единицы дисковой памяти, называемые разделами (partitions).

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

В Oracle8 применяются таблицы, разделенные по диапазонам (range partitioned tables). Значение ключа разделов для какой-либо строки определяет, в каком разделе она хранится. Ключ разделов (partition key) таблицы - это столбец или упорядоченный набор столбцов (до 16), характеризующий физическое разделение строк этой таблицы. Чтобы предотвратить нерациональное расходование ресурсов при переносе строк из раздела в раздел, приложениям никогда не следует обновлять данные, содержащиеся в ключе разделов таблицы.

Можно задать диапазоны данных для разделов некоторой таблицы, указав верхнюю границу для каждого (не входящую в состав данного раздела). В каждом из них (исключая первый) имеется скрытое нижнее значение, которое представляет собой верхнюю границу предшест­вующего раздела. Таким образом, нужно создавать табличные разделы так, чтобы их диапазоны возрастали по значениям. Для примера рассмотрим оператор CREATETABLE, демонстрирующий создание большой разделенной таблицыUSA_CUSTOMERSв базе данных Oracle8. Строки таблицы помещаются в различные разделы в соответствии со штатом каждого клиента.

CREATE TABLE sales.usa_customers

(id NUMBER(5) PRIMARY KEY,

lastname VARCHAR2(50) NOT NULL,

firstname VARCHAR2(50) NOT NULL.

address VARCHAR2(100),

city VARCHAR2(50),

state CHAR(2),

zipcode VARCHAR2(15),

phone VARCHAR2(15),

fax VARCHAR2(15),

email VARCHAR2(100) )

PARTITION BY RANGE (state)

(PARTITION p1 VALUES LESS THAN ('H')

-- AL, AK, AZ, AR, CA, CO, CT, DC, DE, FL, GA

TABLESPACE data01,

PARTITION p2 VALUES LESS THAN ('MI')

-- HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME

TABLESPACE data02,

PARTITION p3 VALUES LESS THAN ('NM')

-- MI, MN, MS, MO, MT, NC, ND, NE, NH, NJ

TABLESPACE data03,

PARTITION p4 VALUES LESS THAN ('S')

-- NM, NV, NY, OH, OK, OR, PA, PR, RI

TABLESPACE data04,

PARTITION p5 VALUES LESS THAN (MAXVALUE)

-- SC, SD, TN, TX, UT, VA, VT, WA, WI, WV, WY

TABLESPACEdata05);

Размещение строк в разделах данных

Чтобы проиллюстрировать размещение строк в таблицах, разделенных по диапазонам, посмотрим, что происходит, когда приложение вносит в таблицу запись о клиенте, живущем в штате Арканзас (AR-Arkansas).Oracleсравнивает первый символ кода штатаARсо значением, определя­ющим первый раздел таблицы,P1. А меньше H, поэтому новая строка помещается в раздел P1, который физически хранится в файле данных табличной областиDATA01. Аналогично, когда вводятся данные о новом клиенте из Нью-Джерси (NJ-NewJersey), запись о новом клиенте размещается в разделе P3 (NJменьше NM), который физически хранится в файле данных табличной областиDATA03 и т.д.