Использование 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;