Kompatibilitas FileTable dengan fitur SQL Server lainnya

Berlaku untuk:SQL Server

Menjelaskan cara kerja FileTables dengan fitur SQL Server lainnya.

Grup ketersediaan AlwaysOn dan FileTables

Saat database yang berisi data FILESTREAM atau FileTable milik grup ketersediaan AlwaysOn:

  • Fungsionalitas FileTable didukung sebagian oleh grup ketersediaan AlwaysOn. Setelah failover, data FileTable dapat diakses pada replika utama, tetapi data FileTable tidak dapat diakses pada replika sekunder yang dapat dibaca.

    Catatan

    Setelah failover, semua fungsionalitas FILESTREAM didukung. Data FILESTREAM dapat diakses pada replika sekunder yang dapat dibaca dan pada primer baru.

  • Fungsi FILESTREAM dan FileTable menerima atau mengembalikan nama jaringan virtual (VPN) alih-alih nama komputer. Untuk informasi selengkapnya tentang fungsi-fungsi ini, lihat Fungsi FILESTREAM dan FileTable (Transact-SQL).

  • Semua akses ke data FILESTREAM atau FileTable melalui API sistem file harus menggunakan VPN alih-alih nama komputer. Untuk informasi selengkapnya, lihat Menggunakan FILESTREAM dan FileTable dengan grup ketersediaan AlwaysOn.

Partisi dan FileTables

Pemartisian tidak didukung pada FileTables. Dengan dukungan untuk beberapa grup file FILESTREAM, masalah peningkatan skala murni dapat ditangani tanpa harus menggunakan pemartisian dalam sebagian besar skenario (tidak seperti SQL 2008 FILESTREAMs).

Replikasi dan FileTables

Replikasi dan fitur terkait (termasuk replikasi transaksional, replikasi penggabungan, penangkapan data perubahan, dan pelacakan perubahan) tidak didukung dengan FileTables.

Semantik transaksi dan FileTables

Aplikasi Windows

Aplikasi Windows tidak memahami transaksi database, sehingga operasi penulisan Windows tidak menyediakan properti ACID dari transaksi database. Oleh karena itu pembatalan transaksional dan pemulihan tidak dimungkinkan dengan operasi pembaruan Windows.

Aplikasi Transact-SQL

Untuk aplikasi Transact-SQL yang bekerja pada kolom FILESTREAM (file_stream) dalam FileTable, semantik isolasi sama dengan jenis data FILESTREAM dalam tabel pengguna biasa.

Pemberitahuan kueri dan FileTables

Kueri tidak boleh berisi referensi ke kolom FILESTREAM di FileTable, dalam klausa WHERE atau bagian lain dari kueri.

SELECT INTO dan FileTables

Pernyataan SELECT INTO dari FileTable tidak menyebarkan semantik FileTable pada tabel tujuan yang dibuat (sama seperti kolom FILESTREAM dalam tabel biasa). Semua kolom tabel tujuan berulah seperti kolom normal. Mereka tidak memiliki semantik FileTable yang terkait dengannya.

Pemicu dan FileTables

Pemicu DDL (Bahasa Definisi Data)

Tidak ada pertimbangan khusus untuk pemicu DDL dengan FileTables. DDL normal memicu kebakaran untuk operasi Buat/Ubah database serta operasi CREATE/ALTER TABLE untuk FileTables. Pemicu dapat mengambil data peristiwa aktual yang menyertakan teks perintah DDL dan informasi lainnya dengan memanggil fungsi EVENTDATA(). Tidak ada peristiwa atau perubahan baru pada skema Eventdata yang ada.

Pemicu DML (Bahasa Manipulasi Data)

Pembatasan ini diberlakukan selama operasi DDL untuk membuat pemicu.

  • FileTables tidak mendukung ALIH-ALIH pemicu untuk operasi DML. Ini adalah batasan yang ada pada semua tabel yang berisi kolom FILESTREAM.

  • FileTables mendukung pemicu AFTER untuk operasi DML.

  • Pemicu yang ditentukan pada FileTable tidak dapat memperbarui FileTable apa pun (termasuk FileTable induk). Pembatasan ini ada terutama untuk mencegah pemicu masuk ke konflik penguncian dengan kunci yang dipegang oleh akses sistem file dalam transaksi yang sama.

Akses non-transaksional dan efeknya pada pemicu

  • Ketika akses pembaruan non-transaksional diizinkan dalam database, dimungkinkan untuk melakukan pembaruan di tempat data FILESTREAM dalam tabel apa pun, termasuk FileTable dalam database tersebut. Karena kemungkinan ini, gambar sebelum konten FILESTREAM mungkin tidak tersedia untuk digunakan oleh pemicu.

  • Untuk operasi pembaruan non-transaksi melalui sistem file, SQL Server membuat transaksi internal untuk menangkap operasi CloseHandle, dan pemicu DML yang ditentukan dapat diaktifkan sebagai bagian dari transaksi tersebut. Pembatalan transaksi seperti itu di dalam isi pemicu, meskipun tidak dicegah, tidak mengembalikan perubahan yang dilakukan pada FILESTREAM. Putar kembali seperti itu juga dapat mencegah pemicu Pembaruan diaktifkan, meskipun konten FILESTREAM mungkin telah diubah.

  • Selain dampak ini, pemicu pada FileTable perlu menangani beberapa perilaku tambahan

    • Dengan operasi pembaruan non-transaksional pada FileTable melalui sistem file, ada kemungkinan bahwa konten FILESTREAM dapat dikunci secara eksklusif oleh operasi Win32 lainnya dan mungkin tidak dapat diakses untuk baca/tulis melalui isi pemicu. Dalam kasus seperti itu, setiap upaya untuk mengakses konten FILESTREAM dalam isi pemicu dapat memberikan kesalahan "Pelanggaran Berbagi". Pemicu harus dirancang untuk menangani kesalahan tersebut dengan tepat.

    • SETELAH gambar FILESTREAM mungkin tidak stabil karena dalam beberapa kasus mungkin secara aktif ditulis oleh pembaruan non-transaksi pada saat yang sama (karena mode berbagi yang diizinkan dalam akses sistem file).

  • Penghentian abnormal handel Win32, seperti pembunuhan eksplisit handel Win32 oleh admin ATAU crash database, jangan jalankan pemicu pengguna selama operasi pemulihan, meskipun konten FILESTREAM mungkin telah diubah oleh aplikasi Win32 yang dihentikan secara abnormal.

Tampilan dan FileTables

Tampilan

Tampilan dapat dibuat pada FileTable seperti pada tabel lain. Namun pertimbangan berikut berlaku untuk tampilan yang dibuat pada FileTable:

  • Tampilan tidak dapat memiliki semantik FileTable apa pun. Artinya, kolom dalam tampilan (termasuk kolom atribut file) berulah sama seperti kolom tampilan normal tanpa semantik khusus dan sama berlaku untuk baris yang mewakili File/direktori.

  • Tampilan mungkin dapat diperbarui berdasarkan semantik "tampilan yang dapat diperbarui", tetapi batasan tabel yang mendasar dapat menolak pembaruan seperti dalam tabel.

  • Jalur file untuk file dapat divisualisasikan dalam tampilan dengan menambahkannya sebagai kolom eksplisit dalam tampilan. Contohnya:

    CREATE VIEW MP3FILES AS SELECT column1, column2, ..., GetFileNamespacePath() AS PATH, column3,... FROM Documents

Tampilan terindeks

Tampilan terindeks saat ini tidak dapat menyertakan kolom FILESTREAM atau kolom komputasi/komputasi yang dipertahankan yang bergantung pada kolom FILESTREAM. Perilaku ini tetap tidak berubah dengan tampilan yang ditentukan pada FileTable juga.

Isolasi rekam jepret dan FileTables

Baca Isolasi Rekam Jepret yang Diterapkan (RCSI) dan Isolasi Rekam Jepret (SI) mengandalkan kemampuan untuk memiliki rekam jepret data yang tersedia untuk pembaca, bahkan ketika operasi pembaruan terjadi pada data. Namun FileTable memungkinkan akses tulis non-transaksi ke data Filestream. Akibatnya, pembatasan berikut berlaku untuk fitur-fitur ini dalam database yang berisi FileTables:

  • Database yang berisi FileTable dapat diubah untuk mengaktifkan RCSI/SI.

  • Saat akses non_transactional diatur ke PENUH untuk database, maka transaksi yang berjalan di bawah RCSI atau SI memiliki perilaku berikut:

    • Setiap pembacaan Transact-SQL dari kolom file_stream FileTable gagal. INSERT dan UPDATE ke kolom masih berhasil, selama tidak dibaca dari kolom file_stream.

    • Jika pernyataan Transact-SQL menentukan petunjuk tabel READCOMMITTEDLOCK, bacaan berhasil, dan mengambil kunci pada baris, daripada menggunakan penerapan versi baris.

    • Permintaan terbuka Win32 FileStream yang ditransaksikan juga gagal.

    • Akses FileTable Win32 yang tidak ditransaksikan berhasil. Semua kueri internal yang dilakukan oleh FileTable tidak terpengaruh.

    • Pengindeksan teks penuh selalu berhasil, apa pun opsi database (READ_COMMITTED_SNAPSHOT atau ALLOW_SNAPSHOT_ISOLATION).

Database sekunder yang dapat dibaca

Pertimbangan yang sama berlaku untuk database sekunder yang dapat dibaca untuk rekam jepret, seperti yang dijelaskan di bagian sebelumnya, Isolasi Rekam Jepret dan FileTables.

Database yang terkandung dan FileTables

Fitur FILESTREAM tempat fitur FileTable bergantung memerlukan beberapa konfigurasi di luar database. Oleh karena itu database yang menggunakan FILESTREAM atau FileTable tidak sepenuhnya terkandung.

Anda bisa mengatur penahanan database ke PARSIAL jika Anda ingin menggunakan fitur tertentu dari database yang terkandung, seperti pengguna mandiri. Namun, dalam hal ini, beberapa pengaturan database tidak terkandung dalam database, dan tidak dipindahkan secara otomatis saat database bergerak.