Example of enabling Db2 workload balancing support in non-Java clients
Db2 workload balancing requires a Db2 pureScale environment. Before you can use Db2 workload balancing support in CLI, .NET, or embedded SQL applications, you need to update the db2dsdriver.cfg configuration file with the appropriate settings, and connect to a member of the Db2 pureScale environment.
The following example demonstrates setting up a CLI client to take advantage of Db2 workload balancing support.
Before you can set up the client, you need to configure a Db2 pureScale® instance.
These steps demonstrate client setup:
- Create a db2dsdriver.cfg file that enables
transaction-level workload balancing. In this example:
- If the first connection to the database fails, the connection
needs to be tried on alternate servers.
Note that if you do not define a list of alternate servers in the db2dsdriver.cfg configuration file, at the first successful connection to the server, the client obtains from the server a list of all available alternate servers. The client stores the list in memory and also creates a local cache file, srvrlst.xml that contains the server's list of alternate servers. This file is refreshed whenever a new connection is made and the server's list differs from the contents of the client srvrlst.xml file.
- For transaction-level workload balancing for this database, the maximum number of physical connections needs to be 80.
- Connections can use the defaults for all other transaction-level workload balancing parameters.
The db2dsdriver.cfg file looks like this:
<configuration> <dsncollection> <dsn alias="LUWDS1" name="LUWDS1" host="luw1ds.toronto.ibm.com" port="50000"> </dsn> </dsncollection> <databases> <!-- In this example, the host and port represent a member of a Db2 pureScale instance --> <database name="LUWDS1" host="luw.ds1.ibm.com" port="50000"> <!-- database-specific parameters --> <wlb> <!-- Enable transaction-level workload balancing --> <parameter name="enableWLB" value="true" /> <!-- maxTransports represents the maximum number of physical connections --> <parameter name="maxTransports" value="80" /> </wlb> <acr> <!-- acr is already enabled by default --> <!-- Enable server list for application first connect --> <parameter name="enableAlternateServerListFirstConnect" value="true" /> <alternateserverlist> <!-- Alternate server 1 --> <server name="server1" hostname="luw2ds.toronto.ibm.com" port="50001"> </server> <!-- Alternate server 2 --> <server name="server2" hostname="luw3ds.toronto.ibm.com" port="50002"> </server> <!-- Alternate server 3 --> <server name="server3" hostname="luw4ds.toronto.ibm.com" port="50003"> </server> </alternateserverlist> </acr> </database> </databases> </configuration> - If the first connection to the database fails, the connection
needs to be tried on alternate servers.
- Suppose that the database name LUWDS1 represents a Db2
pureScale instance.
In a CLI application, use code like this to connect to the Db2
pureScale instance:
... SQLHDBC hDbc = SQL_NULL_HDBC; SQLRETURN rc = SQL_SUCCESS; SQLINTEGER RETCODE = 0; char *ConnStrIn = "DSN=LUWDS1;PWD=mypass"; /* dsn matches the database name in the configuration file */ char ConnStrOut [200]; SQLSMALLINT cbConnStrOut; int i; char *token; ... /*****************************************************************/ /* Invoke SQLDriverConnect */ /*****************************************************************/ RETCODE = SQLDriverConnect (hDbc , NULL , (SQLCHAR *)ConnStrIn , strlen(ConnStrIn) , (SQLCHAR *)ConnStrOut, sizeof(ConnStrOut) , &cbConnStrOut , SQL_DRIVER_NOPROMPT); ...