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

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

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

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

Файлы: 1 файл

экзамен бд.doc

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

«Параметр WITH MARK применяется только к первой инструкции BEGIN TRAN WITH MARK.»

«Параметр не обрабатывается.»

Разрешения

 

Необходимо членство в роли public.

Примеры

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

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

DECLARE @TranName VARCHAR(20);

SELECT @TranName = 'MyTransaction';

 

BEGIN TRANSACTION @TranName;

USE AdventureWorks2012;

DELETE FROM AdventureWorks2012.HumanResources.JobCandidate     

WHERE JobCandidateID = 13;

 

COMMIT TRANSACTION @TranName;

GO

Б.Пометка  транзакции

В следующем примере показано, как пометить транзакцию. Транзакция CandidateDeleteпомечена.

BEGIN TRANSACTION CandidateDelete    

WITH MARK N'Deleting a Job Candidate';

GO

USE AdventureWorks2012;

GO

DELETE FROM AdventureWorks2012.HumanResources.JobCandidate    

WHERE JobCandidateID = 13;

GO

COMMIT TRANSACTION CandidateDelete;

GO

 

 

 
COMMIT TRANSACTION (Transact-SQL)

 

Отмечает успешное завершение явной или неявной транзакции. Если значение @@TRANCOUNT равно 1, то инструкция COMMIT TRANSACTION выполняет все изменения, сделанные с начала транзакции постоянной частью базы данных, освобождает ресурсы, удерживаемые транзакцией, и уменьшает значение параметра @@TRANCOUNT до 0. Если значение переменной @@TRANCOUNT больше 1, инструкция COMMIT TRANSACTION уменьшает значение @@TRANCOUNT только на 1 и оставляет транзакцию активной.

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

Синтаксис

 

COMMIT { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ]

[ ; ]

Аргументы

 

transaction_name

Игнорируется службой Компонент SQL Server Database Engine. transaction_name указывает имя транзакции, присвоенное предыдущей инструкцией BEGIN TRANSACTION. Имяtransaction_name должно соответствовать правилам для идентификаторов, но не может быть больше 32 знаков. transaction_name может использоваться как помощь при чтении, указывая программистам, с какой вложенной инструкцией BEGIN TRANSACTION связана инструкция COMMIT TRANSACTION.

@tran_name_variable

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

Замечания

 

Обязанностью программиста на языке Transact-SQL является вызов инструкции COMMIT TRANSACTION только в том случае, когда все данные, относящиеся к транзакции, логически верны.

Если зафиксированная транзакция является распределенной транзакцией Transact-SQL, инструкция COMMIT TRANSACTION вызывает координатор MS DTC для использования двухфазного протокола фиксации на всех серверах, участвующих в транзакции. Если локальная транзакция охватывает две или более базы данных одного и того же экземпляра компонента Компонент Database Engine, то экземпляр использует встроенный двухэтапный алгоритм для фиксирования всех баз данных, вызванных в транзакции.

При использовании вложенных транзакций фиксация внутренних транзакций не освобождает ресурсы и не делает их изменения постоянными. Изменения данных становятся постоянными и освобождаются ресурсы только при фиксации внешней транзакции. Вызов каждой инструкции COMMIT TRANSACTION приводит к тому, что если значение @@TRANCOUNT больше 1, то значение переменной @@TRANCOUNT просто уменьшается на 1. Когда значение @@TRANCOUNT уменьшится до нуля, вся внешняя транзакция фиксируется. Так как аргументtransaction_name не учитывается компонентом Компонент Database Engine, то вызов инструкции COMMIT TRANSACTION, содержащей ссылку на имя внешней транзакции, приводит к тому, что если существуют необработанные внутренние транзакции, то производится только уменьшение значения параметра @@TRANCOUNT на 1.

Вызов инструкции COMMIT TRANSACTION, когда значение параметра @@TRANCOUNT равно нулю, дает ошибку, так как нет соответствующей инструкции BEGIN TRANSACTION.

Нельзя произвести откат транзакции после вызова инструкции COMMIT TRANSACTION, так как измененные данные уже стали частью базы данных.

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

Разрешения

 

Необходимо быть членом роли public.

Примеры

А.Фиксация транзакции

В следующем примере удаляется кандидат на вакансию.

USE AdventureWorks2012;

GO

BEGIN TRANSACTION;

GO

DELETE FROM HumanResources.JobCandidate    

WHERE JobCandidateID = 13;

GO

COMMIT TRANSACTION;

GO

Б.Фиксация вложенной транзакции

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

USE AdventureWorks2012;

GO

IF OBJECT_ID(N'TestTran',N'U') IS NOT NULL    

DROP TABLE TestTran;

GO

CREATE TABLE TestTran (Cola int PRIMARY KEY, Colb char(3));

GO

-- This statement sets @@TRANCOUNT to 1.

BEGIN TRANSACTION OuterTran;

GO

PRINT N'Transaction count after BEGIN OuterTran = '    

+ CAST(@@TRANCOUNT AS nvarchar(10));

GO

INSERT INTO TestTran VALUES (1, 'aaa');

GO

-- This statement sets @@TRANCOUNT to 2.

BEGIN TRANSACTION Inner1;

GO

PRINT N'Transaction count after BEGIN Inner1 = '    

+ CAST(@@TRANCOUNT AS nvarchar(10));

GO

INSERT INTO TestTran VALUES (2, 'bbb');

GO

-- This statement sets @@TRANCOUNT to 3.

BEGIN TRANSACTION Inner2;

GO

PRINT N'Transaction count after BEGIN Inner2 = '    

+ CAST(@@TRANCOUNT AS nvarchar(10));

GO

INSERT INTO TestTran VALUES (3, 'ccc');

GO

-- This statement decrements @@TRANCOUNT to 2.

-- Nothing is committed.

COMMIT TRANSACTION Inner2;

GO

PRINT N'Transaction count after COMMIT Inner2 = '    

+ CAST(@@TRANCOUNT AS nvarchar(10));

GO

-- This statement decrements @@TRANCOUNT to 1.

-- Nothing is committed.

COMMIT TRANSACTION Inner1;

GO

PRINT N'Transaction count after COMMIT Inner1 = '    

+ CAST(@@TRANCOUNT AS nvarchar(10));

GO

-- This statement decrements @@TRANCOUNT to 0 and

-- commits outer transaction OuterTran.

COMMIT TRANSACTION OuterTran;

GO

PRINT N'Transaction count after COMMIT OuterTran = '    

+ CAST(@@TRANCOUNT AS nvarchar(10));

GO

 

 
ROLLBACK TRANSACTION (Transact-SQL)

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

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

Синтаксис

 

ROLLBACK { TRAN | TRANSACTION }      

[ transaction_name | @tran_name_variable     

| savepoint_name | @savepoint_variable ]

[ ; ]

Аргументы

 

transaction_name

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

@ tran_name_variable

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

savepoint_name

savepoint_name из инструкции SAVE TRANSACTION. Имя savepoint_name должно соответствовать правилам для идентификаторов. Используйте аргумент savepoint_name, если откат по условию должен влиять только на часть транзакции.

@ savepoint_variable

Имя пользовательской переменной, содержащей допустимое имя точки сохранения. Эта переменная должна иметь тип данных char, varchar, nchar или nvarchar.

Обработка ошибок

 

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

Общие примечания

 

Инструкция ROLLBACK TRANSACTION без аргумента savepoint_name или transaction_nameоткатывает изменения на начало транзакции. При наличии вложенных транзакций эта инструкция откатывает все внутренние транзакции к началу самой внешней инструкции BEGIN TRANSACTION. В обоих случаях инструкция ROLLBACK TRANSACTION уменьшает системную функцию @@TRANCOUNT до 0. Инструкция ROLLBACK TRANSACTION savepoint_name не уменьшает @@TRANCOUNT.

Инструкция ROLLBACK TRANSACTION не может ссылаться на аргумент savepoint_name в распределенных транзакциях, запущенных явно с помощью инструкции BEGIN DISTRIBUTED TRANSACTION или вызванных из локальной транзакции.

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

Внутри транзакции допускается использование повторяющихся имен точки сохранения, но инструкция ROLLBACK TRANSACTION, использующая повторяющееся имя точки сохранения, откатывает транзакцию только к самой последней точке сохранения, установленной с помощью инструкции SAVE TRANSACTION для этого имени.

Совместимость

 

В хранимых процедурах инструкция ROLLBACK TRANSACTION без аргументов savepoint_name илиtransaction_name откатывает все инструкции к самой внешней инструкции BEGIN TRANSACTION.Вызов инструкции ROLLBACK TRANSACTION в хранимой процедуре является причиной того, что значение @@TRANCOUNT после завершения хранимой процедуры отличается от значения @@TRANCOUNT при выдаче хранимой процедурой информационного сообщения. Это сообщение не влияет на последующую обработку.

Если инструкция ROLLBACK TRANSACTION запускается в триггере, происходит следующее:

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

Значение @@TRANCOUNT увеличивается на единицу при срабатывании триггера даже в режиме автоматической фиксации. (Система обрабатывает триггер как неявную вложенную транзакцию.)

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

Эффект, оказываемый инструкцией ROLLBACK на курсоры, определяется тремя правилами:

  1. Если параметр CURSOR_CLOSE_ON_COMMIT установлен в ON, инструкция ROLLBACK закрывает, но не освобождает все открытые курсоры.
  2. Если параметр CURSOR_CLOSE_ON_COMMIT установлен в OFF, инструкция ROLLBACK не влияет на открытые синхронные курсоры типа STATIC или INSENSITIVE или асинхронные курсоры типа STATIC, которые были полностью заполнены. Открытые курсоры любого другого типа закрываются, но не освобождаются.
  3. Ошибка, которая уничтожает пакет и формирует внутренний откат, освобождает все курсоры, которые были объявлены в пакете, содержащем ошибочную инструкцию. Все курсоры освобождаются в зависимости от их типа или установок параметра CURSOR_CLOSE_ON_COMMIT. Это относится и к курсорам, объявленным в хранимых процедурах, вызываемых ошибочным пакетом. Курсоры, объявленные в пакете перед ошибочным, подчиняются правилам 1 и 2. Ошибка взаимоблокировки является примером ошибки такого типа. Инструкция ROLLBACK в триггере также автоматически формирует этот тип ошибки.

Режим блокировки

 

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

Разрешения

 

Необходимо членство в роли public.

Примеры

 

В следующем примере демонстрируется эффект отката именованной транзакции:

USE tempdb;

GO

CREATE TABLE ValueTable ([value] int;)

GO

 

DECLARE @TransactionName varchar(20) = 'Transaction1';

 

--The following statements start a named transaction,

--insert two rows, and then roll back

--the transaction named in the variable @TransactionName.

--Another statement outside of the named transaction inserts two rows.

--The query returns the results of the previous statements.

 

BEGIN TRAN @TransactionName

       INSERT INTO ValueTable VALUES(1), (2);

ROLLBACK TRAN @TransactionName;

 

INSERT INTO ValueTable VALUES(3),(4);

 

SELECT [value] FROM ValueTable;

 

DROP TABLE ValueTable;

 

--Results

--value

-------------

--3

--4

 

12)

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

 Примечание

Начиная с версии SQL Server 2012 с пакетом обновления 1 (SP1) и накопительным обновлением CU2, поддерживается резервное копирование данных SQL Server в службу хранилищ больших двоичных объектов Windows Azure. Дополнительные сведения см. в разделах Backup and Restore Enhancements и Резервное копирование и восстановление SQL Server с помощью службы хранилищ больших двоичных объектов Windows Azure.


Решения для типичных проблем клиентов с базой данных SQL Windows Azure, SQL Server Data Tools и средой SQL Server Management Studio см. в разделе Управление жизненным циклом базы данных.

В этом разделе.

  • Преимущества
  • Компоненты и основные понятия
  • Введение в стратегии резервного копирования и восстановления
  • Связанные задачи

Преимущества

 

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

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