带有filestream功能的数据库备份和恢复
带有filestream功能的数据库备份和恢复
摘自《SQL2012实施与管理指南》P401
从SQL2008开始引入filestream功能。对于BLOB数据,如Images,Video,Word文档等,可以存放在文件系统中,
而不是在数据库文件里。这对数据库备份和恢复有什么影响呢?
我们通过一个例子,来检查带有filestream功能的数据库备份和恢复方案
1、在数据库服务级别,启动filestream,可以打开数据库的配置管理器,找到数据库服务,并右键单击属性。
首先找到filestream的设置,启用filestream,随后重新启动数据库服务
然后在SSMS里执行下面语句
EXEC [sys].[sp_configure] @configname = 'filestream_access_level', -- varchar(35) @configvalue = 2 -- int RECONFIGURE WITH override
2、创建一个数据库TESTFSDB。由于filestream使用一种特殊类型的文件组,所以必须至少为一个文件组指定 CONTAINS FILESTREAM 子句
CREATE DATABASE TESTFSDB GO ALTER DATABASE TESTFSDB ADD FILEGROUP [FSGroup] CONTAINS FILESTREAM GO ALTER DATABASE TESTFSDB ADD FILE (NAME=N'FSDATA',FILENAME=N'D:\FSData') TO FILEGROUP FSGroup GO
执行上面的语句后,filestream.hdr文件和¥FSLOG文件夹会出现在D:\FSData目录下。filestream.hdr文件是filestream容器的头文件
filestream.hdr文件是重要的系统文件,包含filestream标头信息。请不要删除或者修改此文件。
事实上,这个文件已经被数据库占用,在数据库服务启动状态下,是无法删除此文件的。
3、创建一个表,表名为FSTable。要使用filestream功能,必须要有一个字段,类型为VARBINARY(MAX)
并指定filestream属性,而且还需要有另外一个字段是UNIQUEIDENTIFIER类型并指定ROWGUIDCOL属性
USE TESTFSDB GO CREATE TABLE FSTable ( id UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE, FILENAME NVARCHAR(200), blobdata VARBINARY(MAX) FILESTREAM NULL )
4、插入相应的数据
USE [TESTFSDB] GO INSERT INTO [dbo].[FSTable] ( [id], [FILENAME], [blobdata] ) SELECT NEWID(),'file1',* FROM OPENROWSET(BULK N'D:\image1.JPG',SINGLE_BLOB) AS DOCUMENT UNION ALL SELECT NEWID(),'file2',* FROM OPENROWSET(BULK N'D:\image2.JPG',SINGLE_BLOB) AS DOCUMENT
数据插入后,我们可以看到,在D:\FSData文件夹子目录1e28c952-e9b5-4e44-92a6-186fcc316100下,
有两个文件生成,我们首先把这两个文件复制出来,重命名为.jpg格式,然后用图形软件打开他们
5、对数据库做一个全备份和日志备份
BACKUP DATABASE [TESTFSDB] TO DISK='c:\TESTFSDB.BAK' BACKUP LOG [TESTFSDB] TO DISK='c:\TESTFSDB_LOG.BAK'
6、关闭数据库服务,删除整个D:\FSData文件夹和TESTFSDB数据库,随后重新启动数据库服务,并依据TESTFSDB.bak文件对
数据库TESTFSDB进行恢复。我们会发现D:\FSData文件夹会被重新创建,并且查询表FSTable得到正确的数据
RESTORE DATABASE [TESTFSDB] FROM DISK='c:\TESTFSDB.BAK' WITH NORECOVERY RESTORE LOG [TESTFSDB] FROM DISK='c:\TESTFSDB_LOG.BAK'
SELECT * FROM [dbo].[FSTable]
通过上面的实验,我们可以知道,对于有filestream功能的数据库,在进行备份和恢复时,会自动包含filestream数据
并不需要额外做文件级别的备份和恢复
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2013-05-14 SQLSERVER备份系统数据库以及何时备份系统数据库