Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кожин / KKR_BILETY_OTVETY.doc
Скачиваний:
18
Добавлен:
20.03.2016
Размер:
261.12 Кб
Скачать

2. Определение ограничений целостности - unique, primary key, not null, foreign key, check. Особенности использования ограничений целостности.

ограничение NOT NULL. Столбец не может содержать значения null.

ограничение UNIQUE. Столбец или столбцы не могут содержать дублирующихся значений.

ограничение PRIMARY KEY. Столбец или столбцы, входящие в основной ключ, не могут дублироваться. Ограничение PRIMARY KEY включает в себя ограни­чение UNIQUE, но обратное не верно. Таблица может содержать только один столбец, определенный как PRIMARY KEY и несколько столбцов, определенных как UNIQUE. Кроме того, PRIMARY KEY включает в себя ограничение NOT NULL.

ограничение FOREIGN KEY. Столбец или столбцы, составляющие внешний ключ, должны ссылаться на основной ключ указанной таблицы.

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

ORACLE полностью поддерживает ограничение NOT NULL. Текущая фраза WITH CHECK OPTION из оператора CREATE VIEW поддерживает дополнительные формы относительной целостности. Для отработки ограничения UNIQUE в настоящее время используются индексы.

Ограничения целостности проверяются в момент вставки и или изменении данных в таблицах. Ограничения целостности можно включать или выключать.

Выключение ограничений осуществляется для вставки большого количества данных в таблицы. При последующем включении СУБД проверяет записи с таблице на соответствие ограничений. Будут приняты только те строки таблицы, которые соответствуют ограничениям.

ВАРІАНТ 7

1. Алгебра Кодда и реляционное исчисление как теоретическая основа базы данных.

Основная идея реляционной алгебры состоит в том, что коль скоро отношения являются множествами, то средства манипулирования отношениями могут базироваться на традиционных теоретико-множественных операциях, дополненных некоторыми специальными операциями, специфичными для баз данных.

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

  • объединения отношений;

  • пересечения отношений;

  • взятия разности отношений;

  • прямого произведения отношений.

Специальные реляционные операции включают:

  • ограничение отношения;

  • проекцию отношения;

  • соединение отношений;

  • деление отношений.

Кроме того, в состав алгебры включается операция присваивания, позволяющая сохранить в базе данных результаты вычисления алгебраических выражений, и операция переименования атрибутов, дающая возможность корректно сформировать заголовок (схему) результирующего отношения.

  • При выполнении операции объединения двух отношений производится отношение, включающее все кортежи, входящие хотя бы в одно из отношений-операндов.

  • Операция пересечения двух отношений производит отношение, включающее все кортежи, входящие в оба отношения-операнда.

  • Отношение, являющееся разностью двух отношений включает все кортежи, входящие в отношение - первый операнд, такие, что ни один из них не входит в отношение, являющееся вторым операндом.

  • При выполнении прямого произведения двух отношений производится отношение, кортежи которого являются конкатенацией (сцеплением) кортежей первого и второго операндов.

  • Результатом ограничения отношения по некоторому условию является отношение, включающее кортежи отношения-операнда, удовлетворяющее этому условию.

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

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

  • У операции реляционного деления два операнда - бинарное и унарное отношения. Результирующее отношение состоит из одноатрибутных кортежей, включающих значения первого атрибута кортежей первого операнда таких, что множество значений второго атрибута (при фиксированном значении первого атрибута) совпадает со множеством значений второго операнда.

  • Операция переименования производит отношение, тело которого совпадает с телом операнда, но имена атрибутов изменены.

  • Операция присваивания позволяет сохранить результат вычисления реляционного выражения в существующем отношении БД.

2. Операция вставки данных, вставка данных с подзапросом (INSERT).

Операция удаления кортежей. Ограничения на удаление (ограничение целостности данных). Операция замены данных в таблицах (UPDATE).

INSERT INTO[user.]table [column [,column] ...)]

VALUES (value [,value]...) | query

user имя пользователя - владельца таблицы.

table имя существующей таблицы, обзора или синонима. По умолчанию -пользователь, выдавший команду INSERT.

column столбец таблицы или обзора.

value значение, соответствующее по позиции столбцу из списка столб­цов. value может быть выражени­ем. Если value не NULL, оно должно соответствовать по столб­цу по типу данных.

query оператор SELECT, возвращающий столько значений, сколько указа­но в списке столбцов. Не может содержать фраз ORDER BY и UPDATE.

Оператор INSERT, применяемый с фразой VALUES, всегда добавляет не более одной строки. Полям, определяемым columns, назначаются специфицированные значения. Столбцы, опущенные в списке columns, будут содержать значения NULL и, следо­вательно, не могут быть описаны NOT NULL.

Оператор INSERT, в котором используется запрос (query) вместо фразы VALUES, может добавлять бо­лее одной строки (столько, сколько возвращено запросом). После того, как запрос выполнится, его столбцы сопоставляются по позиции со столбцами, специфицированными после ключевого слова INSERT (или всем, если ничего не специфицировано). Зап­рос может ссылаться на ту же таблицу, в которую строки вставляются.

Значение обязательно должно быть сопоставлено всем столбцам, определенным как NOT NULL.

Если в скобках указывается список столбцов, им должны быть поставлены в соответствие значения; если нет, то значения должны быть обеспечены всем столбцам. Если список столбцов опущен, значения должны указываться в порядке внутреннего располо­жения столбцов таблицы. Эти позиции можно опреде­лить, запросив обзор словаря данных USER_TAB_COLUMNS.

Если подзапрос внутри оператора INSERT не возвра­щает строк, в таблицу не будет добавлено ни одной строки.

Примеры Для вставки новой строки в таблицу DEPT введите:

INSERT INTO DEPT VALUES(50, 'PRODUCTION', 'SAN FRANCISCO')

Для вставки строки с шестью столбцами в таблицу EMP, включая значение NULL и числовое в научной нотации введите:

INSERT INTO ENP (EMPNO,ENAME,JOB,SAL,COMM,DEPTNO) VALUES(7890,'JINKS','CLERK',1.2E3,NULL,40)

Для копирования менеджеров и президентов: а также сотрудников, чьи комиссионные превышают 25%, в таблицу BONUS, введите:

INSERT INTO BONUS

SELECT ENAME, JOB, SAL, COMM

FROM EMP

WHERE COMM < 25 * SAL

OR JOB IN ('PRESIDENT','MANAGER')

DELETE [FROM] [user.]table [alias] [WHERE condition]

user владелец таблицы.

table имя таблицы или обзора, из которых удаляются строки.

alias алиас, назначенный таблице, который используется в общем слу­чае - при коррелированных запросах внутри оператора DELETE.

condition условие должно при­водить к результату TRUE или FALSE.

Если отсутствует фраза WHERE, из таблицы удаляют­ся все строки. Если же эта фраза используется, удаляются строки, для которых условие condition дает TRUE. Условие может ссылаться на адресуемую таблицу или включать в себя коррелированный зап­рос.

Все удаляемые строки и соответствующие индексы освобождают занимаемую ими память.

UPDATE [user.]table [alias]

SET column = expr [,column = expr]...

[WHERE condition]

или

UPDATE [user.]table [alias]

SET (column [,column]...) = (query)

[,(column [,column]...) = (query) ] ... [WHERE condition]

user имя владельца таблицы.

table имя существующей таблицы, к которой у Вас есть доступ.

alias используется для переименования таблицы для ссылок в последующих фразах оператора.

column столбец, принадлежащий таблице. Если он единственный, круглые скобки не обязательны.

query оператор SELECT, не содержащий фраз ORDER BY и FOR UPDATE, обычно коррелированный с подле­жащей модификации таблицей.

condition правильное условие, имеющее значение TRUE или FALSE.

Фраза SET определяет столбцы, подлежащие измене­нию и заносимые в них значения.

Фраза WHERE определяет строки, чьи значения долж­ны изменяться; если она отсутствует, изменению подлежат все строки таблицы. Для каждой строки, удовлетворяющей условию WHERE столбцы слева от знака равенства получают значения выражений спра­ва от равенства. Выражения вычисляются только для строк подлежащих модификации.

Если фраза SET содержит запрос, последний должен возвращать в точности одну строку для каждой из­меняемой строки. Каждое значение из результата запроса назначается соответственно столбцу из заключенных в круглые скобки. Если запрос не возвращает строк, присваемое (т.е. SET value=query) значение будет NULL. Подзапросы мо­гут выбирать строки из таблицы, которая меняется.

Во фразе SET можно смешивать значения, возвращае­мые подзапросами и назначаемые выражениями.

Оператор UPDATE автоматически выдает исключитель­ные блокировки для строк или таблиц, подлежащих изменению. Эти блокировки освобождаются после вы­дачи команд COMMIT или ROLLBACK.

ВАРІАНТ 8

1. Общая модель системы управления распределенными базами данных.

Локальные и глобальные данные, соединения баз данных.

Фрагментация данных - горизонтальное и вертикальное разбиение базы данных. Распределенные запросы.

Для задания горизонтального разделения отношений в SQL была введена конструкция вида

DISTRIBUTE TABLE <table-name> HORIZONTALLY INTO

<name> WHERE <predicate> IN SEGMENT <segment-name site>

.

.

<name> WHERE <predicate> IN SEGMENT <segment-name site>

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

Вертикальное разделение производилось с помощью оператора

DISTRIBUTE TABLE <table-name> VERTICALLY INTO

<name> WHERE <column-name-list> IN SEGMENT <segment-name site>

.

.

<name> WHERE <column-name-list> IN SEGMENT <segment-name site>

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

Горизонтальное и вертикальное разделение отношений реально не используются в System R*, хотя очевидно, что выполнение собственно оператора DISTRIBUTE никаких технических трудностей не вызывает. Трудности возникают при обеспечении согласованности разделов (смотри ниже). Кроме того, разделенные отношения очень трудно использовать. В соответствии с идеологией системы учет наличия разделов отношения в разных узлах сети должен производить оптимизатор, т.е. количество потенциально возможных планов выполнения запросов, которые должны оцениваться оптимизатором, еще более возрастает. При том, что в распределенной системе число возможных планов и так очень велико, и оптимизатор работает на пределе сложности, разумным образом использовать разделенные отношения невозможно.

Для задания требования поддержки копий отношения в нескольких узлах сети предлагалось использовать новую конструкцию SQL

DISTRIBUTE TABLE <table-name> REPLICATED INTO

<name> IN SEGMENT <segment-name site>

.

.

<name> IN SEGMENT <segment-name site>

При выполнении такого предложения должна была производиться рассылка копий указанного отношения для хранения в именованных сегментах указанных узлов сети. Система должна автоматически поддерживать согласованность копий.

Как и в случае разделенных отношений, кроме существенных проблем поддержания согласованности копий, проблемой является и разумное использование копий, наличие которых должно было бы учитываться оптимизатором.

Создание мгновенного снимка состояния баз данных в соответствии с заданным запросом на выборку должно было производиться с использованием новой конструкции SQL.

DEFINE SNAPSHOT <snapshot-name> (<attribute-list>)

AS <query>

REFRESHED EVERY <period>

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

Можно обновить мгновенный снимок, не дожидаясь истечения временного интервала, указанного в определении, путем выполнения предложения REFRESH SNAPSHOT <snapshot-name>.

Создание связи из локальной базы данных с пользо­вателем в удаленной базе. Межбазовая связь может быть как с базой данных ORACLE, так и нет, напри­мер - DB2 фирмы IBM.

Необходимо иметь доступ к имени пользователя в удаленной базе данных. Межбазовые связи типа PUBLIC может делать только пользователь с приви­легией DBA. И на локальной, и на удаленной базе данных должно быть инсталировано программное обеспечение SQL*Net.

CREATE [PUBLIC] DATABASE LINK link

[CONNECT TO user IDENTIFIED BY password]

USING 'connect_string'

PUBLIC. Если опция PUBLIC опущена, создается личная связь (доступная только пользователю, ее создав­шего). Если же эта опция специфицирована, связь становится доступной всем пользователям за исключением тех, кто создал лич­ную связь с тем же именем.

link имя, которое дается создаваемой связи.

user,password действительное имя пользователя и пароль в специфицированной удаленной базе данных.

connect_string спецификация удаленной базы дан­ных, доступной через SQL*Net.

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

Если фраза, содержащая имя пользователя и пароль, отсутствует, будет использоваться имя и пароль текущего пользователя. Например, если SCOTT вы­даст команду создания связи и не задаст пользова­теля и пароль, ORACLE будет использовать для дос­тупа к удаленной базе данных имя пользователя SCOTT и его пароль.

Удаленные таблицы специфицируются добавлением к таблице имени связи (@linkname) во фразе FROM оператора SELECT.

Запросы и подзапросы, выполняемые через межбазо­вую связь, подчиняются следующим ограничениям:

* Количество межбазовых связей, которые можно использовать в одном запросе, в большинстве систем ограничиваются четырьмя. Этот предел можно расширить, увеличив значение параметра OPEN_LINKS файла INIT.ORA.

* Через связь не могут быть выбраны столбцы типа LONG.

В древовидных структурах (используя фразу CONNECT BY):

* оператор PRIOR не может применяться во фразах, отличных от CONNECT BY

* фраза START WITH не может содержать под­запросов

* ни фраза CONNECT BY, ни START WITH не может содержать функции USERENV('ENTRYID'), ROWNUM и определенные пользователем функции.

Пример. Чтобы определить межбазовую связь BOSTON, которая ссылается на пользователя SCOTT с паролем TIGER в базе D:BOSTON-MFG, введите:

CREATE DATABASE LINK BOSTON

CONNECT TO SCOTT IDENTIFIED BY TIGER

USING 'D:BOSTON-MFG'

После создания межбазовой связи можно запра­шивать таблицы пользователя SCOTT следующим обра­зом:

SELECT * FROM EMP@BOSTON

Предыдущий запрос будет соединяться с пользователем SCOTT в удаленной базе и затем зап­рашивать таблицу DEPT пользователя ADAMS.

Для скрытия факта, что таблица EMP пользователя SCOTT находится на удаленной базе, можно восполь­зоваться синонимом. Следующий оператор приведет к тому, что дальнейшие запросы из таблицы EMP будут обращаться к удаленной базе данных:

CREATE SYNONYM EMP FOR SCOTT.EMP@BOSTON

2. Создание пользователей базы данных. Задание пароля и табличного пространства для работы пользователя. Ограничение работы пользователя. Системные пароли и имена.

Создание пользователей БД осуществляется оператором

Пользователь — это базовый объект Oracle, который может быть владельцем других объектов и выполнять преду­смотренные действия с объектами Oracle в соответствии с поддерживаемой технологией.

Оператор определения пользователей Oracle использу­ет следующий синтаксис:

CREATE USER имя_пользователя IDENTIFIED

{ BY пароль I EXTERNALLY }

[DEFAULT TABLESPACE имя_табличной_области1}

[TEMPORARY TABLESPACE имя_табличной_области2}

[QUOTA {число_единиц [{ К 1 M }] I UNLIMITED } ON имя _табл. области]

[PROFILE имя_профиля}

Параметр имя_пользователя задает имя, под которым пользователь регистрируется в системе. Имя пользователя должно быть указано в кодировке, поддерживаемой сервером.

Ключевое слово BY указывает, что подтверждающий подлинность пользователя пароль будет указан явно в параметре пароль. Обратите внимание, что даже если сервер ис­пользует двухбайтовые кодировки для символов националь­ных языков, для пароля возможно использование только сим­волов из множества однобайтно кодируемых, например лати­ницы и цифр. Если указан параметр EXTERNALLY, то сервер проверяет соответствие зарегистрированного операционной системой пользователя и пользователя Oracle. Если имена совпадают, то Oracle не проводит собственную аутентифика­цию. Использование режима внешней аутентификации в за­щищенных системах не рекомендуется.

Ключевое слово DEFAULT TABLESPACE указывает имя табличной области, задаваемое параметром имя_таблич-ной_области1, которая используется для объектов создавае­мого пользователя по умолчанию. Если ключевое слово DEFAULT TABLESPACE не указано, то для объектов созда­ваемого пользователя будет использоваться табличная область SYSTEM. Учитывая, что в табличной области SYSTEM раз­мешен словарь данных, использовать ее для пользовательских объектов нецелесообразно.

Ключевое слово TEMPORARY TABLESPACE указы­вает имя табличной области, задаваемое параметром имя_табличной_области2, которая используется для времен­ных сегментов создаваемого пользователя по умолчанию. Временные сегменты используются для хранения промежу­точных данных сложных запросов. Если ключевое слово TEMPORARY TABLESPACE не указано, то для временных се­гментов создаваемого пользователя будет использоваться таб­личная область SYSTEM. Учитывая, что в табличной области SYSTEM размещен словарь данных, использовать ее для вре­менных сегментов пользователя объектов нецелесообразно. Для многопользовательской системы, к которой предъ­являются повышенные требования по производительности.

Табличные области для временных сегментов и для объектов пользователя желательно разнести по различным физическим носителям.

Ключевое слово QUOTA задает ограничения на ис­пользуемое пользователем пространство в конкретной таб­личной области. Максимально допустимое пространство за-дается параметром число_единиц в мегабайтах, если указано ключевое слово М; если указано ключевое слово К — в ки­лобайтах; а если не указано ни М, ни К — в байтах. Указа­ние ключевого слова UNLIMITED разрешает пользователю использовать табличное пространство без ограничений. Обра­тите внимание, что при регистрации пользователя можно ис­пользовать ключевое слово QUOTA несколько раз и опреде­лить для пользователя допустимое пространство в нескольких табличных областях.

Ключевое слово PROFILE назначает регистрируемому пользователю профиль, задаваемый параметром имя_профиля. Профиль пользователя — это поименованный набор ограни­чений на ресурсы системы. Если ключевое слово PROFILE не указано, пользователю приписывается профиль DEFAULT.

Для успешной регистрации пользователя необходимо иметь привилегию CREATE USER.

Рассмотрим пример создания пользователя U1, кото­рый использует пароль U1PSW для подтверждения подлинно­сти и которому назначена табличная область по умолчанию аpp_data с ограничением на используемое пространство в 1 мегабайт. Пользователю U1 также разрешено использовать табличную область tools с ограничением 500 килобайт.

SQL > CREATE USER U1 IDENTIFIED BY IUY

2 DEFAULT TABLESPASE APP_DATA

3 QUOTA 1M ON APP_DATA

4 QUOTA 500K ON TOOLS;

User created.

Для исключения из базы данных пользователя исполь­зуется оператор DROP USER. При исключении пользователя должны быть удалены все объекты, принадлежащие этому пользователю. Для выполнения операции исключения пользо­вателя необходимо иметь привилегию DROP USER.

СУБД ORACLE имеет специальные имена для доступа к БД в качестве администратора.

ВАРІАНТ 9

1. Целостность данных в распределенных информационных системах.

Распределенные запросы.

Отличительной особенностью СУБД промышленного уровня является поддержка параллельной работы многих пользователей. Пользователи формируют запросы на доступ и изменение информации в базе данных асинхронно, то есть в произвольные моменты времени. Одно из базовых требова­ний к СУБД — поддержка целостности данных, то есть та­кого состояния, когда в произвольный момент времени дан­ные адекватно отображают состояние моделируемых объек­тов реального мира.

Суть проблемы состоит в том, что в процессе управ­ления параллельной работой СУБД данные могут быть изме­нены или модифицированы не в надлежащей последователь­ности, что может привести к потере их целостности.

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

«потеря изменения» (два почти одновременных изменения базы данных базируются на том, что оба пользова­теля «видят» одно значение некоторых данных; при этом од­но из изменений будет потеряно за счет того, что одному из пользователей оно неизвестно);

два практически одновременных изменения при­водят к возникновению двух одинаковых значений ключей или индексов при объявленном уникальном значении ключа или индекса;

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

Очевидным решением проблемы согласованного изме­нения базы данных является формирование очереди пользо­вателей к каждому ресурсу системы (таблице, представлению, индексу и т.п.). Недостатком этого решения является резкое снижение производительности системы. Если количество пользователей исчисляется десятками или сотнями, то бло­кировка дефицитного ресурса приведет к очень большому времени ожидания.

Сервер Oracle использует иной метод решения сфор­мулированной проблемы, известный как согласованное чте­ние. Механизм согласованного чтения означает автоматичес­кое обеспечение такой ситуации, когда данные, используемые оператором выборки, не меняются в течение работы этого оператора, и процессы выборки из базы не ожидают резуль­татов записи строк в те же таблицы базы данных.

Метод обеспечения согласованного чтения состоит в поддержке для каждого запроса «мгновенной копии» базы данных, с которой он работает. Модель согласованного чте­ния Oracle иногда называют также многоверсионной моде­лью, так как в системе может одновременно существовать несколько различающихся версий одной таблицы. Различные версии таблиц поддерживаются с помощью специальных объ­ектов Oracle, называемых сегментами отката.

Когда возникает необходимость в получении кон­кретных данных для согласованного чтения, сервер Oracle использует информацию из сегментов отката. Поэтому для чтения данных нет проблемы, связанной с доступом к дан­ным, заблокированным для модификации.

2. Транзакции и их использование для организации многопользовательской работы. Распределенные транзакции. Операторы начала и окончания транзакции и контрольные точки транзакции.

Транзакция начинается при появлении первого вы­полнимого SQL-оператора, т.е. оператора описания или манипулирования данными. Транзакция завершается при по­явлении одного из следующих событий:

выдана команда языка SQL COMMIT или ROLLBACK;

выдана одна из таких команд языка описания данных (DDL), как CREATE, DROP или ALTER (при этом фиксируется предыдущая транзакция);

завершился оператор DDL (транзакция, содержа­щая в себе оператор языка описания данных, фиксируется автоматически);

пользователь завершил сеанс с системой Oracle (последняя транзакция фиксируется автоматически);

процесс пользователя аварийно завершен (тран­закция откатывается автоматически).

Как только транзакция завершена, следующий вы­полнимый SQL-оператор начинает новую транзакцию. Если в конце транзакции не появились операторы COMMIT или ROLLBACK, то нормальное завершение программы приведет к фиксации транзакции, а аварийное завершение (вызванное, например, разрывом связи в локальной сети) вызовет откат транзакции. Если произошел сбой операционной системы (например, из-за нехватки ресурсов), то откат транзакции будет автоматически выполнен при запуске экземпляра Oracle после восстановления операционной системы.

Для фиксации или отката транзакции используются предложения COMMIT WORK, SAVEPOINT, ROLLBACK WORK.

Предложение COMMIT фиксирует транзакцию. Пред­ложение ROLLBACK выполняет откат транзакции, то есть отменяет все изменения, выполненные данной транзакцией в базе данных. Предложение SAVEPOINT выполняет промежу­точную «текущую копию» состояния базы данных для того, чтобы впоследствии, при необходимости, можно было вер­нуться к состоянию базы данных в точке сохранения.

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