It seems like insufficient info to tell something definitely. For example, are you deleting through Transact-SQL or through Win32API, etc.
The FILESTREAM data is not deleted immediately from file system because SQL Server transaction logging under full and bulk recovery models permit the crash recovery.
Have you deleted with CHECKPOINT
delete from tablename CHECKPOINT
or tried to execute CHECKPOINT statement or use simple recovery model?
Also, IMO,:
- changing of FILESTREAM (re)configuration require restart of SQL Server
- FILESTREAM data is restricted to LOCAL only drives
- FILESTREAM operations depend on hardware, see Paul Randal's white paper
- "deleting or renaming any FILESTREAM files directly through the file system will result in database corruption"
Check Security and Reliability sections of Paul Randal's white paper
Related discussions containing many subreferences:
Update:
Have you checked permissions of FILESTREAM (Windows) share/container vs. account under which SQL Server runs under. It should have local administrator permissions. It is recommended that no other account be granted permissions on the data container
Update2:
From Paul Randal's white paper:
- "The file system access open operations do not wait for any locks. Instead, the open operations fail immediately if they cannot access the data because of transaction isolation. The streaming API calls fail with ERROR_SHARING_VIOLATION if the open operation cannot continue because of isolation violation"
- "Antivirus software ... access to the BLOB data in the affected file will be prevented, and to SQL Server the file will appear to have been deleted."
- "Note that for a table to have one or more FILESTREAM columns, it must also have a column of the uniqueidentifier data type that has the ROWGUIDCOL attribute. This column must not allow null values and must have either a UNIQUE or PRIMARY KEY single-column constraint"
- "anything that can prevent transaction log truncation may also prevent a FILESTREAM file being physically deleted. Some examples are:"
- FILESTREAM data containers cannot be nested
Run
DBCC CHECKDB
Update3:
I cannot coach you online. This is Q&A board. I already had been banned many times for infringing the rules on StackExchange having discussions instead of posting question or answer
Run
DBCC CheckDB (QPS8, repair_rebuild)
DBCC CheckDB (QPS8) WITH No_INFOMSGS, ALL_ERRORMSGS
and put output here.
To check/set NTFS permissions: right-click on folder in Windows --> Properties --> Security
To check/set MSSQLServer: in command line type
SQLServerManager10.msc
navigate to SQL Server Services and double-click corresponding instance of SQL Server
Update 3b:
Probably, you should drop and recreate index or you have further deeper issues and you should restore database from backup or perform database repair permitting loss of data. This is quite separate topic/question.
I do not want to take any responsibility to guide you on it.
In short you can't. You would have to restore the entire database to another machine, then copy the needed file from the restored machine and put it into place on the production server. Single object restores and single row restores (which is what restoring a single file effectively is) have never been supported via the native tools.
Best Answer
this isn't exactly how filestream and filetables work, you can't specify the name of an existing share as SQL server will try and create the share that you specify in SQL Server Configuration Manager. This is because the share is not mapped directly to a folder on the filesystem like a normal share, but an NTFS data container that lives in the filestream filegroup that is created for the database.
There is a misconception with filestream/filetable that because the data is stored in the filesystem, it is just a normal folder, this isn't entirely correct.
When you create your database, you specify that one of the filegroups is a filestream filegroup, this isn't like a normal filegroup and is actually a series of NTFS folders called Data Containers, this is where your files actually get stored, you can't modify this folder directly, but you can look at the contents (not that there's much human readable stuff in here though, you can find your actual files in here though if you look hard enough through the GUID folders and oddly named files :)).
The file share that you use to copy the files into the table is actually a representation of the data inside these data containers that is presented to Windows explorer via a filter driver which uses the streaming APIs to make the changes to the data containers and add the rows to the filetable etc.
So if you want to specify the location that the files are physically stored, you need to specify that location as where you want the filestream filegroup stored, then you can change the share name to whatever you want.