我们已将所有 varbinary(max) 列数据迁移到 Azure Blob 存储,因此我们希望删除保留在 Sql 2008 数据库和文件流文件组中的旧文件流列,但是当我们尝试这样做时,出现错误:
Msg 5042, Level 16, State 11, Line 2
The filegroup 'FileStreamGroup' cannot be removed because it is not empty.
Run Code Online (Sandbox Code Playgroud)
但是,当我们运行它时:
exec sp_helpfilegroup 'FileStreamGroup'
Run Code Online (Sandbox Code Playgroud)
它正在返回:
groupname groupid filecount
FileStreamGroup 2 0
Run Code Online (Sandbox Code Playgroud)
所以文件计数是 0 但它不会让我们删除它,有没有其他人遇到过这个问题,你到底如何从数据库中完全删除文件流。
另外这个查询:
select * from sys.tables t
join sys.data_spaces ds on t.filestream_data_space_id = ds.data_space_id
Run Code Online (Sandbox Code Playgroud)
返回 0 行,因此如果我理解正确,则没有表使用任何文件流数据。
我有一台运行 SQL Server 2012 的服务器,在一个表上有多个 Filestream 容器。
我需要通过创建一个新的文件流容器并移动数据来将现有的文件流容器之一拆分为两部分。
如何在文件流容器之间可靠地移动内容?
我将第一个容器设置为不再增长,但是如何在不写入全新表的情况下将文件移动到另一个容器?有没有办法做一个UPDATE会导致 SQL Server 再次将文件写入磁盘的语句?- 我曾想过附加一个额外的数据字节,然后将其删除,以使 SQL Server 将内容作为新文件写入,但有更好的方法吗?
是否可以在同一台机器上运行两个 SQL Server 实例,一个 2008 R2 和另一个 2012,两者都启用了文件流?
我试图在本地开发机器上设置它,我可以运行服务。但是当我尝试从 2008 R2 实例读取文件流时,我得到了一个ArgumentException.
两个实例中的路径看起来都不错。
SQL Server 2008 R2
\\DEVMC\MSSQLSERVER\v1\TESTDB\dbo\coreFileStore\fileData\525F2031-8D8C-45FF-8386-E1DD5F11C960
Run Code Online (Sandbox Code Playgroud)
SQL Server 2012
\\DEVMC\EXPRESS2012\v1\TESTDB12\dbo\coreFileStore\fileData\525F2031-8D8C-45FF-8386-E1DD5F11C960
Run Code Online (Sandbox Code Playgroud)
是否有任何神奇的设置可以使其在这两种情况下都能正常工作,或者根本无法做到?
这是尝试使用 C# 测试代码访问文件时的异常堆栈跟踪。
System.ArgumentException : An invalid parameter was passed to the function.
at System.Data.SqlTypes.SqlFileStream.OpenSqlFileStream(String path, Byte[] transactionContext, FileAccess access, FileOptions options, Int64 allocationSize)
at System.Data.SqlTypes.SqlFileStream..ctor(String path, Byte[] transactionContext, FileAccess access, FileOptions options, Int64 allocationSize)
at System.Data.SqlTypes.SqlFileStream..ctor(String path, Byte[] transactionContext, FileAccess access)
at SimpleTests.FileStreamTest.ReadFilestream(String connectionstring, String fileid) in FileStreamTest.cs: line 47
Run Code Online (Sandbox Code Playgroud)
这是我用来验证问题的 NUnit 测试方法。FileStore 访问 …
当我尝试在文件流列上创建统计信息时,我收到以下错误消息:
表 'MyTable' 中的列 'MyColumn' 的类型不能用作索引或统计信息中的键列。
这记录在CREATE STATISTICS的 BOL 页面中,这不是问题。
但是,当我在列(IS NOT NULL, 为记录)上运行带有谓词的查询时,会自动创建统计信息。为什么手动创建不允许这样做,但自动创建仍然可以?
我想手动创建统计数据的原因是我想标记它NORECOMPUTE以避免扫描几GB的数据。我知道我可以让 SQL Server 自动创建它然后NORECOMPUTE稍后标记它,但是自动创建是使用默认示例触发的,我可以0 ROWS在手动创建中覆盖它。我也想知道这是否有原因。
我有一个 SQL 2016 Ent。具有 3 个节点的 AG 版。我们在 AG 中有一个包含 5 个文件流表的数据库。每个表都在它自己的文件流数据文件中。今天我修复了一个错误,即通过重建索引将所有文件保存到一个文件流数据文件中。
在 dev 中,我们没有 AG,数据库处于简单恢复中。空间被收回了。之前和之后看起来像这样:
文件已移至正确的文件流数据文件,但未从原始数据文件中恢复空间。
一开始我还以为是车库收藏,看了Paul Randal的博文。我缩小了日志文件,然后创建了一个垃圾表,通过显式转换添加了大量行,运行了日志备份和检查点,所有这些都在主节点上。日志文件确实增长了,之前活动的 VLF 被标记为不活动。
更复杂的是,备份是辅助节点上的完全复制\日志备份。
在这种情况下回收空间的正确方法是什么?
编辑:按照安迪在他博客中的步骤后,空间被收回。每个 AG 节点看起来像:
我在 Windows Server 2019 Core 安装上安装了 SQL Server 2017,没有 GUI。我们的一位用户想要使用 Filestream。我尝试遵循此设置,但是,由于它需要 SSCM,所以我无法完成该部分。我可以在 SSMS 中启用,但是无法设置文件位置等,因此在设置页面上执行存储过程命令时出现此错误:
FILESTREAM 功能无法初始化。操作系统管理员必须使用配置管理器在实例上启用 FILESTREAM。
当我通过计算机管理窗口远程连接到 SSCM 并尝试打开服务时,不会显示任何服务。我可以访问网络选项,但不能访问服务,所以这些选项可能无法远程工作?核心安装和我尝试使用的 GUI 版本之间的防火墙已关闭。
有人有办法像通过 SSCM 一样远程启用 Filestream 并设置所需的参数吗?
提前致谢。
我filestream用来存储 blob(文件)。我使用 SQL Server 2008 R2
一些客户有 60k 个文件 (50GB)。他们问我是否有限制,也是因为NTFS,会有问题。
不知何故,疑问是:如果 blob 的数量增长太多,是否存在限制,超过该限制 SQL Server 将无法正确处理它们?
我认为 SQL Server 处理得很好,但有人有更好的答复吗?
谢谢
我有一个带有此配置的表:
现在,如果您查看 COLUMN_11,它是一个 varchar -1。
但据我所知,要将 PDF 文件插入表中,您需要文件流,并且列应该是 VARBINARY(max) 对吗?
那么,这是如何运作的呢?为什么 VARCHAR 列中有 PDF?
DocumentBody 是这样的:
显然,这样的数量有数百万。