数据库灾难只发生在其他人身上,对吗? 对?!?
我相信这是从计算机历史开始以来从未发生过的,但是,不pipe信不信,我遇到了数据库还原的问题。 也许你可以帮忙。 我希望这真的很简单。
问:如何恢复到两天前的备份?
GUI似乎没有工作,我找不到正确的TSQL手动。
我在2009年11月9日星期一上午9:30左右使用SQL Server Management Studio使用以下选项备份了SQL Server 2005数据库:
恢复模式:简单
备份types:完整
备份组件:数据库
过期后:0天后失效
目的地:磁盘
我想恢复这个备份,但我遇到了一些问题。
在“还原数据库”对话框中使用以下选项:
到数据库:[MyDatabaseName]到一个时间点:'11 / 9/2009 12:00:00 AM 0毫秒从数据库:[MyDatabaseName]覆盖现有的数据库:true。 恢复状态:通过回滚使数据库保持可用状态
错误消息:由于数据库正在使用,无法获得独占访问权限。 我尝试设置为single_user,重新启动SQL Server服务等。永远不可能知道如何终止现有的连接在恢复数据库GUI。
ALTER DATABASE [MyDatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO
ALTER DATABASE [MyDatabaseName] SET RECOVERY FULL GO
RESTORE DATABASE [MyDatabaseName] FROM DISK = N'F:\ DatabaseLocation \ BackupName.bak'WITH FILE = 1,NOUNLOAD,RECOVERY,REPLACE,STATS = 10,STOPAT ='2009年11月9日'
消息:此备份集包含在指定时间点之前logging的logging。 数据库正处于恢复状态,以便可以执行更多的前滚。
我已经尝试了REPLACE,NORECOVERY,RECOVERY等上面的不同版本。我是否需要知道备份时间到精确的毫秒? 如果是这样,我怎么find?
您无法将时间恢复到SIMPLE恢复数据库。 只有FULL或BULK恢复模式数据库才能恢复到指定的时间点。
有关特定语法,请参阅恢复到特定时间点 (该选项在RESTORE LOG时间指定,而不是在RESTORE DATABASE时间指定)。 另请参阅在备份中将数据库还原到点以获取有关使用STOP AT的更多通用点。
听起来你已经修复了,但是我在StackOverflow上input了我的答案,然后发现qustion已经closures并移到了这里,所以这里是我在T_SQL中正常的数据库恢复命令序列,如果你需要的话
你将需要使用
RESTORE FILELISTONLY FROM DISK ='X:\ path \ MyBackupFilename.BAK'
以获取逻辑设备的名称(如果恢复到备份所在的同一数据库,则这些名称将保持不变),但否则可能会不同)
USE master - (正在恢复时不能坐在数据库中)
走
- ALTER DATABASE MyDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE MyDatabase SET OFFLINE WITH ROLLBACK IMMEDIATE
走
RESTORE DATABASE MyDatabase
FROM DISK ='X:\ path \ MyBackupFilename.BAK'
WITH
更换,
NORECOVERY, - 允许恢复更多的DIFF / TLogs
STATS = 10, - 显示进度(每10%)
MOVE'MyLogicalName_data'TO'X:\ MSSQL \ path \ MyDatabaseFile.mdf',
MOVE'MyLogicalName_log'TO'X:\ MSSQL \ path \ MyDatabaseFile.ldf'
走
- 如果需要恢复以后的DIFF备份(在完全备份之后进行):
RESTORE DATABASE MyDatabase
FROM DISK ='X:\ path \ MyDatabaseBackup_yyyymmdd_hhmm_Diff.BAK'
WITH
STATS = 10, - 显示进度(每10%)
NORECOVERY - 允许恢复更多TLog
走
- 额外的TRANSACTION LOGs的可选恢复
- 按顺序为每个事务日志重复以下步骤
RESTORE LOG MyDatabase
FROM DISK ='X:\ path \ MyDatabaseBackup_yyyymmdd_hhmm_Trans.BAK'
WITH
NORECOVERY - Allo恢复更多TLogs
走
- 完成恢复所有备份文件“激活”数据库
使用RECOVERY恢复数据库MyDatabase
走
- **如果**数据库是用不同的逻辑名称“重命名”那些现在
ALTER DATABASE MyDatabase修改文件
(NAME ='LogicalNameFromBackup_data',NEWNAME ='NewLogicalName_data')
走
ALTER DATABASE MyDatabase修改文件
(NAME ='LogicalNameFromBackup_log',NEWNAME ='NewLogicalName_log')
走
- 如果在单个/限制用户的数据库中进行备份
- 将访问权限改回“正常”
- ALTER DATABASE MyDatabase SET MULTI_USER,READ_WRITE WITH ROLLBACK IMMEDIATE
走
如果数据库已恢复到不同的服务器上,则还需要将数据库用户与服务器login名重新同步。
您可以从GUI中轻松地删除现有的连接。 只要去pipe理 – >活动监视器。 按数据库进行sorting,然后右键单击并杀死那些你想要恢复的数据库。
[编辑]
这一切都假定您的帐户不是默认使用相同的数据库,当然! 如果是这样,你会想改变它,然后重新连接。
你有没有试过
1-停止Sql服务器。
2-删除或移动到另一个崩溃的数据库(.mdf和.log)的物理文件。
3-启动Sql Server。
4-负载备份
你从哪个数据库运行恢复? 确保它不是你正在还原的数据库,而且在Sql Management Studio中没有任何活动的查询。