Шпаргалка по "Информатике"

Автор работы: Пользователь скрыл имя, 27 Ноября 2013 в 14:01, шпаргалка

Описание работы

Работа содержит ответы на вопросы для экзамена по "Информатике".

Файлы: 1 файл

экзамен бд.doc

— 1.10 Мб (Скачать файл)

ADO.NET и OLE DB

Явные транзакции можно также использовать в ADO .NET и OLE DB.

В ADO .NET воспользуйтесь методом BeginTransaction объекта SqlCeConnection для запуска явной транзакции. Чтобы завершить транзакцию, вызовите методы Commit или Rollback объектаSqlCeTransaction.

Для запуска  транзакции в OLE DB вызовите метод ITransactionLocal::StartTransaction. Вызовите метод ITransaction::Commit или ITransaction::Abort, установив для параметра fRetainingзначение FALSE, чтобы завершить транзакцию без автоматического запуска следующей.

Примечание.

При одном подключении ADO .NET можно создать несколько транзакций и назначить их отдельным командам.

Важно!

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


Автоматические транзакции

 

Автоматический  режим является стандартным режимом SQL Server Compact Edition управления транзакциями. По завершении исполнения каждая инструкция SQL фиксируется либо откатывается. Подключение к SQL Server Compact Edition выполняется в автоматическом режиме каждый раз, когда этот стандартный режим не переписывается явными транзакциями. Кроме того, автоматический режим является стандартным режимом для ADO .NET и OLE DB.

Подключение к SQL Server Compact Edition выполняется в автоматическом режиме, пока инструкция BEGIN TRANSACTION не запустит явную транзакцию. При фиксации либо откате явной транзакции SQL Server Compact Edition возвращается в автоматический режим.

Ошибки компиляции и времени выполнения

 

В отличие  от Microsoft SQL Server, SQL Server Compact Edition не производит пакетной обработки инструкций. SQL Server Compact Edition обрабатывает инструкции по одной, исполняя каждую по отдельности. Если та или иная инструкция возвращает ошибку, это не влияет на состояние других инструкций, включенных в пакет. Например, если SQL Server Management Studio используется для выполнения следующего набора запросов в SQL Server Compact Edition, первые два запроса окажутся правильными, а третий выполнить не удастся из-за ошибки синтаксиса.

CREATE TABLE TestData (col int);

INSERT INTO TestData VALUES (1);

INSERTT INTO TestData VALUES (1);

Примечание.

Если эти запросы отправлены как единый пакет в SQL Server, все  запросы выполнить не удастся, поскольку  они будут разобраны вместе. Ошибка синтаксиса приведет к неспособности SQL Server создать план выполнения для  всего пакета.


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

 

Управление  транзакциями:

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

  • Инструкции SQL в рамках SQL Server Management Studio.
  • Функции интерфейсов API базы данных в ADO .NET и OLE DB.

Внимание   Управлять транзакцией можно только с помощью одного из интерфейсов API. Использование двух интерфейсов API для одной транзакции может привести к неопределенным результатам.

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

Использование инструкций SQL

 

Запускать и завершать транзакции следует с помощью инструкций SQL.

Запуск  транзакций

Транзакции  могут запускаться в Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) Database Engine как  явные либо автоматические.

  • Явные транзакции  
    Запустите явную транзакцию, указав инструкцию BEGIN TRANSACTION. 
  • Автоматические транзакции  
    Стандартный режим для SQL Server Compact Edition. Автоматическая транзакция запускается при запуске инструкции операции, а заканчивается по завершении инструкции. 

Завершение транзакций

Завершать транзакции можно с помощью инструкции COMMIT или ROLLBACK.

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

Использование интерфейсов API

 

Интерфейсы  базы данных API, например OLE DB и ADO .NET, включают функции или методы, применяемые для описания транзакций. Это основные механизмы, используемые для управлениями транзакциями в приложении SQL Server Compact Edition. Дополнительные сведения см. в разделах Программирование для SQL Server Compact Edition в среде .NET,Собственное программирование для SQL Server Compact Edition и Как использовать транзакции с OLE DB (программным путем).

 

Подключение транзакции:

удаленный доступ к данным и репликация слиянием.

Важно!

В начале синхронизации монопольная  блокировка базы данных некоторое время  удерживается, что обеспечивает сбор правильных изменений при следующей  синхронизации. В течение этого  времени синхронизация ожидает получения блокировки. Если в течение отведенного времени блокировку получить не удается, возникает ошибка времени ожидания блокировки. Дополнительные сведения см. в разделах Блокировка (SQL Server Compact Edition) и Управление подключениями (SQL Server Compact Edition).


Репликация

 

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

Удаленный доступ к данным

 

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

 

2012 server

 

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

SQL Server работает в следующих режимах транзакций.

Автоматическое  принятие транзакций

Каждая отдельная инструкция является транзакцией.

Явные транзакции

Каждая транзакция явно начинается с инструкции BEGIN TRANSACTION и явно заканчивается инструкцией COMMIT или ROLLBACK.

Неявные транзакции

Новая транзакция неявно начинается, когда предыдущая транзакция завершена, но каждая транзакция явно завершается инструкцией COMMIT или ROLLBACK.

Транзакции  контекста пакета

Будучи применимой только к множественным активным результирующим наборам (MARS), явная или неявная транзакция Transact-SQL, которая запускается в сеансе MARS, становится транзакцией контекста пакета. SQL Server автоматически выполняет откат транзакции контекста пакета, если эта транзакция не зафиксирована или выполнен ее откат при завершении пакета.

 

 
BEGIN TRANSACTION (Transact-SQL)

Отмечает начальную точку явной локальной транзакции. Инструкция BEGIN TRANSACTION увеличивает значение функции @@TRANCOUNT на 1.

 Синтаксические обозначения Transact-SQL

Синтаксис

 

BEGIN { TRAN | TRANSACTION }     

[ { transaction_name | @tran_name_variable }      

[ WITH MARK [ 'description' ] ]    

]

[ ; ]

Аргументы

 

transaction_name

Имя, присвоенное транзакции. Аргумент transaction_name должен соответствовать правилам для идентификаторов, однако не допускаются идентификаторы длиннее 32 символов. Имена транзакций используются только для самых внешних вложенных инструкций BEGIN...COMMIT или BEGIN...ROLLBACK.

@tran_name_variable

Имя пользовательской переменной, содержащей допустимое имя транзакции.Переменная должна иметь тип данных char, varchar, nchar или nvarchar. Если переменной передается больше 32 символов, используются только 32 первых символа, а остальные усекаются.

WITH MARK [ 'description' ]

Указывает, что транзакция отмечается в журнале. Значение аргумента description — это строка, описывающая отметку. description длиной более 128 символов усекается до 128 символов перед сохранением в таблице msdb.dbo.logmarkhistory.

Если используется предложение WITH MARK, необходимо указать имя транзакции.Предложение WITH MARK позволяет восстановить журнал транзакций до именованной отметки.

Замечания

 

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

Инструкция BEGIN TRANSACTION запускает локальную транзакцию для соединения, выполняющего эту инструкцию. В зависимости от текущих параметров уровня изоляции транзакции многие ресурсы, необходимые для поддержки выполняемых соединением инструкций языка Transact-SQL, блокируются транзакцией до ее завершения с помощью инструкций COMMIT TRANSACTION и ROLLBACK TRANSACTION. Транзакции, долгое время ожидающие обработки, могут препятствовать доступу других пользователей к заблокированным ресурсам и усечения транзакций в журнале.

Хотя инструкция BEGIN TRANSACTION запускает локальную транзакцию, она не записывается в журнал транзакций, пока приложение не выполнит действие, которое должно быть записано в журнал, например инструкцию INSERT, UPDATE или DELETE. Приложение может выполнять такие действия, как получение блокировки для защиты уровня изоляции транзакции инструкции SELECT, но ни одно действие не записывается в журнал, пока приложение не выполнит действие, изменяющее данные.

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

Локальная транзакция, запущенная инструкцией BEGIN TRANSACTION, повышается до распределенной транзакции, если до фиксации или отката инструкции выполняются следующие действия.

  • Выполняется инструкция INSERT, DELETE или UPDATE, ссылающаяся на удаленную таблицу или связанный сервер. Инструкция INSERT, UPDATE или DELETE завершается неудачно, если поставщик OLE DB, который используется для доступа к связанному серверу, не поддерживает интерфейс ITransactionJoin.
  • Вызывается удаленная хранимая процедура, если для параметра REMOTE_PROC_TRANSACTIONS установлено значение ON.

Локальная копия SQL Server становится контроллером транзакции и использует координатор распределенных транзакций Майкрософт (MS DTC) для управления распределенной транзакцией.

Транзакция может выполняться явно как распределенная с помощью инструкции BEGIN DISTRIBUTED TRANSACTION. Дополнительные сведения см. в разделе BEGIN DISTRIBUTED TRANSACTION (Transact-SQL).

Помеченные  транзакции

Если используется параметр WITH MARK, имя транзакции помещается в журнал транзакций. При восстановлении базы данных из копии до прежнего состояния вместо даты и времени может использоваться помеченная транзакция. Дополнительные сведения см. в разделахИспользование помеченных транзакций для согласованного восстановления связанных баз данных (модель полного восстановления) и RESTORE (Transact-SQL).

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

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

Инструкцию BEGIN TRAN new_name WITH MARK можно вкладывать в уже существующие непомеченные транзакции. При этом значение параметра new_name становится именем метки транзакции, несмотря на то, что транзакция может иметь имя. В следующем примере M2 является именем метки.

BEGIN TRAN T1;

UPDATE table1 ...;

BEGIN TRAN M2 WITH MARK;

UPDATE table2 ...;

SELECT * from table1;

COMMIT TRAN M2;

UPDATE table3 ...;

COMMIT TRAN T1;

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

BEGIN TRAN T1 WITH MARK ...;

UPDATE table1 ...;

BEGIN TRAN M2 WITH MARK ...;

«Сервер: сообщение 3920, уровень 16, состояние 2, строка 1»

Информация о работе Шпаргалка по "Информатике"