Могу ли я иметь полные резервные копии на нескольких дисках?

8

В настоящее время у меня есть только один файл резервной копии, IMTDB.bak, и он находится на том же жестком диске, что и сама база данных. Я хочу увеличить избыточность этой резервной копии БД, по сути «копируя» ее на другой диск, но я получаю ошибку «Резервное копирование не выполнено для сервера. Носитель отформатирован для поддержки двух семейств носителей». Я думаю, это означает, что когда я создавал резервную копию, она предназначалась только для размещения резервной копии на одном диске, и я не могу задним числом добавить больше. Я хочу перенести резервную копию на этот другой диск (на самом деле просто скопируйте ее), но мне не нужно удалять текущую резервную копию, чтобы сделать это.

Что я делаю? Безопасно ли мне просто скопировать IMTDB.bak в папку на другом диске?

ijustlovemath
источник
конечно. Использование проводника для копирования файла из одного места в другое не является проблемой. Возможно, вы захотите взглянуть на автоматизацию процесса, возможно, с помощью планировщика Windows.
Макс Вернон
Где и как вы видите эту ошибку: «Ошибка резервного копирования для сервера. Носитель отформатирован для поддержки двух семейств носителей»
Макс Вернон
При переходе в Задачи -> Резервное копирование и попытке сделать «Добавить» и выбрать диск, который у меня есть.
ijustlovemath
При добавлении другого диска резервная копия будет просто распределена по нескольким дискам, что еще больше снизит надежность файла резервной копии, поскольку в случае сбоя одного из двух дисков файл резервной копии будет непригодным для использования. Сделайте, как предлагает @Kin в своем ответе, и используйте команду T-SQL BACKUP DATABASEдля резервного копирования в два места одновременно.
Макс Вернон

Ответы:

12

Поскольку вы не знакомы с командой T-SQL BACKUP DATABASE, я решил добавить некоторые подробности об этом.

Возможно, вы захотите выполнить что-то вроде следующего утверждения через службу планировщика задач Windows, поскольку у вас нет доступа к агенту SQL Server (как я вижу из ваших других вопросов, вы используете SQL Server Express).

BACKUP DATABASE [xyz]
TO DISK = 'C:\somepath\mybackupfile.bak'
MIRROR TO DISK = 'D:\somepath\myotherbackupfile.bak'
WITH FORMAT
    , INIT
    , SKIP
    , STATS = 1;

Возможно, вы захотите рассмотреть возможность MIRROR TOуказания пункта в каком-то месте, которое находится не на вашем локальном компьютере, поскольку, если вы полностью потеряете свой локальный компьютер, вы не сможете получить доступ ни к одному из файлов резервных копий. Указание MIRROR TOпредложения требует, чтобы вы указали FORMATключевое слово в WITHпредложении при первом запуске этого оператора резервного копирования.

Вы можете использовать имя \\SomeServer\SQLBackups\MyBackupFile.bakобщего ресурса Windows, например, если разрешения безопасности для общего ресурса разрешают доступ к службе планировщика Windows.

Эта WITH FORMAT, INITчасть указывает SQL Server перезаписывать любые существующие резервные копии, которые могут быть в файлах резервных копий. Вы можете изменить это на WITH NOINITодин раз после завершения первой зеркальной резервной копии, если вы хотите сохранить в этих файлах несколько резервных копий (т.е. резервных копий из разных моментов времени). NOSKIPкроме всего прочего, указывает SQL Server не проверять срок действия резервной копии. STATS = 1будет отображать вывод в 1процентах. Вы можете изменить это число на что угодно. Я использую 1для очень больших баз данных, так как это дает некоторое представление о прогрессе.

Чтобы запустить его через службу планировщика задач Windows, вам нужно сохранить эту команду (после того, как вы проверили ее в SQL Server Management Studio) в файл на вашем диске; давайте назовем это C:\somefolder\BackupMyDB.sql. Затем вы захотите добавить следующую команду в планировщик Windows:

<path to sqlcmd>sqlcmd -S localhost -E -i C:\somefolder\BackupMyDB.sql

Вам захочется, чтобы эта задача «выполнялась от вас».

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

Процесс восстановления будет использовать команду что-то вроде:

RESTORE DATABASE [xyz]
FROM DISK = 'D:\somepath\myotherbackupfile.bak'
WITH RECOVERY
    , STATS = 1;

Имейте RESTORE DATABASEв виду , что запуск на компьютере, где находится ваша текущая база данных, может перезаписать текущую базу данных без подтверждения или предупреждения, поэтому, пожалуйста, убедитесь, что вы тщательно оценили имя базы данных, [xyz]в моем примере, и другие параметры, которые вы используете. (Это на самом деле не перезапишет существующую базу данных, если вы не добавите REPLACEключевое слово в WITHпредложение - я просто хочу подчеркнуть, что нужно быть осторожным.)

Макс Вернон
источник
Спасибо! Поскольку в моем файле .bak уже есть несколько резервных копий, будет ли созданное автоматически зеркало включать эти резервные копии? Или только самый последний?
ijustlovemath
Я бы предложил переместить этот файл куда-нибудь, если вы хотите сохранить его, поскольку он MIRRORтребует отформатировать файл резервной копии при первом его использовании, что приведет к удалению всех резервных копий в этом файле.
Макс Вернон
1
Еще раз спасибо за детали в вашем посте. Действительно полезно для новичка без каких-либо других ресурсов!
ijustlovemath
с удовольствием. Я не могу не подчеркнуть важность проверенной и надежной стратегии резервного копирования и восстановления . Я рекомендовал протестировать восстановление на другой машине, чтобы у вас не было возможности засорять существующую базу данных, что легко сделать, когда вы учитесь.
Макс Вернон
5

Вы можете использовать backup database .... MIRROR TO DISK =для резервного копирования базы данных в другое место.

Безопасно ли мне просто скопировать IMTDB.bak в папку на другом диске?

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

Примечание. Убедитесь, что вы используете T-SQL, а не графический интерфейс, который имеет ограниченные возможности резервного копирования.

Кин Шах
источник
Какие рекомендуемые варианты здесь? Моя база данных очень простая, всего четыре таблицы, три из которых имеют только 90000 строк, а четвертая имеет ~ 75M. Это также фиксированный размер; больше данных не будет добавлено к нему. Я буду только выполнять запросы против него.
ijustlovemath
5
Я бы посоветовал вам перевести свою БД в read_onlyрежим и просто сделать последнюю резервную копию с помощью COMPRESSION. Храните его в надежном месте.
Кин Шах