达梦(DM)数据库数据信息搜集表举例说明

MoMo 2021年6月14日12:38:00
评论
24

第一步,初始化数据捕获环境。

SP_INIT_CPT_SYS(1) ;

第二步,创建要监控的表对象 T1

CREATE TABLE T1(C1 INT,C2 BLOB, C3 CHAR(10),C4 SMALLINT,PRIMARY KEY(C1));

INSERT INTO T1 VALUES(1, 'A' , 'AB', 11);

COMMIT;

第二步,在具体代码中调用 DPI 接口。通过调用数据捕获 DPI 接口,指定对具体对象

具体列的监控。

下面编写一段代码,通过调用数据捕获 DPI 接口,来实现对表 T1 中,所有列的监控。

#include "DPIext.h"

#include "DPI.h"

#include "DPItypes.h"

#include "dmcpt_dll.h"

dhenv henv; /*环境句柄*/

dhcon hdbc; /*连接句柄*/

dhcon get_hdbc(dhcon hdbc,dhenv   henv)

{

/*创建 DPI 运行环境*/

//dpi_init();

/*申请一个环境句柄*/

dpi_alloc_env(&henv);

/*申请一个连接句柄*/

dpi_alloc_con(henv,&hdbc);

/*设置连接端口*/

dpi_set_con_attr(hdbc, DSQL_ATTR_LOGIN_PORT, 5236, 0);

/*连接到本地服务器*/

if (!DSQL_SUCCEEDED(dpi_login(hdbc,"192.168.0.38","SYSDBA","SYSDBA")))

{

printf("connect failed!\n");

exit(-1);

}

return hdbc;

}

void free_hdbc(dhcon hdbc,dhenv   henv)

{

/*断开与数据源之间的连接*/

dpi_logout(hdbc);

/*释放连接句柄*/

dpi_free_con(hdbc);

/*释放环境句柄*/

dpi_free_env(henv);

}

void test_cptview_case1()

{

cpt_col_def_t* col_def;

cpt_col_def_t* temp;

char cdc_id[130] = "NULL";

char cdc_blob_id[130]="NULL";

cpt_error_info_t ei;

col_def=(cpt_col_def_t*)malloc(sizeof(cpt_col_def_t)*4);

strcpy(col_def->name,"c1");

strcpy(col_def->col_define,"");

strcpy(col_def->expr,"");

temp = col_def + 1;

strcpy(temp->name,"c2");

strcpy(temp->col_define,"");

strcpy(temp->expr,"");

temp = temp + 1;

strcpy(temp->name,"c3");

strcpy(temp->col_define,"");

strcpy(temp->expr,"");

temp = temp + 1;

strcpy(temp->name,"c4");

strcpy(temp->col_define,"");

strcpy(temp->expr,"");

hdbc=get_hdbc(hdbc, henv);

dm_create_change_data_capture(hdbc,"SYSDBA","T1","",col_def,4,cdc_id,130,cdc_blob_id,130,

&ei);

printf("cdc_id:%s\n",cdc_id);

printf("cdc_blob_id:%s\n",cdc_blob_id);

printf("%s\n",ei.error_info);

//可以在此改变表中的数据,

//手动在客户端查询打印出的 cdc_id 和 cdc_blob_id 表名,监控开启捕获后,T1 表中数据的

变化。

//dm_drop_change_data_capture(hdbc,cdc_id,  &ei);可以在此处关闭 DPI 接口。因为本例需要

后面查看查看捕获表,所以不关闭。

free_hdbc(hdbc, henv);

}

void main()

{

test_cptview_case1();

system("pause");

}

第三步,在数据捕获的窗口中,查看打印出的 cdc_id 和 cdc_blob_id

cdc_id:CPT_SYSDBA_T1_82118833738749

cdc_blob_id:CPT_SYSDBA_T1_82118833738749_BLOB

第四步,对具体对象进行操作。通过 disql 等客户端来改变表中的数据。

insert into t1 values(2, 'B', 'BC', 22);

insert into t1 values(3, 'C', 'CD', 33);

insert into t1 values(4, 'D', 'DE', 44);

第五步,查看数据捕获表。通过 disql 等客户端来查看 cdc_id 和 cdc_blob_id 表中的数据。

cdc_id 表:

select * from CPT_SYSDBA_T1_82118833738749;

--查询结果如下:

行号 OP_SEQ OPTYPE HAS_BLOB   C1 C3 C4 OP_ERROR

---------- --------   ----------- --------   ----------- --------   ----------- --------   ----------- --------

1 2 I Y 2 BC 22 NULL

2 3 I Y 3 CD 33 NULL

3 4 I Y 4 DE 44 NULL

cdc_blob_id 表:

select * from CPT_SYSDBA_T1_82118833738749_BLOB;

--查询结果如下:

行号 OP_SEQ COL_NAME C1

---------- -------------------- -------- ----------- ----------- --------

1 2 C2 2

2 3 C2 3

3 4 C2 4

 6 步,结束的时候,关闭数据捕获的环境。

SP_INIT_CPT_SYS(0);
https://xpanx.com/
MoMo
  • 本文由 发表于 2021年6月14日12:38:00
  • 转载请务必保留本文链接:https://xpanx.com/2890.html
书海的搬用工(记住它并且理解它) 读书

书海的搬用工(记住它并且理解它)

每日一书# #六一大人今天的读书笔记# 读完,兴奋10秒,,好,收!我知道好的东西不是读了就可以理解它,也不是读完就可以拥有它,更不是兴奋了就可以“为所欲为”,希望像先贤一样,笃慎自守。运用...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: