Разное

Restore database ms sql: MS SQL Server — Restoring Databases

Содержание

Восстановление отдельных страниц в базе данных / Хабр

Предисловие

Статья Gail Shaw «Help, my database is corrupt. Now what?», перевод которой я запостил на прошлой неделе, вызвала, вроде бы, определенный интерес, но она, увы, не содержала «практики». Да, там написано как можно спасти данные, но нет никаких примеров.
Изначально я хотел сделать еще один перевод все того же автора, но, подумав, решил написать пост «от себя», как бы «по мотивам». Причины, побудившие меня поступить так, я опишу в конце поста, в примечаниях.

Восстановление баз данных в SQL Server

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

SQL Server предоставляет множество возможностей для восстановления баз данных. Во-первых, это восстановление базы данных целиком — оно может занимать довольно много времени (зависит от размера БД и скорости жестких дисков). Во-вторых, восстановление отдельных файловых групп, либо файлов, если ваша БД состоит из нескольких файловых групп (или, соответствено, файлов). В этом случае, есть возможность восстановления только поврежденных частей БД, не затрагивая остальных. Эти два вида восстановления БД используются довольно часто и затрагиваться в дальнейшем не будут.
В-третьих, в SQL Server 2005 появилась возможность восстановления отдельных страниц БД — в этом случае из бэкапа будут восстановлены только указанные страницы. Такое восстановление будет особенно актуально, если DBCC CHECKDB найдет несколько поврежденных страниц в какой-нибудь огромной таблице, «лежащей» в здоровенном файле. За счет того, что восстанавливаться будет не весь файл, и даже не вся таблица, а только несколько страниц — время простоя может быть значительно сокращено.

Требования и ограничения

Модель восстановления и доступность резервных копий журнала транзакций

Самое главное, что нужно помнить — для восстановления отдельных страниц, база данных должна использовать полную (full) модель восстановления, либо модель восстановления с неполным протоколированием (bulk-logged). Если ваши базы находятся в простой (simple) модели восстановления — дальше вы можете уже и не читать.
Второе требование — ваши полные бэкапы и бэкапы журнала транзакций должны образовывать неразрывную цепочку журналов (log chain). Если вы никогда не выполняете команду BACKUP LOG WITH TRUNCATE_ONLY (NO_LOG) и не переключаетесь в простую модель восстановления для того, чтобы уменьшить журнал транзакций, и у вас есть ВСЕ резервные копии журнала транзакций с момента последней полной резервной копии не содержащей поврежденных страниц (включая эту самую полную резервную копию) — за цепочку журналов можно не волноваться.
В модели восстановления с неполным протоколированием, теоретически, восстановление отдельных страниц должно работать нормально в том случае, если соблюдаются условия описанные выше, и восстанавливаемые страницы не изменялись операциями, выполняемыми с минимальным протоколированием.

Редакции SQL Server

Восстановление страниц возможно в любой редакции SQL Server, но для редакций Enterprise Edition и Developer Edition возможно восстановление поврежденных страниц on-line, т. е. к базе данных, во время восстановления, можно обращаться (и более того, обращаться можно даже к той таблице, к которой относятся восстанавливаемые в данный момент страницы, если сами эти страницы не будут «затрагиваться» — в противном случае, запрос завершится ошибкой). Для редакций «ниже» Enterprise Edition, восстановление страниц проходит в режиме off-line и база данных, на время восстановления, становится недоступной.

Тип поврежденной страницы

В том случае если повреждены страницы индекса, либо данных, их восстановление возможно в режиме online в редакции Enterprise Edition.
Страницы, приндалежащие критически важным системным таблицам могут быть восстановлены, но база данных, при восстановлении, будет недоступна в любой редакции SQL Server.
«Карты размещения» не могут быть восстановлены «отдельно». Если повреждены GAM, SGAM, PFS, ML, DIFF-страницы, необходимо восстанавливать базу данных целиком. Единственным исключением являются IAM-страницы. Хотя они и относятся к «картам размещения», но они описывают только одну таблицу, а не всю базу данных, и их восстановление возможно.
Загрузочная страница базы данных (9-я страница в 1-м файле БД) и страница заголовка файла (0-я страница в каждом файле) не могут быть восстановлены «отдельно», при их повреждении придется восстанавливать БД целиком.

Собственно, восстановление

Теперь, наконец, переходим от теории к практике.
В первую очередь, для тренировки, нужна испорченная база данных.

Портим БД

Для экспериментов я буду использовать базу данных AdventureWorks, которая поставляется вместе с SQL Server. Если вы не устанавливали ее, при желании, можно скачать здесь. Перевожу ее в модель восстановления full:

ALTER DATABASE AdventureWorks SET RECOVERY FULL

убеждаюсь, что ошибок в ней еще нет:

DBCC CHECKDB('AdventureWorks') WITH NO_INFOMSGS, ALL_ERRORMSGS, DATA_PURITY

и создаю полный бэкап:

BACKUP DATABASE AdventureWorks 
TO DISK = 'D:\tmp\aw_backups\aw_full_ok1.bak'

В этой базе данных я создаю таблицу crash.

CREATE TABLE crash (txt varchar(1000))

Поле типа varchar мы и будем портить, для того, чтобы проверить что произойдет, если вдруг SQL Server обнаружит в нем не те данные, которые он сам туда записал.
Прежде чем что-то испортить, надо это чем-то заполнить. Я забиваю в созданную таблицу левые данные.

SET NOCOUNT ON
DECLARE @i INT
SET @i = 1
WHILE @i<100000
	BEGIN
		INSERT INTO crash
		SELECT REPLICATE('a', 1000)
		SET @i = @i + 1
	END
SET NOCOUNT OFF

Теперь делаю резервную копию журнала транзакций:

BACKUP LOG AdventureWorks 
TO DISK = 'D:\tmp\aw_backups\aw_log_ok1.trn'

Теперь немного изменим данные:

Итак, все готово. Отсоединяем БД и открываем mdf-файл FAR’ом (или чем вам удобнее), ищем в нем строку «zzzzzzz» и заменяем несколько ‘z’ на произвольные символы:

Теперь, когда БД испорчена, подсоединяем ее. И, да, я помню, что в предыдущей статье было четко сказано, что отсоединять/присоединять БД не стоит. Но в нашем случае это абсолютно «безопасно» — база данных в «suspect» не упадет.

Ищем ошибки

Итак, испорченная БД успешно вернулась в строй. Снова запустим проверку целостности:

DBCC CHECKDB('AdventureWorks') WITH NO_INFOMSGS, ALL_ERRORMSGS, DATA_PURITY

В результате то, чего мы ждали (обязательно запоминайте номера поврежденных страниц!):

Msg 8928, Level 16, State 1, Line 1

Object ID 1883153754, index ID 0, partition ID 72057594054246400, alloc unit ID 72057594061651968 (type In-row data): Page (1:20455) could not be processed. See other errors for details.

Msg 8939, Level 16, State 98, Line 1

Table error: Object ID 1883153754, index ID 0, partition ID 72057594054246400, alloc unit ID 72057594061651968 (type In-row data), page (1:20455). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 29493257 and -4.

CHECKDB found 0 allocation errors and 2 consistency errors in table 'crash' (object ID 1883153754).

CHECKDB found 0 allocation errors and 2 consistency errors in database 'AdventureWorks'.

repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (AdventureWorks).
В данном случае повреждены сами данные, находящиеся в куче (index id = 0), поэтому SQL Server эти данные восстановить не сможет.

Сейчас у нас есть три варианта:

  1. Смириться с потерей данных и выполнить DBCC CHECKDB(‘AdventureWorks’, REPAIR_ALLOW_DATA_LOSS)
  2. Сделать бэкап активной части журнала транзакций и восстановить БД целиком — в результате потери данных не будет, но это займет продолжительное время
  3. Сделать бэкап активной части журнала транзакций и восстановить только одну(!), поврежденную, страницу

Со вторым вариантом все должно быть понятно, а вот что произойдет если запустить DBCC CHECKDB или как восстанавливаются отдельные страницы — я покажу дальше.

Восстанавливаем поврежденную страницу

В первую очередь нам надо сделать бэкап заключительного фрагмента журнала транзакций (tail backup). При этом, если у вас Enterprise Edition, вы можете не добавлять параметр NORECOVERY, который переведет БД в состояние «restoring», поскольку эта редакция поддерживает on-line восстановление страниц. Более того, если у вас резервные копии журнала транзакций выполняются на регулярной основе, чтобы не нарушать цепочку журналов, в редакции Enterprise Edition, вы можете сделать COPY_ONLY бэкап.
Я же иду по пути off-line восстановления и выполняю:

BACKUP LOG AdventureWorks 
TO DISK = 'D:\tmp\aw_backups\aw_log_fail3.trn'
WITH NORECOVERY

Теперь, можно восстанавливать поврежденную страницу. В первую очередь, используем полный бэкап (aw_full_ok1.bak):

RESTORE DATABASE AdventureWorks
PAGE = '1:20455'
FROM DISK = 'D:\tmp\aw_backups\aw_full_ok1.bak'
WITH NORECOVERY

В итоге, имеем:

Обратите внимание на то, что необходимо использовать опцию NORECOVERY, поскольку нам предстоит еще накатывать на нее бэкапы журнала транзакций.

RESTORE LOG AdventureWorks
FROM DISK = 'D:\tmp\aw_backups\aw_log_ok1.trn'
WITH NORECOVERY

и

RESTORE LOG AdventureWorks
FROM DISK = 'D:\tmp\aw_backups\aw_log_fail3.trn'
WITH RECOVERY

Вроде бы все прошло успешно, запускаем DBCC CHECKDB и…

Восстановление прошло успешно.
Обратите внимание, что время простоя сокращается за счет того, что из полного бэкапа мы восстанавливаем не всю БД, а только поврежденные страницы (если бы я восстанавливал бэкап целиком — бэкап восстановился бы за 8,5 секунд, но, чем больше размер БД — тем больше будет разница во времени). Счастливчики с SQL Server Enterprise Edition, использующие on-line восстановление, так же сэкономят время на восстановлении из бэкапов лога, а при off-line восстановлении, увы, журналы будут обрабатываться целиком.
Стоит так же добавить, что в SQL Server 2005, 2008, 2008 R2 восстановление отдельной страницы возможно только с помощью T-SQL, в Denali появилась возможность делать это через GUI.

А если все-таки DBCC CHECKDB?

На всякий случай я решил проверить что сделает SQL Server, если я запущу DBCC CHECKDB с параметром REPAIR_ALLOW_DATA_LOSS. Все та же ошибка:

Сначала переводим БД в режим SINGLE_USER:

ALTER DATABASE AdventureWorks SET SINGLE_USER

А затем, запускаем восстановление:

DBCC CHECKDB('AdventureWorks', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS, DATA_PURITY

В итоге:
Repair: The page (1:20455) has been deallocated from object ID 1883153754, index ID 0, partition ID 72057594054246400, alloc unit ID 72057594061651968 (type In-row data).
Ага, SQL Server удалил «испорченную» страницу. Переводим БД в режим MULTI_USER, чтобы она стала доступной для всех и проверяем что пропало:

Учитывая, что размер страницы в SQL Server 8КБ, а для пользовательских данных доступно чуть меньше — то все закономерно, таблица «похудела» на 7 записей (в начале их было 99999). Поскольку на этой таблице не было кластерного индекса, данные могли храниться в произвольном порядке, т. е. мы даже не могли узнать какие данные будут потеряны.

Так почему, все-таки, не перевод?

Итак, почему это все-таки не перевод, а пост «по мотивам». Дело в том, что, в открытом доступе статьи «Page Restore» за авторством Gail Shaw нет. Есть такой раздел в книге SQL Server MVP Deep Dives vol.2, которая продается за довольно-таки ощутимые деньги (но, естественно, легко находится в интернетах) и я не уверен, что публиковать перевод — это эм… правильно что ли.
В общем, я прочитал статью, взял на заметку основные моменты, а потом уже сам писал текст и, попутно, проводил эксперимент по восстановлению. Надеюсь, кому-нибудь этот опыт был полезен.
И, господа, я искренне надеюсь, что если вы решите повторять этот эксперимент, то будете предельно осторожны (например, не будете эксперементировать с основной БД на production-сервере). Помните, что никакой ответственности за ваши действия я не несу.

база данных застряла в состоянии» восстановление»

по умолчанию every RESTORE DATABASE входит RECOVERY настройка.
Параметры «NORECOVERY» в основном сообщают SQL Server, что база данных ожидает больше файлов восстановления (может быть DIFF файл и LOG файл и, может включать файл резервной копии хвостового журнала, если это возможно).
Параметры «восстановление», завершить все транзакции и пусть база данных готова к выполнению транзакций.

так:

  1. если ваша база данных настроена простой модель восстановления, вы можете выполнять только полное восстановить с помощью NORECOVERY вариант, когда у вас есть DIFF резервное копирование. Нет!—12—>LOG резервное копирование разрешается в простой модель восстановления базы данных.
  2. в противном случае, если база данных настроена с полное или МАССОВАЯ РЕГИСТРАЦИЯ модель восстановления, вы можете выполнять полное восстановление с последующим NORECOVERYопция, затем выполните DIFF следовал по NORECOVERY и, наконец, выполнить LOG восстановить с помощью .

помните, что ПОСЛЕДНИЙ ЗАПРОС ВОССТАНОВЛЕНИЯ ДОЛЖЕН ИМЕТЬ RECOVERY опции. Это может быть явный способ или нет. В термах T-SQL ситуация:

  1. USE [master]
    GO
    RESTORE DATABASE Database_name
    FROM DISK = N'\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD, RECOVERY -- This option could be omitted.
    GO

С заменой опция должна использоваться с осторожностью, так как это может привести к потере данных

или, если вы выполняете Полное и DIFF резервное копирование, вы можете использовать это

USE [master]
GO
RESTORE DATABASE Database_name
  FROM DISK = N'\path_of_backup_file.bak' WITH FILE = 1, 
   NOUNLOAD,NORECOVERY
GO
RESTORE DATABASE Database_name
  FROM DISK =N'\path_of_**diff**backup_file.bak' WITH FILE = 1, 
 NOUNLOAD, RECOVERY
GO
  1. USE [master]
    GO
    -- Perform a Tail-Log backup, if possible.
    BACKUP LOG Database_name
    GO
    -- Restoring a FULL backup
    RESTORE DATABASE Database_name
    FROM DISK = N'\path_of_backup_file. bak' WITH FILE = 1,
    NOUNLOAD,NORECOVERY
    GO
    -- Restore the last DIFF backup
    RESTORE DATABASE Database_name
    FROM DISK = N'\path_of_DIFF_backup_file.bak' WITH FILE = 1,
    NORECOVERY,NOUNLOAD
    GO
    -- Restore a Log backup
    RESTORE LOG Database_name
    FROM DISK = N'path_of_LOG_backup_file.trn' WITH FILE = 2,
    RECOVERY, NOUNLOAD
    GO

конечно, вы можете выполнить восстановление с параметром статистика = 10 это говорит SQL Server сообщать о каждом 10% завершено.

если вы предпочитаете, вы можете наблюдать процесс или восстановление в режиме реального времени на основе запроса.
Как следует:

USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time 
    FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a 
        WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
GO

надеюсь, что это поможет.

Восстановление БД master

Здравствуйте, коллеги. Моя статья относится к тем, кто по долгу службы и/или в связи с форс-мажором сталкивается с проблемой разрушения системной БД master. Согласно Microsoft – «База данных master содержит всю системную информацию СУБД SQL Server, в том числе общие для всего экземпляра метаданные, такие как сведения об учетных записях входа, конечных точках и связанных серверах, а также параметры конфигурации системы. … Кроме этого, в базе данных master регистрируются все остальные базы данных и хранится информация о расположении их файлов. Здесь же SQL Server хранит сведения об инициализации. Таким образом, если база данных master недоступна, запустить SQL Server невозможно.».

Статья не претендует на оригинальность. Допускаю, что был изобретен велосипед. В этом случае, можно считать, что статья – это переработка способов починки БД master, которых в интернете великое множество.

Волею судьбы, я столкнулся с этой ситуацией, будучи начинающим администратором баз данных. Как водится, в самый неподходящий момент, а именно, при отключении электричества «грохнулся» master. Существует несколько способов выхода из этого положения:
1. Полная переустановка SQL сервера с последующим присоединением пользовательских БД.
2. Восстановление master из бекапа. Естественно, если этот самый бекап существует в природе.

Оба способа имеют свои достоинства и недостатки. Первый (в то время я им и воспользовался) хорош тем, что алгоритм достаточно прост: удаление через Панель Управления Windows всех компонентов старого SQL сервера и установка нового и последующим присоединением (attach) пользовательских БД. Все было бы просто, если бы не одна маленькая деталь – отсутствовал дистрибутив SQL сервера. А база была на локальном сервере, который, мягко говоря был достаточно далеко. Несмотря на все это, пришлось закачивать дистрибутив на отвратительной скорости. В любом случае, удаление-установка-присоединение-восстановление Job-ов и т.д. займет явно не 30 минут.
Второй способ, как мне кажется, гораздо более интереснее. Ссылок по этому варианту достаточно много в интернете. Я предлагаю именно его, так как уже неоднократно им пользовался и который во всех моих случаях дал стопроцентный положительный результат. Я не претендую на его изобретение, возможно, кто-то им пользуется и помимо меня.
Смысл в следующем. Нужна «не битая» БД master и ваш бекап этой базы, причем, желательно, самый свежий. Необходимое условие – «не битая» БД master должна быть из той же версии SQL сервера. Конечно, можно взять master с какого-либо сервера, но это потребует его остановки, копирования и последующего запуска службы. Не самый удобный вариант. Есть другой способ получения целой БД master. Оказывается, при установки SQL сервера создается каталог шаблонов системных баз данных. Применительно к SQL 2014 скорее всего шаблоны системных БД находятся (при стандартной установке) в
C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Binn\Templates\. Естественно, путь в вашем случае может быть иным – это зависит от версии SQL (2005, 2008 , 2012), от его разрядности, разрядности Windows и т.д., но шаблоны есть всегда. Копируем с заменой файлы БД master (master.mdf, mastlog.ldf) из каталога шаблонов в каталог, где расположены файлы вашей БД master. Очевидно, что служба MSSQLSERVER остановлена. Особенностью шаблонной БД master является отсутствие в ней ошибок, соответствие версии SQL (и это плюс), но и полное отсутствие в ней данных о базах и еще много о чем (это минус). Акцентирую, что в системную информацию входит расположение других системных БД: model, msdb, tempdb. Поэтому запустить службу MSSQLSERVER без ограничений сразу после замены файлов БД master (она «чистая») не удастся.
Предварительно необходимо определить, а лучше скопировать, например, в блокнот пути остальных системных БД (model, msdb, tempdb).
Запустить командную строку cmd под администратором (не закрывайте его до конца процедуры восстановления), далее (цитата Microsoft), «запустите экземпляр SQL Server в режиме восстановления «только master», запустив из командной строки одну из следующих команд.
В случае с экземпляром по умолчанию (MSSQLSERVER):
NET START MSSQLSERVER /f /T3608

В случае с именованным экземпляром: NET START MSSQL$instancename /f /T3608»

Примечание. В команде необходимо учитывать регистр символов (“f” – строчная, “T” – заглавная).

Запуск службы в этом режиме позволяет работать в командной строке SQL (sqlcmd). После успешного запуска службы в командной строке вводим sqlcmd.
Затем указываем расположение системных БД и их журналов, последовательно вводя в командной строке:
>ALTER DATABASE tempdb MODIFY FILE (name = ‘tempdev’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\tempdb.mdf’)
>GO

>ALTER DATABASE tempdb MODIFY FILE (name = ‘templog’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\templog.ldf’)
>GO

>ALTER DATABASE model MODIFY FILE (name = ‘modeldev’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12. MSSQLSERVER\MSSQL\DATA\model.mdf’)
>GO

>ALTER DATABASE model MODIFY FILE (name = ‘modellog’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\modellog.ldf’)
>GO

>ALTER DATABASE msdb MODIFY FILE (name = ‘MSDBData’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MSDBData.mdf’)
>GO

>ALTER DATABASE msdb MODIFY FILE (name = ‘MSDBLog’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MSDBLog.ldf’)
>GO

Примечание. Расположение файлов системных баз в вашем случае может быть иным.
В случае успешного определения пути расположения системных БД выходим из sqlcmd, набрав в командной сроке quit. Далее необходимо остановить SQL сервере (либо из SQL Server Configuration Manager или командой net stop mssqlserver).
А теперь приступаем к самому главному – восстановление БД master из его последнего бекапа.
ВАЖНО: восстановление БД master из бекапа возможно только при монопольном доступе к SQL серверу.
В командной строке вводим net start mssqlserver /m. Это обозначает, что вы запускаете SQL сервер в монопольном режиме.
Примечание. В команде необходимо учитывать регистр символов (“m” – строчная)

Далее запускаем команду sqlcmd.
Затем восстанавливаем БД master из бекапа master.bak командой
RESTORE DATABASE MASTER FROM DISK=’C:\Backup\master.bak’ WITH REPLACE;
>GO

Примечание. ‘C:\Backup\master.bak’ – это путь к бекапу БД master.

После успешного завершения восстановления (о чем будет сообщено) служба MSSQLSERVER будет остановлена. Поэтому необходимо запустить ее, используя SQL Server Configuration Manager или командную строку net start mssqlserver.
К сожалению, такого рода форс-мажорные обстоятельства могут сопровождаться дополнительными неприятностями. Например, пользовательская база может попасть в разряд suspect (подозрительная), или какая-либо БД попадает в статус READ_ONLY. Но это отдельная тема.
В заключении, хотелось бы дать совет. После случившегося со мной, я решил создать шпаргалку в виде текстового файла, в котором содержаться все шаги по восстановлению БД master из бекапа. Причем создание этого файла я «поручил» SQL Server Agent. В одном из заданий, стартующих после шага создания бекапов системных и пользовательских БД запускается сохраненная процедура, которая формирует этот файл с учетом реальных путей системных БД и даты-времени создания последнего бекапа БД master. Текстовый файл обновляется каждый день. Получилось примерно следующее:

:Find and copy template db master (stop service MSSQLSERVER)
>cmd: as admin
>net start mssqlserver /f /T3608
>sqlcmd
:Path DB MASTER C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\master.mdf
:Path DB MASTER C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
>ALTER DATABASE tempdb MODIFY FILE (name = ‘tempdev’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12. MSSQLSERVER\MSSQL\DATA\tempdb.mdf’)
>GO
>ALTER DATABASE tempdb MODIFY FILE (name = ‘templog’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\templog.ldf’)
>GO
>ALTER DATABASE model MODIFY FILE (name = ‘modeldev’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\model.mdf’)
>GO
>ALTER DATABASE model MODIFY FILE (name = ‘modellog’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\modellog.ldf’)
>GO
>ALTER DATABASE msdb MODIFY FILE (name = ‘MSDBData’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MSDBData.mdf’)
>GO
>ALTER DATABASE msdb MODIFY FILE (name = ‘MSDBLog’ , filename =’C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MSDBLog.ldf’)
>GO
>quit
:Restart service MSSQLSERVER
>net stop mssqlserver
>net start mssqlserver /m
>sqlcmd
>RESTORE DATABASE MASTER FROM DISK=’C:\Backup\ master. bak’ WITH REPLACE;
>GO
:Restart service MSSQLSERVER

Примечание. Знак «>» означает, что строку можно просто скопировать в командную строку; знак «:» — информация и/или действие. С учетом такой «автоматизации» вполне реально решить проблему до 30 мин.

Что делать, если не удается импортировать базу данных Microsoft SQL Server (ошибка 3154)?

Недавно мне нужно было импортировать базу данных Microsoft SQL Server, созданной на одном сервере на другой сервер. Обычно я это делаю с помощью SQL Server Management Studio.

Вы, наверняка, в курсе, что простой экспорт и импорт баз данных можно выполнять с помощью функций резервного копирования и восстановления, где команда Back up будет служить экспортом, а команда Restore — импортом. (По умолчанию в подпапке Backups папки, где установлен Microsoft SQL Server, появится файл c расширением *.bak. Его-то и можно использовать для импорта на другом сервере.)

Я не особо тесно работал с Microsoft SQL Server. Просто знал, как можно импортировать и какую опцию включить при импорте, чтобы он состоялся. Но почему-то в этот раз мне никак не удавалось импортировать базу данных на свой сервер. Все попытки заканчивались ошибкой, примерно такой:

The backup set holds a backup of a database other than the existing ‘MyDatabase’ database.
RESTORE DATABASE is terminating abnormally. (Microsoft SQL Server, Error: 3154)

Почему же она возникает и как ее преодолеть?

Интернет дал мне две подсказки.

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

Этот фокус я знал и без интернета. И я как раз эту опцию включал. И мне это никак в этот раз не помогало.

Во-вторых, импортировать базу данных можно не с помощью пункта меню, а с помощью скрипта.

Вторая подсказка — несмотря на то, что скрипт делал то же самое, что и запуск команды из меню — дала мне возможность определить проблему.

Скрипт примерно такой:

RESTORE DATABASE NEW
FROM DISK = ‘C:\Program Files\Microsoft SQL Server\MSSQL\Backup\TEST. bak’
WITH REPLACE

При запуске скрипта в журнале я увидел в чем именно была проблема. Был указан путь по которому процесс восстановления базы данных пытался найти файлы база данных (*.mdf и *.ldf).

Путь этот резко отличался от путей, которые давал ему мой сервер. Дело в том, что на сервере, откуда была взята база данных, файлы *.mdf и *.ldf находились не в папке по умолчанию для Microsoft SQL Server, а в соврешенно другом месте. И путь этот был жестко пописан в файле импорта (резервной копии).

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

Что ж, это решаемая проблема.

Неправильный, но рабочий вариант (мой)

Поэтому я (плохо разбираясь в Microsoft SQL Server):

  1. Создал базу данных с точно таким же названием, что и на сервере-источнике. 
  2. Остановил службу SQL Server для следующего шага.
  3. Скопировал новосозданные файлы из папки по умолчанию, где мой сервер их создал, в папку, в которой ожидает ее бэкап, который я пытался импортировать на свой сервер.
  4. Запустил службу SQL Server.

Все. Теперь должно было заработать как нужно.

Правильный путь

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

RESTORE DATABASE NEW
FROM DISK = ‘C:\Program Files\Microsoft SQL Server\MSSQL\Backup\TEST.bak’
WITH REPLACE,
MOVE ‘TEST’ TO ‘C:\Program Files\Microsoft SQL Server\MSSQL\DATA\NEW.mdf’,
MOVE ‘TEST_Log’ TO ‘C:\Program Files\Microsoft SQL Server\MSSQL\DATA\NEW_log.ldf’

Либо в окне импорта (восстановления), указать новый путь в колонке Restore As.

И правда, ваши мучения должны здесь закончится.

Опять неправильный, но рабочий вариант (мой)

Но я сделал, не как в этом скрипте, а как написал выше — копированием файлов. И да, указанная проблема решилась, но теперь импорт не получался из-за другой проблемы.

Скопированные в другое место файлы не открывались при восстановлении БД — доступ был запрещен.

Тут я же растерялся. Успех маячил перед глазами — и на тебе. Очередная ошибка.

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

И ларчик просто открывался. Нужно было всего лишь дать доступ к этим файлам. Чтобы долго не возится — так как это одноразовое действие, я просто временно — для импорта- дал все права учетной записи Everyone.

И в этот раз импорт прошел и копия базы с другого сервера теперь обосновалась на моем сервере.

Но повторю. Я делал этот фокус с копированием файлов и выставлением прав на них от не знания правильного способа с опцией MOVE.

Итоги

Повторю главные моменты, которые можно или нужно сделать, если возникают ошибки при импорте (восстановлении) одной БД в другую :

  1. включить перезапись своей базы данных, в которую восстанавливается чужая база данных — либо из из окна восстановления, либо с помощью опции REPLACE в скрипте восстановления
  2. проверить путь к базе данных, прописанный в файле резервной копии базы данных (запустив скрипт, приведенный выше, можно отчетливо увидеть ожидаемый путь при ошибке) 

Путь можно исправить с помощью другой опции MOVE указав логическое имя базы данных-источника, и нового пути к файлам (*. mdf, *.ldf) к файлу получателей.

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

Но лучше воспользоваться MOVE и не морочить себе голову, как я.)

Восстановление базы данных MS SQL : РБ-Софт

Рассмотрим несколько вариантов восстановления БД, в зависимости от того, насколько повреждены файлы БД зависит успешность того или иного метода. Все описанные способы были лично мной проверены на практике и все случаи восстановления, за исключением одного, были успешны. Используйте данное руководство на свой страх и риск, за совершенные вами действия ответственность несете вы сами.

Итак, во-первых останавливаем службу SQL Server и копируем файлы базы данных (*.mdf и *.ldf) в другую папку, чтобы можно было восстановить их в случае неудачи.

Если у вас есть свежий актуальный бэкап, то дальше можете не читать, а просто восстановите БД из него, тем самым сэкономите драгоценное время, далее я приведу алгоритмы восстановления для разных версий SQL Server. Надеюсь вам это поможет, как в свое время помогло и мне.

Для всех версий SQL Server подойдет следующий вариант: делаем Detach database(отсоединить базу данных), удаляем журнал транзакций(файл с расширением ldf) и делаем Attach database(присоединить базу данных). В мастере выбираем наш mdf файл и жмем ОК.

Если mdf файл не поврежден, то он успешно присоединится и мы увидим нашу базу в диспетчере объектов целую и невредимую.

Радуемся успешному восстановлению. (Этот вариант сработает только если mdf файл не поврежден, поэтому срабатывает не всегда). Если не получилось, то создаем новую базу данных с таким же именем, останавливаем сервер. Подменяем файл mdf файлом от нашей базы, стартуем службу SQL Server и открываем Query analyzer(SQL 2000) или Management studio(SQL 2005/2008) в зависимости от нашей версии сервера.

Пишем следующее:

USE master
GO
sp_configure 'allow updates', 1
reconfigure WITH override
GO

Если у вас SQL 2000, то далее пишем:

UPDATE sysdatabases SET STATUS= 32768 WHERE name = 'db_name'
GO

Если SQL 2005 или 2008, то пишем:

ALTER DATABASE db_name SET EMERGENCY, SINGLE_USER
GO

где вместо db_name пишем имя своей БД

Жмем F5. После этого наша БД должна быть видна в статусе EMERGENCY. Отлично, приступаем к восстановлению.

Все что написали стираем, чтобы не смущало, и пишем.

Для SQL 2000:

DBCC REBUILD_LOG('db_name', 'Полный путь к новому файлу ldf')
GO

Жмем F5, если все нормально, сервер скажет: Warning: The log for database ‘db_name’ has been rebuilt.

Стираем и пишем:

USE master
GO
sp_dboption 'db_name', 'single user', 'true'
GO
USE db_name
GO
DBCC CHECKDB('db_name', REPAIR_REBUILD)
GO

если DBCC не хочет выполняться, то вместо REPAIR_REBUILD нужно подставить REPAIR_ALLOW_DATA_LOSS

Жмем F5, ждем некоторое время. Сервер вернет кучу сообщений. Если там будут содержаться ошибки, то лучше еще раз выполнить DBCC CHECKDB с параметром REPAIR_REBUILD, пока все ошибки не будут устранены.

Для SQL 2005/2008 действия несколько иные:

DBCC CHECKDB('db_name', REPAIR_ALLOW_DATA_LOSS)
GO

Тут без вариантов. В SQL 2005 и выше нет инструкции REBUILD_LOG, вместо этого выполняется CHECKDB с параметром REPAIR_ALLOW_DATA_LOSS.

После того как сервер закончит выполнять запрос и вернет результат, меняем REPAIR_ALLOW_DATA_LOSS наREPAIR_REBUILD и выполняем запрос еще раз, это должно убрать оставшиеся ошибки в бд.

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

Пишем:

Для SQL 2000:

USE master
GO
sp_dboption 'db_name', 'single user', 'false'
GO

Для SQL 2005/2008: 

ALTER DATABASE db_name SET ONLINE, MULTI_USER
GO

Все. База онлайн и готова к работе. Радуемся и не забываем делать бэкапы.

Как получить и изменить режим восстановления (Recovery model) баз данных SQL Server [Вики IT-KB]

В случае, если резервное копирование баз данных Microsoft SQL Server выполняется сторонними средствами, например Microsoft System Center DPM, на регулярной основе, то для экономии дисковой ёмкости сервера БД, можно изменить режим восстановления Recovery model с используемого по умолчанию FULL на упрощённый SIMPLE.

Получить режим восстановления для всех баз данных:

SELECT name,recovery_model_desc AS Recovery_model 
FROM sys.databases 
ORDER BY recovery_model_desc, name

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

SELECT [name], DATABASEPROPERTYEX([name],'recovery') AS Recovery_model
FROM sysdatabases
WHERE name not in ('master','model','tempdb','msdb') 
ORDER BY Recovery_model, name

Как изменить режим восстановления на SIMPLE для всех баз дынных, за исключением системных:

USE MASTER
declare
   @isql varchar(2000),
   @dbname varchar(64),
   @logfile varchar(128)
 
   declare c1 cursor for 
   SELECT  d.name, mf.name as logfile
   FROM sys.master_files mf
      inner join sys.databases d
      on mf.database_id = d.database_id
   where recovery_model_desc <> 'SIMPLE'
   and d.name not in ('master','model','msdb','tempdb') 
   and mf.type_desc = 'LOG'   
   open c1
   fetch next from c1 into @dbname, @logfile
   While @@fetch_status <> -1
      begin
 
      select @isql = 'ALTER DATABASE ' + @dbname + ' SET RECOVERY SIMPLE'
      print @isql
      exec(@isql)
      select @isql='USE ' + @dbname + ' checkpoint'
      print @isql
      exec(@isql)
      select @isql='USE ' + @dbname + ' DBCC SHRINKFILE (' + @logfile + ', 1)'
      print @isql
      exec(@isql)
 
      fetch next from c1 into @dbname, @logfile
      end
   close c1
   deallocate c1

Проверено на следующих конфигурациях:

Версия SQL Server
Microsoft SQL Server 2012 Service Pack 3 (11. 3.6020.0)

Автор первичной редакции:
Алексей Максимов
Время публикации: 20.08.2017 12:44

Как восстановить базу данных в SQL Server 2008 R2 из файла .bak

Резюме : Несомненно, резервное копирование и восстановление базы данных является основной задачей любого администратора базы данных SQL Server. Здесь мы обсудим различные способы восстановления базы данных в SQL Server 2008 R2 .

Необходимые разрешения:

Если восстанавливаемая база данных не существует, пользователь должен иметь разрешения CREATE DATABASE , чтобы иметь возможность выполнить RESTORE.Если база данных существует, разрешения на ВОССТАНОВЛЕНИЕ по умолчанию имеют члены фиксированных серверных ролей sysadmin и dbcreator , а также владелец (dbo) базы данных.

(для параметра FROM DATABASE_SNAPSHOT база данных всегда существует).

RESTORE разрешений даются ролям, в которых информация о членстве всегда доступна серверу. Поскольку членство в фиксированной роли базы данных можно проверить только тогда, когда база данных доступна и не повреждена, что не всегда происходит при выполнении RESTORE, члены фиксированной роли базы данных db_owner не имеют разрешений RESTORE.

Восстановление базы данных в SQL Server 2008 R2:

Мы можем использовать следующие шаги для восстановления базы данных:

  1. Откройте Microsoft SQL Server Management Studio и перейдите к Базам данных:
  1. Щелкните правой кнопкой мыши Базы данных и щелкните Восстановить базу данных

Здесь в первом разделе (Пункт назначения для восстановления)

  • Если восстанавливаемая база данных не существует, не выбирайте никакую базу данных в поле со списком (В базу данных), так как она будет обновлена ​​автоматически после выбора файла резервной копии.
  • Если вы выполняете восстановление с устройства резервного копирования, вы можете оставить его по умолчанию (самое последнее возможное), чтобы восстановить время последнего резервного копирования.
    Или выберите, в какое время вам нужно восстановить базу данных (у вас есть возможность выбрать желаемое конкретное время для восстановления базы данных)

Затем во втором разделе (Источник для восстановления)

  • Если вы выбрали вариант из базы данных , в нем будут перечислены все резервные копии, сделанные ранее для этой базы данных.Таким образом, вы можете скопировать эту базу данных в новую, используя предыдущие резервные копии.
  • Или вы можете выбрать с устройства для восстановления с устройства резервного копирования (файл .bak). Затем нажмите Добавить в окне «Указать резервную копию». Перейдите в папку с недавно восстановленными плоскими файлами. Выберите файл полной резервной копии, который должен быть первым файлом резервной копии в списке:
  • Нажмите ОК ; в окне Укажите резервную копию отобразится:
  1. Щелкните ОК . В разделе «Место для восстановления» выберите базу данных, в которую вы хотите восстановить, и в разделе «Выбор резервных копий для восстановления» выберите файл резервной копии, который вы выбрали выше:
  1. На левой панели щелкните Параметры , и вы можете выбрать одно из следующего:

В разделе параметров восстановления:

можно выбрать один из следующих вариантов:

  • Перезаписать существующую базу данных (ЗАМЕНА):

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

В некоторых случаях, когда вы пытаетесь выполнить восстановление без опции замены, вы можете получить сообщение об ошибке

 "Сообщение 3159, уровень 16, состояние 1, строка 1
Хвостовая часть журнала для базы данных AdventureWorks не была скопирована.  Используйте BACKUP LOG WITH NORECOVERY для резервного копирования журнала, если он содержит работу, которую вы не хотите потерять. Используйте предложение WITH REPLACE или WITH STOPAT оператора RESTORE, чтобы просто перезаписать содержимое журнала.Msg 3013, уровень 16, состояние 1, строка 1
RESTORE DATABASE аварийно завершает работу. «
  • Сохранить настройки репликации (WITH KEEP_REPLICATION):

Сохраняет настройки репликации при восстановлении опубликованной базы данных на сервере, отличном от сервера, на котором база данных была создана. Этот вариант актуален только в том случае, если база данных была реплицирована при создании резервной копии.

Этот параметр доступен только с параметром Оставить базу данных готовой к использованию путем отката незафиксированных транзакций (описанных далее в этой таблице), что эквивалентно восстановлению резервной копии с помощью параметра ВОССТАНОВЛЕНИЕ.

  • Запрос перед восстановлением каждой резервной копии:

Это указывает, что после восстановления каждой резервной копии будет отображаться диалоговое окно «Продолжить восстановление», в котором можно узнать, хотите ли вы продолжить последовательность восстановления. В этом диалоговом окне отображается имя следующего набора носителей (если известно), а также имя и описание следующего набора резервных копий.

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

  • Ограничить доступ к восстановленной базе данных (WITH RESTRICTED_USER):

Это делает восстановленную базу данных доступной только членам db_owner, dbcreator или sysadmin.

В разделе состояния восстановления:

Для определения состояния базы данных после операции сохранения необходимо выбрать один из следующих вариантов:

  • Оставьте базу данных готовой к использованию путем отката незавершенных транзакций. Дополнительные журналы транзакций восстановить нельзя. (ВОССТАНОВЛЕНИЕ С ВОССТАНОВЛЕНИЕМ):

Он восстанавливает базу данных после восстановления последней резервной копии, отмеченной в резервных наборах для восстановления сетки на странице Общие.

  • Оставить базу данных неработающей и не откатывать незавершенные транзакции. Можно восстановить дополнительные журналы транзакций. (ВОССТАНОВЛЕНИЕ С NORECOVERY):

База данных остается в состоянии восстановления. Это позволяет вам восстановить дополнительные резервные копии в текущем пути восстановления.Чтобы восстановить базу данных, вам нужно будет выполнить операцию восстановления, используя параметр RESTORE WITH RECOVERY в последней резервной копии, которую необходимо восстановить.

Если вы выберете эту опцию, опция Сохранить настройки репликации будет недоступна.

  • Оставить базу данных в режиме только для чтения. Отменить незавершенные транзакции, но сохранить действия отмены в резервном файле, чтобы можно было отменить эффекты восстановления. (ВОССТАНОВЛЕНИЕ В РЕЖИМЕ ОЖИДАНИЯ):

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

Для выбора этого параметра необходимо указать резервный файл в текстовом поле Резервный файл. Резервный файл позволяет отменить эффекты восстановления.

Таким образом, для всего одного восстановления базы данных мы можем просто выбрать Перезаписать существующую базу данных (WITH REPLACE) опцию и Оставить базу данных готовой к использованию путем отката незафиксированных транзакций. Дополнительные журналы транзакций восстановить нельзя. (ВОССТАНОВЛЕНИЕ С ВОССТАНОВЛЕНИЕМ) вариант.

Все вышеперечисленные шаги можно выполнить в счастливом сценарии, но у вас может быть поврежденный файл резервной копии.В этом случае у вас нет возможности восстановить эту резервную копию, тогда вы можете использовать Stellar Toolkit для MS SQL.

Вы хотели бы прочитать, что MVP SQL Дамиан Видера говорит об этом средстве и его критический обзор по этому поводу.

Stellar Toolkit для MS SQL — это комбинация трех инструментов, разработанных для восстановления поврежденной базы данных SQL-сервера, извлечения базы данных из поврежденного файла резервной копии SQL и для сброса пользователя SQL Server и пароля администратора.

Заключение

Когда мы говорим «вернуться и восстановить» базу данных в SQL Server 2008 R2, что является одной из обязательных задач для каждого администратора баз данных, мы обсудили здесь некоторые из вариантов, которые существовали в SQL server 2008 restore.Надеюсь, эта статья была для вас информативной.

Как восстановить главную базу данных в SQL Server 2012

SQL Server не запускается из-за недоступности главной базы данных. Как SQL Server 2012 может восстановить базу данных , особенно основную базу данных, самую важную базу данных SQL Server?

Главная база данных записывает всю информацию системного уровня о системе SQL Server. Это включает метаданные для всего экземпляра, такие как учетные записи для входа, конечные точки, связанные серверы и параметры конфигурации системы.А основная база данных — это база данных, в которой записано существование других баз данных, а расположение этих файлов базы данных записывает информацию об инициализации для SQL Server. Следовательно, SQL Server не может запуститься, если основная база данных недоступна.

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

Восстановление основной базы данных с помощью SQL-запроса

Шаг 1: Запустите экземпляр сервера в однопользовательском режиме.

Откройте Панель управления — Система и безопасность — Администрирование — Службы — MSSQLSERVER .

В окне MSSQLSERVER Properties остановите эту службу. И установите « Параметры запуска » как « -m «. Затем снова запустите службу. Теперь SQL Server запускается в однопользовательском режиме.

Более подробную информацию см. В разделе: Как настроить доступ к SQL Server в однопользовательском режиме

Шаг 2: Откройте SQL Server 2012 Management с администратором, но не войдите в систему, и нажмите «Новый запрос».

Шаг 3: Восстановление основной базы данных с резервной копией базы данных

Чтобы восстановить полную резервную копию базы данных master, используйте следующий оператор RESTORE DATABASE Transact-SQL:

ВОССТАНОВИТЬ мастер БАЗЫ ДАННЫХ С ЗАМЕНА

Параметр REPLACE предписывает SQL Server восстановить указанную базу данных, даже если база данных с таким именем уже существует. Существующая база данных, если таковая имеется, удаляется.В однопользовательском режиме рекомендуется ввести оператор RESTORE DATABASE в служебной программе sqlcmd.

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

Советы:

1. Всегда имейте под рукой текущую резервную копию главной базы данных.
2. Как можно скорее создайте резервную копию главной базы данных после следующих операций:

  • Создание, изменение или удаление любой базы данных.
  • Измените значения конфигурации сервера или базы данных.
  • Измените или добавьте учетную запись для входа в SQL Server.

3. Не создавайте пользовательские объекты в базе данных master. В противном случае резервную копию главной базы данных следует выполнять чаще.
4. Не устанавливайте TRUSTWORTHY «ON» специально для основной базы данных.

Статьи по теме:

Restore Database on SQL Server — Developer Portal Guide

1 Введение

В определенных ситуациях (например, при нежелательном обновлении базы данных или повреждении данных) может потребоваться восстановление базы данных Mendix из резервной копии.В этом документе описаны действия, необходимые для полного восстановления базы данных, и определены предварительные условия для восстановления резервных копий.

Это практическое руководство научит вас делать следующее:

2 Предварительные требования

Перед тем, как приступить к этому практическому руководству, убедитесь, что вы выполнили следующие предварительные требования:

  • Имеют достаточные права на СУБД (подробнее см. 3 Разрешения)
  • Убедитесь, что выполняются следующие моменты:
    • База данных Mendix обслуживается с использованием планов обслуживания, как описано в разделе Как настроить планы обслуживания Mendix SQL
    • Действительный файл резервной копии базы данных существует для базы данных Mendix
    • Действительные файлы журнала транзакций существуют для базы данных Mendix

3 Разрешения

Если восстанавливаемая база данных не существует, пользователь должен иметь разрешения CREATE DATABASE , чтобы иметь возможность выполнить RESTORE .Если база данных существует, разрешения на ВОССТАНОВЛЕНИЕ по умолчанию принадлежат членам фиксированных серверных ролей sysadmin и dbcreator и владельцу базы данных ( dbo ).

Разрешения

RESTORE предоставляются ролям, в которых информация о членстве всегда доступна серверу. Поскольку членство в фиксированной роли базы данных можно проверить только тогда, когда база данных доступна и не повреждена (что не всегда происходит при выполнении RESTORE, члены фиксированной роли базы данных db_owner не имеют разрешений RESTORE.

4 Восстановление базы данных

Чтобы восстановить базу данных, выполните следующие действия:

  1. После подключения к соответствующему экземпляру ядра СУБД Microsoft SQL Server щелкните имя сервера, чтобы развернуть дерево серверов в Object Explorer .
  2. Развернуть Базы данных . В зависимости от базы данных выберите пользовательскую базу данных или разверните Системные базы данных и выберите системную базу данных.
  3. Щелкните правой кнопкой мыши базу данных, выберите Задачи > Восстановить > База данных , что откроет диалоговое окно Восстановить базу данных .
  4. В разделе Source страницы General укажите источник и расположение наборов резервных копий для восстановления, выбрав Device > Add и затем указав файл резервной копии:

  5. В разделе Destination на странице General поле Database автоматически заполняется именем базы данных, которую нужно восстановить. Чтобы изменить имя базы данных, введите новое имя в это поле.

  6. В разделе Restore plan на странице General оставьте значение по умолчанию . Для последней резервной копии или щелкните Timeline для доступа к диалоговому окну Backup Timeline , где вы можете вручную выбрать момент времени. чтобы остановить восстановление.

  7. В сетке Backup sets to restore выберите резервные копии для восстановления. В этой сетке отображаются резервные копии, доступные для указанного места.По умолчанию предлагается план восстановления. Чтобы отменить предложенный план восстановления, измените значения в сетке. Резервные копии, которые зависят от восстановления более ранней резервной копии, автоматически отменяются, когда отменяется выбор более ранней резервной копии.

    При желании щелкните «Файлы» на панели «Выбор страницы», чтобы открыть диалоговое окно «Файлы». Отсюда вы можете восстановить базу данных в новое место, указав новое место восстановления для каждого файла в таблице «Восстановить файлы базы данных как».

  8. Чтобы просмотреть или выбрать расширенные параметры, на панели Параметры восстановления на странице Параметры вы можете выбрать любой из следующих параметров, если он подходит для вашей ситуации:

    • С опциями (не требуется):
      • Заменить существующую базу данных ( ЗАМЕНИТЬ )
      • Сохранить настройки репликации ( WITH KEEP_REPLICATION )
      • Ограничить доступ к восстановленной базе данных ( WITH RESTRICTED_USER )
    • Выберите вариант в поле Состояние восстановления , которое определяет состояние базы данных после операции восстановления:
      • ВОССТАНОВЛЕНИЕ С ВОССТАНОВЛЕНИЕМ — это поведение по умолчанию, которое оставляет базу данных готовой к использованию путем отката незафиксированных транзакций.
        • Не удается восстановить дополнительные журналы транзакций
        • Выберите этот вариант, если сейчас восстанавливаете все необходимые резервные копии.
      • RESTORE WITH NORECOVERY оставляет базу данных неработоспособной и не выполняет откат незафиксированных транзакций
        • Дополнительные журналы транзакций можно восстановить
        • База данных не может использоваться, пока она не будет восстановлена ​​
      • RESTORE WITH STANDBY оставляет базу данных в режиме только для чтения
        • Отменяет незавершенные транзакции, но сохраняет действия отмены в резервном файле, чтобы можно было отменить эффекты восстановления.
    • Сделайте резервную копию конечного журнала перед тем, как будет выбрано восстановление, если это необходимо для выбранного вами момента времени
      • Вам не нужно изменять этот параметр, но вы можете выбрать резервное копирование хвостовой части журнала, даже если это не требуется
    • Операции восстановления могут завершиться ошибкой, если есть активные подключения к базе данных
      • Установите флажок Закрыть существующие соединения , чтобы убедиться, что все активные соединения между Management Studio и базой данных закрыты (этот флажок устанавливает базу данных в однопользовательский режим перед выполнением операций восстановления и устанавливает базу данных в многопользовательский режим, когда полная)
    • Выберите Запрашивать перед восстановлением каждой резервной копии , если вы хотите получать подсказки между каждой операцией восстановления
      • Обычно в этом нет необходимости, если только база данных не большая и вы не хотите отслеживать статус операции восстановления.
  9. Щелкните ОК .

5 Подробнее

Disaster Recovery для баз данных SQL Server

CREATE PROC usp_DB_Restore_MasterRecovery

— Добавьте имя базы данных и входные переменные, вместо того, чтобы устанавливать их в строках 40-23.

AS

DECLARE

@filename VARCHAR (255)

,

@cmd VARCHAR (500)

,

@ cmd2 VARCHAR (500)

, это @ samedys входной параметр, если вы не тестируете.

, @ dbNameTarget sysname — это входной параметр, если вы не тестируете.

, @ FullRestoreFolder NVARCHAR (MAX) — это входной параметр, если вы не

— тестируете.

, @ dbNameStatement NVARCHAR (MAX)

,

@dbNameStatementDiff NVARCHAR (MAX)

,

@LogicalName VARCHAR (255)

000

,

CHysical

000 (

AR

) Введите VARCHAR (20) — полезно при чтении заголовков резервных копий, не так ли? — Возможно, в рамках проверки.

, @ FileGroupName VARCHAR (255)

,

@Size VARCHAR (20)

,

@MaxSize VARCHAR (20) — проверьте, что я делаю выше, и используйте то, что ниже, если применимо.

, @ filelistStatmt1 VARCHAR (MAX)

,

@filelistStatmtDiff VARCHAR (MAX)

/ * Следующие переменные настроены для тестирования и могут быть отключены (при использовании sp мы не можем получить их автоматически из баз данных sys).* /

, @ backupFile sysname — сначала будет извлекаться из локальных тестовых файлов .sqb.

, @ logicalDataFile sysname

/ * Сначала я разрабатываю этот код, предполагая, что у нас будет только один файл данных и логический файл для каждой базы данных. Позже мы добавим поддержку нескольких логических и физических файлов (в случае с Database1 может быть более одной строки для dbo.sysfiles

, где fileid = 1 и groupid = 1).* /

, @ logicalDataStmt1 NVARCHAR (MAX)

,

@ logicDataStmt2 NVARCHAR (MAX)

,

@ logicalDataStmt3 NVARCHAR (MAX)

— Возвращение

Logical — NVARCHAR (MAX)

.

, @ logicalLogStmt1 NVARCHAR (MAX) — Так много надоедливых переменных. Если бы я мог просто

, @ logicalLogStmt2 NVARCHAR (MAX) — читать заголовок было бы проще в будущем.

, @ logicLogStmt3 NVARCHAR (MAX)

,

@physicalDataFile sysname — легко получить, так как он был в главном.

, @ physicalLogFile sysname — нужны две переменные.

, @ physicalLogFileStmt1 NVARCHAR (MAX)

,

@ physicalLogFileStmt2 NVARCHAR (MAX)

,

@ physicalLogFileStmt3 NARCHAR (MAX)

не разбрасывать большие

— все равно в счет.

— Параметры и переменные, установленные Хьюго для тестирования.

SET @FullRestoreFolder = ‘\\ testServer \ Drive $ \ ProdServerBackupFolder \ full \’

SET @dbNameSource = ‘Database1’

SET @dbNameTarget иногда для базы данных -записать другую базу данных

— (например, в случае importpdm_tst).

SET @ physicalDatafile = (

SELECT filename

FROM MASTER.dbo.sysdatabases

WHERE NAME = @ dbnameTarget)

PRINT ‘Физические данные ФАЙЛ ДЛЯ ВОССТАНОВЛЕНИЯ ЕСТЬ’ + @ PhysicalDatafile

SET @ logicDataStmt1 = ‘

, выберите имя из [‘

SET @ logicalDataStmt2 = ‘]. Dbo.sysfiles, где fileid = 1 и groupid = 1’

SET @ logicalDataStmt3 = (@ logicalDataStmt1 + @ dbNameTarget + @ logicalDataStmt2)

, чтобы выполнить запрос I IO

/

. эта строка, но я все время думал, что если бы это было в одном операторе, мой оператор набора @logicalDataFile принял бы результат запроса (выберите первое имя из PROD_PASRAA.dbo.sysfiles, где fileid) = 1 и groupid = 1. * /

CREATE TABLE #logicalDataFile — Удалить таблицу #logicaldatafile.

(

sysname логического файла данных

)

INSERT INTO [#logicalDataFile]

логический

(

ata2000

000

0002 логический)

(

ata2000)

— Теперь, наконец, установите переменную из температуры.

SET @ logicDataFile = (

SELECT *

FROM #logicalDataFile)

— Проверить метод временной таблицы … требуется набор результатов из.

PRINT ‘файл логических данных’ + @ logicalDataFile

SET @ logicalLogStmt1 = ‘выберите первое имя из [‘

SET @ logicalLogStmt2 = ‘]. Dbo.sysfiles, где fileid = 2 и groupid = 0 ‘

— Составьте инструкцию.

SET @ logicLogStmt3 = (@ logicalLogStmt1 + @ dbNameTarget + @ logicalLogStmt2)

СОЗДАТЬ ТАБЛИЦУ #logicalLogfile — Удалить таблицу #logicalLogfile.

(

логическое имя файла логического журнала

)

ВСТАВИТЬ INTO [#logicalLogFile]

логический

(

000

000

— Теперь, наконец, установите переменную из температуры.

SET @ logicLogFile = (

SELECT *

FROM #logicalLogFile)

PRINT ‘логический файл журнала’ + @ logicalLogFile — имеет правильное значение —

последняя переменная, связанная с файлом db, из sysfiles.

SET @ physicalLogFileStmt1 = ‘выберите имя файла из [‘

SET @ physicalLogFileStmt2 = ‘]. Dbo.sysfiles, где fileid = 2 и groupid = 0’

SET @ physicalLogFileStmtm (@ PhysicalLogFileStmtm) @ physicalLogFileStmt2)

CREATE TABLE #physicalLogFile — Удалить таблицу #physicalLogFilefile.

(

PhysicalLogFile sysname

)

INSERT INTO [#physicalLogFile]

(

PhysicalStation)

000

Log2000

PhysicalStation

— Теперь, наконец, установите переменную из температуры.

SET @ PhysicalLogFile = (

SELECT *

FROM #physicalLogFile)

PRINT ‘физический файл журнала’ + @ PhysicalLogFile

Все здесь, и мы готовы к некоторой логике резервного копирования.Возьмите

соответствующий файл для папки восстановления и в соответствии со следующими данными

файл полного восстановления. * /

CREATE TABLE #dirList (имя файла NVARCHAR (MAX))

CREATE TABLE #filelist (

LogicalName NVARCHAR (MAX)

,

)

CHARCHAR (MAX)

[Тип] VARCHAR (20)

,

FileGroupName VARCHAR (50)

,

Размер VARCHAR (20)

,

MaxSize VARCHAR (20)

Получить

список резервных копий базы данных, находящихся в каталоге restoreFromDir.

IF @dbNameSource IS NULL — Если @OneDBName имеет значение NULL.

— Для наших целей мы используем только одно имя базы данных.

SELECT @cmd = ‘dir / b / on «‘ + @ FullRestoreFolder + ‘»‘ — Выберите @cmd = ‘dir / b / on’

— + @ restoreFromDir +

ELSE

SELECT

@cmd = ‘dir / b / od / og «‘ + @ FullRestoreFolder + ‘»‘

INSERT #dirList

Мастер EXEC..xp_cmdshell @cmd

— Выберите имя файла из #dirlist, список файлов которого подходит.

SELECT @ dbNameStatement = ‘full%_’+@dbnameSource+’_200%_%.sqb’ — SQB ПРЕДНАЗНАЧЕН ДЛЯ SQLBACKUP

SET @ filelistStatmt1 = (

SELECT TOP20002

TOP2 ОТ #dirList

ГДЕ имя файла LIKE @dbNameStatement)

PRINT ‘Это полный файл резервной копии, который нужно восстановить’ + @ filelistStatmt1

SET @backupfile = (@ FullRestoreFile = (@ FullRestore)

PRINT ‘это полный путь к файлу полного восстановления, который будет восстановлен’

+

@backupfile

EXEC DBA_Tools.dbo. [usp_DB_Restore] @backupfile, @dbnameTarget, @logicalDataFile,

@logicalLogFile, @physicalDataFile, @physicalLogFile

MS SQL Series — DatabaseJournal.com Series

, который содержит статьи журнала DatabaseJournal.com

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

Майкл Обер

Изучите администрирование SQL Server 2000 за 15 минут в неделю Серия

Александр Чигрик

Поиск и устранение неисправностей

Сравнения

Советы по оптимизации

Пошаговые инструкции

Сумит Дхингра

SQL «Как сделать»

Ограбить Гаррисон

SqlCredit — Разработка полного проекта базы данных OLTP для SQL Server

Грегори А.Ларсен

Лучшие практики T-SQL

Программирование на T-SQL

Работа с переменными даты и времени SQL Server

MAK

Аудит в SQL Server 2008

Работа с файлами .MDF и .LDF в SQL Server 2008

Зеркальное отображение базы данных в SQL Server 2008

Microsoft Windows PowerShell и SQL Server 2008 AMO

Проверьте свой SQL Server с помощью Windows PowerShell

Microsoft SQL Server 2008 — система отслеживания измененных данных

Шифрование данных в SQL Server 2005

Microsoft Windows PowerShell и SQL Server 2005 SMO

Функции регистра в SQL Server

Инструмент командной строки SQL Server 2005 «SQLCMD»

Разделение данных в SQL Server 2005

SQL Server 2005 — автоматическая установка

Александр Непомнящий

SQL Server 7.0

OLAP и хранилища данных

Ян Пан

Настройка кластера SQL Server 2008 с двумя узлами из командной строки

Уильям Э. Пирсон

Введение в MSSQL Server Analysis Services Series

Введение в безопасность в службах Analysis Services
Хранилище кубов: планирование разделов из перспективы SQL Server Management Studio
Хранилище кубов: планирование разделов (перспектива Business Intelligence Development Studio)
Хранилище кубов: введение в разделы
Введение в хранилище кубов
Дискретизация атрибутов: настройка группирования Имена
Дискретизация атрибутов: использование метода «кластеров»
Дискретизация атрибутов: использование метода «равных площадей»
Дискретизация атрибутов: использование автоматического метода
Введение в дискретизацию атрибутов
Более подробное знакомство с параметрами и свойствами в отношениях атрибутов служб Analysis Services
Взаимосвязи атрибутов : Параметры и свойства
Знакомство с отношениями атрибутов в службах MSSQL Server Analysis Services
Значения элементов атрибутов в службах Analysis Services
Службы MSSQL Analysis Services — Имена элементов атрибутов
Ключи элементов атрибутов — Часть II: Составные ключи
Attribute Me Ключи mber — Часть 1: Введение и простые ключи Атрибуты измерения
: Введение и обзор, Часть V Атрибуты измерения
: Введение и обзор, Часть IV Атрибуты измерения
: Введение и обзор, Часть III Атрибуты измерения
: Введение и обзор, Часть II Атрибуты измерения
: Введение и обзор, часть I
Компоненты размерной модели: измерения, часть II
Компоненты размерной модели: измерения, часть I
Управление неизвестными элементами в службах Analysis Services 2005, часть II
Управление неизвестными элементами в службах Analysis Services 2005, часть I
Альтернативный вариант Сортировка элементов атрибутов в службах Analysis Services 2005
Введение в связанные объекты в службах Analysis Services 2005
Счетчики различий в службах Analysis Services 2005
Позиционирование аналитики: условное форматирование на уровне служб Analysis Services
Администрирование и оптимизация: профилировщик SQL Server для запросов служб Analysis Services
Mastering Enterprise BI: Time Intelligence ence Pt.II
Освоение корпоративной бизнес-аналитики: Time Intelligence Pt. I Дизайн и документация
: Введение в сводную диаграмму Visio 2007
Действия в службах Analysis Services 2005: Действие URL-адреса
Действия в службах Analysis Services 2005: Действие детализации
Освоение корпоративной бизнес-аналитики: введение в действия в службах Analysis Services 2005
Освоение корпоративной бизнес-аналитики: Введение в переводы
Освоение корпоративной бизнес-аналитики: знакомство с перспективами
Знакомство с аналитическими службами Журнал запросов 2005
Освоение корпоративной бизнес-аналитики: работа с группами показателей
Освоение корпоративной бизнес-аналитики: введение в ключевые показатели эффективности
Освоение корпоративной бизнес-аналитики: расширение источника данных с помощью именованных вычислений, Pt .II
Освоение корпоративной бизнес-аналитики: расширение источника данных с помощью именованных вычислений, Pt. I
Объекты служб анализа процессов с помощью служб Integration Services
Оптимизация на основе использования в службах Analysis Services 2005
Введение в службы MSSQL Server Analysis Services: повторение именованных наборов
Введение в службы MSSQL Server Analysis Services: перенос базы данных служб Analysis Services 2000 в службы Analysis Services 2005
Введение в Службы MSSQL Server Analysis Services: введение в представления источников данных
Введение в службы MSSQL Server Analysis Services: параметры отчетов для кубов служб Analysis Services: MS Excel 2003 и другие…
Введение в MSSQL Server Analysis Services: Освоение корпоративной бизнес-аналитики: создание устаревших «сегментов» в кубе
Введение в MSSQL Server Analysis Services: освоение корпоративной бизнес-аналитики: относительные периоды времени в кубе служб Analysis Services, часть II
Знакомство с MSSQL Server Службы Analysis Services: освоение корпоративной бизнес-аналитики: относительные периоды времени в кубе служб Analysis Services
Знакомство с сервером MSSQL Службы анализа: обработка кубов служб анализа с помощью DTS
Введение в сервер MSSQL Службы аналитики: нюансы представления: представление кросс-таблиц — то же измерение Службы Analysis Services: упрощение схемы куба с указанием и щелчком : Полуаддитивные меры и периодические остатки
Intr Введение в MSSQL Server 2000 Analysis Services: выполнение инкрементных обновлений куба — введение
Введение в MSSQL Server 2000 Analysis Services: секционирование куба в службах Analysis Services — введение
Введение в MSSQL Server 2000 Analysis Services: базовая конструкция хранилища
Введение в MSSQL Server 2000 Analysis Services: производные показатели vs.Вычисляемые показатели
Знакомство с MSSQL Server 2000 Analysis Services: создание динамического элемента по умолчанию
Знакомство с MSSQL Server 2000 Analysis Services: другой подход к проектированию и созданию локальных кубов
Знакомство с MSSQL Server 2000 Analysis Services: Знакомство с локальными кубами
Знакомство с MSSQL Службы аналитики Server 2000: действия в виртуальных кубах
Знакомство с MSSQL Server 2000 Службы аналитики: запуск действий в обычных кубах
Введение в MSSQL Server 2000 Службы аналитики: параметры отчетов для кубов служб Analysis: часть II ProClarity
Введение в MSSQL Server 2000 Службы Analysis Services: параметры отчетов для кубов служб Analysis Services: ProClarity Professional, часть I
Введение в MSSQL Server 2000 Службы Analysis Services: использование вычисляемых ячеек в службах Analysis Services, часть II
Введение в MSSQL Server 2000 Службы Analysis Services: использование вычисляемых ячеек в службах Analysis Services, часть I
Введение в MSSQL Server 2000 Analysis Services: Администрирование и оптимизация MSAS: к более сложному анализу
Введение в MSSQL Server 2000 Analysis Services: MSAS Администрирование и оптимизация: Анализ использования простого куба
Введение в MSSQL Server 2000 Analysis Services: создание куба анализа трафика веб-сайтов : Часть II
Создание куба анализа трафика веб-сайта: Часть I Параметры отчетов
для кубов служб Analysis: Cognos PowerPlay
Параметры отчетов для кубов служб аналитики: MS FrontPage 2002 Параметры отчетов
для кубов служб аналитики: MS Excel 2002
Введение в MSSQL Службы аналитики Server 2000: детализация: с двух точек зрения
Знакомство с MSSQL Server 2000 Analysis Services: настраиваемые кубы: финансовая отчетность — часть II
Знакомство с настраиваемыми кубами служб аналитики MSSQL Server 2000: финансовая отчетность (часть I)
Введение в Службы аналитики SQL Server 2000: изучение виртуальных кубов
Введение в службы аналитики SQL Server 2000: работа с редактором куба
Введение в службы анализа SQL Server 2000: измерения «родитель-потомок»
Введение в службы аналитики SQL Server 2000: обработка измерений времени
Введение в службы анализа SQL Server 2000: работа с Измерения
Введение в службы аналитики SQL Server 2000: создание нашего первого куба

Серия MDX Essentials

многомерных выражений в службах Analysis Services

Службы отчетов сервера MSSQL

Инструмент восстановления базы данных SQL Server для управления базой данных SQL

Диспетчер восстановления SQL Server для базы данных SQL

Утилита восстановления базы данных

SQL Server — это комплексное решение, которое поможет вам восстановить базы данных SQL 2016, 2014, 2012, 2008 R2, 2008, 2005 и 2000.Этот инструментарий поможет вам восстановить поврежденный файл первичной базы данных (MDF) и файл вторичной базы данных (NDF). Он может анализировать файл журнала SQL (LDF), чтобы проверить все транзакции (вставка, обновление, удаление), выполненные в базе данных, а также сбросить пароль SQL.

Особенности средства восстановления базы данных SQL Server

  • Восстановление базы данных SQL Server: Подробнее …

    Этот расширенный набор инструментов дает вам возможность восстановить поврежденные файлы MDF и NDF со всеми интегрированными компонентами, такими как таблицы, хранимые процедуры, функции, триггеры, индексы, правила, ключи и т. Д.

  • Анализ файла журнала базы данных SQL: Подробнее …
    Средство управления базами данных

    SQL быстро сканирует файл LDF и анализирует / считывает все транзакции файла журнала SQL, такие как вставка, удаление, обновление, с полной активностью журнала (имя транзакции, имя таблицы, время транзакции, запрос и т. Д.).

  • Сброс SQL SA / пароль пользователя: Подробнее …

    Toolkit позволяет пользователям сбрасывать пароли базы данных SA и Users для нескольких пользователей, присутствующих в главном устройстве.mdf файл. Он может сбросить пароль любой длины и любого типа (числовые, буквенно-цифровые, специальные символы).

  • Расшифровать зашифрованную базу данных SQL: Подробнее …

    С помощью диспетчера восстановления SQL Server пользователи могут удалить шифрование из базы данных SQL. Инструментарий также показывает вам полный предварительный просмотр расшифрованной базы данных перед экспортом.

  • Восстановить файл резервной копии SQL: Подробнее …

    Утилита позволяет восстановить поврежденный файл резервной копии базы данных SQL (BAK).Этот инструментарий может восстановить файл резервной копии SQL любого размера и поддерживать целостность данных с ограничениями.

  • Просмотр базы данных файлов SQL MDF: Подробнее …

    С помощью этого передового инструмента управления базой данных SQL вы можете увидеть все компоненты поврежденного или исправного главного файла базы данных, такие как таблицы, представления, хранимые процедуры, функции и т. Д., Без среды SQL.

  • Поддержка SQL Server / ОС Windows: Подробнее…

    Toolkit поддерживает SQL Server 2016, 2014, 2012, 2008R2, 2008, 2005, 2000 и совместим со всеми версиями операционной системы Windows, включая Win-8, 7, XP и более ранние версии.

Скриншоты диспетчера базы данных SQL Server

FAQ: Часто задаваемые вопросы

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

Да, менеджер восстановления SQL Server может восстанавливать поврежденную главную базу данных, а также файл базы данных пользователя.

С помощью этого набора инструментов вы можете восстановить поврежденный файл резервной копии SQL и восстановить его базу данных.

Используя утилиту восстановления базы данных SQL Server, вы можете сбросить пароль любой версии SQL.

Что говорят наши пользователи

Я очень доволен использованием инструментария диспетчера восстановления SQL Server. Инструментарий легко восстанавливает файл SQL MDF, LDF, BAK, а также может удалить шифрование из базы данных SQL.

— Трэвис Портер

Инструмент восстановления базы данных SQL Server — отличная утилита, которая помогает мне исправить все проблемы, связанные с базой данных MS SQL.

— Харви Хикс

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *