Новости сайта "Упражнения по SQL" (http://www.sql-ex.ru) 189
Новости сайта "Упражнения по SQL (http://www.sql-ex.ru)" Выпуск 189 (10 мая 2008 г.)
Новым посетителям сайта
Сайт посвящен изучению языка, с помощью которого осуществляется взаимодействие с реляционными (и не только) СУБД. Суть обучения
состоит в выполнении заданий на написание запросов к учебным базам данных; при этом система контролирует правильность выполнения заданий. В настоящее время реализованы все операторы подъязыка манипуляции данными (DML), которые включают в себя оператор извлечения данных SELECT, а также операторы модификации данных - INSERT, DELETE и UPDATE.
Мы надеемся, что справочного материала сайта окажется достаточно для самостоятельного обучения. Кроме того, свои решения вы можете обсудить на форуме сайта. Опытных же специалистов приглашаем проверить (продемонстрировать) свое мастерство и принять участие в соревновании, обеспечиваемом рейтинговой системой учета времени выполнения заданий. Фактически, рейтинг ведется на втором этапе тестирования, который начинается сейчас после решения 57-ти задач первого этапа. При подсчете рейтинга каждого участника
отбрасывается один самый худший показатель среди всех решенных им упражнений.
Демонстрация плана выполнения запроса и сравнительная оценка эффективности решений поможет вам освоить принципы оптимизации запросов, которые пригодятся на третьем рейтинговом этапе, который начинается после 138 задачи.
Имеется возможность получить сертификат по SQL DML при выполнении определенного количества заданий.
С днем Победы!
Новости сайта
§ Уважаемые коллеги.
Приглашаем вас на семинар Russian SQL Server User Group, который состоится 21 мая с.г. в аудитории 501 факультета высоких технологий Южного Федерального Университета по адресу Ростов-на-Дону, ул.Мильчакова, 10. С докладами на семинаре выступят Николай Денищенко и Ян Либерман, Microsoft Most Valueable Professionals. В мае этого года Николай и Ян были признаны лучшими докладчиками на конкурсе User Groups-2008. В программе семинара:
Как снизить риск сетевой атаки на SQL Server. Демонстрация. Николай Денищенко, Ян Либерман - 60 мин. Перерыв - 15 мин. Некоторые вопросы шифрования в SQL Server. Ян Либерман - 60 мин. Перерыв - 15 мин. Дешифрование и защита серверного кода. Николай Денищенко - 45 мин. Extensible Key Management (EKM) в SQL Server 2008. Николай Денищенко - 45 мин.
Зарегистрироваться на семинар можно здесь.
Приходите, будет интересно.
§ Cтоимость сертификата в рублях изменилась и составляет 960 рублей (в евро цена осталась прежней). Те, кто сделал заказ и распечатал квитанцию со старой ценой, могут заплатить по ней.
§ Новая задача от $erges выставлена под номером 81. Прежнюю 81-ю задачу пришлось убрать вообще, т.к. ее решение не составляет труда после решения 80-ой задачи, и перенос этой задачи на первый этап повлиял бы на объективность рейтинга. Приношу VIG свои извинения :-).
Большинство администраторов базы данных боятся услышать, что они должны будут восстановить базу данных к определенному моменту времени, особенно если это производственная база данных. Однако знание того, как это сделать, занимает весьма важное место среди навыков администратора баз данных. Я последовательно покажу вам процесс восстановления базы данных на SQL Server к определенному моменту времени, чтобы восстановить таблицу данных.
Сценарий
Сотрудник называет Вас в панике, потому что он случайно удалил некоторые данные производственной базы, и он хочет, чтобы Вы восстановили потерянные записи.
Если Вам повезло, и Вы имеете под рукой систему аудита данных, то можете восстановить эти записи из таблицы аудита. Если Вы не имеете инструмента, который позволит вам прочитать журнал транзакций и отменить транзакции, то вероятно Вам придется восстанавливать измененную базу данных к определенному моменту времени на том же самом или другом сервере, где не находится экземпляр с текущей базой данных.
Процесс восстановления
В этой статье предполагается, что вы используете режим восстановления базы данных FULL (полный).
Первый шаг в процессе должен создать резервную копию "хвоста" журнала транзакций. Вы хотите выполнить этот тип резервного копирования перед восстановлением базы данных, чтобы гарантировать, что любые записи, которые изменились, начиная с последней резервной копии, доступны и будут включенными в процесс восстановления.
Затем Вы должны определить местоположение файлов резервных копий базы данных - на локальной машине или в сети. Неплохо скопировать эти файлы на ваш целевой сервер, если Вы собираетесь восстанавливать базу данных на другом сервере. В местоположении файла резервной копии найдите самую последнюю полную резервную копию базы данных, которая была выполнена (эти файлы обычно заканчиваются расширением .bak); Вы должны восстановить эту полную резервную копию. Нижеприведенный скрипт применяет файл полной резервной
копии к базе данных NewDatabase:
RESTORE DATABASE NewDatabase
FROM DISK = 'D:\BackupFiles\TestDatabaseFullBackup.bak'
WITH
MOVE 'PreviousDatabase' TO 'D:\DataFiles \TestDatabase.mdf',
MOVE 'PreviousDatabase_log' TO 'D:\DataFiles \TestDatabase_Log.ldf',
NORECOVERY
Код определяет, что местоположение файла полной резервной копии находится на диске D вашего сервера, и что Вы восстанавливаете файл в базу данных с именем NewDatabase. Оператор перемещает файл данных и файл журнала из полной резервной копии в новые файлы для моей базы данных TestDatabase. Последний оператор в скрипте, NORECOVERY, является ключевым моментом. Режим NORECOVERY (без восстановления) - один из трех возможных вариантов, которые описаны ниже.
|> NORECOVERY: Сообщает SQL Server, что Вы не закончили восстановление базы данных, и что последуют другие файлы восстановления. Пока база данных находится в этом состоянии, она еще не доступна, т.е. никакие подключения к ней не позволяются. |> RECOVERY: Сообщает SQL Server, что Вы закончили восстановление базы данных, и она готова к использованию. Это опция принимается по умолчанию и, безусловно, используется чаще всего. |> STANDBY: Сообщает SQL Server, что текущая база данных еще
не готова к полному восстановлению, и что последовательные файлы журнала транзакций будут применены для восстановления. Вы можете использовать эту опцию, чтобы подключения стали доступны для восстановленной базы данных в случае необходимости. Однако будущие журналы транзакций могут быть применены к базе данных, только если нет никаких текущих подключений.
Как только Вы восстановили полную резервную копию, используя опцию NORECOVERY, то можете начать применять резервные копии журнала транзакций или дифференциальную резервную копию.
Дифференциальная резервная копия
Дифференциальная резервная копия - это резервная копия любых изменений в базе данных, которые произошли, начиная с последней полной резервной копии базы данных. Если Вы имеете многочисленные дифференциальные резервные копии, то Вам потребуется восстановить только одну самую последнюю. В данной ситуации, нет никаких дифференциальных резервных копий, таким образом, Вы можете сразу перейти к резервным копиям журнала транзакции.
Резервные копии журнала транзакции
Резервная копия журнала транзакций содержит следы всех транзакций, которые произошли, начиная с последней резервной копии журнала транзакций; она также позволяет Вам восстанавливать вашу базу данных к моменту времени, предшествующему моменту времени, когда произошла ошибка базы данных. Резервные копии журнала транзакций выполняются последовательно, создавая цепочку. Восстанавливая последовательность резервных копий к определенному моменту времени, требуется, чтобы файлы журнала транзакций восстанавливались
по очереди.
Когда Вы используете план обслуживания базы данных для создания резервных копий журнала транзакций, обычно в имя файла журнала транзакций включается индикатор времени. Скрипт ниже использует три резервных копии журнала транзакций, используя опцию NORECOVERY, и последний оператор восстанавливает базу данных к состоянию, имевшего место ко времени в самом конце последнего файла журнала транзакций.
RESTORE LOG NewDatabase
FROM DISK = 'D:\BackupFiles\TestDatabase_TransactionLogBackup1.trn'
WITH NORECOVERY
RESTORE LOG NewDatabase
FROM DISK = 'D:\BackupFiles\ TestDatabase_TransactionLogBackup2.trn'
WITH NORECOVERY
RESTORE LOG NewDatabase
FROM DISK = 'D:\BackupFiles\ TestDatabase_TransactionLogBackup3.trn'
WITH NORECOVERY
RESTORE LOG NewDatabase
FROM DISK = 'D:\BackupFiles\ TestDatabase_TransactionLogBackup4.trn'
WITH RECOVERY
Восстановление к определенному моменту времени
В примере выше Вы восстанавливаете базу данных к моменту окончания последнего журнала транзакций. Если Вы хотите вернуть вашу базу данных к определенному моменту времени перед концом журнала транзакций, то должны использовать опцию STOPAT. Скрипт ниже восстанавливает четвертый журнал транзакций в последовательности журналов ко времени 16:01 - непосредственно перед тем, как случилась неприятность с базой данных.
RESTORE LOG NewDatabase
FROM DISK = 'D:\BackupFiles\ TestDatabase_TransactionLogBackup4.trn'
WITH STOPAT = N'6/28/2007 4:01:45 PM', RECOVERY
Теперь, когда Вы имеете восстановление базы данных к тому времени, которое требуется, пришло время решить, как помочь разработчикам, чтобы сделать их жизнь немного легче. Мое предложение состоит в том, чтобы скопировать таблицу, нужную разработчикам, в отдельному таблицу на сервере с тем, чтобы Вы или они могли исправить проблему с данными.
Будь готов
Восстановление вашей базы данных к определенному моменту времени - одна из тех вещей, которую никогда не хочется допускать, но Вы должны быть в состоянии сделать это в случае необходимости. Я сделал краткий обзор того, как восстановить вашу базу данных на SQL Server в определенных обстоятельствах, используя журналы транзакций. Важно отметить, что компании используют различные подходы для резервирования данных, таким образом очень важно быть полностью в курсе процесса резервирования баз данных вашей
компании. Часто тестируйте восстановление и моделируйте ситуации восстановления, чтобы быть готовым, когда придет беда.
13-09-2007
Полезная информация
§ Все статьи, публикуемые в рассылке, затем выкладываются на сайте Книги и статьи по SQL.
По всем вопросам, связанным с функционированием сайта, проблемами при решении упражнений, идеями вы можете обращаться к Сергею И.Моисеенко msi77[@]yandex.ru. Вы также можете предложить свои задачи для публикации на сайте.