?
- /*?
- ????真实案例:在执行语句的时候错误的把系统中的一个表的数据全部删除?
- ????在删除之前,我做过一次完整的数据库备份,再删除之后,我第一时?
- ????间做了尾日志备份?
- ????也就是说??我手上现在有一份最新的完整备份??和删除数据之后的尾?
- ????日志备份?
- */?
- ?
- USE?MASTER?
- GO?
- IF?OBJECT_ID('TestDb')?IS?NOT?NULL?
- DROP?DATABASE?TestDb?
- GO?
- CREATE?DATABASE?TestDb;?
- GO?
- ?
- ALTER?DATABASE?TestDb?SET?RECOVERY?FULL?WITH?NO_WAIT?
- GO?
- ?
- ?
- SELECT??
- ????recovery_model,?
- ????recovery_model_desc???
- FROM??
- ????sys.databases???
- WHERE??
- ????name?='TestDb'???
- /*?
- recovery_model??recovery_model_desc?
- ?
- 1???FULL?
- */?
- ?
- ?
- ?
- USE?TestDb?
- GO?
- IF?OBJECT_ID('StuInfo')?IS?NOT?NULL?
- DROP?TABLE?StuInfo?
- CREATE?TABLE?StuInfo?
- (?
- ????Id?int?identity(1,1),?
- ????StuId?varchar(25),?
- ????StuName?nvarchar(25),?
- ????StuSex?varchar(25),?
- ????Others?nvarchar(255)?
- )?
- GO?
- insert?StuInfo(StuId,StuName,StuSex,Others)?
- select?'200911076','test01','男','2009年入学,目前在四川成都实习'?union?all?
- select?'200911077','test02',目前在上海实习'?union?all?
- select?'200911078','test03','女',留校考研'?union?all?
- select?'200911079','test04',目前在四川成都实习'?union?all?
- select?'200911080','test05',留校考研'?union?all?
- select?'200911081','test06',目前在广东深圳实习'?
- GO?
- ?
- ?
- BACKUP?DATABASE?[TestDb]??
- TO??DISK?=?N'E:MSSQL2008MSSQL10.MSSQLSERVERMSSQLBackupTestDb.bak'?WITH?NOFORMAT,?NOINIT,???
- NAME?=?N'TestDb-完整?数据库?备份',?SKIP,?NOREWIND,?NOUNLOAD,??STATS?=?10?
- GO?
- ?
- ?
- ?
- SELECT?*?FROM?StuInfo?
- /*?
- Id??StuId???StuName?StuSex??Others?
- ?
- 1???200911076???test01??男???2009年入学,目前在四川成都实习?
- 2???200911077???test02??男???2009年入学,目前在上海实习?
- 3???200911078???test03??女???2009年入学,留校考研?
- 4???200911079???test04??男???2009年入学,目前在四川成都实习?
- 5???200911080???test05??女???2009年入学,留校考研?
- 6???200911081???test06??男???2009年入学,目前在广东深圳实习?
- */?
- ?
- ?
- insert?StuInfo(StuId,Others)?
- select?'200911082','test07',目前在四川成都实习'?union?all?
- select?'200911083','test08',目前在上海实习'?
- select?getdate()?
- ?
- ?
- ?
- ?
- ?
- delete?from?StuInfo?
- select?getdate()?
- ?
- ?
- select?*?from?StuInfo?
- ?
- /*?
- 此时我发现自己犯的这个错误,为了弥补,?
- 我需要把数据恢复到刚刚插入数据之后的?
- 这个时间点,于是我做了一下操作?
- */?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- USE?[master]??
- BACKUP?LOG?[TestDb]??
- TO??DISK?=?N'E:MSSQL2008MSSQL10.MSSQLSERVERMSSQLBackupTestDb.bak'?WITH??NO_TRUNCATE?,?NOFORMAT,???
- NAME?=?N'TestDb-事务日志??备份',??NORECOVERY?,???
- STATS?=?10,?CHECKSUM?
- GO?
- declare?@backupSetId?as?int?
- select?@backupSetId?=?position??
- from?msdb..backupset??
- where?database_name=N'TestDb'??
- and?backup_set_id=(select?max(backup_set_id)??
- from?msdb..backupset?where?database_name=N'TestDb'?)?
- if?@backupSetId?is?null??
- begin??
- raiserror(N'验证失败。找不到数据库“TestDb”的备份信息。',?16,?1)??
- end?
- RESTORE?VERIFYONLY?FROM??DISK?=?N'E:MSSQL2008MSSQL10.MSSQLSERVERMSSQLBackupTestDb.bak'?WITH??FILE?=?@backupSetId,??NOUNLOAD,??NOREWIND?
- GO?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- RESTORE?DATABASE?[TestDb]??
- FROM??DISK?=?N'E:MSSQL2008MSSQL10.MSSQLSERVERMSSQLBackupTestDb.bak'?WITH??FILE?=?1,???
- NORECOVERY,??STATS?=?10?
- GO?
- ?
- ?
- ?
- RESTORE?LOG?[TestDb]?FROM??DISK?=?N'E:MSSQL2008MSSQL10.MSSQLSERVERMSSQLBackupTestDb.bak'?WITH??FILE?=?2,???
- STATS?=?10,??STOPAT?=?N'2013-01-11T09:10:08'?
- GO?
- ?
- ?
- use?[TestDb]?
- go?
- select?*?from?StuInfo?
- /*?
- Id??StuId???StuName?StuSex??Others?
- ?
- 1???200911076???test01??男???2009年入学,目前在四川成都实习?
- 2???200911077???test02??男???2009年入学,目前在上海实习?
- 3???200911078???test03??女???2009年入学,留校考研?
- 4???200911079???test04??男???2009年入学,目前在四川成都实习?
- 5???200911080???test05??女???2009年入学,留校考研?
- 6???200911081???test06??男???2009年入学,目前在广东深圳实习?
- 7???200911082???test07??男???2009年入学,目前在四川成都实习?
- 8???200911083???test08??女???2009年入学,目前在上海实习?
- */?
- ?
- ?
- 总结:?
- 为了能够在错误操作或者灾难发生后使数据尽快恢复,数据库就必须要满足一下前提:?
- ?
- 1,数据库的恢复模式必须是完整恢复模式?
- 2,灾难发生前或者错误删除数据之前必须做过一个完整数据库备份?
- 3,在上次数据库完整备份之后,如果做过任何日志备份,这些备份现在都能找到?
- ?
- 满足这些要求后,数据库就可以恢复到任何一个时间点了。?
- ?
- 恢复的具体步骤:?
- ?
- 1,灾难发生后备份活动事务日志(也称尾日志)?
- 2,还原最新完整数据库备份,而不做事务恢复(WITH?NORECOVERY)?
- 3,如果存在差异备份????则还原差异备份,而不做事务恢复(WITH?NORECOVERY)?
- 4,从备份后创建的第一个事务日志开始,使用NORECOVERY一次还原事务日志?
- 5,恢复数据库到某个时间点(WITH??STOPAT?=?N'某个时间点')?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|