Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ограничение размера хранимого файла  [new]
PM2010
Member

Откуда:
Сообщений: 70
Добрый день!
Использую SQL Server 2005 SP3. Есть поле типа varbinary(max), в котором лежит некий файл. Файлы загружаются через клиент с использованием хранимой процедуры. Вопрос: как ограничить максимальный размер передаваемого на сервер файла средствами сервера, чтобы его не закидали длинными файлами? Что-то типа аналога LimitRequestBody в Apache.
17 май 12, 22:30    [12573521]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
PM2010
Добрый день!
Использую SQL Server 2005 SP3. Есть поле типа varbinary(max), в котором лежит некий файл. Файлы загружаются через клиент с использованием хранимой процедуры. Вопрос: как ограничить максимальный размер передаваемого на сервер файла средствами сервера, чтобы его не закидали длинными файлами? Что-то типа аналога LimitRequestBody в Apache.

ALTER TABLE dbo.TableName ADD CONSTRAINT	CK_ColumnName CHECK (datalength([ColumnName])<(1048576))
17 май 12, 23:15    [12573674]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
PM2010
Member

Откуда:
Сообщений: 70
Прежде, чем сработает CHECK, этот файл должен залиться на сервер полностью весь. Это не подходит.
17 май 12, 23:20    [12573690]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
PM2010
...как ограничить максимальный размер передаваемого на сервер файла средствами сервера, ...

Так вы ж просили средствами сервера, судя по тому что вы создали тему в MSSQL, средствами сиквел сервера. Если вам нужно ограничивать на более раннем этапе, так и обращайтесь в соответствующие инстанции. Может как-то на сетевом уровне это контролировать...
17 май 12, 23:24    [12573704]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
PM2010
...Файлы загружаются через клиент ...

Кстати, если файлы загружаются через клиент, рубите их по размеру еще на клиенте.
17 май 12, 23:26    [12573714]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
PM2010
Member

Откуда:
Сообщений: 70
SomewhereSomehow, так и сделано, но это дополнительная мера, основная должна быть на сервере.
17 май 12, 23:29    [12573716]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
PM2010
Member

Откуда:
Сообщений: 70
SomewhereSomehow
Так вы ж просили средствами сервера, судя по тому что вы создали тему в MSSQL, средствами сиквел сервера. Если вам нужно ограничивать на более раннем этапе, так и обращайтесь в соответствующие инстанции. Может как-то на сетевом уровне это контролировать...

Так передача данных идет через SQL запрос ведь. А запросы в компетенции SQL Server.
17 май 12, 23:30    [12573719]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
PM2010,

Если дело дошло до запроса сиквела, то значит кто-то позволил дойти до этой стадии? Почему нельзя рубануть на этапе этого "кто-то"?
Просто представьте себе, чтобы сервер мог что-то предпринять с вашими данными, он должен ими располагать, а значит они должны передаться туда так или иначе. Хотя может есть какая-то настройка не принимать пакеты более чем N байт, но что если передача разбита на множество пакетов. В общем, я о таком не знаю, трудно представляю, и, имхо, то что вы хотите - не задача сиквела.
17 май 12, 23:38    [12573737]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
PM2010
Прежде, чем сработает CHECK, этот файл должен залиться на сервер полностью весь. Это не подходит.
Ну проверяйте в хранимой процедуре, только каким магическим образом  SQLServer должен узнать какого размера файл, ДО того как получит этот файл?

Это примерно как: хочу чтобы спам из моего почтового ящика удалялся до того как письмо будет получено.
18 май 12, 20:05    [12579969]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Если вспомнить то что файлы правильно хранить через FILESTREAM. То становится очевидным ставить ограничения на уровне Application сервера (т.е. клиента) [максимальный размер принимаемого потока] или на крайняк на уровне файловой системы (на каталоге FILESTREAM).
19 май 12, 01:38    [12581147]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Mnior
Если вспомнить то что файлы правильно хранить через FILESTREAM.


Это таки да. НО! У ТС

PM2010
Использую SQL Server 2005 SP3.


что как бы предотвращает.

2ТС: солидаризуюсь с предыдущими ораторами - или режьте на клиенте, или файл целиком уйдет на сервер. Мне, лично, альтернативы не известна. Ну или, разумеется, апгрейд до 2008+. Тогда появился ФилеСтрим со всеми своими "наворотами", как указано выше.
19 май 12, 10:54    [12581363]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
SamMan, вы правы это я пропустил. Но это не важно. Если почитать ещё раз мой пост, допуская что я знал про 2005, то видно, что не в самом FILESTREAM дело, а в архитектурном решении. Да, тяжело понять что я имел ввиду, так как надо понимать как FILESTREAM работает и в чём смысл его решения. (Т.е. я смотрел на принцип решение, а не на конкретную его реализацию)

Если смотреть на передачу "прям в скуль", т.е. через параметр VarBinary(max), то понятно - никак, 2 Гига всё равно впендёрить можно. Т.е. нет никаких VarBinary(100500).
Если кошерно, через попадания на диск, и не важно FILESTREAM или заюзать BULK INSERT или тупо линк на файл, то решается через файловую систему, как я и писал.

Но я же ищё и написал "на крайняк на уровне файловой системы", т.е. как ни крути, но это не решение.
Т.е. мало не "убить" сервер БД, надо не "убить" Application сервер (web сервер, или что там?).
Поэтому надо рубить сам стрим от клиента. Тогда все сетевые потоки и буфера памяти будут не перегружены.
19 май 12, 15:11    [12581815]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
SamMan
Тогда появился ФилеСтрим со всеми своими "наворотами", как указано выше.


File Tables в 2012 рулят! http://msdn.microsoft.com/en-us/library/ff929144.aspx
19 май 12, 15:24    [12581839]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
pkarklin,

Спасибо за линк - интересно!! Сколько они там всего, в 12-м, наворотили... Это ж учить и учить! Следующий когда выходит, в 15-м? Успеваю все новинки опробовать?
19 май 12, 20:45    [12582557]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
pkarklin
File Tables в 2012 рулят!
Неужто так сказачно? Можете опытом поделиться?
19 май 12, 22:19    [12582916]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
PM2010
Member

Откуда:
Сообщений: 70
Контролировать размер файла до того, как он зальется очень просто: наливать до краев, а потом сказать "Стоп, сейчас перельется!" и вылить все в унитаз. Я так понимаю, что SQL Server отслеживать положение краев в принципе не умеет? Не зря я привел в пример Apache: такая возможность отсечения есть, правда это все же веб-сервер.
28 май 12, 15:58    [12626725]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
PM2010
Я так понимаю, что SQL Server отслеживать положение краев в принципе не умеет? Не зря я привел в пример Apache
Так и сказали сразу, что у вас двух-звенка с прямым доступуом к скулю. А тут сразу и предлагалось на аппликейшин сервере ограничивать.
На клиенте ограничить нельзя?
Тадась тока в хранимке проверять размер параметра, но 2Гига в tempdb можно будет зафлудить.
28 май 12, 16:21    [12626932]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение размера хранимого файла  [new]
Glory
Member

Откуда:
Сообщений: 104751
PM2010
Я так понимаю, что SQL Server отслеживать положение краев в принципе не умеет?

У SQL Server нет файлов. У него есть поток данных от клиента. И сервер не может знать заранее размер этого потока.

PM2010
пример Apache: такая возможность отсечения есть, правда это все же веб-сервер.

Ваш файл наверное не в воздухе висит, а находится на диске. И нично не мешает вам получить размер файла стандартниыми методами от оп.системы.
28 май 12, 16:24    [12626950]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить