如何完成删除文件流和所有附加文件

问题描述 投票:6回答:2

我已经尝试在本地数据库上尝试MSSQL(2008R2数据中心)的FILESTREAM功能。真实数据库正在服务器上运行。我已经使用此查询设置了整个FILESTREAM:

/* CREATE FILESTREAM AND FILESTREAM TABLE */
USE [master]
GO
ALTER DATABASE SenONew
ADD FILEGROUP [FileStream]
CONTAINS FILESTREAM
GO
ALTER DATABASE SenONew
ADD FILE
(
NAME = 'fsSenONew',
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\SenONew.ndf'
)
TO FILEGROUP [FileStream]
GO

USE [SenONew]
GO
CREATE TABLE Filestore(
    FileID int PRIMARY KEY,
    RowID uniqueidentifier ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWSEQUENTIALID(),
    FileDescr nvarchar(max),
    FileIndex varbinary(max) FILESTREAM NULL)
GO

而且我正在尝试添加一些文件然后删除它们。

现在由于这仅是一个实验,因此我也想摆脱它。我正在使用本地服务器来开发将在真实服务器上使用的数据库,因此我在本地服务器上创建了BackUp,然后在真实服务器上还原了它,因此它得到了更新(软件正在开发中,因此数据库结构和数据都会发生很大变化,我需要对要测试软件的真实服务器进行完全还原。]

经过数小时的搜索,我找不到关于我的问题的任何信息。

我了解我需要:

  1. 删除存储FILESTREAM信息的数据库表
  2. 我需要删除FILESTREAM的FILE
  3. 删除文件组

因此,我正在使用此查询来摆脱我最初设置的所有内容:

/* DROP FILESTREAM TABLE AND FILEGROUP */
USE SenONew
DROP TABLE Filestore
GO

ALTER DATABASE SenONew
REMOVE FILE fsSenONew

ALTER DATABASE SenONew
REMOVE FILEGROUP [FileStream]
GO

因此,我会尽我所能,并且它也会正确完成。因此,当我输入文件组,文件和文件位置时,我看到它们都被完全删除:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9OaExJQy5wbmcifQ==” alt =“在此处输入图像描述”>“在此处输入图像描述”“在此处输入图像描述”

但是,当我对本地数据库(包括已删除的FILESTREAM,文件路径和文件组)进行备份,并尝试使用它还原服务器时,出现错误。

创建备份的SQL:

/* CREATE BACKUP OF DATABASE WITHIN CURRECT CONNECTION */
DECLARE @FileName2 nvarchar(250)
SELECT @FileName2 = (SELECT 'C:\SenO BackUp\' + convert(nvarchar(200),GetDate(),112) + ' SenONew.BAK')
BACKUP DATABASE SenONew TO DISK=@FileName2
GO

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS90ZlY4My5wbmcifQ==” alt =“在此处输入图像描述”>

然后在服务器上执行还原:

/* CREATE RESTORE OF DATABASE WITHIN REAL SERVER CONNECTION */
use master
alter database SenONew set offline with rollback immediate;

DECLARE @FileName2 nvarchar(250)
SELECT @FileName2 = (SELECT '' + convert(nvarchar(200),GetDate(),112) + ' SenONew.BAK')
RESTORE DATABASE SenONew
FROM DISK = @FileName2

alter database SenONew set online with rollback immediate;

我收到以下错误:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9CbjgxZS5wbmcifQ==” alt =“在此处输入图像描述”>

*(Msg 5121,级别16,状态2,第7行“ C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.SQLEXPRESS \ MSSQL \ DATA \ SenONew.ndf”指定的路径不在有效目录中。

消息3156,级别16,状态3,第7行,文件'fsSenONew'无法还原到'C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.SQLEXPRESS \ MSSQL \ DATA \ SenONew.ndf'。使用WITH MOVE标识文件的有效位置。

Msg 3119,级别16,状态1,第7行,在计划RESTORE语句时发现了问题。以前的消息提供了详细信息。

消息3013,级别16,状态1,第7行,还原数据库异常终止。 )*

我删除了.ndf FILESTREAM位置,为什么它是指定的路径?另外,为什么fsSenONew尝试还原?我无法解决这个问题。内部是否有需要删除的路径?

sql-server filestream
2个回答
7
投票

您可以检查:

SELECT * FROM SenONew.sys.data_spaces WHERE name = 'FileStream' 

它应该返回0行。

有一个从SQL Server 2008数据库中删除FILESTREAM功能的过程:

ALTER TABLE Filestore DROP column FileIndex
GO
ALTER TABLE Filestore SET (FILESTREAM_ON="NULL")
GO
ALTER Database SenONew REMOVE FILE fsSenONew
GO
ALTER Database SenONew REMOVE FILEGROUP [FileStream]
GO

this article中所述。但是您执行的步骤应该做同样的事情。

您的问题当然很奇怪,但是我建议您尝试使用以下内容

USE SenONew
EXEC Sp_help 
EXEC Sp_helpfile 
EXEC Sp_helpfilegroup 

[您可能在那里找到可疑的东西,例如使用该FILEGROUP的另一个表。

我已经完全按照您描述的步骤操作,无法重现您的问题。检查“还原数据库”屏幕的外观。

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9pYjByNC5qcGcifQ==” alt =“在此处输入图像描述”>


0
投票

1。从列和表中删除FILESTREAM属性。您需要将数据移动到新列。

ALTER TABLE MyTable
ADD FileData varbinary(max) NULL;
GO
update MyTable
set FileData = FileStreamData
GO  
ALTER TABLE MyTable 
DROP column FileStreamData
GO
ALTER TABLE MyTable SET (FILESTREAM_ON="NULL")
GO
EXEC sp_RENAME 'MyTable', 'FileStreamData', 'COLUMN'
GO

2。从FILESTREAM中删除文件,并放下FILE和FILESTEAM。

ALTER DATABASE [MyDatabase] SET RECOVERY Simple 
GO

EXEC SP_FILESTREAM_FORCE_GARBAGE_COLLECTION 

ALTER DATABASE [MyDatabase] REMOVE FILE [MyFile]
GO
ALTER DATABASE [MyDatabase] REMOVE FILEGROUP [MyFileGroup]
GO

ALTER DATABASE [MyDatabase] SET RECOVERY FULL
GO
© www.soinside.com 2019 - 2024. All rights reserved.