- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想确保在多进程系统中正确实现连接。具体来说,环境句柄。
SQLAllocHandle 似乎被多个数据库供应商使用。我直接感兴趣的是 DB2,但我也想知道其他供应商是如何处理这个问题的。
我在网上找到的示例分配环境句柄,然后立即分配数据库句柄。我认为这些示例适用于单进程系统,因此在这种情况下它们是有意义的。像这样的伪代码:
SQLHANDLE connenv = NULL;
SQLHANDLE conn = NULL;
int connectEnv(void)
{
connenv = NULL;
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &connenv))
{
printf("Fail to allocate memory for connenv");
return 0;
}
return 1;
}
int connectDbc(void)
{
conn = NULL;
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_DBC, connenv, &conn))
{
SQLFreeHandle(SQL_HANDLE_ENV, connenv);
printf("Fail to connect to database");
return 0;
}
if (SQL_SUCCESS != SQLConnect(conn, conninfo, SQL_NTS, NULL, SQL_NTS, NULL, SQL_NTS))
{
printf("unable to allocate connection %s", conninfo);
return 0;
}
return 1;
}
int main(int argc, char *argv[]) {
while (1) {
waitForReasonToStartChild()
if (fork()) {
// parent process
} else {
// child process
connectEnv();
connectDbc();
}
}
}
为了节省时间,我想将环境句柄的分配移至父进程,并将数据库连接保留在子进程中。
int main(int argc, char *argv[]) {
connectEnv();
while (1) {
waitForReasonToStartChild()
if (fork()) {
// parent process
} else {
// child process
connectDbc();
}
}
}
这对我来说似乎更有意义(即使它不是更快),但我还没有在网络上找到示例。
这是正确的方法吗?还有其他更好的技术吗?
最佳答案
我找到的有关 DB2 ODBC 多线程的第一个链接有一个类似于您首选方法的示例。
总而言之,父线程分配环境,然后每个子线程(示例中为两个)分配自己的连接句柄并使用它:
- Creates two child Language Environment threads from an initial parent thread. The parent thread remains active for the duration of the child threads. DB2 ODBC requires that the thread that establishes the environment handle must persist for the duration of the application. The persistence of this thread keeps DB2 language interface routines resident in the Language Environment enclave.
- Connects to database A with child Language Environment thread 1 and uses SQLFetch() to read data from this connection into a shared application buffer.
- Connects to database B with child Language Environment thread 2. Child Language Environment thread 2 concurrently reads data from the shared application buffer and inserts this data into database B.
- Calls Pthread functions to synchronize the use of the shared application buffer within each of the child threads.
关于c - 在多进程系统中使用 SQLAllocHandle(SQL_HANDLE_ENV, ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24708994/
我想确保在多进程系统中正确实现连接。具体来说,环境句柄。 SQLAllocHandle 似乎被多个数据库供应商使用。我直接感兴趣的是 DB2,但我也想知道其他供应商是如何处理这个问题的。 我在网上找到
我在asterisk/main目录中添加了一个test.c来测试ODBC。不幸的是,当我运行 make 时,它显示如下。 test.o: In function `test_function': /u
我需要执行一系列 T-sql 语句作为事务的一部分,在每次调用 SQLExecDirect 执行每个 t-sql 语句之前,我调用 SQLAllocHandle 分配一个 SQLHSTMT 类型的句柄
似乎 perl 程序正在尝试加载 ODBC.so 文件,而不是应该使用的 freetds 文件。它给出了符号查找错误消息。试图在 ODBC.so 中找到 SQLAllocHandle 有没有人遇到过这
odbc.ini: [DEFAULT] Driver = DB2 [abc] Driver = DB2 [dsn_test1] DESCRIPTION = Conn
我已经对我的问题进行了搜索和谷歌搜索,但我仍然没有找到答案。我的问题是当通过 PHP PDO/ODBC 连接连接到我的 SQL Server 数据库时,我总是收到错误消息:“[Microsoft][O
四处搜索,但所有其他回复似乎都是关于 Oracle 的,所以我决定创建一个新帖子。 我目前正在尝试使用 Microsoft 提供的代码和 pyodbc 库将 Python 连接到我的 SQL Serv
四处搜索,但所有其他回复似乎都是关于 Oracle 的,所以我决定创建一个新帖子。 我目前正在尝试使用 Microsoft 提供的代码和 pyodbc 库将 Python 连接到我的 SQL Serv
仅当尝试从运行的 Python 3.7 连接到我的 Azure DB 时 一个 OpenShift 容器(来自 rhel7:latest)我看到以下错误: sqlalchemy.exc.DBAPIEr
我是一名优秀的程序员,十分优秀!