FileTable'ları Yönetme

Şunlar için geçerlidir: SQL Server

FileTable'ları yönetmek için yaygın yönetim görevlerini açıklar.

Nasıl Yapılır: FileTable'ların ve İlgili Nesnelerin Listesini Alma

FileTable'ların listesini almak için aşağıdaki katalog görünümlerinden birini sorgula:

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

İlişkili FileTable'lar oluşturulduğunda oluşturulan sistem tanımlı nesnelerin listesini almak için katalog görünümünü sys.filetable_system_defined_objects (Transact-SQL) sorgula.

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

Veritabanı Düzeyinde İşlem Dışı Erişimi Devre Dışı Bırakma ve Yeniden Etkinleştirme

Belirli yönetim görevleri için gerekli olan özel erişimi almak için işlem dışı erişimi geçici olarak devre dışı bırakmanız gerekebilir.

İşlemsel olmayan erişim düzeyi değiştirilirken ALTER DATABASE ifadesinin davranışı

  • İşlem dışı erişimi READ_ONLY veya KAPALI olarak ayarladığınızda ALTER DATABASE , istenen işlemle çakışan açık dosya tanıtıcıları olduğu sürece komut kullanıcıya denetim döndürmez. Bu işlemle çakışan dosya tanıtıcıları aşağıdakileri içerir:

    • Erişimi NONE olarak ayarladığınızda, bu tüm açık dosya tanıtıcıları için geçerlidir.

    • READ_ONLY erişimini ayarlarken, tüm dosya tanıtıcıları yazma erişimiyle açılır.

    Açık dosya tanıtıcılarını öldürme hakkında bilgi için bu konudaki FileTable ile İlişkili Açık Dosya Tanıtıcılarını Öldürme konusuna bakın.

    ALTER DATABASE Komut iptal edilirse veya zaman aşımıyla biterse işlem erişim düzeyi değiştirilmez.

  • ALTER DATABASE ifadesini bir WITH <sonlandırma> yan tümcesiyle çağırırsanız (ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK IMMEDIATE | NO_WAIT), o zaman tüm açık işlemsel olmayan dosya tanıtıcıları sonlandırılır.

Warning

Açık dosya tanıtıcılarını öldürmek kullanıcıların kaydedilmemiş verileri kaybetmesine neden olabilir. Bu davranış, dosya sisteminin davranışıyla tutarlıdır.

İşlem dışı erişimi devre dışı bırakmanın etkileri

Veritabanı düzeyinde işlem dışı erişim düzeyinin değiştirilmesi, veritabanı düzeyi dizininin altındaki FileTable dizinlerinde aşağıdaki etkilere sahiptir:

  • YOK'a erişimi ayarladığınızda, tüm FileTable dizinleri ve bunların içeriği artık erişilebilir veya görünür olmaz.

  • READ_ONLY erişimi ayarladığınızda, tüm FileTable dizinleri ve bunların içeriği de salt okunur olur.

ÖRNEK düzeyinde FILESTREAM'in devre dışı bırakılması, bu örnekteki veritabanı düzeyindeki dizinler ve bunların altındaki FileTable dizinleri üzerinde aşağıdaki etkilere sahiptir:

  • FILESTREAM örnek düzeyinde devre dışı bırakılırsa örnekteki veritabanı düzeyindeki dizinlerin hiçbiri görünmez.

Nasıl yapılır: Veritabanı Düzeyinde İşlem Dışı Erişimi Devre Dışı Bırakma ve Yeniden Etkinleştirme

Daha fazla bilgi için bkz ALTER DATABASE SET . Seçenekler (Transact-SQL).

tam işlem dışı erişimi devre dışı bırakmak için
ALTER DATABASE deyimini çağırın ve SETNON_TRANSACTED_ACCESS değerini READ_ONLY veya OFF olarak ayarlayın.

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

tam işlem dışı erişimi yeniden etkinleştirmek için
ALTER DATABASE deyimini çağırın ve SETNON_TRANSACTED_ACCESS değerini FULL olarak ayarlayın.

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

Nasıl yapılır: VeritabanındaKi FileTable'ların Görünürlüğünü Sağlama

Veritabanı düzeyinde bir dizin ve altındaki FileTable dizinleri, bu koşulların tümü doğru olduğunda görünür:

  1. FILESTREAM örnek düzeyinde etkinleştirilir.

  2. İşlem dışı erişim veritabanı düzeyinde etkinleştirilir.

  3. Veritabanı düzeyinde geçerli bir dizin belirtildi.

FileTable Ad Alanını Tablo Düzeyinde Devre Dışı Bırakma ve Yeniden Etkinleştirme

FileTable ad alanının devre dışı bırakılması, FileTable ile oluşturulan tüm sistem tanımlı kısıtlamaları ve tetikleyicileri devre dışı bırakır. Bu, FileTable semantiğini zorlama masrafına neden olmadan Transact-SQL işlemleri kullanılarak büyük ölçekte yeniden düzenlenmesi gereken durumlarda yararlıdır. Ancak bu işlemler FileTable'ı tutarsız bir durumda bırakabilir ve FileTable ad alanının yeniden etkinleştirilmesini engelleyebilir.

FileTable ad alanının devre dışı bırakılması aşağıdaki sonuçlara neden olur:

  • FileTable sütunları ve verileri tablodan fiziksel olarak bırakılmaz.

  • FileTable dizini ve içerdiği dosya ve dizinler dosya sisteminden kaybolur ve dosya g/ç erişimi için kullanılamaz.

  • Sistem tanımlı FileTable sütunları bırakılamaz ve yeniden oluşturulamaz; ancak DML işlemleri için normal sütunlar gibi davranırlar.

  • Açık dosya tanıtıcıları FileTable kısıtlamalarının devre dışı bırakılmasını engeller, çünkü bu işlem tabloda bir şema kilidi gerektirir.

  • Sistem tanımlı kısıtlamalar ve tetikleyiciler de dahil olmak üzere tüm FileTable semantiğinin uygulanması, FileTable ad alanı devre dışı bırakıldıktan sonra durur.

FileTable ad alanının yeniden etkinleştirilmesi aşağıdaki sonuçlara sahiptir:

  • FileTable tutarlılık açısından denetlendi. Tutarsızlıklar bulunursa bir hata oluşur ve FileTable devre dışı kalır; aksi takdirde, FileTable yeniden etkinleştirilir.

  • Sistem tanımlı kısıtlamalar ve tetikleyiciler de dahil olmak üzere FileTable semantiğinin uygulanması geri yüklenir.

  • FileTable dizini ve içerdiği dosya ve dizinler dosya sisteminde görünür hale gelir ve dosya g/ç erişimi için kullanılabilir hale gelir.

Nasıl yapılır: FileTable Ad Alanını Tablo Düzeyinde Devre Dışı Bırakma ve Yeniden Etkinleştirme

ALTER TABLEdeyimini { ENABLE | DISABLE } FILETABLE_NAMESPACE seçeneğiyle çağırın.

FileTable ad alanını devre dışı bırakmak için

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

FileTable ad alanını yeniden etkinleştirmek için

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

FileTable ile İlişkili Açık Dosya Tanıtıcılarını Sonlandırma

FileTable'da depolanan dosyaların açık tanıtıcıları, belirli yönetim görevleri için gerekli olan özel erişime engel olabilir. Acil görevleri etkinleştirmek için bir veya daha fazla FileTable ile ilişkili açık dosya tanıtıcılarını sonlandırmanız gerekebilir.

Warning

Açık dosya tanıtıcılarını öldürmek kullanıcıların kaydedilmemiş verileri kaybetmesine neden olabilir. Bu davranış, dosya sisteminin davranışıyla tutarlıdır.

Nasıl yapılır: Bir FileTable ile ilişkili açık dosya tanıtıcılarının listesini almak

sys.dm_filestream_non_transacted_handles (Transact-SQL) katalog görünümünü sorgulayın.

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

Nasıl Yapılır: Bir FileTable ile İlişkili Açık Dosya Tanıtıcılarını Sonlandırma

Veritabanındaki veya FileTable'daki tüm açık dosya tanıtıcılarını sonlandırmak ya da belirli bir tanıtıcıyı sonlandırmak için, saklı yordam sp_kill_filestream_non_transacted_handles (Transact-SQL)'ü uygun argümanlarla çağırın.

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  

Nasıl yapılır: FileTable'lar Tarafından Tutulan Kilitleri Belirleme

FileTable'lar tarafından alınan çoğu kilit, uygulamalar tarafından açılan dosyalara karşılık gelir.

Açık dosyaları ve ilişkili kilitleri tanımlamak için
Dinamik yönetim görünümünde request_owner_id alanını sys.dm_tran_locks (Transact-SQL), sys.dm_filestream_non_transacted_handles (Transact-SQL) içindeki fcb_id alanıyla birleştirin. Bazı durumlarda kilit, tek bir açık dosya işleyicisine karşılık gelmez.

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 Güvenliği

FileTable'larda depolanan dosya ve dizinlerin güvenliği yalnızca SQL Server güvenlikle sağlanır. Dosya sistemi erişimi ve Transact-SQL erişimi için tablo ve sütun tabanlı güvenlik zorunlu kılınır. Windows dosya sistemi güvenlik API'leri ve ACL ayarları desteklenmez.

Dosya verileri FileTable'da FILESTREAM sütunu olarak depolandığından, FILESTREAM dosya grupları ve kapsayıcıları için geçerli olan güvenlik ve erişim izinleri FileTable'lar için de geçerlidir.

FileTable Güvenliği ve Transact-SQL Erişimi
FileTable'lardaki verilere Transact-SQL erişimi diğer tablolarla aynı şekilde güvenli hale getirilir. Verilere erişen veya verileri değiştiren her işlem için uygun tablo ve sütun düzeyinde güvenlik denetimleri yapılır.

FileTable Güvenliği ve Dosya Sistemi Erişimi
Dosya sistemi API'leri, FileTable'da depolanan bir dosyaya veya dizine tanıtıcı açmak için FileTable'daki satırın tamamında uygun SQL Server izinleri (tablo düzeyinde izin) gerektirir. Kullanıcının FileTable'daki herhangi bir sütunda uygun SQL Server izni yoksa, dosya sistemi erişimi reddedilir.

Backup ve FileTables

Bir FileTable'ı yedeklemek için SQL Server kullandığınızda, FILESTREAM verileri veritabanındaki yapılandırılmış verilerle yedeklenmiş olur. FILESTREAM verilerini ilişkisel verilerle yedeklemek istemiyorsanız, FILESTREAM dosya gruplarını dışlamak için kısmi bir yedekleme kullanabilirsiniz.

FileTable Yedeklemelerinin İşlem Tutarlılığı

Birçok yönetim aracı ve işlemi (yedekleme, günlük yedekleme ve işlemsel çoğaltma dahil), işlem günlüklerini okuyarak işlemsel olarak tutarlı verileri okur. Şu anda, bir işlemin parçası olarak güncelleştirilen FILESTREAM verilerini okurlar. veritabanı düzeyinde işlem dışı erişim etkinleştirilmediğinde, bu araçlar ve işlemler tam işlem tutarlılığıyla çalışır.

Ancak, tam işlem dışı erişim etkinleştirildiğinde, bir FileTable aracın veya işlemin işlem günlüğünden okuduğu işlemden daha yakın zamanda güncelleştirilmiş (işlem dışı bir güncelleştirme aracılığıyla) veriler içerebilir. Bu, belirli bir işleme "belirli bir noktaya" geri yükleme işleminin bu işlemden daha yeni olan FILESTREAM verileri içerebileceği anlamına gelir. FileTable'larda işlem dışı güncelleştirmelere izin verildiğinde beklenen davranış budur.

SQL Server Profiler ve FileTables

SQL Server Profiler, bir FileTable'da depolanan dosyalar için izleme çıkışında Windows Dosya Açma ve Dosya Kapatma işlemlerini yakalayabilir.

Denetim ve FileTable'lar

FileTable, diğer tüm tablolarda olduğu gibi denetlenebilir. Ancak, Win32 erişim kalıpları küme tabanlı işlemler değildir. Dosya sistemindeki tek bir eylem birden çok Transact-SQL DML işlemine dönüşür. Örneğin, bir dosyayı Microsoft Word'de açmak birden çok açma/kapatma/oluşturma/yeniden adlandırma/silme işlemine ve karşılık gelen Transact-SQL DML etkinliklerine dönüşür. Bu, dosya sistemi eylemleri ile bunlara karşılık gelen Transact-SQL DML denetim kayıtlarını ilişkilendirmenin zor olduğu ayrıntılı denetim kayıtlarına neden olur.

DBCC ve FileTables

Bir FileTable'da sistem tanımlı kısıtlamalar da dahil olmak üzere kısıtlamaları doğrulamak için DBCC CHECKCONSTRAINTS kullanabilirsiniz.

Ayrıca Bkz.

Diğer SQL Server Özellikleriyle FileTable Uyumluluğu
FileTable DDL, İşlevler, Saklı Yordamlar ve Görünümler