Megosztás a következőn keresztül:


FileTables kezelése

A következőkre vonatkozik:SQL Server

A FileTables kezelésével kapcsolatos gyakori felügyeleti feladatokat ismerteti.

Útmutató: Fájltáblák és kapcsolódó objektumok listájának lekérése

A FileTables listájának lekéréséhez kérje le az alábbi katalógusnézetek egyikét:

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

A társított FileTables létrehozásakor létrehozott rendszer által definiált objektumok listájának lekéréséhez kérje le a katalógusnézetet sys.filetable_system_defined_objects (Transact-SQL).

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

A nem tranzakciós hozzáférés letiltása és újbóli engedélyezése adatbázisszinten

Az egyes felügyeleti feladatokhoz szükséges kizárólagos hozzáférés beszerzéséhez előfordulhat, hogy ideiglenesen le kell tiltania a nem tranzakciós hozzáférést.

AZ ALTER DATABASE utasítás viselkedése a nem tranzakciós hozzáférés szintjének módosításakor

  • Ha nem tranzakciós hozzáférést állít be READ_ONLY vagy KI értékre, az ALTER DATABASE parancs nem ad vissza vezérlést a felhasználónak, ha vannak nyitott fájlleírók, amelyek ütköznek a kért művelettel. A művelettel ütköző fájlleírók a következők:

    • Amikor hozzáférést állít be a NONE, az összes megnyitott fájlfogópontot érinti.

    • Amikor a READ_ONLYelérését állítja be, minden fájl fogantyú meg van nyitva olvasási hozzáféréshez.

    A fájltáblához társított nyílt fájlleírók megszüntetéséről a témakör Fájltáblához társított nyílt fájlleírók megszüntetése részében talál információt.

    Ha az ALTER DATABASE parancsot megszakítják, vagy időtúllépéssel végződik, akkor a tranzakciós hozzáférés szintje nem változik.

  • Amennyiben az ALTER DATABASE utasítást a WITH <termination> záradékkal hívja meg (ROLLBACK AFTER integer [ SECONDS ] | AZONNALI VISSZAÁLLÍTÁS | NO_WAIT), akkor minden nyitott, nem tranzakciós fájl kezelőt lezár.

Figyelmeztetés

A megnyitott fájlleírók bezárása a felhasználók számára azzal a veszéllyel járhat, hogy elveszítik a nem mentett adataikat. Ez a viselkedés összhangban van a fájlrendszer viselkedésével.

Nem tranzakciós hozzáférés letiltásának hatásai

Az adatbázis szintjén a nem tranzakciós hozzáférés szintjének módosítása az alábbi hatással van az adatbázisszintű könyvtárban lévő FileTable-címtárakra:

  • Ha NONE-hez állít be hozzáférést, akkor az összes FileTable-címtár és azok tartalma többé nem érhető el vagy nem látható.

  • Amikor hozzáférést állít be a READ_ONLYértékre, a FileTable-könyvtárak és azok tartalma is írásvédetté válnak.

A FILESTREAM példányszinten való letiltása az alábbi hatással van az adott példány adatbázisszintű könyvtárára és az alattuk lévő FileTable-könyvtárakra:

  • A példány egyik adatbázisszintű könyvtára sem látható, ha a FILESTREAM le van tiltva a példány szintjén.

Útmutató: A nem tranzakciós hozzáférés letiltása és újbóli engedélyezése adatbázisszinten

További információ: ALTER DATABASE SET Options (Transact-SQL).

Teljes nem tranzakciós hozzáférés letiltása
Hívja meg az ALTER DATABASE utasítást, és állítsa be a NON_TRANSACTED_ACCESS értéket READ_ONLY vagy KIértékre.

-- 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  

Teljes nem tranzakciós hozzáférés újbóli engedélyezése
Hívja meg az ALTER DATABASE utasítást, és állítsa be a NON_TRANSACTED_ACCESS értékét FULL.

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

Útmutató: A FileTables láthatóságának biztosítása az adatbázisban

Az adatbázisszintű címtárak és az alatta lévő FileTable-címtárak akkor láthatók, ha az összes feltétel teljesül:

  1. A FILESTREAM a példány szintjén engedélyezve van.

  2. A nem tranzakciós hozzáférés az adatbázis szintjén engedélyezve van.

  3. Az adatbázis szintjén érvényes könyvtár lett megadva.

A FileTable névtér letiltása és újbóli engedélyezése táblaszinten

A FileTable névtér letiltása letiltja a Fájltáblával létrehozott összes rendszer által meghatározott korlátozást és eseményindítót. Ez olyan esetekben hasznos, amikor a FileTable-t nagy léptékben kell átszervezni Transact-SQL műveletek használatával anélkül, hogy a FileTable szemantikájának kényszerítésével jár. Ezek a műveletek azonban inkonzisztens állapotban hagyhatják a FileTable-t, és megakadályozhatják a FileTable névtér újbóli engedélyezését.

A FileTable névtér letiltása a következő eredményeket eredményezi:

  • A fájltábla oszlopai és adatai fizikailag nem kerülnek ki a táblából.

  • A FileTable könyvtár, valamint a benne található fájlok és könyvtárak eltűnnek a fájlrendszerből, és nem érhetők el a fájl i/o-hozzáféréséhez.

  • A rendszer által definiált FileTable oszlopokat nem lehet elvetni és újra létrehozni; ellenkező esetben azonban a DML-műveletek szokásos oszlopaihoz hasonlóan viselkednek.

  • A megnyitott fájlleírók megakadályozzák a FileTable-korlátozások letiltását, mivel ehhez a művelethez sémazárolásra van szükség a táblában.

  • A FileTable-névtér letiltása után az összes FileTable-szemantika , beleértve a rendszer által meghatározott korlátozásokat és eseményindítókat is – kényszerítése leáll.

A FileTable névtér újbóli engedélyezésének eredménye a következő:

  • A fájltábla konzisztenciáját ellenőrzi a rendszer. Ha inkonzisztenciákat talál, a rendszer hibát jelez, és a Fájltábla le van tiltva; ellenkező esetben a FileTable újra engedélyezve van.

  • A FileTable szemantikájának érvényesítése, beleértve a rendszer által meghatározott korlátozásokat és eseményindítókat is, visszaállítva.

  • A FileTable könyvtár és a benne lévő fájlok és könyvtárak láthatóvá válnak a fájlrendszerben, és elérhetővé válnak a fájl i/o-hozzáféréséhez.

Útmutató: A FileTable névtér letiltása és újbóli engedélyezése táblaszinten

Hívd meg az ALTER TABLE utasítást az { ENABLE | DISABLE } FILETABLE_NAMESPACE beállítással.

A FileTable névtér letiltása

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

A FileTable névtér újbóli engedélyezése

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

Fájltáblához társított nyitott fájlkezelők lezárása

A Fájltáblában tárolt fájlok nyitott leírói megakadályozhatják az egyes felügyeleti feladatokhoz szükséges kizárólagos hozzáférést. A sürgős feladatok engedélyezéséhez előfordulhat, hogy meg kell ölnie egy vagy több FileTableshoz társított nyitott fájlfogópontot.

Figyelmeztetés

A megnyitott fájlleírók megölése a felhasználók számára a nem mentett adatok elvesztését okozhatja. Ez a viselkedés összhangban van a fájlrendszer viselkedésével.

Útmutató: Fájltáblához társított nyitott fájlleírók listájának lekérése

A katalógus nézet lekérdezése sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Hogyan: Fájltáblához társított nyitott fájlkezelők lezárása

Hívja meg a tárolt eljárást sp_kill_filestream_non_transacted_handles (Transact-SQL) a megfelelő argumentumokkal az adatbázis vagy a FileTable összes nyitott fájlleírójának törléséhez, vagy egy adott leíró törléséhez.

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  

Útmutató: A FileTables által tárolt zárolások azonosítása

A FileTables által végrehajtott zárolások többsége az alkalmazások által megnyitott fájloknak felel meg.

A megnyitott fájlok és a kapcsolódó zárolások azonosítása
Csatlakoztassa a dinamikus felügyeleti nézetben lévő request_owner_id mezőt a dinamikus felügyeleti nézet sys.dm_tran_locks (Transact-SQL) mezőjével a sys.dm_filestream_non_transacted_handles (Transact-SQL)fcb_id mezőhöz. Bizonyos esetekben a zárolás nem kapcsolódik egyetlen megnyitott fájlkezelőhöz.

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

A FileTablesban tárolt fájlokat és könyvtárakat csak az SQL Server biztonsága védi. A tábla- és oszlopalapú biztonság érvényesül a fájlrendszer-hozzáféréshez, valamint a Transact-SQL hozzáféréshez. A Windows fájlrendszer biztonsági API-i és ACL-beállításai nem támogatottak.

A FILESTREAM-fájlcsoportokra és -tárolókra vonatkozó biztonsági és hozzáférési engedélyek a FileTables-ra is érvényesek, mivel a fájladatok FILESTREAM oszlopként vannak tárolva a FileTable-ban.

FileTable Security és Transact-SQL Access
Transact-SQL FileTables-adatokhoz való hozzáférés ugyanúgy van biztosítva, mint bármely más táblában. Megfelelő tábla- és oszlopszintű biztonsági ellenőrzések történnek minden olyan műveletnél, amely hozzáfér vagy módosítja az adatokat.

FileTable biztonság és fájlrendszer hozzáférés
A fájlrendszer API-knak megfelelő SQL Server-engedélyekre van szükségük a FileTable teljes sorához (azaz táblaszintű engedélyhez) ahhoz, hogy megnyissunk egy leírót a Fájltáblában tárolt fájl vagy könyvtár számára. Ha a felhasználó nem rendelkezik a megfelelő SQL Server-engedéllyel a FileTable egyik oszlopában sem, akkor a rendszer megtagadja a fájlrendszer hozzáférését.

Biztonsági mentés és fájltáblák

Amikor SQL Serverrel készít biztonsági másolatot egy FileTable-ról, a FILESTREAM adatokat az adatbázis strukturált adataival együtt menti. Ha nem szeretne relációs adatokkal biztonsági másolatot készíteni a FILESTREAM-adatokról, részleges biztonsági mentéssel kizárhatja a FILESTREAM-fájlcsoportokat.

FileTable Biztonsági másolatok tranzakciós konzisztenciája

Számos felügyeleti eszköz és művelet (beleértve a biztonsági mentést, a napló biztonsági mentését és a tranzakciós replikációt) a tranzakciós naplók olvasásával olvassa be a tranzakciós konzisztens adatokat. Jelenleg egy tranzakció részeként frissített FILESTREAM-adatokat olvasnak. Ha a nem tranzakciós hozzáférés nincs engedélyezve az adatbázis szintjén, ezek az eszközök és műveletek teljes tranzakciós konzisztenciával működnek.

Ha azonban a teljes nem tranzakciós hozzáférés engedélyezve van, akkor a FileTable olyan adatokat tartalmazhat, amelyeket a közelmúltban frissítettek (nem tranzakciós frissítéssel), mint az eszköz vagy folyamat által a tranzakciónaplóból beolvasott tranzakció. Ez azt jelenti, hogy egy adott tranzakcióhoz tartozó "időponthoz kötött" visszaállítási művelet az adott tranzakciónál frissebb FILESTREAM-adatokat tartalmazhat. Ez a várt viselkedés, ha nem tranzakciós frissítések engedélyezettek a FileTables-on.

SQL Server Profiler és FileTables

Az SQL Server Profiler képes rögzíteni a Windows fájlmegnyitási és fájlbezárási műveleteit a FileTable-ban tárolt fájlok nyomkövetési kimenetében.

Ellenőrzés és fájltáblák

A FileTable ugyanúgy naplózható, mint bármely más tábla. A Win32 hozzáférési mintázatok azonban nem halmazon alapuló műveletek. A fájlrendszer egyetlen művelete több Transact-SQL DML-műveletre fordítható le. Ha például megnyit egy fájlt a Microsoft Wordben, az több megnyitási/bezárási/létrehozási/átnevezési/törlési műveletre és a megfelelő Transact-SQL DML-tevékenységekre fordítható. Ez részletes naplózási rekordokat eredményez, amelyekben nehéz korrelálni a rekordokat a fájlrendszerműveletek és a megfelelő Transact-SQL DML-naplórekordok között.

DBCC és FileTables

A DBCC CHECKCONSTRAINTS használatával érvényesítheti a fájlrendszer által definiált korlátozásokat is tartalmazó fájltáblákra vonatkozó korlátozásokat.

Lásd még:

FileTable kompatibilitása más SQL Server-funkciókkal
FileTable DDL, függvények, tárolt eljárások és nézetek