Michael Firsov

Czy kiedykolwiek myślałeś, że Twój SQL server może pracować jako serwer plików? Szanse są takie, że nie – ja też nie, dopóki nie wypróbowałem funkcji FileTable wprowadzonej po raz pierwszy w SQL Server 2012. Funkcja FileTable jest kolejnym krokiem w technologii FILESTREAM, która umożliwia przechowywanie plików i folderów w specjalnych tabelach, ale dostęp do nich za pomocą tradycyjnego protokołu Windows SMB – użytkownicy mogą tworzyć/odczytywać/modyfikować/usuwać pliki z ogólnego udziału plików, nawet nie wiedząc o podstawowych poleceniach SQL. Innymi słowy, pliki pozwalają nam używać tabel SQL do nietransakcyjnego dostępu.

moim zdaniem jedną z największych zalet funkcji FileTables jest przechowywanie atrybutów plików (takich jak Last-Writetime, Last_accesstime, itp.), który umożliwia administratorom kontrolowanie operacji dostępu do plików przy użyciu odpowiednich kolumn w plikach. W tym artykule chciałbym pokazać, w jaki sposób SQL Server 2012-2016 może być używany do przechowywania plików i jakie mechanizmy audytu mogą być wykorzystywane do plików i folderów znajdujących się w udziałach plików SQL. Przed utworzeniem tabel plików w bazie danych należy spełnić pewne wymagania wstępne. przejdziemy przez wszystkie kroki wymagane do przygotowania tabel plików, a następnie utworzymy kilka tabel i zobaczymy, jak możemy z nimi pracować.

zacznijmy od włączenia FILESTREAM dla instancji SQL 2012 i utworzenia nowej bazy danych FILESTREAM:

https://msdn.microsoft.com/en-us/library/gg509097%28v=sql.120%29.aspx

włączam FILESTREAM na poziomie Windows

  1. Otwórz Menedżera konfiguracji SQL:
    02
  2. upewnij się, że są zaznaczone następujące pola wyboru:
    03

II Włącz FILESTREAM na poziomie instancji SQL:

  1. w SQL Server Management Studio kliknij nowe zapytanie, aby wyświetlić Edytor zapytań.
  2. w Edytorze zapytań wprowadź następujący kod Transact-SQL:
    EXEC sp_configure filestream_access_level, 2
    RECONFIGURE04

III podaj grupę plików FILESTREAM na poziomie bazy danych

zanim będziemy mogli utworzyć pliki w bazie danych, baza danych musi mieć strumień plików filegroup. Aby uzyskać więcej informacji na temat tego warunku, zobacz Tworzenie bazy danych obsługującej FILESTREAM.
ponieważ zamierzam utworzyć nową bazę danych, najpierw utworzę folder zawierający pliki:
01
a następnie zdefiniuję grupę plików w tym kodzie:

CREATE DATABASE FILESERVER
ON
PRIMARY (NAME = FS,
FILENAME = 'c:\FILESERVER\FSdat.mdf’),
FILEGROUP FileStreamFS zawiera FILESTREAM (NAME=FSgr,
FILENAME = 'c:\FILESERVER\fs1′)
LOG ON (NAME = FSlog, FILENAME = ’ c:\ FILESERVER \fslog.ldf’)
GO

Uwaga! Jak mówi MS: „W przypadku grupy plików FILESTREAM nazwa pliku odnosi się do ścieżki. Ścieżka do ostatniego folderu musi istnieć, a ostatni folder nie może istnieć.”W Kodeksie poprzedzającym, c:\FILESERVER musi istnieć, ale nie może istnieć fs1 w momencie wykonywania instrukcji CREATE DATABASE.

05

10

strona właściwości bazy danych Filegroups wyświetla teraz strumień pliku FileStreamFS dla bazy danych FILESERVER:
07

IV Włącz Nietransakcyjny dostęp na poziomie bazy danych

Po utworzeniu bazy danych ostatnim krokiem w przygotowaniu jej do plików jest włączenie nietransakcyjnego dostępu na poziomie bazy danych.

FileTables pozwala aplikacjom Windows uzyskać uchwyt Pliku Windows do danych FILESTREAM bez konieczności przeprowadzania transakcji. Aby umożliwić ten nietransakcyjny dostęp do plików przechowywanych w SQL Server, należy określić pożądany poziom nietransakcyjnego dostępu na poziomie bazy danych dla każdej bazy danych, która będzie zawierać pliki. Jeśli wykonamy następujący kod-

z sys wybieramy DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
.database_filestream_options;
GO

…zobaczymy, że żadna baza danych nie ma włączonego dostępu non-transactional:
08

aby umożliwić non-transactional dostęp do plików na poziomie bazy danych (w tym przypadku dla bazy Fileserver) należy podać jeszcze jedną opcję – katalog dla plików: jest to katalog, który utworzyłem na początku pliku. artykuł – C:\FILESERVER, ale nazwa katalogu powinna być wpisana bez litery dysku i symbolu „\”:

ALTER DATABASE FILESERVER
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N’ Fileserver’)
GO

09

„w hierarchii folderów FileTable ten katalog na poziomie bazy danych staje się potomkiem nazwy akcji podanej dla FileStream na poziomie instancji i rodzica pliku les utworzonego w bazie danych”-oznacza to, że Fileserver będzie podfolderem MSSQLSERVER share, ponieważ nie zmieniłem go w kroku i – 2. Aby uzyskać więcej informacji, zobacz Praca z katalogami i ścieżkami w plikach

ponowne wykonanie tego kodu spowoduje pomyślne włączenie dostępu nietransakcyjnego:

SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
z sys.database_filestream_options;
GO

09-1

następujący kod wyświetla nazwę katalogu dla bazy danych serwera plików:

Select DB_NAME ( database_id), directory_name
z sys.database_filestream_options;
przejdź

11

oto udostępnienie pliku „SQL”, którego użytkownicy mogą teraz używać do przechowywania swoich plików i folderów:10-1110-12

Jeśli gdyby zmienić nazwę domyślnego udziału MSSQLSERVER na coś takiego jak share1 w kroku i-2 nie byłoby żadnych wskazań na jakikolwiek zaangażowany serwer SQL – z punktu widzenia użytkownika byłby to po prostu zwykły udział plików.

wszystkie wymagania wstępne do tworzenia plików są teraz spełnione i możemy przystąpić do tworzenia plików.

praca z tabelami plików SQL Server – część 2

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.