Microsoft Security Bulletin (MS00-035) вторая версия.
Опубликованный Микрософт 15 июня 2000г. бюллетень «Patch
Available for SQL Server 7.0 Service Pack Password Vulnerability» был
обновлён 10 мая 2001г.
Затронутые продукты:
Microsoft SQL Server 7.0 Service Packs 1, 2, and 3
Восстановление файлов и резервное копирование filegroup
По материалам статьи Microsoft Knowledge Base «INF Restore File and Filegroup Backups in SQL Server»
Информация в этой статье относится к версиям Microsoft SQL Server 7.0 и 2000
Файлы или файлгруппы (filegroups) в базе данных могут
резервироваться и восстанавливаться индивидуально. Это позволяет
восстанавливать только поврежденные файлы без того, чтобы восстанавливать не
повреждённую часть базы. Файлы в резервной копии файлгруппы могут быть
восстановлены индивидуально или как группа. Эта статья обсуждает некоторые
важные моменты и проблемы, связанных с восстановлением файлов и файлгрупп.
Прежде всего, необходимо резервировать Transaction Log!
Вы должны использовать резервную копию файла и файлгруппы, а
также восстанавливать их совместно с резервными копиями transaction log. После
восстановления файлов, Вы должны восстановить резервные копии transaction log,
которые были созданы так же, как резервные копии файлов, чтобы обеспечить
непротиворечивое состояние базы данных. Нет необходимости выполнять резервное
копирование transaction log, если файлы или файлгруппы не были изменены после
того, как была создана резервная копия файла или файлгруппы.
- SQL SERVER 7.0 требует, чтобы опция
TruncateLogOnCheckpoint не была установлена, и чтобы резервные копии transaction
log создавались в дополнение к резервной копии файлгруппы или файла базы
данных.
- SQL SERVER 2000 - для создания резервной копии transaction
log, Вы должны использовать Full Recovery или Bulk-Logged Recovery модель восстановления. Для получения большей
информации о моделях восстановления, см. «SQL Server 2000 Books Online
"Selecting a Recovery Model».
ОБРАТИТЕ ВНИМАНИЕ: Вы должны создавать полный набор
резервных копий файла, включая резервные копии журнала транзакций. Отсутствие
средств резервирования может стать причиной потери всей базы данных, если нет
актуальной резервной копии повреждённого файла.
Не возможно прервать регенерацию отдельных файлов до её
завершения. По этой причине, Вы должны всегда делать резервную копию
transaction log до восстановления резервной копии файла. Если transaction log
поврежден или Вы желаете восстановить
полную копию базы данных на определенное время, Вы должны восстановить полный
набор резервных копий файла, прежде чем Вы примените резервные копии
transaction log. Чтобы уменьшить риск повреждения transaction log, расположите
его на надёжном дисковом массиве.
Если полная копия базы данных потеряна:
- Вы должны иметь резервную копию каждого файла или
filegroup базы данных.
- Вы должны иметь не повреждённую резервную копию
transaction log, журналирующую всю цепочку операций, начиная с самого ранней
резервной копии файла или filegroup, до конца резервирования самого последнего
файла или filegroup. Начало резервируемой transaction log цепочки операций
должно содержать записи журнала для самой старой транзакции, не завершённой
до того момента, когда была создана
самая ранняя резервная копия файла.
ОБРАТИТЕ ВНИМАНИЕ: Если какое-либо из перечисленных выше
условий не будет выполнено, базу данных восстановить будет не возможно.
Резервные копии файла и Filegroup должны быть восстановлены в соответствующую
базу данных:
Резервные копии файла и Filegroup могут быть восстановлены только в базу
данных, которой они принадлежат. Вы не можете создавать новую, пустую базу
данных с той же самой структурой и именами файлов и затем пытаться
восстанавливать отдельную резервную копию файла или filegroup; Вы должны
восстановить их в существующую базу данных или выполнить восстановление полной
копии базы данных в другом месте. (в SQL Server 2000 есть новая возможность,
позволяющая осуществлять операции восстановления базы данных RESTORE DATABASE
по частям).
ОБРАТИТЕ ВНИМАНИЕ: Не пытайтесь отсоединять (detach) базу
данных и затем снова прикрепить (attach) её, если файл базы данных, состоящей
из нескольких файлов или filegroup, потерян. Вместо этого, восстановите
необходимый файл или filegroup из резервной копии. Если база данных
отсоединена, её переприкрепление окончится сбоем, и Вы будете вынуждены
восстановить полную резервную копию базы данных. Это произойдёт потому, что
файлы базы данных согласованы в базе данных, и этот механизм основан на
глобальном идентификаторе (GUID). Этот механизм должен защитить целостность
базы данных так, чтобы файлы, которые не принадлежат базе данных, не были бы
смешаны с файлами базы, что может стать причиной серьезных проблем с
целостностью данных. Даже притом, что Вы можете создать новую базу данных с
теми же самыми именами файлов, GUID не будет соответствовать прежним значениям.
SQL Server не позволяет Вам прикреплять отдельный файл базы
данных, которая содержит несколько таких файлов. При прикреплении ищутся все
файлы, которые принадлежат базе к которой файл прикрепляется и, если не удаётся
найти файлы с соответствующими GUID, процедура прикрепления потерпит неудачу.
Аналогично, если Вы создаёте новую базу данных с теми же самыми именами файлов
и filegroups, как в первоначальной базе данных, попробуйте заменить некоторые
из файлов, и затем пытайтесь инициировать регенерацию базы данных, выполняющуюся
после запуска SQL сервера. Регенерация окончится сбоем, о чём будет сообщено в
errorlog. Например, так:
2000-11-28 13:14:52.88 spid9 Opening file C:\MSSQL7\data\f2_Data.NDF.
2000-11-28 13:14:53.01 spid9 Cannot associate files with different databases.
2000-11-28 13:14:53.14 spid9 Device activation error. The physical file name 'C:\MSSQL7\data\f2_Data.NDF' may be incorrect.
Операции частичного восстановления базы данных (Только для SQL Server 2000):
В SQL Server 2000 появилась новая опция PARTIAL инструкции
T- SQL: RESTORE, которая обеспечивает механизм восстановления частей базы
данных в другое месторасположение, причём так, чтобы поврежденные или
отсутствующие данные могли быть скопированы назад, в первоначальную базу
данных. Операции частичного восстановления работают с базой данных имеющей
filegroups. Например, Вы имеете базу данных, которая состоит из первичной
filegroup, filegroup-А и filegroup-B. Предположим, что таблица, которая
постоянно находится в filegroup-B, была случайно удалена. Если Вы имеете
filegroup и резервные копии transaction log доступны, чтобы восстановить
удаленную таблицу, Вы можете восстановить только filegroup-B совместно с
первичной filegroup. Инструкция RESTORE с предложением PARTIAL позволяет
осуществлять восстановление в новую базу данных или даже на другой сервер. Вы
сможете извлечь и перезагрузить содержимое таблицы в первоначальную базу
данных.
Первичная filegroup всегда восстанавливается вместе с
остальными filegroup, которые требуется восстановить. Filegroups, которые не
восстановлены, отмечаются, как офлайновые и становятся недоступны. Частичное
восстановление резервной копий файла базы данных не поддерживается.
Для получения большей информации о том, как правильно
выполнять частичное восстановление базы данных, см. SQL Server 2000 Books
Online «Partial Restore Operations» и «RESTORE DATABASE».
Пожалуйста, изучите следующие темы, относящиеся к файлам и filegroups:
SQL Server 7.0 Books Online topics:
«Physical Database Files and Filegroups»
«Using Files and Filegroups»
«Creating Filegroups»
«Creating File or Filegroup Backups»
«Using File or Filegroup Backups»
«Restoring File or Filegroup Backups»
«File and Filegroup Backup and Restore»
SQL Server 2000 Books Online topics:
«Physical Database Files and Filegroups»
«Using Files and Filegroups»
«Creating Filegroups»
«Using File Backups»
«Files and Filegroups»
«Backing up and Restoring Databases»
«Partial Database Restore Operations»
«Backing up Selected Portions of a Database»
Окно Current Activity, SQL Server Enterprise Manager
Одной из составных частей Enterprise Manager является окно
Current Activity (текущие операции), с помощью которого можно получить данные о
процессах, блокировках и текущих подключениях SQL сервера. Эта информация
представляется в графическом виде и позволяет DBA получить информацию о текущих
соединениях пользователей с сервером, состоянии и блокировках процессов и
операторов и др. объектов, а также позволяет управлять процессами и
блокировками.
Одним из самых важных применений окна Current Activity
является возможность контроля и управления процессами и блокировками.
Просмотреть существующие в текущее время соединения с сервером, определить,
какие пользователи эти соединения создали и какие последние операторы этими
пользователями выполнялись, можно с помощью опции PROCESS INFO в папке Management в Enterprise Manager. В целях
контроля параллелизма, SQL
сервер выставляет блокировки на используемые пользователями или процессами
таблицы или страницы данных. Вид такой блокировки выбирается в зависимости от
логики вносимых изменений, что позволяет организовать такую работу
пользователей, при которой они не будут мешать друг другу при обращении к одним
и тем же данным. Например, для таких операции, как UPDATE, DELETE и INSERT применяется монопольная
блокировка, которая остаётся активной до конца исполнения транзакции, и не
позволяет другим пользователям получать доступ к изменяемым данным. Если же
пользователю необходимо только чтение данных, применяется разделяемая
блокировка, действие которой до конца транзакции можно продлить с помощью
ключевого слова HOLDLOCK.
Не всегда процесс блокирования объектов проходит гладко. Если в двух
транзакциях устанавливается блокировка на отдельные объекты, и каждая из этих
транзакций пытается обратиться к объекту другой транзакции, то возникает так
называемая взаимная блокировка. В таких случаях сервер баз данных просто
уничтожает одну из транзакций, пользователю (её инициировавшему) выдаётся
сообщение об ошибке, а предпринятые в рамках его транзакции изменения
откатываются назад. У Вас есть возможность просматривать в окне Current
Activity информацию видах используемых в каждом из текущих процессов
блокировок, о запросах на блокировку, которые блокируются сами или блокируют
другие процессы, а также обо всех случаях взаимоблокировок и тупиковых
блокировках. Вы можете сортировать просматриваемую информацию по
идентификаторам процессов или по объектам. Кроме этого, есть возможность
просмотреть дополнительные сведения о процессе, послать сообщение пользователю,
которому процесс принадлежит или принудительно завершить текущий процесс.