Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Bulk insert из файла, открытого на запись другим процессом / 10 сообщений из 10, страница 1 из 1
06.11.2002, 12:01:24
    #32065303
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bulk insert из файла, открытого на запись другим процессом
Суть задачи - закачка лог-файла стороннего приложения в ms sql. Сделано это было с пом. DTS, из которого вызывается хранимая процедура, содержащая тот самый bulk insert.
Работало.. до того момента, как потребовалось докачивать лог "на лету", при работающей генерящей лог программе.
Bulk insert - стал сообщать : ..file could not be opend..
Вот думаю - как грамотно энто дело обойти - и желательно лишь доработкой DTS-ника.. Приходят в голову мысли о копировании лог-файла и закачке из копии.. но его размер 400 Mb (3.5 млн строк), а для докачки зачастую нужны лишь последние 10 строк. Может есть способ быстро выдрать эти 10 строк в одельный файл с пом ф-ий DTS? Или таки придется писать внешнюю программу?
...
Рейтинг: 0 / 0
06.11.2002, 12:45:51
    #32065324
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bulk insert из файла, открытого на запись другим процессом
Уж не Прокся ли создает такой файл?
...
Рейтинг: 0 / 0
06.11.2002, 12:49:29
    #32065327
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bulk insert из файла, открытого на запись другим процессом
Вот думаю - как грамотно энто дело обойти - и желательно лишь доработкой DTS-ника

Я проверяю с помощью FSO возможность открытия файла на запись.
...
Рейтинг: 0 / 0
06.11.2002, 13:25:18
    #32065358
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bulk insert из файла, открытого на запись другим процессом
2 Александр Спелицин : нет... страшный зверь "1С предприятие" :)

2 Glory : а дальше? скажем - открыть возможно. Bulk-то все равно не работает.

Пришел вот к скрипту
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
fso = new ActiveXObject( "Scripting.FileSystemObject" );
var fn =  "C:\\1 \\1cv7.mlg";
if (fso.FileExists(fn)){   
    f = fso.OpenTextFile(fn,  1 , false);
    if (f.size !=  0 ){
	while (!f.AtEndOfStream){
                if (f.line < CurrentLine) { 
			l = f.SkipLine();
		} 
		else{
			l = f.ReadLine();
...
// обрабатываю строку и пишу в новый файл
...
		}
	}
    }
}

воот... лопатит 400 Mb за 2 минуты - что есть долго...
думаю написать OLE-объект на VC++ с той же начинкой.. может и поможет
PS : у FSO случайно нет метода "перейти к строке № ..." ? а то я что-то не нашел.. или может есть какой-нить аналог FSO?
...
Рейтинг: 0 / 0
06.11.2002, 13:28:31
    #32065363
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bulk insert из файла, открытого на запись другим процессом
а дальше? скажем - открыть возможно. Bulk-то все равно не работает

Вы можете открыть текстовый файл на запись в то время как он уже открыт другим приложением на запись ??????
...
Рейтинг: 0 / 0
06.11.2002, 13:38:04
    #32065367
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bulk insert из файла, открытого на запись другим процессом
2 Glory : ну ошибся :) невозможно его открыть на запись
на f = fso.OpenTextFile(fn, 2, false);
ругается "разрешение отклонено"
...
Рейтинг: 0 / 0
06.11.2002, 17:42:40
    #32065565
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bulk insert из файла, открытого на запись другим процессом
у FSO случайно нет метода "перейти к строке № ..." ? а то я что-то не нашел.. или может есть какой-нить аналог FSO?
Не, такого метода нет. Но, f.Read можно задать параметер - сколько символов читать. Если у вас строки фиксированной длины и номер строки известен, то f.Read(первое * второе) по идее переместит указатель туда, куда вам нужно
...
Рейтинг: 0 / 0
06.11.2002, 19:57:28
    #32065605
Andrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bulk insert из файла, открытого на запись другим процессом
Голосу за Си. Например лог-файл 227 Мб. Переход на последнюю строчку построчно с поиском по подстроке в качестве критерия идентификации строки занимает ~18 сек.
...
Рейтинг: 0 / 0
10.11.2002, 08:57:24
    #32065985
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bulk insert из файла, открытого на запись другим процессом
2 Glory : увы, строки произвольной длины..
2 Andrew : именно этим сейчас и займусь..

Кстати, под ту же задачу была написана UDF вида
Код: plaintext
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.
 -- выдирает из @str подстроку номером @n по разделителю @ch
 
 -- GetToken( "раз;два;три;", 2, ";" ) = "два"
 
CREATE FUNCTION GetToken( @str varchar( 1500 ), @n int, @ch char( 1 ) = ';' )
RETURNS varchar( 1500 )
AS
BEGIN
  declare @rez  varchar( 1500 )
  declare @r int
  declare @nn int
  select @nn= 1  
  select @rez = dbo.ReplSemicol( @str )  -- замена ; в кавычках  на CHAR(10)
 
  while @nn < @n begin
    select @r = charindex ( @ch , @rez ) 
    select @rez = SUBSTRING ( @rez , @r+ 1  ,  1500  )
    select @nn = @nn+ 1 ;
  end
  select @nn = charindex ( @ch , @rez ) 
  if @nn<> 0  select @rez = left( @rez, @nn- 1  )
  if @rez=@ch select @rez = ''; 
  select @rez = ltrim(rtrim( replace( @rez , char( 10 ), ';' ) ))  -- возврат ;
 
  return(@rez);
END

Может ее тоже стоит переписать на VC++ ?
Никто не подскажет - стоит ли возиться, будет ли заметный рост производительности?
...
Рейтинг: 0 / 0
10.11.2002, 11:50:30
    #32066031
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Bulk insert из файла, открытого на запись другим процессом
если нужна скорость... то стоит...
можеш вообще оформить все в расширенную хранимую процедуру.... и открытие файла и разбор...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Bulk insert из файла, открытого на запись другим процессом / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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