今天学习录制ORACLE协议的脚本,发现录制完成时,INIT/ACTION中东西都很多,上网查找了些资源,最终在原有录制脚本的环境下,修改了下脚本,简化了很多.
#include "lrd.h"
vuser_init()
{
//初始化数据库部分
lrd_init(&InitInfo, DBTypeVersion);
lrd_initialize_db(LRD_DBTYPE_ORACLE, 2, 0);
lrd_env_init(LRD_DBTYPE_ORACLE, &OraEnv1, 0, 0);
lrd_ora8_handle_alloc(OraEnv1, SVCCTX, &OraSvc1, 0);
lrd_ora8_handle_alloc(OraEnv1, SERVER, &OraSrv1, 0);
lrd_ora8_handle_alloc(OraEnv1, SESSION, &OraSes1, 0);
//连接数据库
lrd_server_attach(OraSrv1, "oolong", -1, 0, 0);
lrd_ora8_attr_set_from_handle(OraSvc1, SERVER, OraSrv1, 0, 0);
//设定数据库密码
lrd_ora8_attr_set(OraSes1, USERNAME, "scott", -1, 0);
lrd_ora8_attr_set(OraSes1, PASSWORD, "tiger", -1, 0);
//初始化连接session
lrd_ora8_attr_set_from_handle(OraSvc1, SESSION, OraSes1, 0, 0);
//开始连接数据库
lrd_session_begin(OraSvc1, OraSes1, 1, 0, 0);
return 0;
}
Action()
{
static LRD_VAR_DESC NUM =
{LRD_VAR_DESC_EYECAT, 15, 23, LRD_DBTYPE_ORACLE, {1, 1, 0},DT_NUMERIC};
lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm1, 0);
//设定查询语句
lrd_ora8_stmt(OraStm1, "select count(*) NUM from test_scott t\n", 1, 0, 0);
lrd_ora8_attr_set(OraStm1, PREFETCH_ROWS, "0", -1, 0);
lrd_ora8_attr_set(OraStm1, PREFETCH_MEMORY, "0", -1, 0);
//执行查询语句
lrd_ora8_exec(OraSvc1, OraStm1, 0, 0, &uliRowsProcessed, 0, 0, 0, 0,
0);
lrd_ora8_bind_col(OraStm1, &OraDef25, 1, &NUM, 0, 0);
lrd_ora8_save_col (OraStm1, 1, 1, 0, "ROW");
lrd_ora8_fetch(OraStm1, 1, 1, &uliFetchedRows, 0, 2, 0, 0);
lr_output_message("value : %s", lr_eval_string("The count is: {ROW}"));
return 0;
}
vuser_end()
{
lrd_session_end(OraSvc1, OraSes1, 0, 0);
lrd_server_detach(OraSrv1, 0, 0);
lrd_handle_free(&OraSrv1, 0);
lrd_handle_free(&OraSvc1, 0);
lrd_handle_free(&OraSes1, 0);
lrd_handle_free(&OraEnv1, 0);
return 0;
}
ORACLE协议还有很多东西可以深究,比如在监控一个库时,我们一般要注意哪几个点,这个问题我还是不太明白,再研究吧~~~