powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Таблицы FileTable
25 сообщений из 52, страница 1 из 3
Таблицы FileTable
    #39265251
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я прочитал и нихера не понял.
http://www.sql.ru/forum/1072807/filetable

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

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

Вроде, вариант a) мне кажется правильнее.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265257
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2Эти файлы из FileTable где физически пребывают?
a) Это виртуальные файлы и пребывают они внутри базы данных. Снаружи виднеясь только через //Server/Share.
б) Это реальные файлы файловой системы.

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

Вариант (а) даже не знаю, как можно было бы реализовать. Это тогда сиквел должен быть некой основой, базой, на которой как надстройка работает Windows :-)
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265290
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgaleks2Эти файлы из FileTable где физически пребывают?
a) Это виртуальные файлы и пребывают они внутри базы данных. Снаружи виднеясь только через //Server/Share.
б) Это реальные файлы файловой системы.

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

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

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

Где (в каком реальном каталоге) этот файл находится?
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265294
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2Где (в каком реальном каталоге) этот файл находится?
ну дядя Саша,и вам стало влом Хелп читать
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265300
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxxaleks2Где (в каком реальном каталоге) этот файл находится?
ну дядя Саша,и вам стало влом Хелп читать

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

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

Здеся и

Код: sql
1.
2.
3.
ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );  
GO  



и здеся

Код: sql
1.
2.
3.
4.
5.
CREATE TABLE DocumentStore AS FileTable  
    WITH (   
          FileTable_Directory = 'DocumentTable',  
          FileTable_Collate_Filename = database_default  
         ); 
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265309
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно без другого жить не может
Одно то на уровне файлстрима для БД - второе ето для таблицы
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265310
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2Вот ты мине объясни, чем отличаются "directory"

Здеся и

Код: sql
1.
2.
3.
ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );  
GO  




и здеся

Код: sql
1.
2.
3.
4.
5.
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, внедренным в файловую систему.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265316
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxxну дядя Саша,и вам стало влом Хелп читать Дополню, вот тут хорошо написано:
https://msdn.microsoft.com/ru-ru/library/gg492087.aspx
И слева есть всякие полезные разделы, типа "Доступ к файлам с помощью API-интерфейсов файла ввода-вывода"
ИМХО не такая запутанная реализация, можно разобраться, хотя и не такая простая, что вот просто "есть список файлов в папке", и всё.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265351
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тов. гуру. Не гоните лошадей.

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

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

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.
===================
Это я сделал.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265363
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
б) Providing a FILESTREAM Filegroup at the Database Level
https://msdn.microsoft.com/en-us/library/cc645585.aspx

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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')



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

Код: sql
1.
2.
ALTER DATABASE ETL  
   ADD FILEGROUP FileStreamGroup CONTAINS FILESTREAM( NAME = FSG,  FILENAME = 'D:\FileStreams\ETL')



и фсе...
Сообщение 102, уровень 15, состояние 1, строка 2
Неправильный синтаксис около конструкции "NAME".
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265370
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://msdn.microsoft.com/en-us/library/bb522469.aspx
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
--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 
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265376
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxx https://msdn.microsoft.com/en-us/library/bb522469.aspx
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
--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?
Кто мне вещал: файлы хранятся в файловой системе?

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
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

...продолжение следует.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265392
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в) 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

Код: sql
1.
2.
3.
SELECT DB_NAME ( database_id ) as dbname, directory_name  
    FROM sys.database_filestream_options
    where database_id = DB_ID('ETL');  



Код: plaintext
1.
dbname	directory_name
ETL	NULL

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

Код: sql
1.
2.
ALTER DATABASE ETL 
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' ) 



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

Если так
Код: sql
1.
2.
alter database ETL
   SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'D:\FileStreams\ETL' );  


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

Если так
Код: sql
1.
2.
alter database ETL
   SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'WhatIsIt' );  ;  


Оно как-то задумывается... и ничего не происходит.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265393
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2и в ентой папке загадочные файлы filestream.hdrвы предполагали, что там будут лежать .txt? если не секрет как хотите использовать сей функционал?
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265491
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушкаaleks2и в ентой папке загадочные файлы filestream.hdrвы предполагали, что там будут лежать .txt? если не секрет как хотите использовать сей функционал?

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

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

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

ЗЫ. Тока щеки надувают.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265507
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
ALTER DATABASE database_name  
    SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' )  



Дык, никто не знает, что за хрень надо писать в N'directory_name'?
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265523
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я ни разу не спец по FileTable, но изменив руками в свойствах базы NON_TRANSACTED_ACCESS на FULL и сохранив в скрипт не увидел там никакого DIRECTORY_NAME
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265538
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а немного погуглив увидел вот это:
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.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265549
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушкану я ни разу не спец по FileTable, но изменив руками в свойствах базы NON_TRANSACTED_ACCESS на FULL и сохранив в скрипт не увидел там никакого DIRECTORY_NAME

Не напрягайся. Кнопки в гуе давить - это не мешки ворочать.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265565
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2,
насколько я понимаю 19354757 отвечает на ваш вопрос
aleks2Не напрягайсяда без проблем, если спрашивающий не готов слушать, то может идти лесом то бишь разбираться самостоятельно.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265572
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265758
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушка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
Код: sql
1.
2.
3.
4.
5.
6.
7.
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
Код: sql
1.
2.
alter database ETL
   SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'WhatIsIt' ); 



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

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

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

ЗЫ. Кому нечего сказать, окромя ссылок - проходим мимо.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265789
kjhgfgj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что показывает ?
Код: sql
1.
2.
3.
SELECT non_transacted_access,  non_transacted_access_desc,  directory_name
FROM sys.database_filestream_options
WHERE database_id = DB_ID('ETL')
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39265823
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочешь сделать хорошо - сделай сам.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
-- Создание 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. Откуда взялся второй - фиг знает.
...
Рейтинг: 0 / 0
Таблицы FileTable
    #39266087
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поплачусь хоть тут...

Код: sql
1.
2.
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.

Вот такая вот зараза.
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 1 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Таблицы FileTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]