Zarządzanie tabelami plików
Dotyczy:programu SQL Server
Opisuje typowe zadania administracyjne do zarządzania tabelami plików.
Jak uzyskać listę FileTables i powiązanych obiektów
Aby uzyskać listę tabel Plików, wykonaj zapytanie o jeden z następujących widoków wykazu:
sys.tables (Transact-SQL) (sprawdź wartość kolumny is_filetable).
SELECT * FROM sys.filetables;
GO
SELECT * FROM sys.tables WHERE is_filetable = 1;
GO
Aby uzyskać listę obiektów zdefiniowanych przez system, które zostały utworzone podczas tworzenia skojarzonych tabel plików, wykonaj zapytanie dotyczące widoku wykazu sys.filetable_system_defined_objects (Transact-SQL).
SELECT object_id, OBJECT_NAME(object_id) AS 'Object Name'
FROM sys.filetable_system_defined_objects;
GO
Wyłączanie i ponowne włączanie dostępu nie transakcyjnego na poziomie bazy danych
Aby uzyskać wyłączny dostęp wymagany w przypadku niektórych zadań administracyjnych, może być konieczne tymczasowe wyłączenie dostępu nieskupowego.
zachowanie instrukcji ALTER DATABASE podczas zmiany poziomu dostępu nie transakcyjnego
Po ustawieniu dostępu nietransakcyjnego na READ_ONLY lub WYŁĄCZONY, komenda ALTER DATABASE nie zwraca kontroli użytkownikowi, dopóki istnieją otwarte uchwyty plików, które powodują konflikt z żądaną operacją. Uchwyty plików, które powodują konflikt z tą operacją, obejmują następujące:
Podczas ustawiania dostępu do NONE, wszystkie otwarte uchwyty plików zostają zamknięte.
Po ustawieniu dostępu do READ_ONLYwszystkie dojścia plików otwarte na potrzeby dostępu do zapisu.
Aby uzyskać informacje na temat zamykania otwartych dojść do plików, zobacz Zamykanie Otwartych Dojść do Plików Powiązanych z FileTable w tym temacie.
Jeśli polecenie ALTER DATABASE zostanie anulowane lub kończy się przekroczeniem limitu czasu, poziom dostępu transakcyjnego nie zostanie zmieniony.
Jeśli wywołasz instrukcję ALTER DATABASE z klauzulą zakończenia WITH <> (ROLLBACK AFTER integer [ SECONDS ] | WYCOFANIE NATYCHMIASTOWE | NO_WAIT), wtedy wszystkie otwarte nietransakcyjne dojścia do plików zostaną zamknięte.
Ostrzeżenie
Zamykanie otwartych uchwytów plików może spowodować utratę niezapisanych danych przez użytkowników. To zachowanie jest zgodne z zachowaniem samego systemu plików.
Efekty wyłączania dostępu nie transakcyjnego
Zmiana poziomu dostępu nie transakcyjnego na poziomie bazy danych ma następujący wpływ na katalogi FileTable w katalogu na poziomie bazy danych:
Po ustawieniu dostępu do NONEwszystkie katalogi FileTable i ich zawartość nie są już dostępne ani widoczne.
Po ustawieniu dostępu do READ_ONLYwszystkie katalogi FileTable i ich zawartość są również tylko do odczytu.
Wyłączenie funkcji FILESTREAM na poziomie wystąpienia ma następujący wpływ na katalogi na poziomie bazy danych w tym wystąpieniu oraz katalogi FileTable w nich:
- Żaden z katalogów na poziomie bazy danych w wystąpieniu nie jest widoczny, jeśli parametr FILESTREAM jest wyłączony na poziomie wystąpienia.
Instrukcje: wyłączanie i ponowne włączanie dostępu nie transakcyjnego na poziomie bazy danych
Aby uzyskać więcej informacji, zobacz ALTER DATABASE SET Options (Transact-SQL).
Aby wyłączyć pełny dostęp nie transakcyjny
Wywołaj instrukcję ALTER DATABASE i ustaw wartość NON_TRANSACTED_ACCESS na wartość READ_ONLY lub 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
Aby ponownie włączyć pełny dostęp nie transakcyjny
Wywołaj instrukcję ALTER DATABASE i ustaw wartość parametru NON_TRANSACTED_ACCESS na FULL.
ALTER DATABASE database_name
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );
GO
Instrukcje: zapewnianie widoczności tabel plików w bazie danych
Katalog na poziomie bazy danych i katalogi FileTable są widoczne, gdy spełnione są wszystkie te warunki:
FUNKCJA FILESTREAM jest włączona na poziomie wystąpienia.
Dostęp nie transakcyjny jest włączony na poziomie bazy danych.
Prawidłowy katalog został określony na poziomie bazy danych.
Wyłączanie i ponowne włączanie przestrzeni nazw FileTable na poziomie tabeli
Wyłączenie przestrzeni nazw FileTable powoduje wyłączenie wszystkich ograniczeń zdefiniowanych przez system i wyzwalaczy utworzonych za pomocą tabeli FileTable. Jest to przydatne w przypadkach, gdy FileTable musi zostać zreorganizowana na dużą skalę przy pomocy operacji Transact-SQL, bez konieczności ponoszenia kosztów związanych z wymuszaniem semantyki FileTable. Jednak te operacje mogą pozostawić tabelę FileTable w stanie niespójnym i uniemożliwić ponowne włączenie przestrzeni nazw FileTable.
Wyłączenie przestrzeni nazw FileTable ma następujące wyniki:
Kolumny fileTable i dane nie są fizycznie usuwane z tabeli.
Katalog FileTable oraz pliki i katalogi, które zawiera, znikają z systemu plików i nie można uzyskać dostępu do operacji we/wy plików.
Nie można usunąć i ponownie utworzyć kolumn FileTable zdefiniowanych przez system; w przeciwnym razie zachowują się jak zwykłe kolumny dla operacji DML.
Otwarte dojścia do plików uniemożliwiają wyłączenie ograniczeń tabeli FileTable, ponieważ ta operacja wymaga blokady schematu w tabeli.
Egzekwowanie wszystkich semantycznych aspektów FileTable, w tym ograniczeń i wyzwalaczy zdefiniowanych przez system, zatrzymuje się po wyłączeniu przestrzeni nazwowej FileTable.
Ponowne włączenie przestrzeni nazw FileTable ma następujące wyniki:
Tabela Plików jest sprawdzana pod kątem spójności. Jeśli zostaną znalezione niespójności, zostanie zgłoszony błąd, a tabela FileTable pozostanie wyłączona; w przeciwnym razie opcja FileTable jest ponownie włączona.
Wymuszanie semantyki fileTable, w tym ograniczeń i wyzwalaczy zdefiniowanych przez system, jest przywracane.
Katalog FileTable oraz pliki i katalogi, które zawiera, stają się widoczne w systemie plików i stają się dostępne do operacji we/wy.
Instrukcje: wyłączanie i ponowne włączanie przestrzeni nazw FileTable na poziomie tabeli
Użyj instrukcji ALTER TABLE z opcją { ENABLE | DISABLE } FILETABLE_NAMESPACE.
Aby wyłączyć przestrzeń nazw FileTable
ALTER TABLE filetable_name
DISABLE FILETABLE_NAMESPACE;
GO
Aby ponownie włączyć przestrzeń nazw FileTable
ALTER TABLE filetable_name
ENABLE FILETABLE_NAMESPACE;
GO
Zabijanie otwartych dojść do plików skojarzonych z tabelą plików
Otwarte dojścia do plików przechowywanych w tabeli FileTable mogą uniemożliwić wyłączny dostęp wymagany w przypadku niektórych zadań administracyjnych. Aby włączyć pilne zadania, może być konieczne zamknięcie otwartych dojść do plików skojarzonych z co najmniej jedną tabelą plików.
Ostrzeżenie
Zamknięcie otwartych uchwytów do plików może spowodować utratę niezapisanych danych przez użytkowników. To zachowanie jest zgodne z zachowaniem samego systemu plików.
Jak: uzyskać listę otwartych dojść do plików skojarzonych z FileTable
Zapytaj widok katalogu sys.dm_filestream_non_transacted_handles (Transact-SQL).
SELECT * FROM sys.dm_filestream_non_transacted_handles;
GO
Jak: zamknąć otwarte uchwyty plików skojarzonych z FileTable
Wywołaj procedurę składowaną sp_kill_filestream_non_transacted_handles (Transact-SQL) z odpowiednimi argumentami, aby zabić wszystkie otwarte dojścia do plików w bazie danych lub w tabeli FileTable albo zabić określone dojście.
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
Instrukcje: identyfikowanie blokad przechowywanych przez tabele plików
Większość blokad zarezerwowanych przez FileTables odpowiada plikom otwieranym przez aplikacje.
Aby zidentyfikować otwarte pliki i skojarzone blokady
Dołącz pole request_owner_id w widoku dynamicznego zarządzania sys.dm_tran_locks (Transact-SQL) z polem fcb_id w sys.dm_filestream_non_transacted_handles (Transact-SQL). W niektórych przypadkach blokada nie odpowiada jednemu otwartemu uchwytowi do pliku.
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
Zabezpieczenia tabeli plików
Pliki i katalogi przechowywane w tabelach FileTable są zabezpieczone tylko przez zabezpieczenia programu SQL Server. Zabezpieczenia oparte na tabelach i kolumnach są wymuszane dla dostępu do systemu plików, a także dostępu Transact-SQL. Interfejsy API zabezpieczeń systemu plików w systemie Windows i ustawienia list kontroli dostępu (ACL) nie są obsługiwane.
Uprawnienia zabezpieczeń i dostępu, które mają zastosowanie do grup plików FILESTREAM i kontenerów, mają również zastosowanie do tabel FileTable, ponieważ dane pliku są przechowywane jako kolumna FILESTREAM w tabeli FileTable.
Zabezpieczenia FileTable i Transact-SQL Access
Transact-SQL dostęp do danych w tabelach FileTables jest zabezpieczony w taki sam sposób, jak każda inna tabela. Odpowiednie kontrole zabezpieczeń na poziomie tabeli i kolumny są wykonywane dla każdej operacji, która uzyskuje dostęp do danych lub zmienia je.
zabezpieczenia tabeli plików i dostęp do systemu plików
Interfejsy API systemu plików wymagają odpowiednich uprawnień programu SQL Server w całym wierszu w tabeli FileTable (czyli uprawnienia na poziomie tabeli), aby otworzyć dojście do pliku lub katalogu przechowywanego w tabeli FileTable. Jeśli użytkownik nie ma odpowiednich uprawnień programu SQL Server w żadnej kolumnie w tabeli FileTable, dostęp do systemu plików zostanie odrzucony.
Tworzenie kopii zapasowych i tabel plików
W przypadku tworzenia kopii zapasowej tabeli FileTable przy użyciu programu SQL Server kopia zapasowa danych FILESTREAM jest tworzona z danymi ustrukturyzowanymi w bazie danych. Jeśli nie chcesz tworzyć kopii zapasowych danych FILESTREAM z danymi relacyjnymi, możesz użyć częściowej kopii zapasowej, aby wykluczyć grupy plików FILESTREAM.
Spójność transakcyjna kopii zapasowych FileTable
Wiele narzędzi administracyjnych i operacji (w tym tworzenie kopii zapasowej, kopii zapasowej dziennika i replikacji transakcyjnej) odczytuje dane spójne transakcyjnie, odczytując dzienniki transakcji. W tej chwili odczytują wszystkie dane FILESTREAM zaktualizowane w ramach transakcji. Jeśli dostęp nie transakcyjny nie jest włączony na poziomie bazy danych, te narzędzia i operacje działają z pełną spójnością transakcyjną.
Jednak po włączeniu pełnego dostępu nie transakcyjnego tabela FileTable może zawierać dane, które zostały ostatnio zaktualizowane (za pośrednictwem aktualizacji nie transakcyjnej) niż transakcja, którą narzędzie lub proces odczytuje z dziennika transakcji. Oznacza to, że operacja przywracania "do punktu w czasie" do określonej transakcji może zawierać dane FILESTREAM, które są nowsze niż ta transakcja. Jest to oczekiwane zachowanie, gdy aktualizacje nie transakcyjne są dozwolone w tabelach FileTables.
Sql Server Profiler i FileTables
Program SQL Server Profiler może przechwytywać operacje otwierania i zamykania plików systemu Windows w wynikach śledzenia dla plików przechowywanych w tabeli FileTable.
Inspekcja i tabele plików
FileTable może być audytowana tak samo jak każda inna tabela. Jednak wzorce dostępu Win32 nie są oparte na operacjach zestawów. Pojedyncza operacja w systemie plików prowadzi do wielu operacji DML Transact-SQL. Na przykład otwarcie pliku w programie Microsoft Word przekłada się na wiele operacji otwierania/zamykania/tworzenia/zmiany nazwy/usuwania i odpowiadających im działań Transact-SQL DML. Powoduje to nadmiernie rozbudowane rekordy audytu, w których trudno jest skorelować dane między akcjami systemu plików a odpowiadającymi rekordami audytu DML Transact-SQL.
DBCC i FileTables
Za pomocą polecenia DBCC CHECKCONSTRAINTS można zweryfikować ograniczenia w FileTable, w tym ograniczenia zdefiniowane przez system.
Zobacz też
zgodność FileTable z innymi funkcjami programu SQL Server
FileTable DDL, funkcje, procedury składowane i widoki