1、 创建数据TESTCREATE DATABASE TEST2) 创建表TEMP_01CREATE TABLE TEMP_01(ID [int] NOT NULL PRIMARY KEY,NAME [datetime] NOT NULL,ADDRESS varchar(50) NOT NULL)
2、 在釉涑杵抑表TEMP_01中插入100条数据use TESTdeclare @i intset @i=1while(@i<=100)begin朐袁噙岿INSERT INTO TEMP_01 VALUES (@i,getdate(),’ADDRESS ‘ + convert(varchar(50),@i))set @i=@i+1end查看数据select * from TEST4) 备份现有的数据库--------做一次完整数据库备份backup database TEST to disk =N’f:\db-recovery\TEST.bak’5) 再次向表TEMP_01 中插入50条数据use TESTdeclare @i intset @i=101while(@i<=150)beginINSERT INTO TEMP_01 VALUES (@i,getdate(),’ADDRESS ‘ + convert(varchar(50),@i))set @i=@i+1end查看数据select * from TEMP_01) 记录下当前正确数据的时间time1当前时间为:2009-8-21 15:18:337) 2分钟后模拟数据文件损坏 停止SQL SERVER 服务 net stop mysqlserver删除TEST.mdf 文件新建文本文件,并重命名为:TEST.mdf启动SQL SERVER 服务 net stop mysqlserver数据库TEST无法打开,证明已损坏备份数据库尾日志启动 sqlcmd 管理工具备份尾日志backup log TEST to disk=N’f:\db-recovery\aaaa.bak’ with no_truncate
3、解释一下no_truncate的作用:如果数据库处于离线状态并且无法启动。尝试执行尾日志备份。由于此时不会发生任何事务,所以 WITH NORECOVER鳔柩寞泷Y 是可选的。如果数据库受损,请使用WITH CONTINUE_AFTER_ERROR 或 WITH NO_TRUNCATE。BACKUP LOG database_name TO [WITH { CONTINUE_AFTER_ERROR | NO_TRUNCATE }重要提示:除非数据库受损,否则不建议使用 NO_TRUNCATE。具体的用法参看MSDN9) 将数据库恢复到time1时间–恢复最后一次正常配置在sqlcmd中执行如下语句进行恢复restore database test from disk=’f:\db-recovery\TEST.bak’ with norecovery restore log test from disk=’f:\db-recovery\aaaa.bak’ with recovery解释一下 with norecovery 和 with recovery的作用NORECOVERY每当您准备对数据库继续执行还原操作时,请使用 NORECOVERY。NORECOVERY 使数据库进入还原状态。这确保了数据库在尾日志备份后不会更改。RECOVERY将数据库从恢复状态改变到正常状态具体参看MSDNhttp://www.db-recovery.com/tong-guo-ldf-wen-jian-shi-xian-ri-zhi-hui-gun-jiang-shu-ju-hui-fu.html数据文件已经恢复!