附录

10.1 系统视图

用于数据守护环境下的一些系统信息查询。

1.$UTSK_INFO

查询守护进程向服务器发送请求的执行情况。

此视图仅用于查看当前服务器的命令执行情况,在CMD字段值不为空时,说明是有效的命令信息;此时如果CODE字段值是100,说明命令还在执行中;如果CODE字段值是0,说明命令已经执行成功;如果CODE字段值小于0,则说明命令执行失败。

其中,RUNNING/RECOVER_BREAK/AUTO_SWITCH为系统全局信息,为保持兼容在此视图中仍然保留这三个字段,但字段值统一置为NULL,没有实际意义,可再通过查询V$UTSK_SYS2视图来查看系统全局信息。

序号 数据类型 说明
1 RUNNING VARCHAR(64) 当前系统是否正在处理守护进程请求,TRUE表示正在处理,FALSE表示没有。兼容保留字段,升级后直接显示NULL值
2 DSEQ INTEGER 守护进程发送的报文序号,此字段为兼容保留字段,没有实际意义,字段值直接显示为0,真正的报文序号可查询DSEQ2字段值获取
3 CODE INTEGER DSEQ对应的执行结果
4 SEND_LSN BIGINT 主库当前已发送给备库的LSN值
5 RECOVER_BREAK VARCHAR(64) 用于显示主库的Recovery流程是否被中断, TRUE表示被中断,FALSE表示没有。兼容保留字段,升级后直接显示NULL值
6 AUTO_SWITCH VARCHAR(64) 守护系统配置的切换模式,TRUE表示故障自动切换,FALSE表示故障手动切换。兼容保留字段,升级后直接显示NULL值
7 NTH INTEGER 命令所在的数组序号
8 CMD VARCHAR(64) 待执行或已经执行完成的命令
9 INST_NAME VARCHAR(64) 需要恢复的备库实例名,只在主库启动恢复时会设置
10 MAX_SEND_LSN BIGINT 主库向备库发送的最大LSN值
11 DSEQ2 BIGINT 守护进程发送的报文序号

2.V$UTSK_SYS2

显示服务器当前的全局信息。

序号 数据类型 说明
1 RUNNING VARCHAR(64) 当前系统是否正在处理守护进程请求,TRUE表示正在处理,FALSE表示没有
2 BREAK_FLAG VARCHAR(64) 守护进程命令是否被中断,取值:TRUE/FALSE
3 AUTO_SWITCH VARCHAR(64) 守护系统配置的切换模式,TRUE表示故障自动切换,FALSE表示故障手动切换
4 MAX_WAIT_TIME INTEGER 服务器等待守护进程启动的最大时间,取 本地dm.ini中的DW_MAX_SVR_WAIT_TIME值
5 LAST_MSG_TIME TIMESTAMP(0) 服务器最近一次收到控制守护进程的时间
6 DW_VERSION VARCHAR(64) 数据守护版本号

3.V$RECOVER_STATUS

该视图需要在主库上查询(DMDSC主库需要在控制节点上查询),用于查询备库的恢复进度,如果已恢复完成,查询结果为空。

注意这里显示的是主库向备库发送日志的进度,由于备库重做日志也需要时间,在最后一批日志发送完成后,KBYTES_TO_RECOVER为0,RECOVER_PERCENT为100%,表示主库已经完成所有日志发送,需要等待备库将最后一批日志重做完成,此时主库的守护进程可能仍然处于Recovery状态,待备库重做完成后,主库的守护进程会自动切换Open状态。

RECOVER_PERCENT = (KBYTES_TOTAL - KBYTES_TO_RECOVER)/ KBYTES_TOTAL
序号 数据类型 说明
1 PRIMARY_NAME VARCHAR(256) 主库实例名
2 STANDBY_NAME VARCHAR(256) 当前正在恢复的备库实例名
3 PRIM_LSN BIGINT 主库当前的FLSN
4 SEND_LSN BIGINT 主库已发给备库的最大LSN
5 KBYTES_TOTAL BIGINT 主库需要发送给备库的日志量,单位为字节
6 KBYTES_TO_RECOVER BIGINT 主库剩余需要发送给备库的日志量,单位为字节。
7 FILES_TO_RECOVER INTEGER 主库需要发给备库重做的总的日志文件个数
8 RECOVER_PERCENT VARCHAR(64) 主库向备库已发送日志的比例

4.V$KEEP_RLOG_PKG

该视图需要在备库上查询(DMDSC备库需要在控制节点(重演节点)上查询),用于查询备库上的KEEP_RLOG_PKG信息,在备库归档状态有效的情况下可以查到内容。

读写分离集群下备库没有KEEP_RLOG_PKG机制,该视图查询结果为空。

序号 数据类型 说明
1 TYPE VARCHAR(64) 主库的日志同步类型,REATIME类型
2 MIN_LSN BIGINT KEEP_RLOG_PKG中的最小LSN
3 MAX_LSN BIGINT KEEP_RLOG_PKG中的最大LSN
4 PTX_OFF SMALLINT KEEP_RLOG_PKG中的PTX偏移
5 LOG_SIZE INTEGER KEEP_RLOG_PKG中的有效日志长度,单位为字节
6 DSC_SEQNO INTEGER 标识对应的主库实例节点的序号DSC_SEQNO。如果主库是单机,则显示为0。
7 DB_MAGIC BIGINT 产生KEEP_RLOG_PKG包的源数据库的DB_MAGIC
8 PKG_TYPE INTEGER KEEP_RLOG_PKG包的类型
9 PKG_SEQNO BIGINT KEEP_RLOG_PKG包的全局序号
10 PREV_LSN BIGINT KEEP_RLOG_PKG包的前一个包的最大LSN值
11 PKG_LEN BIGINT KEEP_RLOG_PKG包的长度,单位为字节

5.V$RAPPLY_SYS

该视图需要在备库上查询(DMDSC备库需要在控制节点(重演节点)上查询),用于查询备库重做日志时的一些系统信息。

序号 数据类型 说明
1 APPLYING VARCHAR(64) 备库的重做线程是否正在处理任务,查询结果为TRUE或FALSE
2 SSEQ BIGINT 备库可重演到的最大包序号值
3 SLSN BIGINT 备库可重演到的最大LSN值
4 KSEQ BIGINT 非自动切换模式下,备库保持不重演的RLOG_PKG的序号。
5 KLSN BIGINT 非自动切换模式下,备库保持不重演的RLOG_PKG的最大LSN。
6 TASK_NUM INTEGER 备库上待重做的任务数
7 PRIMARY_NAME VARCHAR(128) 备库对应的主库实例名
8 HAS_KEEP_PKG VARCHAR(64) 备库上是否有KEEP_RLOG_PKG,查询结果为TRUE或FALSE
9 TASK_MEM_USED BIGINT 备库上重做日志堆积占用的内存大小(字节)
10 TASK_START_TIME TIMESTAMP 当前正在重做日志PKG的开始时间
11 LAST_REDO_TIME BIGINT 最近一次日志PKG重做的耗时(毫秒)
12 TASK_NUM_APPLIED BIGINT 备库上已经重做的日志PKG总个数
13 APPLIED_TOTAL_TIME BIGINT 备库上重做的日志PKG的总时间(毫秒)
14 SEQNO INTEGER 标识对应的主库实例节点的序号DSC_SEQNO。如果主库是单机,则显示为0

6.V$RAPPLY_LOG_TASK

该视图需要在备库上查询(DMDSC备库需要在控制节点(重演节点)上查询),用于查询备库当前重做任务的日志信息。

序号 数据类型 说明
1 TYPE VARCHAR(64) 主库的日志同步类型,REATIME/TIMELY/ASYNC
2 MIN_LSN BIGINT 日志PKG的最小LSN值
3 MAX_LSN BIGINT 日志PKG的最大LSN值
4 PTX_OFF SMALLINT 日志PKG的PTX偏移
5 LOG_SIZE INTEGER 日志PKG的有效长度,单位为字节
6 DSC_SEQNO INTEGER 标识对应的主库实例节点的序号DSC_SEQNO。如果主库是单机,则显示为0
7 DB_MAGIC BIGINT 产生日志PKG的源数据库的DB_MAGIC
8 PKG_TYPE INTEGER 日志PKG的类型
9 PKG_SEQNO BIGINT 日志PKG的序号
10 PREV_LSN BIGINT 前一个PKG的最大LSN
11 PKG_LEN BIGINT 日志PKG的长度,单位为字节

7.V$ARCH_FILE

查询本地已经归档的日志信息。对DMDSC集群,除了显示本地归档外,也显示远程归档信息。

序号 数据类型 说明
1 DB_MAGIC BIGINT 写入日志的数据库的MAGIC值
2 STATUS VARCHAR(64) 归档日志状态
3 LEN BIGINT 日志长度,单位为字节
4 FREE BIGINT 写日志偏移位置
5 ARCH_LSN BIGINT 归档文件起始LSN,仅对归档文件有意义
6 CLSN BIGINT 已归档的最大LSN
7 ARCH_SEQ INTEGER 归档文件起始包序号,仅对归档文件有意义
8 NEXT_SEQ INTEGER 已归档的最大包序号。
9 CREAT_TIME TIMESTAMP 归档文件创建时间
10 CLOSE_TIME TIMESTAMP 归档文件关闭时间
11 PATH VARCHAR(256) 归档文件所在路径,包括归档文件名
12 PMNT_MAGIC BIGINT 数据库的永久MAGIC
13 DSC_SEQNO INTEGER DSC节点序号,单节点为0
14 CRC_CHECK INTEGER 是否进行CRC校验
15 LAST_PKG_OFF BIGINT 最后一个有效的日志包在文件中的偏移位置
16 PREV_LSN BIGINT 前一个归档文件已归档的最大LSN
17 GLOBAL_NEXT_SEQ BIGINT 已归档的最大包序号
18 SRC_DB_MAGIC BIGINT 产生日志的源数据库的MAGIC值

8.V$ARCH_STATUS

查询归档状态信息,归档状态是由主库记录和维护的,此视图只在主库上查询有效,备库上的查询结果没有实际意义。

序号 数据类型 说明
1 ARCH_TYPE VARCHAR(256) 归档类型
2 ARCH_DEST VARCHAR(256) 归档目标,本地归档和REMOTE归档为归档路径,其他类型为归档目标实例名。
3 ARCH_STATUS VARCHAR(256) 归档状态,Valid为有效状态,Invalid为无效状态。
4 ARCH_SRC VARCHAR(256) 对REMOTE归档为源实例名,对其他归档类型为本地实例名

9.V$MAL_LINK_STATUS

查询本地实例到远程实例的MAL链路连接状态。

序号 数据类型 说明
1 SRC_SITE VARCHAR(256) 源站点实例名
2 DEST_SITE VARCHAR(256) 目的站点实例名。
3 CTL_LINK_STATUS VARCHAR(256) 控制链路连接状态,CONNECTED表示连接已建立,DISCONNECT表示连接断开。
4 DATA_LINK_STATUS VARCHAR(256) 数据链路连接状态,CONNECTED表示连接已建立,DISCONNECT表示连接断开。

10.V$DM_ARCH_INI

归档参数信息。

序号 数据类型 说明
1 ARCH_NAME VARCHAR (128) 归档名称
2 ARCH_TYPE VARCHAR (128) 归档类型
3 ARCH_DEST VARCHAR (512) 对于LOCAL归档,表示归档路径;对于REMOTE归档,表示本节点归档要发送到的实例名;对于其余类型的归档,表示归档目标实例名
4 ARCH_FILE_SIZE INTEGER 归档文件大小
5 ARCH_SPACE_LIMIT INTEGER 归档文件的磁盘空间限制,单位是MB
6 ARCH_HANG_FLAG INTEGER 如果本地归档时磁盘空间不够,是否让服务器挂起。无实际意义,对本地归档类型和远程归档类型显示为1,其他归档类型显示为NULL
7 ARCH_TIMER_NAME VARCHAR (128) 对于异步归档,表示定时器名称;其余类型归档显示NULL
8 ARCH_IS_VALID CHAR(1) 归档状态,是否有效
9 ARCH_WAIT_APPLY INTEGER 性能模式,是否等待重演完成,取值 0:高性能模式, 1:数据一致模式。本地归档取值NULL
10 ARCH_INCOMING_PATH VARCHAR(256) 对REMOTE归档,表示远程节点发送过来的归档在本地的保存目录;其余类型归档显示NULL
11 ARCH_CURR_DEST VARCHAR(256) 当前归档目标实例名,如果备库是DMDSC集群,则归档目标是备库控制节点,该字段表示当前被选定为归档目标的节点实例名。备库是单机的情况下,就是指的备库实例名。
12 ARCH_SEND_DELAY INTEGER 源库到异步备库的归档延时发送时间,单位为分钟,取值范围(0~1440),默认为0,表示不启用归档延时发送功能

11.V$DM_MAL_INI

MAL参数信息。

序号 数据类型 说明
1 MAL_NAME VARCHAR (128) MAL名称
2 MAL_INST_NAME VARCHAR (256) 实例名称
3 MAL_HOST VARCHAR (30) IP地址
4 MAL_PORT INTEGER 端口号
5 MAL_INST_HOST VARCHAR (256) 对应实例IP地址
6 MAL_INST_PORT INTEGER 对应实例的端口号
7 MAL_DW_PORT INTEGER MAL_INST_NAME实例的守护进程监听远程守护进程或监视器连接请求的端口
8 MAL_LINK_MAGIC INTEGER MAL链路网段标识
9 MAL_INST_DW_PORT INTEGER MAL_INST_NAME实例监听守护进程连接请求的端口

12.V$DM_TIMER_INI

定时器参数信息。

序号 数据类型 说明
1 TIMER_NAME VARCHAR(128) 定时器名称
2 TYPE TINYINT 类型
3 FREQ_MONTH_WEEK_INTERVAL INTEGER 月或周的间隔
4 FREQ_SUB_INTERVAL INTEGER 间隔天数
5 FREQ_MINUTE_INTERVAL INTEGER 分钟间隔
6 START_TIME TIME 开始时间
7 END_TIME TIME 结束时间
8 DURING_START_DATE DATETIME 有效时间段的开始日期时间
9 DURING_END_DATE DATETIME 有效时间段的结束日期时间
10 NO_END_DATE_FLAG CHAR(1) 无结束日期标识
11 DESCRIBE VARCHAR(256) 描述
12 IS_VALID CHAR(1) 是否有效

13.V$DMWATCHER

查询当前登录实例所对应的守护进程信息,注意一个守护进程可以同时守护多个组的实例,因此查询结果中部分字段(N_GROUP、SWITCH_COUNT)为守护进程的全局信息,并不是当前登录实例自身的守护信息。在DMDSC集群环境中,只显示控制守护进程的信息。

另外MPP主备环境下,全局登录方式返回的是所有MPP站点上查询返回的守护进程信息,可以根据INST_NAME实例名字段来区分。

序号 数据类型 说明
1 N_GROUP INTEGER 守护进程全局信息,指实例所在的守护进程守护的组个数
2 GROUP_NAME VARCHAR(128) 实例所在的守护进程组名
3 INST_NAME VARCHAR(128) 实例名
4 DW_TYPE VARCHAR(32) 实例所在守护进程组的守护类型
5 DW_MODE VARCHAR(32) 实例所在守护进程组的守护模式
6 AUTO_RESTART INTEGER 守护进程对本实例是否配置有自动重启, 1:自动重启 0:不自动重启
7 DW_STATUS VARCHAR(64) 实例的守护进程状态
8 DW_SUB_STATUS VARCHAR(64) 实例的守护进程子状态
9 LAST_MSG_TIME DATETIME 实例最近一次收到守护进程消息的时间
10 SWITCH_COUNT INTEGER 守护进程全局信息,指守护进程组内主库的变迁次数(包括SWITCHOVER主备库切换,TAKEOVER手动/自动接管,TAKEOVER强制接管导致的主库变迁操作)。
11 CTL_NUM INTEGER 实例的守护进程收到的远程实例控制文件信息个数
12 INST_NUM INTEGER 实例的守护进程收到的远程实例信息个数
13 MAX_CONN_NUM INTEGER 实例的守护进程当前最大的TCP连接数

14.V$MAL_SYS

MAL系统信息视图。如果是数据守护环境,则只显示主库的MAL系统信息。

序号 数据类型 说明
1 SYS_STATUS INTEGER mal系统状态:0:OPEN,1:PRE_SHUTDOWN,2:SHUTDOWN
2 STMT_ID INTEGER mal系统当前stmtid
3 NEXT_MAL_ID BIGINT 下一个MAL_ID
4 MAL_PORT INTEGER mal监听端口
5 N_SITE INTEGER mal配置的站点数目
6 MAL_NUM INTEGER mal系统邮箱数目
7 MAL_SEQ_NO INTEGER 站点本身的mal序号
8 EMPTY_LET_NUM INTEGER 空邮件数目
9 MAL_CHECK_INTERVAL INTEGER 链路检测间隔
10 MAL_CONN_FAIL_INTERVAL INTEGER 认定链路断开的时间间隔
11 MAL_COMPRESS_LEVEL INTEGER 邮件压缩级别
12 MAL_BUF_SIZE INTEGER 单个MAL缓存大小限制,以M为单位。当MAL的缓存邮件超过此大小,会将邮件存储到文件中。有效值范围(0~500000),默认为100,配置为0表示无限制
13 MAL_SYS_BUF_SIZE INTEGER MAL系统总内存大小限制,以M为单位。有效值范围(0~500000),默认为0,表示无限制
14 MAL_VPOOL_SIZE INTEGER MAL配置的总的POOL大小,以M为单位。有效值范围(1~500000),默认为128
15 MAL_TEMP_PATH VARCHAR(256) 指定临时文件的目录。当邮件使用的内存超过MAL_BUF_SIZE或者MAL_SYS_BUF_SIZE时,将新产生的邮件保存到临时文件中。如果缺省,则新产生的邮件保存到temp.dbf文件中

15.V$MAL_SITE_INFO

MAL站点信息视图,MPP模式下,自动收集MPP各个站点的信息。

序号 数据类型 说明
1 SRC_SITE_SEQ INTEGER 发送邮件的源站点序号
2 DEST_SITE_SEQ INTEGER 目标站点序号
3 MAL_PORT_NUM INTEGER 兼容老版本而保留的字段,当前取值0和1。 0表示数据链路已断开; 1表示数据链路处于连接状态。
4 BUILD_TIME BIGINT 下一个邮件发送序号
5 LBTAPFDS BIGINT 收到的邮件中已处理的最后一个邮件的序号
6 CUR_LETTER_NUM INTEGER 当前保存不连续邮件的个数
7 MAX_LETTER_NUM INTEGER 目前为止不连续邮件的最大个数
8 TOTAL_LINK_NUM INTEGER 已创建到目标站点的mal_link数
9 FREE_LINK_NUM INTEGER 当前空闲的mal_link数
10 SEND_LETTER_NUM INTEGER 当前发送的邮件数

16.V$ARCH_SEND_INFO

此视图用于在主库上查询各备库的日志发送统计信息。

如果主库是DMDSC集群,并且主库当前正在执行Recovery恢复动作,则只有控制节点上会有最新的归档发送信息,如果主库在向备库正常同步数据,则凡是有日志生成并发送的节点上都可以查询到最新的归档发送信息。

序号 数据类型 说明
1 ARCH_DEST VARCHAR(256) 归档目标实例名
2 ARCH_TYPE INTEGER 归档类型
3 FOR_RECOVERY CHAR 是否为Recovery状态下的日志同步(Y/N)
4 RECNT_SEND_CNT INTEGER 最近累计日志发送的次数N。
5 TOTAL_SEND_CNT BIGINT 累计日志发送次数
6 TOTAL_SEND_LEN BIGINT 累计日志发送长度(字节)
7 TOTAL_PTX_CNT BIGINT 累计发送的PTX个数
8 TOTAL_SEND_TIME BIGINT 累计日志发送耗时(微秒)
9 MAX_SEND_TIME BIGINT 最大的日志发送耗时(微秒)
10 MAX_END_TIME TIMESTAMP 最大耗时发送的结束时间
11 MAX_PTX_CNT INTEGER 最大耗时发送的PTX个数
12 MAX_SEND_LEN INTEGER 最大耗时发送的日志长度(字节)
13 MAX_SEND_LSN BIGINT 最大耗时发送的结束LSN
14 LAST_SEND_LEN INTEGER 最近一次发送的日志长度(字节)
15 LAST_SEND_PTX INTEGER 最近一次日志发送的PTX个数
16 LAST_SEND_LSN BIGINT 最近一次日志发送的结束LSN
17 LAST_SEND_TIME BIGINT 最近一次日志发送耗时(微秒)
18 LAST_START_TIME TIMESTAMP 最近一次日志发送的起始时间
19 LAST_END_TIME TIMESTAMP 最近一次日志发送的结束时间
20 RECNT_SEND_LEN BIGINT 最近RECNT_SEND_CNT 次发送的日志长度(字节)
21 RECNT_SEND_PTX BIGINT 最近RECNT_SEND_CNT 次发送的PTX个数
22 RECNT_SEND_TIME BIGINT 最近RECNT_SEND_CNT 次发送的耗时(微秒)

17.V$RAPPLY_STAT

此视图用于在备库上查询备库重演日志的统计信息。

如果备库是DMDSC集群,则需要在控制节点(重演节点)上查询。

序号 数据类型 说明
1 RECNT_APPLY_NUM INTEGER 备库最近重演的日志个数N。
2 TSK_MEM_USED BIGINT 备库上重做日志堆积占用的内存大小(字节)
3 TSK_START_TIME TIMESTAMP 当前正在重做日志BUF的开始时间
4 TOTAL_RECVED_NUM BIGINT 累计收到日志包个数
5 TOTAL_RECVED_LEN BIGINT 累计收到日志量(字节)
6 TOTAL_RECVED_TIME BIGINT 累计消息响应时间(微秒)
7 TOTAL_APPLY_NUM BIGINT 累计重演日志个数
8 TOTAL_APPLY_LEN BIGINT 累计重演日志量(字节)
9 TOTAL_APPLY_TIME BIGINT 累计日志重演时间(微秒)
10 TOTAL_WAIT_TIME BIGINT 累计任务等待时间(微秒)
11 MAX_RECVED_TIME BIGINT 最大消息响应时间(微秒)
12 MAX_WAIT_TIME BIGINT 最大任务等待时间(微秒)
13 MAX_APPLY_TIME BIGINT 最大任务重演时间(微秒)
14 MAX_APPLY_LEN BIGINT 和MAX_APPLY_TIME对应的重演日志长度(字节)
15 LAST_RECVED_LEN BIGINT 最近一次收到的日志长度(字节)
16 LAST_RECVED_TIME BIGINT 最近一次响应时间(微秒)
17 RECNT_RECVED_LEN BIGINT 最近RECNT_APPLY_NUM 次收到的日志长度(字节)
18 RECNT_RECVED_TIME BIGINT 最近RECNT_APPLY_NUM 次响应时间(微秒)
19 LAST_WAIT_TIME BIGINT 最近一次等待时间(微秒)
20 RECNT_WAIT_TIME BIGINT 最近RECNT_APPLY_NUM 次等待时间(微秒)
21 LAST_APPLY_LEN BIGINT 最后一次日志重演长度(字节)
22 LAST_APPLY_TIME BIGINT 最近一次日志重演时间(微秒)
23 RECNT_APPLY_LEN BIGINT 最近RECNT_APPLY_NUM 次日志重演长度(字节)
24 RECNT_APPLY_TIME BIGINT 最近RECNT_APPLY_NUM 次日志重演时间(微秒)
25 SEQNO INTEGER 标识对应的主库实例节点的序号DSC_SEQNO。如果主库是单机,则显示为0
26 LAST_CMT_TIME DATETIME(6) 备库最新解析的主库最新事务提交记录对应的时间戳
27 APPLY_CMT_TIME DATETIME(6) 备库最新重演的主库最新事务提交记录对应的时间戳

18.V$RAPPLY_LSN_INFO

查询备库的重演信息,如果备库是DMDSC集群,则需要在控制节点(重演节点)上查询。如果在主库上查询此视图,则查到的是主库曾经作为备库时的历史重演信息。其中后面四个CKPT_XX字段,是在备库刷检查点时才调整,前面四个是随备库重演而动态调整的。

序号 数据类型 说明
1 P_DB_MAGIC BIGINT 主库DB_MAGIC
2 N_EP BIGINT 主库节点数
3 PKG_SEQ_ARR VARCHAR(2048) 备库对应主库各节点已经写入到联机日志文件的原始包序号数组。
4 APPLY_LSN_ARR VARCHAR(2048) 备库对应主库各节点已经写入到联机日志文件的原始LSN数组。
5 CKPT_P_DB_MAGIC BIGINT 此字段无实际含义,是保留字段,和P_DB_MAGIC字段值相等。
6 CKPT_N_EP INTEGER 此字段无实际含义,是保留字段,和N_EP字段值相等。
7 CKPT_PKG_SEQ_ARR VARCHAR(2048) 此字段无实际含义,是保留字段,和PKG_SEQ_ARR字段值相等。
8 CKPT_APPLY_LSN_ARR VARCHAR(2048) 此字段无实际含义,是保留字段,和APPLY_LSN_ARR字段值相等。

19.V$RLOG_PKG

显示日志包信息。通过该视图可以查询日志系统中当前日志包的使用情况,如包的长度、最大LSN、最小LSN等。通过该视图还可以查询当前实例日志系统中等待刷盘的链表上的日志包信息。

序号 数据类型 说明
1 PKG_LEN BIGINT 日志包的长度,单位为字节
2 DATA_OFF BIGINT 日志包中有效数据长度
3 ENC_LEN BIGINT 日志包加密后数据长度
4 CMPR_LEN BIGINT 日志包压缩后数据长度
5 HDR_SIZE INTEGER 日志包包头长度
6 N_MAGIC BIGINT 日志包固定魔数
7 DB_MAGIC BIGINT 数据库魔数
8 N_DSC INTEGER DSC集群节点数
9 DSC_SEQNO INTEGER DSC集群节点号
10 FROM_PRIMARY INTEGER 是否为主库生成的日志
11 PKG_TYPE INTEGER 日志包包类型
12 ENC_CMPR INTEGER 加密压缩标记,0表示不加密不压缩,1表示只加密,2表示只压缩,3表示加密压缩
13 L_SEQNO BIGINT 本地包序号
14 G_SEQNO BIGINT 全局包序号
15 MIN_LSN BIGINT 包内日志最小LSN
16 MAX_LSN BIGINT 包内日志最大LSN
17 PREV_LSN BIGINT 前一个包的日志最大LSN
18 N_FIXED INTEGER 包的日志填充次数
19 N_FILLED INTEGER 包的填充完成的次数

20.V$RLOG_PKG_STAT

显示当前实例日志系统中日志包使用的统计信息。

序号 数据类型 说明
1 N_FLUSH_TO BIGINT 请求刷盘的次数
2 N_FLUSH_WAIT BIGINT 刷盘等待的次数
3 N_PUSHED BIGINT 拷贝到flush_lst次数
4 N_COPY_WAIT BIGINT 拷贝到flush_lst过程中产生等待的次数
5 N_FOR_CKPT BIGINT 检查点类型的日志包个数
6 N_DISCARDED BIGINT 日志刷盘线程中丢弃的日志包个数
7 N_FLUSHED BIGINT 刷盘日志包个数
8 BYTES_FLUSHED BIGINT 刷盘日志包长度总和
9 PKG_AVG_BYTES INTEGER 刷盘日志包平均长度
10 NEXT_SEQNO BIGINT 下一个日志包序号
11 N_ALLOC_WAIT BIGINT 分配日志包过程中产生等待的次数
12 GLOBAL_NEXT_SEQNO BIGINT 下一个全局日志包序号

21.V$RAPPLY_PARALLEL_INFO

查询备库的并行重演信息,如果备库是DMDSC集群,则需要在控制节点(重演节点)上查询。

序号 数据类型 说明
1 DSC_SEQNO INTEGER 主库节点序号,如果主库是单节点,则序号为0
2 APPLY_PKG_SEQ BIGINT 备库对应主库各节点已经写入到联机日志文件的原始日志包序号
3 APPLY_LSN BIGINT 备库对应主库各节点已经写入到联机日志文件的原始LSN值,和APPLY_PKG_SEQ相对应
4 REDOS_PARALLEL_NUM INTEGER 备库并行重演线程数
5 REDO_LSN_ARR VARCHAR(2048) 备库各路并行重演线程已重演到的LSN值
6 RPKG_SEQ BIGINT 备库已重演到的日志包序号
7 RPKG_LSN BIGINT 备库已重演到的LSN值,和RPKG_SEQ相对应

10.2 监视器接口

10.2.1 DLL依赖

监视器DLL依赖了其他的一些动态链接库,编程时需要在加载动态链接库时指定bin目录。

10.2.2 返回值说明

监视器接口总体的返回值策略为:小于0表示执行失败,其他值表示执行成功。对于启动/关闭守护进程监控和实例的相关接口,返回值为100表示执行前状态已经和预期状态一致,接口实际并未执行。

相关的错误码说明可借助dwmon_get_error_msg_by_code接口获取错误码对应的错误描述信息。

10.2.3 接口调整说明(V4.0)

数据守护V4.0版本对监c、新增、调整了部分接口。

1. 删除的接口列表

  1. dwmon_get_nth_watch_ctl_item

不再支持。

2. 调整过接口定义的列表

  1. dwmon_get_split_sub_group_inst

更名为dwmon_get_split_sub_group_database

  1. dwmon_get_nth_instance_info

更名为dwmon_get_nth_database_info,接口参数有调整。

  1. dwmon_get_instance_info_by_name

更名为dwmon_get_database_info_by_name,接口参数有调整。

  1. dwmon_get_instance_ep_info

更名为dwmon_get_database_info,接口参数有调整。

  1. dwmon_get_nth_ep_info

接口参数有调整。

  1. dwmon_get_ep_info_by_name

接口参数有调整。

  1. dwmon_get_inst_arch_info

更名为dwmon_get_database_arch_info

  1. dwmon_get_watch_ctl_info

接口参数有调整。

  1. dwmon_get_monitor_info_with_version

更名为dwmon_get_monitor_info

  1. dwmon_set_inst_recover_time

更名为dwmon_set_database_recover_time。

  1. dwmon_set_inst_arch_invalid

更名为dwmon_set_database_arch_invalid。

  1. dwmon_stop_instance

更名为dwmon_stop_database。

  1. dwmon_startup_instance

更名为dwmon_startup_database。

  1. dwmon_kill_instance

更名为dwmon_kill_database。

  1. dwmon_open_instance

更名为dwmon_open_database。

  1. dwmon_detach_instance

更名为dwmon_detach_database。

  1. dwmon_attach_instance

更名为dwmon_attach_database。

  1. dwmon_get_source_instance_name

更名为dwmon_get_source_database_name。

  1. dwmon_get_ep_nth_apply_info

更名为dwmon_get_ep_nth_apply_stat,接口参数有调整。

  1. dwmon_get_ep_nth_apply_lsn_info

更名为dwmon_get_ep_nth_apply_info。

  1. dwmon_clear_inst_arch_send_info

更名为dwmon_clear_database_arch_send_info。

  1. dwmon_clear_inst_rapply_info

更名为dwmon_clear_database_rapply_stat。

  1. dwmon_clear_group_rapply_info

更名为dwmon_clear_group_rapply_stat。

3. 新增的接口列表

  1. dwmon_get_database_open_history
  2. dwmon_get_nth_open_history
  3. dwmon_startup_database_watch
  4. dwmon_stop_database_watch
  5. dwmon_get_ep_nth_apply_with_parallel_info

10.2.4 C接口说明

1.dwmon_alloc_handle

函数原型:

DWMON_RETURN

dwmon_alloc_handle(

	mhandle* mhdle

);

功能说明:

分配监视器操作句柄,监视器的接口都通过此句柄调用执行。

参数说明:

mhdle: 输出参数,分配到的监视器句柄。

返回值:

0:执行成功。

<0:执行失败。

2.dwmon_get_error_msg_by_code

函数原型:

DWMON_RETURN

dwmon_get_error_msg_by_code(

	mhandle mhdle,

	mint4 code,

	mschar* buf_msg,

	muint4 buf_len,

	muint4* msg_len_out

);

功能说明:

获取输入code对应的错误描述信息,code必须是小于0的值。

参数说明:

mhdle: 输入参数,分配到的监视器句柄,注意如果是分配句柄或初始化环境时失败,允许mhdle是无效的,否则要求mhdle必须是有效句柄。

code:输入参数,需要获取错误信息的错误码code,注意code必须是小于0的值。

buf_msg:输出参数,输出错误描述信息,注意buf_msg缓存长度建议大于4096,避免输出信息被截断。

buf_len:输入参数,指定buf_msg可写入的最大长度。

msg_len_out:输出参数,buf_msg缓存实际写入长度。

返回值:

0:执行成功。

<0:执行失败,-17表示没有找到code对应的错误信息。

3.dwmon_init

函数原型:

DWMON_RETURN

dwmon_init(

	mhandle mhdle,

	mschar* ini_path,

	mschar* log_path

);

功能说明:

初始化监视器环境。

参数说明:

mhdle: 输入参数,监视器操作句柄。

ini_path: 输入参数,指定dmmonitor.ini的绝对路径。

log_path: 输入参数,指定日志文件的存放路径,如果为NULL或空串,则将dmmonitor.ini中配置的MON_LOG_PATH作为日志文件路径,如果dmmonitor.ini中没有配置MON_LOG_PATH,则将dmmonitor.ini的同级目录作为日志文件路径。

返回值:

0:执行成功。

<0:执行失败,-15表示监视器尝试建立到所有守护进程的连接失败,可能守护进程都未启动,允许忽略此错误继续执行其他操作,如果不忽略此错误,认定初始化失败,则需要先正常销毁监视器环境(调用dwmon_deinit接口),再释放操作句柄(调用dwmon_free_handle接口)。

4.dwmon_msg_event_wait

函数原型:

void

dwmon_msg_event_wait(

	mhandle mhdle

);

功能说明:

等待消息事件。监视器检测到守护进程或实例状态发生变化,或者接口命令执行过程中,产生中间输出消息时会将消息写入到缓存并通知消息事件,调用者只需要调用此接口等待即可,等待事件发生后,可通过接口dwmon_get_exec_msg去读取输出消息。

这种方式需要单独起一个线程来处理消息,以免消息被阻塞。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

5.dwmon_get_exec_msg

函数原型:

DWMON_RETURN

dwmon_get_exec_msg(

	mhandle mhdle,

	mschar* buf_msg,

	muint4 buf_len,

	muint4* msg_len_out,

	muint4* get_flag

);

功能说明:

获取输出信息,和dwmon_msg_event_wait配合使用。

参数说明:

mhdle:

输入参数,监视器操作句柄。

buf_msg:

输出参数,保存获取到的输出消息,注意buf_msg缓存长度需要大于4096,以免长度不够导致消息被截断。

buf_len:

输入参数,指定buf_msg可写入的最大长度,建议buf_msg缓存长度及buf_len输入值大于4096,避免消息被截断。

msg_len_out:

输出参数,写消息成功后,输出实际写入的消息长度。

get_flag:

输出参数,是否继续读取消息,TRUE表示还有消息可读,FALSE表示已全部读完。

返回值:

0:执行成功。

<0:执行失败。

6.dwmon_get_msg_exit_flag

函数原型:

mbool

dwmon_get_msg_exit_flag(

	mhandle mhdle

);

功能说明:

如果上层应用程序中有单独的消息线程,可通过调用此接口获取退出标记,在标记为TRUE时可正常退出线程。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

1: 允许线程退出。

0: 不允许线程退出,需要继续等待获取输出消息。

7.dwmon_set_msg_exit_event

函数原型:

void

dwmon_set_msg_exit_event(

	mhandle mhdle

);

功能说明:

设置消息退出事件。如果上层应用程序中有单独的消息线程,在dwmon_get_msg_exit_flag接口获取到退出标记为TRUE时,需要调用此接口设置退出事件。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

8.dwmon_msg_event_deinit

函数原型:

void

dwmon_msg_event_deinit(

	mhandle mhdle

);

功能说明:

通知并等待消息退出。使用等待事件方式获取监视器消息时,需要单独起一个线程,在程序结束,退出线程时,需要调用此接口通知并等待消息线程退出。

消息线程相关的接口有dwmon_msg_event_wait、dwmon_get_exec_msg、dwmon_get_msg_exit_flag、dwmon_set_msg_exit_event和dwmon_msg_event_deinit,这几个接口需要配合使用。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

9.dwmon_get_version

函数原型:

DWMON_RETURN

dwmon_get_version(

	mhandle mhdle,

	mschar* version

);

功能说明:

获取当前的监视器版本信息。

参数说明:

mhdle: 输入参数,监视器操作句柄。

version: 输出参数,输出当前的监视器版本信息,version的缓存长度不能小于129,避免溢出。

返回值:

0:执行成功。

<0:执行失败。

10.dwmon_get_mpp_flag

函数原型:

DWMON_RETURN

dwmon_get_mpp_flag (

	mhandle mhdle,

	mbool* mpp_flag

);

功能说明:

获取MPP主备环境标记,用于判断当前是否为MPP主备环境。

参数说明:

mhdle: 输入参数,监视器操作句柄。

mpp_flag:输出参数,MPP主备环境下输出为TRUE,否则为FALSE。

返回值:

0:执行成功。

<0:执行失败。

11.dwmon_get_n_group

函数原型:

DWMON_RETURN

dwmon_get_n_group(

	mhandle mhdle,

	muint4* n_group,

	mschar** group_name_arr

);

功能说明:

获取当前监控的组个数和组名称。

只有MPP主备环境下允许配置多组。

参数说明:

mhdle: 输入参数,监视器操作句柄。

n_group: 输入输出参数,监视器配置的监控组个数。输入参数:指定可获取的最大组个数,输出参数:实际获取的组个数,建议输入值不小于16,避免取不到完整信息。

group_name_arr: 输出参数,输出监视器配置的监控组名,参数是字符串指针数组类型,数组长度是n_group的输入值,每个指针元素指向的缓存长度不能小于65,避免长度溢出。

返回值:

0:执行成功。

<0:执行失败。

12.dwmon_get_group_info

函数原型:

DWMON_RETURN

dwmon_get_group_info(

	mhandle mhdle,

	mschar* group_name,

	muint4* oguid,

	muint4* n_dw,

	mschar** dw_ip_arr,

	msint2* port_arr,

	mschar* dw_type,

	mschar* dw_mode,

	mschar* primary_name,

	muint4* n_split,

	mschar** split_iname_arr,

	muint4* n_db,

	mschar** db_name_arr,

	muint4* n_local,

	mschar** local_name_arr

);

功能说明:

获取指定组的守护进程组信息。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要获取信息的组名,只有一组时允许不指定组名。

oguid: 输出参数,输出指定守护进程组的OGUID值。

n_dw: 输入输出参数,指定组配置的控制守护进程个数。输入参数:可获取的最大守护进程个数,输出参数:实际获取的守护进程个数,建议输入值不小于25,避免取不到完整信息。

dw_ip_arr: 输出参数,输出指定组配置的控制守护进程IP,参数是字符串指针数组类型,数组长度是n_dw的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免长度溢出。

port_arr: 输出参数,输出指定组配置的控制守护进程端口,参数是msint2数组类型,数组长度是n_dw的输入值。

dw_type: 输出参数,输出守护进程类型,注意缓存长度不能小于65,避免长度溢出。

dw_mode: 输出参数,输出守护进程切换模式,注意缓存长度不能小于65,避免溢出。

primary_name: 输出参数,输出当前的主库实例名,如果组中有多个Primary实例,则返回处于Open状态的Primary实例,如果都是Mount状态,则返回LSN最大的Primary实例,如果有多个Open状态的Primary实例,则接口会报错返回。注意缓存长度不能小于65,避免溢出。

n_split: 输入输出参数,当前的子组个数,如果组中有发生分裂,每个分裂库是一个子组,剩余没有分裂的正常库也是一个子组,如果组中没有分裂情况,则子组个数就是整个的组个数,输出值为1。输入参数:可获取的最大子组个数,输出参数:实际获取的子组个数,建议输入值不小于9,避免取不到完整信息。

split_iname_arr: 输出参数,输出子组中其他库可加入的库名称,参数是字符串指针数组类型,数组长度是n_split的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免溢出。

n_db: 输入输出参数,配置为Global守护类型的库个数。输入参数:可获取的最大库个数,输出参数:实际获取的库个数,建议输入值不小于9,避免取不到完整信息。

db_name_arr: 输出参数,输出配置为Global守护类型的库名,参数是字符串指针数组类型,数组长度是n_db的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免溢出。

n_local: 输入输出参数,配置为local守护类型的库个数。输入参数:可获取的最大库个数,输出参数:实际获取的库个数,建议输入值不小于16,避免取不到完整信息。

local_name_arr: 输出参数,输出配置为local守护类型的库名,参数是字符串指针数组类型,数组长度是n_local的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免溢出。

返回值:

0:执行成功。

<0:执行失败。

13.dwmon_get_split_sub_group_database

函数原型:

DWMON_RETURN

dwmon_get_split_sub_group_database(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	muint4* n_db,

	mschar** db_name_arr

);

功能说明:

获取可加入指定库的库名信息,可以和 dwmon_get_group_info接口配合使用,其中db_name是dwmon_get_group_info中split_iname_arr数组取出的某个库名。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要获取可加入信息的库名,此参数必须指定。

n_db: 输入输出参数,可加入指定库的库个数。输入参数:指定可获取的最大库个数,输出参数:实际获取的库个数,建议输入值不小于8,避免取不到完整信息。

db_name_arr: 输出参数,输出可加入指定库的库名,参数是字符串指针数组类型,数组长度是n_db的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免溢出。

返回值:

0:执行成功。

<0:执行失败。

14.dwmon_get_nth_database_info

函数原型:

DWMON_RETURN

dwmon_get_nth_database_info(

	mhandle mhdle,

	mschar* group_name,

	muint4 nth,

	mschar* dw_time,

	mschar* dw_ip,

	msint2* dw_port,

	mschar* dw_type,

	mschar* dw_mode,

	muint4* dw_err_time,

	mschar* dw_sta,

	mschar* dw_sub_sta,

	mschar* dw_ctl_sta,

	mschar* db_name,

	mschar* db_ok_str,

	mschar* svr_mode,

	mschar* svr_status,

	mschar* arch_type,

	mschar* arch_status,

	muint4* pmnt_magic,

	muint4* db_magic,

	msint2* n_ep,

	msint2* ep_seqno_arr,

	mschar** ep_name_arr,

	msint2* dsc_ctl_node,

	mschar* dsc_status,

	msint2* n_ok_ep,

	msint2* ok_ep_arr,

	msint2* n_break_ep,

	msint2* break_ep_arr

);

功能说明:

获取指定组中第nth个库的全局信息,这里的nth是根据dmmonitor.ini指定组中所配置的守护进程先后顺序来排序的,每个组的nth都是从0开始,依次递增。

参数说明:

注意

对字符串类型的输出参数,指向的缓存长度不能小于65,避免溢出。

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定的守护进程组名,只有一组时可以不指定。

nth: 输入参数,输入要获取的数据库实例下标。

dw_time: 输出参数,输出控制守护进程本地的当前时间。

dw_ip: 输出参数,输出控制守护进程配置的IP地址。

dw_port: 输出参数,输出控制守护进程配置的端口。

dw_type: 输出参数,输出配置的守护类型。

dw_mode:输出参数,输出配置的切换模式。

dw_err_time: 输出参数,输出配置的守护进程故障认定时间。

dw_sta: 输出参数,输出控制守护进程状态。

dw_sub_sta: 输出参数,输出控制守护进程子状态。

dw_ctl_sta: 输出参数,输出守护进程控制文件状态。

db_name: 输出参数,输出守护的数据库名称。

db_ok_str: 输出参数,输出守护进程认定的库状态(OK/Error)。

svr_mode: 输出参数,输出库模式(Normal/Primary/Standby)。

svr_status: 输出参数,输出库状态(Startup/After Redo/Mount/Open/Suspend/Shutdown)。

arch_type: 输出参数,输出库上配置的归档类型(REALTIME/TIMELY)

arch_status: 输出参数,指定待获取的库为实时备库或即时备库时,输出组中主库到此备库的归档状态,如果是异步备库,则输出为“NULL”,如果是主库,则输出“VALID”。

pmnt_magic: 输出参数,输出数据库永久魔数。

db_magic: 输出参数,输出数据库魔数。

n_ep: 输入输出参数,指定库中包含的节点实例个数。输入参数:可获取的最大实例个数,输出参数:实际获取到的实例个数,建议输入值不小于16,避免获取不到完整信息。

ep_seqno_arr: 输出参数,输出指定库中所有实例的seqno数组,参数是msint2数组类型,数组长度是n_ep的输入值。

ep_name_arr: 输出参数,输出指定库中所有实例的实例名数组,参数是字符串指针数组类型,数组长度是n_ep的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免长度溢出。

dsc_ctl_node: 输出参数,输出指定库中控制节点的seqno,对单节点库,输出值为0。

dsc_status: 输出参数,输出指定库的状态。

n_ok_ep: 输入输出参数,指定库中包括的ok节点实例个数。输入参数:可获取的最大实例个数,输出参数:实际获取到的实例个数,建议输入值不小于16,避免获取不到完整信息。对单节点库,输出值为1。

ok_ep_arr: 输出参数,输出指定库中所有ok节点实例的seqno数组,参数是msint2数组类型 数组长度是n_ok_ep的输入值。

n_break_ep: 输入输出参数,指定库中当前正在故障处理的节点数。输入参数:可获取的最大实例个数,输出参数:实际获取到的实例个数,建议输入值不小于16,避免获取不到完整信息。

break_ep_arr: 输出参数,输出指定库中当前正在故障处理的节点seqno数组,参数是msint2数组类型,数组长度是n_break_ep的输入值。

返回值:

0:执行成功。

<0:执行失败。

15.dwmon_get_database_info_by_name

函数原型:

DWMON_RETURN

dwmon_get_database_info_by_name(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	mschar* dw_time,

	mschar* dw_ip,

	msint2* dw_port,

	mschar* dw_type,

	mschar* dw_mode,

	muint4* dw_err_time,

	mschar* dw_sta,

	mschar* dw_sub_sta,

	mschar* dw_ctl_sta,

	mschar* db_ok_str,

	mschar* svr_mode,

	mschar* svr_status,

	mschar* arch_type,

	mschar* arch_status,

	muint4* pmnt_magic,

	muint4* db_magic,

	msint2* n_ep,

	msint2* ep_seqno_arr,

	mschar** ep_name_arr,

	msint2* dsc_ctl_node,

	mschar* dsc_status,

	msint2* n_ok_ep,

	msint2* ok_ep_arr,

	msint2* n_break_ep,

	msint2* break_ep_arr

);

功能说明:

根据指定的数据库名称获取库的全局信息。

参数说明:

对字符串类型的输出参数,指向的缓存长度不能小于65,避免溢出。

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定的守护进程组名,只有一组时可以不指定。

db_name: 输入参数,指定要获取信息的数据库名称。

dw_time: 输出参数,输出控制守护进程本地的当前时间。

dw_ip: 输出参数,输出控制守护进程配置的IP地址。

dw_port: 输出参数,输出控制守护进程配置的端口。

dw_type: 输出参数,输出配置的守护类型。

dw_mode:输出参数,输出配置的切换模式。

dw_err_time: 输出参数,输出配置的守护进程故障认定时间。

dw_sta: 输出参数,输出控制守护进程状态。

dw_sub_sta: 输出参数,输出控制守护进程子状态。

dw_ctl_sta: 输出参数,输出守护进程控制文件状态。

inst_ok_str: 输出参数,输出守护进程认定的库状态(OK/Error)。

svr_mode: 输出参数,输出库模式(NORMAL/Primary/Standby)。

svr_status: 输出参数,输出库状态(Startup/AFTER Redo/Mount/Open/SUSPEND/Shutdown)。

arch_type: 输出参数,输出库上配置的归档类型(REALTIME/TIMELY)

arch_status: 输出参数,指定待获取的库为实时备库或即时备库时,输出组中主库到此备库的归档状态,如果是异步备库,则输出为“NULL”,如果是主库,则输出“VALID”。

pmnt_magic: 输出参数,输出数据库永久魔数。

db_magic: 输出参数,输出数据库魔数。

n_ep: 输入输出参数,指定库中包含的节点实例个数。输入参数:可获取的最大实例个数,输出参数:实际获取到的实例个数,建议输入值不小于16,避免获取不到完整信息。

ep_seqno_arr: 输出参数,输出指定库中所有实例的seqno数组,参数是msint2数组类型,数组长度是n_ep的输入值。

ep_name_arr:m输出参数,输出指定库中所有实例的实例名数组,参数是字符串指针数组类型,数组长度是n_ep的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免长度溢出。

dsc_ctl_node: 输出参数,输出指定库中控制节点的seqno,对单节点库,输出值为0。

dsc_status: 输出参数,输出指定库的状态。

n_ok_ep: 输入输出参数,指定库中包括的ok节点实例个数。输入参数:可获取的最大实例个数,输出参数:实际获取到的实例个数,建议输入值不小于16,避免获取不到完整信息。对单节点库,输出值为1。

ok_ep_arr: 输出参数,输出指定库中所有ok节点实例的seqno数组,参数是msint2数组类型 数组长度是n_ok_ep的输入值。

n_break_ep: 输入输出参数,指定库中当前正在故障处理的节点数。输入参数:可获取的最大实例个数,输出参数:实际获取到的实例个数,建议输入值不小于16,避免获取不到完整信息。

break_ep_arr: 输出参数,输出指定库中当前正在故障处理的节点seqno数组,参数是msint2数组类型,数组长度是n_break_ep的输入值。

返回值:

0:执行成功。

<0:执行失败。

16.dwmon_get_database_info

函数原型:

DWMON_RETURN

dwmon_get_database_info(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	msint2* n_ep,

	msint2* ep_seqno_arr,

	mschar** ep_name_arr,

	msint2* dsc_ctl_node,

	mschar* dsc_status,

	msint2* n_ok_ep,

	msint2* ok_ep_arr

	msint2* n_break_ep,

	msint2* break_ep_arr

);

**功能

说明:**

获取指定库上的实例信息。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取实例信息的数据库名称。

n_ep: 输入输出参数,指定库中包含的节点实例个数。输入参数:可获取的最大实例个数,输出参数:实际获取到的实例个数,建议输入值不小于16,避免获取不到完整信息。

ep_seqno_arr: 输出参数,输出指定库中所有实例的seqno数组,参数是msint2数组类型,数组长度是n_ep的输入值。

ep_name_arr: 输出参数,输出指定库中所有实例的实例名数组,参数是字符串指针数组类型,数组长度是n_ep的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免长度溢出。

dsc_ctl_node: 输出参数,输出指定库中控制节点的seqno,对单节点库,输出值为0。

dsc_status: 输出参数,输出指定库的状态。

n_ok_ep: 输入输出参数,指定库中包括的ok节点实例个数。输入参数:可获取的最大实例个数,输出参数:实际获取到的实例个数,建议输入值不小于16,避免获取不到完整信息。对单节点库,输出值为1。

ok_ep_arr: 输出参数,输出指定库中所有ok节点实例的seqno数组,参数是msint2数组类型,数组长度是n_ok_ep的输入值。

n_break_ep: 输入输出参数,指定库中当前正在故障处理的节点数。输入参数:可获取的最大 例个数,输出参数:实际获取到的实例个数,建议输入值不小于16,避免获取不到完整信息。

break_ep_arr: 输出参数,输出指定库中当前正在故障处理的节点seqno数组,参数是msint2数组类型,数组长度是n_break_ep的输入值。

返回值:

0:执行成功。

<0:执行失败。

17.dwmon_get_nth_ep_info

函数原型:

	DWMON_RETURN

dwmon_get_nth_ep_info(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	muint4 nth,

	mschar* ep_name,

	muint4* ep_port,

	mschar* ep_ok_str,

	mschar* svr_mode,

	mschar* svr_status,

	mschar* prim_inst,

	mschar* prim_mal_sta,

	mschar* prim_arch_type,

	mschar* prim_arch_sta,

	muint8* fseq,

	muint8* flsn,

	muint8* cseq,

	muint8* clsn,

	mschar* arch_type,

	muint4* n_arch,

	muint4* n_async,

	msint2* dsc_seqno,

	mschar* g_dw_status,

	mbyte* mpp_flag_mem,

	mbyte* mpp_flag_file

);

功能说明:

获取指定库上第nth个实例信息,可先通过dwmon_get_database_info接口获取到库上的节点实例个数n_ep,nth取值范围为[0, n_ep–1]。

参数说明:

对字符串类型的输出参数,指向的缓存长度不能小于65,避免溢出。

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取实例信息的数据库名称,此参数必须指定。

nth: 输入参数,指定要获取inst_name库上的第nth个实例信息。

ep_name: 输出参数,输出第nth个实例名称。

ep_port: 输出参数,输出实例端口号。

ep_ok_str: 输出参数,输出守护进程认定的实例状态(Ok/Error)。

svr_mode: 输出参数,输出实例模式(Normal/Primary/Standby)。

svr_status: 输出参数,输出实例状态(Startup/After Redo/Mount/Open/ Suspend/Shutdown)。

prim_inst: 输出参数,当前实例是Standby模式时该字段才有意义,输出对应的Primary实例名,如果是Primary模式,则输出为空。

prim_mal_sta: 输出参数,当前实例是Standby模式时该字段才有意义,输出主库控制节点到当前库的控制节点之间的mal链路状态。

prim_arch_type: 输出参数,当前实例是Standby模式时该字段才有意义,输出主库到当前实例的归档类型,包括REALTIME/TIMELY/ASYNC这三种类型。

prim_arch_sta: 输出参数,当前实例是Standby模式时该字段才有意义,输出主库控制节点到当库的控制节点的归档状态,local守护类型的除外。

fseq: 输出参数,输出实例的file_pkg_seq值。

flsn: 输出参数,输出实例的flsn值。

cseq: 输出参数,输出实例的cur_pkg_seq值。

clsn: 输出参数,输出实例的clsn值。

arch_type: 输出参数,输出实例自身配置的归档类型,只统计REALTIME/TIMELY这两种归档类型,不考虑本地LOCAL归档类型。

n_arch: 输出参数,输出实例自身配置的归档个数,只统计REALTIME/TIMELY这两种归档类型下配置的归档个数。

n_async: 输出参数,输出实例自身配置的异步归档个数。

dsc_seqno: 输出参数,对DMDSC集群才有意义,输出实例在集群中的seqno序号。

g_dw_status: 输出参数,输出实例上设置的守护进程执行标记。

mpp_flag_mem: 输出参数,输出实例内存中的mpp_ini值。

mpp_flag_file: 输出参数,输出实例dm.ini中配置的mpp_ini值。

返回值:

0:执行成功。

<0:执行失败。

18.dwmon_get_ep_info_by_name

函数原型:

DWMON_RETURN

dwmon_get_ep_info_by_name(

	mhandle mhdle,

	mschar* group_name,

	mschar* ep_name,

	muint4* ep_port,

	mschar* ep_ok_str,

	mschar* svr_mode,

	mschar* svr_status,

	mschar* prim_inst,

	mschar* prim_mal_sta,

	mschar* prim_arch_type,

	mschar* prim_arch_sta,

	muint8* fseq,

	muint8* flsn,

	muint8* cseq,

	muint8* clsn,

	mschar* arch_type,

	muint4* n_arch,

	muint4* n_async,

	msint2* dsc_seqno,

	mschar* g_dw_status,

	mbyte* mpp_flag_mem,

	mbyte* mpp_flag_file

);

功能说明:

根据指定的实例名获取实例的详细信息。

参数说明:

对字符串类型的输出参数,指向的缓存长度不能小于65,避免溢出。

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,输入指定实例所在的守护进程组名,如果只有一组可以不指定。

ep_name: 输入参数,输入要获取信息的实例名。

ep_port: 输出参数,输出实例端口号。

ep_ok_str: 输出参数,输出守护进程认定的实例状态(Ok/Error)。

svr_mode: 输出参数,输出实例模式(Normal/Primary/Standby)。

svr_status: 输出参数,输出实例状态(Startup/After Redo/Mount/Open/Suspend/Shutdown)。

prim_inst: 输出参数,当前实例是Standby模式时该字段才有意义,输出对应的Primary实例名,如果是Primary模式,则输出为空。

prim_mal_sta: 输出参数,当前实例是Standby模式时该字段才有意义,输出主库控制节点到当前库的控制节点之间的mal链路状态。

prim_arch_type: 输出参数,当前实例是Standby模式时该字段才有意义,输出主库到当前实例的归档类型,包括REALTIME/TIMELY/ASYNC这三种类型。

prim_arch_sta: 输出参数,当前实例是Standby模式时该字段才有意义,输出主库控制节点到当前库的控制节点的归档状态,local守护类型的除外。

fseq: 输出参数,输出实例的file_pkg_seq值。

flsn: 输出参数,输出实例的flsn值。

cseq: 输出参数,输出实例的cur_pkg_seq值。

clsn: 输出参数,输出实例的clsn值。

arch_type: 输出参数,输出实例自身配置的归档类型,只统计REALTIME/TIMELY这两种归档类型,不考虑本地LOCAL归档类型。

n_arch: 输出参数,输出实例自身配置的归档个数,只统计REALTIME/TIMELY这两种归档类型下配置的归档个数。

n_async: 输出参数,输出实例自身配置的异步归档个数。

dsc_seqno: 输出参数,对DMDSC集群才有意义,输出实例在集群中的seqno序号。

g_dw_status: 输出参数,输出实例上设置的守护进程执行标记。

mpp_flag_mem: 输出参数,输出实例内存中的mpp_ini值。

mpp_flag_file: 输出参数,输出实例dm.ini中配置的mpp_ini值。

返回值:

0:执行成功。

<0:执行失败。

19.dwmon_get_database_arch_info

函数原型:

DWMON_RETURN

dwmon_get_database_arch_info(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	mschar* arch_type,

	muint4* n_arch,

	mschar** arch_dest,

	mschar** mal_sta,

	mschar** arch_sta,

	muint4* n_async,

	mschar** async_dest,

	mschar** async_mal_sta

);

功能说明:

获取指定库配置的归档信息,包括归档目标实例名,到归档目标的mal链路状态和归档状态,以及异步归档信息。

参数说明:

arch_dest、mal_sta、arch_sta、async_dest和async_mal_sta都是字符串指针数组类型,其中arch_dest、mal_sta和arch_sta的数组长度是n_arch的输入值,async_dest和async_mal_sta的数组长度是n_async的输入值,建议n_arch和n_async的输入值不小于8,避免取不到完整信息。

如果归档目标是DMDSC集群,则arch_dest、async_dest会输出完整的归档配置串(比如“DSC01/DSC02”),为避免发生溢出,arch_dest和async_dest数组中的每个指针元素指向的缓存长度不能小于272。除此之外,其他字符串指针数组中的指针元素指向的缓存长度不能小于65,避免溢出。

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取归档信息的数据库名称。

arch_type: 输出参数,输出指定库配置的归档类型,只检查REALTIME/TIMELY这两种归档类型,注意缓存长度不能小于65,避免溢出。

n_arch: 输入输出参数,指定库配置的归档个数,只检查REALTIME/TIMELY这两种归档类型。输入参数:指定可获取的最大归档个数,输出参数:实际获取的归档个数,建议输入值不小于8,避免取不到完整信息。

arch_dest: 输出参数,输出指定库配置的归档目标名称,只检查REALTIME/TIMELY这两种归档类型,如果归档目标是DMDSC集群,则输出完整的归档配置串(形如“DSC01/DSC02”),为避免发生溢出,arch_dest数组中的每个指针元素指向的缓存长度不能小于272。

mal_sta: 输出参数,输出指定库的控制节点到每个归档目标控制节点的mal链路状态数组,只检查REALTIME/TIMELY这两种归档类型,如果未找到控制节点,则输出“UNKNOWN”。

arch_sta: 输出参数,输出指定库的控制节点到每个归档目标控制节点的归档状态数组,指定实例是Primary模式时,该参数输出的是有效值,只检查REALTIME/TIMELY这两种归档类型。

n_async: 输入输出参数,指定库配置的异步归档个数。输入参数:指定可获取的最大归档个数,输出参数:实际获取的归档个数,建议输入值不小于8,避免取不到完整信息。

async_dest: 输出参数,输出指定库配置的异步归档目标名称,如果归档目标是DMDSC集群,则输出完整的归档配置串(形如“DSC01/DSC02”),为避免发生溢出,async_dest数组中的每个指针元素指向的缓存长度不能小于272。

async_mal_sta:输出参数,输出指定库的控制节点到每个异步归档目标控制节点的mal链路状态数组。

返回值:

0:执行成功。

<0:执行失败。

20.dwmon_get_watch_ctl_info

函数原型:

DWMON_RETURN

dwmon_get_watch_ctl_info(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	mschar* ctl_status,

	mschar* desc

);

功能说明:

获取指定库的守护进程控制文件状态信息。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

inst_name: 输入参数,指定要获取控制文件信息的守护进程对应的数据库名称。

ctl_status: 输出参数,输出守护进程控制文件状态,注意缓存长度不能小于65,避免溢出。

desc: 输出参数,输出本地分裂库的描述信息,如果是有效状态,描述信息为空。

返回值:

0:执行成功。

<0:执行失败。

21.dwmon_get_database_open_history

函数原型:

DWMON_RETURN

dwmon_get_database_open_history(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	muint4* n_item

);

功能说明:

获取指定库的OPEN记录项个数。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取OPEN记录的守护进程对应的数据库名称。

n_item: 输出参数,输出db_name指定的库的OPEN记录项个数。

返回值:

0:执行成功。

<0:执行失败。

22.dwmon_get_nth_open_history

函数原型:

DWMON_RETURN

dwmon_get_nth_open_history(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	muint4 nth,

	mschar* tguid,

	muint8* rowid,

	mschar* time,

	mschar* sys_mode,

	mschar* p_db_name,

	mschar* c_db_name,

	muint4* p_db_magic,

	muint4* c_db_magic,

	msint2* n_ep,

	muint8* aseq_arr,

	muint8	* alsn_arr

);

功能说明:

获取指定组中指定库的第nth个open记录信息。

参数说明:

注意

对字符串类型的输出参数,指向的缓存长度不能小于65,避免溢出。

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定的守护进程组名,只有一组时可以不指定。

db_name: 输入参数,指定要获取信息的数据库名称。

nth: 输入参数,输入要获取指定第nth个OPEN记录项。

tguid: 输出参数,输出OPEN记录唯一标识。

rowid: 输出参数,输出系统表所在行的rowid值。

time: 输出参数,输出OPEN的时间点。

sys_mode: 输出参数,输出OPEN时所处的系统模式(PRIMARY/NORMAL)。

p_db_name: 输出参数,输出对应主库的实例名。

c_db_name: 输出参数,输出当前库的实例名。

p_db_magic: 输出参数,输出对应主库的db_magic值。

c_db_magic: 输出参数,输出当前库的db_magic值。

n_ep: 输入输出参数,指定库中包含的节点实例个数。输入参数:可获取的最大实例个数,输出参数:实际获取到的实例个数,建议输入值不小于16,避免获取不到完整信息。

aseq_arr: 输出参数,输出pkg_seqno数组,长度不能小于16。

alsn_arr: 输出参数,输出apply_lsn数组,长度不能小于16.

23.dwmon_get_watch_config_info

**函数原型: **

DWMON_RETURN

dwmon_get_watch_config_info(

	mhandle mhdle,

	mschar* group_name,

	mschar* inst_name,

	mschar* dw_type,

	mschar* dw_mode,

	muint4* dw_error_time,

	muint4* inst_oguid,

	muint4* inst_error_time,

	muint4* inst_recover_time,

	mschar* inst_ini,

	mschar* dcr_ini,

	muint4* inst_auto_restart,

	mschar* inst_startup_cmd,

	muint4* inst_host_check,

	muint4* rlog_send_threshold,

	muint4* rlog_apply_threshold,

	mschar*		  dcs_startup_cmd,

	mschar*		  dcs_ini,

	muint4*		  dcs_port

);

功能说明:

获取指定实例本地的守护进程配置信息。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入输出参数,当前有多个组时,作为输入参数,指定实例所在的守护进程组名,只有一组时允许不指定,如果组名为空串,则作为输出参数,输出实例所在的守护进程组名,输出缓存长度不能小于65,避免长度溢出。

inst_name: 输入参数,指定要获取配置信息的守护进程本地的实例名。

dw_type:输出参数,输出dmwatcher.ini的dw_type配置值,注意缓存长度不能小于65,避免溢出。

dw_mode:输出参数,输出dmwatcher.ini的dw_mode配置值,注意缓存长度不能小于65,避免溢出。

dw_error_time:输出参数,输出dmwatcher.ini的dw_error_time配置值。

inst_oguid:输出参数,输出dmwatcher.ini的inst_oguid配置值。

inst_error_time:输出参数,输出dmwatcher.ini的inst_error_time配置值。

inst_recover_time:输出参数,输出dmwatcher.ini的inst_recover_time配置值。

inst_ini:输出参数,输出dmwatcher.ini的inst_ini配置值,注意缓存长度不能小于257,避免溢出。

dcr_ini:输出参数,输出dmwatcher.ini的dcr_ini配置值(守护DMDSC集群时需要配置),注意缓存长度不能小于257,避免溢出。

inst_auto_restart:输出参数,输出dmwatcher.ini的inst_auto_restart配置值。

inst_startup_cmd:输出参数,输出dmwatcher.ini的inst_startup_cmd配置值,注意缓存长度不能小于257,避免溢出。

inst_host_check:输出参数,输出守护进程是否检查实例对外服务IP的网卡故障,0表示不检查,1表示检查。

rlog_send_threshold:输出参数,输出主库发送日志到备库的时间阈值。

rlog_apply_threshold:输出参数,输出备库重演日志的时间阈值。

dcs_startup_cmd:输出参数,输出dmwatcher.ini的dcs_startup_cmd配置值,注意缓存长度不能小于257,避免溢出。

dcs_ini:输出参数,输出dmwatcher.ini的dcs_ini配置值,注意缓存长度不能小于257,避免溢出。

dcs_port:输出参数,输出dmwatcher.ini的dcs_port配置值。

返回值:

0:执行成功。

<0:执行失败。

24.dwmon_get_css_config_info

函数原型:

DWMON_RETURN

dwmon_get_css_config_info(

	mhandle mhdle,

	mschar* group_name,

	mschar* inst_name,

	muint4* asm_restart_itvl,

	muint4* db_restart_itvl

);

功能说明:

获取和指定实例的dcr_seqno相同的dmcss配置的自动拉起检测间隔(DMDCR_ASM_RESTART_INTERVAL、DMDCR_DB_RESTART_INTERVAL)。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入输出参数,不能为空,只有一组时允许不指定组名,输入组名为空串的情况下,接口会输出实例所在的守护进程组名,输出缓存长度不能小于65,避免长度溢出。

inst_name: 输入参数,指定要获取配置信息的实例名。

asm_restart_itvl: 输出参数,输出实例本地的dmcss配置文件(dmdcr.ini)中配置的dmasmsvr自动拉起检测间隔(DMDCR_ASM_RESTART_INTERVAL)。

db_restart_itvl: 输出参数,输出实例本地的dmcss配置文件(dmdcr.ini)中配置的dmserver自动拉起检测间隔(DMDCR_DB_RESTART_INTERVAL)。

返回值:

0:执行成功。

<0:执行失败。

25.dwmon_get_monitor_info

函数原型:

DWMON_RETURN

dwmon_get_monitor_info (

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	muint4* n_mon,

	mschar** conn_time_arr,

	muint4* confirm_arr,

	muint8* mid_arr,

	mschar** mon_ip_arr,

	mschar** mon_version_arr

)

功能说明:

获取指定守护进程的监视器连接信息。同一个守护系统中允许最多10个监视器同时启动连接到守护进程,可通过调用此接口获取指定守护进程上的监视器连接信息,包括连接时间、确认监视器配置、监视器ID、监视器IP和监视器版本信息。

其中db_name是输入输出参数,表示指定守护进程对应的实例名,如果此参数为空,则根据dmmonitor.ini对应组中的配置顺序,选择第一个活动的守护进程获取监视器连接信息,并输出选中的守护进程本地库名称;如果指定有合法值,则返回指定库的控制守护进程上的监视器连接信息。

另外输出的数组参数中第一个数组元素存放的是本地监视器的连接信息。

参数说明:

conn_time_arr和mon_ip_arr是字符串指针数组类型,数组长度不能小于10,每个数组中的指针元素指向的缓存长度不能小于65,避免溢出。

mon_version_arr也是字符串指针数组类型,数组长度不能小于10,每个数组中的指针元素指向的缓存长度不能小于129,避免溢出。

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入输出参数,指定要获取信息的守护进程对应的实例名,在db_name为空串的情况下,会作为输出参数输出实际获取信息的实例名,此时缓存长度不能小于65,避免输出时长度溢出。

n_mon: 输入输出参数,指定守护进程上连接的监视器总个数。输入参数:可获取的最大个数,输出参数:实际获取的个数,建议输入值不小于10,避免取不到完整信息。

conn_time_arr: 输出参数,输出守护进程上建立连接的时间,数组长度是n_mon的输入值。

confirm_arr: 输出参数,输出监视器的确认配置信息,参数为muint4数组类型,数组长度是n_mon的输入值。

mid_arr: 输出参数,输出监视器的唯一ID,参数为muint8数组类型,数组长度是n_mon的输入值。

mon_ip_arr: 输出参数,输出监视器的IP地址,数组长度是n_mon的输入值。

mon_version_arr:输出参数,输出监视器的版本信息,数组长度是n_mon的输入值。

返回值:

0:执行成功。

<0:执行失败。

26.dwmon_set_cmd_execing_with_command

函数原型:

DWMON_RETURN

dwmon_set_cmd_execing_with_command (

	mhandle mhdle,

	mschar* command

);

功能说明:

如果上层有控制台工具界面,通过用户输入命令的方式调用接口,可通过此接口设置命令执行标记并传入用户执行的命令串信息,用于监视器log日志记录用户的操作信息。

在确认监视器模式下或者监视器设置有自动记录系统状态间隔(通过dwmon_set_show_interval或者dwmon_set_log_interval设置),调用命令接口之前,需要先调用此接口设置执行标记,避免和确认监视器自动接管故障主库或者监视器自动记录系统状态的操作发生并发冲突。

参数说明:

mhdle: 输入参数,监视器操作句柄。

command: 输入参数,如果上层有控制台工具界面,则表示用户手工输入的执行命令串,允许为NULL或空串。

返回值:

0:执行成功。

<0:执行失败。

27.dwmon_reset_cmd_execing

函数原型:

DWMON_RETURN

dwmon_reset_cmd_execing(

	mhandle mhdle

);

功能说明:

重置命令执行标记,和dwmon_set_cmd_execing_with_command接口配合使用,在调用命令接口执行完成后,需要调用此接口,重置执行标记,避免确认监视器无法执行自动接管故障主库的操作。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

0:执行成功。

<0:执行失败。

28.dwmon_get_dw_confirm

函数原型:

DWMON_RETURN

dwmon_get_dw_confirm(

	mhandle mhdle,

	mbool* dw_confirm

)

功能说明:

获取确认监视器标记,用于判断当前的监视器是否为确认监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄

dw_confirm: 输出参数,输出确认监视器标记,1:是确认监视器, 0:不是确认监视器。

返回值:

0:执行成功。

<0:执行失败。

29.dwmon_set_show_interval

函数原型:

DWMON_RETURN

dwmon_set_show_interval(

	mhandle mhdle,

	muint4 show_interval

)

功能说明:

设置自动显示间隔。监视器根据指定的show_interval值,每隔show_interval个时间间隔,自动输出各实例的状态信息给用户,需要使用dwmon_get_exec_msg接口获取到输出消息,show_interval单位为秒,默认值为0。

参数说明:

mhdle: 输入参数,监视器操作句柄

show_interval: 输入参数,设置定时输出状态信息的时间间隔,单位为秒,取值为0,或5~3600,取值为0表示取消自动输出,默认值为0。

返回值:

0:执行成功。

<0:执行失败。

30.dwmon_get_show_interval

函数原型:

DWMON_RETURN

dwmon_get_show_interval(

	mhandle mhdle,

	muint4* show_interval

);

功能说明:

获取当前设置的自动显示时间间隔,单位为秒。

参数说明:

mhdle: 输入参数,监视器操作句柄。

show_interval: 输出参数,输出当前设置的自动显示时间间隔。

返回值:

0:获取成功。

<0:获取失败。

31.dwmon_set_log_interval

函数原型:

DWMON_RETURN

dwmon_set_log_interval(

	mhandle mhdle,

	muint4 log_interval

);

功能说明:

设置自动写入日志文件间隔。监视器按照设置的log_interval值,每隔log_interval个时间间隔,自动将各实例的状态信息写入到日志文件,log_interval单位为秒,默认值为1。

参数说明:

mhdle: 输入参数,监视器操作句柄。

log_interval: 输入参数,设置定时写入状态信息到日志文件的时间间隔,单位为秒,取值为0,1或5~3600。

取值为0表示不写入任何信息到日志文件。

取值为1表示只写入普通的状态变化日志,例如收到新的信息或者检测到状态变化等。

取值为5~3600范围内的数值时,除了生成普通日志信息外,会按照设置的间隔定期写入站点状态信息到日志文件中。

返回值:

0:执行成功。

<0:执行失败。

32.dwmon_get_log_interval

函数原型:

DWMON_RETURN

dwmon_get_log_interval(

	mhandle mhdle,

	muint4* log_interval

)

功能说明:

获取当前设置的自动写入日志的时间间隔,单位为秒。

参数说明:

mhdle: 输入参数,监视器操作句柄。

log_interval:输出参数,输出当前设置的时间间隔。

返回值:

0:执行成功。

<0:执行失败。

33.dwmon_set_log_file_size

函数原型:

DWMON_RETURN

dwmon_set_log_file_size(

	mhandle mhdle,

	muint4 log_file_size

)

功能说明:

设置监视器单个的日志文件大小,达到最大值后,会自动生成并切换到新的日志文件中,如果达到最大的日志总空间限制,会自动删除创建时间最早的日志文件,日志文件命名方式为“dmmonitor_年月日时分秒.log”,例如“dmmonitor_20160201155820.log”。

参数说明:

mhdle: 输入参数,监视器操作句柄。

log_file_size: 输入参数,设置单个日志文件大小,单位为M,取值范围为16~2048,默认值为64。

返回值:

0:执行成功。

<0:执行失败。

34.dwmon_get_log_file_size

函数原型:

DWMON_RETURN

dwmon_get_log_file_size(

	mhandle mhdle,

	muint4* log_file_size

);

功能说明:

获取当前设置的单个日志文件大小,单位为M。

参数说明:

mhdle: 输入参数,监视器操作句柄。

log_file_size: 输出参数,输出当前设置的单个日志文件大小。

返回值:

0:执行成功。

<0:执行失败。

35.dwmon_get_log_path

函数原型:

DWMON_RETURN

dwmon_get_log_path(

	mhandle mhdle,

	mschar* log_path

);

功能说明:

获取当前的日志文件路径。

参数说明:

mhdle: 输入参数,监视器操作句柄。

log_path: 输出参数,输出当前的日志文件路径,log_path的缓存长度不能小于257,避免溢出。

返回值:

0:执行成功。

<0:执行失败。

36.dwmon_set_log_space_limit

函数原型:

DWMON_RETURN

dwmon_set_log_space_limit(

	mhandle mhdle,

	muint4 log_space_limit

);

功能说明:

调用此接口,可以设置监视器的日志总空间大小,达到设置的总空间大小后,会自动删除创建时间最早的日志文件。

参数说明:

mhdle: 输入参数,监视器操作句柄。

log_space_limit: 输入参数,设置日志总空间大小,单位为M,取值为0或256~4096,默认值为0,表示没有空间限制。

返回值:

0:执行成功。

<0:执行失败。

37.dwmon_get_log_space_limit

函数原型:

DWMON_RETURN

dwmon_get_log_space_limit(

	mhandle mhdle,

	muint4* log_space_limit

);

功能说明:

获取当前设置的日志总空间大小,单位为M。

参数说明:

mhdle: 输入参数,监视器操作句柄。

log_space_limit:输出参数,输出当前设置的日志总空间大小。

返回值:

0:执行成功。

<0:执行失败。

38.dwmon_login

函数原型:

DWMON_RETURN

dwmon_login(

	mhandle mhdle,

	mschar* username,

	mschar* password

);

功能说明:

登录监视器,这里的登录口令和服务器的登录口令是一致的,且必须有DBA权限。

校验登录信息时由守护进程转发给服务器校验,并返回校验结果给监视器,因此需要保证系统中至少有一个活动库,否则无法校验成功。

参数说明:

mhdle: 输入参数,监视器操作句柄。

username: 输入参数,登录用户名。

password: 输入参数,登录密码。

返回值:

0:执行成功。

<0:执行失败。

39.dwmon_logout

函数原型:

DWMON_RETURN

dwmon_logout(

	mhandle mhdle

);

功能说明:

退出登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

0:执行成功。

<0:执行失败。

40.dwmon_set_database_recover_time

函数原型:

DWMON_RETURN

dwmon_set_database_recover_time(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	muint4 recover_time

);

功能说明:

设置指定备库的恢复间隔时间,设置成功后,recover_time值保存在对应主库的守护进程内存中,并且只对指定的备库起作用。

此接口只允许对指定备库执行修改操作,如果需要考虑对某个组或所有组中的备库执行修改操作,则可以使用dwmon_set_group_recover_time接口来实现。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定执行操作的守护进程组名,只有一组时可以不指定组名。

db_name:输入参数,指定要设置恢复间隔时间的备库实例名。

recover_time:输入参数,指定要设置的恢复间隔时间,取值3~86400s,设置为0时,表示指定备库不需要有时间间隔限制,满足恢复条件后,主库的守护进程就会启动恢复流程。

返回值:

0:执行成功。

<0:执行失败。

41.dwmon_set_database_arch_invalid

函数原型:

DWMON_RETURN

dwmon_set_database_arch_invalid(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

设置主库到指定备库的归档状态无效。

此接口只允许对指定备库设置归档无效,如果需要考虑对某个组或所有组中的备库执行设置操作,则可以使用dwmon_set_group_arch_invalid接口来实现。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定执行操作的守护进程组名,只有一组时可以不指定组名。

db_name:输入参数,指定要修改归档状态无效的备库实例名。

返回值:

0:执行成功。

<0:执行失败。

42.dwmon_startup_database_watch

函数原型:

DWMON_RETURN

dwmon_startup_database_watch(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

打开指定库的守护进程监控功能,守护进程启动后,默认监控功能处于打开状态。

对DMDSC集群,此接口只通知控制守护进程执行。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要打开监控的守护进程组名,只有一组时可以不指定组名。

db_name:输入参数,指定要打开监控的守护进程所在的本地实例名称。

返回值:

>=0:执行成功,执行前组中所有守护进程的监控已经处于打开状态时,返回值为100。

<0:执行失败。

43.dwmon_startup_watch

函数原型:

DWMON_RETURN

dwmon_startup_watch(

	mhandle mhdle,

	mschar* group_name

);

功能说明:

打开指定组的守护进程监控功能,守护进程启动后,默认监控功能处于打开状态。

对DMDSC集群,此接口只通知控制守护进程执行。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要打开监控的守护进程组名,只有一组时可以不指定组名。

返回值:

>=0:执行成功,执行前组中所有守护进程的监控已经处于打开状态时,返回值为100。

<0:执行失败。

44.dwmon_startup_watch_all

函数原型:

DWMON_RETURN

dwmon_startup_watch_all(

	mhandle mhdle

);

功能说明:

打开所有组的守护进程监控功能,守护进程启动后,默认监控功能处于打开状态。

只有MPP主备环境允许调用此接口。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

>=0:执行成功,执行前执行库的守护进程的监控已经处于打开状态时,返回值为100。

<0:执行失败。

45.dwmon_stop_database_watch

函数原型:

DWMON_RETURN

dwmon_stop_database_watch(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

关闭指定库的守护进程的监控功能,监控功能被关闭后,守护进程还可以正常地接收和发送消息,但无法根据当前的实例状态来自动处理故障以及实例的自动拉起等,关闭后守护进程处于Shutdown状态。

如果需要正常地退出实例或者保持实例为Mount状态,则可以关闭监控功能,否则建议保持监控功能为打开状态,以保证能够及时处理系统的各种情况。

对DMDSC集群,此接口只通知控制守护进程执行。

执行此操作需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要关闭监控的守护进程组名,只有一组时可以不指定组名。

db_name:输入参数,指定要关闭监控的守护进程的本地实例名。

返回值:

>=0:指定库的守护进程的监控关闭成功。执行前守护进程的监控已经处于关闭状态时,返回值为100。

<0:执行失败。

46.dwmon_stop_watch

函数原型:

DWMON_RETURN

dwmon_stop_watch(

	mhandle mhdle,

	mschar* group_name

);

功能说明:

关闭指定组的所有守护进程的监控功能,监控功能被关闭后,守护进程还可以正常地接收和发送消息,但无法根据当前的实例状态来自动处理故障以及实例的自动拉起等,关闭后守护进程处于Shutdown状态。

如果需要正常地退出实例或者保持实例为Mount状态,则可以关闭监控功能,否则建议保持监控功能为打开状态,以保证能够及时处理系统的各种情况。

对DMDSC集群,此接口只通知控制守护进程执行。

执行此操作需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要关闭监控的守护进程组名,只有一组时可以不指定组名。

返回值:

>=0:所有守护进程的监控关闭成功。执行前组中所有守护进程的监控已经处于关闭状态时,返回值为100。

<0:执行失败

47.dwmon_stop_watch_all

函数原型:

DWMON_RETURN

dwmon_stop_watch_all(

	mhandle mhdle

);

功能说明:

关闭所有组的守护进程监控功能,监控功能被关闭后,守护进程还可以正常地接收和发送消息,但无法根据当前的实例状态来自动处理故障以及实例的自动拉起等,关闭后守护进程处于Shutdown状态。

如果需要正常地退出实例或者保持实例为Mount状态,则可以关闭监控功能,否则建议保持监控功能为打开状态,以保证能够及时处理系统的各种情况。

执行此操作需要先登录监视器,只有MPP主备环境下允许调用此接口。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

>=0:所有守护进程的监控关闭成功,执行前所有组守护进程的监控已经处于关闭状态时,返回值为100。

<0:执行失败。

48.dwmon_startup_group

函数原型:

DWMON_RETURN

dwmon_startup_group(

	mhandle mhdle,

	mschar* group_name

);

功能说明:

启动指定组的所有实例,在dmwatcher.ini中INST_AUTO_RESTART配置为0时该接口可以成功执行,配置为1时在守护进程的监控功能打开的情况下,守护进程可以自动完成启动实例的功能,不需要再调用接口执行。

对DMDSC集群,由dmcss执行拉起动作,和dmwatcher.ini中的INST_AUTO_RESTART配置参数没有关系,由dmdcr.ini中的配置参数决定是否可以执行自动拉起,如果某个实例可以被dmcss自动拉起,则dmcss会忽略收到的拉起命令,等待自动拉起。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要启动实例的守护进程组名,只有一组时可以不指定。

返回值:

>=0:所有实例都启动成功,执行前组中所有实例已经处于活动状态时,返回值为100。

<0:执行失败。

49.dwmon_startup_group_all

函数原型:

DWMON_RETURN

dwmon_startup_group_all(

	mhandle mhdle

);

功能说明:

启动所有组的实例,在dmwatcher.ini中INST_AUTO_RESTART配置为0时该接口可以成功执行,配置为1时在守护进程的监控功能打开的情况下,守护进程可以自动完成启动实例的功能,不需要再调用接口执行。

只有MPP主备环境下允许调用此接口。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

>=0:所有实例都启动成功,执行前所有组的实例已经处于活动状态时,返回值为100。

<0:执行失败。

50.dwmon_stop_group

函数原型:

DWMON_RETURN

dwmon_stop_group(

	mhandle mhdle,

	mschar* group_name

);

功能说明:

关闭指定组中的所有活动实例,关闭所有活动实例之前,会先关闭所有控制守护进程的监控功能,避免守护进程将实例再次拉起。

对DMDSC集群,是由dmcss执行退出操作,在dmcss通知所有实例退出之前,会先关闭dmcss的自动拉起功能。执行此操作需要先登录监视器,另外关闭守护进程只是将守护进程切换为Shutdown状态,并没有退出。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要关闭实例的守护进程组名,只有一组时可以不指定。

返回值:

>=0:所有实例都退出成功,执行前组中实例已经全部退出时,返回值为100。

<0:执行失败。

51.dwmon_stop_group_all

函数原型:

DWMON_RETURN

dwmon_stop_group_all(

	mhandle mhdle

);

功能说明:

关闭所有组的所有活动实例,关闭实例之前,会先关闭所有守护进程的监控功能,避免守护进程将实例再次拉起。

只有MPP主备环境下允许调用此接口,执行此操作需要先登录监视器,另外关闭守护进程只是将守护进程切换为Shutdown状态,并没有退出。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

>=0:所有实例都退出成功,执行前所有组的实例已经全部退出时,返回值为100。

<0:执行失败。

52.dwmon_kill_group

函数原型:

DWMON_RETURN

dwmon_kill_group(

	mhandle mhdle,

	mschar* group_name

);

功能说明:

强制杀掉指定组中的活动实例。

调用dwmon_stop_group关闭指定组的实例时,如果实例正在执行守护进程发起的命令,或者守护进程不是STARTUP、OPEN或RECOVERY状态,会导致接口执行失败,在这种情况下,如果需要强制关闭实例,则可以通过调用dwmon_kill_group接口来完成。

此接口执行时不要求先登录监视器,并且也会将守护进程切换为Shutdown状态(如果已经是Shutdown状态则跳过不再切换),避免守护进程将实例重新拉起。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要强杀实例的守护进程组名,只有一组时可以不指定。

返回值:

>=0:所有实例都强杀成功,执行前组中实例已经全部退出并且守护进程都是Shutdown状态时返回值为100。

<0:执行失败。

53.dwmon_kill_group_all

函数原型:

DWMON_RETURN

dwmon_kill_group_all(

	mhandle mhdle

);

功能说明:

强制杀掉所有组中的活动实例。

调用dwmon_stop_group_all关闭所有组的实例时,如果实例正在执行守护进程发起的命令,或者守护进程不是STARTUP、OPEN或RECOVERY状态,会导致接口执行失败,在这种情况下,如果需要强制关闭实例,则可以通过调用dwmon_kill_group_all接口来完成。

只有MPP主备环境下允许调用此接口,此接口执行时不要求先登录监视器,并且也会将守护进程切换为Shutdown状态(如果已经是Shutdown状态则跳过不再切换),避免守护进程将实例重新拉起。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

>=0:所有实例都强杀成功,执行前所有组的实例已经全部退出并且守护进程都是Shutdown状态则返回值为100。

<0:执行失败。

54.dwmon_startup_database

函数原型:

DWMON_RETURN

dwmon_startup_database(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

启动指定组中指定的数据库实例。

如果指定的库是单机,则由守护进程执行拉起动作,如果指定的库是DMDSC集群,则由守护进程再去通知主从css各自执行拉起动作。

此命令执行前,如果守护进程处于Shutdown状态,会将其切换为Startup状态,如果主从css的自动拉起功能是关闭的,在各节点实例拉起成功后,会将其打开。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要启动的库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要启动的数据库名称,此参数必须指定。

返回值:

>=0:执行成功,执行前库已经处于活动状态时返回值为100。

<0:执行失败。

55.dwmon_stop_database

函数原型:

DWMON_RETURN

dwmon_stop_instance(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

关闭指定组中指定的数据库实例。

如果指定的库是单机,则由守护进程通知单机库正常退出,如果指定的库是DMDSC集群,则由守护进程再去通知主css依次退出每个节点实例。

此命令执行完成后,会将守护进程切换为Shutdown状态,并将主从css的自动拉起功能关闭。

注意:

如果要退出的是全局守护类型的备库,为了避免触发主库的Failover动作,要求此备库已经被detach分离出去,也就是备库归档要处于无效状态,才允许将其正常退出。

如果要退出的是主库,在自动切换模式下,为了避免触发备库的自动接管,要求所有备库都已经被detach分离出去,也就是所有备库归档都处于无效状态,才允许退出主库,手动切换模式下没有此要求。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要关闭的库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要关闭的数据库名称,此参数必须指定。

返回值:

>=0:执行成功,执行前库已经退出时返回值为100。

<0:执行失败。

56.dwmon_kill_database

函数原型:

DWMON_RETURN

dwmon_kill_database(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

强制关闭指定组中指定的数据库实例。

如果指定的库是单机,则由守护进程强制杀掉指定库的进程,如果指定的库是DMDSC集群,则由守护进程再去通知主css强杀所有节点实例。

注意:此命令执行完成后,会将守护进程切换为Shutdown状态。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要强制关闭的库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要强制关闭的数据库名称,此参数必须指定。

返回值:

>=0:执行成功,执行前库已经不是活动状态时返回值为100。

<0:执行失败。

57.dwmon_open_database

函数原型:

DWMON_RETURN

dwmon_open_database(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

在系统中存在其他故障实例时,守护进程无法自动Open主库,或者系统中没有活动主库时,守护进程无法自动Open备库,这种情况下,可以调用此接口强制Open指定的数据库。

执行此操作需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要强制Open库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要强制Open的数据库名称,此参数必须指定。

返回值:

>=0:执行成功,执行前库已经处于Open状态时返回值为100。

<0:执行失败。

58.dwmon_get_switchover_standby

函数原型:

DWMON_RETURN

dwmon_get_switchover_standby(

	mhandle mhdle,

	mschar* group_name,

	muint4* n_db,

	mschar** db_name_arr

);

功能说明:

获取可以切换为主库的备库信息,这里的切换是指主备库都正常,且处于Open状态时,交换主备库模式,将备库切换为新的主库,主库切换为备库的操作。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要获取切换信息的组名,只有一组时可以不指定。

n_db: 输入输出参数,可以执行切换的备库个数。输入参数:指定可获取的最大备库个数,输出参数:实际获取的备库个数,建议输入值不小于8,避免取不到完整信息。

db_name_arr: 输出参数,输出可以执行切换的备库名称,参数是字符串指针数组类型,数组长度是n_db的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免溢出。

返回值:

0:执行成功。

<0:执行失败。

59.dwmon_switchover

函数原型:

DWMON_RETURN

dwmon_switchover(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

)

;

功能说明:

使用指定的备库和当前的主库执行切换操作,这里的切换是指主备库都正常,且处于Open状态时,交换主备库模式,将备库切换为新的主库,主库切换为备库的操作。

此接口只有在指定的备库满足切换条件时才能够执行成功,可以先调用dwmon_get_switchover_standby获取到满足条件的备库列表。

执行此操作需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要执行切换的备库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要执行切换的备库名称,只有一个备库时可以不指定。

返回值:

0:执行成功。

<0:执行失败。

60.dwmon_get_takeover_standby

函数原型:

DWMON_RETURN

dwmon_get_takeover_standby(

	mhandle mhdle,

	mschar* group_name,

	mbool force_flag,

	muint4* n_db,

	mschar** db_name_arr

);

功能说明:

获取可以接管为主库的备库信息,在主库发生故障时,可以通过调用此接口查找可以接管为新的主库的备库实例,其中包括正常接管和强制接管,通过输入参数force_flag可以指定接管方式。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要获取接管信息的组名,只有一组时可以不指定。

force_flag: 输入参数,指定接管方式,TRUE: 强制接管,FALSE: 正常接管。

n_db: 输入输出参数,可以执行接管操作的备库个数。输入参数:可获取的最大备库个数,输出参数:实际获取的备库个数,建议输入值不小于8,避免取不到完整信息。

db_name_arr: 输出参数,输出可以执行接管操作的备库实例名,参数是字符串指针数组类型,数组长度是n_db的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免溢出。

返回值:

0:执行成功。

<0:执行失败。

61.dwmon_takeover

函数原型:

DWMON_RETURN

dwmon_takeover(

mhandle mhdle,
mschar

* group_name,

mschar

* db_name

);

功能说明:

主库故障后,可以通过调用此接口执行正常地接管操作,注意,此接口只有在指定备库满足正常接管条件时才能够执行成功,可以先调用dwmon_get_takeover_standby获取到符合正常接管条件的备库实例,force_flag指定为FALSE。

执行此操作需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要执行接管的备库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要执行接管的备库名称,只有一个备库时可以不指定。

返回值:

0:执行成功。

<0:执行失败。

62.dwmon_takeover_force

函数原型:

DWMON_RETURN

dwmon_takeover_force(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

主库故障后,可以通过调用此接口执行强制接管操作,注意,此接口只有在指定备库满足强制接管条件时才能够执行成功,可以先调用dwmon_get_takeover_standby获取到符合强制接管条件的备库实例,force_flag指定为TRUE。

执行此操作需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要执行强制接管的备库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要执行强制接管的备库名称,只有一个备库时可以不指定。

返回值:

0:执行成功。

<0:执行失败。

63.dwmon_check_mppctl

函数原型:

DWMON_RETURN

dwmon_check_mppctl(

	mhandle mhdle

);

功能说明:

配置为MPP主备环境时,可通过调用此接口检查当前各个活动节点的dmmpp.ctl是否处于一致状态,只有MPP主备环境下允许调用此接口。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

0:处于一致状态。

<0:检查失败,或者控制文件不一致(返回值为-12)。

64.dwmon_recover_mppctl

函数原型:

DWMON_RETURN

dwmon_recover_mppctl(

	mhandle mhdle

);

功能说明:

配置为MPP主备环境时,如果某个活动节点的dmmpp.ctl不一致,可通过调用此接口恢复到一致状态。

只有MPP主备环境下允许调用此接口,并且需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

0:执行成功。

<0:执行失败。

65.dwmon_get_mpp_site_info

函数原型:

DWMON_RETURN

dwmon_get_mpp_site_info(

	mhandle mhdle,

	muint4* n_site,

	muint4* ep_seqno,

	mschar** db_name,

	mschar** db_ip,

	muint4* db_port

);

功能说明:

配置为MPP主备环境时,可通过调用此接口获取MPP节点信息,注意只有MPP主备环境下允许调用此接口。

参数说明:

mhdle: 输入参数,监视器操作句柄。

n_site: 输入输出参数,MPP节点数。输入参数:可获取的最大节点数,输出参数:实际获取的节点数,建议输入值不小于1024,避免取不到完整信息。

ep_seqno: 输出参数,输出MPP节点号,参数为muint4数组类型,数组长度是n_site的输入值。

db_name: 输出参数,输出MPP节点实例名,参数是字符串指针数组类型,数组长度是n_sit 的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免溢出。

db_ip: 输出参数,输出MPP节点IP地址,参数是字符串指针数组类型,数组长度是n_site的输入值,数组中每个指针元素指向的缓存长度不能小于65,避免溢出。

db_port: 输出参数,输出MPP节点端口号,参数为muint4数组类型,数组长度是n_site的输入值。

返回值:

0:执行成功。

<0:执行失败。

66.dwmon_tip

函数原型:

DWMON_RETURN

dwmon_tip(

	mhandle mhdle

);

功能说明:

可调用此接口查看系统当前运行状态,输出的系统状态信息可通过消息相关接口获取到。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

0:系统运行正常,所有实例和守护进程都处于OPEN状态。

-25:所有组中都有正常的主库实例(实例和守护进程都是OPEN状态),不影响系统使用,但是存在有其他异常实例,具体描述信息可通过消息相关接口获取。

-26:系统运行异常,不是所有组都有正常的主库实例,守护进程正在自动处理,请稍后再次调用接口判断,具体描述信息可通过消息相关接口获取。

-27:系统运行异常,不是所有组都有正常的主库实例,需要用户根据描述信息确认是否进行人工干预,具体描述信息可通过消息相关接口获取。

其他<0的值:表示接口执行失败。

67.dwmon_set_group_arch_invalid

函数原型:

DWMON_RETURN

dwmon_set_group_arch_invalid(

	mhandle mhdle,

	mschar* group_name

);

功能说明:

修改指定组中所有备库的归档为无效状态,如果未指定组名,则通知所有组执行。

注意:执行此操作需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,守护组名,不指定则对所有组执行。

返回值:

0:执行成功。

<0:执行失败。

68.dwmon_set_group_recover_time

函数原型:

DWMON_RETURN

dwmon_set_group_recover_time(

	mhandle mhdle,

	mschar* group_name,

	muint4 recover_time

);

功能说明:

修改指定组中所有备库的恢复间隔(3~86400s),只修改组中主库对应守护进程的内存值,如果未指定组名,则通知所有组执行。

注意:执行此操作需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,守护组名,不指定则对所有组执行。

recover_time: 输入参数,指定恢复间隔(3~86400s),只修改组中主库守护进程的内存值。

返回值:

0:执行成功。

<0:执行失败。

69.dwmon_set_group_para_value

函数原型:

DWMON_RETURN

dwmon_set_group_para_value(

	mhandle mhdle,

	mschar* group_name,

	mschar* para_name,

	mschar* para_value

);

功能说明:

修改指定组的所有守护进程的指定配置参数,同时修改dmwatcher.ini配置文件和内存值,如果未指定组名,则通知所有组执行。

目前可修改的参数包括:DW_ERROR_TIME、INST_RECOVER_TIME、INST_ERROR_TIME、INST_AUTO_RESTART、INST_SERVICE_IP_CHECK、RLOG_SEND_THRESHOLD、RLOG_APPLY_THRESHOLD。

如果组中某个守护进程故障,则跳过不修改,如果要重启故障的守护进程,需要在重启前修改守护进程dmwatcher.ini中的DW_ERROR_TIME和远程一致,否则dmmonitor执行命令时会报错处理。

注意:执行此操作需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,守护组名,不指定则对所有组执行。

para_name: 输入参数,指定要修改的参数名称,目前只允许是DW_ERROR_TIME、INST_RECOVER_TIME、INST_ERROR_TIME、INST_AUTO_RESTART、INST_SERVICE_IP_CHECK、RLOG_SEND_THRESHOLD、RLOG_APPLY_THRESHOLD中的一种。

para_value: 输入参数,指定要修改的参数值,和para_name对应。

返回值:

0:执行成功。

<0:执行失败。

70.dwmon_set_group_auto_restart_on

函数原型:

DWMON_RETURN

dwmon_set_group_auto_restart_on(

	mhandle mhdle,

	mschar* group_name

);

功能说明:

打开指定组内所有DMDSC集群节点实例的自动拉起标记。

DMDSC集群的自动拉起是靠dmcss执行的,dmcss只负责拉起和自己的dcr_seqno相同的db节点。

此接口只修改dmcss内存中的自动拉起标记值,不会修改dmdcr.ini中的配置值,如果dmcss重启,此修改会丢失。

如果dmcss未配置自动拉起参数(DMDCR_DB_RESTART_INTERVAL/DMDCR_DB_STARTUP_CMD),此命令会执行失败。

此接口执行时,有可能所有节点实例都还未启动,无法校验登录口令,因此不要求先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要执行操作的组名,只有一组时可以不指定。

返回值:

0:执行成功。

<0:执行失败。

71.dwmon_set_group_auto_restart_off

函数原型:

DWMON_RETURN

dwmon_set_group_auto_restart_off(

	mhandle mhdle,

	mschar* group_name

);

功能说明:

关闭指定组内所有DMDSC集群节点实例的自动拉起标记。

和dwmon_set_group_auto_restart_on接口相对应,可以一次性关闭守护系统内所有DMDSC集群上dmcss的自动拉起标记。

此命令只修改dmcss内存中的自动拉起标记值,如果dmcss重启,此修改会丢失。

执行此操作需要先登录监视器。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要执行操作的组名,只有一组时可以不指定。

返回值:

0:执行成功。

<0:执行失败。

72.dwmon_detach_database

函数原型:

DWMON_RETURN

dwmon_detach_database(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

此接口允许将指定的备库分离出守护进程组,执行此接口需要先登录监视器。

对于全局守护类型的备库,使用此命令不会触发主库的Failover故障处理流程。该接口不会修改相关的配置信息,只是为了需要主动维护备库时使用。

接口会依次执行下列操作:

  1. 设置指定备库的恢复间隔为86400(s)
  2. 修改主库到指定备库的归档状态无效

本接口不会主动退出备库实例,如果需要执行退出操作,可再通过调用dwmon_stop_instance接口完成。

在备库维护结束后,如果备库是退出状态,可先调用dwmon_startup_instance接口将备库启动,然后再调用dwmon_attach_instance接口将备库重加入守护进程组。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要执行操作的守护进程组名,只有一组时可以不指定。

db_name: 输入参数,指定要正常分离出的备库名称,此参数必须指定。

返回值:

0:执行成功。

<0:执行失败。

73.dwmon_attach_database

函数原型:

DWMON_RETURN

dwmon_attach_instance(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

在使用dwmon_detach_instace接口分离出去的备库维护完成后,可通过调用此接口将备库重加入守护进程组,执行此接口需要先登录监视器。

此接口执行时,会通知主库将指定备库的恢复间隔调整为3s,3s后主库守护进程会发起Recovery流程,将备库重加入守护系统。

注意,此接口不会将备库拉起,如果备库处于退出状态,需要先调用dwmon_startup_instance接口将备库启动。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,指定要执行操作的守护进程组名,只有一组时可以不指定。

db_name: 输入参数,指定要重加入的备库名称,此参数必须指定。

返回值:

0:执行成功。

<0:执行失败。

74.dwmon_get_source_database_name

函数原型:

DWMON_RETURN

dwmon_get_source_instance_name(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	mschar* source_name

);

功能说明:

获取指定库的源库名称,指定库为备库时才有意义,可以是异步备库。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

source_name: 输出参数,输出备库的源库名称,注意缓存长度不能小于65,避免发生溢出。

返回值:

0:执行成功。

<0:执行失败。

75.dwmon_get_ep_arch_send_info

函数原型:

DWMON_RETURN

dwmon_get_ep_arch_send_info(

	mhandle mhdle,

	mschar* group_name,

	mschar* source_name,

	mschar* db_name,

	muint4* time_in_ini,

	muint4* time_in_mem,

	mschar* last_recover_time,

	mint4* last_recover_code,

	mschar* arch_type,

	mschar* mal_sta,

	mschar* arch_sta,

	mschar* send_type,

	mschar* last_start_time,

	mschar* last_end_time,

	mint8* last_send_time,

	muint8* last_start_lsn,

	muint8* last_end_lsn,

	muint4* last_send_len,

	muint4* last_send_ptx,

	mint4* code,

	mschar* desc_info,

	mint4* recnt_cnt,

	mint8* recnt_send_len,

	mint8* recnt_ptx_cnt,

	mint8* recnt_send_time,

	mint8* max_send_time,

	mschar* max_end_time,

	muint4* max_ptx_cnt,

	muint4* max_send_len,

	mint8* max_send_lsn,

	mint8* total_send_cnt,

	mint8* total_send_len,

	mint8* total_ptx_cnt,

	mint8* total_send_time

);

功能说明:

获取指定的源实例到指定备库的归档发送信息。

源库如果是DMDSC集群,则需要依次取出集群内每个源实例到指定备库的归档发送信息,这个需要结合dwmon_get_source_instance_name和dwmon_get_instance_ep_info这两个接口来完成。

首先用dwmon_get_source_instance_name获取到源库名称,再通过dwmon_get_instance_ep_info获取到源库的所有实例名,再通过本接口依次取出源库每个实例到指定备库的归档发送信息,接口中的source_name字段就是指源库中的某个实例名。

如果备库是DMDSC集群,则备库控制节点为重演节点,以下参数说明中的备库均指备库控制节点,包括mal_sta和arch_sta这两个字段,如果备库是单节点,则就指备库自身。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,输入指定备库所在的守护进程组名,如果只有一组可以不指定。

source_name:输入参数,输入要获取归档发送信息的源库实例名。

db_name: 输入参数,输入要获取归档发送信息的备库名称。

time_in_ini:输出参数,输出源库守护进程dmwatcher.ini中配置INST_RECOVER_TIME值。

time_in_mem:输出参数,输出源库守护进程内存中的INST_RECOVER_TIME值。

last_recover_time:输出参数,输出源实例上次对指定备库执行恢复操作的时间,对local守护类型的备库无效,NONE表示未执行过恢复操作,注意缓存长度不能小于65,避免溢出。

last_recover_code:输出参数,输出源实例上次对指定备库执行恢复操作的执行结果code,对local守护类型无效,0表示执行成功,100表示实际未执行,小于0表示执行失败。

arch_type:输出参数,输出源实例source_name到备库的归档类型,包括REALTIME/TIMELY/ASYNC这三种类型,注意缓存长度不能小于65,避免溢出。

mal_sta:输出参数,输出源实例source_name到备库的mal链路状态,注意缓存长度不能小于65,避免溢出。

arch_sta:输出参数,输出源实例source_name到备库的归档状态,注意缓存长度不能小于65,避免溢出。

send_type:输出参数,输出源实例source_name到备库的归档发送类型,FOR REALTIME SEND和FOR TIMELY SEND表示正常的归档发送,FOR RECOVER SEND表示守护进程发起的归档发送,FOR ASYNC SEND表示定时器触发的异步归档发送,注意缓存长度不能小于65,避免溢出。

last_start_time:输出参数,输出源实例source_name到备库的最近一次归档发送起始时间,NONE表示未执行过发送操作,注意缓存长度不能小于65,避免溢出。

last_end_time:输出参数,输出源实例source_name到备库的最近一次归档发送结束时间,end_time为NONE时,如果start_time也为NONE,则表示未执行过发送操作,如果start_time为具体时间,则表示发送尚未结束,注意缓存长度不能小于65,避免溢出。

last_send_time:输出参数,输出源实例source_name到备库的最近一次归档发送耗时(微秒)。

last_start_lsn:输出参数,输出源实例source_name到备库的最近一次归档发送起始lsn。

last_end_lsn:输出参数,输出源实例source_name到备库的最近一次归档发送结束lsn。

last_send_len:输出参数,输出源实例source_name到备库的最近一次归档发送长度(字节)。

last_send_ptx:输出参数,输出源实例source_name到备库的最近一次发送的PTX个数。

code:输出参数,输出源实例source_name到备库的最近一次归档发送code,0表示执行成功,100表示实际未执行,小于0表示执行失败。

desc_info:输出参数,输出源实例source_name到备库的最近一次归档发送描述信息,注意缓存长度不能小于513,避免溢出。

recnt_cnt:输出参数,输出源实例source_name到备库的最近日志发送次数N。

recnt_send_len: 输出参数,输出源实例source_name到备库的最近N次累计日志发送长度(字节),N值取recnt_cnt值,下同。

recnt_ptx_cnt:输出参数,输出源实例source_name到备库的最近N次累计发送的PTX个数。

recnt_send_time:输出参数,输出源实例source_name到备库的最近N次累计日志发送耗时(微秒)。

max_send_time:输出参数,输出源实例source_name到备库的最大发送耗时(微秒)。

max_end_time:输出参数,输出源实例source_name到备库最大发送耗时的结束时间,注意缓存长度不能小于65,避免溢出。

max_ptx_cnt:输出参数,输出源实例source_name到备库发送的最大PTX个数。

max_send_len:输出参数,输出源实例source_name到备库发送的最大日志长度(字节)。

max_send_lsn:输出参数,输出源实例source_name到备库发送的最大日志LSN。

total_send_cnt: 输出参数,输出源实例source_name到备库总的归档发送次数。

total_send_len:输出参数,输出源实例source_name到备库总的归档发送长度(字节)。

total_ptx_cnt:输出参数,输出源实例source_name到备库总的PTX发送个数。

total_send_time:输出参数,输出源实例source_name到备库总的归档发送耗时(微秒)。

返回值:

0:执行成功。

<0:执行失败。

76.dwmon_get_n_apply

函数原型:

DWMON_RETURN

dwmon_get_n_apply(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	mschar* ep_name,

	msint2* n_apply,

	mschar* prim_name

);

功能说明:

获取指定备库上的重演节点个数信息,也就是源库的节点个数。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

ep_name: 输出参数,输出获取重演信息的备库控制节点名称。

n_apply: 输出参数,输出备库控制节点上记录的重演节点个数。

prim_name: 输出参数,输出备库对应的源库名称。

返回值:

0:执行成功。

<0:执行失败。

77.dwmon_get_ep_nth_apply_info

函数原型:

DWMON_RETURN

dwmon_get_ep_nth_apply_info(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	muint4 nth,

	mschar* prim_name,

	msint2* dsc_seqno,

	muint8* sseq,

	muint8* slsn,

	muint8* kseq,

	muint8* klsn,

	muint8* aseq,

	muint8* alsn,

	muint4* n_task,

	muint8* tsk_mem_used

);

功能说明:

获取指定备库上第nth组重演信息上记录的lsn等信息。

当备库对应的源库是DMDSC集群时,假如DMDSC集群有N个节点,那么备库上就会有N组重演信息依次和源库的每个节点相对应,N值可以通过dwmon_get_n_apply接口中的n_apply字段值获取,本接口的输入参数nth的取值范围为[0,n_apply-1]。

此接口只输出dsc_seqno、sseq、slsn、kseq、klsn、aseq、alsn等简略的重演信息,如果还需要获取详细的重演统计信息,请参考dwmon_get_ep_nth_apply_stat接口说明。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

nth: 输入参数,指定要获取备库上第nth组重演信息。

prim_name: 输出参数,第nth组重演信息对应的源库实例名,注意缓存长度不能小于65,避免溢出。

dsc_seqno: 输出参数,第nth组重演信息对应的源库实例的seqno序号。

sseq:输出参数,备库可重演到的最大日志包序号。

slsn: 输出参数, 备库可重演到的最大LSN,对应的日志包序号为sseq。

kseq:输出参数,非自动切换模式下,备库保持不重演的日志包序号。

klsn:输出参数,非自动切换模式下,备库保持不重演的最大LSN,对应的日志包序号为kseq。

aseq:输出参数,备库已经写入联机日志文件的原始日志包序号。

alsn: 输出参数,备库已经写入联机日志文件的原始LSN值,对应的日志包序号为aseq。

n_task: 输出参数,第nth组重演信息中当前还剩余的重演任务个数。

tsk_mem_used: 输出参数,第nth组重演信息中执行重演任务所占用的内存大小(字节)。

返回值:

0:执行成功。

<0:执行失败。

78.dwmon_get_ep_nth_apply_stat

函数原型:

DWMON_RETURN

dwmon_get_ep_nth_apply_stat(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name,

	muint4 nth,

	mschar* prim_name,

	msint2* dsc_seqno,

	muint8* sseq,

	muint8* slsn,

	muint8* kseq,

	muint8* klsn,

	muint8* aseq,

	muint8* alsn,

	muint4* n_task,

	muint8* tsk_mem_used,

	mint4* recnt_apply_num,

	muint4* last_recved_len,

	mint8* last_res_time,

	mint8* last_wait_time,

	muint4 last_apply_len,

	mint8* last_apply_time,

	mint8* recnt_recved_len,

	mint8* recnt_res_time,

	mint8* recnt_wait_time,

	mint8* recnt_apply_len,

	mint8* recnt_apply_time,

	mint8* max_res_time,

	mint8* max_wait_time,

	mint8* max_apply_time,

	muint4* max_apply_len,

	mint8* total_recved_num,

	mint8* total_recved_len,

	mint8* total_apply_num,

	mint8* total_apply_len,

	mint8* total_res_time,

	mint8* total_wait_time,

	mint8* total_apply_time

);

功能说明:

获取指定备库上第nth组重演信息,包含详细的重演统计信息。

当备库对应的源库是DMDSC集群时,假如DMDSC集群有N个节点,那么备库上就会有N组重演信息依次和源库的每个节点相对应,N值可以通过dwmon_get_n_apply接口中的n_apply字段值获取,本接口的输入参数nth的取值范围为[0,n_apply-1]。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name: 输入参数,输入指定备库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取重演信息的备库名称。

nth: 输入参数,指定要获取备库上第nth组重演信息。

prim_name: 输出参数,第nth组重演信息对应的源库实例名,注意缓存长度不能小于65,避免溢出。

dsc_seqno: 输出参数,第nth组重演信息对应的源库实例的seqno序号。

sseq: 输出参数,备库可重演到的最大日志序号值。

slsn: 输出参数,备库可重演到的最大LSN值,对应的日志包序号为sseq。

kseq: 输出参数,非自动切换模式下,备库保持不重演的日志的序号。

klsn:输出参数,非自动切换模式下,备库保持不重演的最大LSN值,对应的日志包序号为kseq。

aseq: 输出参数,备库已经写入联机日志文件的原始日志包序号。

alsn: 输出参数,备库已经写入到联机日志文件的原始LSN值,对应的日志包序号为aseq。

n_task: 输出参数,第nth组重演信息中当前还剩余的重演任务个数。

tsk_mem_used: 输出参数,第nth组重演信息中执行重演任务所占用的内存大小(字节)。

/** 以下均为指定备库相对于主库第nth个节点的重演统计信息 **/

recnt_apply_num:输出参数,输出最近重演的日志包个数N。

last_recved_len:输出参数,输出最近一次收到的日志长度(字节)。

last_res_time:输出参数,输出最近一次消息响应时间(微秒)。

last_wait_time:输出参数,输出最近一次任务等待时间(微秒)。

last_apply_len:输出参数,输出最近一次重演的日志长度(字节)。

last_apply_time:输出参数,输出最近一次重演耗时(微秒)。

recnt_recved_len:输出参数,输出最近N次累计接收日志长度(字节),N值取自recnt_apply_num,下同。

recnt_res_time:输出参数,输出最近N次累计响应时间(微秒)。

recnt_wait_time:输出参数,输出最近N次累计任务等待时间(微秒)。

recnt_apply_len:输出参数,输出最近N次累计重演日志长度(字节)。

recnt_apply_time:输出参数,输出最近N次累计重演耗时(微秒)。

max_res_time:输出参数,输出最大的消息响应时间(微秒)。

max_wait_time:输出参数,输出最大的任务等待时间(微秒)。

max_apply_time:输出参数,输出最大的任务重演时间(微秒)。

max_apply_len:输出参数,输出和max_apply_time对应的重演日志长度(字节)。

total_recved_num:输出参数,输出累计收到的日志包个数。

total_recved_len:输出参数,输出累计收到的日志量(字节)。

total_apply_num:输出参数,输出累计重演的日志缓存个数。

total_apply_len:输出参数,输出累计重演日志量(字节)。

total_res_time:输出参数,输出累计消息响应时间(微秒)。

total_wait_time:输出参数,输出累计任务等待时间(微秒)。

total_apply_time:输出参数,输出累计任务重演时间(微秒)。

返回值:

0:执行成功。

<0:执行失败。

79.dwmon_clear_database_arch_send_info

函数原型:

DWMON_RETURN

dwmon_clear_database_arch_send_info(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

清理指定组中主库到指定备库实例的最近N次归档发送信息(通知主库执行)。函数在使用前,需要先登录监视器。

N值取主库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际归档发送次数中的较小值,实际归档发送次数可通过查询V$ARCH_SEND_INFO获取。

如果主库是DMDSC集群,则会通知集群内所有实例执行清理。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

返回值:

0:执行成功。

<0:执行失败。

80.dwmon_clear_group_arch_send_info

函数原型:

DWMON_RETURN

dwmon_clear_group_arch_send_info(

	mhandle mhdle,

	mschar* group_name

);

功能说明:

清理指定组中主库到所有实时或即时备库实例的最近N次归档发送信息(通知主库执行)。函数在使用前,需要先登录监视器。

N值取主库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际归档发送次数中的较小值,实际归档发送次数可通过查询V$ARCH_SEND_INFO获取。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定守护进程组名,如果不指定则通知所有组执行。

返回值:

0:执行成功。

<0:执行失败。

81.dwmon_clear_database_rapply_stat

函数原型:

DWMON_RETURN

dwmon_clear_database_rapply_stat(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

清理指定备库实例的最近N次日志重演信息(通知备库执行)。函数在使用前,需要先登录监视器。

N值取备库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际重演次数中的较小值,实际重演次数可通过查询V$RAPPLY_INFO获取。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

返回值:

0:执行成功。

<0:执行失败。

82.dwmon_clear_group_rapply_stat

函数原型:

DWMON_RETURN

dwmon_clear_group_rapply_stat(

	mhandle mhdle,

	mschar* group_name

);

功能说明:

清理指定组中所有备库实例的最近N次日志重演信息(通知所有备库执行)。函数在使用前,需要先登录监视器。

N值取备库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际重演次数中的较小值,实际重演次数可通过查询V$RAPPLY_INFO获取。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定守护进程组名,如果不指定则通知所有组执行。

返回值:

0:执行成功。

<0:执行失败。

83.dwmon_check_recover

函数原型:

DWMON_RETURN

dwmon_check_recover(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

检查指定组的指定备库是否满足自动Recover条件,如果不满足条件,主库的守护进程不会对指定备库发起自动Recovery流程。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

返回值:

0:符合自动Recover条件,备库已经在待恢复列表或者主库的守护进程即将发起对指定备库的Recover操作。

-20:当前无法判断是否符合自动Recover条件,比如有监视器命令正在执行、指定备库还未达到恢复间隔或者指定备库上的RLOG_PKG还未全部重演完成等情况,需要稍后再次调用接口判断,具体的描述信息可通过消息相关接口获取到。

-21:表示备库不满足自动Recover条件,具体的描述信息可通过消息相关接口获取到。

其他<0的值:表示接口执行失败。

84.dwmon_check_open

函数原型:

DWMON_RETURN

dwmon_check_open(

	mhandle mhdle,

	mschar* group_name,

	mschar* db_name

);

功能说明:

检查指定组的指定库是否满足自动Open条件,如果不满足条件,守护进程不会通知数据库实例执行Open操作。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定数据库名称。

返回值:

0:符合自动Open条件,库已经Open成功或者正在执行Open,或者库的守护进程即将通知实例执行Open操作。

-22:当前无法判断库是否满足自动Open条件,比如有监视器命令正在执行,或者数据库实例还未启动到MOUNT状态等情况,需要稍后再次调用接口判断,具体的描述信息可通过消息相关接口获取到。

-23:表示库不满足自动Open条件,并且库自身不是OPEN状态,具体的描述信息可通过消息相关接口获取到。

-24:表示库不满足自动Open条件,其中库实例已经是OPEN状态,但库的守护进程不是OPEN状态,具体的描述信息可通过消息相关接口获取到。

其他<0的值:表示接口执行失败。

85.dwmon_deinit

函数原型:

DWMON_RETURN

dwmon_deinit(

	mhandle mhdle

);

功能说明:

销毁监视器执行环境。

参数说明:

mhdle: 输入参数,监视器操作句柄。

返回值:

0:执行成功。

<0:执行失败。

86.dwmon_free_handle

函数原型:

DWMON_RETURN

dwmon_free_handle(

	mhandle mhdle

);

功能说明:

释放分配到的监视器句柄。

参数说明:

mhdle: 输入参数,分配到的句柄。

返回值:

0:执行成功。

<0:执行失败。

87.dwmon_get_monitor_state

函数原型:

DWMON_RETURN

dwmon_get_monitor_state(

	mhandle     mhdle,
	muint4*     n_mon,
	mschar**    mon_name_arr,
	muint4*     mon_state_arr,
	muint4*     mon_id_arr,
	muint4*     mon_role_arr,
	mschar**    mon_ip_arr,
	muint4*     mon_port_arr,
	muint4*     mon_bro,
	muint4*     mon_vote

);

功能说明:

配置为主备多监视器环境时,可通过调用此接口获取监视器信息。

参数说明:

mhdle: 输入参数,监视器操作句柄。

n_mon: 输出参数,监视器个数。

mon_name_arr: 输出参数,monitor名字数组,数组长度和n_mon对应。

mon_state_arr: 输出参数,monitor的监视器状态数组,和n_mon对应。

mon_id_arr: 输出参数,monitorID数组,和n_mon对应。

mon_role_arr: 输出参数,monitor角色数组,和n_mon对应。

mon_ip_arr: 输出参数,monitor的IP地址数组,和n_mon对应。

mon_port_arr: 输出参数,monitor的端口号信息,和n_mon对应。

mon_bro: 输出参数,monitor的广播延时。

mon_vote: 输出参数,monitor的投票延时。

返回值:

0:执行成功。

<0:执行失败。

88.dwmon_get_ep_nth_apply_with_parallel_info

函数原型:

DWMON_RETURN
dwmon_get_ep_nth_apply_with_parallel_info(
mhandle     mhdle,
mschar*     group_name,
mschar*     db_name,
muint4      nth,
mschar*     prim_name,
msint2*     dsc_seqno,
muint8*     sseq,
muint8*     slsn,
muint8*     kseq,
muint8*     klsn,
muint8*     rseq,
muint8*     rlsn,
msint2*     n_pll,
muint8*     redo_lsn_arr,
muint4*     n_task,
muint8*     tsk_mem_used
);

功能说明:

获取指定备库上第nth组并行重演信息。

当备库对应的源库是DMDSC集群时,假如DMDSC集群有N个节点,那么备库上就会有N组重演信息依次和源库的每个节点相对应,N值可以通过dwmon_get_n_apply接口中的n_apply字段值获取,本接口的输入参数nth的取值范围为[0, n_apply-1]。

参数说明:

mhdle:输入参数,监视器操作句柄。

group_name: 输入参数,守护组名,只有一组时可以不指定。

db_name: 输入参数,需要获取日志同步信息的备库名。

nth: 输入参数,获取指定备库的第nth个重演状态统计信息。

prim_name: 输出参数,第nth个重演状态统计信息上记录的备库对应主库的实例名,可能为空。

dsc_seqno: 输出参数,主库节点序号,主库是单节点时序号为0。

sseq: 输出参数,备库可重演到的最大日志包序号。

slsn: 输出参数,备库可重演到的最大LSN 。

kseq: 输出参数,备库保持不重演的日志包序号。

klsn: 输出参数,备库保持不重演的最大LSN。

rseq: 输出参数,备库已经重演到的日志包序号,和dsc_seqno对应。

rlsn: 输出参数,备库已经重演到的LSN值。

n_pll: 输出参数,备库并行重演线程数。

redo_lsn_arr: 输出参数,备库各路并行重演线程已重演到的LSN值。

n_task:输出参数,当前还剩余的重演任务数。

tsk_mem_used: 输出参数,当前任务队列占用的总内存大小。

返回值:

0:执行成功。

<0:执行失败。

89.dwmon_set_database_until_time

函数原型:

DWMON_RETURN
dwmon_set_database_until_time(
    mhandle         mhdle,
    mschar*         group_name,
    mschar*         db_name,
    mschar*         until_time
);

功能说明:

设置指定组的指定异步备库重演到的时间点。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定异步备库名称。

until_time:输入参数,指定异步备库重演到的时间点,可精确到微秒。

返回值:

0:执行成功。

<0:执行失败。

90.dwmon_get_database_until_time

函数原型:

DWMON_RETURN
dwmon_get_database_until_time(
    mhandle         mhdle,
    mschar*         group_name,
    mschar*         db_name,
    mschar*         until_time
);

功能说明:

获取指定组的指定异步备库设置的重演到的时间点。

参数说明:

mhdle: 输入参数,监视器操作句柄。

group_name:输入参数,指定库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定异步备库名称。

until_time:输出参数,异步备库设置的重演到的时间点。

返回值:

0:执行成功。

<0:执行失败。

10.2.5 JNI接口说明

1.dwmon_init_handle

函数原型:

boolean

dwmon_init_handle();

功能说明:

分配监视器操作句柄。

参数说明:

返回值:

true:分配成功。

false:分配失败。

2.dwmon_get_error_msg_by_code

函数原型:

DwMonMsg

dwmon_get_error_msg_by_code(

	int code

);

功能说明:

获取输入code对应的错误描述信息,code必须是小于0的值。

参数说明:

code:输入参数,需要获取错误信息的错误码code,注意code必须是小于0的值。

返回值:

返回DwMonMsg对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonMsg的其他对象成员获取输出消息。

<0:执行失败,-17表示没有找到code对应的错误信息。

3.dwmon_init_env

函数原型:

int

dwmon_init_env(

	String ini_path,

	String log_path

);

功能说明:

初始化监视器环境。

参数说明:

ini_path: 输入参数,指定dmmonitor.ini的绝对路径。

log_path: 输入参数,指定日志文件的存放路径,如果为NULL或空串,则将dmmonitor.ini中配置的MON_LOG_PATH作为日志文件路径,如果dmmonitor.ini中没有配置MON_LOG_PATH,则将dmmonitor.ini的同级目录作为日志文件路径。

返回值:

0:执行成功。

<0:执行失败,-15表示监视器尝试建立到所有守护进程的连接失败,可能守护进程都未启动,允许忽略此错误继续执行其他操作,如果不忽略此错误,认定初始化失败,则需要先正常销毁监视器环境(调用dwmon_deinit_env接口),再释放操作句柄(调用dwmon_free_handle接口)。

4.dwmon_msg_event_wait

函数原型:

void

dwmon_msg_event_wait();

功能说明:

监视器检测到守护进程或实例状态发生变化,或者接口命令执行过程中,产生中间输出消息时会将消息写入到缓存并通知消息事件,调用者只需要调用此接口等待即可,等待事件发生后,可通过接口dwmon_get_exec_msg去读取输出消息。

这种方式需要单独起一个线程来处理消息,以免消息被阻塞。

参数说明:

返回值:

5.dwmon_get_exec_msg

函数原型:

DwMonMsg

dwmon_get_exec_msg();

功能说明:

获取输出信息,和dwmon_msg_event_wait配合使用。

参数说明:

返回值:

返回DwMonMsg对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonMsg的其他对象成员获取输出消息,其中msgFlag值用来标记是否继续读取消息,为1表示还有消息可读,为0表示已全部读完。

<0:执行失败。

6.dwmon_get_msg_exit_flag

函数原型:

boolean

dwmon_get_msg_exit_flag();

功能说明:

如果上层应用程序中有单独的消息线程,可通过调用此接口获取退出标记,在标记为TRUE时可正常退出线程。

参数说明:

返回值:

true: 允许线程退出。

false: 不允许线程退出,需要继续等待获取输出消息。

7.dwmon_set_msg_exit_event

函数原型:

void

dwmon_set_msg_exit_event();

功能说明:

如果上层应用程序中有单独的消息线程,在dwmon_get_msg_exit_flag接口获取到退出标记为true时,需要调用此接口设置退出事件。

参数说明:

返回值:

8.dwmon_msg_event_deinit

函数原型:

void

dwmon_msg_event_deinit();

功能说明:

使用等待事件方式获取监视器消息时,需要单独起一个线程,在程序结束,退出线程时,需要调用此接口通知并等待消息线程退出。

消息线程相关的接口有dwmon_msg_event_wait、dwmon_get_exec_msg、dwmon_get_msg_exit_flag、dwmon_set_msg_exit_event和dwmon_msg_event_deinit,这几个接口需要配合使用。

参数说明:

返回值:

9.dwmon_get_version

函数原型:

DwMonData

dwmon_get_version();

功能说明:

获取当前的监视器版本信息。

参数说明:

返回值:

返回DwMonData对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过对象成员stringValue获取监视器版本信息。

<0:执行失败。

10.dwmon_get_mpp_flag

函数原型:

DwMonData

dwmon_get_mpp_flag();

功能说明:

获取MPP主备环境标记,用于判断当前是否为MPP主备环境。

参数说明:

返回值:

返回DwMonData对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过对象成员dataValue获取确认标记,1:是MPP主备环境,0:不是MPP主备环境。

<0:执行失败。

11.dwmon_get_n_group

函数原型:

DwMonGrpNameArray

dwmon_get_n_group();

功能说明:

获取当前监控的组个数和组名称。只有mpp主备环境下允许配置多组。

参数说明:

返回值:

返回DwMonGrpNameArray对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonGrpNameArray的其他对象成员获取监控组信息。

<0:执行失败。

12.dwmon_get_group_info

函数原型:

DwMonGroup

dwmon_get_group_info(

    String group_name

);

功能说明:

获取指定组的守护进程组信息。

参数说明:

group_name: 输入参数,指定要获取信息的组名,只有一组时可以不指定。

返回值:

返回DwMonGroup对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonGroup的其他对象成员获取监控组信息。

<0:执行失败。

13.dwmon_get_split_sub_group_database

函数原型:

DwMonDatabaseNameArray

dwmon_get_split_sub_group_database(

	String group_name,

	String db_name

);

功能说明:

获取可加入指定库的库名信息。

参数说明:

group_name: 输入参数,指定实例所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要获取可加入信息的实例名,此参数必须指定。

返回值:

返回DwMonDatabaseNameArray对象,可通过对象成员returnCode获取执行结果。

0:执行成功, 可通过DwMonDatabaseNameArray的其他对象成员获取实例信息。

<0:执行失败。

14.dwmon_get_nth_database_info

函数原型:

DwMonDatabase

dwmon_get_nth_database_info(

	String group_name,

	int nth

);

功能说明:

获取指定组中第nth个库的全局信息,这里的nth是根据dmmonitor.ini指定组中所配置的守护进程先后顺序来排序的,每个组的nth都是从0开始,依次递增。

参数说明:

group_name: 输入参数,指定的守护进程组名,只有一组时可以不指定。

nth: 输入参数,输入要获取的数据库实例下标。

返回值:

返回DwMonDatabase对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonDatabase的其他对象成员获取实例信息。

<0:执行失败。

15.dwmon_get_database_info_by_name

函数原型:

DwMonDatabase

dwmon_get_database_info_by_name(

	String group_name,

	String db_name

);

功能说明:

根据指定的数据库名称获取库的全局信息。

参数说明:

group_name: 输入参数,指定的守护进程组名,只有一组时可以不指定。

db_name: 输入参数,指定要获取信息的数据库名称。

返回值:

返回DwMonDatabase对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonDatabase的其他对象成员获取实例信息。

<0:执行失败。

16.dwmon_get_database_info

函数原型:

DwDbInfo

dwmon_get_database_info(

	String group_name,

	String db_name

);

功能说明:

获取指定库上的实例信息。

参数说明:

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取实例信息的数据库名称。

返回值:

返回DwDbInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwDbInfo的其他对象成员获取实例信息。

<0:执行失败。

17.dwmon_get_nth_ep_info

函数原型:

DwEpInfo

dwmon_get_nth_ep_info(

	String group_name,

	String db_name,

	int nth

);

功能说明:

获取指定库上第nth个实例信息,可先通过dwmon_get_database_info接口获取到库上的节点实例个数n_ep,nth取值范围为[0,
n_ep–1]。

参数说明:

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取实例信息的数据库名称,此参数必须指定。

nth: 输入参数,指定要获取db_name库上的第nth个实例信息。

返回值:

返回DwEpInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwEpInfo的其他对象成员获取实例信息。

<0:执行失败。

18.dwmon_get_ep_info_by_name

函数原型:

DwEpInfo

dwmon_get_ep_info_by_name(

	String group_name,

	String ep_name

);

功能说明:

根据指定的实例名获取实例的详细信息。

参数说明:

group_name: 输入参数,输入指定实例所在的守护进程组名,如果只有一组可以不指定。

ep_name: 输入参数,输入要获取信息的实例名。

返回值:

返回DwEpInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwEpInfo的其他对象成员获取实例信息。

<0:执行失败。

19.dwmon_get_database_arch_info

函数原型:

DwMonArch

dwmon_get_database_arch_info(

	String group_name,

	String db_name

);

功能说明:

获取指定库配置的归档信息,包括归档目标实例名,到归档目标的mal链路状态和归档状态,以及异步归档信息。

参数说明:

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取归档信息的数据库名称。

返回值:

返回DwMonArch对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonArch的其他对象成员获取相关归档信息。

<0:执行失败。

20.dwmon_get_watch_ctl_info

函数原型:

DwCtlInfo

dwmon_get_watch_ctl_info(

	String group_name,

	String db_name

);

功能说明:

获取指定库的守护进程控制文件信息,包括控制文件中的记录项个数,控制文件状态和当前TGUID值这些全局信息。

参数说明:

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取控制文件信息的守护进程对应的数据库名称。

返回值:

返回DwCtlInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwCtlInfo的其他对象成员获取相关控制文件信息。

<0:执行失败。

21.dwmon_get_database_open_history

函数原型:

DwOpenHistory

dwmon_get_database_open_history(

	String group_name,

	String db_name

);

功能说明:

获取指定库的OPEN记录项个数。

参数说明:

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取OPEN记录的守护进程对应的数据库名称。

返回值:

返回DwOpenHistory对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwOpenHistory的其他对象成员获取相关OPEN记录信息。

<0:执行失败。

22.dwmon_get_nth_open_history

函数原型:

DwOpenHistory

dwmon_get_nth_open_history(

	String group_name,

	String db_name,

	int nth

);

功能说明:

获取指定组中指定库的第nth个open记录信息。

参数说明:

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取OPEN记录的守护进程对应的数据库名称。

nth: 输入参数,输入要获取指定第nth个OPEN记录项。

返回值:

返回DwOpenHistory对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwOpenHistory的其他对象成员获取相关OPEN记录信息。

<0:执行失败。

23.dwmon_get_watch_config_info

函数原型:

DwConfigInfo

dwmon_get_watch_config_info(

	String group_name,

	String inst_name

);

功能说明:

获取指定实例本地的守护进程配置信息。

参数说明:

group_name: 输入参数,只有一组时允许不指定。

inst_name: 输入参数,指定要获取配置信息的守护进程本地的实例名。

返回值:

返回DwConfigInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwConfigInfo的其他对象成员获取配置信息。

<0:执行失败。

24.dwmon_get_css_config_info

函数原型:

DcrConfigInfo

dwmon_get_css_config_info(

	String group_name,

	String inst_name

);

功能说明:

获取和指定实例的dcr_seqno相同的dmcss配置的自动拉起检测间隔(DMDCR_ASM_RESTART_INTERVAL、DMDCR_DB_RESTART_INTERVAL)。

参数说明:

group_name: 输入参数,只有一组时允许不指定。

inst_name: 输入参数,指定要获取配置信息的实例名。

返回值:

返回DcrConfigInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DcrConfigInfo的其他对象成员获取配置信息。

<0:执行失败。

25.dwmon_get_monitor_info

函数原型:

DwMonInfo

dwmon_get_monitor_info (

	String group_name,

	String db_name

);

功能说明:

获取指定守护进程的监视器连接信息。同一个守护系统中允许最多10个监视器同时启动连接到守护进程,可通过调用此接口获取指定守护进程上的监视器连接信息,包括连接时间、确认监视器配置、监视器ID、监视器IP和监视器版本信息。

其中db_name是输入输出参数,表示指定守护进程对应的实例名,如果此参数为空,则根据dmmonitor.ini对应组中的配置顺序,选择第一个活动的守护进程获取监视器连接信息,并输出选中的守护进程本地库名称;如果指定有合法值,则返回指定库的控制守护进程上的监视器连接信息。

参数说明:

group_name: 输入参数,输入指定库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取信息的守护进程对应的实例名。

返回值:

返回DwMonInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonInfo的其他对象成员获取记录项信息,取出的第一个数组元素是当前monitor的连接信息。

<0:执行失败。

26.dwmon_set_cmd_execing_with_command

函数原型:

int

dwmon_set_cmd_execing_with_command(

	String command

);

功能说明:

如果上层有控制台工具界面,通过用户输入命令的方式调用接口,可通过此接口设置命令执行标记并传入用户执行的命令串信息,用于监视器log日志记录用户的操作信息。

在确认监视器模式下或者监视器设置有自动记录系统状态间隔(通过dwmon_set_show_interval或者dwmon_set_log_interval设置),调用命令接口之前,需要先调用此接口设置执行标记,避免和确认监视器自动接管故障主库或者监视器自动记录系统状态的操作发生冲突。

参数说明:

command:
输入参数,如果上层有控制台工具界面,则表示用户手工输入的执行命令串,允许为NULL或空串。

返回值:

0:执行成功。

<0:执行失败。

27.dwmon_reset_cmd_execing

函数原型:

int

dwmon_reset_cmd_execing();

功能说明:

重置命令执行标记,和dwmon_set_cmd_execing_with_command接口配合使用,在调用命令接口执行完成后,需要调用此接口,重置执行标记,避免确认监视器无法执行自动接管故障主库的操作。

参数说明:

返回值:

0:执行成功。

<0:执行失败。

28.dwmon_get_dw_confirm

函数原型:

DwMonData

dwmon_get_dw_confirm();

功能说明:

获取确认监视器标记,用于判断当前的监视器是否为确认监视器。

参数说明:

返回值:

返回DwMonData对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过对象成员dataValue获取确认标记,1:是确认监视器,
0:不是确认监视器。

<0:执行失败。

29.dwmon_set_show_interval

函数原型:

int

dwmon_set_show_interval(

	int show_interval

);

功能说明:

监视器根据指定的show_interval值,每隔show_interval个时间间隔,自动输出各实例的状态信息给用户,需要使用dwmon_get_exec_msg接口获取到输出消息,show_interval单位为秒,默认值为0。

参数说明:

show_interval:输入参数,设置定时输出状态信息的时间间隔,单位为秒,取值为0,或5~3600,取值为0表示取消自动输出,默认值为0。

返回值:

0:执行成功。

<0:执行失败。

30.dwmon_get_show_interval

函数原型:

DwMonData

dwmon_get_show_interval();

功能说明:

获取当前设置的自动显示时间间隔,单位为秒。

参数说明:

返回值:

返回DwMonData对象,可通过对象成员returnCode获取执行结果。

0:获取成功,可通过对象成员dataValue获取自动显示间隔。

<0:获取失败。

31.dwmon_set_log_interval

函数原型:

int

dwmon_set_log_interval(

	int log_interval

);

功能说明:

监视器按照设置的log_interval值,每隔log_interval个时间间隔,自动将各实例的状态信息写入到日志文件,log_interval单位为秒,默认值为1。

参数说明:

log_interval:输入参数,设置定时写入状态信息到日志文件的时间间隔,单位为秒,取值为0,1或5~3600。

取值为0表示不写入任何信息到日志文件。

取值为1表示只写入普通的状态变化日志,例如收到新的信息或者检测到状态变化等。

取值为5~3600范围内的数值时,除了生成普通日志信息外,会按照设置的间隔定期写入站点状态信息到日志文件中。

返回值:

0:执行成功。

<0:执行失败。

32.dwmon_get_log_interval

函数原型:

DwMonData

dwmon_get_log_interval();

功能说明:

获取当前设置的自动写入日志的时间间隔,单位为秒。

参数说明:

返回值:

返回DwMonData对象,可通过对象成员returnCode获取执行结果。

0:获取成功,可通过对象成员dataValue获取自动写入日志文件间隔。

<0:获取失败。

33.dwmon_set_log_file_size

函数原型:

int

dwmon_set_log_file_size(

	int log_file_size

);

功能说明:

调用此接口,可以设置监视器单个的日志文件大小,达到最大值后,会自动生成并切换到新的日志文件中,如果达到最大的日志总空间限制,会自动删除创建时间最早的日志文件,日志文件命名方式为“dmmonitor_年月日时分秒.log”,例如“dmmonitor_20160201155820.log”。

参数说明:

log_file_size: 输入参数,设置单个日志文件大小,单位为M,取值范围为16~2048,默认值为64。

返回值:

0:执行成功。

<0:执行失败。

34.dwmon_get_log_file_size

函数原型:

DwMonData

dwmon_get_log_file_size();

功能说明:

获取当前设置的单个日志文件大小,单位为M。

参数说明:

返回值:

返回DwMonData对象,可通过对象成员returnCode获取执行结果。

0:获取成功,可通过对象成员dataValue获取单个日志文件大小。

<0:获取失败。

35.dwmon_get_log_path

函数原型:

DwMonData

dwmon_get_log_path();

功能说明:

获取当前的日志文件路径。

参数说明:

返回值:

返回DwMonData对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过对象成员stringValue获取日志文件路径。

<0:执行失败。

36.dwmon_set_log_space_limit

函数原型:

int

dwmon_set_log_space_limit(

	int log_space_limit

);

功能说明:

调用此接口,可以设置监视器的日志总空间大小,达到设置的总空间大小后,会自动删除创建时间最早的日志文件。

参数说明:

log_space_limit: 输入参数,设置日志总空间大小,单位为M,取值为0或256~4096,默认值为0,表示没有空间限制。

返回值:

0:执行成功。

<0:执行失败。

37.dwmon_get_log_space_limit

函数原型:

DwMonData

dwmon_get_log_space_limit();

功能说明:

获取当前设置的日志总空间大小,单位为M。

参数说明:

返回值:

返回DwMonData对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过对象成员dataValue获取当前设置的日志总空间大小。

<0:执行失败。

38.dwmon_login

函数原型:

int

dwmon_login(

String username,
String password

);

功能说明:

登录监视器,这里的登录口令和服务器的登录口令是一致的,且必须有DBA权限。

校验登录信息时由守护进程转发给服务器校验,并返回校验结果给监视器,因此需要保证系统中至少有一个活动库,否则无法校验成功。

参数说明:

username: 输入参数,登录用户名。

password: 输入参数,登录密码。

返回值:

0:执行成功。

<0:执行失败。

39.dwmon_logout

函数原型:

int

dwmon_logout();

功能说明:

退出登录监视器。

参数说明:

返回值:

0:执行成功。

<0:执行失败。

40.dwmon_set_database_recover_time

函数原型:

int

dwmon_set_database_recover_time(

	String group_name,

	String db_name,

	int recover_time

);

功能说明:

设置指定备库的恢复间隔时间,设置成功后,recover_time值保存在对应主库的守护进程内存中,并且只对指定的备库起作用。

此接口只允许对指定备库执行修改操作,如果需要考虑对某个组或所有组中的备库执行修改操作,则可以使用dwmon_set_group_recover_time接口来实现。

参数说明:

group_name: 输入参数,指定执行操作的守护进程组名,只有一组时可以不指定组名。

db_name:输入参数,指定要设置恢复间隔时间的备库实例名。

recover_time:输入参数,指定要设置的恢复间隔时间,取值3~ 86400s,设置为0时,表示指定备库不需要有时间间隔限制,满足恢复条件后,主库的守护进程就会启动恢复流程。

返回值:

0:执行成功。

<0:执行失败。

41.dwmon_set_database_arch_invalid

函数原型:

int

dwmon_set_database_arch_invalid(

	String group_name,

	String db_name

);

功能说明:

设置主库到指定备库的归档状态无效。

此接口只允许对指定备库设置归档无效,如果需要考虑对某个组或所有组中的备库执行设置操作,则可以使用dwmon_set_group_arch_invalid接口来实现。

参数说明:

group_name: 输入参数,指定执行操作的守护进程组名,只有一组时可以不指定组名。

db_name:输入参数,指定要修改归档状态无效的备库实例名。

返回值:

0:执行成功。

<0:执行失败。

42.dwmon_startup_database_watch

函数原型:

int

dwmon_startup_database_watch(

	String group_name,

	String db_name

);

功能说明:

打开指定库的守护进程监控功能,守护进程启动后,默认监控功能处于打开状态。

对DMDSC集群,此接口只通知控制守护进程执行。

参数说明:

group_name: 输入参数,指定要打开监控的守护进程组名,只有一组时可以不指定组名。

db_name:输入参数,指定要打开监控的守护进程的本地实例名。

返回值:

>=0:执行成功,执行前守护进程的监控已经处于打开状态时,返回值为100。

<0:执行失败。

43.dwmon_startup_watch

函数原型:

int

dwmon_startup_watch(

	String group_name

);

功能说明:

打开指定组的守护进程监控功能,守护进程启动后,默认监控功能处于打开状态。

对DMDSC集群,此接口只通知控制守护进程执行。

参数说明:

group_name: 输入参数,指定要打开监控的守护进程组名,只有一组时可以不指定组名。

返回值:

>=0:执行成功,执行前组中所有守护进程的监控已经处于打开状态时,返回值为100。

<0:执行失败。

44.dwmon_startup_watch_all

函数原型:

int

dwmon_startup_watch_all();

功能说明:

打开所有组的守护进程监控功能,守护进程启动后,默认监控功能处于打开状态。

只有MPP主备环境下允许调用此接口。

参数说明:

返回值:

>=0:执行成功,执行前所有组守护进程的监控已经处于打开状态时,返回值为100。

<0:执行失败。

45.dwmon_stop_database_watch

函数原型:

int

dwmon_stop_database_watch(

	String group_name,

	String db_name

);

功能说明:

关闭指定库的守护进程的监控功能,监控功能被关闭后,守护进程还可以正常地接收和发送消息,但无法根据当前的实例状态来自动处理故障以及实例的自动拉起等,关闭后守护进程处于Shutdown状态。

如果需要正常地退出实例或者保持实例为Mount状态,则可以关闭监控功能,否则建议保持监控功能为打开状态,以保证能够及时处理系统的各种情况。

对DMDSC集群,此接口只通知控制守护进程执行。

执行此操作需要先登录监视器。

参数说明:

group_name: 输入参数,指定要关闭监控的守护进程组名,只有一组时可以不指定组名。

db_name:输入参数,指定要关闭监控的守护进程的本地实例名。

返回值:

>=0:守护进程的监控关闭成功。执行前守护进程的监控已经处于关闭状态时,返回值为100。

<0:执行失败

46.dwmon_stop_watch

函数原型:

int

dwmon_stop_watch(

	String group_name

);

功能说明:

关闭指定组的所有守护进程的监控功能,监控功能被关闭后,守护进程还可以正常地接收和发送消息,但无法根据当前的实例状态来自动处理故障以及实例的自动拉起等,关闭后守护进程处于Shutdown状态。

如果需要正常地退出实例或者保持实例为Mount状态,则可以关闭监控功能,否则建议保持监控功能为打开状态,以保证能够及时处理系统的各种情况。

对DMDSC集群,此接口只通知控制守护进程执行。

执行此操作需要先登录监视器。

参数说明:

group_name: 输入参数,指定要关闭监控的守护进程组名,只有一组时可以不指定组名。

返回值:

>=0:所有守护进程的监控关闭成功。执行前组中所有守护进程的监控已经处于关闭状态时,返回值为100。

<0:执行失败

47.dwmon_stop_watch_all

函数原型:

int

dwmon_stop_watch_all();

功能说明:

关闭所有组的守护进程监控功能,监控功能被关闭后,守护进程还可以正常地接收和发送消息,但无法根据当前的实例状态来自动处理故障以及实例的自动拉起等,关闭后守护进程处于Shutdown状态。

如果需要正常地退出实例或者保持实例为Mount状态,则可以关闭监控功能,否则建议保持监控功能为打开状态,以保证能够及时处理系统的各种情况。

执行此操作需要先登录监视器,只有MPP主备环境下允许调用此接口。

参数说明:

返回值:

>=0:所有守护进程的监控关闭成功,执行前所有组守护进程的监控已经处于关闭状态时,返回值为100。

<0:执行失败。

48.dwmon_startup_group

函数原型:

int

dwmon_startup_group(

	String group_name

);

功能说明:

启动指定组的所有实例,在dmwatcher.ini中INST_AUTO_RESTART配置为0时该接口可以成功执行,配置为1时在守护进程的监控功能打开的情况下,守护进程可以自动完成启动实例的功能,不需要再调用接口执行。

对DMDSC集群,由dmcss执行拉起动作,和dmwatcher.ini中的INST_AUTO_RESTART配置参数没有关系,由dmdcr.ini中的配置参数决定是否可以执行自动拉起,如果某个实例可以被dmcss自动拉起,则dmcss会忽略收到的拉起命令,等待自动拉起。

参数说明:

group_name: 输入参数,指定要启动实例的守护进程组名,只有一组时可以不指定。

返回值:

>=0:所有实例都启动成功,执行前组中所有实例已经处于活动状态时,返回值为100。

<0:执行失败。

49.dwmon_startup_group_all

函数原型:

int

dwmon_startup_group_all();

功能说明:

启动所有组的实例,在dmwatcher.ini中INST_AUTO_RESTART配置为0时该接口可以成功执行,配置为1时在守护进程的监控功能打开的情况下,守护进程可以自动完成启动实例的功能,不需要再调用接口执行。

只有MPP主备环境下允许调用此接口。

参数说明:

返回值:

>=0:所有实例都启动成功,执行前所有组的实例已经处于活动状态时,返回值为100。

<0:执行失败。

50.dwmon_stop_group

函数原型:

int

dwmon_stop_group(

	String group_name

);

功能说明:

关闭指定组中的所有活动实例,关闭所有活动实例之前,会先关闭所有控制守护进程的监控功能,避免守护进程将实例再次拉起。

对DMDSC集群,是由dmcss执行退出操作,在dmcss通知所有实例退出之前,会先关闭dmcss的自动拉起功能。

执行此操作需要先登录监视器,另外关闭守护进程只是将守护进程切换为Shutdown状态,并没有退出。

参数说明:

group_name: 输入参数,指定要关闭实例的守护进程组名,只有一组时可以不指定。

返回值:

>=0:所有实例都退出成功,执行前组中实例已经全部退出时,返回值为100。

<0:执行失败。

51.dwmon_stop_group_all

函数原型:

int

dwmon_stop_group_all();

功能说明:

关闭所有组的所有活动实例,关闭实例之前,会先关闭所有守护进程的监控功能,避免守护进程将实例再次拉起。

只有MPP主备环境下允许调用此接口,执行此操作需要先登录监视器,另外关闭守护进程只是将守护进程切换为Shutdown状态,并没有退出。

参数说明:

返回值:

>=0:所有实例都退出成功,执行前所有组的实例已经全部退出时,返回值为100。

<0:执行失败。

52.dwmon_kill_group

函数原型:

int

dwmon_kill_group(

	String group_name

);

功能说明:

强制杀掉指定组中的活动实例。

调用dwmon_stop_group关闭指定组的实例时,如果实例正在执行守护进程发起的命令,或者守护进程不是STARTUP、OPEN或RECOVERY状态,会导致接口执行失败,在这种情况下,如果需要强制关闭实例,则可以通过调用dwmon_kill_group接口来完成。

此接口执行时不要求先登录监视器,并且也会将守护进程切换为Shutdown状态(如果已经是Shutdown状态则跳过不再切换),避免守护进程将实例重新拉起。

参数说明:

group_name: 输入参数,指定要强杀实例的守护进程组名,只有一组时可以不指定。

返回值:

>=0:所有实例都退出成功,执行前组中实例已经全部退出并且守护进程都是Shutdown状态时返回值为100。

<0:执行失败。

53.dwmon_kill_group_all

函数原型:

int

dwmon_kill_group_all();

功能说明:

强制杀掉所有组中的活动实例。

调用dwmon_stop_group_all关闭所有组的实例时,如果实例正在执行守护进程发起的命令,或者守护进程不是STARTUP、OPEN或RECOVERY状态,会导致接口执行失败,在这种情况下,如果需要强制关闭实例,则可以通过调用dwmon_kill_group_all接口来完成。

只有MPP主备环境下允许调用此接口,此接口执行时不要求先登录监视器,并且也会将守护进程切换为Shutdown状态(如果已经是Shutdown状态则跳过不再切换),避免守护进程将实例重新拉起。

参数说明:

返回值:

>=0:所有实例都退出成功,执行前所有组的实例已经全部退出并且守护进程都是Shutdown状态则返回值为100。

<0:执行失败。

54.dwmon_startup_database

函数原型:

int

dwmon_startup_database(

	String group_name,

	String db_name

);

功能说明:

启动指定组中指定的数据库实例。

如果指定的库是单机,则由守护进程执行拉起动作,如果指定的库是DMDSC集群,则由守护进程再去通知主从css各自执行拉起动作。

此命令执行前,如果守护进程处于Shutdown状态,会将其切换为Startup状态,如果主从css的自动拉起功能是关闭的,在各节点实例拉起成功后,会将其打开。

参数说明:

group_name: 输入参数,指定要启动的库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要启动的数据库名称,此参数必须指定。

返回值:

>=0:执行成功,执行前库已经处于活动状态时返回值为100。

<0:执行失败。

55.dwmon_stop_database

函数原型:

int

dwmon_stop_database(

	String group_name,

	String db_name

);

功能说明:

关闭指定组中指定的数据库实例。

如果指定的库是单机,则由守护进程通知单机库正常退出,如果指定的库是DMDSC集群,则由守护进程再去通知主css依次退出每个节点实例。

此命令执行完成后,会将守护进程切换为Shutdown状态,并将主从css的自动拉起功能关闭。

注意:

如果要退出的是全局守护类型的备库,为了避免触发主库的Failover动作,要求此备库已经被detach分离出去,也就是备库归档要处于无效状态,才允许将其正常退出。

如果要退出的是主库,在自动切换模式下,为了避免触发备库的自动接管,要求所有备库都已经被detach分离出去,也就是所有备库归档都处于无效状态,才允许退出主库,手动切换模式下没有此要求。

参数说明:

group_name: 输入参数,指定要关闭的库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要关闭的数据库名称,此参数必须指定。

返回值:

>=0:执行成功,执行前库已经退出时返回值为100。

<0:执行失败。

56.dwmon_kill_database

函数原型:

int

dwmon_kill_database(

	String group_name,

	String db_name

);

功能说明:

强制关闭指定组中指定的数据库实例。

如果指定的库是单机,则由守护进程强制杀掉指定库的进程,如果指定的库是DMDSC集群,则由守护进程再去通知主css强杀所有节点实例。

注意:此命令执行完成后,会将守护进程切换为Shutdown状态。

参数说明:

group_name: 输入参数,指定要强制关闭的库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要强制关闭的数据库名称,此参数必须指定。

返回值:

>=0:执行成功,执行前库已经不是活动状态时返回值为100。

<0:执行失败。

57.dwmon_open_database

函数原型:

int

dwmon_open_database(

	String group_name,

	String db_name

);

功能说明:

在系统中存在其他故障实例时,守护进程无法自动Open主库,或者系统中没有活动主库时,守护进程无法自动Open备库,这种情况下,可以调用此接口强制Open指定的数据库。

执行此操作需要先登录监视器。

参数说明:

group_name: 输入参数,指定要强制Open库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要强制Open的数据库名称,此参数必须指定。

返回值:

>=0:执行成功,执行前库已经处于Open状态时返回值为100。

<0:执行失败。

58.dwmon_get_switchover_standby

函数原型:

DwMonDatabaseNameArray

dwmon_get_switchover_standby(

	String group_name

);

功能说明:

获取可以切换为主库的备库信息,这里的切换是指主备库都正常,且处于Open状态时,交换主备库模式,将备库切换为新的主库,主库切换为备库的操作。

参数说明:

group_name: 输入参数,指定要获取切换信息的组名,只有一组时可以不指定。

返回值:

返回DwMonDatabaseNameArray对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonDatabaseNameArray的其他对象成员获取备库实例信息。

<0:执行失败。

59.dwmon_switchover

函数原型:

int

dwmon_switchover(

	String group_name,

	String db_name

);

功能说明:

使用指定的备库和当前的主库执行切换操作,这里的切换是指主备库都正常,且处于Open状态时,交换主备库模式,将备库切换为新的主库,主库切换为备库的操作。

此接口只有在指定的备库满足切换条件时才能够执行成功,可以先调用dwmon_get_switchover_standby获取到满足条件的备库列表。

执行此操作需要先登录监视器。

参数说明:

group_name: 输入参数,指定要执行切换的备库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要执行切换的备库名称,只有一个备库时可以不指定。

返回值:

0:执行成功。

<0:执行失败。

60.dwmon_get_takeover_standby

函数原型:

DwMonDatabaseNameArray

dwmon_get_takeover_standby(

	String group_name,

	boolean force_flag

);

功能说明:

获取可以接管为主库的备库信息,在主库发生故障时,可以通过调用此接口查找可以接管为新的主库的备库实例,其中包括正常接管和强制接管,通过输入参数force_flag可以指定接管方式。

参数说明:

group_name: 输入参数,指定要获取接管信息的组名,只有一组时可以不指定。

force_flag: 输入参数,指定接管方式,true: 强制接管,false: 正常接管。

返回值:

返回DwMonDatabaseNameArray对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonDatabaseNameArray的其他对象成员获取备库实例信息。

<0:执行失败。

61.dwmon_takeover

函数原型:

int

dwmon_takeover(

	String group_name,

	String db_name

);

功能说明:

主库故障后,可以通过调用此接口执行正常的接管操作,注意,此接口只有在指定备库满足正常接管条件时才能够执行成功,可以先调用dwmon_get_takeover_standby获取到符合正常接管条件的备库实例,force_flag指定为false。

执行此操作需要先登录监视器。

参数说明:

group_name: 输入参数,指定要执行接管的备库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要执行接管的备库名称,只有一个备库时可以不指定。

返回值:

0:执行成功。

<0:执行失败。

62.dwmon_takeover_force

函数原型:

int

dwmon_takeover_force(

String group_name,
String db_name

);

功能说明:

主库故障后,可以通过调用此接口执行强制接管操作。此接口只有在指定备库满足强制接管条件时才能够执行成功,可以先调用dwmon_get_takeover_standby获取到符合强制接管条件的备库实例,force_flag指定为TRUE。

执行此操作需要先登录监视器。

参数说明:

group_name: 输入参数,指定要执行强制接管的备库所在的组名,只有一组时可以不指定。

db_name: 输入参数,指定要执行强制接管的备库名称,只有一个备库时可以不指定。

返回值:

0:执行成功。

<0:执行失败。

63.dwmon_check_mppctl

函数原型:

int

dwmon_check_mppctl();

功能说明:

配置为mpp主备环境时,可通过调用此接口检查当前各个活动节点的dmmpp.ctl是否处于一致状态,注意只有MPP主备环境下允许调用此接口。

参数说明:

返回值:

0:处于一致状态。

<0:检查失败,或者控制文件不一致(返回值为-12)。

64.dwmon_recover_mppctl

函数原型:

int

dwmon_recover_mppctl();

功能说明:

配置为mpp主备环境下时,如果某个活动节点的dmmpp.ctl不一致,可通过调用此接口恢复到一致状态。

只有MPP主备环境下允许调用此接口,并且需要先登录监视器。

参数说明:

返回值:

0:执行成功。

<0:执行失败。

65.dwmon_get_mpp_site_info

函数原型:

DwMonMpp

dwmon_get_mpp_site_info();

功能说明:

配置为mpp主备环境时,可通过调用此接口获取mpp节点信息,注意只有MPP主备环境下允许调用此接口。

参数说明:

返回值:

返回DwMonMpp对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonMpp其他对象成员获取MPP节点信息。

<0:执行失败。

66.dwmon_tip

函数原型:

int

dwmon_tip();

功能说明:

可调用此接口查看系统当前运行状态,输出的系统状态信息可通过消息相关接口获取到。

参数说明:

返回值:

0:系统运行正常,所有实例和守护进程都处于OPEN状态。

-25:所有组中都有正常的主库实例(实例和守护进程都是OPEN状态),不影响系统使用,但是存在有其他异常实例,具体描述信息可通过消息相关接口获取。

-26:系统运行异常,不是所有组都有正常的主库实例,守护进程正在自动处理,请稍后再次调用接口判断,具体描述信息可通过消息相关接口获取。

-27:系统运行异常,不是所有组都有正常的主库实例,需要用户根据描述信息确认是否进行人工干预,具体描述信息可通过消息相关接口获取。

其他<0的值:表示接口执行失败。

67.dwmon_set_group_arch_invalid

函数原型:

int

dwmon_set_group_arch_invalid(

	String group_name

);

功能说明:

修改指定组中所有备库的归档为无效状态,如果未指定组名,则通知所有组执行。

注意:执行此操作需要先登录监视器。

参数说明:

group_name: 输入参数,守护组名,不指定则对所有组执行。

返回值:

0:执行成功。

<0:执行失败。

68.dwmon_set_group_recover_time

函数原型:

int

dwmon_set_group_recover_time(

	String group_name,

	int recover_time

);

功能说明:

修改指定组中所有备库的恢复间隔(3~86400s),只修改组中主库对应守护进程的内存值,如果未指定组名,则通知所有组执行。

注意:执行此操作需要先登录监视器。

参数说明:

group_name: 输入参数,守护组名,不指定则对所有组执行。

recover_time:
输入参数,指定恢复间隔(3~86400s),只修改组中主库守护进程的内存值。

返回值:

0:执行成功。

<0:执行失败。

69.dwmon_set_group_para_value

函数原型:

int

dwmon_set_group_para_value(

	String group_name,

	String para_name,

	String para_value

);

功能说明:

修改指定组的所有守护进程的指定配置参数,同时修改dmwatcher.ini配置文件和内存值,如果未指定组名,则通知所有组执行。

目前可修改的参数包括:DW_ERROR_TIME、INST_RECOVER_TIME、INST_ERROR_TIME、INST_AUTO_RESTART、INST_SERVICE_IP_CHECK、RLOG_SEND_THRESHOLD、RLOG_APPLY_THRESHOLD。

如果组中某个守护进程故障,则跳过不修改,如果要重启故障的守护进程,需要在重启前修改守护进程dmwatcher.ini中的DW_ERROR_TIME和远程一致,否则dmmonitor执行命令时会报错处理。

注意:执行此操作需要先登录监视器。

参数说明:

group_name: 输入参数,守护组名,不指定则对所有组执行。

para_name: 输入参数,指定要修改的参数名称,目前只允许是DW_ERROR_TIME、INST_RECOVER_TIME、INST_ERROR_TIME、INST_AUTO_RESTART、INST_SERVICE_IP_CHECK、RLOG_SEND_THRESHOLD、RLOG_APPLY_THRESHOLD中的一种。

para_value: 输入参数,指定要修改的参数值,和para_name对应。

返回值:

0:执行成功。

<0:执行失败。

70.dwmon_set_group_auto_restart_on

函数原型:

int

dwmon_set_group_auto_restart_on(

	String group_name

);

功能说明:

打开指定组内所有DMDSC集群节点实例的自动拉起标记。

DMDSC集群的自动拉起是靠dmcss执行的,dmcss只负责拉起和自己的dcr_seqno相同的db节点。

此接口只修改dmcss内存中的自动拉起标记值,不会修改dmdcr.ini中的配置值,如果dmcss重启,此修改会丢失。

如果dmcss未配置自动拉起参数(DMDCR_DB_RESTART_INTERVAL/DMDCR_DB_STARTUP_CMD),此命令会执行失败。

此接口执行时,有可能所有节点实例都还未启动,无法校验登录口令,因此不要求先登录监视器。

参数说明:

group_name: 输入参数,指定要执行操作的组名,只有一组时可以不指定。

返回值:

0:执行成功。

<0:执行失败。

71.dwmon_set_group_auto_restart_off

函数原型:

int

dwmon_set_group_auto_restart_off(

	String group_name

);

功能说明:

关闭指定组内所有DMDSC集群节点实例的自动拉起标记。

和dwmon_set_group_auto_restart_on接口相对应,可以一次性关闭守护系统内所有DMDSC集群上dmcss的自动拉起标记。

此命令只修改dmcss内存中的自动拉起标记值,如果dmcss重启,此修改会丢失。

执行此操作需要先登录监视器。

参数说明:

group_name: 输入参数,指定要执行操作的组名,只有一组时可以不指定。

返回值:

0:执行成功。

<0:执行失败。

72.dwmon_detach_database

函数原型:

int

dwmon_detach_database(

	String group_name,

	String db_name

);

功能说明:

此接口允许将指定的备库分离出守护进程组,执行此接口需要先登录监视器。

对于全局守护类型的备库,使用此命令不会触发主库的Failover故障处理流程。该接口不会修改相关的配置信息,只是为了需要主动维护备库时使用。

接口会依次执行下列操作:

  1. 设置指定备库的恢复间隔为86400(s)
  2. 修改主库到指定备库的归档状态无效

本接口不会主动退出备库实例,如果需要执行退出操作,可再通过调用dwmon_stop_database接口完成。

在备库维护结束后,如果备库是退出状态,可先调用dwmon_startup_database接口将备库启动,然后再调用dwmon_attach_database接口将备库重加入守护进程组。

参数说明:

group_name: 输入参数,指定要执行操作的守护进程组名,只有一组时可以不指定。

db_name: 输入参数,指定要正常分离出的备库名称,此参数必须指定。

返回值:

0:执行成功。

<0:执行失败。

73.dwmon_attach_database

函数原型:

int

dwmon_attach_database(

	String group_name,

	String db_name

);

功能说明:

在使用dwmon_detach_database接口分离出去的备库维护完成后,可通过调用此接口将备库重加入守护进程组,执行此接口需要先登录监视器。

此接口执行时,会通知主库将指定备库的恢复间隔调整为3s,3s后主库守护进程会发起Recovery流程,将备库重加入守护系统。

注意,此接口不会将备库拉起,如果备库处于退出状态,需要先调用dwmon_startup_database接口将备库启动。

参数说明:

group_name: 输入参数,指定要执行操作的守护进程组名,只有一组时可以不指定。

db_name: 输入参数,指定要重加入的备库名称,此参数必须指定。

返回值:

0:执行成功。

<0:执行失败。

74.dwmon_get_source_database_name

函数原型:

DwMonData

dwmon_get_source_database_name(

	String group_name,

	String db_name

);

功能说明:

获取指定库的源库名称,指定库为备库时才有意义,可以是异步备库。

参数说明:

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

返回值:

返回DwMonData对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过对象成员stringValue获取源库名称。

<0:执行失败。

75.dwmon_get_ep_arch_send_info

函数原型:

ArchSendInfo

dwmon_get_ep_arch_send_info(

	String group_name,

	String source_name,

	String db_name

);

功能说明:

获取指定的源实例到指定备库的归档发送信息。

源库如果是DMDSC集群,则需要依次取出集群内每个源实例到指定备库的归档发送信息,这个需要结合dwmon_get_source_database_name和dwmon_get_database_info这两个接口来完成。

首先用dwmon_get_source_database_name获取到源库名称,再通过dwmon_get_database_info获取到源库的所有实例名,再通过本接口依次取出源库每个实例到指定备库的归档发送信息,接口中的source_name字段就是指源库中的某个实例名。

参数说明:

group_name: 输入参数,输入指定备库所在的守护进程组名,如果只有一组可以不指定。

source_name:输入参数,输入要获取归档发送信息的源库实例名。

db_name: 输入参数,输入要获取归档发送信息的备库名称。

返回值:

返回ArchSendInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过ArchSendInfo的其他对象成员获取归档发送信息。

<0:执行失败。

76.dwmon_get_n_apply

函数原型:

ApplyNumInfo

dwmon_get_n_apply(

	String group_name,

	String db_name

);

功能说明:

获取指定备库上的重演节点个数信息,也就是源库的节点个数。

参数说明:

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

返回值:

返回ApplyNumInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过ApplyNumInfo的其他对象成员获取详细信息。

<0:执行失败。

77.dwmon_get_ep_nth_apply_info

函数原型:

ApplyLsnInfo

dwmon_get_ep_nth_apply_info(

	String group_name,

	String db_name,

	int nth

);

功能说明:

获取指定备库上第nth组重演信息上记录的lsn等信息。

当备库对应的源库是DMDSC集群时,假如DMDSC集群有N个节点,那么备库控制节点上就会有N组重演信息依次和源库的每个节点相对应,N值可以通过dwmon_get_n_apply接口中的applyNum字段值获取,本接口的输入参数nth的取值范围为[0,applyNum-1]。

此接口只输出简略的lsn重演信息,如果还需要获取详细的重演统计信息,请参考dwmon_get_ep_nth_apply_info接口说明。

参数说明:

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

nth: 输入参数,指定要获取备库上第nth组重演信息。

返回值:

返回ApplyInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过ApplyInfo的其他对象成员获取重演lsn信息。

<0:执行失败。

78.dwmon_get_ep_nth_apply_stat

函数原型:

ArchApplyInfo

dwmon_get_ep_nth_apply_stat(

	String group_name,

	String db_name,

	int nth

);

功能说明:

获取指定备库上第nth组重演信息,包含详细的重演统计信息。

当备库对应的源库是DMDSC集群时,假如DMDSC集群有N个节点,那么备库控制节点上就会有N组重演信息依次和源库的每个节点相对应,N值可以通过dwmon_get_n_apply接口中的applyNum字段值获取,本接口的输入参数nth的取值范围为[0,applyNum -1]。

参数说明:

group_name: 输入参数,输入指定备库所在的守护进程组名,如果只有一组可以不指定。

db_name: 输入参数,指定要获取重演信息的备库名称。

nth: 输入参数,指定要获取备库上第nth组重演信息。

返回值:

返回ArchApplyStat对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过ArchApplyStat的其他对象成员获取详细的重演信息。

<0:执行失败。

79.dwmon_clear_database_arch_send_info

函数原型:

int

dwmon_clear_database_arch_send_info(

	String group_name,

	String db_name

);

功能说明:

清理指定组中主库到指定备库实例的最近N次归档发送信息(通知主库执行)。

N值取主库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际归档发送次数中的较小值,实际归档发送次数可通过查询V$ARCH_SEND_INFO获取。

如果主库是DMDSC集群,则会通知集群内所有实例执行清理。

参数说明:

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

返回值:

0:执行成功。

<0:执行失败。

80.dwmon_clear_group_arch_send_info

函数原型:

int

dwmon_clear_group_arch_send_info (

	String group_name

);

功能说明:

清理指定组中主库到所有实时或即时备库实例的最近N次归档发送信息(通知主库执行)。

N值取主库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际归档发送次数中的较小值,实际归档发送次数可通过查询V$ARCH_SEND_INFO获取。

参数说明:

group_name:输入参数,指定守护进程组名,如果不指定则通知所有组执行。

返回值:

0:执行成功。

<0:执行失败。

81.dwmon_clear_database_rapply_stat

函数原型:

int

dwmon_clear_database_rapply_stat(

	String group_name,

	String db_name

);

功能说明:

清理指定备库实例的最近N次日志重演信息(通知备库执行)。

N值取备库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际重演次数中的较小值,实际重演次数可通过查询V$RAPPLY_INFO获取。

参数说明:

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

返回值:

0:执行成功。

<0:执行失败。

82.dwmon_clear_group_rapply_stat

函数原型:

int

dwmon_clear_group_rapply_stat(

	String group_name

);

功能说明:

清理指定组中所有备库实例的最近N次日志重演信息(通知所有备库执行)。

N值取备库dm.ini中配置的RLOG_SEND_APPLY_MON值和实际重演次数中的较小值,实际重演次数可通过查询V$RAPPLY_INFO获取。

参数说明:

group_name:输入参数,指定守护进程组名,如果不指定则通知所有组执行。

返回值:

0:执行成功。

<0:执行失败。

83.dwmon_check_recover

函数原型:

int

dwmon_check_recover(

	String group_name,

	String db_name

);

功能说明:

检查指定组的指定备库是否满足自动Recover条件,如果不满足条件,主库的守护进程不会对指定备库发起自动Recovery流程。

参数说明:

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

inst_name:输入参数,指定备库名称。

返回值:

0:符合自动Recover条件,备库已经在待恢复列表或者主库的守护进程即将发起对指定备库的Recover操作。

-20:当前无法判断是否符合自动Recover条件,比如有监视器命令正在执行、指定备库还未达到恢复间隔或者指定备库上的RLOG_PKG还未全部重演完成等情况,需要稍后再次调用接口判断,具体的描述信息可通过消息相关接口获取到。

-21:表示备库不满足自动Recover条件,具体的描述信息可通过消息相关接口获取到。

其他<0的值:表示接口执行失败。

84.dwmon_check_open

函数原型:

int

dwmon_check_open(

	String group_name,

	String db_name

);

功能说明:

检查指定组的指定库是否满足自动Open条件,如果不满足条件,守护进程不会通知数据库实例执行Open操作。

参数说明:

group_name:输入参数,指定库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定数据库名称。

返回值:

0:符合自动Open条件,库已经Open成功或者正在执行Open,或者库的守护进程即将通知实例执行Open操作。

-22:当前无法判断库是否满足自动Open条件,比如有监视器命令正在执行,或者数据库实例还未启动到MOUNT状态等情况,需要稍后再次调用接口判断,具体的描述信息可通过消息相关接口获取到。

-23:表示库不满足自动Open条件,并且库自身不是OPEN状态,具体的描述信息可通过消息相关接口获取到。

-24:表示库不满足自动Open条件,其中库实例已经是OPEN状态,但库的守护进程不是OPEN状态,具体的描述信息可通过消息相关接口获取到。

其他<0的值:表示接口执行失败。

85.dwmon_deinit_env

函数原型:

int

dwmon_deinit_env();

功能说明:

销毁监视器执行环境。

参数说明:

返回值:

0:执行成功。

<0:执行失败。

86.dwmon_free_handle

函数原型:

int

dwmon_free_handle();

功能说明:

释放分配到的监视器句柄。

参数说明:

返回值:

0:执行成功。

<0:执行失败。

87.dwmon_get_monitor_state

函数原型:

DWMonState

dwmon_get_monitor_state();

功能说明:

获取监视器信息。

参数说明:

返回值:

返回DwMonState对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonState的其他对象成员获取监视器信息。

<0:执行失败。

88.dwmon_get_ep_nth_apply_with_parallel_info

函数原型:

ApplyFullInfo

dwmon_get_ep_nth_apply_with_parallel_info(

	String group_name,

	String db_name,

	int nth

);

功能说明:

获取指定备库上第nth组重演信息上记录的lsn值、包序号、并行度以及各路并行lsn信息。

当备库对应的源库是DMDSC集群时,假如DMDSC集群有N个节点,则备库控制节点上就会有N组重演信息依次和源库的每个节点相对应,N值可以通过dwmon_get_n_apply接口中的applyNum字段获取,本接口的输入参数nth的取值范围为[0, applyNum-1]。

参数说明:

group_name:输入参数,指定备库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定备库名称。

nth:输入参数,指定要获取备库上第nth组重演信息。

返回值:

返回ApplyParallelInfo对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过DwMonState的其他对象成员获取监视器信息。

<0:执行失败。

89.dwmon_set_database_until_time

函数原型:

Int
dwmon_set_database_until_time (
	String	group_name,
	String	db_name,
	String	until_time
);

功能说明:

设置指定组的指定异步备库重演到的时间点。

参数说明:

group_name:输入参数,指定库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定异步备库名称。

until_time:输入参数,指定异步备库重演到的时间点,可精确到微秒。

返回值:

0:执行成功。

<0:执行失败。

90.dwmon_get_database_until_time

函数原型:

DwMonData
dwmon_get_database_until_time (
	String group_name,
	String db_name
);

功能说明:

获取指定组的指定异步备库设置的重演到的时间点。

参数说明:

group_name:输入参数,指定库所属的守护进程组名,只有一组时可以不指定。

db_name:输入参数,指定异步备库名称。

返回值:

返回DwMonData对象,可通过对象成员returnCode获取执行结果。

0:执行成功,可通过对象成员stringValue获取异步备库设置的重演到的时间点。

<0:执行失败。

10.2.6 C编程示例

10.2.6.1 Windows编程示例

这里给出C程序的编程示例,Windows操作系统,使用VS2010,通过配置项目属性,使用dwmon.lib隐式加载dll的方式,注意此处仅为使用示例,实际使用时可以根据自己的需求再做调整。本例中达梦安装路径为“D:\dmdbms”,头文件dwmon_dll.h和lib文件dwmon.lib位于“D:\dmdbms\include”目录下,动态链接库dwmon.dll位于“D:\dmdbms\bin”目录下。

本例中VS2010配置步骤如下:

  1. 选择“文件”->“新建”->“项目”
  2. 新建“Win32控制台应用程序”,项目名称为“test_dwmon”,位置为“E:\test”,点击“确定”->“下一步”,进入配置向导,应用程序类型选择“控制台应用程序”,附加选项“空项目”,点击“完成”。
  3. 在“头文件”目录上右键“添加”->“现有项”,选择“D:\dmdbms\include”目录下的dwmon_dll.h添加。
  4. 在“源文件”目录上右键“添加”->“新建项”,选择“C++文件(.cpp)”类型,名称为“test_dwmon.c”,点击“添加”,文件创建完成,文件内容可参考下面的源码。
  5. 配置项目属性,点击项目名称右键选择“属性”->“配置属性”->“调试”,“工作目录”中选择目录“D:\dmdbms\bin”。
  6. 配置项目属性,点击项目名称右键选择“属性”-> “配置属性”-> “C/C++”->“常规”,“附加包含目录”中选择目录“D:\dmdbms\include”。
  7. 配置项目属性,点击项目名称右键选择“属性”-> “配置属性”-> “C/C++”->“预处理器”,“预处理器定义”中增加“DM64;_CRT_SECURE_NO_WARNINGS;”,本例中使用64位平台,如果是32位平台,则不需要增加“DM64;”。
  8. 配置项目属性,点击项目名称右键选择“属性”-> “配置属性”->“链接器”->“常规”, “附加库目录”中选择目录“D:\dmdbms\include”。
  9. 配置项目属性,点击项目名称右键选择“属性”-> “配置属性”-> “链接器”->“输入”,“附加依赖项”中增加“dwmon.lib;”。

至此,VS2010环境配置完成,注意dll和lib文件需要和项目平台保持一致,都是32位或者都是64位,否则会导致程序无法正常运行。

test_dwmon.c源码如下:

##include "dwmon_dll.h"

##include "stdio.h"

##include "stdlib.h"

##include "windows.h"

##include "process.h"

/* 消息线程 */

DWORD

WINAPI

dwmon_get_msg_thread(

	mhandle handle

)

{

	mschar buf_msg[4097];

	muint4 msg_len_out;

	muint4 get_flag;

	DWMON_RETURN code;

	while (TRUE)

	{

		/* 等待消息事件 */

		dwmon_msg_event_wait(handle);

		/* 获取退出标记 */

		if (dwmon_get_msg_exit_flag(handle) == TRUE)

		{

			break;

		}

		do

		{

			/* 获取并打印消息 */

			code = dwmon_get_exec_msg(handle, buf_msg, 4097, &msg_len_out, &get_flag);

			if (code >=0 && msg_len_out > 0)

			{

				fprintf(stdout, "%s", buf_msg);

			}

		} while (get_flag); /* 判断是否还有未读消息 */

	}

	/* 设置退出事件 */

	dwmon_set_msg_exit_event(handle);

	return 0;

}

/* 清理环境 */

void

dwmon_clear_env(

	mhandle handle

)

{

	/* 通知并等待dmmon_get_msg_thread消息线程退出 */

	dwmon_msg_event_deinit(handle);

	/* 销毁监视器环境 */

	dwmon_deinit(handle);

	/* 释放句柄 */

	dwmon_free_handle(handle);

}

int

main()

{

	DWMON_RETURN ret;

	mhandle handle;

	HANDLE thread_handle;

	char msg[4097];

	int msg_len;

	/* 分配操作句柄 */

	ret = dwmon_alloc_handle(\&handle);

	if (ret < 0)

	{

		fprintf(stdout, "dwmon alloc handle failed!\n");

	/* 获取ret对应的错误描述信息 */

		dwmon_get_error_msg_by_code(handle, ret, msg, 4097, &msg_len);

		if (msg_len > 0)

		{

			fprintf(stdout, "code:%d, error msg:%s", ret, msg);

		}

		return ret;

	}

	/* 创建消息线程 */

	thread_handle = (HANDLE)_beginthreadex(NULL, 0, dwmon_get_msg_thread, handle, 0, NULL);

	if (thread_handle == NULL)

	{

		ret = GetLastError();

		fprintf(stderr, "_beginthreadex error! desc:%s, code:%d\n", strerror(ret), ret);

		dwmon_free_handle(handle);

		return ret;

	}

	/*初始化监视器环境,可以选择忽略-15错误(建立到所有守护进程连接失败,可能当前守护进程都还未启动)*/

	ret = dwmon_init(handle, "D:\\dwmon\\dmmonitor.ini", "D:\\dwmon\\log");

	if (ret < 0 && ret != -15)

	{

		fprintf(stdout, "dwmon init failed!\n");

		/* 获取ret对应的错误描述信息 */

		dwmon_get_error_msg_by_code(handle, ret, msg, 4097, &msg_len);

		if (msg_len > 0)

		{

			fprintf(stdout, "code:%d, error msg:%s", ret, msg);

		}

		dwmon_clear_env(handle);

		return ret;

	}

	/* 登录监视器 */

	ret = dwmon_login(handle, "SYSDBA", "SYSDBA");

	if (ret < 0)

	{

		fprintf(stdout, "dwmon login failed!\n");

		/* 获取ret对应的错误描述信息 */

		dwmon_get_error_msg_by_code(handle, ret, msg, 4097, &msg_len);

		if (msg_len > 0)

		{

			fprintf(stdout, "code:%d, error msg:%s", ret, msg);

		}

	}

	/* 执行其他命令 */

	/*...*/

	/* 退出登录 */

	dwmon_logout(handle);

	/* 清理环境 */

	dwmon_clear_env(handle);

	system("pause");

	return 0;

}

10.2.6.2 Linux编程示例

这里给出C程序的编程示例,运行环境为Linux操作系统,使用时可根据实际情况调整代码。

本例中有两个源文件:test_dwmon_linux.h、test_dwmon_linux.c,存放在/dm/test目录下,此目录下还包含dll头文件dwmon_dll.h和监视器配置文件dmmonitor.ini。

本例中动态链接库文件存放在/opt/dm/bin目录下,程序中使用相对路径方式加载libdwmon.so文件,需要先设置环境变量:

export LD_LIBRARY_PATH=/opt/dm/bin:\$LD_LIBRARY_PATH

注意:此种方式只对当前会话有效,可考虑写入到~/.bashrc或~/.bash_profile文件中永久生效。

gcc编译命令:

gcc -o test_dwmon_linux test_dwmon_linux.c -ldl -rdynamic -lpthread

编译成功后,执行程序:

./test_dwmon_linux

test_dwmon_linux.h源码如下:

##include "dwmon_dll.h"

##ifndef _TEST_DWMON_H _

##define _TEST_DWMON_H_

typedef void (*dwmon_msg_event_wait_fun_t)(mhandle mhdle);

typedef mbool (*dwmon_get_msg_exit_flag_fun_t)(mhandle mhdle);

typedef void (*dwmon_set_msg_exit_event_fun_t)(mhandle mhdle);

typedef void (*dwmon_msg_event_deinit_fun_t)(mhandle mhdle);

typedef DWMON_RETURN (*dwmon_deinit_fun_t)(mhandle mhdle);

typedef DWMON_RETURN (*dwmon_free_handle_fun_t)(mhandle mhdle);

typedef DWMON_RETURN (*dwmon_alloc_handle_fun_t)(mhandle* mhdle);

typedef DWMON_RETURN (*dwmon_logout_fun_t)(mhandle mhdle);


typedef

DWMON_RETURN

(*dwmon_get_exec_msg_fun_t)(

	mhandle mhdle,

	mschar* buf_msg,

	muint4 buf_len,

	muint4* msg_len_out,

	muint4* get_flag

);

typedef

DWMON_RETURN

(*dwmon_get_error_msg_by_code_fun_t)(

	mhandle mhdle,

	mint4 code,

	mschar* buf_msg,

	muint4 buf_len,

	muint4* msg_len_out

);

typedef

DWMON_RETURN

(*dwmon_init_fun_t)(

	mhandle mhdle,

	mschar* ini_path,

	mschar* log_path

);

typedef

DWMON_RETURN

(*dwmon_login_fun_t)(

	mhandle mhdle,

	mschar* username,

	mschar* password

);

##endif

test_dwmon_linux.c源码如下:

	##include "stdio.h"

##include "stdlib.h"

##include "dlfcn.h"

##include "pthread.h"

##include "test_dwmon_linux.h"

dwmon_alloc_handle_fun_t 	dwmon_alloc_handle_fun;

dwmon_free_handle_fun_t 	dwmon_free_handle_fun;

dwmon_init_fun_t	 dwmon_init_fun;

dwmon_deinit_fun_t	 dwmon_deinit_fun;

dwmon_msg_event_wait_fun_t 	dwmon_msg_event_wait_fun;

dwmon_get_msg_exit_flag_fun_t 	dwmon_get_msg_exit_flag_fun;

dwmon_set_msg_exit_event_fun_t 	dwmon_set_msg_exit_event_fun;

dwmon_msg_event_deinit_fun_t 	dwmon_msg_event_deinit_fun;

dwmon_get_exec_msg_fun_t 	dwmon_get_exec_msg_fun;

dwmon_get_error_msg_by_code_fun_t dwmon_get_error_msg_by_code_fun;

dwmon_login_fun_t 	dwmon_login_fun;

dwmon_logout_fun_t 	dwmon_logout_fun;

/* 消息线程 */

void*

dwmon_get_msg_thread(

	mhandle handle

)

{

	mschar buf_msg[4097];

	muint4 msg_len_out;

	muint4 get_flag;

    DWMON_RETURN code;

	while (1)

	{

		/* 等待消息事件 */

		dwmon_msg_event_wait_fun(handle);

		/* 获取退出标记 */

		if (dwmon_get_msg_exit_flag_fun(handle) == 1)

		{

			break;

		}

		do

		{

			/* 获取并打印消息 */

			code = dwmon_get_exec_msg_fun(handle, buf_msg, 4097, &msg_len_out, &get_flag);

			if (code >=0 && msg_len_out > 0)

			{

				fprintf(stdout, "%s", buf_msg);

			}

       } while (get_flag); /* 判断是否还有未读消息 */

	}

	/* 设置退出事件 */

	dwmon_set_msg_exit_event_fun(handle);

	return NULL;

}

/* 清理环境 */

void

dwmon_clear_env(

	mhandle handle

)

{

	/* 通知并等待dmmon_get_msg_thread消息线程退出 */

	dwmon_msg_event_deinit_fun(handle);

	/* 销毁监视器环境 */

	dwmon_deinit_fun(handle);

	/* 释放句柄 */

	dwmon_free_handle_fun(handle);

}

int

dwmon_load_fun(

	void* handle

)

{

	char* err = NULL;

	dwmon_alloc_handle_fun = dlsym(handle, "dwmon_alloc_handle");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_alloc_handle error! desc:%s	\n", err);

		return -1;

	}

	dwmon_free_handle_fun = dlsym(handle, "dwmon_free_handle");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_free_handle error! desc:%s\n", err);

		return -1;

	}

	dwmon_init_fun = dlsym(handle, "dwmon_init");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_init error! desc:%s\n", err);

		return -1;

	}

	dwmon_deinit_fun = dlsym(handle, "dwmon_deinit");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_deinit error! desc:%s\n", err);

		return -1;

	}

	dwmon_msg_event_wait_fun = dlsym(handle, "dwmon_msg_event_wait");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_msg_event_wait error! desc:%s\n", err);

		return -1;

	}

	dwmon_get_msg_exit_flag_fun = dlsym(handle, "dwmon_get_msg_exit_flag");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_get_msg_exit_flag error! desc:%s\n", err);

		return -1;

	}

	dwmon_set_msg_exit_event_fun = dlsym(handle, "dwmon_set_msg_exit_event");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_set_msg_exit_event error! desc:%s\n", err);

		return -1;

	}

	dwmon_msg_event_deinit_fun = dlsym(handle, "dwmon_msg_event_deinit");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_msg_event_deinit error! desc:%s\n", err);

		return -1;

	}

	dwmon_get_exec_msg_fun = dlsym(handle, "dwmon_get_exec_msg");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_get_exec_msg error! desc:%s\n", err);

		return -1;

	}

	dwmon_get_error_msg_by_code_fun = dlsym(handle, "dwmon_get_error_msg_by_code");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_get_error_msg_by_code error! desc:%s\n", err);

		return -1;

	}

	dwmon_login_fun = dlsym(handle, "dwmon_login");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_login error! desc:%s\n", err);

		return -1;

	}

	dwmon_logout_fun = dlsym(handle, "dwmon_logout");

	if ((err = dlerror()) != NULL)

	{

		dlclose(handle);

		printf("dlsym dwmon_logout error! desc:%s\n", err);

		return -1;

	}

	return 0;

}

int

main()

{

	DWMON_RETURN ret;

	mhandle handle;

	void* dlhandle;

	char msg[4097];

	int msg_len;

	pthread_t tid;

	/* 打开动态链接库 */

	dlhandle = dlopen("libdwmon.so", RTLD_NOW);

	if (dlhandle == NULL)

	{

		printf("dlopen error! desc: %s\n", dlerror());

		return -1;

	}

	/* 加载dll函数 */

	ret = dwmon_load_fun(dlhandle);

	if (ret < 0)

	{

		dlclose(dlhandle);

		return -1;

	}

	/* 分配操作句柄 */

	ret = dwmon_alloc_handle_fun(&handle);

	if (ret < 0)

	{

		fprintf(stdout, "dwmon alloc handle failed!\n");

		/* 获取ret对应的错误描述信息 */

		dwmon_get_error_msg_by_code_fun(handle, ret, msg, 4097, &msg_len);

		if (msg_len > 0)

		{

			fprintf(stdout, "code:%d, error msg:%s", ret, msg);

		}

        dlclose(dlhandle);

		return ret;

	}

	/* 创建消息线程 */

	ret = pthread_create(&tid, NULL, dwmon_get_msg_thread, handle);

	if(ret != 0)

	{

		fprintf(stdout, "pthread_create failed!\n");

		dwmon_free_handle_fun(handle);

		dlclose(dlhandle);

		return ret;

	}

	/* 初始化监视器环境,可以选择忽略-15错误(建立到所有守护进程连接失败,可能当前守护进程都还未启动)*/

	ret = dwmon_init_fun(handle, "/dm/test/dmmonitor.ini", "/dm/test/log");

	if (ret < 0 && ret != -15)

	{

		fprintf(stdout, "dwmon init failed!\n");

		/* 获取ret对应的错误描述信息 */

		dwmon_get_error_msg_by_code_fun(handle, ret, msg, 4097, &msg_len);

		if (msg_len > 0)

		{

			fprintf(stdout, "code:%d, error msg:%s", ret, msg);

		}

		dwmon_clear_env(handle);

		dlclose(dlhandle);

		return ret;

	}

	/* 登录监视器 */

	ret = dwmon_login_fun(handle, "SYSDBA", "SYSDBA");

	if (ret < 0)

	{

		fprintf(stdout, "dwmon login failed!\n");

		/* 获取ret对应的错误描述信息 */

		dwmon_get_error_msg_by_code_fun(handle, ret, msg, 4097, &msg_len);

		if (msg_len > 0)

		{

			fprintf(stdout, "code:%d, error msg:%s", ret, msg);

		}

	}

	/* 执行其他命令 */

	/*...*/

	/* 退出登录 */

	dwmon_logout_fun(handle);

	/* 清理环境 */

	dwmon_clear_env(handle);

    dlclose(dlhandle);

		return 0;

}

10.2.7 Java编程示例

这里给出Java程序的编程示例,运行环境为Eclipse,使用加载监视器jar包的方式,jar包名称为com.dameng.jni_7.0.0.jar,注意此处仅为使用示例,实际使用时可以根据自己的需求再做调整。

Linux环境下需要安装linux版本的jdk和Eclipse,下面的源码示例为windows环境,linux下需要修改源码中的路径格式,其他不需要改动。

package com.dameng.test;

import com.dameng.console.dwmon.*;

public class DwMonTest {

	public DwMonDLL monDll = null;

	public DwMonMsg monMsg = null;

	public Thread msgThread = null;

	public String ini_path = "D:\\dwmon\\dmmonitor.ini";

	public String log_path = "D:\\dwmon\\log";

	public String username = "SYSDBA";

	public String password = "SYSDBA";

	//接收消息线程

	public void startThread()

	{

		msgThread = new Thread(new Runnable()

		{

			@Override

			public void run()

			{

				while (true)

				{

					//等待消息事件

					monDll.dwmon_msg_event_wait();

					//获取退出标记

					if (monDll.dwmon_get_msg_exit_flag() == true)

						break;

					do

					{

						//获取并打印消息

						monMsg = monDll.dwmon_get_exec_msg();

						if(monMsg.getReturnCode() < 0)

							break;

						if(monMsg.getMsg().length() > 0)

						{

							System.out.print(monMsg.getMsg());

						}

					} while (monMsg.getMsgFlag() == 1); //是否还有未读消息

				}

				//设置退出标记

				monDll.dwmon_set_msg_exit_event();

			}

		});

			//启动线程

			msgThread.start();

	}

	//退出线程

	public void endThread() throws InterruptedException

	{

		if (msgThread != null && msgThread.isAlive())

		{

			//通知并等待消息线程退出

			monDll.dwmon_msg_event_deinit();

		}

	}

	public void test() throws InterruptedException

	{

		boolean ret1 = false;

		int ret2 = 0;

		DwMonMsg retMsg = null;

		monDll = new DwMonDLL();

		//分配句柄

		ret1 = monDll.dwmon_init_handle();

		if (ret1 == false)

		{

			System.out.println("dwmon alloc handle failed!");

			return;

		}

		else

		{

			System.out.println("dwmon alloc handle success!");

		}

		//启动消息接收线程

		startThread();

		//初始化监视器,可以选择忽略-15错误(建立到所有守护进程连接失败,可能当前守护进程都还未启动)

		ret2 = monDll.dwmon_init_env(ini_path, log_path);

		if (ret2 < 0 && ret2 != -15)

		{

			System.out.println("dwmon init failed!");

			/* 获取ret2对应的错误描述信息 */

			retMsg = monDll.dwmon_get_error_msg_by_code(ret2);

			if (retMsg.getReturnCode() >= 0)

			{

				System.out.println("code:" + ret2 + "," + retMsg.getMsg());

			}

			//初始化失败,退出线程,销毁句柄

			endThread();

			monDll.dwmon_free_handle();

			return;

		}

		else

        {

			System.out.println("dwmon init success!");

		}

		//登录监视器

		ret2 = monDll.dwmon_login(username, password);

		if (ret2 < 0)

		{

			System.out.println("login failed!");

			/* 获取ret2对应的错误描述信息 */

			retMsg = monDll.dwmon_get_error_msg_by_code(ret2);

			if (retMsg.getReturnCode() >= 0)

			{

				System.out.println("code:" + ret2 + "," + retMsg.getMsg());

			}

		}

		//退出登录

		monDll.dwmon_logout();

		//退出消息线程

        endThread();

		//销毁监视器环境

		monDll.dwmon_deinit_env();

		//销毁句柄

		monDll.dwmon_free_handle();

	}

	/**

	* @param args

	* @throws InterruptedException

	**/

	public static void main(String[] args) throws InterruptedException {

	DwMonTest test = new DwMonTest();

	test.test();

	}

}

10.2.8 错误码汇编

10.2.8.1 监视器

错误码 解释
-1 普通错误
-2 无效的句柄
-3 初始化日志信息失败
-4 初始化系统信息失败
-5 未登录监视器或服务器公钥发生变化,请重新登录
-6 读取dmmonitor.ini文件失败(路径错误或配置错误或没有权限)
-7 无效的日志文件路径
-8 设置命令执行标记失败,此标记已被设置,在标记被重置后才允许再次设置
-9 重置命令执行标记失败,已经被重置过
-10 实例故障或者实例对应的守护进程故障
-11 系统运行异常
-12 MPP控制文件不一致
-13 守护进程控制文件没有记录项
-14 同一个守护系统中有多个确认监视器
-15 建立到所有守护进程的连接失败,可能守护进程都未启动,由用户决定是否忽略此错误码继续往下执行,如果不忽略此错误,认定初始化失败,则需要先销毁监视器环境,再释放操作句柄。
-16 非法的参数,参数为空或长度超长或值非法
-17 没有找到code对应的错误信息
-18 内存不足
-19 监视器已达到最大个数(同一个守护进程组中最多允许同时启动10个监视器)
-20 备库不满足自动Recover条件
-20 当前无法判断实例是否满足恢复条件,请稍后重试!
-21 检测实例不满足恢复条件!
-23 守护系统中已经有OPEN状态的主库实例,但仍然存在其他异常实例
-24 守护系统当前运行异常,守护进程正在自动处理中,请稍后再观察状态是否正常
-25 守护系统当前运行异常,需要用户确认是否进行手工干预
-26 没有正常主库(实例和watch都是OPEN状态),或者组中全部是local实例,但存在有实例没有OPEN,需要等待守护进程处理完成
-27 没有正常主库(实例和watch都是OPEN状态),或者组中全部是local实例,但存在有实例没有OPEN,需要用户确认是否手动干预
-28 没有deinit,直接free handle报错
-8014 用户自定义异常或者未知错误
-8145 消息校验失败
-8013 接收守护进程消息超时
-8206 用户名或密码错误,或用户没有DBA权限
-8191 用户名加密失败
-8192 密码加密失败
-8197 用户名或密码为空或长度超长
-8204 当前没有活动实例或守护进程状态不匹配,登录信息校验失败
-8210 登录监视器失败
-8243 监视器还未收到操作组的任何一个守护进程消息(不包括local守护类型)
-8342 监视器未收到操作组的所有守护进程消息(不包括local守护类型)
-8345 尚未收到守护进程的控制文件消息
-8380 守护进程的控制文件不是有效状态
-8346 主备库的守护进程控制文件不一致
-8021 实例故障
-8037 实例不是MOUNT状态
-8038 有消息正在发送中,您的命令当前不能执行
-8042 实例故障, 操作终止
-8043 接收守护进程消息超时,操作终止
-8044 实例执行命令失败
-8045 实例名无效或尚未收到实例消息
-8496 组中当前没有可执行的备库
-8497 实例的守护进程是local守护类型
-8456 未指定组名
-8455 未指定实例名
-8146 无效的组名
-8046 守护进程不是Startup或OPEN状态
-8371 守护进程不是Startup状态
-8062 实例的模式不匹配,预期为Standby模式
-8055 STOP守护进程组失败
-8058 Startup守护进程组失败
-8106 SWITCHOVER所用的实例是Primary模式
-8083 使用实例接管失败
-8078 实例状态不匹配
-8079 组中存在多个Primary实例,或不存在实例满足:1.实例是Primary&OPEN状态 2.守护进程是OPEN状态 3.实例状态(INST_OK)OK
-8344 实例不满足条件:1.实例是Standby&OPEN状态 2.守护进程是OPEN状态 3.实例归档状态为VALID
-8082 实例切换失败
-8089 实例不是MOUNT或SUSPEND状态,不允许OPEN
-8069 实例执行SQL语句失败
-8388 组中有活动Primary实例,不再查找可接管实例列表
-8099 修改所有实例归档为无效状态失败
-8100 组中存在多个OPEN状态的Primary实例
-8111 待切换实例归档不是有效状态
-8113 监视器操作冲突,终止操作
-8440 实例不是OPEN状态
-8439 守护进程不是OPEN状态
-8121 实例非Primary或Standby模式
-8123 守护进程状态不匹配,不是Startup、OPEN、SHUTDOWN或RECOVERY状态
-8441 守护进程状态为ERROR
-8125 实例故障,实例不是OK状态
-8126 实例的归档状态无效
-8137 检测到故障实例已恢复,重新修改实例为Standby&OPEN状态
-8148 系统组内没有或有多个活动Primary实例
-8435 组中没有活动Primary实例
-8149 内存分配失败
-8155 实例的MPPCTL文件更新失败
-8157 MPPCTL文件恢复失败
-8159 构造新的MPPCTL文件失败
-8163 通知实例更新MPPCTL文件失败
-8165 尚未收到组的MPPCTL消息或组中不存在活动的Primary实例
-8265 尚未收到任何组的MPPCTL消息
-8359 实例非Primary模式
-8178 实例OPEN失败
-8180 到守护进程的连接断开
-8182 根据实例名获取发送端口失败
-8183 MPP控制文件不一致
-8199 监视器尚未收到公钥信息,请稍候重试
-8201 监视器生成密钥对失败,请重试登录
-8203 守护进程不是Startup/OPEN/RECOVERY状态,或实例非OK状态,校验登录信息失败
-8220 守护进程不是Startup/OPEN/SHUTDOWN状态,不能修改参数
-8234 STOP所有守护进程组失败
-8236 Startup所有守护进程组失败
-8219 守护类型未知或是LOCAL守护类型(可使用show命令查看系统运行状态)
-8222 通知启动实例失败(启动实例的守护进程失败)
-8223 通知启动实例失败,实例已处于运行状态,或watch已配置自动重启,或watch的启动参数配置有误
-8229 实例SHUTDOWN失败
-8231 退出组中所有活动实例失败
-8238 启动所有组的实例失败
-8240 退出所有组的活动实例失败
-8257 组中所有实例均已处于SHUTDOWN状态
-8431 组中守护进程故障或实例故障,或尚未收到消息
-8272 STOP实例的守护进程失败
-8275 Startup实例的守护进程失败
-8277 守护进程不是Startup或SHUTDOWN状态
-8280 启动组中的所有实例失败
-8299/-8427 切换守护进程状态失败
-8311 切换守护进程为OPEN状态失败
-8309 修改实例实时归档为无效状态失败
-8368 请等待守护进程自动OPEN实例,不允许手动OPEN FORCE
-8333 不符合OPEN FORCE条件
-8424 守护进程配置不一致
-8340 通知守护进程增加CTL记录失败
-8360 组中已经存在Primary&OPEN状态的实例
-8387 守护类型未知或不是MPP主备环境,不支持此命令
-8425 非MPP主备环境,不支持配置多组
-8389 存在分裂实例,不允许执行命令
-8390 守护进程不是OPEN状态
-8458 守护进程不是OPEN或Startup状态
-8392 实例不是Standby&OPEN状态
-8459 实例不是Standby模式
-8460 实例不是OPEN或MOUNT状态
-8393 存在SLSN更大的活动实例,不允许接管
-8394 存在Primary & OPEN状态的实例,不允许接管
-8395 没有找到实例对应的Primary实例,不允许接管
-8396 被接管实例故障前不是Primary&OPEN,不允许接管
-8397 被接管实例的flsn大于接管用实例的slsn,不允许接管
-8398 守护进程故障前不是OPEN或RECOVERY状态,不允许接管
-8399 被接管实例仍然处于活动状态,不允许接管
-8420 被接管实例仍然处于活动状态,模式/状态或LSN值不符合接管条件
-8400 被接管实例故障前到接管用实例的归档状态无效,不允许接管
-8401 守护进程的控制文件不是有效状态
-8402 实例的OPEN记录不一致
-8403 存在SLSN更大的实例,不允许接管
-8404 没有收到守护进程的实例的OPEN记录消息,不允许接管
-8405 存在多个或没有Primary&OPEN状态的实例
-8419 未找到实例对应的Primary实例
-8406 备库对应的Primary实例不是Primary&OPEN状态
-8407 实例不是Primary&OPEN状态
-8408 实例的归档状态无效或MAL链路异常
-8416 组中存在多个Primary&OPEN状态的实例
-8428 设置DMWATCHER的MID命令执行失败
-8430 实例 [Standby, DW_TYPE:LOCAL]配置错误,被同时配置在多个实例,只允许配置在一个源实例上
-8454 存在多个守护进程控制文件有效的实例,且不可互相加入
-8436 实例发生分裂,需要用户干预
-8442 实例可作为Standby模式重加入,请等待守护进程自动处理
-8444 实例无法自动重加入,需要等实例恢复正常,或者用户干预
-8446 实例运行异常
-8445 尚未收到组的MPPCTL消息,请检查组中有活动的Primary实例,并且MPP_INI已配置,且存在有dmmpp.ctl文件
-8457 组中没有活动的守护进程或尚未收到消息
-8461 实例属于其他组,不在指定的组中
-8498 无效的参数名或者参数值
-8500 修改配置参数失败
-8503 修改组中实例对应的守护进程配置参数失败
-8504 监视器不支持监控不同守护类型的组,且只有MPP主备环境支持多组
-8505 组中不存在Primary&OPEN状态的实例或者有多个Primary实例或者Primary实例故障
-8506 没有找到实例对应的Primary实例
-8507 查找实例的归档信息失败
-8508 实例对应的Primary实例的守护进程不是STARTUP/OPEN/RECOVERY状态,不允许执行此命令
-8514 修改组中实例的恢复时间间隔失败
-8515 指定的恢复时间间隔非法,必须在3~86400(s)范围内
-8520 修改实例的归档为无效状态失败
-8521 实例是Primary模式,不允许执行此命令
-8522 组中存在多个Primary实例
-8523 组中当前没有活动的Primary实例
-8524 实例的归档信息没有找到
-8525 没有找到实例的源实例或尚未收到消息
-8528 不符合设置归档失效条件
-8529 实例对应的主库不唯一
-8530 不符合退出实例条件
-8532 将实例分离出守护进程组失败
-8533 不符合STARTUP守护进程组执行条件
-8534 不符合启动组中的所有实例条件
-8535 不符合STOP守护进程组条件
-8536 修改组中所有备库归档无效失败
-8538 修改所有组的所有备库归档无效失败
-8540 修改组中所有备库的恢复间隔失败
-8542 修改所有组的所有备库的恢复间隔失败
-8545 修改所有组守护进程配置参数失败
-8547 实例加回到守护进程组失败
-8551 实例状态正常,归档有效,在守护进程组中运行正常,不需要再重加入
-8552 实例当前不是运行状态,不符合执行条件
-8553 守护进程不是OPEN或RECOVERY状态
-8556 尚未收到组中主库实例的MPPCTL消息,请确保组中有活动的PRIMARY实例(PRIMARY实例的MPP_INI配置为1,且实例本地有dmmpp.ctl文件)
-8557 尚未收到任何组中主库实例的MPPCTL消息
-8562 守护进程组执行KILL INSTANCE命令失败
-8564 强杀所有组当前的活动实例失败
-8565 实例正在执行守护进程发起的命令,请稍候重试
-8567 切换守护进程状态失败
-8568 守护进程组中存在多个PRIMARY&OPEN状态的实例,不满足RECOVER条件
-8569 守护进程组中没有PRIMARY&OPEN状态的实例,不满足RECOVER条件
-8570 指定实例不在主库实例的归档目标中,不满足RECOVER条件
-8571 指定实例是PRIMARY模式,不满足RECOVER条件
-8573 实例的守护进程OPEN记录不是有效状态,命令执行失败
-8574 接收守护进程消息超时,无法检测指定实例是否可以自动OPEN
-8575 实例的模式不匹配,获取实例对应的主库信息失败
-8576 获取实例对应的主库信息失败(实例未收到过主库发送的归档信息)
-542 SUSPEND工作线程超时
-8617 实例的守护进程不是STARTUP/OPEN状态,不允许执行此命令。
-8618 当前无法比较LSN大小,存在交叉情况。
-8619 守护进程执行失败。
-8623 修改库中所有正常的守护进程配置参数失败。
-8624 在归档目标中未找到指定实例。
-8625 此命令不支持启动DSC集群,请等待CSS自动拉起或者通过DSC监视器手动拉起。
-8626 服务器当前有操作正在执行,需要等当前操作完成,请稍候再试!
-8627 库的控制节点尚未选出,请等待CSS自动处理!
-8631 DSC集群正在启动,或者正在执行故障处理或故障重加入,请等待DSC集群自动处理完成。
-8632 控制守护进程执行成功,从dmwatcher执行失败,不影响DSC集群使用。
-8633 修改组中主库的控制守护进程到备库的恢复时间间隔成功,从dmwatcher修改失败,不影响DSC集群使用。
-8634 DSC集群实例故障或者DSC集群不是DSC_OPEN状态, 操作终止。
-8635 主库实例的flsn不等于备库实例的flsn,命令执行失败。
-8636 待执行清理的源库实例的守护进程不是STARTUP/OPEN/RECOVERY状态,不允许执行此命令。
-8637 组中不存在活动主库。
-8638 获取集群的控制守护进程信息失败,请检查控制守护进程是否发生过变化并且已经启动。
-8639 系统中存在有未选出控制节点的库,需要先等控制节点选出,请稍候再试!
-8649 实例还未选出控制节点,请先等DSC集群选出控制节点。
-8650 实例的控制守护进程故障,无法判断是否可以自动OPEN。
-8651 实例已经处于OPEN状态,但是控制守护进程故障。
-8652 PRIMARY实例的守护进程不是STARTUP/OPEN/RECOVERY状态,不允许执行此命令
-8653 被接管实例故障前没有控制守护进程,或者从dmwatcher还处于活动状态
-8654 实例的守护进程正在进行中断处理,请稍候重试!
-8655 实例已经处于SHUTDOWN状态
-8656 主库到备库实例的归档仍然是有效状态,不允许执行此命令(需要先detach备库)
-8657 实例模式未知,不允许执行此命令
-8659 强杀实例失败
-8661 实例已经不是活动状态并且守护进程已处于SHUTDOWN状态
-8664 退出实例失败
-8667 启动实例失败
-8668 通知启动实例失败,实例已处于运行状态,或者被dmcss强制HALT,或者dmcss已配置自动重启,或者dmcss的启动参数配置有误
-8669 组中配置的LOCAL守护类型的库超过最大值,请减少LOCAL守护类型的库个数以避免出现异常
-8670 组中配置的GLOBAL守护类型的库超过最大值,请减少GLOBAL守护类型的库个数以避免出现异常
-8671 组中不存在DSC集群,不允许执行此命令
-8673 打开组中所有DSC节点的自动拉起功能失败
-8676 打开库中所有节点的自动拉起功能失败,请检查dmcss是否故障或者配置有自动拉起参数
-8679 关闭组中所有DSC节点的自动拉起功能失败
-8682 关闭库中所有节点的自动拉起功能失败
-8684 此命令需要转发dmcss执行,如果守护进程正常,请检查dmcss是否出现异常
-8685 守护进程接收监视器消息超时,命令执行信息已经被清理,操作终止
-8686 实例的守护进程配置有自动拉起,请等待守护进程将其自动拉起
-8687 DSC集群中存在有可以执行自动拉起的dmcss,请确保所有dmcss的自动拉起功能是打开状态,并等待dmcss将其自动拉起
-8688 实例所在DSC集群控制守护进程故障或该命令不能发送到普通守护进程上执行, 操作终止
-8689 dmmonitor.ini中存在有需要合并的MON_DW_IP配置项(属于同一个DMDSC集群),需要以“/”分隔开,修改完成后,需要重启监视器!
-8690 dmmonitor.ini中存在有不完整的MON_DW_IP配置项(需要配置DMDSC集群内所有守护进程的连接信息),以“/”分隔开,修改完成后,需要重启监视器!
-8691 指定库中的控制节点尚未选出!
-8047 DSC集群ckpt_lsn< max_redo_lsn,操作被限制,建议对DSC控制节点手动执行checkpoint系统函数主动推进检查点
-8699 守护进程到实例的连接断开,命令执行失败
-8700 守护进程到服务器链路断开,校验登录口令失败,请稍后重试
-8701 服务器公钥发生变化,请重新登录

10.2.8.2 守护进程

错误码 解释
-10194 存在有ep实例状态不一致,守护进程需要转入unify_ep状态统一各ep实例状态。
-10195 守护进程当前处于unify_ep状态或者login_check状态,需要等当前操作完成。
-10196 本地守护进程为LOCAL守护类型,可以将实例自动OPEN。
-10197 本地库不是Primary或Standby模式
-10201 主库或者被恢复备库校验日志失败
-10203 实例广播出来的dw_stat_flag值和预期值不匹配,当前操作已经被中断。
-10204 主库上未找到被恢复备库需要的归档日志
-10205 守护进程收到监视器命令, 但是本地server的dw_stat_flag标记值已经被设置,不允许执行监视器命令,返回错误给监视器。
-10209 通知本地主库由suspend状态重新open失败
-10211 检测到远程实例模式、状态不匹配,设置中断标记为TRUE,等待中断当前处理
-10212 控制节点出现故障
-10213 控制守护进程设置中断标记5s之后,dmserver当前操作还没有被中断掉,先返回错误code给监视器,避免监视器命令卡住。
-10214 备库和主库的PERMANENT_MAGIC不匹配
-10215 备库系统状态正在切换中
-10216 需要等待远程SUSPEND实例处理完成
-10217 本地主库或备库DSC集群ckpt_lsn<max_redo_lsn,操作被限制,建议对DSC控制节点手动执行checkpoint系统函数主动推进检查点
-10219 接收CSS消息超时
-10220 CSS执行操作冲突,CSS端当前的mid值和发起命令的监视器mid值不一致
-10221 到dmcss的连接断开
-10222 CSS执行失败
-10223 检测到CSS控制节点发生变化,命令中断执行
-10226 获取CSS控制节点通信端口失败,CSS控制节点尚未选出或CSS未启动
-10229 设置CSS的MID命令执行失败
-10230 通知CSS拉起本地EP失败
-10233 守护进程超时仍未等到EP STARTUP成功,命令执行失败
-10239 通知CSS退出所有EP失败
-10240 守护进程超时仍未等到组中的所有EP STOP或KILL成功,命令执行失败
-10242 通知CSS强制HALT所有EP失败
-10244 组中节点对应的CSS配置的自动拉起参数不匹配,不再通知CSS打开自动拉起功能,请检查是否需要修改配置
-10248 通知CSS打开节点的自动拉起功能失败
-10250 通知CSS关闭节点的自动拉起功能失败
-10251 OPEN实例时实时归档APPLY_LSN校验失败,设置所有归档失效
-10252 没有找到可以执行当前命令的活动CSS,可能CSS故障或者还未选出控制节点或者不符合执行条件
-10254 从CSS控制节点广播出来的信息中查找本地EP所属的DB组失败
-10255 在DB组中查找和当前CSS相同dcr_seqno的EP失败
-10256 MID已经被清理,当前命令执行失败
-10263 收到监视器执行sql语句的请求,但是守护进程状态不匹配,当前状态下不允许执行此操作
-10264 本地实例不可加入远程实例,强制shutdown本地实例
-10265 正在处理监视器命令,同一时刻只能处理一个监视器命令
-10266 正在执行监视器命令
-10267 没有监视器命令在执行
-10268 已收到相同报文序号的监视器命令
-10269 收到监视器命令,守护进程当前状态不允许执行监视器命令,返回错误

10.2.8.3 服务器

show arch info命令以及 dwmon_get_inst_arch_send_info接口中输出的服务器错误code说明。

守护进程通知恢复code
错误码 解释
0 恢复执行成功
100 未执行恢复操作
-10050 恢复失败,远程实例的模式或状态不匹配
服务器发送归档code
错误码 解释
0 发送成功
100 未执行发送操作或正在等待归档目标响应
-6018 消息长度超出网络发送消息缓存区
-6010 MAL连接丢失(源库到归档发送目标)
-6021 MAL链路已断开(源库到归档发送目标)
-517 系统处于状态切换中
-703 服务器模式不匹配
-518 无效的系统状态
-533 数据库的PERMANENT_MAGIC不匹配
-701 日志复制LSN值错误(归档目标收到的日志和本地日志不连续)
-503 服务器内存不足
-9512 MPP执行停止
-9513 MPP清理执行
-9504 MPP收到新的计划,终止当前执行
-715 (源库)归档日志不存在
-718 (源库)收集到的归档日志和起始LSN不连续
-721 守护进程发起的recover恢复操作被中断
-108 打开重做日志失败
-702 归档日志错,备库重做日志失败
-716 归档日志文件仅包含检查包
-730 归档日志缺失
-731 归档日志重叠
-732 包含多个数据库的归档日志
-733 包含多个DSC节点的归档日志
-6526 重演超时
-9713 数据库魔数校验失败
-737 备库上传重演未结束,需等待备库重演完成
-967 ARCH_SEND_DELAY未配置
-968 实例对应归档配置项未找到
-969 普通节点不支持该操作
-970 UNTIL TIME未配置
-971 ARHC_SEND_DELAY未配置
-6025 获取备库信息失败,请检查备库是否正常

10.2.8.4 DSC集群控制器(DMCSS)

错误码 解释
-1075 [CSS]: 没有找到指定组的信息
-1012 只有CSS控制节点能执行该操作
-1078 [CSS]: CSS监控处于关闭状态,不允许执行此命令
-1071 [CSS]: 正在操作的组中没有活动EP
-1098 [CSS]: 正在操作的组中没有非活动EP
-1059 [CSS]: 正在操作组和预期状态不一致
-1073 [CSS]: CSS对需要手动拉起的组已经配置有自动重启,请等待CSS自动检测重启
-1090 [CSS]: CSS没有对需要执行拉起的组配置重启参数
-1074 [CSS]: EP已经处于active状态
-1099 [CSS]: ASM组没有活动节点或者活动节点不是OPEN状态,或者ASM组不是OPEN状态,不允许启动DB组
-1091 [CSS]: 非法的EP序号
-1102 无效的组名
微信扫码
分享文档
扫一扫
联系客服