Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ SQL\T-SQL ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

FreeBSD and Nix

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


T-SQL 2014: Транзакции


USE test;
GO

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

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

--Атомарность - Либо все операции транзакции завершаются успешно, либо ни одна операция из них не выполняется.

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

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

--Устойчивость - После успешного завершении транзакции ее результаты фиксируются, в случае прерывания или сбоя - откатываются.

--BEGIN TRANSACTION - начальная точка явной транзакции
--COMMIT TRANSACTION - отмечает успешное завершение явной или неявной транзакции в значении @@TRANCOUNT равным 1(успех)
--SAVE TRANSACTION - устанавливает точку сохранения внутри транзакции
--ROLLBACK TRANSACTION - отмена транзакции до начала или до точки сохранения транзакции


--Начинаем транзакцию
BEGIN TRAN;

UPDATE dbo.peoples SET age = 1;

--Первая точка сохранения
SAVE TRAN save_point_1;

UPDATE dbo.peoples SET age = 2;

--Вторая точка сохранения
SAVE TRAN save_point_2;

--Откатываемся к первой точке сохранения
ROLLBACK TRAN save_point_1;

--Подтверждаем окончание транзакции
COMMIT TRAN;

SELECT * FROM dbo.peoples;


--Пример транзакции с откатом в случае ошибки
BEGIN TRANSACTION;

BEGIN TRY
    --Вызовем ошибку
    UPDATE dbo.peoples SET age = 'Error';
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;

SELECT * FROM dbo.peoples

 

--Change Tracking
--К сожалению у меня Express Edition, показать не смогу, но пример запроса просмотра изменений - рабочий
--Включить в свойствах базы
--Свойства - отслеживание изменений - отслеживание изменений - True
--CT (Change Tracking)
--CDC (Change Data Capture)

--Столбец "is_cdc_enabled" - показывает, где включен Change Tracking
USE master
GO
SELECT
database_id,
name,
is_cdc_enabled
FROM sys.databases
GO

USE test;
GO
--Включает систему отслеживания измененных данных для текущей базы данных
EXECUTE sys.sp_cdc_enable_db;
GO
--Отключает систему отслеживания измененных данных в текущей базе данных
EXECUTE sys.sp_cdc_disable_db 


--Активирует систему отслеживания измененных данных в указанной исходной таблице текущей базы данных
--@source_schema - имя схемы, к которой относится исходная таблица
--@source_name- имя исходной таблицы, из которой требуется включить систему отслеживания измененных данных
--@role_name - имя роли базы данных, которая использовалась для доступа к данным изменений
--https://msdn.microsoft.com/ru-ru/library/bb522475(v=sql.120).aspx

EXECUTE sys.sp_cdc_enable_table
    @source_schema = N'dbo'
  , @source_name = N'peoples'
  , @role_name = N'cdc_admin';
GO

--Просмотр истории изменений

--cdc.ddl_history
--https://msdn.microsoft.com/ru-ru/library/bb510681(v=sql.120).aspx

--sys.sp_cdc_get_ddl_history
--https://msdn.microsoft.com/ru-ru/library/bb522553(v=sql.120).aspx


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект