heb je ooit gedacht dat je SQL server als bestandsserver kan werken? De kans is groot dat je niet – ik ook niet totdat ik probeerde een FileTable functie voor het eerst geà ntroduceerd in SQL Server 2012. De FileTable-functie is de volgende stap in de FileStream – technologie die u toelaat om bestanden en mappen op te slaan in de speciale tabellen, maar toegang tot hen met behulp van traditionele Windows SMB-protocol-gebruikers kunnen maken/lezen/wijzigen/verwijderen van bestanden van een generieke file share zonder zelfs bewust te zijn van de onderliggende SQL commando ‘ s. Met andere woorden, FileTables laten ons SQL tabellen gebruiken voor niet-transactionele toegang.
naar mijn mening is een van de grootste voordelen van de FileTables-functie het opslaan van bestandsattributen (zoals Last-WriteTime, Last_AccessTime, enz.) waarmee beheerders de toegangsbewerkingen van bestanden kunnen controleren met behulp van de corresponderende kolommen in de FileTables. In dit artikel wil ik u laten zien hoe SQL Server 2012-2016 kan worden gebruikt voor de opslag van bestanden en welke auditingmechanismen kunnen worden gebruikt voor bestanden en mappen die zich in de SQL-bestandshares bevinden. Er moet aan een aantal voorwaarden worden voldaan voordat Bestandstabellen in een database kunnen worden gemaakt en we zullen alle stappen doorlopen die nodig zijn om voor te bereiden op Bestandstabellen, vervolgens meerdere tabellen maken en zien hoe we ermee kunnen werken.
laten we beginnen met het inschakelen van de FileStream voor de SQL 2012 instantie en het creëren van een nieuwe FILESTREAM database:
https://msdn.microsoft.com/en-us/library/gg509097%28v=sql.120%29.aspx
I Enable FILESTREAM op het Windows niveau
- Open SQL Configuration manager:
- zorg ervoor dat de volgende selectievakjes zijn geselecteerd:
II Activeer FILESTREAM op het niveau van SQL-instantie:
- In SQL Server Management Studio, klik op nieuwe Query om de Query-Editor weer te geven.
- voer in de Query-Editor de volgende Transact-SQL-code in:
EXEC sp_configure filestream_access_level, 2
HERCONFIGURE
III Geef een FILESTREAM Filegroup op databaseniveau
voordat we FileTables in een database kunnen aanmaken, moet de database een FileStream filegroup hebben. Zie een FILESTREAM-database maken voor meer informatie over deze voorwaarde.
aangezien ik een nieuwe database ga aanmaken, zal ik eerst een map aanmaken met FileTables:
en dan een Filestream filegroep definiëren in deze code:
maak DATABASE FILESERVER
Op
primair (NAME = FS,
FILENAME = ‘c:\FILESERVER\FSdat.mdf’),
FILEGROUP FileStreamFS bevat FILESTREAM (NAME = FSgr,
FILENAME = ‘c:\FILESERVER\fs1’)
LOG in (NAME = FSlog, FILENAME = ‘ c: \ FILESERVER \ FSlog.ldf’)
GO
Opgelet! Zoals mevrouw zegt: “Voor een FILESTREAM filegroup, FILENAME verwijst naar een pad. Het pad naar de laatste map moet bestaan en de laatste map mag niet bestaan.”In de voorgaande code, c:\FILESERVER moet bestaan, maar fs1 mag niet bestaan op het moment dat u het CREATE DATABASE statement uitvoert.
de eigenschappenpagina van de filegroups-database toont nu de FileStreamFS-filestream voor de fileserver-database:
IV Enable Non-Transactional Access at the Database Level
zodra we de database aangemaakt hebben, is de laatste stap in de voorbereiding voor FileTables om niet-transactionele toegang op het databaseniveau te verkrijgen.met
FileTables kunnen Windows-toepassingen een Windows-bestandsbehandeling verkrijgen om gegevens te verzenden zonder een transactie te vereisen. Om deze niet-transactionele toegang tot bestanden die zijn opgeslagen in SQL Server toe te staan, moet u het gewenste niveau van niet-transactionele toegang opgeven op databaseniveau voor elke database die FileTables zal bevatten. Als we de volgende code uitvoeren –
selecteer DB_NAME (database_id), non_transacted_access, non_transacted_access_desc
vanuit sys.database_filestream_options;
GO
… We zullen zien dat geen databases niet-transactionele toegang hebben ingeschakeld:
om niet-transactionele toegang tot bestanden op databaseniveau mogelijk te maken (voor de FILESERVER database in dit geval) moet nog een optie worden opgegeven – een map voor FileTables: het is de map die ik heb aangemaakt in het begin van het artikel-C:\FILESERVER, maar de mapnaam moet worden getypt zonder de stationsletter en het symbool “\”:
ALTER DATABASE FILESERVER
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N’ fileserver’)
GO
“In de FileTable map hiërarchie wordt deze map op databaseniveau het kind van de share naam gespecificeerd voor FileStream op het niveau van de instantie, en de ouder van de filetab les gemaakt in de database”-het betekent fileserver zal de submap van MSSQLSERVER share Als Ik heb niet veranderd in Stap I – 2. Voor meer informatie, zie werken met mappen en paden in FileTables
het opnieuw uitvoeren van deze code zal tonen dat de niet-transactionele toegang met succes is ingeschakeld:
selecteer DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
vanuit sys.database_filestream_options;
GO
de volgende code toont de naam van de map voor de fileserver databse:
Selecteer DB_NAME ( database_id), direcory_name
uit sys.database_filestream_options;
GA verder
Hier is de “SQL” het delen van bestanden, die gebruikers kunnen nu gebruik voor het opslaan van hun bestanden en mappen:
Als ik had omgedoopt tot de standaard MSSQLSERVER aandeel in iets als SHARE1 in stap I-2 zou er geen indicatie van een SQL Server-betrokken – de gebruiker perspectief zou het een gewoon bestand delen.
aan alle vereisten voor het maken van FileTables is nu voldaan en we kunnen doorgaan met het maken van FileTables.
werken met Bestandstabellen van SQL Server-deel 2