Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_i_SUBD.doc
Скачиваний:
1
Добавлен:
13.08.2019
Размер:
130.56 Кб
Скачать

Вопрос №12. Непротиворечивость и параллельная обработка. Блокировки.

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

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

  1. «потеря изменения» - два почти одновременных изменения БД базируются на том, что оба пользователя видят одно значение некоторых данных, при этом одно из изменений будет потеряно, за счет того, что одному из пользователей оно неизвестно.

  2. два практически одновременных изменения приводит к возникновению 2-х одинаковых значений ключей (индексов).

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

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

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

Различные версии таблиц поддерживаются с помощью специальных объектов ORACLE, называемых сегментами отката. Когда возникает необходимость получения конкретных данных для согласованного чтения, сервер ORACLE использует информацию из сегментов отката, поэтому для чтения данных нет проблем, связанных с доступом к данным, заблокированным для модификации.

В большинстве случаев автоматически используемые ORACLом механизмы поддержки параллельной работы пользователей с БД вполне достаточны для решения практических задач, тем не менее ORACLE поддерживает развитую систему пользовательского управления блокировками.

Типы блокировок

Блокировка – это механизм, предназначенный для предотвращения некорректного изменения данных при параллельной и асинхронной работе пользователей распределенной системы.

Блокировки используются:

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

  2. для обеспечения естественного временного порядка изменений, проводимых в БД.

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

Все типы блокировок отменяются при выполнении фиксации транзакции, при откате транзакции в точке сохранения блокировка таблиц снимается, а блокировок строк, как правило, нет.

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

ВОПРОС №13.

Объекты Oracle. Таблица, представление, последовательность.

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

Представление(view) – поименованная динамически поддерживаемая сервером выборка из одной или нескольких таблиц. Оператор select определяет выборку, ограничивает видимые пользователем данные. Позволяет эффективно ограничить данные, которые пользователь может модифицировать. Сервер гарантирует актуальность представлений, т.е. формирование представления производится каждый раз при его использовании.

Последовательность(sequence) – объект, обеспечивающий генерацию уникальных номеров в условиях многопользовательского асинхронного доступа. Обычные элементы последовательности используются для вставки уникальных идентификационных номеров для элементов таблицы БД.

ВОПРОС №14.

Объекты Oracle.пользователь, синоним, индекс.

Пользователь(uses) – объект, обладающий возможностью создавать и использовать другие объекты, а также запрашивать выполнение функций сервера.

Синоним(synonym) – альтернативное имя или псевдоним объекта Oracle, которое позволяет пользователям БД иметь доступ к данному объекту. Синоним может быть частным и общим. Общий позволяет всем пользователям БД обращаться к соответствующему объекту по альтернативному имени.

Индекс(index) – объект БД, создаваемый для повышения производительности выборки. Создается для столбцов таблицы или представления в пространстве БД и обеспечивает более быстрый доступ к данным за счет хранения прямых ссылок на место расположения строк.

ВОПРОС №15.

Объекты Oracle. Роль, снимок, процедура.

Роль(role) – именованная совокупность привилегий, которые могут быть предоставлены пользователям или другим ролям.

Снимок(snapshot) – локальная копия таблицы УБД, которая используется либо для тиражирования всей или части таблицы, либо для тиражирования результатов запроса данных из нескольких таблиц.

Процедура(procedure) – поименованный структурированный набор переменных и операторов SQL и PL/SQL предназначенный для решения конкретной задачи.

ВОПРОС №16.

Объекты Oracle.функция, пакет, триггер.

Функция(function) - поименованный структурированный набор переменных и операторов SQL и PL/SQL предназначенный для решения конкретной задачи возвращающий значения переменных.

Пакет(package) – поименованный структурированный набор переменных, процедур и функций, связанных единым функциональным замыслом.

Триггер(trigger) – хранимая процедура, которая запускается тогда, когда происходит связанное с триггером событие. Обычно события связаны с выполнением оператора insert, update, delete.

ВОПРОС №17.

Команды манипулирования данными.Операция выборки строк(select).

Используется для выборки атрибутов одной или нескольких таблиц в соответствии с указанным критерием отбора. Синтаксис: SELECT [distinct|all]{*|{[имя схемы.]{ имя таблицы | имя представления}| выражение [[ as] альтернативное имя столбца]}[,…]

FROM [имя схемы.] {{имя таблицы | имя представления |( подзапрос)} [альтернативное имя] [,…]

[WHERE условие] {{[ group by выражение [, выражение]… HAVING условие]} [order by { выражение | положение} [ASC| DESC] [,…]]

Указание ключевого слова distinct приводит к устранению повторяющихся кортежей из отобранных данных. All приводит к изъявлению всех отобранных данных включая повторяющиеся. По умолчанию используется значение all. Наличие параметра * означает выбор всех таблиц, указанных а перечни значений ключевого слова FROM. Параметр альтернативное имя столбца задает альтернативное имя столбца или выражения для формирования заголовка при выводе ответа на запрос. Ключевое слово FROM определяет в таблице или представлении из которой будут выбираться данные. Параметр альтернативное имя задает альтернативное, обычно короткое, имя, которое в контексте данного запроса является обязательным для ссылок именем соответствующей таблицы или представления. WHERE определяет условие логического отбора данных. GROUP BY… HAVING используются для формирования некоторой обобщающей информации для групп строк, имеющих определенные значения в одном или нескольких полях. ORDER BY определяет порядок, в котором будут выдаваться строки результирующего отношения.

ВОПРОС №18.

Команды манипулирования данными. Операция вставки строк (insert).

Операция insert используется для вставки строк атрибутов в таблицу или представление. Синтаксис INSERT INTO {[имя_схемы.]{имя_таблицы/имя_представления}}[(имя_столбца [имя_столбца…])] {values(выражение[, выражение]…)/подзапрос}

ВОПРОС №19. Команды манипулирования данными. Операция модификации строк(update).

Синтаксис UPDATE{[имя схемы.]{имя таблицы|имя представления}}SET {[(имя столбца[,имя столбца…])=(подзапрос)]/имя столбца={выражение/подзапрос2}}..[where условие]

ВОПРОС №20. Команды манипулирования данными.Операция удаления строк (delete).

Операция delete используется для удаления строк из таблицы или представления. Синтаксис DELETE [FROM] {[мя схемы.]{имя таблицы мя представления}}[WHERE условие]

При удалении строк с параметром «имя представления» удаляются строки из базовой таблицы представления. Не обязательный параметр «имя схемы» используется для уничтожения имени схемы, в которой находится соответственный объект Oracle, по умолчанию используется схема пользователя, выполняющая операцию. Если ключевое слово WHERE отсутствует, то из таблицы удаляются все строки. Если используется, то удаляются строки, для которых выполняется условие. Все удаляемые строки и соответствующие индексы освобождают занимаемую память.

ВОПРОС №21.

Типы данных ORACLE. Строковые типы.

Character – используется для хранения строк использованной длины. Для хранения строк резервируется определенной пространство в памяти. При необходимости короткая строка дополняется пробелами. Character [(длина)]. Ели длина не указана, то она равняется 1, максимальное значение 256 символов.

Varchar – используется для хранения строк переменной длины. Для хранения строк резервируется реально необходимое пространство. Varchar [(длина)]. Если длина не указана, то она равняется 1, максимальное значение 2000 символов.

Varchar2 – используется для хранения строк переменной длины. Varchar2 [(длина)]. Длина строки должна быть указана явно. От 1 до 2000.

Long – используется для хранения строк переменной длины, резервируется реально необходимое пространство в памяти. Использование переменных типа long имеют следующие ограничения:

  1. не может содержать более одного столбца типа Long

  2. не разрешено построение индексов

  3. хранимые функции не могут возвращать значение типа Long

  4. столбцы типа Long не могут включаться в ограничения целостности кроме Null или not null

Long [(длина)]. Если длина не указана явно, она полагается равной 2Мб. Максимальное значение 2 Мб символов.

ВОПРОС №22.

Типы данных ORACLE. Числовые типы

Integer – для представления чисел от -2^31 до 2^31

Number[(точность [,масштаб])]. Используется для представления чисел с заданной точностью. Если значение не указано явно, оно полагается равным 38, значение параметра масштаб по умолчанию 0, изменяется от -84 до 128. значение параметра точность может быть от1 до 38. использование отрицательных значений означает сдвиг десятичной точки в строку старших разрядов.

ВОПРОС №23.

Типы данных ORACLE. Битовые строк. Дата и время

Decimal – полностью соответствует типу Number

Raw – используется для хранения строк переменной длины. Отличие Raw от Varchar2 состоит в том, что для типов символьных строк происходит автоматическое преобразование данных между клиентом и сервером. Raw [(длина)]. Максимальное значение 255 б.

Long - Raw [(длина)]. Хранение больших битовых строк переменной длины. Если не указано явно полагается равной 2Мб, максимальное 2Гб. Невозможно построение индексов.

Дата и время

Date – используется для хранения даты и времени. Поддерживаются даты с 01.01.4712 до н.э. и до 31.12.4712 н.э. при определении даты без уточнения применяются полуночи. Функция SUSDATE возвращает текущее значения даты и времени. Значения определяются средствами ОС компьютера, на котором работает сервер Oracle. Наличие специального типа позволяет поддерживать специальную арифметику. Добавление в переменную целого числа интерпретируется Oracle как увеличение даты на соответствующее число дней.

ВОПРОС №24.

Специальные предикаты IN, LIKE

IN – определяет множество, вхождение в которое определяет истинность предиката. Синтаксис: выражение [NOT] IN {подзапрос |(список значений)}. Типы левого операнда из значений из списка правого должны быть сравнимыми. Результирующая таблица подзапроса должна содержать ровно 1 столбец. Значение предиката = true в том и только том случае, когда значение левого операнда совпадает с одним значением из списка правого.

LIKE – применим только к полям типа Character, Varchar, Varchar2. принимает истинное значение при вхождении определенной подстроки в значение строки. В качестве механизма формирования условия используется шаблон, состоящий из специальных символов и обычных символов используемой кодировки. В роле специальных символов выступают __ заменяющий любой одиночный символ, и % заменяющий последовательность любого числа символов (включая пустой). Синтаксис: имя_атрибута [NOT] LIKE шаблон. Типы данных столбца левого операнда и параметр «шаблон» должны быть типами символьных строк.

ВОПРОС №25.

Специальные предикаты BETWEEN, IS NULL, EXISTS

BETWEEN – похож на предикат IN в отличии от определения перечисления элементов множества, как это делает предикат IN, характеризует диапазон, принадлежность которому определяет истинность предиката. Синтаксис: выражение [NOT] BETWEEN начальное значение and финальное значение. Обычно запрос предиката используется для проверки вхождения диапазона дат или чисел.

IS NULL – иногда в таблице присутствуют записи, у которых некоторые атрибуты имеют неопределенное значение. В языке SQL для указания неопределенности значения атрибута используется ключевое слово NULL, когда значение атрибута есть NULL подразумевается, что атрибут не принял никакого конкретного значения. Значение NULL поддерживается специальным образом и отличается от приписывания атрибуту значений 0, , или любого другого символа. Атрибут с любым типом данных может иметь значение NULL. Учитывая, что NULL указывает на неопределенное значение результат любого сравнения с атрибутом, имеющим значение NULL неопределенно. Для обработки неопределенных значений используется специальный оператор IS NULL. Синтаксис: имя столбца IS [NOT] NULL.

EXISTS – принимает истинное значение, если не пуст результат некоторого подзапроса. Может работать автономно или в комбинации с другими предикатами, соединенными логическими связями. Данный предикат не может принимать неопределенное значение. Exists = true тогда и только тогда, когда результат вычисления подзапроса не пуст. Синтаксис: EXISTS (подзапрос)

ВОПРОС №26.

Сортировка

Для сортировки результатов запроса используется ключевое слово order by.

Синтаксис ORDER BY {выражение | положение }[ASC|DESC] [,]

Параметр выражение принимает значение выражения, базирующегося на одном или нескольких столбцах, перечисленных после ключевого слова select. Строки с одинаковыми значениями по первому выражению упорядочиваются по второму выражению, если оно определено. Параметр положение задает число, идентифицирующую позицию столбца в перечислении после ключевого слова select. Сортировка с помощью позиции полезна в частности для длинных выражений. Ключевые слова ASC и DESC определяют возрастающий или убывающий порядок сортировки. Значение NULL рассматривается как «самое тяжелое» и размещается в конце списка при сортировке в порядке возрастания и в начале списка при сортировке в порядке убывания.

ВОПРОС №27.

Группирование

Для организации группирования отобранных данных с целью их совместной обработки используется ключевое слово GROUP BY. Совместная обработка данных обычно сводится к вычислению некоторой функции: суммы, среднего значения и тд. Ключевое слово HAVING используется для формирования дополнительных условий. Использование ключевого слова GROUP BY приводит к тому, что оператор SELECT выдает одну производную строку для каждой группы строк, формируемых на основе одинаковых значений для столбцов или выражений.

Синтаксис GROUP BY выражение [, выражение] [HAVING условие]. Выражение GROUP BY может ссылаться на любой столбец из фразы FROM, независимо от того упоминаются они или нет в списке отбора SELECT. Ключевое слово HAVING используется для уточнения какие группы из GROUP BY включаются в окончательный результат.

ВОПРОС №28.

Агрегатные функции

Агрегатные функции возвращают результаты вычислений по группе строк, которые сформированы запросами предложения GROUP BY.

Функция вычисления среднего значения AVG ([distinct| all,] выражение) возвращает среднее значение числового аргумента «выражение», не включая в вычисления значение Null. Сумма SUM ([distinct| all ]выражение) возвращает сумму значения числовых атрибутов не включая в вычисления значение Null. Функция подсчета числа отобранных строк COUNT ([distinct| all] выражение/*) возвращает количество выбранных строк. Особый вариант использования функции Count со * возвращает число строк в таблице, включая дубликаты и атрибуты с неопределенным значением. Максимум MAX ([distinct| all] выражение) максимальное значение параметра, допускаются аргументы типа числовой, символьный, дата. Минимум MIN ([distinct| all] выражение) минимальное значение параметра, допускаются аргументы типа числовой, символьный, дата. юбым типом данных может иметь значение чается от приписывания атрибуту значений 0, , или любого другого символа. волов()0000

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]