truncate table tb1;

--收缩数据库
backup log db1 with no_log
dbcc shrinkdatabase(N'db1',10,truncateonly);
 
--数据库事务日志还原详细步骤,
/*
首先有一个完整备份,必须是数据产生变化之前的,
等发现误操作数据,异常之后,不要着急,先做一
事务日志备份,然后在把 .bak 和 .trn 按顺序还原
注意的是  .bak 一定要 with norecovery 就是保持
还原状态,.trn 也是,只有你最后一个 .trn 的时候
才可以 with recovery 挂在数据库。
*/
--第一步 创建数据库
create database db1
Go
 
use db1
go
--第二步 创建表
create table tb1(
 id int identity(1,1) not null,
 fname nvarchar(32) not null,
 cdate datetime not null default getdate(),
 primary key (id asc)
)
Go
 
--第三步 插入数据
insert into tb1 (fname) select replace(newid(),'-','') from tb1;
 
--第四步 完整备份
BACKUP DATABASE [db1] TO  DISK = N'D:\db1_backup_01.bak' 
WITH NOFORMAT, NOINIT,  NAME = N'db1_backup_01', SKIP, REWIND, NOUNLOAD,  STATS = 10
 
--记录一个时间点
select getdate()
2011-09-07 15:48:21.840
 
--更新数据
update tb1 set fname = 'aoaoao';
 
--第五步 事务日志备份
BACKUP LOG [db1] TO  DISK = N'D:\\db1_backup_01.trn' 
WITH NOFORMAT, NOINIT,  NAME = N'db1_backup_01', SKIP, REWIND, NOUNLOAD,  STATS = 10
 
--记录一个时间点
select getdate()
2011-09-07 15:48:45.387
insert into tb1 (fname) select replace(newid(),'-','') from tb1;
 
--记录一个时间点
select getdate()
2011-09-07 15:49:25.420
--更新数据
update tb1 set fname = 'BIAIBAIBA';
--发现误更新了,本来想有条件的更新,结果全部更新了
 
 
 
--第六步 事务日志备份
BACKUP LOG [db1] TO  DISK = N'D:\\db1_backup_02.trn' 
WITH NOFORMAT, NOINIT,  NAME = N'db1_backup_02', SKIP, REWIND, NOUNLOAD,  STATS = 10
 
 
 
--还原数据库
RESTORE FILELISTONLY
   FROM DISK = 'D:\\db1_backup_01.bak'
 
--第七步 还原数据库 db2 另外起名字
restore database db2 from disk='D:\\db1_backup_01.bak'
with norecovery,
move 'db1' to 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\db2.mdf',
move 'db1_log' to 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\db2_log.LDF'
go
 
 
--还原日志
RESTORE FILELISTONLY
   FROM DISK = 'D:\\db1_backup_01.trn'
 
--001 中间日志 注意参数 with norecovery
restore database db2 from disk='D:\\db1_backup_01.trn' with norecovery
--002 最后日志 注意参数 with recovery
restore database db2 from disk='D:\\db1_backup_02.trn' with recovery, stopat='2011-09-07 15:49:25.420'
 
--查看数据,没问题
select * from tb1
select * from db2.dbo.tb1
 
update A set A.fname = B.fname
from tb1 A,db2.dbo.tb1 B
where A.id = B.id
 
--到此为止已经OK了
---哈哈哈