SqlServer知识整理2
1、还原数据库时,出现”数据库正在使用,无法获得对数据库的独占访问权”的错误。具体错误信息如下图所示:
2、在还原数据库“Dsideal_school_db”时,有时会遇见上图中的问题“因为数据库正在使用,所以无法获得对数据库的独占访问权”,此时我们可以按照以下步骤解决此问题:右键数据库“Dsideal_school_db”,然后选择“属性”,如下图
3、在出现的“数据库属性 — Dsideal_school_db ”对话框中,选择“选项”,在“其他选项”下的“状态”中找到“限制访问”。选择“SINGLE_USER”,点击“确定”按钮,如下图:
4、按照正常还原数据库的步骤,还原数据库。
5、SQLServer 2008以上误操作数据库恢复方法——日志尾部备份问题:经常看到有人误删数据,或者误操作,特别是update和delete的时候没有瑕铆幌约加where,然后就喊爹喊娘了。人非圣贤孰能无过,做错可以理解,但不能纵容,这个以后再说,现在先来解决问题。遇到这种情况,一般都是没有做备份,不然也不会来发问了。首先要冷静,否则会有更大的灾难。直到你放弃。解决方法:
6、检查数据库的恢复模式,如图:
7、或者使用脚本检查:SELECT recovery_model,recovery_model_desc FROM sys.databasesWHERE name ='AdventureWorks'结果如下:
8、确保数据库的恢复模式最起码不能为【简单】。至于如何修改成完整模式,我觉得这些应该没必要多说了。切记,对于任何重要环境,不仅仅是客户正式环境(俗称生产环境),都强烈建议使用【完整恢复模式】,虽然对于另外两种(大容量日志(BULK_LOGGED)、简单(SIMPLE))来说,完整恢复模式产生的日志会大,但是在出现问题的时候,就会觉得这些都不算什么了。并且我也想不到任何理由对于正式环境不使用完整恢复模式。只要管理得当,完整恢复模式的日志也不会太变态。(2)、这里其实隐含另外一步,曾经做过最少一次的完整备份。因为所有类型的备份都基于完整备份,如果没有最少一次完整备份,其他类型的备份都是多余的,所以在这里强调一下,在创建完一个新数据库之后,强烈建议甚至强制做一次完整备份。SELECT database_name,recovery_model,name FROM msdb.dbo.backupset使用上面的语句粗略可以看到有那些数据库做过备份,由于测试,所以做了几次备份,可以看到我这个时间点已经做了备份了。
9、(3)、确保别人不聪艄料姹再连接数据库,然后做一次日志尾部备份:首先先创建一点数据:然后来做个删除操作,为了定位是啥时候发生的,我加了一个waitfor命令,让它在某个时间发生,这样恢复的时候就有骠雪餐豺准确性:USE AdventureWorksGOWAITFOR TIME '21:45'DELETE FROM dbo.testRestore到这一步,灾难出现了。但是切记要冷静。下面就是本文的重点开始,做一次日志备份,最重要是选择【备份日志尾部】
10、然后在【选项】页选择:除【事务日志】除,其他红框包裹的地方为强烈建议勾选的地方。并且保证数据库不要有别人在连接,因为备份日志尾部会使数据库处于还原状态,拒绝其他会话的连接,如果不断开其他连接,是备份不了的。
11、然后按确定.此时,数据库会处于【正在还原】的状态
12、如果发现备份不了,可以用下面语句查看,并把spid杀掉:SELECT * FROM sys.sysprocesses WHERE dbid=DB_ID('AdventureWorks')
13、然后kill掉。接着继续备份。然后进行还原,如图:先要还原完整备份,选择最近的那次,由于日志备份的特性(以后其他文章再说),只认最后一次备份,所以要选择最新的那次,否则还原不了。
14、这里又有一个注意事项,记得选择:
15、接着还原日志文件,这是最最重要的一步:
16、然后:
17、只要把时间点指定到你误删除的时间之前即可。而由于日志尾部备份都是最后一个备份文件,所以这里选则红框部分即可:
18、最后可以看到,数据已经还原成功。1, 这是一般大型网站数据安全的一个办法,因为数据库比较大(可能有几百G)数据,做一次完整秽栉伫钒备份时间很长,而且影响数据库服务器的性能, 为保证数据安全,大多采用完整备份+事务日志备份来保证数据安全。例如:一天做一次或者2天做一次完整备份,几个小时内做一次日志备份。(当然可以用写一 个job来实现)2,如SQL server 2005里的镜像就是采用的这种事务日志同步的方法保证数据的同步。3,如果恢复的日志数据出现”LSN“太早和太晚说明了事务日志间的不连续。这时要注意备份 的时间和顺序。在对SQL Server数据库进行还原时,提示:System.Data.SqlClient.SqlError:因为数据库正在使用,所以无法获得对数据库的独占访问权。(Microsoft.SqlServer.Smo)。出现此问题的原因是在还原数据库时,有其他用户正在使用数据库。还原数据库要求数据库工作在单用户模式。通常就是DBA在操作时,不允许其他用户连接数据库。还原或删除sql server 2008数据库时,经常会出现:“因为数据库正在使用,所以无法获得对数据库的独占访问权”,终解决方案如下一般使用脚本将数据脱机再联机,所有连接将会全部断开关键SQL语句:ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE--脱机 用完之后再 ALTER database [ datebase] set online --联机