Восстановление дифференциальной резервной копии создает файл журнала DEFUNCT?

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

  

Msg 3127, уровень 16, состояние 1, строка 1 Файл 'Database_Log2'   восстановленная база данных «DatabaseName» остается в   несуществующее состояние, поскольку база данных использует простую модель восстановления   и файл помечен для доступа на чтение и запись. Поэтому только   файлы только для чтения могут быть восстановлены путем частичного восстановления.

База данных восстанавливается и считается онлайн, но любая операция резервного копирования выходит из строя из-за этого файла DEFUNCT со следующей ошибкой:

  

Msg 3636, уровень 16, состояние 2, строка 1 Ошибка при обработке   Метаданные BackupMetadata для идентификатора базы данных id 10 файлов 6. Msg 3046,   Уровень 16, состояние 2, строка 1 Встречаются несогласованные метаданные.   Единственной возможной операцией резервного копирования является резервное копирование хвоста с использованием WITH   CONTINUE_AFTER_ERROR или NO_TRUNCATE. Msg 3013, уровень 16, состояние   1, строка 1 BACKUP DATABASE заканчивается аномально.

Если я делаю RESTORE FILELISTONLY по полному и дифференциальному, оба дают мне тот же результат, который соответствует тому, что я вижу из sys.database_files в исходной базе данных. Сервер - это SQL2012 SP1, в версии для разработчиков.

Я могу сделать полную резервную копию и сразу после этого сделать дифференциал и восстановить эти файлы в другую базу данных на одном сервере и увидеть ту же самую проблему, поэтому есть что-то с тем, как создается дифференциал, который вызывает это , Если я восстановил полную резервную копию WITH RECOVERY, проблем не будет. Я не знаю, существовал ли этот файл в этой базе данных, но вполне возможно, что этот файл существовал и был удален давно. Если я запрошу sys.database_files в восстановленной базе данных, файл DEFUNCT имеет значение для drop_lsn, что, похоже, подтверждает это. В настоящее время в исходной базе данных есть только одна файловая группа (PRIMARY), 4 файла данных и один файл журнала.

Любые идеи?

11 голосов | спросил FilamentUnities 16 PMpWed, 16 Apr 2014 19:54:34 +040054Wednesday 2014, 19:54:34

1 ответ


5

Ниже приведены шаги по его воспроизведению, протестированные на SQL Developer SP1 Developer Edition. Это не происходит на SQL 2008. Подводя итог, база данных, созданная в SQL 2012, в то время как база данных модели находится в режиме восстановления SIMPLE, которая имеет полную резервную копию при наличии дополнительного файла журнала, не может создавать удобные дифференциальные резервные копии, если этот дополнительный файл журнала когда-либо удален.

ALTER DATABASE [model] SET RECOVERY SIMPLE
GO
CREATE DATABASE [DefunctTest]
GO
ALTER DATABASE [DefunctTest] ADD LOG FILE ( NAME = N'DefunctTest_log2', FILENAME = N'D:\DefunctTest_log2.ldf' , SIZE = 25600KB , FILEGROWTH = 10%)
GO
BACKUP DATABASE [DefunctTest] TO DISK = 'D:\DefunctTestPostLogFile.bak' WITH INIT
GO
ALTER DATABASE [DefunctTest]  REMOVE FILE [DefunctTest_log2]
GO

BACKUP DATABASE [DefunctTest] TO DISK = 'D:\DefunctTestFull.bak' WITH INIT
GO
BACKUP DATABASE [DefunctTest] TO DISK = 'D:\DefunctTestDiff.bak' WITH DIFFERENTIAL, INIT
GO
--Show that the backups only have the one log file.
RESTORE FILELISTONLY FROM DISK = 'D:\DefunctTestFull.bak'
RESTORE FILELISTONLY FROM DISK = 'D:\DefunctTestDiff.bak'
GO
RESTORE DATABASE [DefunctTest2] FROM DISK = 'D:\DefunctTestFull.bak' WITH 
MOVE 'DefunctTest' TO 'D:\DefunctTest2.mdf',
MOVE 'DefunctTest_log' TO 'D:\DefunctTest2_log.ldf', REPLACE, NORECOVERY
GO
--This restore will have the error.
RESTORE DATABASE [DefunctTest2] FROM DISK = 'D:\DefunctTestDiff.bak' WITH RECOVERY
GO

USE [DefunctTest2]
SELECT * FROM sys.database_files
GO

Я отправил элемент Connect для этой ошибки https://support.microsoft.com/en-us/kb/2830400 . Из комментариев появляется дополнительное исправление, доступное для SQL2012 /2014, сценарии кажутся очень похожими: https://support.microsoft.com/en-us/kb/3009576

ответил FilamentUnities 25 PMpFri, 25 Apr 2014 19:29:32 +040029Friday 2014, 19:29:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132