使用文件和文件组备份可以恢复表数据吗?

以前有人问过我SQL Server backup命令是不是支持单表备份,SQL Server是没有Backup table命令的。当时我的建议是用SSIS导出到文件系统,其他数据库或者用文件组备份。现在想想单纯靠文件组备份不一定解决表还原问题。

对于文件组还原要求所有的文件组都要在同一个时间点上,这样才能保证数据库的连续性。如果我们发现文件组中的数据被被删除,那么我们需要首先恢复文件组备份然后再一次还原日志备份(如果是在线备份的日志备份是在错误发生后产生的),使还原的文件组跟其他文件组保持在同一时间点,这时还原的文件组才能Online.这时候数据已经没有了。

即使我们想直接把文件组还原到其他服务器上也是不可能的,因为数据文件的GUID属性。 所以在这种情况下还是要用到数据库还原。

下面是我自己做的一个测试:


USE [master]
GO
create database DBA
go
ALTER DATABASE [DBA] ADD FILEGROUP [Group]
GO
ALTER DATABASE [DBA] ADD FILE ( NAME = N'Group',
FILENAME = N'D:\MSSQL\Group.ndf' ,
SIZE = 3072KB , FILEGROWTH = 1024KB ) TO FILEGROUP [Group]
GO


--在文件组上创建表并且插入1000条数据
use DBA
go
create table test (name varchar(10)) on [group]
go
insert into test values ('allen')
go 1000


use master
go
--对文件组Group做全备份
BACKUP DATABASE DBA FILEGROUP ='GROUP' TO DISK ='D:\MSSQL\Group.bak'

use DBA
go
--删除数据
delete top (10) from test

use master
go
--FileGroup出现故障需要恢复,现在只需要从文件组恢复
restore database DBA filegroup ='group' from disk ='D:\MSSQL\Group.bak' with recovery

--现在我们做一个日志备份以确保捕获到该文件脱机时的点
backup log DBA to DISK ='D:\MSSQL\Group_Log_Final.trn'--查询Group的状态为RESTORING

---查看现在文件组的状态

use DBA
GO
select state_desc,name from sys.database_files

---显示Group文件组状为Restoring,因为还没有和其他文件组在同一个时间点,我们需要用上面备份的日志还原并且将文件组Online


use master
go
restore log DBA From DISK ='D:\MSSQL\Group_Log_Final.trn' with recovery


use DBA
GO
select state_desc,name from sys.database_files where name ='Group'

--数据库已经Online了
state_desc name
------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------
ONLINE Group

(1 row(s) affected)

--查看数据位990条不是1000条,所以数据不能够恢复
use DBA
gO
select COUNT(*) from test;

-----------
990

(1 row(s) affected)

我也是第一次使用文件组备份恢复如果大家觉得上面的逻辑有错误欢迎指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值