СТАТЬЯ
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
dname
loc

NUMBER(3) PRIMARY KEY,
VARCHAR2(15),
VARCHAR2(25))

  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, общий синоним, индекс или кластер. Чтобы переименовать такой объект, вы должны удалить и пересоздать его. Прежде чем переименовывать объект схемы, примите во внимание следующие эффекты этого действия:

  • Все обзоры и программные единицы PL/SQL, зависимые от переименовываемого объекта, становятся недействительными (должны быть перекомпилированы перед дальнейшим использованием).

    Привилегии, требуемые для переименования объекта

    Чтобы переименовать объект, вы должны быть его владельцем.  

    Разрешение имен объектов, адресуемых в предложениях SQL

    Имя объекта в предложении SQL имеет следующую общую форму:

    [схема.]имя[@базаданных]

    Примеры:

    emp
    scott.emp
    scott.emp@personnel

    При подключении пользователя к базе данных устанавливается сессия. Имена объектов разрешаются по отношению к текущей сессии пользователя. Имя текущего пользователя считается умалчиваемым именем схемы, а база данных, к которой подключен пользователь - умалчиваемой базой данных. ORACLE имеет отдельные пространства имен для различных классов объектов. Все объекты в одном и том же пространстве имен должны иметь различающиеся имена, но два объекта, принадлежащих разным пространствам имен, могут иметь одинаковые имена.

    Таблицы, обзоры, снимки, последовательности, синонимы, процедуры, функции и пакеты все принадлежат одному пространству имен. Триггеры, индексы и кластеры являются объектами разных классов, и каждый такой класс принадлежит собственному индивидуальному пространству имен. В частности, могут существовать таблица, триггер и индекс с одним и тем же именем SCOTT.EMP. Базируясь на контексте, в котором встречено имя объекта, ORACLE просматривает соответствующее пространство имен, когда разрешает ссылку на объект. Например, в предложении DROP CLUSTER test ORACLE знает, что имя TEST следует отыскивать в пространстве имен кластеров. Вместо того чтобы явно поставлять имя объекта, вы можете также обращаться к объекту через синоним. Имя личного синонима имеет такой же синтаксис, что и обычное имя объекта. Общий синоним неявно принадлежит схеме PUBLIC, но пользователи могут и явно квалифицировать такой синоним схемой PUBLIC.

    Синонимы могут использоваться для ссылок лишь на объекты, принадлежащие тому же пространству имен, что и таблицы. Из-за возможности применения синонимов, при разрешении имен в контексте, требующем объекта в пространстве имен таблиц, применяются следующие правила:

    Имя ищется в пространстве имен для таблиц.

    1. Если имя разрешается в объект, не являющийся синонимом, то дальнейшего разрешения не требуется.
    2. Если имя разрешается в личный синоним, то оно заменяется определением синонима, и ORACLE возвращается к шагу 1.
    3. Если имя было изначально квалифицировано схемой, возвращается ошибка; в противном случае проверяется, не является ли имя общим синонимом.
    4. Если имя не является общим синонимом, возвращается ошибка; в противном случае имя заменяется определением общего синонима, и ORACLE возвращается к шагу 1.

    Когда глобальные имена объектов используются в распределенной базе данных (либо явно, либо косвенно через синоним), локальный 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
    FROM
    WHERE

    table_name, column_name, data_default
    user_tab_columns
    table_name = 'DEPT' OR table_name = 'EMP';

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

    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
    FROM
    WHERE

    table_owner, table_name
    all_synonyms
    owner = 'JWARD';

    Результаты этого запроса могли бы выглядеть следующим образом:

    TABLE_OWNER


    SCOTT
    DEPT

    TABLE_NAME


    SCOTT
    EMP

    предыдущая часть | содержание | следующая часть

    Дополнительную информацию Вы можете получить в компании Interface Ltd.

    Отправить ссылку на страницу по e-mail
    Обсудить на форуме Oracle


    Interface Ltd.
    Тel/Fax: +7(095) 105-0049 (многоканальный)
    Отправить E-Mail
    http://www.interface.ru
    Ваши замечания и предложения отправляйте автору
    По техническим вопросам обращайтесь к вебмастеру
    Документ опубликован: 15.08.01