sql server 表(table)误删除通过日志恢复

--假设我们现在误操作删除了 Db.dbo.TB_test 这个表 DROP TABLE Db.dbo.TB_test  
--保存删除表的时间 SELECT  GETDATE()

--在删除操作后,发现不应该删除表 Db.dbo.TB_test  
--下面演示了如何恢复这个误删除的表 Db.dbo.TB_test  
--首先,备份事务日志(使用事务日志才能还原到指定的时间点)
BACKUP LOG Db TO DISK='c:\db_log.bak' WITH FORMAT GO  
--接下来,我们要先还原完全备份(还原日志必须在还原完全备份的基础上进行)
RESTORE DATABASE Db FROM DISK='c:\db.bak' WITH REPLACE,NORECOVERY GO  
--将事务日志还原到删除操作前(这里的时间对应上面的删除时间,并比删除时间略早
DECLARE @dt datetime SELECT @dt=DATEADD(ms,-20,dt) FROM # 
--获取比表被删除的时间略早的时间
RESTORE LOG Db FROM DISK='c:\db_log.bak' WITH RECOVERY,STOPAT=@dt GO  
--查询一下,看表是否恢复
SELECT * FROM Db.dbo.TB_test  
/*--结果: ID           -----------    (所影响的行数为 0 行) --*/  
--测试成功 GO

题一描述:SQL Server数据库备份还原后,在数据库名称后会出现“受限制访问”字样

问题二描述:在对SQL Server数据库进行还原时,提示:System.Data.SqlClient.SqlError:因为数据库正在使用,所以无法获得对数据库的独占访问权。(Microsoft.SqlServer.Smo)。出现此问题的原因是在还原数据库时,有其他用户正在使用数据库。还原数据库要求数据库工作在单用户模式。通常就是DBA在操作时,不允许其他用户连接数据库。

问题一解决办法:

         右键点击数据库 -> 属性 -> 选项 -> 状态 -> 限制访问 -> 选择Multiple -> 确定。

问题二解决办法:

         方法一(最方便):右键点击数据库 -> 属性 -> 选项 -> 状态 -> 限制访问 -> 选择Single-> 确定。然后还原。

         方法二(最直接):断开数据库连接

         方法三(最暴力):注销/重启数据库服务器

         方法四(最麻烦):写代码修改数据库相关属性,虽然麻烦,有的时候还是要用到,那就用到的时候再研究。

还原或删除sql server 2008数据库时,经常出现:

“因为数据库正在使用,所以无法获得对数据库的独占访问权”,终解决方案如下

关键SQL语句:

ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE

用完之后再

ALTER  database  [ datebase]  set   online 

你可能感兴趣的:(SQL Server)