SQL Server 大数据管理——数据归档(段落备份)

SQL Server 大数据管理——数据归档(段落备份)

 

背景:

 

在SQL Server 大数据管理——数据归档(主文件备份)一文中,提到的归档方案是将非归档数据移除主文档,把归档数据移入主文档,通过备份主文档的方式对数据进行归档。这种归档的方式需要一次归档数据移动,本文将使用段落还原的方式,解决归档数据移动的问题。

 

一.    主文件数据移动到辅文件

SQL Server 大数据管理——数据归档(主文件备份)一文中已经详述移动的方案,这里不再详述

 

二.    归档历史数据

2.1  备份主文件

在被尾部日志的时候,要求对数据库独占,所以在备份开始的是断开网络(或者修改端口),kill掉连接数据库的进程,如下脚本可以生成killtest数据库所有连接的脚本

use master
go
select 'kill '+convert(varchar,spid) from sys.sysprocesses
where dbid=DB_ID(N'test')

进行文件备份归档前,做一次完整备份,以防误操作

--全备份
use master
go
BACKUP DATABASE  [test] TO  DISK=N'E:\backup\test_F.bak'
 WITH NOFORMAT,NOINIT,  NAME =N'test-完整 数据库 备份',SKIP,NOREWIND,NOUNLOAD,  STATS= 10
GO
--主文件备份
BACKUP DATABASE [test] FILEGROUP=N'PRIMARY'
TO  DISK=N'E:\backup\test_PRIMARY_2018.bak'
WITH NOFORMAT,NOINIT,  NAME =N'test-完整 数据库 备份',SKIP,NOREWIND,NOUNLOAD,  STATS= 10
GO

2.2  备份归档文件

--归档数据2019年以前的文件
use master
go
BACKUP DATABASE [test] FILEGROUP=N'Before2019'
TO  DISK=N'E:\backup\test_Before2019.bak'
WITH NOFORMAT,NOINIT,  NAME =N'test-完整 数据库 备份',SKIP,NOREWIND,NOUNLOAD,  STATS= 10
GO

2.3  备份结尾日志

对于完整恢复模式的数据库,进行段落还原时,需要尾部日志备份,所以备份当时的尾部日志,以供数据恢复使用:

--备份尾部日志
usemaster
go
BACKUPLOG [test] TO  DISK=N'E:\backup\test_log.bak'
WITH  NO_TRUNCATE,  NOFORMAT,INIT,  NAME =N'test-完整 数据库 备份',SKIP, NORECOVERY,NOREWIND,NOUNLOAD,   STATS= 10
GO

注意:备份尾部日志时,NO_TRUNCATE,NORECOVERY两个选项不可少

2.4  恢复生产库

备份结尾日志后,生产库处于还原状态,此时需要对生产库还原尾部日志,使其处于可用状态

RESTORELOG [test] FROM  DISK=N'E:\backup\test_log_2019.bak'WITH  FILE= 1,  NOUNLOAD,  STATS= 10
GO

检查数据库是否正常,重开网络(或者把端口改回)

2.5  数据恢复测试

使用段落还原,恢复归档数据,主文件还原是partial(段落还原)选项,且该选项只适应于主文件还原

use master
GO
--主文件还原时加partial(段落还原)选项,且该选项只能用在主文件还原时
RESTORE DATABASE [test2] FILE='test' FROM disk=N'E:\backup\test_PRIMARY.bak'
WITHfile=1,
MOVE N'test' TO N'D:\test2\test2.mdf',  
MOVE N'test_log' TO N'D:\test2\test2_log.ldf',
PARTIAL,NORECOVERY,stats=5
GO
 
--还原归档文件组
RESTORE DATABASE  [test2]  FILE='Before2019' FROM disk=N'E:\backup\test_Before2019.bak' WITH
MOVE N'Before2019' TO N'D:\test2\Before2019.ndf', 
NORECOVERY,stats=5
GO
 
--还原尾部日志
RESTORE log  [test2] FROM disk=N'E:\backup\test_log_2019.bak' WITH
RECOVERY,stats=5
GO

查询确认归档数据和生产库中归档数据一致,最后就可以删除生产库上的归档数据了。

2.6  删除归档数据

SQL Server 2016 以前版本,删除归档分区的数据,先将分区数据转为普通表数据,再truncate普通表,最后drop普通表

SQL Server 2016 增加truncate 某个分区数据的功能,具体如:

--truncate 表testpp 第1分区的数据
truncate table testpp with (partitions(1))
--truncate 表testpp 第1、2、4分区的数据
truncate table testpp with (partitions(1,2,4))
--truncate 表testpp 第1到4分区,第6分区的数据
truncate table testpp with (partitions(1 TO 4,6))

最后移除分区文件、文件组,建立归档说明及保存好相关备份及恢复脚本即可

三.    两种方案比计较

相同点:两种归档方案都涉及到主文件的备份还原

不同点:

1.        SQL Server 大数据管理——数据归档(主文件备份)一文中,主文件中的数据是归档数据,只需要备份还原主文件就可以完成数据的归档和恢复,但需要多一次从辅文件中把归档数据转移到主文件中的操作,增加系统I/O压力。同时在还原主文档的时候,使用了replace选项,要防止恢复的数据库串改已有数据库(所以恢复时最好使用空实例)

本文主文件没有数据,或尽量少的非归档数据(如配置表)。如果源库为完全恢复模式,需要尾部日志,才能恢复数据;而备份结尾日志时需要独占数据库,不太适用于线上生产库,更适合数仓库类的数据归档;同时尾部日志备份完成后,原库处于还原状态,需要使用尾部日志备份,恢复源库;在恢复数据时,不仅要使用partial、norecovery选项恢复主文件,还需要恢复归档数据对应辅助文件,及尾部日志。

如果喜欢,可以扫码关注SQL Server 公众号,将有更多精彩内容分享:

                                                                 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值