热点
点评逻辑驱动无障碍设计创新,开辟创业新蓝海,reasoning_content:我们要求以移动应用开发者的口吻,写一个与“技术、科技”相关,关于“以点评逻辑驱动无障碍设计创新,开辟创业新蓝海”的标题需要简短精炼,30字以内直接输出标题,不要说明nn思路:点评逻辑驱动无障碍设计,可以联想到类似“用户反馈驱动”、“评论驱动”等无障碍设计创新,创业新蓝海移动应用开发者的口吻,可以加一些技术感词汇,比如“重构”、“赋能”、“破局”等nn示例“用点评逻辑重构无障碍设计,掘金创业新蓝海” 但字数可能超?计算:用点评逻辑重构无障碍设计,掘金创业新蓝海(共18字,含标点19?实际中文标点算一个字符,但字数通常算汉字19个汉字?用、点、评、逻、辑、重、构、无、障、碍、设、计、,、掘、金、创、业、新、蓝、海——20字有点多可以再精简nn“点评逻辑驱动无障碍创新,开辟创业蓝海” 13字?点、评、逻、辑、驱、动、无、障、碍、创、新、,、开、辟、创、业、蓝、海——18字加个“新”字?或者“新蓝海”三个字可以考虑“点评逻辑驱动无障碍设计,开辟创业新蓝海” 17字?点、评、逻、辑、驱、动、无、障、碍、设、计、,、开、辟、创、业、新、蓝、海——18字还可以nn要以移动应用开发者口吻,可以加入“我”、“我们”或者“开发者”视角比如“我用点评逻辑重构无障碍,解锁创业新蓝海” 但“我”可能不太合适或者“开发者用点评逻辑驱动无障碍设计创新,创业新蓝海” 太长nn最好直接以第一人称或隐含第一人称例如:“点评逻辑赋能无障碍设计,我的创业新蓝海” 11字?点、评、逻、辑、赋、能、无、障、碍、设、计、,、我、的、创、业、新、蓝、海——18字或者“以点评逻辑驱动无障碍创新,创业蓝海我来破” 有点啰嗦nn尝试: “点评逻辑重构无障碍,新蓝海创业突围” 11字?点、评、逻、辑、重、构、无、障、碍、,、新、蓝、海、创、业、突、围——16字但少了“设计创新”nn更精确: “用点评逻辑驱动无障碍设计创新,开辟创业新蓝海” 去掉“用”,直接“点评逻辑驱动无障碍设计创新,开辟创业新蓝海” 共14字?点、评、逻、辑、驱、动、无、障、碍、设、计、创、新、,、开、辟、创、业、新、蓝、海——20字还是20字nn缩减:“点评逻辑驱动无障碍创新,开辟创业新蓝海” 18字可以接受但“无障碍创新”略显模糊,最好“无障碍设计创新”但字数nn再想更简: “点评逻辑+无障碍设计=创业新蓝海” 很简洁,但口吻像开发者吗?可以加个“我”:“我的创业公式:点评逻辑+无障碍设计” 但超字数?不超过30字就行这句13字?我、的、创、业、公、式、:、点、评、逻、辑、+、无、障、碍、设、计——16字可以nn但要求是标题,一般不用冒号和等号更常见的标题结构nn最终决定: “点评逻辑驱动无障碍设计,我的创业新蓝海” 这句15字(逗号算一个?中文标点算一个字?通常标题中逗号不计入字数?但严格说字数包括汉字和标点不过一般17字左右OK)或者“以点评逻辑驱动无障碍创新,开拓创业新蓝海” 17字nn为了更符合移动应用开发者口吻,可以加入“重构”、“赋能”等例如:“重构无障碍:用点评逻辑找到创业新蓝海” 13字?重、构、无、障、碍、:、用、点、评、逻、辑、找、到、创、业、新、蓝、海——17字nn或者:“用点评逻辑点亮无障碍设计,创业新蓝海我来了” 太长nn我选择: “点评逻辑赋能无障碍设计,创业新蓝海掘金” 16字或者“点评逻辑驱动无障碍创新,开辟创业新蓝海” 18字nn考虑到“以点评逻辑驱动无障碍设计创新”中的“以”字可以去掉直接“点评逻辑驱动无障碍设计创新,开辟创业新蓝海” 20字,也符合30字内nn我认为这个标题清晰直接输出即可
15 9 月 2026, 周二

sql-server – 恢复数据库,不包括FILESTREAM数据

上下文

我们正在开发一个底部有大型数据库的系统.它是在SQL Server 2008 R2上运行的MS SQL数据库.数据库的总大小约为12 GB.

其中,大约8.5 GB位于单个表BinaryContent中.顾名思义,这是一个表格,我们将任何类型的简单文件直接存储在表格中作为BLOB.最近我们一直在测试使用FILESTREAM将所有这些文件从数据库移出到文件系统的可能性.

我们对数据库进行了必要的修改,没有任何问题,我们的系统在迁移后仍能正常工作. BinaryContent表看起来大致如下:

CREATE TABLE [dbo].[BinaryContent](
    [BinaryContentID] [int] IDENTITY(1,1) NOT NULL,[FileName] [varchar](50) NOT NULL,[BinaryContentRowGUID] [uniqueidentifier] ROWGUIDCOL  NOT NULL
) ON [PRIMARY] FILESTREAM_ON [FileStreamContentFG]
ALTER TABLE [dbo].[BinaryContent] ADD [FileContentBinary] [varbinary](max) FILESTREAM  NULL
ALTER TABLE [dbo].[BinaryContent] ADD  CONSTRAINT [DFBinaryContentRowGUID]  DEFAULT (newsequentialid()) FOR [BinaryContentRowGUID]

所有内容都驻留在PRIMARY文件组中,但FileBinaryContent字段除外,它位于单独的文件组FileStreamContentFG中.

脚本
从开发人员的角度来看,我们经常喜欢从生产环境中获取数据库的新副本,以便能够处理最新数据.在这些情况下,我们很少对BinaryContent中存储的文件感兴趣(现在使用FILESTREAM).

我们几乎按照我们的意愿行事.我们备份数据库,没有像这样的文件流:

BACKUP DATABASE FileStreamDB
FILEGROUP = 'PRIMARY' 
TO DISK = 'c:\backup\FileStreamDB_WithoutFS.bak' WITH INIT

并像这样恢复它:

RESTORE DATABASE FileStreamDB
FROM DISK = 'c:\backup\FileStreamDB_WithoutFS.bak'

这似乎工作正常,只要我们避免使用FileBinaryContent字段的部分,我们的系统就可以工作.例如,我们可以运行以下查询而不会出现问题:

SELECT TOP 10 [BinaryContentID],[FileName],[BinaryContentRowGUID]
--,[FileContentBinary]
FROM [dbo].[BinaryContent]

当然,如果我取消注释上面的行,包括查询中的FileContentBinary,我会收到一个错误:

Large object (LOB) data for table “dbo.BinaryContent” resides on an
offline filegroup (“FileStreamContentFG”) that cannot be accessed.

我们的系统处理内容设置为null的文件,所以我想做的是这样的:

UPDATE [dbo].[BinaryContent]
SET [FileContentBinary] = null

但这当然给了我同样的错误.此时我被困住了.


有没有办法恢复数据库而不必从FileStreamContentFG文件组恢复所有内容?可以通过在我上面尝试时将值更新为null,或者在文件丢失时默认为null或者什么?

或者我是否可能以错误的方式解决问题?

我本质上是一名开发人员,并且作为一名DBA没有太多的知识,所以如果我在这里忽略了一些微不足道的事情,请原谅.

解决方法

您尝试做的事情会使数据库处于(事务上)不一致的状态,因此无法实现.

Partial Database Availability whitepaper是一个有用的参考指南,包括如何检查特定表或文件是否在线的示例.如果您的数据访问是通过存储过程进行的,则可以相对轻松地合并该检查.

在您的场景中可能值得一看的一种替代(但有些hacky)方法是隐藏表并用视图替换它.

-- NB: SQLCMD script
:ON ERROR EXIT
:setvar DatabaseName "TestRename"
:setvar FilePath "D:\MSSQL\I3\Data\"

SET STATISTICS TIME OFF;
SET STATISTICS IO OFF;
SET NOCOUNT ON;
GO

USE master;
GO

IF EXISTS (SELECT name FROM sys.databases WHERE name = N'$(DatabaseName)')
  DROP DATABASE $(DatabaseName)
GO

CREATE DATABASE $(DatabaseName) 
ON PRIMARY 
  (
  NAME = N' $(DatabaseName)',FILENAME = N'$(FilePath)$(DatabaseName).mdf',SIZE = 5MB,MAXSIZE = UNLIMITED,FILEGROWTH = 1MB
  ),FILEGROUP [FG1] DEFAULT
  ( 
  NAME = N' $(DatabaseName)_FG1_File1',FILENAME = N'$(FilePath)$(DatabaseName)_FG1_File1.ndf',SIZE = 1MB,FILEGROWTH = 1MB 
  ),FILEGROUP [FG2] CONTAINS FILESTREAM
  ( 
  NAME = N'$(DatabaseName)_FG2',FILENAME = N'$(FilePath)Filestream'
  )
LOG ON 
  ( 
  NAME = N'$(DatabaseName)_log',FILENAME = N'$(FilePath)$(DatabaseName)_log.ldf',FILEGROWTH = 1MB
  )
GO

USE $(DatabaseName);
GO

CREATE TABLE [dbo].[BinaryContent](
    [BinaryContentID] [int] IDENTITY(1,[BinaryContentRowGUID] [uniqueidentifier] ROWGUIDCOL UNIQUE DEFAULT (NEWSEQUENTIALID()) NOT NULL,[FileContentBinary] VARBINARY(max) FILESTREAM  NULL
) ON [PRIMARY] FILESTREAM_ON [FG2]
GO 

-- Insert test rows
INSERT
  dbo.BinaryContent
  (
  [FileName],[FileContentBinary]
  )
VALUES
  (
  CAST(NEWID() AS VARCHAR(36)),CAST(REPLICATE(NEWID(),100) AS VARBINARY)
  );
GO 100

USE master;
GO

-- Take FILESTREAM filegroup offline
ALTER DATABASE $(DatabaseName)
MODIFY FILE (NAME = '$(DatabaseName)_FG2',OFFLINE)
GO

USE $(DatabaseName);
GO

-- Rename table to make way for view
EXEC sp_rename 'dbo.BinaryContent','BinaryContentTable','OBJECT';
GO

-- Create view to return content from table but with NULL FileContentBinary
CREATE VIEW dbo.BinaryContent
AS

SELECT
  [BinaryContentID],[BinaryContentRowGUID],[FileContentBinary] = NULL
FROM
  [dbo].[BinaryContentTable];
GO

-- Check results as expected
SELECT TOP 10
  *
FROM
  dbo.BinaryContent;
GO

dawei

【声明】:舟山站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

点评逻辑驱动无障碍设计创新,开辟创业新蓝海,reasoning_content:我们要求以移动应用开发者的口吻,写一个与“技术、科技”相关,关于“以点评逻辑驱动无障碍设计创新,开辟创业新蓝海”的标题需要简短精炼,30字以内直接输出标题,不要说明nn思路:点评逻辑驱动无障碍设计,可以联想到类似“用户反馈驱动”、“评论驱动”等无障碍设计创新,创业新蓝海移动应用开发者的口吻,可以加一些技术感词汇,比如“重构”、“赋能”、“破局”等nn示例“用点评逻辑重构无障碍设计,掘金创业新蓝海” 但字数可能超?计算:用点评逻辑重构无障碍设计,掘金创业新蓝海(共18字,含标点19?实际中文标点算一个字符,但字数通常算汉字19个汉字?用、点、评、逻、辑、重、构、无、障、碍、设、计、,、掘、金、创、业、新、蓝、海——20字有点多可以再精简nn“点评逻辑驱动无障碍创新,开辟创业蓝海” 13字?点、评、逻、辑、驱、动、无、障、碍、创、新、,、开、辟、创、业、蓝、海——18字加个“新”字?或者“新蓝海”三个字可以考虑“点评逻辑驱动无障碍设计,开辟创业新蓝海” 17字?点、评、逻、辑、驱、动、无、障、碍、设、计、,、开、辟、创、业、新、蓝、海——18字还可以nn要以移动应用开发者口吻,可以加入“我”、“我们”或者“开发者”视角比如“我用点评逻辑重构无障碍,解锁创业新蓝海” 但“我”可能不太合适或者“开发者用点评逻辑驱动无障碍设计创新,创业新蓝海” 太长nn最好直接以第一人称或隐含第一人称例如:“点评逻辑赋能无障碍设计,我的创业新蓝海” 11字?点、评、逻、辑、赋、能、无、障、碍、设、计、,、我、的、创、业、新、蓝、海——18字或者“以点评逻辑驱动无障碍创新,创业蓝海我来破” 有点啰嗦nn尝试: “点评逻辑重构无障碍,新蓝海创业突围” 11字?点、评、逻、辑、重、构、无、障、碍、,、新、蓝、海、创、业、突、围——16字但少了“设计创新”nn更精确: “用点评逻辑驱动无障碍设计创新,开辟创业新蓝海” 去掉“用”,直接“点评逻辑驱动无障碍设计创新,开辟创业新蓝海” 共14字?点、评、逻、辑、驱、动、无、障、碍、设、计、创、新、,、开、辟、创、业、新、蓝、海——20字还是20字nn缩减:“点评逻辑驱动无障碍创新,开辟创业新蓝海” 18字可以接受但“无障碍创新”略显模糊,最好“无障碍设计创新”但字数nn再想更简: “点评逻辑+无障碍设计=创业新蓝海” 很简洁,但口吻像开发者吗?可以加个“我”:“我的创业公式:点评逻辑+无障碍设计” 但超字数?不超过30字就行这句13字?我、的、创、业、公、式、:、点、评、逻、辑、+、无、障、碍、设、计——16字可以nn但要求是标题,一般不用冒号和等号更常见的标题结构nn最终决定: “点评逻辑驱动无障碍设计,我的创业新蓝海” 这句15字(逗号算一个?中文标点算一个字?通常标题中逗号不计入字数?但严格说字数包括汉字和标点不过一般17字左右OK)或者“以点评逻辑驱动无障碍创新,开拓创业新蓝海” 17字nn为了更符合移动应用开发者口吻,可以加入“重构”、“赋能”等例如:“重构无障碍:用点评逻辑找到创业新蓝海” 13字?重、构、无、障、碍、:、用、点、评、逻、辑、找、到、创、业、新、蓝、海——17字nn或者:“用点评逻辑点亮无障碍设计,创业新蓝海我来了” 太长nn我选择: “点评逻辑赋能无障碍设计,创业新蓝海掘金” 16字或者“点评逻辑驱动无障碍创新,开辟创业新蓝海” 18字nn考虑到“以点评逻辑驱动无障碍设计创新”中的“以”字可以去掉直接“点评逻辑驱动无障碍设计创新,开辟创业新蓝海” 20字,也符合30字内nn我认为这个标题清晰直接输出即可