Rac*_*SQL 5 sql-server sql-server-2008-r2 filestream blob varbinary
这对我来说真的是一个令人困惑的话题。
我可以理解 BLOB 是什么,我可以轻松使用它。我能理解 FILESTREAM 是什么。我可以轻松地在数据库中实现,我可以备份数据库并使用为存储这些文件而创建的文件夹来恢复它。像这样的事情,我想,我能理解。
我不明白的是:
.PDF
仅使用数据库中的 VARBINARY(MAX) 列插入(例如)与将其存储.PDF
在 FILESTREAM 数据库中有什么区别。我知道 BLOB varbinary(max).PDF
是在数据库内部。如果我物理删除.PDF
,我仍然可以使用存储在 varbinary(MAX) 列中的值来恢复它吗?
当我在.PDF
文件流中插入这个文件时,我可以在文件夹中看到它(为文件组创建的那个),如果我插入 100 个文件,我可以在文件流文件夹中看到 100 个文件,但是当我运行DELETE FROM
并删除 100 行时数据库,我仍然可以在文件流文件夹中看到这些文件。为什么会发生这种情况?我认为,为了保持一致性,这些文件也会被删除。
对于这两种情况,在.PDF
BLOBVARBINARY(MAX)
或 FILESTREAM 中插入文件后,我还需要原始文件吗?因为它在数据库中,所以我可以很容易地恢复它。
我以 .PDF 为例
我可以使用和实施这两种方法,但我仍然不清楚它们会发生什么。对我来说,它是一样的,但是一个存储在数据库之外,另一个存储在数据库内。
基于Paul Randal 撰写的白皮书-
\n\n回答您的问题:
\n\n\n\n\n仅使用数据库中的 VARBINARY(MAX) 列插入 .PDF(例如)与将此 .PDF 存储在 FILESTREAM 数据库中之间有什么区别。我知道 BLOB varbinary(max) .PDF 位于数据库内部。如果我物理删除 .PDF,我仍然可以使用 varbinary(MAX) 列中存储的值来恢复它吗?
\n
将 pdf 作为 插入数据库后SINGLE_BLOB
,您就不需要原始.pdf
文件了。以后需要的话可以导出来。
\n\n\n当我在文件流中插入这个 .PDF 文件时,我可以在文件夹(为文件组创建的文件夹)中看到它,如果我插入 100 个文件,我可以在文件流文件夹中看到 100 个文件,但是当我运行 DELETE FROM 和删除数据库中的 100 行,我仍然可以在 filestream 文件夹中看到这些文件。为什么会出现这种情况?我认为,为了保持一致性,这些文件也将被删除。
\n
文件流使用垃圾收集过程来清理不再需要的文件。系统任务会定期(约 10 秒左右)唤醒并检查文件流垃圾收集需求。阅读“为什么没有收集所有文件?”
\n\n\n\n\n危险:直接从文件流容器中删除文件会被视为数据库损坏,并且 dbcc checkdb 将报告损坏错误。这些文件以事务方式链接到数据库,删除文件与数据库中损坏的页面相同。
\n
-
\n\n\n\n\n对于这两种情况,在 BLOB VARBINARY(MAX) 或 FILESTREAM 中插入 .PDF 文件后,我是否仍然需要原始文件?
\n
对于BLOB Varbinary(max) --> 可以删除原文件。对于 Filestream,请勿从 filestream 文件夹中删除文件。如果原始文件与文件流文件夹不在同一文件夹中,则可以将其删除。
\n\n参考 :
\n\n 归档时间: |
|
查看次数: |
3283 次 |
最近记录: |