/****************************************************************************
** (c) 版权所有 IBM Corp. 2007 保留所有权利。
**
** 以下源代码示例("示例")属于国际
** 商业机器公司或其子公司之一(" IBM "),并且是
** 有版权和许可证,不得出售。 您可以使用、复制、修改和
** 在不向 IBM 付费的情况下,以任何形式分发样品,目的是
** 协助您开发应用程序。
**
** 示例代码是在 "原样 "的基础上提供给您的,不对以下方面作出保证
** 任何一种。 IBM 在此,本公司明确声明不作任何保证,无论是明示的还是
** 默示保证,包括但不限于以下默示保证
** 适销性和特定用途的适用性。 一些辖区确实
** 不允许排除或限制默示保证,因此上述
** 限制或排除条款可能不适用于您。 IBM SHALL NOT BE LIABLE FOR
** 您因使用、复制、修改或执行以下行为而遭受的任何损失
** 分发样品,即使 IBM 已被告知可能出现以下情况
** 此类损害赔偿。
*****************************************************************************
**
** 源文件名称: ininfo.C
**
** 示例:在实例级别设置和获取信息
**
** DB2 使用的应用程序接口:
** db2CfgGet -- 获取配置
** db2CfgSet -- 设置配置
** sqlecadb -- 目录数据库
** sqlectnd -- 目录节点
** sqledcgd -- 更改数据库注释
** db2DbDirCloseScan -- 关闭数据库目录扫描
** db2DbDirGetNextEntry -- 获取下一个数据库目录条目
** db2DbDirOpenScan -- 打开数据库目录扫描
** sqlegdad -- ADD DCS DIRECTORY ENTRY
** sqlegdcl -- 关闭 DCS 目录扫描
** sqlegdel -- 删除 DCS 目录项
** sqlegdge -- GET DCS DIRECTORY ENTRY
** sqlegdgt -- 获取 DCS 目录条目
** sqlegdsc -- 打开 DCS 目录扫描
** sqlegins -- GET INSTANCE
** sqlencls -- 关闭节点目录扫描
** sqlengne -- GET NEXT NODE DIRECTORY ENTRY
** sqlenops -- 打开节点目录扫描
** sqlesdeg -- 设置运行时间度数
** sqleuncn -- UNCATALOG NODE
** sqleuncd -- UNCATALOG DATABASE
**
** 使用的结构:
** sql_dir_entry
** sqle_node_struct
** sqle_node_tcpip
** sqlca
** sqledinfo
** sqleninfo
**
**
*****************************************************************************
**
** 有关示例程序的更多信息,请参阅 README 文件。
**
** 有关开发嵌入式 SQL 应用程序的信息,请参阅《开发嵌入式 SQL 应用程序》一书。
**
** 有关 DB2 API 的信息,请参阅《管理 API 参考》。
**
** 有关编程、编译和运行的最新信息 DB2
** 申请请访问 DB2 信息中心,网址为
** http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp
****************************************************************************/
#include <string.h>
#include <stdlib.h>
#include <sqlutil.h>
#include <db2ApiDf.h>
#include <sqlenv.h>
#include " utilapi.h "
#if ((__cplusplus >= 199711L ) &&!定义了 DB2HP &&!定义了 DB2AIX )|| \
( DB2LINUX && ( __LP64__ || (__gnuc__ >= 3)) ) )
#include <iostream>
using namespace std;
#else
#include < iostream.h >
#endif
类 InInfo
{
public:
int CurrentLocalInstanceNameGet( );
int CurrentLocalNodeDirInfoSetGet( );
int CurrentLocalDatabaseDirInfoSetGet( );
int CurrentLocalDCSDirInfoSetGet( );
// 支持功能
int LocalOrRemoteDbmConfigSave(db2Cfg );
int LocalOrRemoteDbmConfigRestore(db2Cfg );
int LocalOrRemoteDbmConfigSetGet( );
int LocalOrRemoteDbmConfigDefaultsSetGet( );
int LocalOrRemoteRunTimeDegreeSet( );
private:
// 辅助功能
void strnout(char *, int);
};
int InInfo::CurrentLocalInstanceNameGet( )
{
struct sqlca sqlca;
char currentLocalInstanceName[SQL_INSTNAME_SZ + 1];
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE DB2 API:" << endl;
cout << " sqlegins -- GET INSTANCE" << endl;
cout << "TO GET THE CURRENT LOCAL INSTANCE NAME:" << endl;
// 获取本地实例
sqlegins( currentLocalInstanceName, &sqlca);
DB2_API_CHECK("CurrentLocalInstanceName -- 获取");
cout << "\n 当前本地实例名称是:";
strnout( currentLocalInstanceName, SQL_INSTNAME_SZ);
return 0;
} //InInfo::CurrentLocalInstanceNameGet
int InInfo::CurrentLocalNodeDirInfoSetGet( )
{
struct sqlca sqlca;
结构 sqle_node_struct newNode;
struct sqle_node_tcpip TCPIPprotocol;
无符号短 nodeDirHandle, nodeEntryNb, nbNodeEntries = 0;
结构 sqleninfo *nodeEntry;
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE DB2 APIs:" << endl;
cout << " sqlectnd -- CATALOG NODE" << endl;
cout << " sqlenops -- OPEN NODE DIRECTORY SCAN" << endl;
cout << " sqlengne -- GET NEXT NODE DIRECTORY ENTRY" << endl;
cout << " sqlencls -- 关闭节点目录扫描" << endl;
cout << " sqleuncn -- UNCATALOG NODE" << endl;
cout << "TO SET/GET THE LOCAL NODE DIRECTORY INFO.: " << endl;
// --------------- 新节点编目 ----------------------------
strncpy( newNode.nodename, "newnode", SQL_NNAME_SZ + 1);
strncpy( newNode.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、
"服务名称"、
sql_service_name_sz + 1);
cout << "\n 编目新节点。" << endl;
cout << "\n 节点名称 : " << newNode.nodename << endl;
cout << " comment : " << newNode.comment << endl;
cout << " 结构标识符:SQL_NODE_STR_ID" << endl;
cout << " 协议:SQL_PROTOCOL_TCPIP" << endl;
cout << " hostname : " << TCPIPprotocol.hostname << endl;
cout << " 服务名称 : " << TCPIPprotocol.service_name
<< endl;
// 对节点进行编目
sqlectnd( &newNode, &TCPIPprotocol, &sqlca);
DB2_API_CHECK( "新节点 -- 目录");
// ------------- 读取节点目录 ---------------------------
cout << "\n Open the node directory." << endl;
// 打开节点目录扫描
sqlenops( &nodeDirHandle, &nbNodeEntries, &sqlca);
DB2_API_CHECK( "节点目录 - 开放");
// 读取节点条目
cout << "\n Read the node directory." << endl;
for ( nodeEntryNb = 0; nodeEntryNb < nbNodeEntries; nodeEntryNb++ )
{
// 获取下一个节点目录条目
sqlengne( nodeDirHandle, &nodeEntry, &sqlca);
DB2_API_CHECK( "节点目录 -- 读取");
// 将节点信息打印到屏幕上
cout << "\n 节点名称 : ";
strnout( nodeEntry->nodename, 8);
cout << " 节点注释 : ";
strnout( nodeEntry->comment, 30);
cout << " 节点主机名 : ";
strnout( nodeEntry->hostname, 30);
cout << " 节点服务名称 : ";
strnout( nodeEntry->service_name, 14);
开关 ( nodeEntry->protocol )
{
情况 SQL_PROTOCOL_LOCAL:
cout << " 节点协议:LOCAL" << endl;
break;
案例 SQL_PROTOCOL_NPIPE:
cout << " 节点协议:NPIPE" << endl;
break;
案例 SQL_PROTOCOL_SOCKS:
cout << " 节点协议:SOCKS" << endl;
break;
个案 SQL_PROTOCOL_SOCKS4:
cout << " 节点协议 : SOCKS4 " << endl;
break;
案例 SQL_PROTOCOL_TCPIP:
cout << " 节点协议:TCP/IP" << endl;
break;
个案 SQL_PROTOCOL_TCPIP4:
cout << " 节点协议 : TCP/IPv4 " << endl;
break;
个案 SQL_PROTOCOL_TCPIP6:
cout << " 节点协议 : TCP/IPv6 " << endl;
break;
缺省值:
cout << " 节点协议 : " << endl;
break;
}//切换
}//为
// 关闭节点目录扫描
sqlencls( nodeDirHandle, &sqlca);
DB2_API_CHECK( "节点目录 - 关闭");
// ------------- 取消新节点的目录 ----------------------------
cout << "\n Uncatalog the node:" << newNode.nodename << endl;
// 取消节点目录
sqleuncn( newNode.nodename, &sqlca);
DB2_API_CHECK( "新节点 - 未编目");
return 0;
} //InInfo::CurrentLocalNodeDirInfoSetGet
int InInfo::CurrentLocalDatabaseDirInfoSetGet( )
{
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[ ] = "数据库注释示例";
unsigned short dbAuthentication = SQL_AUTHENTICATION_SERVER;
char *dbDirPath = NULL;
db2Uint16 dbDirHandle = 0;
db2Uint16 dbEntryNb = 0;
char changedDbComment[ ] = "已更改的数据库注释";
db2Uint32 versionNumber = db2Version970;
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE DB2 APIs:" << endl;
cout << " sqlecadb -- 目录数据库" << endl;
cout << " db2DbDirOpenScan -- OPEN DATABASE DIRECTORY SCAN" << endl;
cout << " db2DbDirGetNextEntry -- GET NEXT DATABASE DIRECTORY ENTRY" << endl;
cout << " sqledcgd -- 更改数据库注释 " << endl;
cout << " db2DbDirCloseScan -- 关闭数据库目录扫描" << endl;
cout << " sqleuncd -- UNCATALOG DATABASE" << endl;
cout << "TO SET/GET THE LOCAL DATABASE DIRECTORY INFO.: " << endl;
// --------------- 新数据库编目 ------------------------
cout << "\n 编目新数据库。" << endl;
cout << "\n 数据库名称 : " << dbName << endl;
cout << " 数据库别名 : " << dbAlias << endl;
cout << " type : SQL_REMOTE" << endl;
cout << " 节点名称 : " << nodeName << endl;
cout << " path : NULL" << endl;
cout << " comment : " << dbComment << endl;
cout << " 验证 : SQL_AUTHENTICATION_SERVER" << endl;
// 目录数据库
sqlecadb( dbName,
dbAlias,
dbType,
nodeName,
dbPath,
dbComment,
dbAuthentication,
NULL,
&sqlca);
// 忽略警告 SQL1100W = 节点未编目、
// 不要在你的代码中做同样的事情
if ( sqlca.sqlcode!= 1100)
{
DB2_API_CHECK( "数据库 - 目录");
}
// ------------- 读取数据库目录 -----------------------
cout << "\n Open the database directory." << endl;
// 打开数据库目录扫描
dbDirOpenParmStruct.piPath = dbDirPath;
dbDirOpenParmStruct.oHandle = dbDirHandle;
db2DbDirOpenScan(versionNumber,
&dbDirOpenParmStruct,
&sqlca);
DB2_API_CHECK( "数据库目录 - 开放");
// 读取数据库条目
cout << "\n Read the database directory." << endl;
dbDirNextEntryParmStruct.iHandle = dbDirHandle;
dbDirNextEntryParmStruct.poDbDirEntry = dbEntry;
for ( dbEntryNb = 1; dbEntryNb <= dbDirOpenParmStruct.oNumEntries; dbEntryNb++ )
{
// 获取下一个数据库目录条目
db2DbDirGetNextEntry(versionNumber,
&dbDirNextEntryParmStruct,
&sqlca);
DB2_API_CHECK( "数据库目录 -- 读取");
dbEntry = dbDirNextEntryParmStruct.poDbDirEntry;
// 将数据库信息打印到屏幕上
cout << "\n 数据库别名 : ";
strnout( dbEntry->alias, 8);
cout << " 数据库名称 : ";
strnout( dbEntry->dbname, 8);
#if (defined( DB2NT ))
cout << " 数据库驱动器 : ";
strnout( dbEntry->drive, 12);
#else //UNIX
cout << " 数据库驱动器 : ";
strnout( dbEntry->drive, 215);
#endif
cout << " 数据库子目录:";
strnout( dbEntry->intname, 8);
cout << " 节点名称 : ";
strnout( dbEntry->nodename, 8);
cout << " 数据库发布类型:";
strnout( dbEntry->dbtype, 20);
cout << " 数据库注释 : ";
strnout( dbEntry->comment, 30);
开关 ( dbEntry->type )
{
案例 SQL_INDIRECT:
cout << " 数据库条目类型:间接" << endl;
break;
案例 SQL_REMOTE:
cout << " 数据库条目类型:远程" << endl;
break;
情况 SQL_HOME:
cout << " 数据库条目类型:主页" << endl;
break;
案例 SQL_DCE:
cout << " 数据库条目类型:dce" << endl;
break;
缺省值:
break;
}
开关 ( dbEntry->authentication )
{
案例 SQL_AUTHENTICATION_SERVER:
cout << " 验证 : SERVER" << endl;
break;
案例 SQL_AUTHENTICATION_CLIENT:
cout << " 验证 : CLIENT" << endl;
break;
案例 SQL_AUTHENTICATION_DCS:
cout << " 验证 : DCS" << endl;
break;
缺省值:
break;
}//切换
}//为
// 更改新数据库的数据库注释
cout << "\n 将新数据库注释更改为:" << endl;
cout << " " << changedDbComment << endl;
// 更改数据库注释
sqledcgd( dbAlias, "", changedDbComment, &sqlca);
DB2_API_CHECK( "数据库评论 - 更改");
// 关闭数据库目录扫描
dbDirCloseParmStruct.iHandle = dbDirHandle;
db2DbDirCloseScan(versionNumber,
&dbDirCloseParmStruct,
&sqlca);
DB2_API_CHECK( "数据库目录 - 关闭");
// ------------- 取消新数据库的编目 ------------------------
cout << "\n Uncatalog the database cataloged as:" << dbAlias << endl;
// 取消数据库编目
sqleuncd( dbAlias, &sqlca);
DB2_API_CHECK( "数据库 -- 非目录");
return 0;
} //InInfo::CurrentLocalDatabaseDirInfoSetGet
int InInfo::CurrentLocalDCSDirInfoSetGet( )
{
struct sqlca sqlca;
struct sql_dir_entry newDcsDbEntry;
struct sql_dir_entry dcsDbEntry;
短 dcsDbEntryNb, nbDcsDbEntries = 0;
struct sql_dir_entry *pAllDcsDbEntries;
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE DB2 APIs:" << endl;
cout << " sqlegdad -- ADD DCS DIRECTORY ENTRY" << endl;
cout << " sqlegdsc -- OPEN DCS DIRECTORY SCAN" << endl;
cout << " sqlegdge -- GET DCS DIRECTORY ENTRY" << endl;
cout << " sqlegdgt -- GET DCS DIRECTORY ENTRIES" << endl;
cout << " sqlegdcl -- 关闭 DCS 目录扫描" << endl;
cout << " sqlegdel -- DELETE DCS DIRECTORY ENTRY" << endl;
cout << "TO SET/GET THE LOCAL DCS DIRECTORY INFO.: " << endl;
// --------------- 编目新的 DCS 数据库 --------------------
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;
cout << "\n 编录新的 DCS 数据库。" << endl;
cout << "\n 中间别名 : " << newDcsDbEntry.ldb << endl;
cout << " name : " << newDcsDbEntry.tdb << endl;
cout << " comment : " << newDcsDbEntry.comment << endl;
cout << " 客户端应用程序。 name : " << newDcsDbEntry.ar << endl;
// 编目 DCS 数据库
sqlegdad( &newDcsDbEntry, &sqlca);
DB2_API_CHECK( "新的 DCS 数据库 -- 目录");
// ------------- 读取 DCS 数据库目录 -------------------
cout << "\n Open the DCS database directory." << endl;
// 打开 DCS 数据库目录
sqlegdsc( &nbDcsDbEntries, &sqlca);
DB2_API_CHECK( "DCS数据库目录 -- 开放");
// 从 DCS 数据库目录中读取特定条目
strcpy( dcsDbEntry.ldb, "dcsAlias" );
strcpy( dcsDbEntry.tdb, "");
strcpy( dcsDbEntry.comment, "");
strcpy( dcsDbEntry.ar, "");
strcpy( dcsDbEntry.parm, "");
dcsDbEntry.struct_id = SQL_DCS_STR_ID;
cout << "\n Read the entry for the DCS database:"
<< dcsDbEntry.ldb << endl;
// 获取数据库的 DCS 目录条目
sqlegdge( &dcsDbEntry, &sqlca);
DB2_API_CHECK( "DCS数据库条目--已读");
cout << "\n 中间别名 : ";
strnout( dcsDbEntry.ldb,8);
cout << " name : ";
strnout( dcsDbEntry.tdb, 18);
cout << " comment : ";
strnout( dcsDbEntry.comment, 30);
cout << " 客户端应用程序。 名称:"......";
strnout( dcsDbEntry.ar, 32);
cout << " DCS 参数 : ";
strnout( dcsDbEntry.parm, 48);
cout << " DCS 发布级别 : 0x "
<< hex << dcsDbEntry.release << endl;
if ( nbDcsDbEntries > 0)
{
pAllDcsDbEntries = new sql_dir_entry[ ]; nbDcsDbEntries
cout << "\n Read the DCS database directory." << endl;
// 获取 DCS 数据库目录条目
sqlegdgt( &nbDcsDbEntries, pAllDcsDbEntries, &sqlca);
DB2_API_CHECK( "DCS数据库目录--读取");
// 打印 DCS 数据库条目
for ( dcsDbEntryNb = 0; dcsDbEntryNb < nbDcsDbEntries; dcsDbEntryNb++ )
{
cout << "\n 中间别名 : ";
strnout( pAllDcsDbEntries[dcsDbEntryNb ].ldb, 8);
cout << " name : ";
strnout( pAllDcsDbEntries[dcsDbEntryNb ].tdb, 18);
cout << " comment : ";
strnout( pAllDcsDbEntries[dcsDbEntryNb ].comment, 30);
cout << " 客户端应用程序。 名称:"......";
strnout( pAllDcsDbEntries[dcsDbEntryNb ].ar, 32);
cout << " DCS 参数 : ";
strnout( pAllDcsDbEntries[dcsDbEntryNb ].parm, 48);
cout << " DCS 发布级别 : 0x "
<< hex << pAllDcsDbEntries[dcsDbEntryNb ].release << endl;
}//为
}
删去 pAllDcsDbEntries;
// 关闭 DCS 目录扫描
sqlegdcl(&sqlca);
DB2_API_CHECK( "DCS目录 - 关闭");
// ------------- 取消新 DCS 数据库的编目 --------------------
strcpy( newDcsDbEntry.ldb, "dcsAlias" );
strcpy( newDcsDbEntry.tdb, "");
strcpy( newDcsDbEntry.comment, "");
strcpy( newDcsDbEntry.ar, "");
strcpy( newDcsDbEntry.parm, "");
newDcsDbEntry.struct_id = SQL_DCS_STR_ID;
cout << "\n Uncatalog the DCS database:" << newDcsDbEntry.ldb << endl;
// 取消目录 DCS 数据库
sqlegdel( &newDcsDbEntry, &sqlca);
DB2_API_CHECK( "新的 DCS 数据库 -- Uncatalog");
return 0;
} //InInfo::CurrentLocalDCSDirInfoSetGet
int InInfo::LocalOrRemoteDbmConfigSave(db2Cfg cfgStruct )
{
struct sqlca sqlca;
// 初始化 paramArray
cfgStruct.paramArray[0 ].flags = 0;
cfgStruct.paramArray[0 ].token = SQLF_KTN_DFT_ACCOUNT_STR;
cfgStruct.paramArray[0 ].ptrvalue = new 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 *)new unsigned short;
cout << "\n******* SAVE DATABASE MANAGER CONFIGURATION **********" << endl;
// 获取数据库管理器配置
db2CfgGet(db2Version970, (void *)&cfgStruct, &sqlca);
DB2_API_CHECK( "DBM配置。 -- 保存");
return 0;
} //InInfo::LocalOrRemoteDbmConfigSave
int InInfo::
LocalOrRemoteDbmConfigRestore(db2Cfg cfgStruct)
{
struct sqlca sqlca;
cout << "\n****** RESTORE DATABASE MANAGER CONFIGURATION ******" << endl;
// 更新数据库管理器配置
db2CfgSet(db2Version970, (void *)&cfgStruct, &sqlca);
DB2_API_CHECK( "DBM配置。 -- 还原");
删除 [] cfgStruct.paramArray[0 ].ptrvalue;
删除 [] cfgStruct.paramArray[1 ].ptrvalue;
return 0;
} //InInfo::LocalOrRemoteDbmConfigRestore
int InInfo::LocalOrRemoteDbmConfigSetGet( )
{
struct sqlca sqlca;
db2CfgParam cfgParameters[2];
db2Cfg cfgStruct;
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE DB2 APIs:" << endl;
cout << " db2CfgSet -- 设置配置" << endl;
cout << " db2CfgGet -- GET CONFIGURATION" << endl;
cout << "TO SET/GET DATABASE MANAGER CONFIGURATION PARAMETERS:" << endl;
// 初始化 cfgParameters
cfgParameters[0 ].flags = 0;
cfgParameters[0 ].token = SQLF_KTN_DFT_ACCOUNT_STR;
cfgParameters[0 ].ptrvalue = new char[SQL_ACCOUNT_STR_SZ + 1];
cfgParameters[1 ].flags = 0;
cfgParameters[1 ].token = SQLF_KTN_UDF_MEM_SZ;
cfgParameters[1 ].ptrvalue = (char *)new unsigned short;
// 设置两个数据库配置参数
strcpy( cfgParameters[0 ].ptrvalue,"会计字符串后缀");
*(unsigned short *)( cfgParameters[1 ].ptrvalue) = 512;
cout << "\n 设置数据库管理器配置参数:" << endl;
cout << " dft_account_str = " << cfgParameters[0 ].ptrvalue << endl;
cout << " udf_mem_sz = " << dec
<< *(unsigned short *)( cfgParameters[1 ].ptrvalue) << endl;
// 初始化 cfgStruct
cfgStruct.numItems = 2;
cfgStruct.paramArray = cfgParameters;
cfgStruct.flags = db2CfgDatabaseManager | db2CfgDelayed;
cfgStruct.dbname = NULL;
// 设置数据库管理器配置
db2CfgSet(db2Version970, (void *)&cfgStruct, &sqlca);
DB2_API_CHECK( "DBM配置。 -- 设置");
// 获得两个 DBM 配置。 字段
strcpy( cfgParameters[0 ].ptrvalue, "");
*(unsigned short *)( cfgParameters[1 ].ptrvalue) = 0;
cout << "\n Get two Database Manager Configuration parameters:" << endl;
// 获取数据库管理器配置
db2CfgGet(db2Version970, (void *)&cfgStruct, &sqlca);
DB2_API_CHECK( "DBM 配置。 -- 获取");
cout << " dft_account_str = " << cfgParameters[0 ].ptrvalue << endl;
cout << " udf_mem_sz = "
<< *(unsigned short *)( cfgParameters[1 ].ptrvalue) << endl;
// 释放已分配的内存
删除 [] cfgParameters[0 ].ptrvalue;
删除 [] cfgParameters[1 ].ptrvalue;
return 0;
} //InInfo::LocalOrRemoteDbmConfigSetGet
int InInfo::LocalOrRemoteDbmConfigDefaultsSetGet( )
{
struct sqlca sqlca;
db2CfgParam cfgParameters[2];
db2Cfg cfgStruct;
char input;
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE DB2 APIs:" << endl;
cout << " db2CfgSet -- 设置配置" << endl;
cout << " db2CfgGet -- GET CONFIGURATION" << endl;
cout << "TO SET/GET DATABASE MANAGER CONFIGURATION DEFAULTS:" << endl;
// 初始化 cfgParameters
cfgParameters[0 ].flags = 0;
cfgParameters[0 ].token = SQLF_KTN_DFT_ACCOUNT_STR;
cfgParameters[0 ].ptrvalue = new char[SQL_ACCOUNT_STR_SZ + 1];
cfgParameters[1 ].flags = 0;
cfgParameters[1 ].token = SQLF_KTN_UDF_MEM_SZ;
cfgParameters[1 ].ptrvalue = (char *)new unsigned short;
// 获得两个 DBM 配置。 缺省值
strcpy( cfgParameters[0 ].ptrvalue, "");
*(unsigned short *)( cfgParameters[1 ].ptrvalue) = 0;
// 初始化 cfgStruct
cfgStruct.numItems = 2;
cfgStruct.paramArray = cfgParameters;
cfgStruct.flags = db2CfgDatabaseManager | db2CfgGetDefaults;
cfgStruct.dbname = NULL;
cout << "\n Get two Database Manager Configuration defaults:" << endl;
// 获取数据库管理器配置默认值
db2CfgGet(db2Version970, (void *)&cfgStruct, &sqlca);
DB2_API_CHECK( "DBM配置"。 默认值 -- 获取");
cout << " dft_account_str = " << cfgParameters[0 ].ptrvalue << endl;
cout << " udf_mem_sz = "
<< *(unsigned short *)( cfgParameters[1 ].ptrvalue) << endl;
/* 重置 DBM 时发出警告 Congif. */
cout << endl;
cout << " 警告:We are now about to set all Database Manager\n"
" 使用 API 默认配置参数, db2CfgSet.\n "
" 运行此应用程序接口后,一些非默认用户/n"
"设置和安装程序的设置"
"将被相应更改,并且不会被恢复
"这个计划。 将生成一个文本文件 dbmcfg.TXT "
" 在当前目录下的所有设置 before\n"
"执行该应用程序接口。 用户需要恢复"
" 设置 manually.\n ";
cout << endl;
cout << " 您想运行此 API 吗?
// 获取用户输入
cin >> 输入;
如果 (输入 == 'y')
{
// 保存 DBM 配置。 到文本文件中
system(" db2 get dbm cfg > dbmcfg.TXT ");
// 设置所有 DBM 配置。 缺省值
cout << "\n 设置所有数据库管理器配置参数";
cout << " 改为默认值。" << endl;
// 初始化 cfgStruct
cfgStruct.numItems = 0;
cfgStruct.paramArray = NULL;
cfgStruct.flags = db2CfgDatabaseManager | db2CfgReset | db2CfgDelayed;
cfgStruct.dbname = NULL;
// 重置数据库管理器配置
db2CfgSet(db2Version970, (void *)&cfgStruct, &sqlca);
DB2_API_CHECK( "DBM配置"。 默认 - 设置");
cout << "\n All Database Manager Configuration parameters";
cout << " 设置为默认值。" << endl;
}
// 释放已分配的内存
删除 [] cfgParameters[0 ].ptrvalue;
删除 [] cfgParameters[1 ].ptrvalue;
return 0;
} //InInfo::LocalOrRemoteDbmConfigDefaultsSetGet
int InInfo::LocalOrRemoteRunTimeDegreeSet( )
{
struct sqlca sqlca;
sqlint32 runTimeDegree;
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE DB2 API:" << endl;
cout << " sqlesdeg -- SET RUNTIME DEGREE" << endl;
cout << "TO SET THE RUN TIME DEGREE:" << endl;
// 设置运行时间度数
runTimeDegree = 4;
cout << "\n 将运行时间度设置为值:"
<< runTimeDegree << endl;
// 设置运行度
sqlesdeg(SQL_ALL_USERS, NULL, runTimeDegree, &sqlca);
DB2_API_CHECK( "运行时间度 - 设置");
return 0;
} //InInfo::LocalOrRemoteRunTimeDegreeSet
void InInfo::strnout(char *str, int n)
{
for (int i = 0; (i < n) && (str[i]!= '\0'); cout << str[i++]);
cout << endl;
return;
} //InInfo::strnout
int main(int argc, char *argv[])
{
int rc = 0;
CmdLineArgs 检查;
InInfo 信息
实例 inst;
db2CfgParam cfgParameters[2 ]; // 保存 DBM 配置。
db2Cfg cfgStruct;
// 初始化 cfgStruct
cfgStruct.numItems = 2;
cfgStruct.paramArray = cfgParameters;
cfgStruct.flags = db2CfgDatabaseManager | db2CfgDelayed;
cfgStruct.dbname = NULL;
// 检查命令行参数
rc = check.CmdLineArgsCheck2(argc, argv, inst);
如果 (rc!= 0)
{
return rc;
}
cout << ""\nTHIS SAMPLE SHOWS HOWS TO SET/GET INFO AT INSTANCE LEVEL."
<< endl;
// 设置/获取作为名称的本地实例的信息
// 环境变量的值 DB2INSTANCE
rc = info.CurrentLocalInstanceNameGet( );
rc = info.CurrentLocalNodeDirInfoSetGet( );
rc = info.CurrentLocalDatabaseDirInfoSetGet( );
rc = info.CurrentLocalDCSDirInfoSetGet( );
// 附加到本地或远程实例
rc = inst.Attach ();
如果 (rc!= 0)
{
return rc;
}
// 保存 DBM 配置。
rc = info.LocalOrRemoteDbmConfigSave(cfgStruct );
如果 (rc!= 0)
{
return rc;
}
// 与 DBM 配置一起工作。
rc = info.LocalOrRemoteDbmConfigSetGet( );
// 恢复 DBM 配置。
rc = info.LocalOrRemoteDbmConfigRestore(cfgStruct );
// 与 DBM 配置一起工作。
rc = info.LocalOrRemoteDbmConfigDefaultsSetGet( );
// 设置运行时间度数
rc = info.LocalOrRemoteRunTimeDegreeSet( );
// 与本地或远程实例分离
rc = inst.Detach ();
如果 (rc!= 0)
{
return rc;
}
return 0;
}//main