InsERT S.A.
e-pomoc techniczna

e-pomoc techniczna

InsERT nexo - Włącznie mechanizmu FILESTREAM

Program: Gestor nexo, Gratyfikant nexo, InsERT nexo, Rachmistrz nexo, Rewizor nexo, Subiekt nexo

Kategoria: Rozwiązania sferyczne

UWAGA!! Poniższy artykuł przedstawia przykład jednego z zaawansowanych rozwiązań przygotowanych dla programów linii nexo. W razie problemów prosimy o kontakt z naszymi lokalnymi serwisantami​ w celu konfiguracji.

Podczas korzystania z programów linii nexo możliwe jest włączenie mechanizmu FILESTREAM, który pomocny jest m.in. podczas pracy na danych, takich, jak: zdjęcia, pliki wideo, czy dokumenty.

Uruchomienie mechanizmu FILESTREAM (w skrócie FS) odbywa się w następujący sposób:

1. Włączyć FS w usłudze SQL.

2. Włączyć FS w serwerze SQL.

3. Dodać do bazy danych grupę FILESTREAM.

4. Do wybranych tabel dodać wymagane kolumny.


Pierwszym etapem jest uruchomienie FS w usłudze SQL. W tym celu należy:

UWAGA!!! FILESTREAM nie działa na serwerze SQL w wersji 32-bit, zainstalowanym w systemie operacyjnym 64-bit. (Na 32-bit owym serwerze 32-bitowy SQL działa z FILESTREAM).

1. Uruchomić SQLServerConfigurationManager, kliknąć prawym przyciskiem myszy na instancję SQL i wybrać Właściwości.


2. Na zakładce FILESTREAM zaznaczyć Enable FILESTREAM for Transact-SQL access. Zapisać wprowadzone zmiany.

UWAGA!!! Jeśli opcja ta zostaje włączona po raz pierwszy, wymagany jest reset komputera z serwerem SQL.


3. Kolejnym krokiem jest uruchomienie Microsoft SQL Server Management Studio i zalogowanie się do usługi SQL.


4. Kliknąć prawym przyciskiem myszy na instancji, do której ma zostać dodany FS, następnie wybrać Properties.


5. Przejść do Advanced i w sekcji FILESTRAM parametr FILESTREAMAccessLevel ustawić na Transact-SQL access enabled. Zapisać zmiany.


6. Zresetować serwer SQL klikając prawym przyciskiem myszy na instancję, następnie Restart.


7. Kolejnym krokiem jest dodanie grupy FILESTREAM do bazy danych, aby mogła ona zapamiętać dane w systemie plików i zarezerwować miejsce na FILESTREM.

Mechanizm FILESTREAM wymaga dodania elementu FILEGROUP do bazy danych. W elemencie FILEGROUP należy wskazać element FILE, który wskazuje na katalog w którym będą tworzone pliki z zawartością atrybutów typu FILESTREAM.

Można posłużyć się poniższym skryptem SQL:

DECLARE @dbName NVARCHAR(100)

-- W poniższych liniach należy wpisać nazwę bazy danych, do której ma zostać dodany FILESTREAM

SET @dbName = N'NAZWA BAZY DANYCH'

use NAZWA BAZY DANYCH


IF NOT EXISTS(​

​ select 1 from sys.database_files phf​

inner join sys.filegroups fg on phf.data_space_id = fg.data_space_id

where fg.type_desc = N'FILESTREAM_DATA_FILEGROUP' )

BEGIN

DECLARE @fsFileName nvarchar(260)

DECLARE @fsFileLogicalName nvarchar(260)

DECLARE @fileSteramGroupName NVARCHAR(100)

DECLARE @pfname nvarchar(260)

DECLARE @sql nvarchar(max)

SET @fileSteramGroupName = N'[FileStreamGroup]'

select @pfname = MAX(phf.physical_name) from sys.database_files phf

inner join sys.filegroups fg on phf.data_space_id = fg.data_space_id

WHERE

fg.is_default= 1

AND fg.type_desc = N'ROWS_FILEGROUP'

SET @fsFileName = LEFT(@pfname, LEN(@pfname)-4)+'.fst'

SET @fsFileLogicalName = @dbName + '.fst'

PRINT 'Add FILESTREAM support';

PRINT 'Adding FILEGROUP for FILESTREAM...'

SET @sql = 'ALTER DATABASE ' + QUOTENAME(@dbName) + ' ADD FILEGROUP '+ @fileSteramGroupName+' CONTAINS FILESTREAM';

EXEC (@sql);

PRINT 'Adding Container in FILESTREAM Group'

SET @sql = 'ALTER DATABASE ' + QUOTENAME(@dbName) + ' ADD FILE ( NAME = N''' +@fsFileLogicalName + ''', FILENAME = N''' + @fsFileName + ''') TO FILEGROUP '+ @fileSteramGroupName

EXEC (@sql);

END

ELSE

BEGIN

PRINT 'Already have FILESTREAM.'

END


8. Ostatnim krokiem jest dodanie atrybutów typu FILESTREAM do tabel. Jedynie atrybuty typu varbinary(max) lub varchar(max) lub nvarchar(max) mogą być pamiętane w plikach w systemie plików serwera SQL.

Aby użyć FILESTEAM, należy „dodać" do atrybutu typu varbinary(max) lub varchar(max) lub nvarchar(max) flagę FILESTREAM, ponieważ SQL nie przewiduje dodania takiego atrybutu przy pomocy polecenia ALTER TABLE, ALTER COLUMN, należy to zrobić np. przez dodanie nowej kolumny.

Mechanizm FILESTREAM wymaga atrybutu typu UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE w tabelach, które mają atrybuty z flagą FILESTREAM. nexo dodaje do wybranych tabel (lista poniżej) takie właśnie atrybuty.

Poniższy przykład przedstawia, jak można dodać FILESTREAM do tabeli ze zdjęciami w Towarach i Klientach nexo.

-- Wybrać bazę danych

USE [NAZWA BAZY DANYCH]

GO

-- Zmiana nazwy atrybutu, który zawiera zdjęcia (zabieg jest konieczny,

-- bo tabela może zawierać już dane)

--

EXEC sp_rename '[ModelDanychContainer].[ZawartosciDokumentow].[Dane]', 'DaneBak', 'COLUMN';

GO

-- Dodanie atrybutu z flagą FILESTREAM

-- (nie da się zrobić ALTER COLUMN który dodaje/usuwa FILESTREAM)

-- Przed dodaniem kolumny typu FILESTREAM musi być już

-- kolumna typu UNIQUEIDENTIFIER ROWGUIDCOL UNIQUE

-- (w przypadku nexo taka kolumna już jest (Dane_FileStreamId)

--

ALTER TABLE [ModelDanychContainer].[ZawartosciDokumentow]

ADD

[Dane] [varbinary](max) FILESTREAM NULL

GO

-- Przepisanie wartości do „nowej" struktury

UPDATE ModelDanychContainer.ZawartosciDokumentow

SET

Dane = DaneBak

GO

-- usunięcie „niepotrzebnej" już kolumny

ALTER TABLE [ModelDanychContainer].[ZawartosciDokumentow]

DROP COLUMN

DaneBak

GO


Obecnie do nexo można ustawić kolumny FILESTREAM w następujących tabelach:

1. ModelDanychContainer.ZawartosciZalacznikowPocztowych atrybut: Dane

2. ModelDanychContainer.ZawartosciDokumentow atrybut: Dane

3. ModelDanychContainer.ZawartosciObiektowBibliotekiDokumentow atrybut:Dane

W przypadku tych tabel dodano na potrzeby FILESTREAM kolumny o nazwie: Dane_FileStreamId
















drukuj
Czy artykuł był pomocny?TAKNIE

Dlaczego artykuł oceniasz jako nieprzydatny?

Dziękujemy za opinię