首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用SQL查询从BAK文件还原SQL数据库

使用SQL查询从BAK文件还原SQL数据库
EN

Server Fault用户
提问于 2015-01-21 21:47:38
回答 3查看 19.4K关注 0票数 0

我的数据库以BAK文件的格式备份到硬盘。我正在尝试恢复该备份,但我无法这样做。

以下是我的疑问:

代码语言:javascript
运行
复制
ALTER DATABASE DBASE
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE

RESTORE DATABASE DBASE
FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK'
WITH
MOVE 'DBASE' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE.MDF',
MOVE 'DBASE' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE_1.LDF',
MOVE 'DBASE' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE_2.LDF'

ALTER DATABASE DBASE SET MULTI_USER
GO

当我运行查询时,会得到以下错误:

以用户身份执行: NT权限\SYSTEM。RESTORE无法处理数据库'DBASE‘,因为这个会话正在使用它。建议在执行此操作时使用主数据库。SQLSTATE 42000还原数据库正在异常终止。SQLSTATE 42000。这个步骤失败了。

我不想恢复主数据库。有人能告诉我如何使用SQL查询用BAK文件恢复数据库吗?

EN

回答 3

Server Fault用户

发布于 2015-01-21 21:55:40

这不是要你恢复主人。它要求您在尝试恢复DBASE时不要在DBASE中。

尝试:

代码语言:javascript
运行
复制
USE MASTER
GO

ALTER DATABASE DBASE
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE    
GO

RESTORE DATABASE DBASE
FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK'
WITH
MOVE 'DBASE' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE.MDF',
MOVE 'DBASE_LOG' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE_1.LDF', REPLACE    
GO

ALTER DATABASE DBASE SET MULTI_USER
GO
票数 3
EN

Server Fault用户

发布于 2016-02-22 06:56:46

可以通过执行以下命令来还原数据库备份:

代码语言:javascript
运行
复制
RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'
WITH REPLACE
GO

这将把现有的数据库替换为新的数据库。

票数 0
EN

Server Fault用户

发布于 2016-02-22 07:55:19

首先使用以下语句验证备份文件:

代码语言:javascript
运行
复制
restore headeronly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK'

...returns结果集,包含特定备份设备上所有备份集的所有备份头信息。

代码语言:javascript
运行
复制
restore verifyonly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK'

...Verifies备份,但不恢复备份,并检查备份集是否已完成,并且整个备份是可读的。但是,RESTORE不尝试验证备份卷中包含的数据的结构。在Microsoft SQL Server中,RESTORE VERIFYONLY已被增强,用于对数据进行额外检查,以增加检测错误的可能性。目标是尽可能接近实际的恢复操作。

如果备份文件正常,那么您可以继续关闭数据库并确保没有其他人访问该数据库:

代码语言:javascript
运行
复制
USE MASTER
GO
ALTER DATABASE DBASE SET OFFLINE WITH ROLLBACK IMMEDIATE;
go
ALTER DATABASE DBASE SET ONLINE
go
ALTER DATABASE DBASE SET RESTRICTED_USER   
GO

(确保您的没有在查询窗口的下拉菜单中选择数据库DBASE。)

之后,可以开始使用以下方法还原数据库。

代码语言:javascript
运行
复制
USE MASTER
GO
RESTORE DATABASE DBASE 
FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK'
WITH 
MOVE 'DBASE' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE.MDF',
MOVE 'DBASE_LOG' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE_1.LDF', 
REPLACE, 
RECOVERY,
STATS = 10
GO

如果没有将备份还原到新位置,则可以省略移动命令,因为只有在还原到新位置时才需要这些命令。

这将使您的数据库恢复联机。

顺便说一句,拥有多个事务日志文件不会有多大好处,除非在事故期间磁盘上的空间耗尽。事务日志文件是连续写入的,从不并行写入。临时拥有多个事务日志文件的唯一原因是:

响应完整事务日志的备选方案包括

  • 在不同的磁盘上添加日志文件。

...as可以在这里找到:完整事务日志的故障排除(服务器错误9002)

祝你恢复正常。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/661390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档