数据库备份与恢复 之六 带有FILESTREAM功能的数据库备份和恢复

从SQL Server 2008开始,数据库引入了FILESTREAM这个功能。对于BLOB数据,如Images, Video, Word文档等等,可以存放在文件系统中,而不是在数据库文件里。这对数据库备份和恢复有什么影响呢。我们通过一个例子,来检查一下带有FILESTREAM功能的数据库备份和恢复方案。

 

第一步,在数据库服务级别,启动FILESTREAM,我们可以打开数据库的配置管理器,找到数据库服务,并右键点击属性。找到FILESTREAM的设置,启用FILESTREAM。然后执行下面的语句,随后重新启动数据库服务。

EXEC sp_configure filestream_access_level, 2

RECONFIGURE

 

启用FILESTREAM

第二步,把们建一个数据库TESTFSDB。由于FILESTREAM使用一种特殊类型的文件组,所以必须至少为一个文件组指定CONTAINS FILESTREAM子句。

CREATE DATABASE TESTFSDB

GO

 

ALTER DATABASE TESTFSDB

ADD FILEGROUOP [FSGroup] CONTAINS FILESTREAM

GO

 

ALTER DATABASE TESTFSDB

ADD FILE (NAME=N’FSDATA’, FILENAME=N’D:\FSData’) TO FILEGROUPFSGroup

GO

 

执行上面语句后,filestream.hdr文件和$FSLOG文件夹会出现在D:\FSData目录下。Filestream.hdr文件是FILESTREAM容器的头文件。Filestream.hdr文件是重要的系统文件,包含FILESTREAM标头信息。请不要删除或者修改此文件。事实上,这个文件已经被数据库占用,在数据库服务启动状态下,是无法删除此文件的。

 

第三步,创建一个表,表名为FSTable。要使用FILESTREAM功能,我们必须要有一个字段,类型为VARBINARY(MAX)并指定FILESTREAM属性,而且还需要有另外一个字段是UNIQUEIDENTIFIER类型并指定ROWGUIDCOL属性。

use TESTFSDB

go

CREATE TABLE FSTable

(

[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE,

[FileName] NVARCHAR(100) ,

[BlobData] VARBINARY(MAX) FILESTREAM NULL

)

 

第四步,插入相应的数据。

INSERT INTO FSTable

SELECT NEWID(), 'File1', * FROM

OPENROWSET(BULK N'D:\temp\Image.jpg', SINGLE_BLOB) AS Document

 

INSERT INTO FSTable

SELECT NEWID(), 'File2', * FROM

OPENROWSET(BULK N'D:\temp\Image.jpg', SINGLE_BLOB) AS Document

数据插入后,我们可以看到,在D:\FSData文件夹子目录9ead5f8f-4e8b-459d-9e9c-205dabbee0ff下,有两个文件生成。我们可以把这两个文件复制出来,重命名为.jpg格式,然后用图形软件打开它。

 

第五步,对数据库做一个全备份和日志备份。

BACKUP DATABASE [TESTFSDB] TO DISK='C:\temp\TESTFSDB.bak'

BACKUP LOG [TESTFSDB] TO DISK='C:\temp\TESTFSDB.bak'

 

第六步,我们关闭数据库服务,并且删除整个D:\FSData文件夹和TESTFSDB数据库。随后,重新启动数据库服务,并依据TESTFSDB.bak文件对数据库TESTFSDB进行恢复。我们会发现,D:\FSData会被重新创建。并且查询表FSTable,我们能得到正确的数据。

 

通过上面的实验,我们可以知道,对于有FILESTREAM功能的数据库,在进行备份和恢复时,会自动包含FILESTREAM数据。并不需要额外做文件级别的备份和恢复。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值