一个完整的差异备份和还原的T-SQL

 --清除环境,防止现有的数据影响测试结果 
exec  master..xp_cmdshell  'del  c:/text.bak' 
if  exists(select  *  from  master..sysdatabases  where  name='test') 
drop  database  test 

go   
--创建数据库 
create  database  test 
go 
--打开创建的数据 
use  test 
go   
--创建测试表 
create  table  t(a  int)   
--切换回master数据库 
use  master 
go 
--插入数据1 
insert  into  test..t  select  1 
go   
--然后进行一次完整备份 
backup  database  test  to  disk='c:/test.bak' 
go 
--插入数据2 
insert  into  test..t  select  2 
go 
--再进行一次完整备份 
backup  database  test  to  disk='c:/test.bak' 
go 
--插入3,4 
insert  into  test..t  select  3 
insert  into  test..t  select  4 
go 
--差异备份: 
backup  database  test  to  disk='c:/test.bak'  with  differential  
--删除数据库 
drop  database  test 
--还原数据库和差异数据库备份 
--还原完整备份 
restore  database  test  from  disk='c:/test.bak'  with  file=2,norecovery 
--还原差异备份的内容 
restore  database  test  from  disk='c:/test.bak'  with  file=3,recovery   
--显示恢复后的数据 
select  *  from  test..t 

 

注意下面的语句要放在一起执行  不然一条执行的话 数据库会显示为灰色 

--还原完整备份 
restore  database  test  from  disk='c:/test.bak'  with  file=2,norecovery 
--还原差异备份的内容 
restore  database  test  from  disk='c:/test.bak'  with  file=3,recovery   
--显示恢复后的数据 

 

FILE的理解

标识要还原的备份集。例如,file_number 为 1 表示备份媒体上的第一个备份集,file_number 为 2 表示第二个备份集。

 

select  backup_start_date  as  备份时间,position  as  备份号, 
case  type    when  'D'  then  '完整备份'  when  'I'  then  '差异备份'  end  as  备份类型   
from  msdb..backupset  where  database_name='test'   
and  media_set_id  in   
(select  distinct  media_set_id  from  msdb..backupmediafamily  where  physical_device_name='c:/test.bak') 
order  by  position 

你可能感兴趣的:(数据库,File,database,insert,Go,disk)