Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Таблицы FileTable  [new]
aleks2
Guest
Что-то я прочитал и нихера не понял.
https://www.sql.ru/forum/1072807/filetable

Неразрешимый для меня вопрос:

Эти файлы из FileTable где физически пребывают?
a) Это виртуальные файлы и пребывают они внутри базы данных. Снаружи виднеясь только через //Server/Share.
б) Это реальные файлы файловой системы.

Вроде, вариант a) мне кажется правильнее.
30 июн 16, 10:44    [19353393]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30773
aleks2
Эти файлы из FileTable где физически пребывают?
a) Это виртуальные файлы и пребывают они внутри базы данных. Снаружи виднеясь только через //Server/Share.
б) Это реальные файлы файловой системы.

Вроде, вариант a) мне кажется правильнее.
Наоборот.
Это реальные файлы в файловой системе.
И они показываются как виртуальные поля в таблицах в базе данных, к которым можно получить доступ обычными запросами.

Вариант (а) даже не знаю, как можно было бы реализовать. Это тогда сиквел должен быть некой основой, базой, на которой как надстройка работает Windows :-)
30 июн 16, 10:51    [19353428]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
alexeyvg
aleks2
Эти файлы из FileTable где физически пребывают?
a) Это виртуальные файлы и пребывают они внутри базы данных. Снаружи виднеясь только через //Server/Share.
б) Это реальные файлы файловой системы.

Вроде, вариант a) мне кажется правильнее.
Наоборот.
Это реальные файлы в файловой системе.
И они показываются как виртуальные поля в таблицах в базе данных, к которым можно получить доступ обычными запросами.

Вариант (а) даже не знаю, как можно было бы реализовать. Это тогда сиквел должен быть некой основой, базой, на которой как надстройка работает Windows :-)


Т.е. любой файл из FileTable - есть реальный файл на диске.

Где (в каком реальном каталоге) этот файл находится?
30 июн 16, 11:13    [19353524]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
aleks2
Где (в каком реальном каталоге) этот файл находится?

ну дядя Саша,и вам стало влом Хелп читать
30 июн 16, 11:16    [19353542]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
Maxx
aleks2
Где (в каком реальном каталоге) этот файл находится?

ну дядя Саша,и вам стало влом Хелп читать


Я уже слегка задолбался читать этот бред

Вот ты мине объясни, чем отличаются "directory"

Здеся и

ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );  
GO  


и здеся

CREATE TABLE DocumentStore AS FileTable  
    WITH (   
          FileTable_Directory = 'DocumentTable',  
          FileTable_Collate_Filename = database_default  
         ); 
30 июн 16, 11:22    [19353579]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Одно без другого жить не может
Одно то на уровне файлстрима для БД - второе ето для таблицы
30 июн 16, 11:30    [19353623]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30773
aleks2
Вот ты мине объясни, чем отличаются "directory"

Здеся и

ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );  
GO  



и здеся

CREATE TABLE DocumentStore AS FileTable  
    WITH (   
          FileTable_Directory = 'DocumentTable',  
          FileTable_Collate_Filename = database_default  
         ); 

Этот противный Хелп
Полный путь к элементу, хранящемуся в таблице FileTable

Полный путь к файлу или каталогу, сохраненный в таблице FileTable, начинается со следующих элементов.

Общий ресурс с поддержкой доступа файлового ввода-вывода к данным FILESTREAM на уровне экземпляра SQL Server.
Имя_каталога на уровне базы данных.
FILETABLE_DIRECTORY на уровне таблицы FileTable.

В итоге иерархия выглядит следующим образом.
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\

Данная иерархия каталогов образует корень пространства имен FileTable. В этой иерархии каталогов данные FILESTREAM для FileTable хранятся в виде файлов и в виде вложенных каталогов, которые также могут содержать файлы и вложенные каталоги.

Важно иметь в виду, что иерархия каталогов, созданная в общем ресурсе FILESTREAM на уровне экземпляра, является виртуальной иерархией каталогов. Иерархия хранится в базе данных SQL Server и не представлена физически в файловой системе NTFS. Все операции, осуществляющие доступ к файлам и каталогам в общем ресурсе FILESTREAM в таблицах FileTable, перехватываются и обрабатываются компонентом SQL Server, внедренным в файловую систему.
30 июн 16, 11:31    [19353631]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30773
Maxx
ну дядя Саша,и вам стало влом Хелп читать
Дополню, вот тут хорошо написано:
https://msdn.microsoft.com/ru-ru/library/gg492087.aspx
И слева есть всякие полезные разделы, типа "Доступ к файлам с помощью API-интерфейсов файла ввода-вывода"
ИМХО не такая запутанная реализация, можно разобраться, хотя и не такая простая, что вот просто "есть список файлов в папке", и всё.
30 июн 16, 11:37    [19353662]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
Тов. гуру. Не гоните лошадей.

Могет вам усе и очевидно в этом бреде, но я пока спотыкаюсь.

Начнем по-порядку.

1. Я хочу создать FileTable.
В свете этого в полном соответствии с рекомендациями местных гуру, я начитался всяких хелпов и пытаюсь им следовать:
https://msdn.microsoft.com/en-us/library/gg509097.aspx#BasicsFilestream


a) Enabling FILESTREAM at the Instance Level

1.On the Start menu, point to All Programs, point to SQL Server 2016, point to Configuration Tools, and then click SQL Server Configuration Manager.
2.In the list of services, right-click SQL Server Services, and then click Open.
3.In the SQL Server Configuration Manager snap-in, locate the instance of SQL Server on which you want to enable FILESTREAM.
4.Right-click the instance, and then click Properties.
5.In the SQL Server Properties dialog box, click the FILESTREAM tab.
6.Select the Enable FILESTREAM for Transact-SQL access check box.
7.If you want to read and write FILESTREAM data from Windows, click Enable FILESTREAM for file I/O streaming access. Enter the name of the Windows share in the Windows Share Name box.
8.If remote clients must access the FILESTREAM data that is stored on this share, select Allow remote clients to have streaming access to FILESTREAM data.
9.Click Apply.
10.In SQL Server Management Studio, click New Query to display the Query Editor.
11.In Query Editor, enter the following Transact-SQL code:
Transact-SQL

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

12.Click Execute.
13.Restart the SQL Server service.
===================
Это я сделал.
30 июн 16, 11:56    [19353764]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
б) Providing a FILESTREAM Filegroup at the Database Level
https://msdn.microsoft.com/en-us/library/cc645585.aspx

Творчески перерабатывая пример

CREATE DATABASE Archive 
ON
PRIMARY ( NAME = Arch1,
    FILENAME = 'c:\data\archdat1.mdf'),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM( NAME = Arch3,
    FILENAME = 'c:\data\filestream1')
LOG ON  ( NAME = Archlog1,
    FILENAME = 'c:\data\archlog1.ldf')


Мне не надо новую базу. Хачу старую

ALTER DATABASE ETL  
   ADD FILEGROUP FileStreamGroup CONTAINS FILESTREAM( NAME = FSG,  FILENAME = 'D:\FileStreams\ETL')


и фсе...
Сообщение 102, уровень 15, состояние 1, строка 2
Неправильный синтаксис около конструкции "NAME".
30 июн 16, 12:04    [19353810]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
https://msdn.microsoft.com/en-us/library/bb522469.aspx
--Create and add a FILEGROUP that CONTAINS the FILESTREAM clause to  
--the FileStreamPhotoDB database.  
ALTER DATABASE FileStreamPhotoDB  
ADD FILEGROUP TodaysPhotoShoot  
CONTAINS FILESTREAM;  
GO  
  
--Add a file for storing database photos to FILEGROUP   
ALTER DATABASE FileStreamPhotoDB  
ADD FILE  
(  
    NAME= 'PhotoShoot1',  
    FILENAME = 'C:\Users\Administrator\Pictures\TodaysPhotoShoot.ndf'  
)  
TO FILEGROUP TodaysPhotoShoot;  
GO 
30 июн 16, 12:07    [19353836]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
Maxx
https://msdn.microsoft.com/en-us/library/bb522469.aspx
--Create and add a FILEGROUP that CONTAINS the FILESTREAM clause to  
--the FileStreamPhotoDB database.  
ALTER DATABASE FileStreamPhotoDB  
ADD FILEGROUP TodaysPhotoShoot  
CONTAINS FILESTREAM;  
GO  
  
--Add a file for storing database photos to FILEGROUP   
ALTER DATABASE FileStreamPhotoDB  
ADD FILE  
(  
    NAME= 'PhotoShoot1',  
    FILENAME = 'C:\Users\Administrator\Pictures\TodaysPhotoShoot.ndf'  
)  
TO FILEGROUP TodaysPhotoShoot;  
GO 


Что-то мне этот бред не очень нравится.

Какого хрена указан файл TodaysPhotoShoot.ndf?
Кто мне вещал: файлы хранятся в файловой системе?

Порывшись в интрнете я наваял такое

alter database ETL 
add filegroup FileStreamGroup contains filestream;
go

alter database ETL
 add file ( NAME = 'fsETL', FILENAME = 'D:\FileStreams\ETL' ) to filegroup FileStreamGroup;
go


И оно сработало. Создав в D:\FileStreams ПАПКУ ETL и в ентой папке загадочные файлы
D:\FileStreams\ETL>dir /B
$FSLOG
filestream.hdr

...продолжение следует.
30 июн 16, 12:16    [19353885]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
в) Enabling Non-Transactional Access at the Database Level
https://msdn.microsoft.com/en-us/library/gg509097.aspx

1) How To: Check Whether Non-Transactional Access Is Enabled on Databases

SELECT DB_NAME ( database_id ) as dbname, directory_name  
    FROM sys.database_filestream_options
    where database_id = DB_ID('ETL');  


dbname	directory_name
ETL NULL

2) How To: Enable Non-Transactional Access at the Database Level

ALTER DATABASE ETL 
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' ) 


directory_name - Это какая папка?

Если так
alter database ETL
   SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'D:\FileStreams\ETL' );  

Сообщение 33402, уровень 16, состояние 1, строка 2
Указано недопустимое имя каталога "D:\FileStreams\ETL". Укажите допустимое имя каталога Windows.

Если так
alter database ETL
   SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'WhatIsIt' );  ;  

Оно как-то задумывается... и ничего не происходит.
30 июн 16, 12:32    [19353968]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
aleks2
и в ентой папке загадочные файлы filestream.hdr
вы предполагали, что там будут лежать .txt? если не секрет как хотите использовать сей функционал?
30 июн 16, 12:33    [19353972]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
Дедушка
aleks2
и в ентой папке загадочные файлы filestream.hdr
вы предполагали, что там будут лежать .txt? если не секрет как хотите использовать сей функционал?


Я ничего не предполагаю.
Я только пытаюсь создать FileTable и, попутно, выяснить:

В какой момент и где указывается папка локального диска, где БУДУТ лежать файлы из FileTable?

Пока никто внятно этого сказать не смог.

ЗЫ. Тока щеки надувают.
30 июн 16, 14:00    [19354497]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' )  


Дык, никто не знает, что за хрень надо писать в N'directory_name'?
30 июн 16, 14:10    [19354574]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
ну я ни разу не спец по FileTable, но изменив руками в свойствах базы NON_TRANSACTED_ACCESS на FULL и сохранив в скрипт не увидел там никакого DIRECTORY_NAME
30 июн 16, 14:24    [19354688]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
а немного погуглив увидел вот это:
The DIRECTORY_NAME specifies the name of the folder that will be created for this database in the root file share associated with the instance. And enabling full non-transacted access with NON_TRANSACTED_ACCESS=FULL exposes every FileTable within the database as a subfolder beneath the database folder of the instance’s file share.
30 июн 16, 14:32    [19354757]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
Дедушка
ну я ни разу не спец по FileTable, но изменив руками в свойствах базы NON_TRANSACTED_ACCESS на FULL и сохранив в скрипт не увидел там никакого DIRECTORY_NAME


Не напрягайся. Кнопки в гуе давить - это не мешки ворочать.
30 июн 16, 14:40    [19354829]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
aleks2,
насколько я понимаю 19354757 отвечает на ваш вопрос
aleks2
Не напрягайся
да без проблем, если спрашивающий не готов слушать, то может идти лесом то бишь разбираться самостоятельно.
30 июн 16, 14:49    [19354887]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Work with Directories and Paths in FileTables
Manipulating Filetable Files Programatically
30 июн 16, 14:56    [19354943]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
Дедушка
aleks2,
насколько я понимаю 19354757 отвечает на ваш вопрос
aleks2
Не напрягайся
да без проблем, если спрашивающий не готов слушать, то может идти лесом то бишь разбираться самостоятельно.


Нет, не отвечает. Ты мне пальцем покажи.

Maxx
Work with Directories and Paths in FileTables
Manipulating Filetable Files Programatically


Ну зачем эти ссылки? Лень ответить - пройди мимо.


Краткий повтор:
a) Enabling FILESTREAM at the Instance Level

1.On the Start menu, point to All Programs, point to SQL Server 2016, point to Configuration Tools, and then click SQL Server Configuration Manager.
...
EXEC sp_configure filestream_access_level, 2
RECONFIGURE

12.Click Execute.
13.Restart the SQL Server service.
===================
Это я сделал.

б) Providing a FILESTREAM Filegroup at the Database Level
alter database ETL 
add filegroup FileStreamGroup contains filestream;
go

alter database ETL
 add file ( NAME = 'fsETL', FILENAME = 'D:\FileStreams\ETL' ) to filegroup FileStreamGroup;
go


И оно сработало. Создав в D:\FileStreams ПАПКУ ETL и в ентой папке загадочные файлы
D:\FileStreams\ETL>dir /B
$FSLOG
filestream.hdr
========
Это я сделал.

в) Enabling Non-Transactional Access at the Database Level
alter database ETL
   SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'WhatIsIt' ); 


Оно как-то задумывается... и ничего не происходит.

1. Что я делаю не так?

2. В какой папке на локальном диске будут храниться файлы из FileTable?

ЗЫ. Кому нечего сказать, окромя ссылок - проходим мимо.
30 июн 16, 17:04    [19356052]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
kjhgfgj
Guest
А что показывает ?
SELECT non_transacted_access,  non_transacted_access_desc,  directory_name
FROM sys.database_filestream_options
WHERE database_id = DB_ID('ETL')
30 июн 16, 17:33    [19356223]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
Хочешь сделать хорошо - сделай сам.

-- Создание FileTable на существующей базе

-- 1. Файловая группа для FileStream
alter database ETL 
add filegroup FileStreamGroup contains filestream;
go

-- 2. Именно в ЭТОЙ папке (не файле!) D:\FileStreams\ETL размещается все содержимое FileTables
alter database ETL
 add file ( NAME = 'fsETL', FILENAME = 'D:\FileStreams\ETL' ) to filegroup FileStreamGroup;
go

-- 3. Если к базе есть подключения дальше не сработает
alter database ETL set single_user with rollback immediate;
go

-- 4. Но чтобы сработало - надо обычное состояние multi_user
alter database ETL set multi_user;
go

-- 4. Включаем доступ к файлам на чтение/запись средствами Windows.  DIRECTORY_NAME = N'ETL' - это виртуальное имя. Доступное только через \\server\share\ETL\
-- но создается реальная папка D:\FileStreams\ETL\c45448b2-6a97-446b-8a55-04fb055c39f3
alter database ETL
   SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'ETL' ) WITH NO_WAIT;  
go

-- 5. Создаем таблицу FileTable.
-- под нее создается субпапка D:\FileStreams\ETL\c45448b2-6a97-446b-8a55-04fb055c39f3\82ed037c-7670-480f-bbe0-4296586e71c0, которая видна как \\server\share\ETL\AlfaInsurance
CREATE TABLE dbo.AlfaInsurance AS FILETABLE
  WITH
  ( FILETABLE_DIRECTORY = 'AlfaInsurance',
    FILETABLE_COLLATE_FILENAME = database_default
  )
go
-- 6. Проверка состояния FileStream для базы
SELECT DB_NAME ( database_id ) as databasename, directory_name, *  
    FROM sys.database_filestream_options
    where database_id = DB_ID('ETL');  
go
-- 7. Если создать в \\server\share\ETL\AlfaInsurance файл  
--C:\>echo  fsdgbdshbdsfnhdfn > \\server\share\ETL\AlfaInsurance\"Новый текстовый документ.txt"
--C:\>dir /B \\server\share\ETL\AlfaInsurance
--Новый текстовый документ.txt

-- 8. Он становится виден в таблице [ETL].[dbo].[AlfaInsurance]
SELECT *  FROM [ETL].[dbo].[AlfaInsurance]

--stream_id	file_stream	name	path_locator
--D66B6650-CE3E-E611-810D-74EA3A803E91	0x6673646762647368626473666E6864666E0D0A	Новый текстовый документ.txt	0xFC4551E5DDDA0B0FEA9250B9258198F80C31912760

--9. В папке на диске возникают, почему-то, ДВА файла
--C:\>dir /B D:\FileStreams\ETL\c45448b2-6a97-446b-8a55-04fb055c39f3\82ed037c-7670-480f-bbe0-4296586e71c0
--000021c3-00000254-0002
--000021c3-0000026c-0028

--10. Один из них - тот самый
--C:\>type "\\server\share\ETL\AlfaInsurance\Новый текстовый документ.txt"
--fsdgbdshbdsfnhdfn

--C:\>type D:\FileStreams\ETL\c45448b2-6a97-446b-8a55-04fb055c39f3\82ed037c-7670-480f-bbe0-4296586e71c0\000021c3-00000254-0002
--

--C:\>type D:\FileStreams\ETL\c45448b2-6a97-446b-8a55-04fb055c39f3\82ed037c-7670-480f-bbe0-4296586e71c0\000021c3-0000026c-0028
--fsdgbdshbdsfnhdfn

--11. Откуда взялся второй - фиг знает.


Сообщение было отредактировано: 30 июн 16, 21:40
30 июн 16, 17:58    [19356370]     Ответить | Цитировать Сообщить модератору
 Re: Таблицы FileTable  [new]
aleks2
Guest
Поплачусь хоть тут...

exec msdb.dbo.sp_send_dbmail
            , @file_attachments = '\\server\share\directory\table\file.txt';


не желает брать файл из FileTable.

Сообщение 22051, уровень 16, состояние 1, строка 0
Недопустимый файл вложения \\HPSERVER\MORETRAVEL\ETL\AlfaInsurance\Альфастрахование медицина от 2016-07-01 (2016-07-01 12_16_48).csv.

Вот такая вот зараза.
1 июл 16, 10:18    [19358088]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить