Sqlserver的介绍就不多说了,它可以直接从数据库访问,也可以设置从Web中直接访问文件,对于有CS、BS混合模式开发来说很方便。
本文主要记录一下文件表的创建,有时候会创建失败。
注意事项:
FileTable 不支持内存映射文件。 “记事本”和“画图”是两个常见的使用内存映射文件的示例应用程序。 不能在 SQL Server 所在的计算机上使用这些应用程序来打开存储在 FileTable 中的文件。 但是,可以从远程计算机使用这些应用程序来打开存储在 FileTable 中的文件,因为在这些情况下不使用内存映射功能。
启动服务:
代码 – 按先后顺序 执行:
--更改此 SQL Server 实例的 FILESTREAM 访问级别
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
-- 然后 重启数据库服务 ****************** 必须重启服务
--创建数据库时设置非事务性访问级别
--DIRECTORY_NAME 指定名称,每个数据库不能一样----
ALTER DATABASE 数据库名称
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'数据库名称_FileStreamPath' )
--查看数据库访问级别
SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
FROM sys.database_filestream_options;
GO
-- 或者在当前数据库中添加 FILESTREAM 文件组
-----路径:D:\sqlData\DATAFILE\ 必须存在,-------
-----路径:D:\sqlData\DATAFILE\文件夹名称 文件夹名称在实际文件夹中不能存在------
----DataFiles 是文件组的名称--------------------------
ALTER DATABASE 数据库名称
ADD FILEGROUP DataFiles CONTAINS FILESTREAM;
ALTER DATABASE 数据库名称
ADD FILE
(
NAME = 数据库名称File,
FILENAME = 'D:\sqlData\DATAFILE\数据库名称File' --,
--MAXSIZE = 50 MB
)
TO FILEGROUP DataFiles
GO
-- 只有执行了下一个 BACKUP LOG 操作后,才能重用文件“数据库名称”。如果数据库正在参与某个可用性组,则只有在主可用性副本的截断 LSN 已越过该文件的删除 LSN 且后续 BACKUP LOG 操作已完成后,才能重用删除的文件。
-- 网上说用这句,但是有问题 BACKUP LOG 数据库名称 WITH NO_LOG
-- 直接 换一个名称,重新执行
-----------------下面是 创建 文件表-------------------------------------------
CREATE TABLE [dbo].[DocumentStore] AS FILETABLE ON [PRIMARY] FILESTREAM_ON [DataFiles]
WITH
(
FILETABLE_DIRECTORY = N'DocumentStore', FILETABLE_COLLATE_FILENAME = Chinese_PRC_CI_AS
)
GO
-- CREATE TABLE DocumentStores AS FileTable;-- 指定数据库访问级别和指定目录名字
还原带有文件表的 数据库的时候:
我习惯性将文件目录名称设置成 数据库名称+_File(图上面的aaaFile是我随便输入的) 这样有一个好处就是,有多个数据库文件目录都是同一个大目录下面的话,容易区分。
恢复完成过后,根据习惯查看文件目录名称 ,尽量保证文件目录的名称和数据库名称有对应关系。