|
|
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
Даже и не знаю как спросить =(, плиз зачитайте все равно! 6.5 Господа хорошие, помогите! Ума не приложу, как решить мою проблему! Есть папка, в которой лежат файлы, но к папке у пользователя нет доступа не коим образом. Для получения файла, пользователь вставляет в некоторое поле некоторой таблицы некоторой значение. На сервере крутится процедура, которая периодические просматривает эту таблицу, и если она находит в ней записи, она на основе значений в записях этой таблицы определяет, кто сделал запись и имя файла, который лежит в тоже самой папке. Далее, процедура (в контексте учетной записи имеющей права) запускает bcp и закачивает этот файл в другую таблицу. Далее пишет в первую таблицу некоторое значение, по которому клиент, в свою очередь, тоже может определить, что закачка файла в таблицу закончена и тоже запускает bcp для выгрузки этого файл на локальную машину. Все я еще не запрограммировал, это только теоретически. Простите извращенца! Но, проблема в том, что если сразу несколько пользователей проделывают эту операцию, то закачка файлов процедурой будет идти последовательно, т.е. сначала обрабатывается запрос одного пользователя, потом другого, т.е. по очереди. А мне нужно, что б все было параллельно. Для этого нужно чтобы процедура не крутилась на сервере и не просматривала табличку, а что б каждый пользователь мог ее запускать. Т.е. если 20 пользователей хотят получить файл, то запустится 20 копий процедуры (каждый из пользователей запустит по разу) и каждая будет работать не зависимо от другой. Имя файла будет передаваться процедуре как параметр. Но запустить bcp из процедуры можно только посредством xp_cmdshell, а раздавать пользователям права на ее запуск не хочется, а, как известно, для ее запуска нужны права, хоть она и запускается в контексте процедуры, а не напрямую. Т.е. если, к примеру, нельзя напрямую удалить записи из таблицы запросом, то если засунуть запрос в процедуру и дать пользователю права на ее запуск, то записи из таблицы спокойно удаляются, а для xp_cmdshell это не прокатывает. Как быть? Может я что-то упустил? Может можно все по-другому сделать? Пойдут любые способы, но без раздачи прав на xp_cmdshell. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2002, 23:41:51 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
А какие проблемы? Процедура, которая периодические просматривает таблицу, ....качает нужный файл в уникальную таблицу, пишет в первую таблицу некоторое значение + название таблицы куда она закачала файл. Юзветь читает название таблицы и потом берёт от туда данные. А после, гробит эту таблицу. Сорри, за сумбурность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2002, 00:57:36 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
Так юзер не один, считывать то они смогут параллельно, а вот как процедура которая на сервере работать будет, т.е. bcp не может ведь сразу несколько файлов из запроса закачать. Значит либо курсор, либо цикл. То есть будет последовательная обработка юзерских запросов. А если их 100 одновременно, сколько будет сотый ждать? Нужно чтоб каждый запускал процедуру, а не одна на всех крутилась на сервере ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2002, 01:22:34 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
Poprobuj zapuskat' tak xp_cmdshell 'start bcp ..........' Tvoja SP dolgna osvobogdat'sja (no ne uveren) dlja sledujuschego usera Po moemu, to chto ty zaduml booolshoj gemoroj. Poprobuj sdelat' poprosche. Tipa srazu zakachat' vse fajly v SQL Server, a tam pust' chitajut. Sorry za font, pishu ne ot sebja. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2002, 02:43:43 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
а джобы в 6.5 есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2002, 03:27:40 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
я не знаю что такое дожбы поскольку знаю только 6.5 может и есть но как-то по-другому называются =( мне бы с 6.5 разобраться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2002, 12:49:50 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
4 SandalTree >Tvoja SP dolgna osvobogdat'sja это как? если один юзер ее запустил, то что другие уже не могут? причем здесь это? они и так прекрасно ее запустят >Tipa srazu zakachat' vse fajly v SQL Server это как, по очереди в цикле??? так не пойдет я тут подумал, что по любому нужно что бы крутилась процедура на сервере, а не что б юзер ее запускал иначе, ему нужен будет доступ к файлу, что б xp_cmdshell bcp могла его закачать в таблицу,а доступа у него не должно быть вообще, что б он не смог найти эту папку в сети а можно ли чтоб bcp работал асинхронно? т.е. xp_cmdshell bcp .... запускается, а потом сразу переходит на следующую строку кода? ну, или, что-то подобное, можно же например сделать так SELECT MyFuction(MyField) FROM MyTable, и все разом обработать? а если bcp туда засунуть, то сработает?? сейчас не могу попробовать, нет сервера по рукой =( а может как-нибудь с BULK INSERT можно? да все равно как, главное чтобы все закачивалось параллельно, т.е. чтоб юзеры друг друга не ждали в очереди ну, плиз, че нить посоветуйте=(((((((((((((, может вообще как нибудь по другому все сделать можно???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2002, 01:52:52 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
ну. блин. опять никто не отвечает=((((((((((((((((9 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2002, 09:39:40 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
Я бы все таки лучше дал права на чтение из каталога. Но уже если хочется. Ты же сам нашел BULK INSERT. У меня под рукой нет 6.5 Вот выдержка из BOL для 7 Parallel Data Load Using bcp Microsoft® SQL Server™ allows data to be bulk copied into a single table from multiple clients in parallel using the bcp utility or BULK INSERT statement. This can improve the performance of data load operations. To bulk copy data into SQL Server in parallel: Set the database option select into/bulkcopy to true using sp_dboption. Specify the TABLOCK hint. For more information, see Controlling the Locking Behavior. Ensure that the table does not have any indexes. -------------------------------------------------------------------------------- Note Any application based on the DB-Library client library supplied with SQL Server version 6.5 or earlier, including the bcp utility, is not able to participate in parallel data loads into SQL Server. Only applications using the ODBC or SQL OLE DB-based APIs can perform parallel data loads into a single table. -------------------------------------------------------------------------------- After data has been bulk copied into a single table from multiple clients, any nonclustered indexes that need to be created can also be created in parallel by simply creating each nonclustered index from a different client concurrently. -------------------------------------------------------------------------------- Note Any clustered index on the table should be created first from a single client before creating the nonclustered indexes. =========== Я так думаю, что насчет ВЫГРУЗКИ файла на машину клиента через BCP ты погорячился. Это можно сделать и средствами клиента. ============ P.S. Перестань мучать людей. Переходи на 7.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2002, 21:46:30 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
2Cat2 >Я бы все таки лучше дал права на чтение из каталога. Но уже если хочется. Нельзя им давать права на уровне OS, можно только одному пользователю, от имени которого будет крутиться хр на сервере Я ж ведь спрашиваю не о том могут ли несколько клиентов в одну таблицу, а может ли хp сервера запустить несколько bcp асинхронно для одновременной загрузки нескольких файлов, не дожидаясь выполнения каждого из них. Если нельзя, то как это можно сделать по другому, без bcp, например? В 6.5 что BULK INSERT нетууууууууу? В BOL не нашел =( >Я так думаю, что насчет ВЫГРУЗКИ файла на машину клиента через BCP ты погорячился. Это можно сделать и средствами клиента. здесь я имел ввиду bcp в широком смысле, не саму утилиту bcp, а средства DMO. У DMO же есть какой-то объект, методы которого делают то же самое, что и bcp. Не знаю какой, DMO никогда не пользовался до сих пор, но это не главное, разобраться то с этим можно. >Перестань мучать людей. Переходи на 7.0 отмажусь словами jimmers из топика Среда программирования под MS SQL: "Гонки, говорите... По-моему, сначала следует изучить старое, выжать так сказать, все соки, потом уже переходить к новому." сегодня буду ставить 2000, но, боюсь, что от такого прыжка с 6.5 на 2000 (я его в упор не видел, только на картинках =\) я людей еще больше замучаю=) Но когда-то надо начинать. Пошел покупать книжку=\ Блин, ну ведь кто-то знает как сделать это на 6.5, но ленится ответить. Конкретизирую задачу: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 10:44:32 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
IMHO в одном коннекте это не получится. Нужно писать свою программу, которая в опрашивает таблицу и для каждой записи создает свой коннект. А вот вызывать она может одну и туже процедуру с разными параметрами для каждой сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 11:50:29 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
4 Glory так получится? Execute Method (ADO Command) command.Execute RecordsAffected, Parameters, Options где Options=adAsyncExecute Т.е. на каком-нить маленьком клиенте в цикле перебора записей рекордсета на основе таблицы с запросами на файлы вызывать хр с таким Options=adAsyncExecute, в которой будет запускаться bcp???? несколько асинхронных запусков xp с разными параметрами, в которой идет вызов bcp прокатит??? только все это хочется делать средствами сервера и T-SQL и не делать специалного клиента для этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 14:57:10 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
2Cat2 ну, все, поставил 2000 в ближайшие несколько дней начну всех мучить=) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 15:03:23 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
>Нельзя им давать права на уровне OS, можно только одному пользователю, от имени которого будет крутиться хр на сервере Не давай права юзеру, давай группе. А ресурс расшарь, как невидимый ($). Тут еще не ясно, получаемый файл просто кладется на клиента с тем, что бы он в любое время мог его просмотреть, или ему нужно только глянуть на него. Если только глянуть, то я бы сделал интранет сервер. А откуда ноги-то растут? Что за задача? IMnotHO, если есть проблемы с реализацией, то может имеет смысл поменять алгоритм? ====================== Слава тебе Господи! У меня 7.0 и твои проблемы мне будут по барабану. Но ты на всякий случай, пробэкапь все и вся всеми способами. Вроде бы переход с 6.5 на 2000, минуя 7 череват. Кто-то по этому поводу уже жалился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2002, 20:35:57 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
2Cat2 нельзя вообще расшаренные папки даже скрытые С$ D$ E$ ADMIN$ даже эти нельзя, которые по умолчанию все прикрывать нужно а по возможности и NetBios оключать по информационной безопасности не проходит потому и извращаюсь такие вот дела=( попробую кратко сформировать задачу для чего мне вообще это нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2002, 00:40:08 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
Попытаюсь изложить максимально кратко Есть папка, представляющая собой файловый архив. Ежедневно ее содержимое пополняется на 200-300 файлов. Есть пользователи, которые должны получать и работать с этими файлами. Файлы названы в соответствии с определенными масками, у каждого отдела своя маска. Отдел должен иметь доступ только к файлам, имя которых подходит под маску отдела. Архивную папку в сети никто не должен видеть (в том числе и arhive$ не прокатит), так же не должно быть других расшаренных папок как на серверах, так и на клиентских машинах. Запрещается также открытие доступа через permissions. Безопасники периодически сканируют сеть на наличие шар, если они их обнаруживают, то пишут телеги начальству... Есть програмулина, которая складывает файлы в архив из разных мест (здесь конечно есть шары, но они в другом сегменте, из основного сегмента они не просматриваются, это допускается) Програмулина проводит разбор файлов по именам, определяет по маске кому в какой отдел пришел файл, пишет в БД лог о том, откуда пришли файлы и кому, составляя при этом таблицу доступа пользоватлей к файлам. Есть оператор(ы), которые следит за работой програмулины и просматривает файлы и если необходимо корректирует работу програмулины (в конечном итоге он определяет, кому открывать доступ на файл, програмулина просто ему в этом помогает). У пользователей есть клиенты, посредством которых они видят инфу о разобранных файлах из таблиц, но только о тех, доступ к которым у них открыт (т.е. они видят только те записи из таблиц, которые относятся к ним лично или к отделу). Теперь, появляется необходимость получения пользователями своих файлов. Планируется создать еще одну БД, размером в несколько Г, в которую должны будут закачиваться запрашиваемые файлы, и после закачки пользователи смогут их выкачивать из нее на локальные машины. Т.е. вторая база - TempWareHouse. Ее размер определяется из следующих соображений: файлы, в архиве редко бывают >10МБ, допустим, с системой работает 200 пользователей, и все одновременно запрашивают файлы размером в 10Мб. 10х200=2Г. Т.е. они все должны поместиться в БД. Но это экстремальная ситуация, на практике такого количества одновременных запросов происходить не будет. Была идея все сделать в одной БД, но тогда встает проблема с ее периодическим дампом и дампом журнал (последний должен проводится очень часто, поскольку пишутся логи, и даже потеря нескольких записей, если не катастрофа, то очень и очень плохо). Из-за частых бульков делать дам журнала будет затруднительно. Потому и было принято решение вынести все это хозяйство в отдельную БД, дампы в которой не будут делаться вообще никогда. Просто в автозагрузку вставится пользовательская процедура, которая при запуске будет чистить эту большую базу (на случай неправильного завершения работы сервера), а при новом запуске сервера пользователям все равно придется переконектиться, так что им не составит труда сделать еще раз запрос. Все это небольшая часть функций всей системы в целом, но этот механизм должен работать как часы. Геморрой, но в наших условиях можно сказать, что это неплохое решение. Чтобы было еще понятнее, скажу, то, что описано, можно назвать разборщиком почты, ну или на худой конец его подобием. Использовать готовые почтовые сервера и клиенты запрещается. Такие вот пирожки с котятками. Я так понимаю, на 2000 будет сделать намного проще, чем на предыдущих версиях. Вопросы из последних постингов не снимаются. А может, у кого появятся другие идеи по реализации, было бы очень интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2002, 17:26:39 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
так получится? Асинхронное выполнение запроса в коннекте вовсе не значит, что можно запустить несколько запросов одновременно. Просто управление возвращается приложению, которое еперь "обязано" следить за тем готовы ли результаты запроса или нет. несколько асинхронных запусков xp с разными параметрами, в которой идет вызов bcp прокатит??? Из разных коннектов конечно прокатит. На то они и разнык коннекты. На первый взгляд решение задачи видится в использовании пула коннетов. А конкретно таким. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2002, 22:02:37 |
|
||
|
Даже и не знаю как спросить =(, плиз зачитайте все равно!
|
|||
|---|---|---|---|
|
#18+
2Cat2 >А откуда ноги-то растут? Что за задача? IMnotHO, если есть проблемы с реализацией, то может имеет смысл поменять алгоритм? ====================== ???????????????????????????????????????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2002, 14:25:24 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1818522]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
7ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 316ms |

| 0 / 0 |
