Невозможно использовать файл резервной копии так как он был изначально отформатирован с размером 512
В нашей среде разработки мы долгое время использовали определенный сценарий резервного копирования и восстановления для каждого из наших продуктов с использованием различных версий SQL Server и различных конфигураций среды без каких-либо проблем.
Недавно мы обновились до SQL Server 2012 в качестве нашего стандартного сервера разработки с уровнем совместимости SQL 2005 (90) для обеспечения поддержки устаревших систем. Теперь мы обнаруживаем, что на одном конкретном компьютере разработчика мы получаем следующую ошибку при попытке сделать резервную копию базы данных:
Невозможно использовать файл резервной копии 'D:\MyDB.bak', поскольку он был изначально отформатирован с размером сектора 512 и теперь находится на устройстве с размером сектора 4096. BACKUP DATABASE ненормально завершается.
С командой быть:
Любопытно, что ни аппаратное обеспечение, ни разделы на машине этого разработчика не изменились, хотя размер их секторов отличается, это ранее не было проблемой.
С моим запросом:
Может кто-нибудь пролить свет на то, как я могу выполнять резервное копирование и восстановление базы данных на жесткие диски с различными размерами секторов?
Эта проблема вызвана различными размерами секторов, используемых разными дисками.
Вы можете решить эту проблему, изменив исходную команду резервного копирования на:
Обратите внимание, что я изменил NOFORMAT на FORMAT и удалил NOSKIP.
Все, что вам нужно сделать, это подкрепить его другим именем.
Просто удалите существующий файл.bak и запустите заново.
У нас была такая же проблема с 2005 по 2008 год. Проблема заключалась в том, что мы пытались использовать тот же файл резервной копии в 2008 году, который мы использовали в 2005 году (добавление резервных копий в один файл).
Мы изменили скрипт для резервного копирования в другой файл, и проблема была решена. Я полагаю, что перемещение / удаление старого файла будет иметь такой же эффект
Я столкнулся с той же проблемой, что и ОП. На компьютере разработчика у нас был сценарий PowerShell, который выполнял резервное копирование баз данных с удаленных серверов баз данных и сохранял файлы резервных копий локально. Сценарий перезаписывал одни и те же файлы резервных копий, снова и снова, и сценарий работал отлично в течение пары лет. Затем я клонировал диск с вращающимся носителем на SSD в машине разработчика. Внезапно мы получили ту же ошибку, что и OP:
Backup-SqlDatabase: System.Data.SqlClient.SqlError: Невозможно использовать файл резервной копии '\DevMachine\Back-Up\Demo.bak', поскольку он изначально был отформатирован с размером сектора 4096 и теперь находится на устройстве с размером сектора 512.
Конечно, я мог бы удалить все существующие .bak файлы для решения проблемы. Но что, если это случится снова? Я хотел, чтобы решение для командной строки работало последовательно.
Вот наш оригинальный код:
После некоторого возни я изменил его на следующее, чтобы решить проблему:
По сути, для решения проблемы были добавлены следующие параметры:
Я обнаружил, что если бы я использовал -FormatMedia Опция сама по себе выдает следующую ошибку:
Backup-SqlDatabase: свойства FormatMedia и SkipTapeHeader имеют конфликтующие настройки.
Я исправил вторую ошибку, добавив дополнительную опцию: -SkipTapeHeader , Понятно, что это также предназначено для резервного копирования на ленту, но это работало.
в нашей среде разработки мы уже давно используем определенный сценарий резервного копирования и восстановления для каждого из наших продуктов через различные версии SQL Server и различные конфигурации среды без проблем.
недавно мы обновили до SQL Server 2012 в качестве нашего стандартного сервера разработки с уровнем совместимости SQL 2005 (90) для поддержки устаревших систем. Теперь мы обнаруживаем, что на одной конкретной машине dev мы получаем следующую ошибку при попытке резервное копирование базы данных:
невозможно использовать файл резервной копии 'D:MyDB - . бак, потому что это было первоначально отформатирован с размером сектора 512 и теперь находится на устройстве с размер сектора 4096. Резервное копирование базы данных завершается ненормально.
любопытно, что ни аппаратное обеспечение, ни разделы на машине этого разработчика не изменились, хотя их размер сектора отличается, это ранее не было вопрос.
С моим запросом:
может ли кто - нибудь пролить свет на то, как я могу создавать резервные копии и восстанавливать базу данных на жесткие диски с разными размерами секторов?
эта проблема вызвана различными размерами секторов, используемых различными дисками.
эту проблему можно устранить, изменив исходную команду резервного копирования на:
обратите внимание, что я изменил NOFORMAT на формат и удалил NOSKIP.
все, что вам нужно сделать-это резервную копию с другим именем.
У нас была такая же проблема с 2005 по 2008 год. Проблема заключалась в том, что мы пытались использовать тот же файл резервной копии в 2008 году, что и в 2005 году (добавление резервных копий в 1 файл).
мы изменили сценарий на резервное копирование в другой файл, и проблема была решена. Я бы предположил, что перемещение/удаление старого файла будет иметь тот же эффект
просто удалите существующее .файл bak и повторный запуск.
я столкнулся с той же проблемой, что и OP. На компьютере разработчика у нас был сценарий PowerShell, который создавал резервные копии баз данных с удаленных серверов баз данных и сохранял файлы резервных копий локально. Сценарий переписывал одни и те же файлы резервных копий снова и снова, и сценарий работал нормально в течение нескольких лет. Затем я клонировал вращающийся носитель на SSD в dev-машине. Внезапно мы получили ту же ошибку, что и OP:
Резервное Копирование-SqlDatabase : Система.Данные.В sqlclient.SqlError: невозможно использовать файл резервной копии ' \DevMachine\Back-Up\Demo.бак, потому что это было первоначально отформатирован с размером сектора 4096 и теперь находится на устройстве с размер сектора 512.
конечно, я мог бы удалить все существующие .bak файлы для решения проблемы. Но что если это случится снова? Я хотел, чтобы решение командной строки постоянно работало.
вот наш исходный код:
после некоторого возиться, я изменил его на следующее, Чтобы устранить проблему:
в основном, для устранения проблемы были добавлены следующие параметры:
я обнаружил, что если я использовал -FormatMedia опция сама по себе, она породила следующую ошибку:
Backup-SqlDatabase: свойства FormatMedia и SkipTapeHeader имеют конфликтующие настройки.
я исправил вторую ошибку, добавив дополнительный параметр: -SkipTapeHeader . Ясно, что это также предназначено для резервного копирования на ленту, но это сработало.
У меня была такая же проблема, но только с восстановить. Я получил эту ошибку в Management studio:"указанное приведение недопустимо. (SqlManagerUI)" . и эта ошибка в запросе: "SQL Server не может обработать это семейство носителей."
затем я сделал простую вещь: я справился с резервным набором в папку резервного копирования по умолчанию. Например: C:\Program файлы\Майкрософт\иметь значение mssql10_50 SQL-сервера.SQLEXPRESS2008R2\MSSQL\Backup\bckup.бак!--4--> Это сработало. Я восстановил его из этого места. :- S похоже, что SQL чувствителен к размеру сектора.
У меня есть сценарий PowerShell, который копирует резервные копии из производственной среды и восстанавливает их в локальный экземпляр sql server, чтобы выполнить некоторые операции с базой данных, а затем повторно создает резервные копии на локальный диск.
Часть этой команды использует команду Restore-SqlDatabase .
Это происходит из-за разницы размеров секторов в моей машине (4096) и производственной среде (512).
Невозможно использовать файл резервной копии ".bak", поскольку он изначально был отформатирован с размером сектора 512 и теперь находится на устройстве с размером сектора 4096
Я хочу автоматизировать этот рабочий процесс, поэтому ищу способ запустить этот скрипт независимо от размера сектора целевой машины или производственной среды. Есть ли в любом случае в пределах PowerShell, чтобы обойти эту проблему?
Я знаю ответы на этот вопрос , но конкретно я хочу сделать это в powershell (с помощью команды Restore-SqlDatabase), а не в SQL.
1 ответ
В нашей среде разработки мы уже давно используем определенный сценарий резервного копирования и восстановления для каждого из наших продуктов с помощью различных версий SQL Server и различных конфигураций среды без каких-либо проблем. Недавно мы обновились до SQL Server 2012 в качестве нашего.
Я установил DB2 version 10.1 на новую машину под управлением Windows Server 2012 и попытался восстановить базу данных из резервной копии, сделанной с использованием DB2 version 9.7 Я получил эту ошибку при попытке восстановить базу данных Что я могу сделать, чтобы восстановить базу данных из этой.
Можно диктовать размер сектора во время Restore-SqlDatabase с параметром BlockSize . Размер блока, который вы передаете здесь, должен быть размером блока вашего физического жесткого диска.
Размер блока можно определить программно с помощью следующей команды:
Команда Backup-SqlDatabase также принимает аргумент -BlockSize , однако установка этого параметра на исходный размер блока или размер блока моей машины не сработала при перезаписи исходного файла резервной копии.
Можно было полностью опустить этот параметр и просто получить резервную копию для сохранения в другом месте на диске. В этом случае SQL Server выберет размер блока жесткого диска (4096 в моем случае).
Похожие вопросы:
Я хочу, чтобы переместить существующий экземпляр Server 2008 с компактом/компании hostway, чтобы Azure. Могу ли я сделать полную резервную копию OS/data, скопировать файл резервной копии на сервер.
Я пытаюсь восстановить базу данных, сначала восстановив полную резервную копию, а затем восстановив дифференциальную резервную копию с помощью класса Microsoft.SqlServer.Management.Smo.Restore.
В SQL Server 2005 Integration Services как я могу автоматически инициировать восстановление файла резервной копии журнала транзакций?
В нашей среде разработки мы уже давно используем определенный сценарий резервного копирования и восстановления для каждого из наших продуктов с помощью различных версий SQL Server и различных.
Я установил DB2 version 10.1 на новую машину под управлением Windows Server 2012 и попытался восстановить базу данных из резервной копии, сделанной с использованием DB2 version 9.7 Я получил эту.
У меня есть полные, дифференциальные и транзакционные резервные копии базы данных. Я пытался восстановить одну за другой; но восстанавливается только полная резервная копия, но после этого, когда я.
У меня есть две полные резервные копии разных дат первая полная резервная копия имеет дату , допустим, 21-05-2017, и я восстановил эту резервную копию на клиентской машине (восстановление без.
Я пытаюсь импортировать базу данных SQL Server из AWS SQL Server в Azure SQL Server. Ниже приведены шаги, которые я делаю для процесса импорта : Резервное копирование базы данных из AWS SQL Server в.
У меня есть довольно начинающий вопрос. Допустим, я случайно удалил запись (запись, а не файл) из своей базы данных FM. Как восстановить эту запись из резервной копии, а не просто скопировать все.
Я узнал, как выполнить потоковое резервное копирование из этого поста . Теперь я столкнулся с обратной проблемой-я хочу выполнить восстановление из файла резервной копии. Это довольно просто, когда.
Изначально эта статья задумывалась только для разработчиков и администраторов СУБД Firebird, но после общения с администраторами других БД выяснилось, что большинство ошибок общие, и на очень похожие грабли наступают буквально все. Если Вы можете что-то добавить к этому списку (пусть даже специфическое для конкретной СУБД), пишите в личную почту или в комментариях.
In English: 12 Common Mistakes while Backing Up Databases
Наша компания занимается инструментами восстановления, резервного копирования, оптимизации и поддержкой СУБД (в основном Firebird, но есть и MSSQL, PostgreSQL, InterBase и др.) и, как результат многочисленных аудитов и ремонтов, накопила коллекцию ошибок, связанных с резервным копированием. Все пункты ниже изложены по мотивам реальных случаев с повреждением баз, потерей и повреждением бэкапов, дисков, сбоями серверов, и прочих «радостей» администраторов БД.
Хотелось бы о них рассказать, чтобы администраторы и разработчики могли поменять свои подходы к управлению бэкапами и предупредить возможные проблемы.
Итак, приступим.
1. Удаление предыдущей копии бэкапа до того, как будет создана новая копия бэкапа
Чаще всего эту ошибку совершают новички, которые не понимают, что основная цель существования резервной копии БД – обеспечить минимальный простой информационной системы (важной частью которой является БД), а не просто создание копии БД.
В результате, с момента удаления последнего бэкапа до создания нового, система находится в незащищенном состоянии, потому что в этот период у базы данных нет ни одной резервной копии. Так как бэкап может создаваться достаточно долго, то это идеальное время для срабатывания закона Мерфи. Особенно хорошо этот подход работает в связке с пунктом 7 (см. ниже).
Рекомендация: не удаляйте предыдущий бэкап до того момента, как создан новый! (и не делайте новый бэкап в уже существующий файл)
2. Перезапись существующей базы данных при восстановлении из бэкапа
Эту ошибку совершают реже, но вот результаты могут быть гораздо печальнее. Если бэкап не проверялся и был поврежден (см. пункт 6), то в результате перезаписи у вас не будет ни предыдущей копии базы, ни валидного бэкапа.
Обычно это безобразие случается в пятницу вечером, в момент дерготни, неразберихи и противоречивых указаний со стороны начальства. Немного отрицательного везения и томные выходные в серверной обеспечены.
У Firebird есть некая защита от этой ошибки – создание рестора из бэкапа с помощью утилиты gbak с дефолтным ключом –create не сработает в случае, если указанное имя файла указывает на существующую БД. К сожалению, есть и обход этой защиты – переключатель –rep, который позволяет-таки переписать существующий файл.
Рекомендации: никогда не перезаписывайте файл боевой БД, не получив письменного указания руководства и, желательно, не получив предложения о новой работе.
3. Использование одношагового бэкапа-рестора, без создания промежуточного файла бэкапа
Стандартные потоки ввода-вывода позволяют провернуть с многими СУБД (с Firebird в том числе) интересный трюк: выполнять потоковый бэкап с немедленным восстановлением БД из него. В результате не создается промежуточный файл бэкапа. Это удобно для проведения регламентных работ и запуска проверочного восстановления (при наличии другой резервной копии), но ни в коем случае не надо использовать это для автоматического бэкапа!
Если в процессе такого бэкап-рестора произойдет серьёзный сбой диска, например, то может повредиться исходная база данных, а новая еще не будет создана. Конечно, если п.1 соблюдается, и есть копия БД от предыдущей попытки, то произойдет только потеря данных, которые были созданы или изменены в БД с момента создания ее копии.
Рекомендации: не используйте одношаговый бэкап-рестор в автоматическом режиме, а в ручном всегда проверяйте наличие достаточно свежей копии.
4. Хранение бэкапа и базы данных на одном и том же физическом устройстве
Тут многие могут посмеяться, что советы мы какие-то детские даем – это же азбука системного администрирования. Так-то оно так, но в связи с распространением виртуальных сред и БД, и диск могут находиться на одной СХД. А она обязательно сломается в самый неподходящий для бизнеса момент. Плюс, все еще существуют люди, которые верят в то, что если они используют RAID (от 1 и выше), то с их данными вообще ничего не может случиться. Еще есть люди, которые верят в сверхнадежность «брендового» железа, но это особый случай.
Рекомендации: не храните бэкап и БД на одном и том же физическом устройстве, каким бы надежным оно не казалась.
5. Отсутствие проверки успешного окончания бэкапа
Вот это довольно частая ошибка и администраторов, и руководителей ИТ подразделений. Если результат бэкапа не проверять, то можно бэкап не делать вообще — результат в общем тот же. Обязательно нужны нотификации по email об успешном бэкапе, а еще лучше и по СМС. Причем, отсутствие нотификации это признак проблемы!
А причем тут руководители, спросит внимательный читатель, дочитавший до этого места? А притом, что администратор обычно бэкап настроит, но вот нотификации ему проверять лень, тем более что лежат они у него в отдельной папочке, и поэтому руководителю ИТ-отдела надо периодически запрашивать дополнительный отчет о состоянии всех бэкапов. Это к вопросу, кого наказывать, если бэкапы вроде есть, но в нужный момент их не оказалось :)
! А при комбинировании с пунктом 2 получаем отсутствие и базы, и бэкапа.
Рекомендации: использовать инструменты автоматизации бэкапов, которые умеют отслеживать успешные и неуспешные бэкапы, сообщать пользователям о проблемах, и имеют обзорные средства контроля (особенно актуально, когда нужно контролировать десятки и сотни бэкапов на разных серверах).
6. Отсутствие валидации бэкапов
То, что бэкапы куда-то кладутся, не означает, что они оттуда могут быть прочитаны.
Поэтому обязательна периодическая верификация создаваемых бэкапов, чтобы быть уверенным, что создаваемые бэкапы не повреждены, не были скопированы в /dev/null
Рекомендации: никому не доверять, даже себе. Всех надо проверять.
7. Отсутствие health check базы данных при использовании неверифицированных бэкапов
Обычно СУБД имеют несколько видов бэкапа – дампы, просто бэкапы и т.д. Не вдаваясь в конкретику, можно выделить 2 категории – верифицированные и неверифицированные бэкапы. У Firebird это gbak и nbackup.
Gbak читает всю БД на уровне записей для создания файла бэкапа, и создает БД путем вставки записей в новую БД, и таким образом верифицирует и бэкап (есть варианты, как ошибки могут просочиться в отресторенную копию, но это уже другой вид факапа администратора БД, связанный с неверной миграцией), и саму базы данных (если она может быть прочитана от начала до конца, то с большой долей вероятности она не повреждена).
Nbackup (он же инкрементальный бэкап) – временно блокирует основной файл БД на запись (в консистентном состоянии), и позволяет быстро скопировать файл базы данных (полностью или частично/инкрементально).
Для больших БД Firebird (более 500Гб), предпочтительно делать nbackup, чтобы не тормозить работу пользователей, но при этом нужно проверять БД, ведь созданные неверифицированные бэкапы – это страничные копии БД, и если ошибка гнездится на уровне записей (такое случается из-за сбоя RAM) или на логическом уровне, то неверифицированный бэкап будет ее содержать так же, как и оригинальная БД.
Для этого нужно использовать онлайн-валидацию исходной базы данных (в Firebird начиная с версии 2.5.4 доступна онлайн-валидация при помощи gfix, а наш инструмент FBDataGuard поддерживает онлайн-проверку БД для версий 1.5-2.5).
Также, в дополнение к неверифицированному бэкапу желательно периодически (раз в неделю, например) делать верифицированный бэкап.
Для других СУБД необходимо использовать соответствующие средства и комбинации проверок.
8. Отсутствие контроля за свободным местом для бэкапа
В общем-то, это классическая ошибка — при недостатке места бэкап занимает все свободное место и аварийно завершается. При размещении бэкапа на одном диске вместе с БД может привести к остановке работы с БД, при размещении на системном диске – к поломке системы.
В комбинации с пунктом 4 в лучшем случае получим остановку работы системы, потому что базе данных тоже нужно свободное место, а оно кончилось из-за бэкапа.
А в комбинации с пунктами 5 и 2 опять получаем в результате отсутствие и базы, и бэкапа.
Рекомендации: использовать инструменты для бэкапа, которые делают прогноз размера бэкапа и предупреждают о возможной нехватке места.
10. Исполнение бэкапа БД во время применения апдейтов ОС
Очень частая проблема, особенно в комбинации с п.9 и включенными автоматическими апдейтами Windows (которые по умолчанию происходят в 3 ночи). В лучшем случае приводит к замедлению процесса, а если ОС перегружается для применения апдейтов, то бэкап будет испорчен. Хорошо еще, что апдейты ОС не каждый день случаются.
Рекомендации: Если нельзя отключить, то назначьте апдейты ОС на такое время, когда они не смогут помешать бэкапам.
- полностью выключать сервисы и процессы СУБД, чтобы ничего не находилось в кэше,
- использовать агенты и/или скрипты, переводящие базы данных в специальный режим, когда копирование файла БД последовательным образом является безопасным.
Кое-кто из администраторов БД убежден, что если в СУБД есть лог транзакций, то такую БД можно безопасно бэкапить стандартными файловыми средствами, в крайнем случае будет повреждение только этого лога. Это опасное заблуждение, которое не поддерживается производителями СУБД.
Корни этого заблуждения понятны: агрессивная реклама от производителей виртуальных машин и от производителей средств бэкапа обычно умалчивает о том, что для БД и других активно изменяемых файлов необходимы дополнительные настройки. Не доверяйте рекламе — не все йогурты одинаково полезны.
Рекомендации: не используйте файловые средства бэкапа и средства бэкапа VM без соответствующих средств автоматизации.
12. Подмена бэкапа репликацией
Бэкап и репликация данных служат повышению надежности и предотвращению потери данных, но все же существенно отличаются.
Все любят репликацию за способность синхронизировать данные на другом сервере с минимальном задержкой, однако и у бэкапа есть ряд неоспоримых преимуществ. Например, в случае случайного (или намеренного) удаления данных репликация быстро и невозмутимо оттранслирует изменения на реплику, а бэкап, особенно на read-only носителе, к таким операциям невосприимчив. Настроить правильную репликацию, как и правильный бэкап, стоит определенных усилий, и вероятность ошибок там также существует.
Рекомендации: Если у вас настроена репликация, не пренебрегайте бэкапами, используйте их совместно.
Выводы
Правильно организовать резервное копирование для вашей любимой СУБД не так-то и просто, поэтому обычно администраторы БД из организаций, где ценят данные, обычно используют профессиональные инструменты для бэкапов, которые позволяют учесть и предотвратить описанные выше ошибки. Для Firebird (уж простите за рекламу) есть наш FBDataGuard, для других СУБД можно использовать DBArtisan или другие средства.
Ну, и конечно – не забывайте холить и лелеять свою админскую паранойю, например, возьмите и проверьте свои бэкапы… вот прямо сейчас!
Господа, просьба откликнуться в личку тех, кто использует CBT на VMWare для ВМ с БД.
Читайте также: