Delphi несколько потоков и дБ Oracle - PullRequest
2 голосов
/ 11 июля 2011

Мне нужно иметь несколько входов в систему и выполнение запросов к базе данных Oracle, 10 пользователей на процесс, 10 процессов на ПК.

Я думал, что создам 10 потоков, по одному потоку на каждого пользователя.

Это возможно? Любой совет приветствуется.

Очень плохо знаком с темами.

Обновление:

Спасибо за все комментарии и ответы.

Вот некоторые дополнительные детали:

Использование компонентов Oracle 10.2, Delphi XE и dbExpress, созданных на лету.

Наша задача - запускать 10 процессов на машину и моделировать 10 пользовательских входов в систему на процесс. Каждый логин находится в своем собственном потоке (на самом деле мне нужно иметь два логина в каждом потоке, поэтому я фактически создаю 200 сессий на машину).

Для этого упражнения моделирования после установления соединения каждый поток извлекает группу данных, вызывая несколько хранимых процедур в цикле. Для каждой хранимой процедуры я создаю объект TSQLProcedure на лету и закрываю, а затем освобождаю его после его использования. Теперь я получаю превышение максимальных курсоров ORA1000, чего я не понимаю, так как закрываю и освобождаю каждый объект sp.

Изменение настроек на стороне сервера исключено. Я видел некоторую документацию, которая говорит, что на стороне приложения вы можете установить RELEASE_CURSOR = YES. Я предполагаю, что это опция, установленная на уровне процедуры.

Ответы [ 2 ]

5 голосов
/ 11 июля 2011

Да, это возможно.Вам может понадобиться поток для каждого сеанса, который вам нужен (см. здесь для объяснения), и вы должны убедиться, что OCI вызывается потокобезопасным способом , как это сделать, зависит отбиблиотека, которую вы используете для вызова OCI, если вы не вызываете OCI напрямую.

3 голосов
/ 11 июля 2011

Да, это возможно. Помните, что пользовательский интерфейс работает в своем собственном потоке и не может быть доступен напрямую другим потокам. Также помните, что вы не можете разделить состояние между потоками, если не обеспечите его защиту. Это начало. Здесь пример использования потоков с базами данных и библиотекой dbGo. Я предлагаю вам попробовать и вернуться, если у вас есть конкретные вопросы.

...