Google Answers Logo
View Question
 
Q: Connect to multiple instances of DB2 from a single C Application ( No Answer,   0 Comments )
Question  
Subject: Connect to multiple instances of DB2 from a single C Application
Category: Computers > Programming
Asked by: riteshukla-ga
List Price: $5.00
Posted: 16 Feb 2004 13:48 PST
Expires: 17 Mar 2004 13:48 PST
Question ID: 307404
Environment: AIX 5.1, language C, DB2 7.1
This is what I am trying to do.

I have more than one instance of DB2 on the server. Need to get the
list of databases for each instance. The other instances(Nodes) are
not cataloged in any instance, So I need to connect only through the
env. variable DB2INSTANCE.

This is how I am trying to do.
1. Set environment variable DB2INSTANCE to the first instance. 
2. Attach to the first DB2 instance.
3. Get the list of databases.
4. Detach from Instance.
5. Set environment variable DB2INSTANCE to the Second instance. 
2. Attach to the second DB2 instance.
3. Get the list of databases.
4. Detach from Instance.

The code

	/*Set the environment variables which are used by sqlgetdbs() call to
	* connect to the server to fetch the datbases
	*/
	env_value = (char *)malloc(strlen(server)+16);
	strcpy(env_value, "DB2INSTANCE=");
	strcat(env_value, server);

	env_const = (char *)malloc(strlen(env_value)+1);
	strcpy(env_const,env_value);

	if (putenv(env_const) != 0) {
		if (DEBUG) {
			printf("Error setting environment varible DB2INSTANCE\n");
		}
	}
	free(env_value);
	env_var = getenv("DB2INSTANCE");
	printf("env Var set value after: %s\n", env_var);

	/* Attach to the INSTANCE */
	nodename=server;
	sqleatin(nodename, NULL, NULL, &sqlca);
	printf("attach sqlcode %d\n",sqlca.sqlcode);

	instName[SQL_INSTNAME_SZ] = '\0';
	sqlegins (instName, &sqlca);
	printf("ins name sqlcode %d \n", sqlca.sqlcode);
	printf("ins name from sqlegins: %s \n", instName);

	/* open database directory scan */
	sqledosd(dbDirPath, &dbDirHandle, &nbDbEntries, &sqlca);
/*	printf("OPen sqlcode %d\n",sqlca.sqlcode);*/

	/* read the database entries */
	for (dbEntryNb = 0; dbEntryNb < nbDbEntries; dbEntryNb++)
	{
		/* get next database directory entry */
		sqledgne(dbDirHandle, &dbEntry, &sqlca);
		printf("get sqlcode %d\n", sqlca.sqlcode);

		/* printing out the database information on to the screen */
		printf("    database name        : %.8s\n", dbEntry->dbname);

	} /* end for */

	/* close database directory */
	sqledcls(dbDirHandle, &sqlca);
	printf("sqlcode close %d \n", sqlca.sqlcode);

	/* Detach from the instance */
	sqledtin(&sqlca);
	printf("sqlcode detach %d \n", sqlca.sqlcode);

I loop the above peice with a diferrent INSTANCE name.

THE PROBLEM:
This works fine for the first INSTANCE but it is fails to connect to
the second instance and remains connected to the first one.

Have tried alternate methods using multiple contexts, threads, etc.
but have not been able to find a solution. This has troubled me for a
while.
Any useful information or piece of code that accomplishes this would
be greatly appreciated.
Answer  
There is no answer at this time.

Comments  
There are no comments at this time.

Important Disclaimer: Answers and comments provided on Google Answers are general information, and are not intended to substitute for informed professional medical, psychiatric, psychological, tax, legal, investment, accounting, or other professional advice. Google does not endorse, and expressly disclaims liability for any product, manufacturer, distributor, service or service provider mentioned or any opinion expressed in answers or comments. Please read carefully the Google Answers Terms of Service.

If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you.
Search Google Answers for
Google Answers  


Google Home - Answers FAQ - Terms of Service - Privacy Policy