Delen via


FileTables beheren

van toepassing op:SQL Server-

Beschrijft algemene beheertaken voor het beheren van FileTables.

Procedure: Een lijst met FileTables en gerelateerde objecten ophalen

Als u een lijst met FileTables wilt ophalen, voert u een query uit op een van de volgende catalogusweergaven:

SELECT * FROM sys.filetables;  
GO  
  
SELECT * FROM sys.tables WHERE is_filetable = 1;  
GO  

Als u een lijst wilt ophalen van de door het systeem gedefinieerde objecten die zijn gemaakt toen de bijbehorende FileTables werden gemaakt, voert u een query uit op de catalogusweergave sys.filetable_system_defined_objects (Transact-SQL).

SELECT object_id, OBJECT_NAME(object_id) AS 'Object Name'  
FROM sys.filetable_system_defined_objects;  
GO  

Niet-transactionele toegang uitschakelen en opnieuw inschakelen op databaseniveau

Als u de exclusieve toegang wilt verkrijgen die vereist is voor bepaalde beheertaken, moet u mogelijk tijdelijk niet-transactionele toegang uitschakelen.

Gedrag van de INSTRUCTIE ALTER DATABASE bij het wijzigen van het niveau van niet-transactionele toegang

  • Wanneer u niet-transactionele toegang instelt op READ_ONLY of OFF, retourneert de opdracht ALTER DATABASE de controle aan de gebruiker niet zolang er geopende bestandsafhandelingen zijn die conflicteren met de aangevraagde bewerking. De bestandskoppelingen die conflicteren met deze bewerking zijn de volgende:

    • Wanneer u toegang instelt tot NONE, worden alle geopende bestandsingangen geopend.

    • Wanneer u toegang instelt tot READ_ONLY, worden alle bestandsingangen geopend voor schrijftoegang.

    Zie Het doden van geopende bestandsingangen die zijn gekoppeld aan een FileTable- in dit onderwerp voor meer informatie over het doden van geopende bestandsingangen.

    Als de opdracht ALTER DATABASE wordt geannuleerd of eindigt met een time-out, wordt het niveau van transactionele toegang niet gewijzigd.

  • Als u de ALTER DATABASE-statement aanroept met een WITH-<-beëindiging> voorwaarde (TERUGDRAAIEN NA integer [ SECONDEN ] | TERUGDRAAIEN DIRECT | NO_WAIT), worden alle geopende niet-transactionele bestandsingangen afgesloten.

Waarschuwing

Het doden van geopende bestandsingangen kan ertoe leiden dat gebruikers niet-opgeslagen gegevens verliezen. Dit gedrag is consistent met het gedrag van het bestandssysteem zelf.

effecten van het uitschakelen van niet-transactionele toegang

Het wijzigen van het niveau van niet-transactionele toegang op databaseniveau heeft de volgende gevolgen voor de FileTable-mappen onder de map op databaseniveau:

  • Wanneer u toegang instelt tot NONE, zijn alle FileTable-mappen en de inhoud ervan niet meer toegankelijk of zichtbaar.

  • Wanneer u toegang instelt op READ_ONLY, zijn alle FileTable-mappen en hun inhoud ook alleen-lezen.

Het uitschakelen van FILESTREAM op exemplaarniveau heeft de volgende gevolgen voor de mappen op databaseniveau op dat exemplaar en de FileTable-mappen eronder:

  • Geen van de mappen op databaseniveau op het exemplaar zijn zichtbaar als FILESTREAM is uitgeschakeld op exemplaarniveau.

Procedure: Niet-transactionele toegang uitschakelen en opnieuw inschakelen op databaseniveau

Zie ALTER DATABASE SET Options (Transact-SQL)voor meer informatie.

Volledige niet-transactionele toegang uitschakelen
Roep de opdracht ALTER DATABASE aan en stel de waarde van NON_TRANSACTED_ACCESS in op READ_ONLY of OFF.

-- Disable write access.  
ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );  
GO  
  
-- Disable non-transactional access.  
ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF );  
GO  

Volledige niet-transactionele toegang opnieuw inschakelen
Roep de instructie ALTER DATABASE aan en stel de waarde van NON_TRANSACTED_ACCESS in op VOL.

ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );  
GO  

Hoe: Zorgen voor de zichtbaarheid van FileTables in een database

Een map op databaseniveau en de Onderliggende FileTable-mappen zijn zichtbaar wanneer aan al deze voorwaarden wordt voldaan:

  1. FILESTREAM is ingeschakeld op exemplaarniveau.

  2. Niet-transactionele toegang is ingeschakeld op databaseniveau.

  3. Er is een geldige map opgegeven op databaseniveau.

De bestandsnaamruimte op tabelniveau uitschakelen en opnieuw inschakelen

Als u de FileTable-naamruimte uitschakelt, worden alle door het systeem gedefinieerde beperkingen en triggers uitgeschakeld die zijn gemaakt met de FileTable. Dit is handig in gevallen waarin een FileTable op grote schaal moet worden geordend met behulp van Transact-SQL bewerkingen zonder de kosten van het afdwingen van semantiek van FileTable. Deze bewerkingen kunnen de FileTable echter in een inconsistente status laten staan en kunnen voorkomen dat de filetable-naamruimte opnieuw wordt ingeschakeld.

Het uitschakelen van een FileTable-naamruimte heeft de volgende resultaten:

  • FileTable-kolommen en -gegevens worden niet fysiek uit de tabel verwijderd.

  • De FileTable-map en de bestanden en mappen die deze bevat, verdwijnen uit het bestandssysteem en zijn niet beschikbaar voor toegang tot i/o-bestanden.

  • Door het systeem gedefinieerde FileTable-kolommen kunnen niet worden verwijderd en opnieuw worden gemaakt; anders gedragen ze zich als gewone kolommen voor DML-bewerkingen.

  • Open bestandsingangen voorkomen dat de FileTable-beperkingen worden uitgeschakeld, omdat voor deze bewerking een schemavergrendeling voor de tabel is vereist.

  • Afdwingen van alle bestandstabel-semantiek, inclusief door het systeem gedefinieerde beperkingen en triggers, stopt nadat de FileTable-naamruimte is uitgeschakeld.

Het opnieuw inschakelen van een FileTable-naamruimte heeft de volgende resultaten:

  • De FileTable wordt gecontroleerd op consistentie. Als inconsistenties worden gevonden, wordt er een fout gegenereerd en blijft de FileTable uitgeschakeld; anders wordt de FileTable opnieuw ingeschakeld.

  • De toepassing van de semantiek van FileTable, inclusief systeemgedefinieerde beperkingen en triggers, wordt hersteld.

  • De map FileTable en de bestanden en mappen die deze bevat, worden zichtbaar in het bestandssysteem en worden beschikbaar voor toegang tot bestanden via i/o.

Procedure: De bestandsnaamruimte op tabelniveau uitschakelen en opnieuw inschakelen

Roep de instructie ALTER TABLE aan met de { ENABLE | DISABLE } FILETABLE_NAMESPACE optie.

De FileTable-naamruimte uitschakelen

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

De FileTable-naamruimte opnieuw inschakelen

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

Open bestandshandvatten beëindigen die zijn gekoppeld aan een filetable.

Open ingangen voor de bestanden die zijn opgeslagen in een FileTable kunnen de exclusieve toegang voorkomen die vereist is voor bepaalde beheertaken. Als u urgente taken wilt inschakelen, moet u mogelijk geopende bestandsingangen beëindigen die zijn gekoppeld aan een of meer FileTables.

Waarschuwing

Het doden van geopende bestandsingangen kan ertoe leiden dat gebruikers niet-opgeslagen gegevens verliezen. Dit gedrag is consistent met het gedrag van het bestandssysteem zelf.

Procedure: Een lijst met geopende bestandsingangen ophalen die zijn gekoppeld aan een FileTable

Voer een query uit voor de catalogusweergave sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Procedure: Open bestandsingangen beëindigen die zijn gekoppeld aan een FileTable

Roep de opgeslagen procedure aan sp_kill_filestream_non_transacted_handles (Transact-SQL) met de juiste argumenten om alle geopende bestandsingangen in de database of in de FileTable te beëindigen of om een specifieke ingang te beëindigen.

USE database_name;  
  
-- Kill all open handles in all the filetables in the database.  
EXEC sp_kill_filestream_non_transacted_handles;  
GO  
  
-- Kill all open handles in a single filetable.  
EXEC sp_kill_filestream_non_transacted_handles @table_name = 'filetable_name';  
GO  
  
-- Kill a single handle.  
EXEC sp_kill_filestream_non_transacted_handles @handle_id = integer_handle_id;  
GO  

Hoe te: De vergrendelingen identificeren die worden gehouden door FileTables

De meeste vergrendelingen die door FileTables worden genomen, komen overeen met bestanden die door toepassingen worden geopend.

Om geopende bestanden en de bijbehorende vergrendelingen te identificeren
Voeg het veld request_owner_id in de dynamische beheerweergave sys.dm_tran_locks (Transact-SQL) samen met het veld fcb_id in sys.dm_filestream_non_transacted_handles (Transact-SQL). In sommige gevallen komt de vergrendeling niet overeen met één geopende bestandsingang.

SELECT opened_file_name  
FROM sys.dm_filestream_non_transacted_handles  
WHERE fcb_id IN  
    ( SELECT request_owner_id FROM sys.dm_tran_locks );  
GO  

FileTable-beveiliging

De bestanden en mappen die zijn opgeslagen in FileTables, worden alleen beveiligd door SQL Server-beveiliging. Beveiliging op basis van tabellen en kolommen wordt afgedwongen voor toegang tot het besturingssysteem en Transact-SQL-toegang. Windows-bestandssysteembeveiligings-API's en ACL-instellingen worden niet ondersteund.

De beveiligings- en toegangsmachtigingen die van toepassing zijn op FILESTREAM-bestandsgroepen en -containers zijn ook van toepassing op FileTables, omdat de bestandsgegevens worden opgeslagen als een FILESTREAM-kolom in de FileTable.

FileTable-beveiliging en Transact-SQL Toegang
Transact-SQL toegang tot gegevens in FileTables is beveiligd op dezelfde manier als elke andere tabel. De juiste beveiligingscontroles op tabel- en kolomniveau worden uitgevoerd voor elke bewerking die de gegevens opent of wijzigt.

FileTable Security en Bestanden Systeem Toegang
Bestandssysteem-API's vereisen de juiste SQL Server-machtigingen voor de hele rij in de FileTable (dat wil gezegd machtiging op tabelniveau) om een ingang te openen voor een bestand of map die is opgeslagen in de FileTable. Als de gebruiker niet over de juiste SQL Server-machtiging beschikt voor een kolom in de FileTable, wordt toegang tot het bestandssysteem geweigerd.

Backup en FileTables

Wanneer u SQL Server gebruikt om een back-up te maken van een FileTable, wordt een back-up gemaakt van de FILESTREAM-gegevens met de gestructureerde gegevens in de database. Als u geen back-up wilt maken van FILESTREAM-gegevens met relationele gegevens, kunt u een gedeeltelijke back-up gebruiken om FILESTREAM-bestandsgroepen uit te sluiten.

transactionele consistentie van filetable-back-ups

Veel beheerhulpprogramma's en bewerkingen (inclusief back-up, logboekback-up en transactionele replicatie) lezen transactioneel consistente gegevens door de transactielogboeken te lezen. Op dit moment lezen ze alle FILESTREAM-gegevens die zijn bijgewerkt als onderdeel van een transactie. Wanneer niet-transactionele toegang niet is ingeschakeld op databaseniveau, werken deze hulpprogramma's en bewerkingen met volledige transactionele consistentie.

Als volledige niet-transactionele toegang echter is ingeschakeld, kan een FileTable gegevens bevatten die recenter zijn bijgewerkt (via een niet-transactionele update) dan de transactie die het hulpprogramma of proces leest vanuit het transactielogboek. Dit betekent dat een herstelbewerking naar een bepaald tijdstip FILESTREAM-gegevens kan bevatten die recenter zijn dan die transactie. Dit is het verwachte gedrag wanneer niet-transactionele updates zijn toegestaan voor FileTables.

SQL Server Profiler en FileTables

SQL Server Profiler kan de bewerkingen Windows File Open en File Close vastleggen in trace-uitvoer voor bestanden die zijn opgeslagen in een FileTable.

Audit en FileTables

FileTable kan net als elke andere tabel worden gecontroleerd. Win32-toegangspatronen zijn echter geen set-gebaseerde operaties. Eén actie in het bestandssysteem wordt omgezet in meerdere Transact-SQL DML-bewerkingen. Het openen van een bestand in Microsoft Word wordt bijvoorbeeld omgezet in meerdere bewerkingen voor openen/sluiten/maken/wijzigen/verwijderen en bijbehorende Transact-SQL DML-activiteiten. Dit resulteert in uitgebreide auditrecords waarbij het moeilijk is om records te correleren tussen bestandssysteemacties en bijbehorende Transact-SQL DML-auditrecords.

DBCC en FileTables

U kunt DBCC CHECKCONSTRAINTS gebruiken om de beperkingen voor een FileTable te valideren, inclusief door het systeem gedefinieerde beperkingen.

Zie ook

FileTable-compatibiliteit met andere SQL Server-functies
FileTable DDL, Functies, Opgeslagen procedures en weergaven