Delphi多线程和Oracle db

时间:2011-07-11 16:52:30

标签: oracle delphi thread-safety

我需要在Oracle数据库中进行多次登录和查询执行,每个进程10个用户,每台PC 10个进程。

我在想我会创建10个线程,每个用户登录一个线程。

这可行吗?任何建议都表示赞赏。

非常新的线程。

更新

感谢所有的评论和答案。

以下是一些其他细节:

使用Oracle 10.2,Delphi XE和dbExpress组件即时创建。

我们的设计是每台机器运行10个进程,并为每个进程模拟10个用户登录。每次登录都在自己的线程内(实际上我需要在每个线程中有两个登录,所以我实际上每台机器创建了200个会话。)

对于此模拟练习,在建立连接后,每个线程通过调用循环内的多个存储过程来检索一堆数据。对于每个存储过程,我动态创建一个TSQLProcedure对象并关闭,然后在使用它之后将其释放。现在我超过了ORA1000 Max Cursors,我不明白,因为我关闭并释放每个sp对象。

更改服务器端的设置是不可能的。我看到一些文档说明在应用程序端你可以设置RELEASE_CURSOR = YES。我猜这是一个在程序级别设置的选项。

2 个答案:

答案 0 :(得分:5)

是的,这是可行的。您可能需要一个线程用于您需要的每个会话(请参阅here以获得解释),并且您必须确保在thread safe way中调用OCI,如何执行此操作取决于您用于调用的库OCI,如果你不直接打电话给OCI。

答案 1 :(得分:3)

是的,这是可行的。请记住,UI在其自己的线程上运行,并且不能由其他线程直接访问。还记得你不能在线程之间共享状态,除非你保护它。 This是一个开始。 Here使用线程与数据库和dbGo库的示例。如果您有具体问题,我建议您试一试,然后再回来。