[erlang-questions] ODBC Connection Timeout
Michael McDaniel
erlangx@REDACTED
Mon Sep 24 16:14:10 CEST 2007
On Mon, Sep 24, 2007 at 09:34:24AM +0200, Akos kutvolgyi wrote:
> I was trying the {scrollable_cursors, off}. It wasn't solve the timeout problem.:(
>
>
> I was trying to connect to MySQL Database in the same system.
>
> - MySQL 5.0.44
>
> - MyODBC 3.51.12
>
>
>
> Tested the connectivity to MySQL database using "isql". Everything
> works.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
What is default timeout value for "isql" ? Appears that timeout value
for odbc:connect/2 is too low for your environment and needs to be
higher. I suggest setting it high and if that works, back it off
until discover where it typically times out. Then set above
threshold.
~Michael
>
> erl
> > application:start(odbc).
> > Ret = odbc:connect("DSN=MySQLDatabase;UID=user;PWD=pwd", [{scrollable_cursors, off}]).
>
>
>
>
> The output was similar.
>
> ** Reason for termination ==
> ** timeout
>
>
>
> An idea:
>
>
> --------- From the users Guide ---------------------
>
> 1.4 About the Erlang ODBC application
>
> Provides an Erlang interface to communicate with relational
> SQL-databases. It is built on top of Microsofts ODBC interface and
> therefore requires that you have an ODBC driver to the database that
> you want to connect to. The Erlang ODBC application is designed using
> the version 3.0 of the ODBC-standard, however using the option
> {scrollable_cursors, off} for a connection has been known to make it
> work for at least some 2.X drivers.
>
> -----------------------------------------------------
>
> Regards Ingela - OTP team
>
>
> Akos Kutvolgyi wrote:
>
> > Hello ALL!
> >
> > I could not connect to mssql DB by erlang odbc module in Gentoo Linux.
> > After odbc:connect(...) I have got Error Report with Timeout Reason.
> >
> > The Steps that I've taken.
> > -Merged unixODBC Driver Manager v2.2.12
> > -Merged the freetds ODBC driver with odbc and mssql USE flags. v0.64
> > -Merged erlang with hipo,java,kpoll,odbc,smp,ssl and tk USE flags v11.2.5
> > -Configured odbc.ini and odbcinst.ini files.
> >
> > odbc.ini
> >
> > [ODBC Data Sources]
> >
> > MyDatabase = FREETDS SQLServer driver
> > MYSQLPL = My SQL
> >
> >
> > [MyDatabase]
> > Driver = /usr/lib/libtdsodbc.so
> > Description = SQL Server
> > Server = ServerName\SQLEXPRESS
> > Port = 1433
> > Language =
> > Database = PresenceLog
> > QuotedId = No
> > AnsiNPW = No
> >
> >
> > odbcins.ini
> >
> > [ODBC Drivers]
> >
> > FreeTDS = installed
> >
> >
> > [FreeTDS]
> > Description = FreeTDS ODBC Driver
> > Driver = /usr/lib/libtdsodbc.so
> > Threading = 0
> > FileUsage = 1
> > DontDLClose = 1
> > UsageCount = 1
> >
> >
> >
> > Tested the connectivity to MSSQL database using "isql". Everything works.
> >
> > Seted the enviroments ODBCINI and ODBCSYSINI
> > $ export ODBCINI=/etc/unixODBC/odbc.ini
> > $ export ODBCSYSINI=/etc/unixODBC/
> >
> > Try out sample.
> >
> > erl
> > > application:start(odbc).
> > > {ok, Ref} = odbc:connect("DSN=MyDatabase;UID=user;PWD=pwd", []).
> >
> > Get as output:
> >
> > {error,connection_closed}
> > =ERROR REPORT==== 20-Sep-2007::14:16:58 ===
> > ** Generic server <0.38.0> terminating
> > ** Last message in was {<0.31.0>,
> > {connect,[1,
> > 1,
> > 2,
> > 1,
> > 1,
> > "DSN=MyDatabase;UID=user;PWD=pwd"],
> > on,
> > on},
> > infinity}
> > ** When Server state == {state,#Port<0.105>,
> > {<0.31.0>,#Ref<0.0.0.68>},
> > <0.31.0>,
> > undefined,
> > on,
> > undefined,
> > undefined,
> > on,
> > connecting,
> > undefined,
> > 0,
> > [#Port<0.103>,#Port<0.104>],
> > undefined,
> > undefined}
> > ** Reason for termination ==
> > ** timeout
> >
> >
> > I tried the DSN again via two little c program.
> >
> > DSN LIST:
> >
> >
> > #include <stdio.h>
> > #include <sql.h>
> > #include <sqlext.h>
> >
> > main() {
> > SQLHENV env;
> > char dsn[256];
> > char desc[256];
> > SQLSMALLINT dsn_ret;
> > SQLSMALLINT desc_ret;
> > SQLUSMALLINT direction;
> > SQLRETURN ret;
> >
> > SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
> > SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
> >
> > direction = SQL_FETCH_FIRST;
> > while(SQL_SUCCEEDED(ret = SQLDataSources(env, direction,
> > dsn, sizeof(dsn), &dsn_ret,
> > desc, sizeof(desc), &desc_ret))) {
> > direction = SQL_FETCH_NEXT;
> > printf("%s - %s\n", dsn, desc);
> > if (ret == SQL_SUCCESS_WITH_INFO) printf("\tdata truncation\n");
> > }
> > }
> >
> > It founds both of my DSNs.
> >
> > Connection TEST by *Edmund Dengler*
> >
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <string.h>
> > #include <sql.h>
> > #include <sqlext.h>
> > #include <pthread.h>
> >
> > #define MAX_CONN_STR_OUT 1024
> > #define TIME_OUT 10
> >
> > int main() {
> > unsigned char *connStrIn = "DSN=MyDatabase;UID=user;PWD=pwd";
> > SQLCHAR connStrOut[MAX_CONN_STR_OUT];
> > SQLRETURN stringlength2ptr, result;
> > SQLSMALLINT connlen;
> >
> > SQLHENV env;
> > SQLHDBC connect;
> >
> > SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
> > SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
> >
> > SQLAllocHandle(SQL_HANDLE_DBC, env, &connect);
> > SQLSetConnectAttr(connect, SQL_ATTR_CONNECTION_TIMEOUT,
> > (SQLPOINTER)TIME_OUT, 0);
> > SQLSetConnectAttr(connect, SQL_ATTR_AUTOCOMMIT,
> > (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0);
> > SQLSetConnectAttr(connect, SQL_ATTR_TRACE,
> > (SQLPOINTER)SQL_OPT_TRACE_OFF, 0);
> >
> > connlen = (SQLSMALLINT)strlen((const char*)connStrIn);
> >
> > printf("Connecting\n");
> > result = SQLDriverConnect(connect, NULL,
> > (SQLCHAR *)connStrIn,
> > connlen,
> > connStrOut, (SQLSMALLINT)MAX_CONN_STR_OUT,
> > &stringlength2ptr, SQL_DRIVER_NOPROMPT);
> > printf("Done (%d)\n", result);
> > }
> >
> > The result was SQL_SUCCESS
> >
> >
> > If anybody has any ideas, they would be greatly appreciated!
> >
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
> !DSPAM:52,46f7686873326900152256!
>
>
--
Michael McDaniel
Portland, Oregon, USA
http://autosys.us
+1 503 283 5284
More information about the erlang-questions
mailing list