--first command
use master
Go
-- second command
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Go
-- Third command
RESTORE DATABASE [MyDB] FROM DISK = N'D:\Restore_Backup\Restore_05042015\AcctDB.bak'
WITH FILE = 1,
MOVE N' AcctDB '
TO N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\WFStageAcct.mdf',
MOVE N' AcctDB _log'
TO N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\WFStageAcct_log.ldf',
NOUNLOAD,
REPLACE,
STATS = 10
GO
--forth command
ALTER DATABASE MyDB SET MULTI_USER
Go
Run Code Online (Sandbox Code Playgroud)
我运行上面的命令,一一恢复不同服务器上的数据库。但是有时我更改为单用户模式后无法恢复数据库,因为它被其他连接访问。如果我运行除了最后一部分之外的整个脚本会阻止其他连接,所以我将成为唯一的用户?
我已经在我的 SQL Server 2008R2 服务器上使用 Ola Hallengren 解决方案近两年了。昨晚备份失败,系统数据库和用户数据库均出现以下错误。
系统数据库错误示例:
日期和时间:2016-05-31 20:00:01 命令:DECLARE @ReturnCode int EXECUTE @ReturnCode = [master].dbo.xp_create_subdir N'E:\SQLBackups\Server1\master\FULL' IF @ReturnCode <> 0 RAISERROR('创建目录时出错。', 16, 1) HResult 0x5620,级别 16,状态 1 xp_create_subdir() 返回错误 183,“当该文件已存在时无法创建文件。” 消息 50000,级别 16,状态 1,服务器 Server1,第 1 行 创建目录时出错。结果:失败持续时间:00:00:00 日期和时间:2016-05-31 20:00:01
用户数据库错误示例:
日期和时间:2016-05-31 20:00:12 数据库:[Dummy_1] 状态:ONLINE 待机:无 可更新性:READ_WRITE 用户访问:MULTI_USER 是否可访问:是 恢复模式:SIMPLE 差分基 LSN:423000000014100036 上次日志备份 LSN: 342000000037500001 日期和时间:2016-05-31 20:00:12 命令:DECLARE @ReturnCode int EXECUTE @ReturnCode = [master].dbo.xp_create_subdir N'E:\SQLBackups\Server1\Dummy_1\ReturnCode <>IF 0 RAISERROR('创建目录时出错。', 16, 1) HResult 0x5620,级别 16,状态 1 xp_create_subdir() 返回错误 183,“当该文件已存在时无法创建文件。” …
当我们将数据库从 prod 恢复到 dev 时,哪种方法更好地断开访问数据库的其他连接?我使用的是 SQL Server 2008r2
1. 更改为单用户模式
use master
Go
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Go
RESTORE DATABASE [MyDB] FROM DISK = N'D:\Restore_Backup\Restore_05042015\DB.bak'
WITH FILE = 1,
MOVE N'DB'
TO N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyDB.mdf',
MOVE DB_log'
TO N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyDB_log.ldf',
NOUNLOAD,
REPLACE,
STATS = 10
GO
ALTER DATABASE MyDB SET MULTI_USER
Go
Run Code Online (Sandbox Code Playgroud)
2. 数据库下线并恢复数据库
USE master
GO
ALTER DATABASE MyDB
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
RESTORE DATABASE [MyDB] FROM DISK = N'D:\Restore_Backup\Restore_05042015\DB.bak' …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Ola 进行维护解决方案。我有 300 个数据库,我想使用脚本而不是一个一个地还原这些数据库。我准备了以下脚本来生成恢复脚本。
SELECT
'RESTORE DATABASE [' + name + ']' +'
FROM DISK = ''C:\Backup3\PC1800\'+name+'\FULL\PC1800_'+name+'_FULL_20160504_162534.bak''' + '
WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
GO'
FROM sys.databases
Run Code Online (Sandbox Code Playgroud)
它为所有数据库生成恢复脚本。
例如对于数据库 AdventureWorks2008
RESTORE DATABASE [AdventureWorks2008]FROM DISK =
'C:\Backup3\PC1800\AdventureWorks2008\FULL\PC1800_AdventureWorks2008_FULL_20160504_162534.bak'
WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
GO
Run Code Online (Sandbox Code Playgroud)
问题:
它_162534
为所有数据库生成的问题。但是备份文件名的第二部分因数据库而异。
有没有办法可以更改脚本,以便它可以从备份文件中生成正确的数字,而不是所有数据库的 162534?
经验: PC1800_AdventureWorks2008R2_FULL_20160504_162538