Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

laby_СУБД

.pdf
Скачиваний:
8
Добавлен:
10.03.2016
Размер:
722.67 Кб
Скачать

Пример обновления данных с использование транзакций

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

В окне Query Analyzer напишем код, позволяющий обновить данные

таблицы, забыв при этом указать раздел

Where (в примере он

закомментирован) и выполним его:

 

SET QUOTED_IDENTIFIER Off

 

Go

 

Begin Tran

 

Update Gor Set MGTK=”3432” Where P_obl=”002”

 

Select * From Gor

 

Если вы проверите вкладку Message в панели Results, то увидите два сообщения о том, что изменению подверглось количество записей, равное количеству записей во всем наборе данных. Естественно, вам это не понравится.

Вернувшись к панели Grids, вы увидите что записи получили одно и то же значение кода (в моем случае MGTK).

Чтобы отказаться от этих изменений, допишите в конце запроса код, который откатывает транзакцию, а затем показывает содержимое таблицы

(Gor).

Rollback Tran

Select * From Gor

Транзакция осуществляется выполнением пары команд Begin

Tran …. Commit Tran или Begin Tran …. Rollback Tran

1.Выполните код убедитесь в том, что данные спасены.

2.Напишите код для предыдущего примера с учетом исправленных ошибок и завершите код командой Commit Tran.

Удаление данных – DELETE

Предупреждение. Удаление данных без использования механизма транзакций – практически необратимый процесс. Даже при использовании транзакций, удаленные данные становятся недоступными после завершения транзакций. Поэтому очень важно делать резервную копию базы дан-

31

ных перед любой операцией, которая влияет на значительный объем данных.

Синтаксис команде DELETE:

DELETE

FROM имя_таблицы WHERE критерии_отбора

Внимание! Очень тщательно проверяйте свой SQLкод, когда вы имеете дело с транзакциями. Это означает: если мы начали транзакцию, то нужна абсолютная уверенность в том, что при любом варианте развития событий в коде будет исполнен либо оператор COMMIT TRAN, либо

ROLLBACK TRAN.

Приступим к удалению записей.

1. В окне Query Analyzer переключите режим отображения на текстовый, нажав Ctrl+T.

В пустую панель Query Analyzer введите код, который удаляет все записи в рамках транзакции, проверяет результат при помощи нового ключевого слова в операторе SELECT, а затем откатывает транзакцию, восстанавливая удаленные данные. Как только код будет введен, выполните его. (Привожу свой пример).

BEGIN TRAN

SELECT COUNT(*) FROM Gor_Temp DELETE Gor_Temp

SELECT COUNT(*) FROM Gor_Temp ROLLBACK TRAN

SELECT COUNT(*) FROM Gor_Temp

Функция COUNT(*) покажет вам, сколько записей было до и после удаления.

2. Теперь удалим из таблицы не все записи. Отредактируйте код, добавив условие, и выполните его. (Привожу свой пример).

BEGIN TRAN

SELECT COUNT(*) FROM Gor_Temp DELETE Gor_Temp

WHERE P_obl=”002”

SELECT * FROM Gor_Temp ROLLBACK TRAN

SELECT * FROM Gor_Temp

3. Оцените результаты.

Журнал транзакций

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

32

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

BEGIN TRAN MassDelete WITH MARK ‘Uodate Mass Recors’

GO

DELETE Gor_Temp

COMMIT TRANSACTION MassDelete

Теперь вы можете восстановить журнал транзакций, «привязавшись» к моменту установки закладки. Существуют программы, такие, как LogExplorer, которые могут отображать журнал транзакций с тем, чтобы отменить изменение отдельных записей, измененных в транзакции. Это оказывается кстати, когда кто-нибудь забудет про раздел WHERE в операторе Delete и ненамеренно удалит все записи в таблице.

Удалить строку таблицу можно в Enterprise Manager командой Open Table, Return all rows. Выделение строки щелчком мыши и последующее нажатие клавиши Delete приведет к удалению строки.

Удаление таблицы также выполняется с помощью Enterprise Manager или в Query Analyzer с помощью кода:

DROP TABLE имя_таблицы

Лабораторная работа № 6

Цель работы: резервное копирование база данных.

При резервном копировании с помощью SQL – сервера мы сохраняем контроль над происходящим. Существует две стратегии резервного копирования: вручную и как запланированного задания. Во втором случае присутствие администратора в заданное время необязательно. Мы же рассмотрим процесс копирования вручную.

1. Убедитесь в том, что окно Enterprise Manager открыто. Найдите значок нашей базы данных и щелкните по нему правой кнопкой мыши. Выберите в контекстном меню команду All Task, а затем щелкните на Backup Database…(Резервное копирование базы данных).

В результате откроется диалоговое окно SQL Server Backup (рис.9).

33

Рис.9. Диалоговое окно SQL Server Backup

2. На вкладке Общие введите имя для резервной копии, можно добавить к имени дату и время. Полезно заполнить окно Описание, это поможет в будущем разобраться в своих копиях. В следующей области оставьте переключатель в положении DataBase – complete (База данных

– полностью). В секции Destination (Куда) щелкните по кнопке Add, чтобы открыть следующее окно диалога и выбрать место размещения резервной копии. Далее, вернувшись в первое окно, в секции Overwrite (Запись вместо) выберите позицию переключателя Overwrite existing media (запись вместо существующих). Это означает, что старый файл резервной копии будет стерт.

3.На вкладке Options (Параметры) установите флажок Verify backup upon completion (Проверить копию после записи) и нажмите ОК.

4.После завершения копирования вы увидите сообщение об успешном копировании базы данных.

Копирование журнала транзакций

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

34

Резервное копирование журнала транзакций с помощью мастера

1.Находясь в окне Enterprise Manager, выберите кнопку мастера на панели инструментов или в меню команду Сервис, Мастера…. В результате появится диалоговое окно Select Wizard.

2.Разверните узел Management (управление) и выберите значок Backup Wizard (Мастер резервного копирования). В следующем окне вы увидите информацию о мастере.

3.Далее выберите имя интересующей вас базы данных.

4.Очередной диалог служит для задания имени резервной копии, а также необязательного описания.

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

6.Далее выберите место, куда будете создавать резервную копию

7.Далее мы вернемся к диалогу Select backup Destination and Action

(выбор операции и места резервного копирования). Флажок Read and Verify (Читать и проверять) следует установить. Остальные элементы остаются без изменения.

8.Очередной диалог предназначен для выбора носителя для копии и планированию заданий. Планировщик настроен на еженедельное копирование. График можно изменить, щелкнув на кнопке Change.

В результате откроется начальный диалог планировщика. Введите осмысленное имя и убедитесь, что флажок Enabled (разрешено) установлен, чтобы копирование выполнялось в заданное время.

Щелкните на кнопке Change. Далее настраивается периодичность копирования. Щелкните по кнопке ОК.

Перейдем из окна планировщика далее.

9.На следующем шаге собирается вся информация. Щелкните на Finish и вы увидите сообщение об успешном создании резервной копии. Однако вместо этого сообщения может появиться сообщение об ошибке.

Внем говорится, что служба SQL Server Agent, используемая для выполнения задания, не действует. В таком случае мы должны использовать SQL Server Service Manager – диспетчер служб SQL – сервера – для того, чтобы запустить требуемую программу.

Щелкните дважды на значке Service Manager на панели инструментов.

В появившемся окне выберите службу SQL Server Agent, а затем щелкните на кнопке Start/Continue (Запустить / Продолжить)

10.Если все благополучно, то мы увидим новый объект в узле Jobs дерева. Возможно потребуется команда обновления Refresh (Обновить) , для того, чтобы увидеть этот значок.

35

Восстановление базы данных

Рассмотрим восстановление базы данных с помощью Enterprise Manager.

1.В окне Enterprise Manager найдите и разверните узел интересующей вас базы данных. Разверните узел Tables, выберите одну из таблиц и откройте ее в режиме конструктора.

2.Выберите произвольный столбец таблицы и удалите его.

3.Закройте таблицу, сохранив изменения.

4.Теперь, когда у вас есть признак того, что база данных изменена, приступим к восстановлению. Вновь выделите значок базы данных выберите в контекстном меню команду Все задачи, Restore Database (Восстановить базу данных).

5.На экране появится диалог, предназначенный для восстановления баз данных из их резервных копий. Здесь будут перечислены все действительные резервные копии, из которых администратору, выполняющему восстановление, нужно выбрать одну. Поскольку создана лишь одна резервная копия, ее имя сразу оказывается помещенным в поле со списком First backup to restore (С чего начать восстановление). Щелкните ОК.

6.Чтобы убедиться, что мы выбрали правильную копию, выделите backup Set и щелкните на кнопке Свойства.

7.Здесь мы увидим различные сведения о резервной копии, которые помогут убедиться в том, что это именно та копия. Щелкните ОК здесь и в окне Restore Database.

8.В результате стартует процесс восстановления, по завершении которого мы увидим окно с сообщением о завершении восстановления.

36

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]