Sql server 2008 r2 是否可以创建一个虚拟filestream文件组来只研究mdf内容?

Sql server 2008 r2 是否可以创建一个虚拟filestream文件组来只研究mdf内容?,sql-server-2008-r2,sqlfilestream,Sql Server 2008 R2,Sqlfilestream,我的应用程序有一个数据库,我通过以下方式从备份文件创建该数据库: -- create empty db CREATE DATABASE MyNewDB -- restore on the empty db from file RESTORE DATABASE MyNewDB FROM DISK = 'c:\Temp\MyNewDB.bak' WITH REPLACE, MOVE 'MyDB_Data' TO 'C:\Program Files\Microsoft SQL Server\

我的应用程序有一个数据库,我通过以下方式从备份文件创建该数据库:

-- create empty db
CREATE DATABASE MyNewDB

-- restore on the empty db from file    
RESTORE DATABASE MyNewDB
FROM DISK = 'c:\Temp\MyNewDB.bak'
WITH REPLACE,
MOVE 'MyDB_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EXPRESS2008R2\MSSQL\DATA\MyNewDB.mdf',
MOVE 'MyDB_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EXPRESS2008R2\MSSQL\DATA\MyNewDB_log.LDF',
MOVE 'MyDBFS' TO 'C:\FileStreamData\MyNewDBFS'
我只使用filestream文件组来存储blob,基本上我有一个存储文件的表和一个包含二进制数据的blob列,二进制数据保存为SQL Server filestream数据

随着客户继续使用该应用程序,filestream部分变得巨大,mdf可能是500MB,filestream可能是60GB

通常,为了在开发机器上调试问题,我需要“仅传输表”(“500MB”)和“不传输BLOB”(“60GB”)

我所做的是复制数据库,在复制的数据库上,我在files表中将blob列设置为NULL,然后运行

CHCEKPOINT
然后,我等待垃圾收集器完成它的工作,然后我可以进行备份并拥有一个小文件

有时我没有空间恢复备份的副本,或者我没有时间进行恢复

因此,我希望能够做到,但我没有在所有的网络中找到解决方案:

  • 仅复制
    .mdf
    +
    .ldf
    (包含数据的)

  • 以某种方式创建“伪filestream数据”(SQL Server将在附加时接受的数据)

  • 附加
    .mdf
    .ldf
    和伪filestream数据以创建测试数据库

  • 当然,我不希望对blob进行查询,但是对其他表的所有查询都可以


    是否有办法(甚至可能使用3d party工具)实现我所需的功能?

    将其移动到其他数据库中


    如果是我,我会考虑把BULB数据分解到另一个数据库中。但我不确定你目前的结构,也不确定这有多实际。但是,您仍然可以在原始数据库中拥有一个视图,该视图从新数据库中的表中进行选择,和/或从每个表中重新组合多个表

    编写数据库脚本


    另一个不完全漂亮的选择是编写数据库脚本。ManagementStudio可以创建一个脚本文件,该文件在运行时将创建表并插入值。例如,如果您需要将数据从SQL 2014数据库复制到SQL 2008或其他数据库中,这可能是必需的。通常,您可以选择编写什么脚本。(右键单击数据库并选择任务->生成脚本以启动向导。)

    导出数据

    您可以导出数据并导入所述数据,而不是恢复备份。进行此操作时,您可以选择包含哪些数据。可以跳过blob表或blob列

    零散膳食回收


    最后,您可能还希望看到有关仅对某些文件或仅对某些文件组进行逐段恢复的链接

    在线恢复文件组A和C。 由于这些文件组的数据未损坏,因此不必从备份中恢复这些文件组,但必须恢复这些文件组才能使其联机。 数据库管理员立即恢复A和C

    从理论上讲,这里需要备份空白数据库的filestream文件组,然后在恢复时尝试单独使用该文件组。然而,我不确定这条路线是否适合你。如果blob位于同一个数据库中的同一个表上,那么sql可能会存储一些数据,以便将它们重新拼接在一起。恢复时,sql可能会检查blob数据是否一致和/或兼容

    结论

    我真的认为,把你的blob分解成它们自己的表,然后将它们移动到一个单独的数据库,这就是我在你的情况下所做的

    您可能无法直接连接到这些数据库,或者上面提到的脚本选项,或者SQL任务导入数据可能是选项


    <强>但是,仍然存在SQL导出数据选项。< /强>您可以构建只输出您想要的数据的SSIS包,然后可以重新导入。< /P>如果是我,我会考虑将BULB数据打破到另一个数据库中。但我不确定你目前的结构,也不确定这有多实际。但是,您仍然可以在原始数据库中拥有一个视图,该视图从新数据库中的表中进行选择,和/或从每个表中重新组合多个表。另一个不完全漂亮的选项是编写数据库脚本。ManagementStudio可以创建一个脚本文件,该文件在运行时将创建表并插入值。例如,如果您需要将数据从SQL 2014数据库复制到SQL 2008或其他版本中,这可能是必需的。通常,您可以选择编写脚本的内容。最后,您可能还希望看到有关仅对某些文件或仅对某些文件组进行逐段恢复的链接。

    RESTORE DATABASE adb FILEGROUP='A', FILEGROUP='C' WITH RECOVERY  
    RESTORE DATABASE adb FILEGROUP='B' FROM backup2b WITH RECOVERY