Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Oracle - MS Server / OracleМП / Lab4 / отчёт.docx
Скачиваний:
39
Добавлен:
17.04.2018
Размер:
42.24 Кб
Скачать

Локальные индексы

Локально секционированные индексы, в отличие от глобально секционированных индексов, имею отношение «один к одному» с разделами таблицы. Локально секционированные индексы можно создавать в соответствии с разделами и даже подразделами. База данных конструирует индекс таким образом, чтобы он был секционирован так же, как и его таблица. При каждой модификации раздела таблицы база автоматически сопровождает это соответствующей модификацией раздела индекса. Это, наверное, самое большое преимущество использования локально секционированных индексов – Oracle автоматически перестраивает их всегда, когда уничтожается раздел или над ним выполняется какая-то другая операция DDL.

Ниже приведен простой пример создания локально секционированного индекса на секционированной таблице:

SQL> CREATE INDEX ticket_no_idx ON

Ticket_sales(ticket_no) LOCAL

TABLESPACE localidx_01;

Невидимые индексы

По умолчанию оптимизатор «видит» все индексы. Тем не менее, можно создать невидимый индекс, который оптимизатор не обнаруживает и не принимает во внимание при создании плана выполнения оператора. Невидимый индекс можно применять в качестве временного индекса для определенных операций или его тестирования перед тем, как сделать его «официальным». Вдобавок, иногда объявления индекса невидимым можно использовать в качестве альтернативы уничтожению индекса или объявлению его недоступным. Сделать индекс невидимым можно временно, чтобы протестировать эффект от его уничтожения.

С помощью команды ALTER INDEX можно превратить существующий индекс в невидимый.

ALTER INDEX test_idx INVISIBLE;

И обратная команда

ALTER INDEX test_idx VISIBLE;

Приведенный ниже запрос к представлению DBA_INDEXES показывает состояние видимости индекса:

SELECT index_name, visibility

FROM user_indexes

WHERE index_name =’indx1’;

  1. Какие ограничения целостности и как создаются в СУБД Oracle?

Существует следующие типы ограничений:

NOT NULL UNIQUE CHECK PRIMARY KEY FOREIGN KEY

Способ определение на уровне столбцов: column [CONSTRAINT constraintname] constraint_type,

Способ определения на уровне таблицы: column, ...[CONSTRAINT constraint_name] constraint_type (column, ...),

  1. Как запретить, разрешить, изменить или удалить созданные ограничения целостности?

С помощью операторов CREATE TABLE или ALTER TABLE можно задавать состояние каждого Ограничения на уровне таблицы, используя следующие выражения:

  • ENABLE гарантирует удовлетворение всех входных данных Ограничению;

  • DISABLE позволяет входным данным не соответствовать Ограничению;

  • VALIDATE гарантирует, что все уже имеющиеся в таблице данные соответствуют Ограничению;

  • NOVALIDATE позволяет уже имеющимся в таблице данным не соответствовать Ограничению;

Синтаксис удаления ограничения целостности

    

ALTER TABLE table DROP PRIMARY KEY | UNIQUE (column) | CONSTRAINT constraint [CASCADE];

Элементы синтаксиса:

  • table имя таблицы;

  • column имя столбца, на который действует ограничение;

  • constraint имя ограничения.

Когда удалено ограничение целостности, это ограничение больше не применяется принудительно сервером Oracle и больше не доступно в словаре данных.

  1. Когда целесообразно дополнительно предусмотреть проверку ограничений целостности при программировании пользовательского интерфейса?

  2. Как создать ограничения первичного и внешнего ключей?

CONSTRAINT PK_Flat PRIMARY KEY (Flat),

CONSTRAINT FK_Kadastr FOREIGN KEY (Kadastr) REFERENCES Building (Kadastr

  1. Как формируется внешнее соединение таблиц и как оно задается на языке SQL СУБД Oracle?

Задается через внешний ключ

  1. Какие операторы объединения предусмотрены в языке SQL СУБД Oracle и как они выполняются?

JOIN – соединяет

UNION – объединяет

UNION ALL – объединяет с повторениями

Оператор INTERSECT возвращает строки, которые являются общими для обоих запросов.

Оператор MINUS возвращает все уникальные строки, выбранные первым запросом, но не существующие в наборе результатов второго запроса.

  1. Как перенести данные из одних таблиц в другую?

insert into table1 (column1, ....)

select column2, ... from table2

  1. Как создать новую таблицу на основе уже существующей?

Данные тоже копируются

create table as select * from t

Копируется только конструкция таблицы

create table t_new as select * from t where 1=0;

  1. Как изменить структуру таблицы?

ALTER TABLE MyTable ADD CI NUMBER(4);  ALTER TABLE MyTable DROP COLUMN C1;

Первый оператор добавляет столбец с именем С1 и присваивает ему тип числа длиной четыре символа. Второй оператор удаляет только что созданный столбец. 

ALTER TABLE Т1 MODIFY C1 NOT NULL;

Теперь столбец C1 будет обязательно требовать присвоения значения.

  1. Как создать, использовать и удалить представление?

Создание:

CREATE VIEW Londonstaff

AS SELECT *

FROM Salespeople

WHERE city = 'London';

Используется как обычная таблица:

SELECT *

FROM Londonstaff;

Пример модификации:

UPDATE Salesown

SET city = 'Palo Alto'

WHERE snum = 1004;

Удаеление:

DROP VIEW < view name >

  1. Как создать, использовать и модифицировать последовательность?

CREATE SEQUENCE

Синтаксис команды CREATE SEQUENCE

Синтаксис команды CREATE SEQUENCE

Основные ключевые слова и параметры CREATE SEQUENCE:

  • schema —схема, в которой создается последовательность. Если schema опущена, Oracle создает последовательность в схеме пользователя.

  • sequence — имя создаваемой последовательности

  • start with  позволяет создателю последовательности указать первое генерируемое ею значение. После создания последовательность генерирует указанное в  start with значение при первой ссылке на ее виртуальный столбец NEXTVAL

  • increment by n — определяет приращение последовательности при каждой ссылке на виртуальный столбецNEXVAL. Если значение не указано явно, по умолчанию устанавливается 1. Для возрастающих последовательностей устанавливается положительное n, для убывающих, или последовательностей с обратным отсчетом — отрицательное

  • minvalue — определяет минимальное значение, создаваемое последовательностью. Если оно не указано, Oracle применяет значение по умолчанию NOMINVALUE

  • nominvalue — указывает, что минимальное значение равно 1, если последовательность возрастает, или -1026, если последовательность убывает

  • maxvalue — определяет максимальное значение, создаваемое последовательностью. Если оно не указано, Oracle применяет значение по умолчанию NOMAXVALUE

  • nomaxvalue — указывает, что максимальное значение равно 1027, если последовательность возрастает, или -1, если последовательность убывает. По умолчанию принимается NOMAXVALUE

  • cycle — позволяет последовательности повторно использовать созданные значения при достиженииMAXVALUE или MINVALUE. Т.е. последовательность будет продолжать генерировать значения после достижения   своего максимума или минимума. Возрастающая последовательность после достижения своего максимума генерирует свой минимум. Убывающая последовательность после достижения своего минимума генерирует свой максимум. Если циклический режим нежелателен или не установлен явным образом, Oracle применяет значение по умолчанию – NOCYCLE. Указывать CYCLE вместе с NOMAXVALUE или NOMINVALUEнельзя. Если нужна циклическая последовательность, необходимо указать MAXVALUE для возрастающей последовательности или MINVALUE – для убывающей

  • nocycle — указывает, что последовательность не может продолжать генерировать значения после достижения своего максимума или минимума

  • cache n — указывает, сколько значений последовательности ORACLE распределяет заранее и поддерживает в памяти для быстрого доступа. Минимальное значение этого параметра равно 2. Для циклических последовательностей это значение должно быть меньше, чем количество значений в цикле. Если кэширование нежелательно или не установлено явным образом, Oracle применяет значение по умолчанию – 20 значений.

  • order — гарантирует, что номера последовательности генерируются в порядке запросов. Эта опция может использоваться, к примеру, когда номера последовательности предстают в качестве отметок времени. Гарантирование порядка обычно не существенно для тех последовательностей, которые используются для генерации первичных ключей. Если упорядочение нежелательно или не установлено явным образом, Oracle применяет значение по умолчанию NOORDER

  • noorder — не гарантирует, что номера последовательности генерируются в порядке запросов

Пример 1 CREATE SEQUENCE Создание последовательности sequence_1.s Первое обращение к этой последовательности возвратит 1. Второе обращение возвратит 11. Каждое следующее обращение возвратит значение, на 10 большее предыдущего:

  • CREATE SEQUENCE sequence_1 INCREMENT BY 10;

Пример 2 CREATE SEQUENCE Создание последовательности sequence_2. Последовательность убывающая, циклическая, при достижении нуля последовательность вновь обращается к старшему числу. Такой последовательностью удобно пользоваться в тех программах, где до наступления некоторого события должен быть выполнен обратный отсчет:

CREATE SEQUENCE sequence_2 START WITH 20 INCREMENT BY –1 MAXVALUE 20 MINVALUE 0 CYCLE ORDER CACHE 2;

После создания последовательности к ней можно обращаться через псевдостолбцы CURRVAL (возвращает текущее значение последовательности) и NEXTVAL (выполняет приращение последовательности и возвращает ее следующее значение). Текущее и следующее значения последовательности пользователи базы данных получают, выполняя команду SELECT. Последовательности – не таблицы, а простые объекты, генерирующие целые числа с помощью виртуальных столбцов, поэтому нужна общедоступная таблица словаря данных DUAL, из которой будут извлекаться данные виртуальных столбцов.

Первое обращение к NEXTVAL возвращает начальное значение последовательности. Последующие обращения кNEXTVAL изменяют значение последовательности на приращение, которое было определено, и возвращают новое значение. Любое обращение к CURRVAL всегда возвращает текущее значение последовательности, а именно, то значение, которое было возвращено последним обращением к NEXTVAL. Прежде чем обращаться кCURRVAL в текущем сеансе работы, необходимо хотя бы один раз выполнить обращение к NEXTVAL.

В одном предложении SQL приращение последовательности может быть выполнено только один раз. Если предложение содержит несколько обращений к NEXTVAL для одной и той же последовательности, то ORACLEнаращивает последовательность один раз, и возвращает одно и то же значение для всех вхождений NEXTVAL. Если предложение содержит обращения как к CURRVAL, так и к NEXTVAL, то ORACLE наращивает последовательность и возвращает одно и то же значение как для CURRVAL, так и для NEXTVAL, независимо от того, в каком порядке они встречаются в предложении.

К одной и той же последовательности могут обращаться одновременно несколько пользователей, без какого-либо ожидания или блокировки:

< имя последовательности >.CURRVAL

< имя последовательности >.NEXTVAL

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

<имя схемы>.<имя последовательности >.CURRVAL

<имя схемы>.<имя последовательности >.NEXTVAL

Значения CURRVAL и NEXTVAL используются в следующих местах:

  • в списке SELECT предложения SELECT

  • в фразе VALUES предложения INSERT

  • в фразе SET предложения UPDATE.

Нельзя использовать значения CURRVAL и NEXTVAL в следующих местах:

  • в подзапросе

  • в предложении SELECT с оператором DISTINCT

  • в предложении SELECT с фразой GROUP BY или ORDER BY

  • в предложении SELECT, объединенном с другим предложением SELECT оператором множеств UNION

  • в фразе WHERE предложения SELECT

  • в умалчиваемом (DEFAULT) значении столбца в предложении CREATE TABLE или ALTER TABLE

  • в условии ограничения CHECK.

ALTER SEQUENCE. Пример 6. Любой параметр последовательности можно изменить командой ALTER SEQUENCE. Новое значение вступает в силу немедленно. Все параметры последовательности, не указанные в команде ALTER SEQUENCE, остаются без изменений:

ALTER SEQUENCE sequence_2

INCREMENT BY –4;

Когда последовательность больше не нужна, ее можно удалить. Для этого администратор базы данных или владелец последовательности должен выполнить команду DROP SEQUENCE. В результате виртуальные столбцы последовательности NEXVAL и CURRVAL  — переводятся в разряд неиспользуемых. Но, если последовательность применялась для генерации значений первичных ключей, созданные ею значения останутся в базе данных. Каскадного удаления значений, сгенерированных последовательностью, при ее удалении не происходит.

DROP SEQUENCE. Пример 7. Удаление последовательности SEQUENCE:

DROP SEQUENCE sequence_2

  1. Для чего предназначен синоним? Как его создать и удалить?

Синонимы являются объектами базы данных, которые позволяют Вам называть таблицу другим именем.

Упростите доступ к объектам, создавая синонимы (другие имена для объекта). С синонимами Вы можете:

  • Создать более простую ссылку на таблицу, которая принадлежит другому пользователю

  • Сократить длинные имена объектов

CREATE [PUBLIC] SYNONYM synonym

FOR object;

В этом синтаксисе:

  • PUBLIC Создает синоним, который доступен для всех пользователей

  • synonym Имя синонима, который будет создаваться

  • object Идентифицирует объект, для которого создается синоним

Удаление синонима:

DROP SYNONYM synonym;

 Только администратор базы данных может удалить общедоступный синоним.

    

DROP PUBLIC SYNONYM dept;

Соседние файлы в папке Lab4