Резервное копирование журнала транзакций завершается с ошибкой «Не удалось получить эксклюзивный доступ, так как база данных используется» - PullRequest
1 голос
/ 16 января 2020

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

Действие было выполнено через SSMS, выбрав «Журнал транзакций», а также выбрав «Резервное копирование хвоста журнала» в разделе «Параметры носителя», после чего база данных должна остаться в «режиме восстановления».

После сбоя я попытался поставить сначала база данных переходит в однопользовательский режим, а также отключается, но обе команды не работают (или не работают).

Я повторил действие с тестовой базой данных, и это сработало без проблем. T- SQL находится ниже:

BACKUP LOG [TESTDB] TO  DISK = N'U:\MSSQL\Backup\TESTDB.bak' WITH  NO_TRUNCATE , NOFORMAT, NOINIT,  NAME = N'TESTDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  NORECOVERY ,  STATS = 10, CHECKSUM
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'TESTDB' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'TESTDB' )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''TESTDB'' not found.', 16, 1) end
RESTORE VERIFYONLY FROM  DISK = N'U:\MSSQL\Backup\TESTDB.bak' WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWIND
GO

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

Есть идеи у кого-нибудь?

1 Ответ

0 голосов
/ 16 января 2020

Резервная копия журнала, которая оставляет целевую базу данных в RESTORING, называется « Резервная копия журнала хвоста ». А перевод базы данных в автономный режим требует прекращения всех других подключений к базе данных. Как это:

use testdb
go
alter database testdb set single_user with rollback immediate
go
use master
BACKUP LOG [TESTDB] TO  DISK = N'c:\temp\TESTDB.bak' WITH  NO_TRUNCATE , NOFORMAT, NOINIT,  NAME = N'TESTDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  NORECOVERY ,  STATS = 10, CHECKSUM
GO
...