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

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

这是我的查询

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 AUTHORITY \ SYSTEM。 RESTORE无法处理数据库“DBASE”,因为该会话正在使用该数据库。 build议在执行此操作时使用主数据库。 [SQLSTATE 42000](错误3102)RESTORE DATABASEexception终止。 [SQLSTATE 42000](错误3013)。 该步骤失败。

我不想恢复主数据库。 有人可以告诉我怎样才能使用SQL查询恢复我的数据库与BAK文件?

这不是要求你恢复主人。 这是要求你不要在DBASE,而你正在尝试恢复DBASE。

尝试:

 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 

您可以通过执行以下命令来恢复数据库备份:

 RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK' WITH REPLACE GO 

这会将现有的数据库replace为较新的数据库。

我将开始使用以下语句validation备份文件:

 restore headeronly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK' 

…返回包含特定备份设备上所有备份集的所有备份头信息的结果集。

 restore verifyonly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK' 

…validation备份,但不会将其还原,并检查备份集是否完整,整个备份是否可读。 但是,RESTORE VERIFYONLY不会尝试validation备份卷中包含的数据的结构。 在Microsoft SQL Server中,RESTORE VERIFYONLY已被增强以对数据执行附加检查,以增加检测错误的可能性。 目标是尽可能地接近实际的恢复操作。

如果备份文件没有问题,则可以继续closures数据库并确保没有人访问数据库:

 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 

(确保您的SQL Server Management Studio没有在查询窗口的下拉菜单中select数据库DBASE。)

之后,您可以开始使用恢复数据库。

 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 

如果您没有将备份恢复到新的位置,则可以省略MOVE命令,因为只有在恢复到新位置时才需要这些命令。

这应该使您的数据库重新联机。

顺便说一句,有多个事务日志文件没有太多的好处,除非你在事件中的磁盘空间不足。 事务日志文件是连续写入的,永远不会并行写入。 临时拥有多个事务日志文件的唯一原因:

响应完整交易logging的备选scheme包括:

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

…可以在这里find: 疑难解答完整的事务日志(SQL Server错误9002)

祝你好运恢复。