Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
FILESTREAM memungkinkan aplikasi berbasis SQL Server untuk menyimpan data yang tidak terstruktur, seperti dokumen dan gambar, pada sistem file. Aplikasi dapat memanfaatkan API streaming yang kaya dan performa sistem file dan pada saat yang sama mempertahankan konsistensi transaksional antara data yang tidak terstruktur dan data terstruktur yang sesuai.
FILESTREAM mengintegrasikan Mesin Database SQL Server dengan sistem file NTFS dengan menyimpan varbinary(max) data objek besar biner (BLOB) sebagai file pada sistem file. Transact-SQL pernyataan dapat menyisipkan, memperbarui, melakukan query, mencari, dan mencadangkan data FILESTREAM. Antarmuka sistem file Win32 menyediakan akses streaming ke data.
FILESTREAM menggunakan cache sistem NT untuk penyimpanan sementara data file. Ini membantu mengurangi efek apa pun yang mungkin dimiliki data FILESTREAM pada performa Mesin Database. Kumpulan buffer SQL Server tidak digunakan; oleh karena itu, memori ini tersedia untuk pemrosesan kueri.
FILESTREAM tidak diaktifkan secara otomatis saat Anda menginstal atau meningkatkan SQL Server. Anda harus mengaktifkan FILESTREAM dengan menggunakan SQL Server Configuration Manager dan SQL Server Management Studio. Untuk menggunakan FILESTREAM, Anda harus membuat atau mengubah database agar berisi tipe grup file khusus. Kemudian, buat atau ubah tabel sehingga berisi varbinary(max) kolom dengan atribut FILESTREAM. Setelah menyelesaikan tugas-tugas ini, Anda dapat menggunakan Transact-SQL dan Win32 untuk mengelola data FILESTREAM.
Untuk informasi selengkapnya tentang menginstal dan menggunakan FILESTREAM, lihat daftar Tugas Terkait.
Kapan Menggunakan FILESTREAM
Di SQL Server, BLOB dapat menjadi data standar varbinary(max) yang menyimpan data dalam tabel, atau objek FILESTREAM varbinary(max) yang menyimpan data dalam sistem file. Ukuran dan penggunaan data menentukan apakah Anda harus menggunakan penyimpanan database atau penyimpanan sistem file. Jika kondisi berikut ini benar, Anda harus mempertimbangkan untuk menggunakan FILESTREAM:
Objek yang disimpan rata-rata lebih besar dari 1 MB.
Akses baca cepat penting.
Anda mengembangkan aplikasi yang menggunakan tingkat menengah untuk logika aplikasi.
Untuk objek yang lebih kecil, menyimpan varbinary(max) BLOB dalam database sering memberikan performa streaming yang lebih baik.
Penyimpanan FILESTREAM
Penyimpanan FILESTREAM diimplementasikan sebagai varbinary(max) kolom tempat data disimpan sebagai BLOB dalam sistem file. Ukuran BLOB hanya dibatasi oleh ukuran volume sistem file. Batasan standar varbinary(max) ukuran file 2 GB tidak berlaku untuk BLOB yang disimpan dalam sistem file.
Untuk menentukan bahwa kolom harus menyimpan data pada sistem file, tentukan atribut FILESTREAM pada varbinary(max) kolom. Ini menyebabkan Mesin Database menyimpan semua data untuk kolom tersebut pada sistem file, tetapi tidak dalam file database.
Data FILESTREAM harus disimpan dalam grup file FILESTREAM. Grup file FILESTREAM adalah grup file khusus yang berisi direktori sistem file alih-alih file itu sendiri. Direktori sistem file ini disebut kontainer data. Kontainer data adalah antarmuka antara penyimpanan Mesin Database dan penyimpanan sistem file.
Saat Anda menggunakan penyimpanan FILESTREAM, pertimbangkan hal berikut:
Saat tabel berisi kolom FILESTREAM, setiap baris harus memiliki ID baris unik nonnull.
Beberapa kontainer data dapat ditambahkan ke grup file FILESTREAM.
Kontainer data FILESTREAM tidak dapat ditumpuk.
Saat Anda menggunakan pengklusteran failover, grup file FILESTREAM harus berada di sumber daya disk bersama.
Grup file FILESTREAM dapat berada pada volume terkompresi.
Manajemen Terintegrasi
Karena FILESTREAM diimplementasikan sebagai varbinary(max) kolom dan diintegrasikan langsung ke dalam Mesin Database, sebagian besar alat dan fungsi manajemen SQL Server berfungsi tanpa modifikasi untuk data FILESTREAM. Misalnya, Anda dapat menggunakan semua model pencadangan dan pemulihan dengan data FILESTREAM, dan data FILESTREAM dicadangkan bersama data terstruktur di dalam database. Jika Anda tidak ingin mencadangkan data FILESTREAM dengan data relasional, Anda dapat menggunakan cadangan parsial untuk mengecualikan grup file FILESTREAM.
Keamanan Terintegrasi
Di SQL Server, data FILESTREAM diamankan sama seperti data lain yang diamankan: dengan memberikan izin di tingkat tabel atau kolom. Jika pengguna memiliki izin ke kolom FILESTREAM dalam tabel, pengguna dapat membuka file terkait.
Nota
Enkripsi tidak didukung pada data FILESTREAM.
Hanya akun tempat akun layanan SQL Server berjalan diberikan izin NTFS ke kontainer FILESTREAM. Kami menyarankan agar tidak ada akun lain yang diberikan izin pada kontainer data.
Nota
Login SQL tidak akan berfungsi dengan kontainer FILESTREAM. Hanya autentikasi NTFS yang akan berfungsi dengan kontainer FILESTREAM.
Mengakses Data BLOB dengan Transact-SQL dan Akses Streaming Sistem Berkas
Setelah menyimpan data di kolom FILESTREAM, Anda dapat mengakses file dengan menggunakan transaksi Transact-SQL atau dengan menggunakan API Win32.
Akses Transact-SQL
Dengan menggunakan Transact-SQL, Anda dapat menyisipkan, memperbarui, dan menghapus data FILESTREAM:
Anda dapat menggunakan operasi sisipkan untuk mengisi bidang FILESTREAM dengan nilai null, nilai kosong, atau data sebaris yang relatif pendek. Namun, sejumlah besar data lebih efisien dialirkan ke dalam file yang menggunakan antarmuka Win32.
Saat memperbarui bidang FILESTREAM, Anda memodifikasi data BLOB yang mendasar dalam sistem file. Ketika bidang FILESTREAM diatur ke NULL, data BLOB yang terkait dengan bidang dihapus. Anda tidak dapat menggunakan Transact-SQL pembaruan berbasis chunk, yang diimplementasikan sebagai UPDATE**.**Write(), untuk melakukan pembaruan sebagian pada data.
Saat Anda menghapus baris atau menghapus atau memotong tabel yang berisi data FILESTREAM, Anda menghapus data BLOB yang mendasar dalam sistem file.
Akses Streaming Sistem File
Dukungan streaming Win32 berfungsi dalam konteks transaksi SQL Server. Dalam transaksi, Anda dapat menggunakan fungsi FILESTREAM untuk mendapatkan jalur sistem file UNC logis dari file. Anda kemudian menggunakan OpenSqlFilestream API untuk mendapatkan handle file. Handel ini kemudian dapat digunakan oleh antarmuka streaming file Win32, seperti ReadFile() dan WriteFile(), untuk mengakses dan memperbarui file melalui sistem file.
Karena operasi file bersifat transaksi, Anda tidak dapat menghapus atau mengganti nama file FILESTREAM melalui sistem file.
Model Pernyataan
Sistem file FILESTREAM mengakses model pernyataan Transact-SQL dengan menggunakan file terbuka dan ditutup. Pernyataan dimulai ketika handel file dibuka dan berakhir saat handel ditutup. Misalnya, ketika handel tulis ditutup, setiap kemungkinan pemicu AFTER yang terdaftar pada tabel diaktifkan seolah-olah pernyataan UPDATE selesai.
Namespace Penyimpanan
Di FILESTREAM, Mesin Database mengontrol namespace sistem file fisik BLOB. Fungsi intrinsik baru, PathName, menyediakan jalur UNC logis blob yang sesuai dengan setiap sel FILESTREAM dalam tabel. Aplikasi ini menggunakan jalur logis ini untuk mendapatkan handel Win32 dan beroperasi pada data BLOB dengan menggunakan antarmuka sistem file Win32 reguler. Fungsi mengembalikan NULL jika nilai kolom FILESTREAM adalah NULL.
Akses Sistem File yang Ditransaksikan
Fungsi intrinsik baru, GET_FILESTREAM_TRANSACTION_CONTEXT(), menyediakan token yang mewakili transaksi saat ini yang terkait dengan sesi. Transaksi harus dimulai dan belum dibatalkan atau dilakukan. Dengan mendapatkan token, aplikasi mengikat operasi streaming sistem file FILESTREAM dengan transaksi yang telah dimulai. Fungsi mengembalikan NULL jika tidak ada transaksi yang dimulai secara eksplisit.
Semua handel file harus ditutup sebelum transaksi dilakukan atau dibatalkan. Jika handle dibiarkan terbuka di luar cakupan transaksi, pembacaan tambahan di handle akan menyebabkan kegagalan; penulisan tambahan di handle akan berhasil, meskipun data aktual tidak akan disimpan ke dalam disk. Demikian pula, jika database atau instans dari Mesin Database dimatikan, semua handle yang terbuka menjadi tidak valid.
Durabilitas Transaksi
Dengan FILESTREAM, setelah penyelesaian transaksi, Mesin Database memastikan keawetan transaksi untuk data BLOB FILESTREAM yang dimodifikasi dari akses streaming sistem file.
Semantik Isolasi
Semantik isolasi diatur oleh tingkat isolasi transaksi Mesin Database. Tingkat isolasi berkomitmen baca didukung untuk Transact-SQL dan akses sistem file. Operasi baca yang dapat diulang, dan juga isolasi yang dapat diserialisasikan dan rekam jepret, didukung. Bacaan kotor tidak didukung.
Operasi buka akses sistem file tidak menunggu kunci apa pun. Sebaliknya, operasi terbuka segera gagal jika mereka tidak dapat mengakses data karena isolasi transaksi. Panggilan API streaming gagal dengan ERROR_SHARING_VIOLATION jika operasi terbuka tidak dapat dilanjutkan karena pelanggaran isolasi.
Untuk memungkinkan pembaruan parsial dibuat, aplikasi dapat mengeluarkan kontrol FS perangkat (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) untuk mengambil konten lama ke dalam file yang dibuka menangani referensi. Ini akan memicu penyalinan konten lama di sisi server. Untuk performa aplikasi yang lebih baik dan untuk menghindari potensi waktu habis ketika Anda bekerja dengan file yang sangat besar, kami sarankan Anda menggunakan I/O asinkron.
Jika FSCTL dikeluarkan setelah handel ditulis, operasi tulis terakhir akan tetap ada, dan penulisan sebelumnya yang dibuat ke handel akan hilang.
API Sistem File dan Tingkat Isolasi yang Didukung
Ketika API sistem file tidak dapat membuka file karena pelanggaran isolasi, pengecualian ERROR_SHARING_VIOLATION dikembalikan. Pelanggaran isolasi ini terjadi ketika dua transaksi mencoba mengakses file yang sama. Hasil operasi akses tergantung pada mode file dibuka dan versi SQL Server tempat transaksi berjalan. Tabel berikut menguraikan kemungkinan hasil untuk dua transaksi yang mengakses file yang sama.
| Transaksi 1 | Transaksi 2 | Hasil pada SQL Server 2008 | Hasil pada SQL Server 2008 R2 dan versi yang lebih baru |
|---|---|---|---|
| Buka untuk dibaca. | Buka untuk dibaca. | Keduanya berhasil. | Keduanya berhasil. |
| Buka untuk dibaca. | Buka untuk mengedit. | Keduanya berhasil. Operasi tulis di bawah transaksi 2 tidak memengaruhi operasi baca yang dilakukan dalam transaksi 1. | Keduanya berhasil. Operasi tulis di bawah transaksi 2 tidak memengaruhi operasi baca yang dilakukan dalam transaksi 1. |
| Buka dalam mode tulis. | Buka untuk dibaca. | Buka untuk transaksi 2 gagal dengan pengecualian ERROR_SHARING_VIOLATION. | Keduanya berhasil. |
| Buka untuk menulis. | Buka untuk menulis. | Pembukaan transaksi 2 mengalami pengecualian ERROR_SHARING_VIOLATION. | Buka transaksi kedua gagal dengan pengecualian ERROR_SHARING_VIOLATION. |
| Buka untuk dibaca. | Buka untuk MEMILIH. | Keduanya berhasil. | Keduanya berhasil. |
| Buka untuk dibaca. | Buka untuk UPDATE atau DELETE. | Keduanya berhasil. Operasi tulis di bawah transaksi 2 tidak memengaruhi operasi baca yang dilakukan dalam transaksi 1. | Keduanya berhasil. Operasi tulis di bawah transaksi 2 tidak memengaruhi operasi baca yang dilakukan dalam transaksi 1. |
| Buka untuk menulis. | buka untuk PILIH. | Transaksi 2 akan tertahan hingga transaksi 1 menyelesaikan atau mengakhiri transaksi, atau waktu penguncian transaksi habis. | Keduanya berhasil. |
| Buka untuk menulis. | Buka untuk UPDATE atau DELETE. | Transaksi 2 memblokir hingga transaksi 1 melakukan atau mengakhiri transaksi, atau waktu penguncian transaksi habis. | Transaksi 2 memblokir hingga transaksi 1 melakukan atau mengakhiri transaksi, atau waktu penguncian transaksi habis. |
| Buka untuk SELECT. | Buka untuk dibaca. | Keduanya berhasil. | Keduanya berhasil. |
| Buka untuk SELECT. | Buka untuk menulis. | Keduanya berhasil. Operasi tulis di bawah transaksi 2 tidak memengaruhi transaksi 1. | Keduanya berhasil. Operasi tulis di bawah transaksi 2 tidak memengaruhi transaksi 1. |
| Buka untuk UPDATE atau DELETE. | Buka untuk dibaca. | Upaya pembukaan pada transaksi 2 gagal dengan pengecualian ERROR_SHARING_VIOLATION. | Keduanya berhasil. |
| Buka untuk UPDATE atau DELETE. | Buka untuk menulis. | Operasi pembukaan pada transaksi 2 gagal dan memunculkan pengecualian ERROR_SHARING_VIOLATION. | Operasi pembukaan pada transaksi 2 gagal akibat pengecualian ERROR_SHARING_VIOLATION. |
| Buka untuk SELECT dengan bacaan berulang. | Buka untuk dibaca. | Keduanya berhasil. | Keduanya berhasil. |
| Terbuka untuk SELECT dengan pembacaan yang dapat diulang. | Buka untuk menulis. | Operasi pembukaan pada transaksi 2 gagal dengan kesalahan pengecualian ERROR_SHARING_VIOLATION. | Operasi pembukaan pada transaksi 2 gagal dengan pengecualian ERROR_SHARING_VIOLATION. |
Write-Through dari Klien Jarak Jauh
Akses sistem file jarak jauh ke data FILESTREAM diaktifkan melalui protokol Blok Pesan Server (SMB). Jika klien jarak jauh, tidak ada operasi tulis yang di-cache oleh sisi klien. Proses penulisan akan selalu dikirim ke server. Data dapat di-cache di sisi server. Sebaiknya aplikasi yang berjalan pada klien jarak jauh mengonsolidasikan operasi tulis kecil untuk membuat lebih sedikit operasi tulis menggunakan ukuran data yang lebih besar.
Membuat tampilan yang dipetakan memori (memori yang dipetakan I/O) dengan menggunakan handel FILESTREAM tidak didukung. Jika pemetaan memori digunakan untuk data FILESTREAM, Mesin Database tidak dapat menjamin konsistensi dan durabilitas data atau integritas database.
Tugas Terkait
Mengaktifkan dan Mengonfigurasi FILESTREAM
Membuat Database FILESTREAM-Enabled
Membuat Tabel untuk Menyimpan Data FILESTREAM
Mengakses Data FILESTREAM dengan Transact-SQL
Membuat Aplikasi Klien untuk Data FILESTREAM
Mengakses Data FILESTREAM dengan OpenSqlFilestream
Membuat Pembaruan Parsial untuk Data FILESTREAM
Hindari Konflik dengan Operasi Database di Aplikasi FILESTREAM
Memindahkan Database FILESTREAM-Enabled
Menyiapkan FILESTREAM pada Kluster Failover
Mengonfigurasi Firewall untuk Akses FILESTREAM