powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Парсер на VB под Оракл
12 сообщений из 12, страница 1 из 1
Парсер на VB под Оракл
    #34976800
Egor Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начальник написал парсер на Vb смысол разобрать текстовик и закинуть в БД Оракла по разным табличкам

SSQL = "INSERT " + SSS(SERVER) + T_N + " " + POL + " VALUES(" + INS
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.LockType = adLockOptimistic
rs.ActiveConnection = cn
rs.Source = SSQL
rs.Open

работает в цикле минут 20... при этом производительность БД резко падает, ростет время синхронизации логов, получается, что серверу посылается десятки тысяч insert ...; commit; от этого ему становится реально плохо... Если кто писал такого рода программы для оракла подскажите как грамотно реализовать внесение данных с использованием ВБ...
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34976991
Wasup!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще если цель просто загрузить текстовый файлик, то лучше смотреть в сторону sqlloader`a – утилита от Oracle для загрузки данных. Там всё будет быстро и Ораклу будет хорошо. Реально быстрее, чем на VB + никаких лишних коммитов.
Как работает можно посмотреть в документации или поиском по сайту.
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34977006
Egor Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wasup!Вообще если цель просто загрузить текстовый файлик, то лучше смотреть в сторону sqlloader`a – утилита от Oracle для загрузки данных. Там всё будет быстро и Ораклу будет хорошо. Реально быстрее, чем на VB + никаких лишних коммитов.
Как работает можно посмотреть в документации или поиском по сайту.

Начальство не хочет переходить на лоадер, хотя я его уже раскурил и попробывал.... очень полезная утилита...
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34977145
Wasup!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У начальника получается, что каждый инсерт это отдельная транзакция. Причем каждый отдельный инсерт оракл считает полностью уникальным и каждый раз заново парстит, строит план и т.д.
Чтобы было быстрее надо сделать все инсерты в единой транзакции и использовать связываемые переменные. Про это очень рекомендую прочитать у Т.Кайта в книжке Oracle для профессионалов.

В общем вот так:

Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Option Explicit
Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter
Dim i   As Long

Private Sub Form_Load()

Set cnn = New ADODB.Connection
Set cmd = New ADODB.Command

cnn.Open "Provider=OraOLEDB.Oracle;Data Source=x;User ID=x;Password=x"
'Начинаем транзакцию, чтобы не коммитить каждую запись
cnn.BeginTrans

With cmd
        
    Set .ActiveConnection = cnn
    
    .CommandText = "insert into sql2.t values(?)"
    'Создаем подставляемый параметр
    Set prm = .CreateParameter("Prm", adDouble, adParamInput, , Null)
    .Parameters.Append prm
    
    .Prepared = True 'предкомпиляция запроса
    
End With


For i =  1  To  1000000 
    cmd.Parameters( 0 ) = i
    cmd.Execute
Next

cnn.CommitTrans
cnn.Close

End Sub

Миллион вставок за 5 мин.
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34977176
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egor Kovalenko Wasup!Вообще если цель просто загрузить текстовый файлик, то лучше смотреть в сторону sqlloader`a – утилита от Oracle для загрузки данных. Там всё будет быстро и Ораклу будет хорошо. Реально быстрее, чем на VB + никаких лишних коммитов.
Как работает можно посмотреть в документации или поиском по сайту.

Начальство не хочет переходить на лоадер, хотя я его уже раскурил и попробывал.... очень полезная утилита...
Если текстовый файл имеет четкую структуру, по которой можно загрузить в Oracle, то советую пользоваться loader-ом.
Вот вчера грузил им (и не только вчера), вот запись из log файла

log файлВсего пропущено логических записей: 0
Всего прочитано логических записей: 9264
Всего забраковано логических записей: 0
Всего удалено логических записей: 0

Прогон начался в зђт Эюџ 29 14:23:23 2007
Прогон кончился в зђт Эюџ 29 14:23:24 2007

Общее время: 00:00:00.67
Процессорное время: 00:00:00.05
Это один из самых маленьких файлов, а так бывает по 118124656 (сделал select из одной такой таблицы) и это занимает вроде около часа.
Так что смотри
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34977211
Egor Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wasup!Миллион вставок за 5 мин.
spfile с настройками для базы данных можно посмотреть ???
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34977262
Wasup!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обычная база на локальном компе, для тестовых целей, никаких специфических настроек.
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34977316
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egor Kovalenko Wasup!Миллион вставок за 5 мин.
spfile с настройками для базы данных можно посмотреть ???
Егор, настраивать Оракл бессмысленно, если приложение написано под него неправильно. Это постулат.
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34977322
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите в сторону Bulk update
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34981067
Egor Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за поддержку и за примеры, оптимизировали код, производительность увеличилась в 3 раза...
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34981080
Egor Kovalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wasup!У начальника получается, что каждый инсерт это отдельная транзакция. Причем каждый отдельный инсерт оракл считает полностью уникальным и каждый раз заново парстит, строит план и т.д.
Чтобы было быстрее надо сделать все инсерты в единой транзакции и использовать связываемые переменные. Про это очень рекомендую прочитать у Т.Кайта в книжке Oracle для профессионалов.

В общем вот так:

Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Option Explicit
Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter
Dim i   As Long

Private Sub Form_Load()

Set cnn = New ADODB.Connection
Set cmd = New ADODB.Command

cnn.Open "Provider=OraOLEDB.Oracle;Data Source=x;User ID=x;Password=x"
'Начинаем транзакцию, чтобы не коммитить каждую запись
cnn.BeginTrans

With cmd
        
    Set .ActiveConnection = cnn
    
    .CommandText = "insert into sql2.t values(?)"
    'Создаем подставляемый параметр
    Set prm = .CreateParameter("Prm", adDouble, adParamInput, , Null)
    .Parameters.Append prm
    
    .Prepared = True 'предкомпиляция запроса
    
End With


For i =  1  To  1000000 
    cmd.Parameters( 0 ) = i
    cmd.Execute
Next

cnn.CommitTrans
cnn.Close

End Sub

Миллион вставок за 5 мин.


Подскажите еще как можно данный пример перевести на такого рода INSERT: (никогда в VB не работал с параметрами)

INSERT into S3_0 (DDATE,CELL_ID,BSC_ID,LAID,BTS_ID,ADJC_ID,DIRECTION_ID,ADJC_CELL_ID,UPLINK_QUALITY,DOWNLINK_QUALITY,UPLINK_STRENGTH,DOWNLINK_STRENGTH,DISTANCE_COMPL,BETTER_CELL,DIRECTED_RETRY,FORCED_HO_DUE_TO_OM,TRAFFIC,FAST_UPLINK,FORCED_HO_DUE_TO_PREEMPTION) VALUES(to_date(:"SYS_B_00",:"SYS_B_01"),:"SYS_B_02",:"SYS_B_03",:"SYS_B_04",:"SYS_B_05",:"SYS_B_06",:"SYS_B_07",-:"SYS_B_08", :"SYS_B_09",:"SYS_B_10",:"SYS_B_11",:"SYS_B_12",:"SYS_B_13",:"SYS_B_14",:"SYS_B_15",:"SYS_B_16",:"SYS_B_17",:"SYS_B_18",:"SYS_B_19")
...
Рейтинг: 0 / 0
Парсер на VB под Оракл
    #34983628
Wasup!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:"SYS_B_06" каждый такой параметр надо заменить на ? в запросе, и для каждого вопроса создать объект параметр:

Код: plaintext
1.
Set prm = .CreateParameter("Prm", adDouble, adParamInput, , Null)
.Parameters.Append prm
Только не забывая про типы данных.

Дальше перед выполнением просто присваивать значение, по номеру параметра.
cmd.Parameters(номер параметра по порядку) = значение

Лучше потренироваться на тестовой табличке, с каждым непонятным параметром, а потом составить общий запрос.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Парсер на VB под Оракл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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