СТАТЬЯ |
27.02.01
|
Управление хэш-кластерами и их таблицами
Следующие секции объясняют, как создавать, изменять и удалять хэшированные кластеры и кластеризованные таблицы с помощью команд SQL.
Создание хэш-кластеров и кластеризованных таблиц
Хэш-кластер используется для хранения индивидуальных таблиц или групп кластеризованных таблиц, которые статичны и часто опрашиваются запросами на условия равенства. После того, как создан хэш-кластер, в нем можно создавать таблицы. Хэш-кластер создается с помощью команды SQL CREATE CLUSTER. Например, следующее предложение создает кластер с именем TRIAL_CLUSTER, который используется для хранения таблицы TRIAL, кластеризуемой по столбцу TRIALNO:
CREATE CLUSTER trial_cluster (trialno NUMBER(5,0))
PCTUSED 80
PCTFREE 5
SIZE 2K
HASH IS trialno
HASHKEYS 150;
CREATE TABLE trial (
trialno NUMBER(5,0) PRIMARY KEY,
.)
CLUSTER trial_cluster (trialno);
Управление использованием памяти в хэш-кластере
При создании хэш-кластера важно корректно выбрать ключ кластера и установить параметры HASH IS, SIZE и HASHKEYS так, чтобы оптимизировать производительность и использование памяти. Следующие секции предоставляют рекомендации и примеры по установке этих параметров.
ВЫБОР КЛЮЧА.
Выбор корректного ключа кластера зависит от типа запросов, которые наиболее часто выдаются по кластеризуемым таблицам. Например, рассмотрим таблицу EMP в хэш-кластере. Если запросы часто выбирают строки по номеру сотрудника, то ключом кластера следует сделать столбец EMPNO; если запросы часто выбирают строки по номеру отдела, то ключом кластера должен быть столбец DEPTNO. Для хэш-кластеров, содержащих единственную таблицу, за ключ кластера обычно принимается полный первичный ключ этой таблицы. Хэш-кластер с составным ключом должен использовать внутреннюю хэш-функцию ORACLE.
УСТАНОВКА HASH IS.
Специфицируйте HASH IS только тогда, когда ключ кластера является одиночным столбцом с типом данных NUMBER, и содержит равномерно распределенные целые значения. Если эти условия соблюдены, вы можете распределить строки в кластере так, что каждое уникальное значение ключа кластера хэшируется в уникальное хэш-значение (без коллизий). Если эти условия не соблюдены, опустите эту опцию, так что вы будете использовать внутреннюю хэш-функцию ORACLE.
Для удаления хэш-кластера используйте команду SQL DROP CLUSTER:
DROP CLUSTER emp_dept;
Чтобы удалить таблицу в хэш-кластере, используйте команду SQL DROP TABLE. Соображения по вопросам удаления хэш-кластера и его таблиц такие же, как и для индексированного кластера. См. "Удаление кластеров, кластеризованных таблиц и индексов кластеров".
Хранение таблицы в хэш-кластере является альтернативой хранению той же таблицы вне кластера с индексом. Хэширование полезно в следующих ситуациях:
В большинстве случаев вы должны решить (основываясь на приведенной выше информации), применять ли хэширование или индексирование. Если вы решите использовать индексирование, вам следует рассмотреть, хранить ли таблицу индивидуально или как часть кластера;
Даже если вы решили использовать хэширование, таблица по-прежнему может иметь отдельные индексы по любым столбцам, в том числе по ключу кластера. Для дополнительных рекомендаций обратитесь к секции "Как использовать хэширование"
Разные вопросы управления объектами схемы
Следующие секции рассматривают различные темы, касающиеся сопровождения разнообразных объектов схемы, которые обсуждались в этой главе.
Создание нескольких таблиц и обзоров за одну операцию
Вы можете создать несколько таблиц и обзоров, и назначить привилегии за одну операцию, используя команду SQL CREATE SCHEMA. Команда CREATE SCHEMA полезна тогда, когда вы хотите гарантировать успешное создание всех нужных объектов и грантов за одну операцию; если индивидуальный объект внутри этой операции не может быть создан, все предложение откатывается и аннулируются все его результаты. Например, следующее предложение создает две таблицы и обзор, соединяющий данные из этих двух таблиц:
CREATE SCHEMA AUTHORIZATION scott
CREATE VIEW sales_staff AS
SELECT empno, ename, sal, comm
FROM emp
WHERE deptno = 30
WITH CHECK OPTION CONSTRAINT sales_staff_cnst
CREATE TABLE emp ( | ||
empno ename job mgr hiredate sal comm deptno |
NUMBER(5) PRIMARY KEY, VARCHAR2(15) NOT NULL, VARCHAR2(10), NUMBER(5), DATE DEFAULT (sysdate), NUMBER(7,2), NUMBER(7,2), NUMBER(3,0) NOT NULL CONSTRAINT dept_fkey REFERENCES dept) |
|
CREATE TABLE dept ( | ||
deptno |
NUMBER(3) PRIMARY KEY, |
|
GRANT SELECT ON sales_staff TO human_resources; |
Команда CREATE SCHEMA не поддерживает расширений ORACLE для команд ANSI CREATE TABLE и CREATE VIEW; это касается и фразы STORAGE.
Привилегии, требуемые для создания множественных объектов схемы
Для создания объектов схемы с помощью команды CREATE SCHEMA вы должны иметь необходимые привилегии для каждой включенной операции. Например, для создания нескольких таблиц с помощью команды CREATE SCHEMA вы должны иметь привилегии, необходимые для создания таблиц.
Вы можете переименовывать объекты схемы двумя различными способами: либо удалить и пересоздать объект, либо переименовать его с помощью команды SQL RENAME. Если вы удаляете и пересоздаете объект, все гранты привилегий для этого объекта теряются и должны быть вновь назначены после пересоздания объекта. Альтернативно, для переименования таблицы, обзора, последовательности или личного синонима для таблицы, обзора или последовательности может использоваться команда RENAME. При использовании команды RENAME все гранты, которые были сделаны для объекта, переносятся на новое имя. Например, следующее предложение переименовывает обзор SALES_STAFF:
RENAME sales_staff TO dept_30;
Командой RENAME нельзя переименовать хранимую программную единицу PL/SQL, общий синоним, индекс или кластер. Чтобы переименовать такой объект, вы должны удалить и пересоздать его. Прежде чем переименовывать объект схемы, примите во внимание следующие эффекты этого действия:
Привилегии, требуемые для переименования объекта
Чтобы переименовать объект, вы должны быть его владельцем.Разрешение имен объектов, адресуемых в предложениях SQL
Имя объекта в предложении SQL имеет следующую общую форму:
[схема.]имя[@базаданных]
Примеры:
emp
scott.emp
scott.emp@personnel
При подключении пользователя к базе данных устанавливается сессия. Имена объектов разрешаются по отношению к текущей сессии пользователя. Имя текущего пользователя считается умалчиваемым именем схемы, а база данных, к которой подключен пользователь - умалчиваемой базой данных. ORACLE имеет отдельные пространства имен для различных классов объектов. Все объекты в одном и том же пространстве имен должны иметь различающиеся имена, но два объекта, принадлежащих разным пространствам имен, могут иметь одинаковые имена.
Таблицы, обзоры, снимки, последовательности, синонимы, процедуры, функции и пакеты все принадлежат одному пространству имен. Триггеры, индексы и кластеры являются объектами разных классов, и каждый такой класс принадлежит собственному индивидуальному пространству имен. В частности, могут существовать таблица, триггер и индекс с одним и тем же именем SCOTT.EMP. Базируясь на контексте, в котором встречено имя объекта, ORACLE просматривает соответствующее пространство имен, когда разрешает ссылку на объект. Например, в предложении DROP CLUSTER test ORACLE знает, что имя TEST следует отыскивать в пространстве имен кластеров. Вместо того чтобы явно поставлять имя объекта, вы можете также обращаться к объекту через синоним. Имя личного синонима имеет такой же синтаксис, что и обычное имя объекта. Общий синоним неявно принадлежит схеме PUBLIC, но пользователи могут и явно квалифицировать такой синоним схемой PUBLIC.
Синонимы могут использоваться для ссылок лишь на объекты, принадлежащие тому же пространству имен, что и таблицы. Из-за возможности применения синонимов, при разрешении имен в контексте, требующем объекта в пространстве имен таблиц, применяются следующие правила:
Имя ищется в пространстве имен для таблиц.
Когда глобальные имена объектов используются в распределенной базе данных (либо явно, либо косвенно через синоним), локальный ORACLE разрешает эти ссылки локально; например, он разрешает синоним как глобальное имя объекта удаленной таблицы. Частично разрешенное предложение передается удаленной базе данных, и удаленный ORACLE завершает разрешение имени объекта. Обратитесь к документу ORACLE7 Server Concepts Manual за полным описанием разрешения имен в распределенной базе данных.
Вывод информации об объектах схемы
Словарь данных предлагает много обзоров, предоставляющих информацию об объектах схем, которые были описаны в этой главе. Следующий список суммирует обзоры, связанные с объектами схем:
Пример 1: Вывод объектов схемы по типам Следующий запрос выдает все объекты, принадлежащие пользователю, который выдает этот запрос:
SELECT object_name, object_type
FROM user_objects;
Результаты этого запроса могли бы выглядеть следующим образом:
OBJECT_NAME | OBJECT_TYPE |
|
|
EMP_DEPT | CLUSTER |
EMP | TABLE |
DEPT | TABLE |
EMP_DEPT_INDEX | INDEX |
PUBLIC_EMP | SYNONYM |
EMP_MGR | VIEW |
Пример 2: Вывод информации о столбцах Информацию о столбцах, такую как имя, тип данных, длина, точность, масштаб и умалчиваемые значения, можно получить с помощью обзоров, имеющих суффикс _COLUMNS. Например, следующий запрос выдает все умалчиваемые значения столбцов для таблиц EMP и DEPT:
SELECT |
table_name, column_name, data_default |
При предложениях, приведенных в примерах в начале этой секции, результаты этого запроса могли бы выглядеть следующим образом:
TABLE_NAME | COLUMN_NAME | DATA_DEFAULT |
|
|
|
DEPT | DEPTNO | |
DEPT | DNAME | |
DEPT | LOC | ('NEW YORK') |
EMP | EMPNO | |
EMP | ENAME | |
EMP | JOB | |
EMP | MGR | |
EMP | HIREDATE | (sysdate) |
EMP | SAL | |
EMP | COMM | |
EMP | DEPTNO |
Заметьте, что не для всех столбцов определены пользовательские умолчания. Для таких столбцов умалчиваемым значением автоматически считается NULL.
Пример 3: Вывод зависимостей для обзоров и синонимов Когда вы создаете обзор или синоним, он опирается на нижележащий базовый объект. Обзоры словаря данных с суффиксом _DEPENDENCIES можно использовать для получения информации о зависимостях для обзора, а обзоры словаря данных с суффиксом _SYNONYMS - для показа базового объекта синонима. Например, следующий запрос выдает базовые объекты для синонимов, созданных пользователем JWARD:
SELECT |
table_owner, table_name |
Результаты этого запроса могли бы выглядеть следующим образом:
TABLE_OWNER SCOTT DEPT |
TABLE_NAME SCOTT EMP |
Дополнительную информацию Вы можете получить в компании Interface Ltd.
Отправить
ссылку на страницу по e-mail
Обсудить на форуме Oracle
Interface Ltd. Отправить E-Mail http://www.interface.ru |
|
Ваши замечания и предложения
отправляйте автору По техническим вопросам обращайтесь к вебмастеру Документ опубликован: 15.08.01 |