/**************************************************************************** ** (c) Copyright IBM Corp. 2007 All rights reserved. ** ** The following sample of source code ("Sample") is owned by International ** Business Machines Corporation or one of its subsidiaries ("IBM") and is ** copyrighted and licensed, not sold. You may use, copy, modify, and ** distribute the Sample in any form without payment to IBM, for the purpose of ** assisting you in the development of your applications. ** ** The Sample code is provided to you on an "AS IS" basis, without warranty of ** any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR ** IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do ** not allow for the exclusion or limitation of implied warranties, so the above ** limitations or exclusions may not apply to you. IBM shall not be liable for ** any damages you suffer as a result of using, copying, modifying or ** distributing the Sample, even if IBM has been advised of the possibility of ** such damages. ***************************************************************************** ** ** SOURCE FILE NAME: ininfo.c ** ** SAMPLE: Set and get information at the instance level ** ** DB2 APIs USED: ** db2CfgGet -- GET CONFIGURATION ** db2CfgSet -- SET CONFIGURATION ** sqlegins -- GET INSTANCE ** sqlectnd -- CATALOG NODE ** sqlenops -- OPEN NODE DIRECTORY SCAN ** sqlengne -- GET NEXT NODE DIRECTORY ENTRY ** sqlencls -- CLOSE NODE DIRECTORY SCAN ** sqleuncn -- UNCATALOG NODE ** sqlecadb -- CATALOG DATABASE ** db2DbDirOpenScan -- OPEN DATABASE DIRECTORY SCAN ** db2DbDirGetNextEntry -- GET NEXT DATABASE DIRECTORY ENTRY ** sqledcgd -- CHANGE DATABASE COMMENT ** db2DbDirCloseScan -- CLOSE DATABASE DIRECTORY SCAN ** sqleuncd -- UNCATALOG DATABASE ** sqlegdad -- ADD DCS DIRECTORY ENTRY ** sqlegdsc -- OPEN DCS DIRECTORY SCAN ** sqlegdge -- GET DCS DIRECTORY ENTRY ** sqlegdgt -- GET DCS DIRECTORY ENTRIES ** sqlegdcl -- CLOSE DCS DIRECTORY SCAN ** sqlegdel -- DELETE DCS DIRECTORY ENTRY ** sqlesdeg -- SET RUNTIME DEGREE ** ** STRUCTURES USED: ** sql_dir_entry ** sqle_node_struct ** sqle_node_tcpip ** sqlca ** sqledinfo ** sqleninfo ** ** ***************************************************************************** ** ** For more information on the sample programs, see the README file. ** ** For information on developing embedded SQL applications see the Developing Embedded SQL Applications book. ** ** For information on DB2 APIs, see the Administrative API Reference. ** ** For the latest information on programming, building, and running DB2 ** applications, visit the DB2 Information Center: ** http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp ****************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sqlutil.h> #include <db2ApiDf.h> #include <sqlenv.h> #include "utilapi.h" int CurrentLocalInstanceNameGet(void); int CurrentLocalNodeDirInfoSetGet(void); int CurrentLocalDatabaseDirInfoSetGet(void); int CurrentLocalDCSDirInfoSetGet(void); int LocalOrRemoteDbmConfigSetGet(void); int LocalOrRemoteDbmConfigDefaultsSetGet(void); int LocalOrRemoteRunTimeDegreeSet(void); /* support function */ int LocalOrRemoteDbmConfigSave(db2Cfg); int LocalOrRemoteDbmConfigRestore(db2Cfg); int main(int argc, char *argv[]) { int rc = 0; char nodeName[SQL_INSTNAME_SZ + 1]; char user[USERID_SZ + 1]; char pswd[PSWD_SZ + 1]; db2CfgParam cfgParameters[2]; /* to save the DBM Config. */ db2Cfg cfgStruct; /* initialize cfgStruct */ cfgStruct.numItems = 2; cfgStruct.paramArray = cfgParameters; cfgStruct.flags = db2CfgDatabaseManager | db2CfgDelayed; cfgStruct.dbname = NULL; /* check the command line arguments */ rc = CmdLineArgsCheck2(argc, argv, nodeName, user, pswd); if (rc != 0) { return rc; } printf("\nTHIS SAMPLE SHOWS HOW TO SET/GET INFO AT INSTANCE LEVEL.\n"); /* set/get info for the local instance that has as name */ /* the value of the environment variable DB2INSTANCE */ rc = CurrentLocalInstanceNameGet(); rc = CurrentLocalNodeDirInfoSetGet(); rc = CurrentLocalDatabaseDirInfoSetGet(); rc = CurrentLocalDCSDirInfoSetGet(); /* attach to a local or remote instance */ rc = InstanceAttach(nodeName, user, pswd); if (rc != 0) { return rc; } /* save DBM Config. */ rc = LocalOrRemoteDbmConfigSave(cfgStruct); if (rc != 0) { return rc; } /* work with DBM Config. */ rc = LocalOrRemoteDbmConfigSetGet(); /* restore DBM Config. */ rc = LocalOrRemoteDbmConfigRestore(cfgStruct); /* work with default DBM Config. */ rc = LocalOrRemoteDbmConfigDefaultsSetGet(); /* set the run time degree */ rc = LocalOrRemoteRunTimeDegreeSet(); /* detach from the local or remote instance */ rc = InstanceDetach(nodeName); if (rc != 0) { return rc; } return 0; } /* main */ int CurrentLocalInstanceNameGet(void) { struct sqlca sqlca; char currentLocalInstanceName[SQL_INSTNAME_SZ + 1]; printf("\n-----------------------------------------------------------"); printf("\nUSE THE DB2 API:\n"); printf(" sqlegins -- GET INSTANCE\n"); printf("TO GET THE CURRENT LOCAL INSTANCE NAME:\n"); /* get local instance */ sqlegins(currentLocalInstanceName, &sqlca); DB2_API_CHECK("CurrentLocalInstanceName -- Get"); printf("\n The current local instance name is: %s\n", currentLocalInstanceName); return 0; } /* CurrentLocalInstanceNameGet */ int CurrentLocalNodeDirInfoSetGet(void) { struct sqlca sqlca; struct sqle_node_struct newNode; struct sqle_node_tcpip TCPIPprotocol; unsigned short nodeDirHandle, nodeEntryNb, nbNodeEntries = 0; struct sqleninfo *nodeEntry; printf("\n-----------------------------------------------------------"); printf("\nUSE THE DB2 APIs:\n"); printf(" sqlectnd -- CATALOG NODE\n"); printf(" sqlenops -- OPEN NODE DIRECTORY SCAN\n"); printf(" sqlengne -- GET NEXT NODE DIRECTORY ENTRY\n"); printf(" sqlencls -- CLOSE NODE DIRECTORY SCAN\n"); printf(" sqleuncn -- UNCATALOG NODE\n"); printf("TO SET/GET THE LOCAL NODE DIRECTORY INFO.:\n"); strncpy(newNode.nodename, "newnode", SQL_NNAME_SZ + 1); strncpy(newNode.comment, "example of node comment", SQL_CMT_SZ + 1); newNode.struct_id = SQL_NODE_STR_ID; newNode.protocol = SQL_PROTOCOL_TCPIP; strncpy(TCPIPprotocol.hostname, "hostname", SQL_HOSTNAME_SZ + 1); strncpy(TCPIPprotocol.service_name, "servicename", SQL_SERVICE_NAME_SZ + 1); printf("\n Catalog the new node.\n"); printf("\n node name : %s\n", newNode.nodename); printf(" comment : %s\n", newNode.comment); printf(" structure identifier : SQL_NODE_STR_ID\n"); printf(" protocol : SQL_PROTOCOL_TCPIP\n"); printf(" hostname : %s\n", TCPIPprotocol.hostname); printf(" service name : %s\n", TCPIPprotocol.service_name); /* catalog node */ sqlectnd(&newNode, &TCPIPprotocol, &sqlca); DB2_API_CHECK("New Node -- Catalog"); /* open node directory */ printf("\n Open the node directory.\n"); /* open node directory scan */ sqlenops(&nodeDirHandle, &nbNodeEntries, &sqlca); DB2_API_CHECK("Node Directory -- Open"); /* read the node entries */ printf("\n Read the node directory.\n"); for (nodeEntryNb = 0; nodeEntryNb < nbNodeEntries; nodeEntryNb++) { /* get next node directory entry */ sqlengne(nodeDirHandle, &nodeEntry, &sqlca); DB2_API_CHECK("Node Directory -- Read"); /* printing out the node information on to the screen */ printf("\n node name : %.8s\n", nodeEntry->nodename); printf(" node comment : %.30s\n", nodeEntry->comment); printf(" node host name : %.30s\n", nodeEntry->hostname); printf(" node service name : %.14s\n", nodeEntry->service_name); switch (nodeEntry->protocol) { case SQL_PROTOCOL_LOCAL: printf(" node protocol : LOCAL\n"); break; case SQL_PROTOCOL_NPIPE: printf(" node protocol : NPIPE\n"); break; case SQL_PROTOCOL_SOCKS: printf(" node protocol : SOCKS\n"); break; case SQL_PROTOCOL_SOCKS4: printf(" node protocol : SOCKS4\n"); break; case SQL_PROTOCOL_TCPIP: printf(" node protocol : TCP/IP\n"); break; case SQL_PROTOCOL_TCPIP4: printf(" node protocol : TCP/IPv4\n"); break; case SQL_PROTOCOL_TCPIP6: printf(" node protocol : TCP/IPv6\n"); break; default: printf(" node protocol : \n"); break; } /* end switch */ } /* end for */ /* close node directory */ sqlencls(nodeDirHandle, &sqlca); DB2_API_CHECK("Node Directory -- Close"); printf("\n Uncatalog the node: %s\n", newNode.nodename); /* uncatalog node */ sqleuncn(newNode.nodename, &sqlca); DB2_API_CHECK("New Node -- Uncatalog"); return 0; } /* CurrentLocalNodeDirInfoSetGet */ int CurrentLocalDatabaseDirInfoSetGet(void) { struct sqlca sqlca; db2DbDirOpenScanStruct dbDirOpenParmStruct; db2DbDirCloseScanStruct dbDirCloseParmStruct; struct db2DbDirNextEntryStructV9 dbDirNextEntryParmStruct; struct db2DbDirInfoV9 *dbEntry = NULL; char dbName[] = "db_name"; char dbAlias[] = "db_alias"; unsigned char dbType = SQL_REMOTE; char nodeName[] = "nodename"; char *dbPath = NULL; char dbComment[] = "example of database comment"; db2Uint16 dbAuthentication = SQL_AUTHENTICATION_SERVER; char *dbDirPath = NULL; db2Uint16 dbDirHandle = 0; db2Uint16 dbEntryNb = 0; char changedDbComment[] = "the changed db comment"; db2Uint32 versionNumber = db2Version970; printf("\n-----------------------------------------------------------"); printf("\nUSE THE DB2 APIs:\n"); printf(" sqlecadb -- CATALOG DATABASE\n"); printf(" db2DbDirOpenScan -- OPEN DATABASE DIRECTORY SCAN\n"); printf(" db2DbDirGetNextEntry -- GET NEXT DATABASE DIRECTORY ENTRY\n"); printf(" sqledcgd -- CHANGE DATABASE COMMENT\n"); printf(" db2DbDirCloseScan -- CLOSE DATABASE DIRECTORY SCAN\n"); printf(" sqleuncd -- UNCATALOG DATABASE\n"); printf("TO SET/GET THE LOCAL DATABASE DIRECTORY INFO.:\n"); printf("\n Catalog the new database.\n"); printf("\n database name : %s\n", dbName); printf(" database alias : %s\n", dbAlias); printf(" type : SQL_REMOTE\n"); printf(" node name : %s\n", nodeName); printf(" path : NULL\n"); printf(" comment : %s\n", dbComment); printf(" authentication : SQL_AUTHENTICATION_SERVER\n"); /* catalog database */ sqlecadb(dbName, dbAlias, dbType, nodeName, dbPath, dbComment, dbAuthentication, NULL, &sqlca); /* ignore warning SQL1100W = node not cataloged, */ /* don't do the same in your code */ if (sqlca.sqlcode != 1100) { DB2_API_CHECK("Database -- Catalog"); } printf("\n Open the database directory.\n"); /* open database directory scan */ dbDirOpenParmStruct.piPath = dbDirPath; dbDirOpenParmStruct.oHandle = dbDirHandle; db2DbDirOpenScan(versionNumber, &dbDirOpenParmStruct, &sqlca); DB2_API_CHECK("Database Directory -- Open"); /* read the database entries */ printf("\n Read the database directory.\n"); dbDirNextEntryParmStruct.iHandle = dbDirHandle; dbDirNextEntryParmStruct.poDbDirEntry = dbEntry; for (dbEntryNb = 1; dbEntryNb <= dbDirOpenParmStruct.oNumEntries; dbEntryNb++) { /* get next database directory entry */ db2DbDirGetNextEntry(versionNumber, &dbDirNextEntryParmStruct, &sqlca); DB2_API_CHECK("Database Directory -- Read"); dbEntry = dbDirNextEntryParmStruct.poDbDirEntry; /* printing out the database information on to the screen */ printf("\n database alias : %.8s\n", dbEntry->alias); printf(" database name : %.8s\n", dbEntry->dbname); #if(defined(DB2NT)) printf(" database drive : %.12s\n", dbEntry->drive); #else /* UNIX */ printf(" database drive : %.215s\n", dbEntry->drive); #endif printf(" database subdirectory: %.8s\n", dbEntry->intname); printf(" node name : %.8s\n", dbEntry->nodename); printf(" database release type: %.20s\n", dbEntry->dbtype); printf(" database comment : %.30s\n", dbEntry->comment); switch (dbEntry->type) { case SQL_INDIRECT: printf(" database entry type : indirect\n"); break; case SQL_REMOTE: printf(" database entry type : remote\n"); break; case SQL_HOME: printf(" database entry type : home\n"); break; case SQL_DCE: printf(" database entry type : dce\n"); break; default: break; } switch (dbEntry->authentication) { case SQL_AUTHENTICATION_SERVER: printf(" authentication : SERVER\n"); break; case SQL_AUTHENTICATION_CLIENT: printf(" authentication : CLIENT\n"); break; case SQL_AUTHENTICATION_DCS: printf(" authentication : DCS\n"); break; default: break; } /* end switch */ } /* end for */ /* change the database comment for the new database */ printf("\n Change the new database comment to:\n"); printf(" %s\n", changedDbComment); /* change database comment */ sqledcgd(dbAlias, "", changedDbComment, &sqlca); DB2_API_CHECK("Database Comment -- Change"); /* close database directory */ dbDirCloseParmStruct.iHandle = dbDirHandle; db2DbDirCloseScan(versionNumber, &dbDirCloseParmStruct, &sqlca); DB2_API_CHECK("Database Directory -- Close"); printf("\n Uncatalog the database cataloged as: %s\n", dbAlias); /* uncatalog database */ sqleuncd(dbAlias, &sqlca); DB2_API_CHECK("Database -- Uncatalog"); return 0; } /* CurrentLocalDatabaseDirInfoSetGet */ int CurrentLocalDCSDirInfoSetGet(void) { struct sqlca sqlca; struct sql_dir_entry newDcsDbEntry; struct sql_dir_entry dcsDbEntry; short dcsDbEntryNb, nbDcsDbEntries = 0; struct sql_dir_entry *pAllDcsDbEntries; printf("\n-----------------------------------------------------------"); printf("\nUSE THE DB2 APIs:\n"); printf(" sqlegdad -- ADD DCS DIRECTORY ENTRY\n"); printf(" sqlegdsc -- OPEN DCS DIRECTORY SCAN\n"); printf(" sqlegdge -- GET DCS DIRECTORY ENTRY\n"); printf(" sqlegdgt -- GET DCS DIRECTORY ENTRIES\n"); printf(" sqlegdcl -- CLOSE DCS DIRECTORY SCAN\n"); printf(" sqlegdel -- DELETE DCS DIRECTORY ENTRY\n"); printf("TO SET/GET THE LOCAL DCS DIRECTORY INFO.:\n"); strcpy(newDcsDbEntry.ldb, "dcsAlias"); strcpy(newDcsDbEntry.tdb, "dcsDbName"); strcpy(newDcsDbEntry.comment, "dcsDb comment"); strcpy(newDcsDbEntry.ar, "appName"); strcpy(newDcsDbEntry.parm, ""); newDcsDbEntry.struct_id = SQL_DCS_STR_ID; printf("\n Catalog the new DCS database.\n"); printf("\n intermediate alias : %s\n", newDcsDbEntry.ldb); printf(" name : %s\n", newDcsDbEntry.tdb); printf(" comment : %s\n", newDcsDbEntry.comment); printf(" client app. name : %s\n", newDcsDbEntry.ar); /* catalog DCS database */ sqlegdad(&newDcsDbEntry, &sqlca); DB2_API_CHECK("New DCS Database -- Catalog"); printf("\n Open the DCS database directory.\n"); /* open DCS database directory */ sqlegdsc(&nbDcsDbEntries, &sqlca); DB2_API_CHECK("DCS Database Directory -- Open"); /* read a specific entry from the DCS database directory */ strcpy(dcsDbEntry.ldb, "dcsAlias"); strcpy(dcsDbEntry.tdb, ""); strcpy(dcsDbEntry.comment, ""); strcpy(dcsDbEntry.ar, ""); strcpy(dcsDbEntry.parm, ""); dcsDbEntry.struct_id = SQL_DCS_STR_ID; printf("\n Read the entry for the DCS database: %s\n", dcsDbEntry.ldb); /* get DCS directory entry for database */ sqlegdge(&dcsDbEntry, &sqlca); DB2_API_CHECK("DCS database entry -- read"); printf("\n intermediate alias : %.8s\n", dcsDbEntry.ldb); printf(" name : %.18s\n", dcsDbEntry.tdb); printf(" comment : %.30s\n", dcsDbEntry.comment); printf(" client app. name : %.32s\n", dcsDbEntry.ar); printf(" DCS parameters : %.50s\n", dcsDbEntry.parm); printf(" DCS release level : 0x%x\n", dcsDbEntry.release); if (nbDcsDbEntries > 0) { /* get DCS database directory entries */ pAllDcsDbEntries = (struct sql_dir_entry *)malloc(nbDcsDbEntries * (sizeof(struct sql_dir_entry))); printf("\n Read the DCS database directory.\n"); /* get DCS directory entries */ sqlegdgt(&nbDcsDbEntries, pAllDcsDbEntries, &sqlca); DB2_API_CHECK("DCS Database Directory -- Read"); /* print the DCS database entries */ for (dcsDbEntryNb = 0; dcsDbEntryNb < nbDcsDbEntries; dcsDbEntryNb++) { printf("\n intermediate alias : %.8s\n", pAllDcsDbEntries[dcsDbEntryNb].ldb); printf(" name : %.18s\n", pAllDcsDbEntries[dcsDbEntryNb].tdb); printf(" comment : %.30s\n", pAllDcsDbEntries[dcsDbEntryNb].comment); printf(" client app. name : %.32s\n", pAllDcsDbEntries[dcsDbEntryNb].ar); printf(" DCS parameters : %.50s\n", pAllDcsDbEntries[dcsDbEntryNb].parm); printf(" DCS release level : 0x%x\n", pAllDcsDbEntries[dcsDbEntryNb].release); } /* end for */ } free(pAllDcsDbEntries); /* close DCS directory */ sqlegdcl(&sqlca); DB2_API_CHECK("DCS Directory -- Close"); strcpy(newDcsDbEntry.ldb, "dcsAlias"); strcpy(newDcsDbEntry.tdb, ""); strcpy(newDcsDbEntry.comment, ""); strcpy(newDcsDbEntry.ar, ""); strcpy(newDcsDbEntry.parm, ""); newDcsDbEntry.struct_id = SQL_DCS_STR_ID; printf("\n Uncatalog the DCS database: %s\n", newDcsDbEntry.ldb); /* uncatalog DCS database */ sqlegdel(&newDcsDbEntry, &sqlca); DB2_API_CHECK("New DCS database -- Uncatalog"); return 0; } /* CurrentLocalDCSDirInfoSetGet */ int LocalOrRemoteDbmConfigSetGet(void) { struct sqlca sqlca; db2CfgParam cfgParameters[2]; db2Cfg cfgStruct; printf("\n-----------------------------------------------------------"); printf("\nUSE THE DB2 APIs:\n"); printf(" db2CfgSet -- SET CONFIGURATION\n"); printf(" db2CfgGet -- GET CONFIGURATION\n"); printf("TO SET/GET TWO DATABASE CONFIGURATION PARAMETERS:\n"); /* initialize cfgParameters */ cfgParameters[0].flags = 0; cfgParameters[0].token = SQLF_KTN_DFT_ACCOUNT_STR; cfgParameters[0].ptrvalue = (char *)malloc(sizeof(char) * (SQL_ACCOUNT_STR_SZ + 1)); cfgParameters[1].flags = 0; cfgParameters[1].token = SQLF_KTN_UDF_MEM_SZ; cfgParameters[1].ptrvalue = (char *)malloc(sizeof(unsigned short)); /* set two DBM Config. parameters */ strcpy(cfgParameters[0].ptrvalue, "accounting string suffix"); *(unsigned short *)(cfgParameters[1].ptrvalue) = 512; printf("\n Set the Database Configuration parameters:\n"); printf(" dft_account_str = %s\n", cfgParameters[0].ptrvalue); printf(" udf_mem_sz = %d\n", *(unsigned short *)(cfgParameters[1].ptrvalue)); /* initialize cfgStruct */ cfgStruct.numItems = 2; cfgStruct.paramArray = cfgParameters; cfgStruct.flags = db2CfgDatabaseManager | db2CfgDelayed; cfgStruct.dbname = NULL; /* set database manager configuration */ db2CfgSet(db2Version970, (void *)&cfgStruct, &sqlca); DB2_API_CHECK("DBM Config. -- Set"); /* get two DBM Config. fields */ strcpy(cfgParameters[0].ptrvalue, ""); *(unsigned short *)(cfgParameters[1].ptrvalue) = 0; printf("\n Get two Database Configuration parameters:\n"); /* get database manager configuration */ db2CfgGet(db2Version970, (void *)&cfgStruct, &sqlca); DB2_API_CHECK("DBM Config. -- Get"); printf(" dft_account_str = %s\n", cfgParameters[0].ptrvalue); printf(" udf_mem_sz = %d\n", *(unsigned short *)(cfgParameters[1].ptrvalue)); /* free the memory allocated */ free(cfgParameters[0].ptrvalue); free(cfgParameters[1].ptrvalue); return 0; } /* LocalOrRemoteDbmConfigSetGet */ int LocalOrRemoteDbmConfigDefaultsSetGet(void) { struct sqlca sqlca; db2CfgParam cfgParameters[2]; db2Cfg cfgStruct; char input; printf("\n-----------------------------------------------------------"); printf("\nUSE THE DB2 APIs:\n"); printf(" db2CfgSet -- SET CONFIGURATION\n"); printf(" db2CfgGet -- GET CONFIGURATION\n"); printf("TO SET/GET DATABASE MANAGER CONFIGURATION DEFAULTS:\n"); /* initialize cfgParameters */ cfgParameters[0].flags = 0; cfgParameters[0].token = SQLF_KTN_DFT_ACCOUNT_STR; cfgParameters[0].ptrvalue = (char *)malloc(sizeof(char) * (SQL_ACCOUNT_STR_SZ + 1)); cfgParameters[1].flags = 0; cfgParameters[1].token = SQLF_KTN_UDF_MEM_SZ; cfgParameters[1].ptrvalue = (char *)malloc(sizeof(unsigned short)); /* get two Database Manager Configuration defaults */ strcpy(cfgParameters[0].ptrvalue, ""); *(unsigned short *)(cfgParameters[1].ptrvalue) = 0; /* initialize cfgStruct */ cfgStruct.numItems = 2; cfgStruct.paramArray = cfgParameters; cfgStruct.flags = db2CfgDatabaseManager | db2CfgGetDefaults; cfgStruct.dbname = NULL; printf("\n Get two Database Manager Configuration defaults:\n"); /* get database manager configuration defaults */ db2CfgGet(db2Version970, (void *)&cfgStruct, &sqlca); DB2_API_CHECK("DBM Config. Defaults -- Get"); printf(" dft_account_str = %s\n", cfgParameters[0].ptrvalue); printf(" udf_mem_sz = %d\n", *(unsigned short *)(cfgParameters[1].ptrvalue)); /* warning for reset of DBM Congif. */ printf("\n Warning: We are now about to set all Database Manager\n"); printf(" Configuration parameters to default using the db2CfgSet API.\n"); printf(" After running this API, some of the non-default user\n"); printf(" settings and those set by the installation program will\n"); printf(" be changed accordingly, and will not be restored by\n"); printf(" this program. A text file, dbmcfg.TXT, will be generated\n"); printf(" in the current directory for all the settings before\n"); printf(" execution of this API. The user is required to restore the\n"); printf(" settings manually.\n"); printf("\n"); printf(" Would you like to run this API?(y/n) "); /* get user input */ input = getchar(); if (input == 'y') { /* save DBM Config. to a text file */ system("db2 get dbm cfg >dbmcfg.TXT"); printf("\n Set all Database Manger Configuration parameters"); printf(" to default:\n"); /* initialize cfgStruct */ cfgStruct.numItems = 0; cfgStruct.paramArray = NULL; cfgStruct.flags = db2CfgDatabaseManager | db2CfgReset | db2CfgDelayed; cfgStruct.dbname = NULL; /* set all Database Manager Configuration defaults */ db2CfgSet(db2Version970, (void *)&cfgStruct, &sqlca); DB2_API_CHECK("DBM Config. defaults -- Set"); printf("\n All Database manager Configuration parameters"); printf(" are set to default.\n"); } /* free the memory allocated */ free(cfgParameters[0].ptrvalue); free(cfgParameters[1].ptrvalue); return 0; } /* LocalOrRemoteDbmConfigDefaultsSetGet */ int LocalOrRemoteRunTimeDegreeSet(void) { struct sqlca sqlca; sqlint32 runTimeDegree; printf("\n-----------------------------------------------------------"); printf("\nUSE THE DB2 API:\n"); printf(" sqlesdeg -- SET RUNTIME DEGREE\n"); printf("TO SET THE RUN TIME DEGREE:\n"); /* set the run time degree */ runTimeDegree = 4; printf("\n Set the run time degree to the value: %d\n", runTimeDegree); /* set runtimr degree */ sqlesdeg(SQL_ALL_USERS, NULL, runTimeDegree, &sqlca); DB2_API_CHECK("Run Time Degree -- Set"); return 0; } /* LocalOrRemoteRunTimeDegreeSet */ int LocalOrRemoteDbmConfigSave(db2Cfg cfgStruct) { struct sqlca sqlca; /* initialize paramArray */ cfgStruct.paramArray[0].flags = 0; cfgStruct.paramArray[0].token = SQLF_KTN_DFT_ACCOUNT_STR; cfgStruct.paramArray[0].ptrvalue = (char *)malloc(sizeof(char) * (SQL_ACCOUNT_STR_SZ + 1)); cfgStruct.paramArray[1].flags = 0; cfgStruct.paramArray[1].token = SQLF_KTN_UDF_MEM_SZ; cfgStruct.paramArray[1].ptrvalue = (char *)malloc(sizeof(unsigned short)); /* get two Config. Parameters */ strcpy(cfgStruct.paramArray[0].ptrvalue, ""); strcpy(cfgStruct.paramArray[1].ptrvalue, ""); printf("\n******* SAVE DATABASE MANAGER CONFIGURATION **********\n"); /* get database manager configuration */ db2CfgGet(db2Version970, (void *)&cfgStruct, &sqlca); DB2_API_CHECK("DBM Config. -- Save"); return 0; } /* LocalOrRemoteDbmConfigSave */ int LocalOrRemoteDbmConfigRestore(db2Cfg cfgStruct) { struct sqlca sqlca; printf("\n******* RESTORE DATABASE MANAGER CONFIGURATION *******\n"); /* set database manager configuration */ db2CfgSet(db2Version970, (void *)&cfgStruct, &sqlca); DB2_API_CHECK("DBM Config. -- Restore"); free(cfgStruct.paramArray[0].ptrvalue); free(cfgStruct.paramArray[1].ptrvalue); return 0; } /* LocalOrRemoteDbmConfigRestore */