Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
му лаб Управление данными финал.doc
Скачиваний:
3
Добавлен:
05.05.2019
Размер:
2.98 Mб
Скачать
  1. Порядок выполнения лабораторной работы

Работа № 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 Внешний вид созданного пакета для целей редактирования