Использование SQL для управления объектами базы данных
Администратор базы данных имеет возможность применять OpenEdge SQL Data Definition Language для создания и управления объектами базы данных, предназначенными для работы с альтернативным буферным пулом. Эта функция языка применима исключительно к таблицам, индексам и 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
;
В представленном ниже тексте изменения в синтаксисе выделены полужирным шрифтом.
Следующий пример иллюстрирует процесс создания таблицы и назначения ей требования использования альтернативного буферного пула:
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 } ]
При определении параметра BUFFER_POOL, система управления базами данных OpenEdge SQL создает новое поле типа 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; COMMIT;
Оператор CREATE INDEX
Оператор CREATE INDEX также может быть использован для назначения альтернативного буферного пула. Для того чтобы определить альтернативный буферный пул для индекса, он должен быть размещен в области хранения 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.
CREATE INDEX idx1 ON PUB.tblb2 (fld1, fld2) AREA "TestArea2" BUFFER_POOL ALTERNATE; COMMIT;
Оператор ALTER TABLE
Оператор ALTER TABLE с ключевыми словами SET BUFFER_POOL позволяет модифицировать тип буферного пула для определенного объекта. Он может быть применен для перемещения таблицы, индекса или поля LOB из первичного буферного пула в альтернативный пул или наоборот.
Синтаксис оператора ALTER TABLE имеет следующий формат:
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. Одно из этих полей будет размещено в области SAT-II и будет использовать альтернативный буферный пул.
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;
