Альтернативный буферный пул в СУБД OpenEdge (Progress)
Использование OpenEdge SQL для управления типами буферного пула объектов базы данных
Администратор базы данных может использовать язык OpenEdge SQL для управления объектами базы данных, которые должны работать с Альтернативным буферным пулом. Использование этой возможности языка доступно только для таблиц, индексов и LOB-полей, размещенных в области хранения с типом SAT-II.
Оператор CREATE TABLE
Для создания таблицы с указанием типа буферного пула используется оператор CREATE TABLE с опцией BUFFER_POOL.
Синтаксис оператора CREATE TABLE следующий:
CREATE TABLE [ owner_name.]table_name ( { column_definition | table_constraint }, ...) [ AREA area_name ] [ ENCRYPT WITH cipher ] [ BUFFER_POOL { PRIMARY | ALTERNATE } ] [ progress_table_attribute_keyword value ] ; CREATE TABLE [ owner_name.]table_name [ (column_name [ NOT NULL] , ... ) ] [ AREA area_name ] [ ENCRYPT WITH cipher ] [BUFFER_POOL { PRIMARY | ALTERNATE } ] AS query_expression ;
Следующий пример демонстрирует создание таблицы в области с типом SAT-II, которая будет использовать Альтернативный буферный пул:Здесь изменения в синтаксисе выделены жирным шрифтом.
CREATE TABLE PUB.tblb2 (fld1 int, fld2 int, fld3 varchar(25)) AREA "TestArea2" BUFFER_POOL ALTERNATE; COMMIT;
Для настройки LOB-поля, которое будет работать с Альтернативным буферным пулом, в операторах CREATE TABLE или ALTER TABLE ADD COLUMN внесены следующие изменения:
{ LVARCHAR | CLOB | LVARBINARY | BLOB } [ ( length ) ] [ AREA areaname ] [ ENCRYPT WITH cipher ] [ BUFFER_POOL { PRIMARY | ALTERNATE } ]
Следующий пример демонстрирует создание таблицы, которая использует первичный буферный пул, но ее LOB-поля будут использовать Альтернативный буферный пул:
CREATE TABLE PUB.tblblob2 (bfld BLOB BUFFER_POOL ALTERNATE, cfld CLOB BUFFER_POOL ALTERNATE, otherfld int) AREA "TestArea2"; COMMIT;
Так же можно использовать BUFFER_POOL для конкретного LOB-поля, размещенного в отдельной области хранения, как показано в следующем примере:
CREATE TABLE tblname (bfld BLOB AREA areaname1 BUFFER_POOL ALTERNATE, cfld CLOB AREA areaname2, otherfld int) AREA areaname;
Оператор CREATE INDEX
Для настройки индекса, который будет использовать Альтернативный буферный пул, в синтаксис оператора CREATE INDEX внесены изменения аналогичные оператору CREATE TABLE. Индекс должен быть размещен в области хранения с типом SAT-II. Изменения в синтаксисе оператора CREATE INDEX следующие:
CREATE [ UNIQUE ] INDEX index_name ON table_name ( { column_name [ ASC | DESC ] } [, ... ] ) [ AREA area_name ] [ ENCRYPT WITH cipher ] [ BUFFER POOL { PRIMARY | ALTERNATE } ] [ PRO_DESCRIPTION value | PRO_ACTIVE {'N'|'n'} ];
Следующий пример демонстрирует создание индекса, который будет использовать Альтернативный буферный пул:
CREATE INDEX idx1 ON PUB.tblb2 (fld1, fld2) AREA "TestArea2" BUFFER_POOL ALTERNATE; COMMIT;
Оператор ALTER TABLE
Оператор ALTER TABLE с параметром SET BUFFER_POOL выполняет изменение типа буферного пула у существующего объекта.
Синтаксис оператора следующий:
ALTER TABLE [ owner_name.]table_name {ADD column-definition |SET progress_table_attribute value |SET [ ENCRYPT WITH cipher | DECRYPT | ENCRYPT REKEY ] |SET BUFFER_POOL { PRIMARY | ALTERNATE } |ALTER [ COLUMN ]column_name { SET DEFAULT value | DROP DEFAULT | SET [NOT] NULL |SET progress_column_attribute value} | SET ENCRYPT WITH cipher | SET DECRYPT | ENCRYPT REKEY | SET BUFFER_POOL { PRIMARY | ALTERNATE } } [COLLATE case_insensitive | case_sensitive] |DROP COLUMN column_name { CASCADE | RESTRICT } |ADD { primary_key_definition | foreign_key_definition | uniqueness_constraint | check_constraint } |ADD CONSTRAINT constraint_name |DROP CONSTRAINT constraint_name [ CASCADE | RESTRICT] |ALTER INDEX index_name SET progress_index_attribute value |ALTER INDEX index_name SET [ ENCRYPT WITH cipher | DECRYPT | ENCRYPT REKEY ] |ALTER INDEX index_name SET BUFFER_POOL { PRIMARY | ALTERNATE } |RENAME {table_name TO new_table_name |COLUMN column_name TO new_column_name |INDEX index_name TO new_index_name } };
Следующий пример демонстрирует изменение типа буферного пула таблицы с Первичного на Альтернативный:
ALTER TABLE pub.customer SET BUFFER_POOL ALTERNATE;
Пример оператора ALTER TABLE, который добавляет два LOB-поля в таблицу с настройкой типа буферного пула, выглядит следующим образом:
ALTER TABLE tblname ADD COLUMN (bfld BLOB AREA areaname1 BUFFER_POOL ALTERNATE, cfld CLOB AREA areaname2 BUFFER_POOL PRIMARY);
Параметр SET BUFFER_POOL в операторе ALTER TABLE может использоваться и для изменения типа буферного пула конкретного индекса:
ALTER TABLE tblname ALTER INDEX idxname SET BUFFER_POOL ALTERNATE;
С помощью этого параметра можно изменять тип буферного пула и у LOB-полей:
ALTER TABLE tblname ALTER COLUMN bfld SET BUFFER_POOL PRIMARY;