С.Д. Кузнецов - Основы баз данных (1121716), страница 92
Текст из файла (страница 92)
Видимо, из соображений злравого смысла, слеловало бы ввести в язык БОЬ операцию лвовт тклнзлсттон дая аварийного завершения транзакции с ликвидацией всех последствий ее операций в базы данных и, отдельно, операцию коььвлск то, в которой всегда явно указывалось бы, до какого уровня требуется откат. Кстати, заметим, что комбинация коььвлск лно снлтн то злчвготнт вечеро гш гале является недопустимой (поекольку текущая транзакция не завершается). 439 Основы бвз данных Курс Подключения и сессии Может показаться странным, что мы оставили на конец этой лекции материал, который, казалось бы, необходимо знать, чтобы иметь возможность приступить к работе с какой-либо из современных систем баз данных. Объяснение очень простое. Чем ниже уровень средств языка 8ОЬ, чем ближе эти средства соприкасаются с индивидуальными особенностями реализаций, тем менее точен и конкретен стандарт БО1,. А в данном разделе речь идет о средствах, реализация которых в СУБД разных поставщиков обладает очень большой спецификой.
Сильно упрощая текущую ситуацию, можно сказать, что практически все современные продукты управления БО(=ориентированными базами данных основаны на архитектуре «клиент-сервер». Принципиальная схема клиент-серверной организации показана на рис. 18.8. Рис, 18.8. Клиент-серверная архитектура СУБД Конечно, это рисунок весьма условен. Под термином лользователь здесь, конечно, понимается некоторое приложение, с которым реально работает конечный пользователь (например, в этом приложении может быть реализован монитор прямого 8О(.). Кадентскал часгль СУБД вЂ” это тот системный компонент, с которым непосредственно взаимодействует лальзовааель. Данный компонент скрывает специфику реальных взаимодействий с серверной частью СУБД (например, используемые сетевые протоколы, если клиентская и серверная части СУБД разнесены по разным компьютерам сети). Наконец, сервер Лекция 18 Авторизация доступа к данным, управление транзакциями и сессиями баз данных представляет собой основную часть СУБД, где, собственно, и происходит выполнение операторов БОЬ и осуществляется доступ к базе данных.
Важно обратить внимание, что программные компоненты, представляющие пользователя и клиентскую часть СУБД, обычно выполняются на одном компьютере, а сервер баз данных работает на другом (серверном) компьютере. Но вполне может быть, что все три перечисленных программных компонента в действительности размещены на одном компьютере. Установление соединений Начиная со стандарта БОЬ/92, при разработке языковых средств стала приниматься во внимание клиент-серверная организация СУБД. Если говорить более точно, стал очевиден тот факт, что во всех существуюших СУБД до начала работы приложения со средствами управления базой данных требуется выполнить некоторые предварительные инициирующие действия. В частности, необходимо создать контекст, в котором будет работать система баз данных.
В некоторых реализациях этот контекст создается автоматически при запуске приложения, поскольку клиентская часть СУБД компонуется к приложению. В других случаях прикладная программа связывается с СУБД за счет наличия специализированных реализационно зависимых средств подключения к СУБД. Иногда контекст формируется на основе состояния системных переменных. Очевидно, что для выработки языковых средств, которые не противоречили бы существующим реализациям, требовался компромисс.
Этот компромисс выразился в том, что в БОЬ:1999 допускается установление связи приложения с СУБД по умолчанию, а также обеспечиваются средства явного управления соединениями. Общий подход состоит в следующем. ° Почти все операторы К()Ь (с небольшим числом исключений) могут выполняться только при наличии подключения клиентской части СУБД к серверу базы данных. ° Если соединение с сервером установлено и приложение пытается выполнить один из операторов Я)Ь (для выполнения которых требуется соединение), то его выполняет та СУБД, с которой установлено соединение. ° Если приложение пытается выполнить один из операторов Я~Ь (для выполнения которых требуется соединение), а соединение не установлено, то, прежде всего, требуется установить соединение. В БОЬ:1999 указывается, что такое соединение является соединением с СУБД по умолчанию. Что собой представляет это умолчание, определяется в реализации.
После установления соединения упомянутый оператор Я~Ь выполняется той СУБД, с которой установлено соединение. Основы баз данных Курс ° Если первым (до установки соединения) выполняемым оператором ЯЯ) является оператор СОЕЕЕСТ (это одно из исключений), то соединение по умолчанию не устанавливается, а происходит обращение к запрашиваемому серверу, и соединение устанавливается именно с ним. ° Можно выполнять оператор СОяяЕСТ для установления соединений со вторым, третьим и т. д. серверами, не разрывая ранее установленные соединения. Каждое вновь установленное соединение называется текущим соединением (сиггепг солпесггоп), а все ранее установленные соединения — отложенными соединениями й)огтапг соплесггоп).
° С каждым соединением ассоциирована сессия. Сессия, ассоциированная с текущим соединением, называется текущей сессией (сиггепт леляол), а сессии, ассоциированные с отложенными соединениями, называются отложенными сессиями (Йогтапу уедлгоп).а ° Если у приложения имеется несколько соединений, можно переключать их с помощью оператора ЯЕТ СОИИЕСТ10Н. ° Для поддержания установленных соединений могут расходоваться значительные системные ресурсы. Поэтому может возникнуть потребность в ликвидации соединения. Это можно сделать с помощью оператора 01ЕСОННЕСт.
Все соединения, не ликвидированные явно до завершения работы приложения, ликвидируются системой автоматически. Попытка ликвидировать текущее соединение, в котором выполняется транзакция, расценивается как ошибка. ° В реализации определяется, можно ли переключать соединения во время выполнения транзакции.
Однако если реализация это допускает, то„ в соответствии со стандартом, все операторы, выполняемые в одной транзакции, но в разных соединениях, являются частью одной общей транзакции. Операторы 80ь для управления соединениями Как отмечалось выше, в эту группу входят операторы соннест, еет С01ЛЯЕСТ10гЧ И 01 ЯСОН1ЧЕСТ. Оператор сошдст Оператор определяется следующими синтаксическими правилами: СОИгчЕСТ ТО сопоесСЕоп СагдеС " каждому соединению соответствует одна и только одна сессия. В сообгпестве БОБ ати термины часто используются попеременно для обозначения одного и того же.
Более строгие блюстители терминологии утверждают, что термин ведклямевяе относится к сетевому нуги между клиентом и сервером, а сессия — зто контекст, в котором работает 30ь-сервер. Лекция 18 Авторизация доступа к данным, управление транзакциями и сессиями соппесгз оп Сагдег ::=. ЯОЬ аегуег паве [ АЯ соппесг(оп паве [ [)ЯЕЕ соппесг(оп цеег паве ПЕЕА)ЛТ Здесь ЯОЬ аегуег паве — зто литерально заданная символьная строка, идентифицирующая сервер, к которому требуется подключиться.
Смысл (и формат) этого имени определяется в реализации. В необязательном разделе АЯ указываемое имя (соппесгзоп паве) выступает в роли временного имени соединения, которое впоследствии может быть использовано в операторах ЯЕТ СОШЕСТТОП и ОТЯСОННЕСТ. Если в операторе сОннест раздел АЯ не содержится, то по умолчанию соппесстоп паве совладаете ЯОЕ еегуег паве. В необязательном разделе ОЯЕЕ указываемое имя (соппесс(оп ивет пате) идентифицирует пользователя, от имени которого устанавливается соединение.
При отсутствии раздела иЯЕЕ в качестве соппесстоп цеег паве по умолчанию принимается текущий ацсьтп. В стандарте допускается, что реализация может ограничить возможные значения соареса[оп иаег паве (например, потребовать, чтобы это имя всегда совпадало с текущим ацСЬТО).
Эффект использования оператора в форме ООинеОТ ТО перла.т почти не отличается от результата действия системы при отсутствии какого- либо явного требования соединения. (Напомним, что соединение по умолчанию неявно устанавливается при попытке выполнения первого оператора В()[., требующего соединении.) Однако имеется одно важное отличие. Если соединение по умолчанию устанавливается неявно, а затем вдруг прерывается из-за какой-то ошибки, то оно автоматически переустанавливается при выполнении следующего оператора ВО[.. Если же соединение по умолчанию устанавливается явным образом, то автоматическое повторное установление соединения после его разрыва не производится. Оператор гдт сомгестндг Оператор определяется следующими синтаксическими правилами: ЯЕТ ООБИЕОТТОМ соппесг(оп оЬ)есг соппесгз оп оЬ)есг::= ( соппесг(оп паве ~ ОЕЕА[)ЬТ ) Условием успешного выполнения операции является наличие отложенного установленного соединения с именем соппесс(оп паве или отложенного установленного соединения по умолчанию.
В этом случае Основы баз данных Курс текущее соединение становится отложенным, а указанное отложенное соединение — текущим. Оператор шдсоиидст Оператор имеет следующий синтаксис: ОтяСОННКСт ( соппесЬ1оп оЬЗесЬ ~ ЛЬЬ ~ Сцдпвит 1 Необходимым условием для возможности ликвидации соединения является отсутствие активной транзакции в этом соединении. Если в операторе указывается соппесььоп оЬз ась, то соответствующее имя должно соответствовать установленному (текущему или отложенному) соединению. Если указывается совпкнт, то должно существовать текущее соединение.
Если оператор применяется к текущему соединению, то это соединение ликвидируется, и ни одно соединение не является текущим. В таком случае дпя продолжения работы необходимо установить текущее соединение при помощи операторов соннкст или вкт соннксттон. Если в операторе указывается льь, то ликвидируются все соединения, включая текущее. Заключение В этой лекции были рассмотрены три темы, которые являются относительно независимыми, но относятся к средствам языка Я )Ь, предназначенным для регулирования доступа пользователей к базам данных.