Kelola FileTables

Berlaku untuk:SQL Server

Menjelaskan tugas administratif umum untuk mengelola FileTables.

Cara: Mendapatkan Daftar FileTables dan Objek Terkait

Untuk mendapatkan daftar FileTables, kueri salah satu tampilan katalog berikut:

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

Untuk mendapatkan daftar objek yang ditentukan sistem yang dibuat saat FileTable terkait dibuat, kueri tampilan katalog sys.filetable_system_defined_objects (Transact-SQL).

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

Menonaktifkan dan Mengaktifkan Kembali Akses Non-Transaksi di Tingkat Database

Untuk memperoleh akses eksklusif yang diperlukan untuk tugas administratif tertentu, Anda mungkin harus menonaktifkan akses non-transaksional untuk sementara waktu.

Perilaku pernyataan ALTER DATABASE saat mengubah tingkat akses non-transaksional

  • Saat Anda mengatur akses non-transaksional ke READ_ONLY atau NONAKTIF, perintah ALTER DATABASE tidak mengembalikan kontrol kepada pengguna selama ada handel file terbuka yang bertentangan dengan operasi yang diminta. File menangani yang bertentangan dengan operasi ini meliputi yang berikut ini:

    • Saat Anda mengatur akses ke NONE, semua handel file yang terbuka.

    • Saat Anda mengatur akses ke READ_ONLY, semua handel file dibuka untuk akses tulis.

    Untuk informasi tentang membunuh handel file terbuka, lihat Membunuh Handel File Terbuka yang Terkait dengan FileTable dalam topik ini.

    Jika perintah ALTER DATABASE dibatalkan atau berakhir dengan batas waktu, maka tingkat akses transaksional tidak diubah.

  • Jika Anda memanggil pernyataan ALTER DATABASE dengan klausa penghentian> WITH <(ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK SEGERA | NO_WAIT), maka semua handel file non-transaksi yang terbuka akan dimatikan.

Peringatan

Membunuh handel file terbuka dapat menyebabkan pengguna kehilangan data yang tidak disimpan. Perilaku ini konsisten dengan perilaku sistem file itu sendiri.

Efek menonaktifkan akses non-transaksi

Mengubah tingkat akses non-transaksional di tingkat database memiliki efek berikut pada direktori FileTable di bawah direktori tingkat database:

  • Saat Anda mengatur akses ke NONE, maka semua direktori FileTable dan kontennya tidak lagi dapat diakses atau terlihat.

  • Saat Anda mengatur akses ke READ_ONLY, maka semua direktori FileTable dan kontennya juga bersifat baca-saja.

Menonaktifkan FILESTREAM di tingkat instans memiliki efek berikut pada direktori tingkat database pada instans tersebut, dan direktori FileTable di bawahnya:

  • Tidak ada direktori tingkat database pada instans yang terlihat jika FILESTREAM dinonaktifkan di tingkat instans.

Cara: Menonaktifkan dan Mengaktifkan Kembali Akses Non-Transaksional di Tingkat Database

Untuk informasi selengkapnya, lihat MENGUBAH Opsi SET DATABASE (Transact-SQL).

Untuk menonaktifkan akses non-transaksional penuh
Panggil pernyataan ALTER DATABASE dan ATUR nilai NON_TRANSACTED_ACCESS ke READ_ONLY atau NONAKTIF.

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

Untuk mengaktifkan kembali akses non-transaksi penuh
Panggil pernyataan ALTER DATABASE dan ATUR nilai NON_TRANSACTED_ACCESS ke FULL.

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

Cara: Memastikan Visibilitas FileTables dalam Database

Direktori tingkat database dan direktori FileTable di bawahnya terlihat ketika semua kondisi ini benar:

  1. FILESTREAM diaktifkan pada tingkat instans.

  2. Akses non-transaksi diaktifkan di tingkat database.

  3. Direktori yang valid telah ditentukan di tingkat database.

Menonaktifkan dan Mengaktifkan Kembali Namespace FileTable di Tingkat Tabel

Menonaktifkan namespace FileTable menonaktifkan semua batasan dan pemicu yang ditentukan sistem yang dibuat dengan FileTable. Ini berguna dalam kasus di mana FileTable harus diatur ulang dalam skala besar dengan menggunakan operasi Transact-SQL tanpa menimbulkan biaya pemberlakuan semantik FileTable. Namun operasi ini dapat meninggalkan FileTable dalam status tidak konsisten, dan dapat mencegah pengaktifan kembali namespace FileTable.

Menonaktifkan namespace FileTable memiliki hasil berikut:

  • Kolom dan data FileTable tidak dihilangkan secara fisik dari tabel.

  • Direktori FileTable dan file dan direktori yang dikandungnya menghilang dari sistem file dan tidak tersedia untuk akses i/o file.

  • Kolom FileTable yang ditentukan sistem tidak dapat dihilangkan dan dibuat ulang; namun, jika tidak, mereka berperilaku seperti kolom biasa untuk operasi DML.

  • Handel file terbuka mencegah batasan FileTable dinonaktifkan, karena operasi ini memerlukan kunci skema pada tabel.

  • Penerapan semua semantik FileTable, termasuk batasan dan pemicu yang ditentukan sistem, berhenti setelah namespace FileTable dinonaktifkan.

Mengaktifkan kembali namespace FileTable memiliki hasil berikut:

  • FileTable diperiksa konsistensinya. Jika inkonsistensi ditemukan, maka kesalahan dimunculkan dan FileTable tetap dinonaktifkan; jika tidak, FileTable diaktifkan kembali.

  • Penerapan semantik FileTable, termasuk batasan dan pemicu yang ditentukan sistem, dipulihkan.

  • Direktori FileTable serta file dan direktori yang dikandungnya menjadi terlihat dalam sistem file dan menjadi tersedia untuk akses i/o file.

Cara: Menonaktifkan dan Mengaktifkan Kembali Namespace FileTable di Tingkat Tabel

Panggil pernyataan ALTER TABLE dengan { ENABLE | OPSI DISABLE } FILETABLE_NAMESPACE .

Untuk menonaktifkan namespace FileTable

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

Untuk mengaktifkan kembali namespace FileTable

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

Membunuh Handel File Terbuka yang Terkait dengan FileTable

Buka handel ke file yang disimpan dalam FileTable dapat mencegah akses eksklusif yang diperlukan untuk tugas administratif tertentu. Untuk mengaktifkan tugas mendesak, Anda mungkin harus mematikan handel file terbuka yang terkait dengan satu atau beberapa FileTable.

Peringatan

Membunuh handel file terbuka dapat menyebabkan pengguna kehilangan data yang tidak disimpan. Perilaku ini konsisten dengan perilaku sistem file itu sendiri.

Cara: Mendapatkan Daftar Handel File Terbuka yang Terkait dengan FileTable

Mengkueri sys.dm_filestream_non_transacted_handles tampilan katalog (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Cara: Mematikan Handel File Terbuka yang Terkait dengan FileTable

Panggil prosedur tersimpan sp_kill_filestream_non_transacted_handles (Transact-SQL) dengan argumen yang sesuai untuk mematikan semua handel file yang terbuka dalam database atau di FileTable, atau untuk mematikan handel tertentu.

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  

Cara: Mengidentifikasi Kunci yang Disimpan oleh FileTables

Sebagian besar kunci yang diambil oleh FileTables sesuai dengan file yang dibuka oleh aplikasi.

Untuk mengidentifikasi file terbuka dan kunci terkait
Gabungkan bidang request_owner_id dalam tampilan manajemen dinamis sys.dm_tran_locks (Transact-SQL) dengan bidang fcb_id di sys.dm_filestream_non_transacted_handles (Transact-SQL). Dalam beberapa kasus, kunci tidak sesuai dengan satu handel file yang terbuka.

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  

Keamanan FileTable

File dan direktori yang disimpan dalam FileTables diamankan oleh keamanan SQL Server saja. Keamanan berbasis tabel dan kolom diberlakukan untuk akses sistem file serta akses Transact-SQL. API keamanan sistem file Windows dan pengaturan ACL tidak didukung.

Izin keamanan dan akses yang berlaku untuk grup file dan kontainer FILESTREAM juga berlaku untuk FileTables, karena data file disimpan sebagai kolom FILESTREAM di FileTable.

Keamanan FileTable dan Akses Transact-SQL
Akses T-SQL ke data di FileTables diamankan dengan cara yang sama seperti tabel lainnya. Pemeriksaan keamanan tingkat tabel dan kolom yang sesuai dilakukan untuk setiap operasi yang mengakses atau mengubah data.

Keamanan FileTable dan Akses Sistem File
API sistem file memerlukan izin SQL Server yang sesuai pada seluruh baris di FileTable (yaitu, izin tingkat tabel) untuk membuka handel ke file atau direktori yang disimpan di FileTable. Jika pengguna tidak memiliki izin SQL Server yang sesuai pada kolom apa pun di FileTable, maka akses sistem file ditolak.

Backup dan FileTables

Saat Anda menggunakan SQL Server untuk mencadangkan FileTable, data FILESTREAM dicadangkan dengan data terstruktur dalam database. Jika Anda tidak ingin mencadangkan data FILESTREAM dengan data relasional, Anda dapat menggunakan cadangan parsial untuk mengecualikan grup file FILESTREAM.

Konsistensi Transaksi pencadangan FileTable

Banyak alat dan operasi administratif, (termasuk pencadangan, pencadangan log, dan replikasi transaksional) membaca data yang konsisten secara transaksional dengan membaca log transaksi. Saat ini, mereka membaca data FILESTREAM apa pun yang diperbarui sebagai bagian dari transaksi. Ketika akses non-transaksi tidak diaktifkan di tingkat database, alat dan operasi ini bekerja dengan konsistensi transaksi penuh.

Namun, ketika akses non-transaksi yang penuh diaktifkan, maka FileTable dapat berisi data yang diperbarui lebih baru-baru ini (melalui pembaruan non-transaksi) daripada transaksi yang dibaca alat atau proses dari log transaksi. Ini berarti bahwa operasi pemulihan "titik waktu" ke transaksi tertentu mungkin berisi data FILESTREAM yang lebih baru daripada transaksi tersebut. Ini adalah perilaku yang diharapkan ketika pembaruan non-transaksional diizinkan pada FileTables.

Profiler SQL Server dan FileTables

SQL Server Profiler dapat mengambil operasi Buka File Windows dan Tutup File dalam output pelacakan untuk file yang disimpan dalam FileTable.

Audit dan FileTables

FileTable dapat diaudit sama seperti tabel lainnya. Namun, pola akses Win32 tidak diatur operasi berbasis. Satu tindakan dalam sistem file diterjemahkan ke dalam beberapa operasi DML Transact-SQL. Misalnya, membuka file di Microsoft Word diterjemahkan ke dalam beberapa operasi buka/tutup/buat/ganti nama/hapus dan aktivitas DML Transact-SQL yang sesuai. Ini menghasilkan catatan audit verbose di mana sulit untuk menghubungkan rekaman antara tindakan sistem file dan catatan audit DML Transact-SQL yang sesuai.

DBCC dan FileTables

Anda dapat menggunakan DBCC CHECKCONSTRAINTS untuk memvalidasi batasan pada FileTable termasuk batasan yang ditentukan sistem.

Lihat Juga

Kompatibilitas FileTable dengan Fitur SQL Server Lainnya
FileTable DDL, Fungsi, Prosedur Tersimpan, dan Tampilan