Обновите базу данных SQL Server 2000 до 2008 R2 и включите новые функции

23

Я недавно обновил базу данных SQL Server 2000 до 2008 R2.


То, что я сделал, было:

  1. Завершение работы SQL Server 2000 (экспресс) на старой машине,
  2. Переместить файлы данных ( mydatabase.mdf и mydatabase.ldf ) на новый компьютер,
  3. Запустите SQL Server Management Studio 2008,
  4. Подключиться к локальной базе данных,
  5. Присоедините файлы данных к базе данных.
  6. Измените уровень совместимости базы данных на SQL 2008 (100).

Вопрос: Что еще я должен сделать, чтобы завершить миграцию?

Я хочу:

  1. использовать новые функции, такие как контрольная сумма и модель полного восстановления,
  2. сделать эту базу данных точно такой же, как она была создана в SQL 2008 R2,
  3. сделать эту базу данных полностью совместимой, правильной и идеально подходящей для нового ядра базы данных SQL 2008 R2.

Другими словами: я просто хочу знать, как правильно и полностью преобразовать старую базу данных SQL 2000 в новую базу данных 2008 R2, быть спокойным, что все сделано правильно, и радоваться всем новым функциям.


Я задаю этот вопрос, потому что я нашел много сайтов в Интернете, на которых написано так много разных вещей, которые приводят меня в замешательство: одни говорят, что требуется перестроить индексы, другие говорят, что нужно делать что-то другое ... и теперь я ничего не знаю, поэтому хочу услышать мнение опытного человека и четкие, пошаговые инструкции. Я работаю в очень маленькой компании, я сам по себе и не хочу все испортить.


Сэр, я действительно впечатлен вашим ответом, я не ожидал так много.


Итак, некоторые комментарии:

  1. База данных сейчас в производстве. Как я уже сказал, он был обновлен с использованием метода deattach-attach, как я описал в первом посте и как описано в MSDN: http://msdn.microsoft.com/en-us/library/ms189625.aspx Это должно было быть сделано быстро, поэтому я был вынужден сделать это таким образом. Давайте забудем о том, насколько это неуместно, и сосредоточимся на текущей ситуации

  2. Пользователи / персоны здесь не проблема - их всего несколько, а разрешения простые.

  3. Приложение, которое использует базу данных, совместимо с SQL 2000 до 2012 года, так что это тоже не проблема.

  4. Файл базы данных (MDF) невелик - всего около 1 ГБ.


Еще несколько вопросов:

  1. Вы рекомендуете использовать метод резервного копирования / восстановления, но я сделал, как написано выше, так что я могу столкнуться с какими-либо проблемами сейчас? Все работало без проблем.

  2. О контрольной сумме и модели полного восстановления: она не была доступна / включена в SQL 2000, поэтому я хочу использовать их сейчас. Вы сказали, что мне нужно только включить эти параметры в свойствах базы данных? Я где-то читал, что этого недостаточно, и я должен также перестроить индексы или что-то еще. Я действительно не знаю, я просто спрашиваю.

  3. Я готовлюсь к переносу этой базы данных в SQL 2012 - сначала она была с SQL 2000 на 2008 R2, а теперь с 2008 R2 на 2012 (это было невозможно сделать напрямую из-за отсутствия поддержки баз данных SQL 2000 в SQL 2012). Итак, я понимаю, что должен следовать вашему руководству: сделайте резервную копию в 2008 R2 и восстановите в 2012, а затем сделайте остальные ваши советы, верно?

  4. Пожалуйста, объясните мне метод резервного копирования / восстановления: это как сброс базы данных в SQL-запросы, а затем восстановление, выполнив несколько запросов? Будет ли этот метод кстати "дефрагментировать" мою базу данных? Если нет, то как его дефрагментировать / оптимизировать вручную?

  5. Поскольку мы использовали SQL 2000 Express в течение многих лет (без интерфейса управления), мы делали резервные копии, просто останавливая движок и RAR каталог DATA. На данный момент, как и в SQL 2008, разве это не лучше, чем использование функции резервного копирования в Management Studio?

  6. Режим полного восстановления с частыми резервными копиями журнала транзакций - где хранится журнал транзакций - это файл LDF? Как правильно сделать резервную копию?


Я знаю, что мои вопросы могут показаться глупыми, я не являюсь профессиональным администратором базы данных, но я единственный человек, который может выполнить такую ​​«сложную задачу», как обновление ядра базы данных. Я также уверен, что ваши знания очень помогут другим людям, таким как я.

Большое спасибо за ваше время и знания, я очень ценю это.

Марк Саелик
источник
2
В следующий раз я настоятельно рекомендую выполнять резервное копирование / восстановление, а не выключать SQL Server, перемещать файлы и прикреплять их. Просто так много вещей, которые могут пойти не так. С другой стороны, поздравляю с окончательным отказом от 14-летнего программного обеспечения для баз данных!
Аарон Бертран

Ответы:

37

Первый шаг, который нужно сделать, - запустить помощник по обновлению базы данных SQL Server 2000 и решить все проблемы, о которых он сообщил.

Рекомендуется использовать инструмент Upgrade Advisor в устаревшей базе данных SQL Server 2000 и импортировать файл трассировки в инструмент Upgrade Advisor для анализа. Файл трассировки позволяет помощнику по обновлению обнаруживать проблемы, которые могут не отображаться при простом сканировании базы данных, например, при внедрении TSQL в приложения. Вы можете захватывать трассировки TSQL с помощью SQL Profiler на вашем сервере SQL Server 2000 в обычные часы и анализировать эти трассировки с помощью помощника по обновлению.

Таким образом, остальные шаги будут:

В день миграции:

  1. Сценарий наших входов в систему на сервере 2000 с помощью sp_help_revlogin .
  2. Сценарий работы и связанных серверов с сервера SQL 2000.
  3. прекратить подключение веб-серверов к серверу 2000. Убедитесь, что к серверу 2000 не подключено ни одного приложения.
  4. сделайте резервную копию ваших баз данных и восстановите их на целевом сервере sql 2008 R2.
  5. После восстановления резервных копий на сервере 2008 R2 запустите выходные данные из sp_help_revlogin на сервере 2008 R2, чтобы воссоздать имена входа.
  6. Синхронизируйте потерянных пользователей (если есть) и заново создайте задания агента SQL и связанные серверы на новом сервере.
  7. изменить уровень совместимости на восстановленных базах данных до 100.
  8. Dbcc checkdb с включенными опциями all_errormsgs и data_purity: DBCC CHECKDB ('<db_name_goes_here>' ) WITH ALL_ERRORMSGS,NO_INFOMSGS, DATA_PURITY
  9. запустить DBCC UPDATEUSAGE на восстановленных базах данных DBCC UPDATEUSAGE('database_name') WITH COUNT_ROWS
  10. Обновите статистику по всем таблицам с полной проверкой: Update Statistics table_name with FULLSCAN
  11. Необязательно: Проверьте уровни фрагментации и, в зависимости от уровня фрагментации, запустите reorg / rebuild всех индексов. Вы можете использовать скрипты Олы .
  12. Перекомпилируйте все SP, используя sp_recompile 'procedureName'
  13. Обновить ваши взгляды SP_REFRESHVIEW view_name
  14. Обязательно измените параметр базы данных: проверьте страницу на CHECKSUM.
  15. Измените модель восстановления (если она отличается от SQL 2000) на ПОЛНАЯ. Если вы переключитесь на модель полного восстановления, ПОЧИТАЙТЕ, что вы часто делаете резервные копии журнала транзакций. Это поможет вам восстановить на определенный момент времени, а также не раздувать ваш T-Log.
  16. В SQL Server 2005 и более поздних версиях была представлена Почта базы данных . Поэтому вам нужно перейти с SQLMail на Database Mail.

    USE [master]
    GO
    sp_configure 'show advanced options',1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    sp_configure 'Database Mail XPs',1
    GO
    RECONFIGURE 
    GO

Кроме того, если у вас есть какие-либо репликации, вы должны сбросить его. Если какой-либо DR, например, logshipping или Mirroring (новый в 2005 году и выше, но в 2012 году устарел), то вам также необходимо сбросить его.

Старые пакеты DTS необходимо перенести в SSIS с помощью C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTSMigrationWizard.exe(командной строки) или мастера миграции пакетов .

Также вы можете использовать мой скрипт, который можно найти по адресу /dba//a/36701/8783 . Хотя он использует метод detach / attach, я настоятельно рекомендую вам использовать метод BACKUP / RESTORE . Измените сценарий соответственно.


Как примечание стороны:

  • включите мгновенную инициализацию файла на новом сервере.
  • Иметь несколько файлов данных tempdb с одинаковым размером.
  • Включить флаг трассировки 1118
  • Настройте максимальную и минимальную память правильно. Особенно Макс памяти вдали от настроек по умолчанию.
  • Правильно настройте параметры MAXDOP. Обратитесь к /dba//a/36578/8783 для получения дополнительной информации.
  • Лучше всего установить sp_Blitz от Brent Ozar. Запустите его и устраните критические и высокоприоритетные проблемы, о которых он сообщает.
  • Вы даже можете использовать SQL Power Doc от kendalvandyke - SQL Power Doc работает со всеми версиями SQL Server от SQL Server 2000 до 2012 и всеми версиями Windows Server и операционных систем Windows для потребителя от Windows 2000 и Windows XP до Windows Server 2012 и Windows 8. Также полезно для планирования обновлений - посмотрите, какие скрытые функции используются в экземпляре.
  • Включите Оптимизацию для специальных рабочих нагрузок и Параметры сжатия резервных копий по умолчанию.

Давайте ответим на ваши вопросы ...

Что еще я должен сделать, чтобы завершить миграцию?

Обратитесь к моему ответу. Это поможет вам правильно составить план миграции. Всегда проверяйте свой план миграции в UAT (непроизводственном) вместе с надлежащим тестированием приложений бизнес-пользователями.

использовать новые функции, такие как контрольная сумма и полная модель восстановления.

CHECKSUMявляется новым в SQL Server 2005 и выше. Я рассмотрел это как часть шагов миграции, описанных выше.

full recovery modelне нова Это зависит от типа вашего бизнеса и определяет, сколько данных вы можете потерять в случае аварии.

Режим полного восстановления с частыми резервными копиями журналов транзакций позволит вам восстановить данные на определенный момент времени и сократить объем потерь данных.

сделать эту базу данных точно такой же, как она была создана в SQL Server 2008 R2.

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

Не до конца понимаю это! Но вышеперечисленные шаги миграции помогут вам. Вам просто нужно восстановить базу данных и изменить уровень совместимости 10 100вместе с вышеуказанными шагами.

Я просто хочу знать, как правильно и полностью преобразовать старую базу данных SQL Server 2000 в новую базу данных 2008 R2, быть спокойным, что все сделано правильно, и радоваться всем новым функциям.

Вы должны быть осторожны с этим, так как это потребует внесения изменений и в код вашего приложения. Если код вашего приложения изменен для использования новых функций в SQL Server 2008 R2, то у вас не возникнет никаких проблем - при условии, что вы полностью выполнили полное регрессионное тестирование своего приложения в среде UAT или DEV. Это даст вам максимальную уверенность, когда вы будете выполнять фактическую миграцию в PROD.


Примечание: выше приведены шаги, которые я мог запомнить, и я почти уверен, что ничего не пропущено. Если я увижу, что я что-то пропустил, то я добавлю это или других экспертов на этот сайт - не стесняйтесь добавлять!

Все, что описано выше, необходимо сначала воспроизвести в среде NON PRODUCTION, чтобы избежать неожиданностей во время фактической миграции.

----------

Еще несколько вопросов:

Вы рекомендуете использовать метод резервного копирования / восстановления, но я сделал, как написано выше, так что я могу столкнуться с какими-либо проблемами сейчас? Все работало без проблем.

Если все работало нормально, и вы смогли присоединить базу данных, то НИКАКИХ проблем не возникнет. Отсоединение / Присоединение к резервному копированию / восстановлению - это всего лишь метод перемещения вашей базы данных в другое место. Просто к вашему сведению. Резервное копирование / восстановление более надежно и надежно, так как если что-то пойдет не так (в худшем случае), то, по крайней мере, у вас есть резервная копия для восстановления и восстановления базы данных.

О контрольной сумме и модели полного восстановления: она не была доступна / включена на SQL Server 2000, поэтому я хочу использовать их сейчас. Вы сказали, что мне нужно только включить эти параметры в свойствах базы данных? Я где-то читал, что этого недостаточно, и я должен также перестроить индексы или что-то в этом роде. Я действительно не знаю, я просто спрашиваю.

Как я уже сказал, контрольная сумма является новой в версии 2005 и выше. Это механизм, с помощью которого SQL Server обнаруживает повреждение страницы, особенно из-за ввода-вывода. Обратитесь к моему ответу здесь для более подробной информации.

Чтобы включить CHECKSUM, а также изменить модель восстановления на FULL, вы можете сделать это, используя приведенный ниже код T-SQL:

USE master;
GO
ALTER DATABASE [your_database_name] -- change this !!
SET RECOVERY FULL, PAGE_VERIFY CHECKSUM;
GO

Примечание. После настройки параметров базы данных она будет сохранена при переходе с 2008R2 на 2012 год.

Я готовлюсь к переносу этой базы данных в SQL Server 2012 - сначала это было с 2000 по 2008 R2, а теперь с 2008 R2 по 2012 (это было невозможно сделать напрямую из-за отсутствия поддержки 2000 баз данных в SQL Сервер 2012). Итак, я понимаю, что должен следовать вашему руководству: сделайте резервную копию в 2008 R2 и восстановите в 2012, а затем сделайте остальные ваши советы, верно?

Да, пожалуйста. Как я уже сказал, резервное копирование является предпочтительным методом, если у вас нет веских причин не делать этого.

Пожалуйста, объясните мне метод резервного копирования / восстановления: это как сброс базы данных в SQL-запросы, а затем восстановление, выполнив несколько запросов? Будет ли этот метод кстати "дефрагментировать" мою базу данных? Если нет, то как его дефрагментировать / оптимизировать вручную?

Резервное копирование / восстановление ... похоже на дамп и загрузку, используемые в Sybase, Oracle или, возможно, MySQL. Это просто SQL Server называет это .. резервное копирование / восстановление.

Необходимо прочитать: Понимание резервного копирования SQL Server Пола Рэндалла.

Простой синтаксис (полный синтаксис см. BOL ):

backup database database_name
to disk = 'D:\backup\database_name_full.bak'
with init, stats =10

Затем восстановление можно выполнить на целевом сервере как:

- при условии, что расположение диска назначения не соответствует исходному серверу

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
move 'logical_data_fileName' to 'physical_path\database_name.mdf'
move 'logical_log_fileName' to 'physical_path\database_name_log.ldf'
with recovery, stats = 10

- предполагая, что расположение диска назначения соответствует исходному серверу

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
with recovery, stats = 10

Будет ли этот метод кстати "дефрагментировать" мою базу данных? Если нет, то как его дефрагментировать / оптимизировать вручную?

резервное копирование / восстановление не будет дефрагментировать вашу базу данных. Вы должны использовать Alter Index Reorganize или Rebuild в зависимости от уровня фрагментации.

Поскольку вы новичок в SQL Server, я настоятельно рекомендую вам использовать Ola Hallengren's:

Поскольку мы использовали SQL Server 2000 Express в течение многих лет (без интерфейса управления), мы делали резервные копии, просто останавливая движок и RAR каталог DATA. Пока, как мы работаем на SQL Server 2008, разве это не лучше, чем использование функции резервного копирования в Management Studio?

Остановка двигателя - худшая вещь, которую вы можете сделать для резервного копирования!

Прочитайте ссылку Пола о резервных копиях, которые я упомянул, и используйте сценарий Олы. У Microsoft есть статья в КБ со сценарием автоматического создания резервных копий - Как планировать и автоматизировать резервное копирование баз данных SQL Server в SQL Server Express

Режим полного восстановления с частыми резервными копиями журнала транзакций - где хранится журнал транзакций - это файл LDF? Как правильно сделать резервную копию?

Каждая база данных SQL Server имеет журнал, в котором записываются все транзакции и изменения базы данных, сделанные каждой транзакцией. Журнал транзакций является критическим компонентом любой базы данных.

Обычное расширение соглашения об именах для журнала транзакций - «.LDF», но оно может быть любым.

Я не собираюсь больше писать об этом, так как это сделает ответ очень скудным. Обратитесь к Transaction Log Management и мой ответ здесь имеет отличные связи , а также.


РЕДАКТИРОВАТЬ: 24.08.2016 .. Это поможет будущим читателям:

Если вы переносите весь свой экземпляр с одной версии на другую, я настоятельно рекомендую использовать решение на основе PowerShell.Start-SqlMigration

введите описание изображения здесь

Кин Шах
источник