Dela via


Hantera Filtabeller

gäller för:SQL Server

Beskriver vanliga administrativa uppgifter för att hantera FileTables.

Anvisningar: Hämta en lista över filtabeller och relaterade objekt

Om du vill hämta en lista över FileTables kan du använda någon av följande katalogvyer:

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

Om du vill hämta en lista över systemdefinierade objekt som skapades när de associerade FileTables skapades, fråga katalogvyn sys.filetable_system_defined_objects (Transact-SQL).

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

Inaktivera och återaktivera icke-transaktionell åtkomst på databasnivå

För att få den exklusiva åtkomst som krävs för vissa administrativa uppgifter kan du tillfälligt behöva inaktivera icke-transaktionell åtkomst.

Beteende för ALTER DATABASE-instruktionen när du ändrar nivån för icke-transaktionell åtkomst

  • När du anger icke-transaktionell åtkomst till READ_ONLY eller OFF returnerar alter database-kommandot inte kontrollen till användaren så länge det finns öppna filreferenser som står i konflikt med den begärda åtgärden. Följande filhandtag är i konflikt med den här åtgärden:

    • När du ställer in åtkomst till NONEpåverkar det alla öppna filhandtag.

    • När du anger åtkomst till READ_ONLYöppnas alla filreferenser för skrivåtkomst.

    Information om hur du stänger öppna filhandtag finns i avsnittet Stänga öppna filhandtag associerade med en filtabell i detta ämne.

    Om ALTER DATABASE-kommandot avbryts eller slutar med en timeout ändras inte transaktionsåtkomstnivån.

  • Om du anropar ALTER DATABASE-kommandot med en WITH-<avslutnings->-sats (RULLA TILLBAKA EFTER heltal [ SEKUNDER ] | RULLA TILLBAKA OMEDELBART | NO_WAIT) avslutas alla öppna icke-transaktionella filhandtag.

Varning

Om öppna filhandtag dödas kan användarna förlora data som inte har sparats. Det här beteendet överensstämmer med själva filsystemets beteende.

Effekter av att inaktivera icke-transaktionell åtkomst

Om du ändrar nivån för icke-transaktionell åtkomst på databasnivå har följande effekter på FileTable-katalogerna under katalogen på databasnivå:

  • När du anger åtkomst till NONEär alla FileTable-kataloger och deras innehåll inte längre tillgängliga eller synliga.

  • När du anger åtkomst till READ_ONLYär alla FileTable-kataloger och deras innehåll också skrivskyddade.

Att inaktivera FILESTREAM på instansnivå har följande effekter på katalogerna på databasnivå på den instansen och FileTable-katalogerna under dem:

  • Ingen av katalogerna på databasnivå på instansen visas om FILESTREAM är inaktiverat på instansnivå.

Anvisningar: Inaktivera och återaktivera icke-transaktionell åtkomst på databasnivå

Mer information finns i ALTER DATABASE SET Options (Transact-SQL).

Inaktivera fullständig icke-transaktionell åtkomst
Anropa instruktionen ALTER DATABASE och ANGE värdet för NON_TRANSACTED_ACCESS till READ_ONLY eller 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  

Om du vill återaktivera fullständig icke-transaktionell åtkomst
Anropa instruktionen ALTER DATABASE och ANGE värdet för NON_TRANSACTED_ACCESS till FULL.

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

Gör så här: Se till att FileTables visas i en databas

En katalog på databasnivå och FileTable-katalogerna under den visas när alla dessa villkor är sanna:

  1. FILESTREAM är aktiverat på instansnivå.

  2. Icke-transaktionell åtkomst är aktiverad på databasnivå.

  3. En giltig katalog har angetts på databasnivå.

Inaktivera och återaktivera Filtabellnamnområdet på tabellnivå

Om du inaktiverar FileTable-namnområdet inaktiveras alla systemdefinierade begränsningar och utlösare som skapades med FileTable. Detta är användbart i de fall där en FileTable måste omorganiseras i stor skala med hjälp av Transact-SQL-operationer utan att medföra kostnaden för att tillämpa FileTable-semantik. Dessa åtgärder kan dock lämna FileTable i ett inkonsekvent tillstånd och kan förhindra återaktivering av FileTable-namnområdet.

Om du inaktiverar ett FileTable-namnområde visas följande resultat:

  • FileTable-kolumner och data tas inte bort fysiskt från tabellen.

  • Katalogen FileTable och de filer och kataloger som den innehåller försvinner från filsystemet och är inte tillgängliga för fil-i/o-åtkomst.

  • Systemdefinierade FileTable-kolumner kan inte tas bort och återskapas. Annars fungerar de dock som vanliga kolumner för DML-åtgärder.

  • Öppna filreferenser förhindrar att FileTable-begränsningarna inaktiveras, eftersom den här åtgärden kräver ett schemalås i tabellen.

  • Tvingande av alla FileTable-semantik, inklusive systemdefinierade begränsningar och utlösare, stoppas när FileTable-namnområdet har inaktiverats.

Återaktivering av ett FileTable-namnområde har följande resultat:

  • FileTable kontrolleras för konsekvens. Om inkonsekvenser hittas utlöses ett fel och FileTable förblir inaktiverat. Annars aktiveras FileTable igen.

  • Tillämpningen av FileTable-semantik, inklusive systemdefinierade begränsningar och utlösare, återställs.

  • Katalogen FileTable och de filer och kataloger som den innehåller blir synliga i filsystemet och blir tillgängliga för fil-i/o-åtkomst.

Anvisningar: Inaktivera och återaktivera Filtabellnamnområdet på tabellnivå

Anropa ALTER TABLE-instruktionen med { ENABLE | AVAKTIVERA } FILETABLE_NAMESPACE alternativet.

Inaktivera FileTable-namnområdet

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

Om du vill återaktivera FileTable-namnområdet

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

Döda öppna filreferenser som är associerade med en Filtabell

Öppna handtag till filerna som lagras i en FileTable kan förhindra den exklusiva åtkomst som krävs för vissa administrativa uppgifter. För att möjliggöra akuta arbetsuppgifter kan du behöva avsluta öppnade filhandtag som är kopplade till en eller flera filtabeller.

Varning

Om öppna filhandtag dödas kan användarna förlora data som inte har sparats. Det här beteendet överensstämmer med själva filsystemets beteende.

Anvisningar: Hämta en lista över öppna filreferenser som är associerade med en FileTable

Fråga katalogvyn sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Så här gör du för att avsluta öppna filhandtag som är associerade med en FileTable

Anropa den lagrade proceduren sp_kill_filestream_non_transacted_handles (Transact-SQL) med lämpliga argument för att avsluta alla öppna filreferenser i databasen eller i FileTable, eller för att avsluta ett specifikt handtag.

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  

Gör så här: Identifiera låsen som lagras av FileTables

De flesta lås som tas av FileTables motsvarar filer som öppnas av program.

Identifiera öppna filer och tillhörande lås
Anslut fältet request_owner_id i den dynamiska hanteringsvyn sys.dm_tran_locks (Transact-SQL) med fältet fcb_id i sys.dm_filestream_non_transacted_handles (Transact-SQL). I vissa fall motsvarar låset inte ett enda öppet filhandtag.

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 Security

De filer och kataloger som lagras i FileTables skyddas endast av SQL Server-säkerhet. Tabell- och kolumnbaserad säkerhet tillämpas för filsystemåtkomst samt Transact-SQL åtkomst. Säkerhets-API:er för Windows-filsystem och ACL-inställningar stöds inte.

De säkerhets- och åtkomstbehörigheter som gäller för FILESTREAM-filgrupper och containrar gäller även för FileTables, eftersom fildata lagras som en FILESTREAM-kolumn i FileTable.

FilTable-säkerhet och Transact-SQL Åtkomst
Transact-SQL åtkomst till data i FileTables skyddas på samma sätt som andra tabeller. Lämpliga säkerhetskontroller på tabell- och kolumnnivå görs för varje åtgärd som kommer åt eller ändrar data.

FileTable-säkerhet och filsystemåtkomst
Filsystem-API:er kräver lämpliga SQL Server-behörigheter på hela raden i FileTable (dvs. behörighet på tabellnivå) för att öppna en referens till en fil eller katalog som lagras i FileTable. Om användaren inte har rätt SQL Server-behörighet för någon kolumn i FileTable nekas filsystemåtkomst.

Säkerhetskopiering och FileTables

När du använder SQL Server för att säkerhetskopiera en FileTable säkerhetskopieras FILESTREAM-data med strukturerade data i databasen. Om du inte vill säkerhetskopiera FILESTREAM-data med relationsdata kan du använda en partiell säkerhetskopia för att exkludera FILESTREAM-filgrupper.

Transaktionell Konsistens för FileTable-säkerhetskopieringar

Många administrativa verktyg och åtgärder (inklusive säkerhetskopiering, loggsäkerhetskopiering och transaktionsreplikering) läser transaktionskonsekventa data genom att läsa transaktionsloggarna. För närvarande läser de alla FILESTREAM-data som uppdaterats som en del av en transaktion. När icke-transaktionell åtkomst inte är aktiverad på databasnivå fungerar dessa verktyg och åtgärder med fullständig transaktionskonsekvens.

Men när fullständig icke-transaktionell åtkomst är aktiverad kan en FileTable innehålla data som har uppdaterats på senare tid (via en icke-transaktionell uppdatering) än den transaktion som verktyget eller processen läser från transaktionsloggen. Det innebär att en "tidpunktsåterställningsåtgärd" till en specifik transaktion kan innehålla FILESTREAM-data som är nyare än den transaktionen. Detta är det förväntade beteendet när icke-transaktionsuppdateringar tillåts på FileTables.

SQL Server Profiler och FileTables

SQL Server Profiler kan samla in åtgärderna öppna och stänga Windows-filer i spårningsutdata för filer som lagras i en Filetable.

Revision och Filtabeller

FileTable kan granskas precis som andra tabeller. Win32-åtkomstmönster är dock inte baserade på mängdoperationer. En enda åtgärd i filsystemet översätts till flera Transact-SQL DML-åtgärder. Till exempel, när du öppnar en fil i Microsoft Word leder det till flera operationer för att öppna/stänga/skapa/byta namn på/ta bort och motsvarande Transact-SQL DML-aktiviteter. Detta resulterar i utförliga granskningsposter där det är svårt att korrelera poster mellan filsystemåtgärder och motsvarande Transact-SQL DML-granskningsposter.

DBCC och FileTables

Du kan använda DBCC CHECKCONSTRAINTS för att verifiera begränsningarna för en FileTable, inklusive systemdefinierade begränsningar.

Se även

FileTable-kompatibilitet med andra SQL Server-funktioner
FileTable DDL, Funktioner, Lagrade procedurer och vyer