我有我的数据库以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)
祝你好运恢复。