- •Управление данными Методические указания к лабораторным работам для студентов всех форм обучения
- •Санкт-Петербург
- •Содержание
- •Цель лабораторных работ
- •Программно-техническая платформа
- •Теоретическая часть
- •Перечень заданий к лабораторным работам
- •Порядок выполнения лабораторной работы
- •Содержание отчета по лабораторной работе
- •Список литературы
- •Пример титульного листа отчета по лабораторной работе
- •«Управление данными»
- •Санкт-Петербург
Порядок выполнения лабораторной работы
Работа № 1. «Установка именованного экземпляра SQL Server»
Последовательность шагов процесса установки можно представить следующим набором рисунков
Рис. 5.1 Автозагрузка. Внешний вид диалога.
Рис. 5.2 Шаг 2. Лицензионное соглашение
Рис. 5.3 Шаг 3. Проверка необходимых компонентов установки
Рис. 5.4 Шаг. 4. Начало установки
Рис. 5.5 Шаг. 5. Проверка наличия необходимых предустановленных компонентов
Рис. 5.6 Шаг. 6. Имя пользователя и компания
Рис. 5.7 Шаг 7. Выбор компонентов для установки
Рис. 5.8 Шаг 8. Выбор имени именованного экземпляра SQL Server 2005
Рис. 5.9 Шаг 9. Выбор учетных записей, под которыми будут запускаться службы
Рис. 5.10 Шаг 10. Выбор режима безопасности
Рис. 5.11 Шаг 11. Выбор порядка сортировки и других настроек
Рис. 5.12 Шаг 12. Проверка списка сконфигурированных параметров установки
Рис. 5.13 Шаг 13. Копирование файлов на жесткий диск и конфигурирование компонентов
Рис. 5.14 Шаг 14. Итоги копирования файлов
Рис. 5.15 Шаг 15. Завершение установки
Работа № 2. «Перенос баз данных с SQL Server 2000 на SQL Server 2005»
2.1. Открываем Enterprise Manager SQL Server 2000
Рис. 5.16 Enterprise Manager SQL Server 2000. Внешний вид
2.2. С контекстного меню вызываем элемент меню «Все задачи» \ «Detach Database» (рис. 5.16).
2.3 В появившемся диалоговом окне подтверждаем действие по «отвязыванию» выбранной базы данных от текущего сервера баз данных. Перед закрытием диалога выставляем опцию для обновления статистики (рис. 5.17).
Рис. 5.17 Подтверждение начала операции по демонтажу базы данных из текущего сервера
Рис. 5.18 Диалог успешного завершения операции
2.3 С помощью проводника переносим файлы базы данных на другое место (рис. 5.19-20)
Рис. 5.19 Перемещение файлов базы данных. Источник
Рис. 5.20 Перемещение файлов базы данных. Приемник
2.4 Открываем SQL Server Management Studio и с контекстного меню активируем «Attach» (рис. 5.21). Выбираем путь до файлов.
Рис. 5.21 Процесс миграции старой базы на другом сервере
Рис. 5.22 Процесс миграции старой базы на другом сервере. Выбор файлов для привязки
2.5 В появившемся диалоге настраиваем необходимые опции и свойства (рис. 5.23).
Рис. 5.23 Настройка свойств привязываемой базы данных. Внешний вид
2.6 Проверка работоспособности старой базы данных в новом окружении (рис. 5.24).
Рис. 5.24 Внешний вид после переноса базы данных между серверами
2.7. Тоже самое можно было выполнить с использованием следующего скрипта на T-SQL.
USE [master]
GO
CREATE DATABASE [TEST_FOR_ATTACH] ON
( FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL.6\MSSQL\Data\TEST_FOR_ATTACH_Data.MDF' ),
( FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL.6\MSSQL\Data\TEST_FOR_ATTACH_Log.LDF' )
FOR ATTACH
GO
if not exists (select name from master.sys.databases sd where name = N'TEST_FOR_ATTACH' and SUSER_SNAME(sd.owner_sid) = SUSER_SNAME() ) EXEC [TEST_FOR_ATTACH].dbo.sp_changedbowner @loginame=N'SERVER\ADMINISTRATOR', @map=false
GO
Работа № 3. «Назначение прав на объекты SQL Server 2005 и изменение контекста выполнения»
3.1 Подготовительный этап. Написание скриптов в окне запросов SQL Server Management Studio. Для выполнения – F5.
--перевод SQL Server 2005 в режим смешанной безопасности
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2
GO
--создание 1 логина и пользователя в тестовой базе данных
USE [master]
GO
CREATE LOGIN [vpupkin] WITH PASSWORD=N'111', DEFAULT_DATABASE=[TEST_FOR_ATTACH], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
GO
USE [TEST_FOR_ATTACH]
GO
CREATE USER [vpupkin] FOR LOGIN [vpupkin]
GO
USE [TEST_FOR_ATTACH]
GO
EXEC sp_addrolemember N'db_ddladmin', N'vpupkin'
GO
--создание 2 логина и пользователя в тестовой базе данных
USE [master]
GO
CREATE LOGIN [mpetrova] WITH PASSWORD=N'111', DEFAULT_DATABASE=[TEST_FOR_ATTACH], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
GO
USE [TEST_FOR_ATTACH]
GO
CREATE USER [mpetrova] FOR LOGIN [mpetrova]
GO
--создание 3 логина и пользователя в тестовой базе данных
USE [master]
GO
CREATE LOGIN [ivanoff] WITH PASSWORD=N'111', DEFAULT_DATABASE=[TEST_FOR_ATTACH], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
GO
USE [TEST_FOR_ATTACH]
GO
CREATE USER [ivanoff] FOR LOGIN [ivanoff]
GO
--создание схемы
USE [TEST_FOR_ATTACH]
GO
CREATE SCHEMA [sales] AUTHORIZATION [vpupkin]
GO
3.2 Создание подключения под пользователем VPupkin
Рис. 5.25 Подключение к ядру базы данных
3.3 Под пользователем Вася Пупкин выполнить скрипт (для того, чтобы скрипт выполнился успешно давали ему ранее участие в роли ddladmin базы данных)
USE [TEST_FOR_ATTACH]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [Sales].[Products](
[id] [int] IDENTITY(1,1) NOT NULL,
[name_product] [nchar](10) COLLATE Cyrillic_General_CI_AS NULL,
[price] [int] NULL,
CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
3.4 Внесение несколько записей в таблицу (рис. 5.26)
Рис. 5.26 Внесение изменений в таблицу базы данных
Теперь Вася имеет собственную таблицу и может давать на нее права другим пользователям.
3.5 Создаем подключение под пользователем Mpetrova (рис 5.27).
Рис. 5.27 Подключение к ядру базы данных
3.6 Проверяем, имеет ли Маша права по просмотру содержимого этой таблицы (выполнять из подключения Маши)
select * from sales.products
Рис. 5.28 Результаты выполнения запроса
Прав по просмотру не имеется (рис. 5.28).
3.7 Возвращаемся в подключение под Васей и выполняем тот же запрос
select * from sales.products
Рис. 5.29 Результаты выполнения запроса
Данные получены.
3.8 Теперь Васе необходимо дать права Маше на получение доступа к данным таблицы. Выполняем запрос.
grant select on sales.products
to mpetrova
3.9 Возвращаемся в подключение под Машей и еще раз выполняем ранее набранный скрипт select * from sales.products.
Маша данные теперь получает.
3.10 Раздача других прав на объекты аналогична описанному ранее сценарию. Для того, чтобы явно запретить какие то действия над объектом базы данных следует набирать вместо grant оператор deny. Ранее выданные разрешения и запреты можно отозвать оператором revoke.
3.11 Для того чтобы Маша могла в свою очередь раздавать права на объекты необходимо, чтобы при первоначальной раздаче прав Вася дополнил свой скрип ключевыми словами.
grant select on sales.products
to mpetrova with grant option
3.12 Напишите скрипты так, чтобы Маша выдала права на вставку / удаление данных Иванову. Добейтесь, чтобы Иванов смог править /вставлять и удалять данные в тестовой таблице.
Управление правами процесс достаточно гибкий и может также осуществлять путем создания ролей базы данных и раздачи соответствующих прав на объекты через роли.
Альтернативным способом управления правами является назначение прав на объекты базы данных через графическую оболочку SQL Server 2005 (рис. 5.30).
Рис. 5.30 Раздача прав через графическую оболочку
3.13 Изменение контекста выполнения запроса.
Исходные условия Вася Пупкин дал Маше Петровой право просматривать данные в своей таблице. Иванов прав на просмотр в этой таблице не имеет, но по рабочей необходимости этот доступ получить обязан.
Поэтому можно, не назначая прав явно дать возможность выполнять запросы от своего имени. Для этого выполняем следующее выражение
grant AUTHENTICATE to ivanoff
И после этого уже в контексте подключения Иванова
execute as user='vpupkin'
select * from sales.products
revert
Работа № 4. «Шифрование информации в таблицах баз данных»
4.1 Создать и выполнить скрипт в SQL Server Management Studio
-- создание логина
USE master
CREATE LOGIN [MIAMI\SalesUser] FROM Windows
-- создание базы данных
CREATE DATABASE Marketing
GO
USE Marketing
GO
CREATE TABLE dbo.MarketingTable
(data nvarchar(10))
GO
INSERT INTO dbo.MarketingTable
VALUES
('Some data')
-- создание базы данных
CREATE DATABASE Sales
GO
USE Sales
GO
CREATE USER SalesUser FROM LOGIN [MIAMI\SalesUser]
GO
CREATE PROCEDURE dbo.GetMarketingDataUnsigned
WITH EXECUTE AS 'SalesUser'
AS
SELECT * FROM Marketing.dbo.MarketingTable
GO
CREATE PROCEDURE dbo.GetMarketingDataSigned
WITH EXECUTE AS 'SalesUser'
AS
SELECT * FROM Marketing.dbo.MarketingTable
GO
-- создание процедуры и ее подписывание
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe'
GO
CREATE CERTIFICATE SalesCert
WITH SUBJECT = 'Sales cert',
EXPIRY_DATE = '10/31/2009'
GO
ADD SIGNATURE TO dbo.GetMarketingDataSigned
BY CERTIFICATE SalesCert
GO
-- экспорт сертификата
BACKUP CERTIFICATE SalesCert TO FILE = 'c:\SalesCert.cer'
-- импорт сертификата
USE Marketing
CREATE CERTIFICATE SalesCert
FROM FILE = 'c:\SalesCert.cer'
-- создание пользователя в базе данных
CREATE USER SalesCertUser
FROM CERTIFICATE SalesCert
GRANT AUTHENTICATE TO SalesCertUser
GRANT SELECT ON dbo.MarketingTable TO SalesCertUser
-- тестирование неподписанной сертифиакотом хранимой процедуры
USE Sales
EXEC dbo.GetMarketingDataUnsigned
-- тестирование подписанной хранимой процедуры
EXEC dbo.GetMarketingDataSigned
Работа № 5. «Резервное копирование и восстановление базы данных»
5.1 Создание тестовой базы данных для экспериментов с помощью мастера Management Studio
Рис. 5. 31 Создание базы данных для тестового примера
5.2 Создание и заполнение тестовой таблицы, а также выполнение операций резервного копирования
USE [test_to_backup]
GO
/****** Object: Table [dbo].[Tovar] Script Date: 01/20/2008 14:48:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Tovar](
[id] [int] NULL
) ON [PRIMARY]
-- Заполнение тестовой таблицы
INSERT dbo.Tovar(ID)
VALUES (1)
INSERT dbo.Tovar(ID)
VALUES (2)
--Создание устройства резервного копирования
USE [master]
GO
EXEC master.dbo.sp_addumpdevice @devtype = N'disk', @logicalname = N'my_backup_device', @physicalname = N'D:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\Backup\my_backup_device.bak'
GO
--Создание Full backup базы данных
BACKUP DATABASE [test_to_backup] TO [test_device] WITH NOFORMAT, NOINIT, NAME = N'test_to_backup-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
-- Внесение изменений в тестовую таблицу
INSERT dbo.Tovar(ID)
VALUES (3)
INSERT dbo.Tovar(ID)
VALUES (4)
--Создание Differentioal backup базы данных
BACKUP DATABASE [test_to_backup] TO [test_device] WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'test_to_backup-Differential Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
-- Внесение изменений в тестовую таблицу
INSERT dbo.Tovar(ID)
VALUES (5)
INSERT dbo.Tovar(ID)
VALUES (6)
--Создание LOG backup базы данных
BACKUP LOG [test_to_backup] TO [test_device] WITH NOFORMAT, NOINIT, NAME = N'test_to_backup-Transaction Log Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
-- Внесение изменений в тестовую таблицу
INSERT dbo.Tovar(ID)
VALUES (7)
INSERT dbo.Tovar(ID)
VALUES (8)
--Создание LOG backup 2 базы данных
BACKUP LOG [test_to_backup] TO [test_device] WITH NOFORMAT, NOINIT, NAME = N'test_to_backup-Transaction Log Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
-- Внесение изменений в тестовую таблицу
INSERT dbo.Tovar(ID)
VALUES (9)
INSERT dbo.Tovar(ID)
VALUES (10)
5.3 После этого эмулируем системный сбой базы данных. Для этого делаем остановку службы SQL Server 2005 (рис. 5.32) и
Рис. 5.32 Остановка сервиса ядра SQL Server 2005
в операционной системе с помощью проводника находим и изменяем название файла базы данных (рис. 5.33).
Рис. 5.33 Изменение названия файла базы данных
5.4 Проверка состояния базы данных. Выполняем запуск службы SQL Server 2005 и пытаемся обратиться к базе данных. База данных недоступна (рис. 5.34).
Задача – восстановить базу данных, максимально сохранив результаты работы. После восстановления должно получиться 10 записей в тестовой таблице.
Рис. 5.34 Проверка состояния базы данных после «сбоя»
5.5 Восстановление после сбоя с помощью скрипта, выполняемого в SQL Server Management Studio. Но для начала надо сделать максимально полную резервную копию для дальнейшего восстановления.
-- Сохрание последних измений из упавшей базы данных
BACKUP LOG [test_to_backup] TO [test_device] WITH NO_TRUNCATE , NOFORMAT, NOINIT, NAME = N'test_to_backup-Transaction Log Backup', SKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS = 10
Рис. 5.35 Создание максимально полной резервной копии для дальнейшего восстановления
5.6 Восстановление базы данных из резервной копии
--Fullback
RESTORE DATABASE [test_to_backup] FROM [test_device] WITH FILE = 5, NORECOVERY, NOUNLOAD, STATS = 10
GO
--Последний Differentila
RESTORE DATABASE [test_to_backup] FROM [test_device] WITH FILE = 7, NORECOVERY, NOUNLOAD, STATS = 10
GO
--Log Back up1
RESTORE LOG [test_to_backup] FROM [test_device] WITH FILE = 8, NORECOVERY, NOUNLOAD, STATS = 10
GO
-- Log Back up2
RESTORE LOG [test_to_backup] FROM [test_device] WITH FILE = 9, NORECOVERY, NOUNLOAD, STATS = 10
GO
-- Log Backup последний, созданный уже после сбоя
RESTORE LOG [test_to_backup] FROM [test_device] WITH FILE = 9, NOUNLOAD, STATS = 10
GO
5.7 Все что делали можно было сделать через контекстное меню базы данных, раздел задачи, подменю резервное копирование / восстановление.
Работа № 6. «Настройка доставки журналов транзакций»
6.1 Переходим в свойства базы данных, которую собираемся задействовать в сценариях доставки журналов (рис. 5.36).
Рис. 5.36 Настройка доставки журналов транзакции с помощью мастера
Рис. 5.37 Настройка расписания
Рис. 5.38 Первоначальная инициализация базы данных на Stand by cервере
Рис. 5.39 Задание расписания для копирования файлов логов транзакций с интервалом 1 минута
Рис. 5.40 Задание свойств для восстановления логов транзакций на втором сервере. Расписание - интервал 1 минута
6.2 После работы мастера основные свойства объектов, задействованных в сценарии отгрузки журналов транзакции сконфигурированы. Необходимо только подтвердить “OK” (рис. 5.41).
Рис. 5.41 Завершение мастера настройки процесса отгрузки логов
6.3 Просмотр состояния баз данных, вовлеченных в процесс отгрузки логов (рис. 5.42) и правильности настройки копирования журналов транзакций (рис. 5.43).
Рис. 5.42 Внешний вид базы данных на втором сервере
Рис. 5.43 Внешний вид папки с журналами транзакции
Работа № 7. «Настройка зеркалирования базы данных»
Одной из новых возможностей в области обеспечения высокой доступности данных является организация зеркалирования базы данных. Преимуществом данного подхода является возможность в быстрые сроки получить доступ к резервной копии базы данных в случае системного сбоя. Для настройки данной функциональности необходимо проделать ряд шагов, представленных на следующих рисунках. Для построения такого решения необходимо как минимум 2 сервера баз данных, а в случае необходимости автоматического обновления резервной копии – 3.
7.1 Подготовительный этап состоит в создании резервной копии базы данных, на которой необходимо настроить данные возможности, на другом сервере базы данных. Для этой цели первоначально делается резервная копия исходной базы данных (рис. 5.43), которая в дальнейшем развертывается из резервной копии на втором сервере баз данных.
7.2 На другом экземпляре SQL Server 2005 делаем восстановление базы данных из резервной копии с помощью следующего скрипта на T-SQL. Тоже самое можно сделать и с помощью мастера SQL Server 2005 Management Studio. Важным в этом является режим, в котором остается на втором сервере восстановленная база данных.
RESTORE DATABASE [AdventureWorks] FROM DISK = N'C:\1\mybackup.bak' WITH FILE = 1, MOVE N'AdventureWorks_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\AdventureWorks_Data.mdf', MOVE N'AdventureWorks_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\AdventureWorks_Log.ldf', NORECOVERY, NOUNLOAD, STATS = 10
Рис. 5.44 Резервное копирование исходной базы данных
7.3 После восстановления базы данных необходимо вернуться на первый сервер, выделить исходную базу данных и с контекстного меню перейти в свойства базы данных, вкладка «Mirroring» (Зеркалирование). В появившемся диалоге щелкнуть по кнопке «Configure Security» и вызвать мастер настройки зеркалирования базы данных (рис. 5.45).
7.4 Настройка зеркалирования базы данных с помощью мастера показана на рис. 5.45-53.
Рис. 5.45 Мастер настройки зеркалирования базы данных
Рис. 5.46 Включение в решение следящего сервера («свидетеля»)
Рис. 5.47 Подтверждение конфигурации со следящим сервером
Рис. 5.48 Настройка точки доступа на основном сервере
Рис. 5.49 Настройка точки доступа на зеркале (2 сервер)
Рис. 5.50 Настройка точки доступа на следящем сервере (свидетеле)
Рис. 5.51 Проверка списка необходимых действий для настройки
Рис. 5.52 Конфигурация баз данных и серверов
Для включения зеркалирования необходимо нажать на кнопку «Start Mirroring». Если все прошло успешно, то внешний вид диалога должен соответствовать представленному на рис. 5.53.
Рис. 5.53 Включение зеркалирования базы данных
После этого необходимо диалог закрыть (кнопка “OК”).
7.5 Для проверки работоспособности включенных возможностей необходимо в базу данных на первом экземпляре внести изменения в таблицу базы данных любым известным способом.
После этого повторно открыть свойства базы данных и нажатием кнопки «FailOver» проэмулировать системный сбой основной базы данных. После этого закрыть диалог и обновить по F5 объекты в Object Explorer графической оболочки пакета. Как видно из рис. 5.54 сервера поменялись ролями и внесенные изменения теперь доступны на втором сервере баз данных.
Рис. 5.54 Смена ролей баз данных на используемых серверах базы данных
Теперь необходимо открыть таблицу на втором сервере, данные которой редактировались на первом сервере, и удостовериться что изменения были применены в автоматическом режиме на втором сервере.
Работа № 8. «Применение заданий, предупреждений и операторов»
Одной из важных задач автоматизированного администрирования базы данных является создание задач, расписаний, операторов и уведомлений. Рассмотрим теперь последовательно создание и настройку данной функциональности.
8.1 Процесс создания оператора с помощью мастера показан на рис. 5.55-56.
Рис. 5.55 Создание оператора для получения уведомлений
Рис. 5.56 Настройка свойств объекта «Оператор»
8.2 Процесс создания задания состоит из создания объекта задание и настройки его шагов, что показано на рис. 5.57-60.
Рис. 5.57 Мастер создания задания и конфигурация его свойств
Рис. 5.58 Создание шагов, из которых состоит задание
Рис. 5.59 Проверка правильности программного кода в одном из шагов
В случае если задание состоит из нескольких шагов, то необходимо настроить логику переходов между шагами. Необходимо указать, что делать системе в случае, если какой-то из шагов выполнить не получится (рис. 5.60).
Рис. 5.60 Настройка логики переходов между шагами задания
Скрипт созданной работы выглядит следующим образом:
USE [msdb]
GO
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'MyJob',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'No description available.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'SERVER\Администратор', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [step1] Script Date: 01/20/2008 15:47:47 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'step1',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'declare @D DATETIME
select @D=getdate()
Print 'Ошибка произошла пользовательская 60000 ''',
@database_name=N'TEST_FOR_ATTACH',
@output_file_name=N'c:\1.txt',
@flags=2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
8.3 Для дальнейшей обработки событий необходимо создать пользовательские сообщения об ошибках, что можно сделать с помощью представленного скрипта.
--Создание сообщения для пользовательской ошибки
EXEC sp_addmessage
@msgnum = 60001,
@severity = 16,
@msgtext =
N'Tested allert was created',
@lang = 'us_english'
8.4 Создание уведомлений (объект alert) необходим для отслеживания наступления того или иного события на сервере баз данных. К такому объекту можно сопоставить некоторое задание, а также рассылку уведомлений операторам. Что позволяет в автоматическом режиме реагировать на возникшую ситуацию без участия администратора базы данных. Создание уведомления с помощью мастера показано на следующих рис. 5.61-62.
Рис. 5.61 Создание уведомлений (объект alert)
Рис. 5.62 Настройка автоматического запуска задания и уведомление оператору на наступление события на сервере
Для программистов скрип созданного объекта уведомления представлен ниже:
USE [msdb]
GO
EXEC msdb.dbo.sp_add_alert @name=N'myalert',
@message_id=60001,
@severity=0,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=0,
@category_name=N'[Uncategorized]',
@job_id=N'13964a99-7300-464b-af02-5d033321da3e'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'myalert', @operator_name=N'Vpupkin', @notification_method =1
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'myalert', @operator_name=N'Vpupkin', @notification_method =4
8.5 Проверка работоспособности созданных объектов. Так как оператор получает уведомления и через команду net send, необходимо запустить соответствующую службу операционной системы.
Включение службы Messenger для получения уведомлений по net send показано на рис. 5.63.
Рис. 5.63 Включение необходимых сервисов операционной системы
Для тестирования созданных объектов и автоматического ответа необходимо написать и запустить скрипт:
--скрипт для тестирования
SET LANGUAGE us_english;
GO
RAISERROR(60001,1,1,15)
На диске C:\ будет создан файл 1.txt и пользователь увидит сообщение – уведомление на своем ПК.
Работа № 9. «Настройка репликации»
9.1 Настройка репликации между различными серверами баз данных включает в себя настройку трех ролей: издателя, подписчика и дистрибьютора. Прежде чем начинать эту настройку, необходимо данную функциональность включить. Для этого выделяем элемент «Replication» (рис. 5.64) и с контекстного меню запускаем мастер конфигурации.
Рис. 5.64 Запуск мастера конфигурации репликации
Настраиваем месторасположение дистрибьютора данных (рис. 5.65) и путь для хранения первоначального инициализационного образа реплицируемых данных (рис. 5.66). Для завершения работы мастера необходимо нажать кнопку «Завершить» (рис. 5.67). В процессе работы мастера создается и настраивается ряд объектов (рис. 5.68).
Рис. 5.65 Настройка расположения дистрибьютора данных
Рис. 5.66 Настройка пути для хранения первоначального инициализационного образа реплицируемых данных
Рис. 5.67 Завершение работы мастера
Рис. 5.68 Запуск создания и настройки необходимых объектов базы
9.2 Создание публикации на первом сервере можно реализовать с использованием мастера или программным путем. Скрип представлен ниже:
-- Enabling the replication database
use master
exec sp_replicationdboption @dbname = N'test_replication', @optname = N'publish', @value = N'true'
GO
exec [test_replication].sys.sp_addlogreader_agent @job_login = null, @job_password = null, @publisher_security_mode = 1
GO
exec [test_replication].sys.sp_addqreader_agent @job_login = null, @job_password = null, @frompublisher = 1
GO
-- Adding the transactional publication
use [test_replication]
exec sp_addpublication @publication = N'transactional publication', @description = N'Transactional publication of database ''test_replication'' from Publisher ''MIAMI\SQLINSTANCE2''.', @sync_method = N'concurrent', @retention = 0, @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'true', @enabled_for_internet = N'false', @snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21, @ftp_login = N'anonymous', @allow_subscription_copy = N'false', @add_to_active_directory = N'false', @repl_freq = N'continuous', @status = N'active', @independent_agent = N'true', @immediate_sync = N'true', @allow_sync_tran = N'false', @autogen_sync_procs = N'false', @allow_queued_tran = N'false', @allow_dts = N'false', @replicate_ddl = 1, @allow_initialize_from_backup = N'false', @enabled_for_p2p = N'false', @enabled_for_het_sub = N'false'
GO
exec sp_addpublication_snapshot @publication = N'transactional publication', @frequency_type = 1, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @job_login = null, @job_password = null, @publisher_security_mode = 1
exec sp_grant_publication_access @publication = N'transactional publication', @login = N'sa'
GO
exec sp_grant_publication_access @publication = N'transactional publication', @login = N'NT AUTHORITY\SYSTEM'
GO
exec sp_grant_publication_access @publication = N'transactional publication', @login = N'BUILTIN\Administrators'
GO
exec sp_grant_publication_access @publication = N'transactional publication', @login = N'MIAMI\SQLServer2005SQLAgentUser$MIAMI$SQLINSTANCE2'
GO
exec sp_grant_publication_access @publication = N'transactional publication', @login = N'MIAMI\SQLServer2005MSSQLUser$MIAMI$SQLINSTANCE2'
GO
exec sp_grant_publication_access @publication = N'transactional publication', @login = N'distributor_admin'
GO
-- Adding the transactional articles
use [test_replication]
exec sp_addarticle @publication = N'transactional publication', @article = N'Table_1', @source_owner = N'dbo', @source_object = N'Table_1', @type = N'logbased', @description = N'', @creation_script = N'', @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509F, @identityrangemanagementoption = N'none', @destination_table = N'Table_1', @destination_owner = N'dbo', @status = 24, @vertical_partition = N'false', @ins_cmd = N'CALL [sp_MSins_dboTable_1]', @del_cmd = N'CALL [sp_MSdel_dboTable_1]', @upd_cmd = N'SCALL [sp_MSupd_dboTable_1]'
GO
9.3 Создание подписчика на втором сервере
-- Adding the transactional subscriptions
use [test_replication]
exec sp_addsubscription @publication = N'transactional publication', @subscriber = N'MIAMI', @destination_db = N'test_repl_tr', @subscription_type = N'Push', @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0
exec sp_addpushsubscription_agent @publication = N'transactional publication', @subscriber = N'MIAMI', @subscriber_db = N'test_repl_tr', @job_login = null, @job_password = null, @subscriber_security_mode = 1, @frequency_type = 64, @frequency_interval = 1, @frequency_relative_interval = 1, @frequency_recurrence_factor = 0, @frequency_subday = 4, @frequency_subday_interval = 5, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @dts_package_location = N'Distributor'
GO
9.4 Проверка работоспособности созданной транзакциональной репликации состоит во внесении изменений в опубликованную таблицу на первом сервере и просмотре результатов доставки изменений уже на втором сервере.
Работа № 10. «Разработка механизмов поддержания целостности данных»
10.1 Создание необходимых объектов в базе данных реализовано программно и представлено следующим скриптом:
USE [TEST_FOR_ATTACH]
GO
-- Создание объектов Default и Rule
create default dbo.zero as 0
create rule myRule as @skid>=0 and @skid<100
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Main](
[id] [int] IDENTITY(1,1) NOT NULL, -- создание первичного ключа, счетчик
[name] [nchar](10) COLLATE Cyrillic_General_CI_AS NULL,
[price] [int] NULL CONSTRAINT [DF_Main_price] DEFAULT ((0)),
[quantity] [int] NULL,
[skidka] [int] NULL CONSTRAINT [DF_Main_skidka] DEFAULT ((0)),
[skidka_sezon] [int] NULL,
[stoim] AS ([price]*[quantity]-(([price]*[quantity])*([skidka]+[skidka_sezon]))/(100)),
CONSTRAINT [PK_Main] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
-- Привязка значения по умолчанию к полю таблицы
EXEC sys.sp_bindefault @defname=N'[dbo].[zero]', @objname=N'[dbo].[Main].[skidka_sezon]' , @futureonly='futureonly'
GO
USE [TEST_FOR_ATTACH]
GO
-- Привязка Сheck Constraint’a к полю таблицы
ALTER TABLE [dbo].[Main] WITH CHECK ADD CONSTRAINT [CK_Main] CHECK (([skidka]>=(0) AND [skidka]<(100)))USE [TEST_FOR_ATTACH]
GO
-- Привязка Правила полю таблицы
exec sp_bindrule 'dbo.myRule', 'dbo.Main.skidka_sezon'
-- Создание триггера на удаление записи в таблице
create trigger Not_Delete on dbo.Main
for delete
as begin
rollback
print N'You do not have permissions to delete anything from here'
end
10.2 Проверка работоспособности созданных объектов может быть реализована путем внесения данных и их дальнейшее изменение в созданной таблице. Попытка ввести в поля с проверкой значения, отличные от разрешенных, вызовет ошибку, что является нормальным при проверке правильности пользовательского ввода на уровне бизнес логики, помещенной в базу данных.
Для проверки работы триггеров, привязанных к таблице, необходимо вызвать действие, на обработку которых создан триггер.
Был создан триггер, запрещающий удаление записей из таблицы. Попытка выполнить программно удаление записей из таблицы приведет к откату этого действия, и данные удалены не будут (рис. 5.69).
Рис. 5.69 Результаты работы триггера на удаление записей таблицы
10.3 Создание комплексного триггера на вставку данных (с интеллектуальным расчетом величины стоимости заказа в зависимости от величины сезонной скидки на основании текущей даты) виде скрипта представлен ниже:
-- Создание Триггера на вставку информации в таблицу, расчитывающего сезонную скидку на основании функции
create function dbo.func (@r datetime)
returns int as begin
declare @skidka int, @i int
set @i = month (@r)
set @skidka = 0
if ( @i >=1 and @i <=3) set @skidka = 10
if (@i >=4 and @i <=6) set @skidka = 5
if ( @i >=5 and @i <=9) set @skidka = 15
if (@i >=10 and @i <=12) set @skidka = 20
return @skidka
end
create trigger Add_record on dbo.main
instead of insert
as begin
declare @name nchar(10), @price int, @quantity int, @skidka int, @skidka_sezon int
select @name=[name], @price=price, @quantity=quantity, @skidka=skidka
from inserted
select @skidka_sezon =dbo.func(getdate())
insert dbo.Main([name], price, quantity, skidka, skidka_sezon)
values (@name, @price, @quantity, @skidka, @skidka_sezon )
end
Для проверки работоспособности необходимо выполнить следующий тестовый скрипт:
--Создание проверочных скриптов
insert dbo.main([name], price, quantity, skidka)
values ('item2', 10, 5, default)
select * from dbo.Main
10.4 В качестве самостоятельного задания необходимо написать триггер на обновление информации, который старые значения таблицы до внесения изменений складывает в таблицу старых значений. Предусмотреть в этой таблице запись даты изменений.
В качестве подсказки – необходимые значения в процессе обновления таблицы базы данных находятся в служебных таблицах deleted и inserted, о которых шла речь на лекционных занятиях.
Работа № 11. «Создание пакетов SQL Server 2005 Integration Services для задач бизнес аналитики»
11.1 Процесс создания простого пакета для миграции данных с одного источника на другой показан на рис. 5.70-5.77.
Рис. 5.70 Запуск мастера миграции данных
Рис. 5.71 Выбор источника данных
Рис. 5.72 Выбор приемника данных
Рис. 5.73 Настройка свойств объектов для переноса
Рис. 5.74 Сохранение пакета на жестком диске
Рис. 5.75 Сохранение пакета на жестком диске
Рис. 5.76 Работа мастера по переносу данных
11.2 Редактирование нового или уже существующего пакет сервисов интеграции осуществляется в MS BI Studio пакета SQL Server.
Рис. 5.77 Внешний вид созданного пакета для целей редактирования