Почему это такая миссия для резервного копирования базы данных SQL Server 2008 Express? - PullRequest
1 голос
/ 16 ноября 2010

Я бы не охарактеризовал себя как боязнь перемен - но боюсь новых технологий? ДА, В САМОМ ДЕЛЕ! Технологии, начиная от операционных систем и заканчивая серверами баз данных, кажутся просто ошибочными, неэффективными и отсталыми по мере дальнейшего «прогресса»

MSDE 2000 (что в современном мире можно назвать «SQL 2000 Express»)

BACKUP [MyDatabase] TO FILE 'c:\backups\mybackup.backup'

SQL 2008 EXPRESS

Подожди! Это «пользовательский экземпляр» - для его резервного копирования нам нужно присоединить его к экземпляру сервера
Подожди! Для этого нам понадобится SQL Management Studio Express (загрузка 78 МБ)
Подожди! Когда мы заходим на наш экземпляр сервера. \ SQLEXPRESS и пытаемся присоединить нашу базу данных, это дает нам ошибку, которая буквально выглядит как ошибка в нашем проекте homebrew dev:

НАЗВАНИЕ: Microsoft SQL Server Management Studio

Невозможно отобразить запрошенное диалоговое окно.

------------------------------ ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Имя параметра: nColIndex Фактическое значение был -1. (Microsoft.SqlServer.GridControl)

Может кто-нибудь объяснить, как сделать резервную копию пользовательского экземпляра базы данных SQL Server 2008 Express в коде T-SQL?

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

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

НЕКОТОРЫЕ КЛЮЧЕВЫЕ СОВЕТЫ, ЧТОБЫ ЗАМЕТИТЬ, ПОПЫТАЯСЬ, ЧТОБЫ ПОЛУЧИТЬ РЕЗЕРВНОЕ КОПИРОВАНИЕ ПОЛЬЗОВАТЕЛЯ

a.) Подключение

Строка подключения должна выглядеть следующим образом:

Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Integrated Security=True;User Instance=True;Database=MyDatabaseAlias

существенно , чтобы ваша строка подключения давала соединению псевдоним Database=MyDatabaseAlias - этот псевдоним не может быть дублирован одновременно на той же машине, иначе ваше соединение может прерваться.

b.) Резервное копирование

Как указывалось выше, Transact SQL для резервного копирования базы данных аналогичен SQL MSDE / 2000/2005/2008 / R2 - после подключения базы данных и aliased !

BACKUP DATABASE MyDatabaseAlias TO DISK = 'c:\backups\mydatabase_20101117.backup'

Что действительно удивительно, так это ошибки bull $ h! T, которые вы можете получить, поскольку в строке подключения отсутствует псевдоним Database=MyDatabaseAlias part.

напримерНевозможно открыть физический файл 'c: \ Code \ MyProject \ App_Data \ MyDatabase.mdf' Ошибка операционной системы 32: «32 (процесс не может получить доступ к файлу, потому что он используется другим процессом.)». BACKUP DATABASE завершаетсяненормально.

в.) Восстановление

USE [master]; RESTORE DATABASE MyDatabaseAlias FROM DISK = 'c:\backups\mydatabase_20101117.backup'  WITH REPLACE

Не забудьте все необходимое USE [master]; в начале этого утверждения (и обратите внимание, что все его в одной строке для тех, кто выполняет команду из DataContext или аналогичного) Если вы это сделаете, она не сможет перезаписать существующую базу данных, потому что вы все равно будете к ней подключены.

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

1 голос
/ 16 ноября 2010

Хм, если это пользовательский экземпляр, то самая простая стратегия резервного копирования - скопировать файл.(хотя он не подключен к SQL Server).

Если вам нужна более комплексная стратегия резервного копирования (например, транзакционное резервное копирование), то вам действительно следует искать более полную базу данных (например, «обычную» базу данных, прикрепленную кполный экземпляр SQL Server)

...