Шпаргалка по "Базам Данных"

Автор работы: Пользователь скрыл имя, 19 Сентября 2011 в 21:52, шпаргалка

Краткое описание

Работа содержит ответы на вопросы по дисциплине "Базы данных".

Содержимое работы - 1 файл

ШпораБД.doc

— 361.00 Кб (Скачать файл)

Достоинства: 1.гибкость и универсальность (за счет того, что различные функции реализованы на разных компьютерах); 2.- эффективность (за счет разделения функций).

Недостаток: высокие затраты ресурсов компьютера на обмен информацией. 
 

Билет 5. Транзакции. Восстановление транзакций

Транзакция

Под транзакцией  понимается неделимая с точки  зрения воздействия на БД последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации) такая, что либо результаты всех операторов, входящих в транзакцию, отображаются в БД, либо воздействие всех этих операторов полностью отсутствует. Лозунг транзакции - "Все или ничего": при завершении транзакции оператором COMMIT результаты гарантированно фиксируются во внешней памяти (смысл слова commit - "зафиксировать" результаты транзакции); при завершении транзакции оператором ROLLBACK результаты гарантированно отсутствуют во внешней памяти (смысл слова rollback - ликвидировать результаты транзакции).

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

Поэтому для поддержания подобных ограничений целостности допускается их нарушение внутри транзакции с тем условием, чтобы к моменту завершения транзакции условия целостности были соблюдены. В системах с развитыми средствами ограничения и контроля целостности каждая транзакция начинается при целостном состоянии БД и должна оставить это состояние целостными после своего завершения. Несоблюдение этого условия приводит к тому, что вместо фиксации результатов транзакции происходит ее откат (т.е. вместо оператора COMMIT выполняется оператор ROLLBACK), и БД остается в таком состоянии, в котором находилась к моменту начала транзакции, т.е. в целостном состоянии.

Ни одна СУБД не обладает механизмами деления  процесса обработки данных не отдельные  транзакции, это должен делать прикладной программист с помощью операторов BEGIN TRANSACTION, COMMIT или ROLLBACK

Свойства  транзакций:

  1. Атомарность (все или ничего) – любая транзакция является неделимой единицей работы
  2. Согласованность (непротиворечивость) – переводит бд из одного непротиворечивого состояния в другое
  3. Изолированность – все транзакции выполняются независимо друг от друга, те промежуточные результаты незавершенной транзакции недоступны другим транзакциям
  4. Продолжительность – результаты успешно завершенной транзакции сохраняются в бд и не могут быть утеряны при дальнейших сбоях

Восстановление  транзакций

Из определения  следует, что транзакции являются единицами  восстановления в СУБД. Общими принципами восстановления являются следующие:

  • результаты зафиксированных транзакций должны быть сохранены (COMMIT) в восстановленном состоянии базы данных;
  • результаты незафиксированных транзакций должны отсутствовать (ROLLBACK) в восстановленном состоянии базы данных.

Это означает, что восстанавливается последнее  по времени согласованное состояние  базы данных.

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

  • Индивидуальный откат транзакции. Тривиальной ситуацией отката транзакции является ее явное завершение оператором ROLLBACK. Возможны также ситуации, когда откат транзакции инициируется системой. Примерами могут быть возникновение исключительной ситуации в прикладной программе (например, деление на ноль). Для восстановления согласованного состояния базы данных при индивидуальном откате транзакции нужно устранить последствия операторов модификации базы данных, которые выполнялись в этой транзакции.
  • Восстановление после внезапной потери содержимого оперативной памяти (мягкий сбой). Такая ситуация может возникнуть при аварийном выключении электрического питания, при возникновении неустранимого сбоя процессора (например, срабатывании контроля оперативной памяти) и т.д. Ситуация характеризуется потерей той части базы данных, которая к моменту сбоя содержалась в буферах оперативной памяти.
  • Восстановление после поломки основного внешнего носителя базы данных (жесткий сбой). Эта ситуация при достаточно высокой надежности современных устройств внешней памяти может возникать сравнительно редко, но тем не менее, СУБД должна быть в состоянии восстановить базу данных даже и в этом случае. Основой восстановления является архивная копия и журнал изменений базы данных.

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

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

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

Билет 7. Блокирование ресурсов.

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

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

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

Основные  правила метода блокировки:

Блокировка  для чтения – если транзакция установила блокировку элемента данных для чтения, она сможет считать его, но не сможет обновить

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

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

  • любая транзакция, которой необходимо получить доступ к элементу данных, должна вначале выполнить блокировку этого объекта. Блокировка может запрашиваться для чтения (что позволит иметь доступ к элементу только для чтения) или же для записи. В последнем случае транзакция получит право доступа и для чтения, и для записи.
  • Если элемент еще не заблокирован какой-либо иной транзакцией, блокировка элемента будет выполнена успешно. 
  • Если элемент  данных в настоящий момент уже заблокирован, СУБД проанализирует, является ли тип полученного запроса совместимым с типом уже существующего блока. Если запрашивается доступ для чтения к элементу, который заблокирован для чтения, доступ к элементу данных будет разрешен. В противном случае транзакция будет переведена в состояние ожидания, которое будет продолжаться до тех пор, пока существующий блок не будет снят.
  • Транзакция продолжает удерживать блокировку элемента данных доя тех пор, пока она явным образом не освободит его – либо в ходе выполнения транзакции, либо по ее окончании (успешном или неуспешном). Только после того как с элемента данных будет снята блокировка для записи, другие транзакции смогут "увидеть" результаты проведенной операции записи.

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

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

Двухфазная  блокировка – транзакция выполняется  по протоколу двухфазной блокировки, если в ней все операции блокирования предшествуют первой операции разблокирования.

В соответствии с основным правилом этого протокола, каждая транзакция может быть разделена  на две фазы: Фазу нарастания, в которой выполняются все необходимые блокировки и не освобождается ни одного из элементов данных; и фазу сжатия, в которой освобождаются все выполненные ранее блокировки и не может быть затребовано ни одной новой. Нет никакой необходимости в том, чтобы все требуемые блокировки были установлены одновременно. Как правило, транзакция устанавливает некоторые блокировки, выполняет определенную обработку, после чего может затребовать установку дополнительных необходимых ей блокировок. Однако она не может освободить ни одного из блоков, пока не достигнет той стадии, на которой ей уже не потребуется установка новых блокировок. Работа ведется по следующим правилам:

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

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

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

Информация о работе Шпаргалка по "Базам Данных"