【问题标题】:Transaction Log Backup fails with "Exclusive access could not be obtained because the database is in use"事务日志备份失败并显示“无法获得独占访问权限,因为数据库正在使用中”
【发布时间】:2020-05-03 06:45:22
【问题描述】:

我正在尝试进行日志传送故障转移测试,旨在将数据库置于还原模式的步骤失败,并出现错误“无法获得独占访问权限,因为数据库正在使用中”。

该操作是通过 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

我还检查了任何阻塞或正在运行的事务,但没有任何显示。

有什么想法吗?

【问题讨论】:

    标签: sql-server backup transaction-log log-shipping


    【解决方案1】:

    使目标数据库处于 RESTORING 状态的日志备份称为“Tail Log Backup”。使数据库脱机需要终止与数据库的所有其他连接。像这样:

    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
    

    【讨论】:

    • 谢谢我遵循了没有提到这一点的 MS 指南。我确实尝试过,但没有“立即回滚”。
    猜你喜欢
    • 2014-04-08
    • 2011-05-02
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    相关资源
    最近更新 更多