top

带有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数据

并不需要额外做文件级别的备份和恢复

 

posted @   桦仔  阅读(1211)  评论(1编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2013-05-14 SQLSERVER备份系统数据库以及何时备份系统数据库
点击右上角即可分享
微信分享提示