附录

10.1 系统视图

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

1.V$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
15 RREC_TYPE VARCHAR(64) 当前重演的物理记录类型。取值如下:RTYPE_FILE_EXTEND:文件扩展;RTYPE_FILE_CREATE:文件创建;RTYPE_NONE:没有文件相关动作

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 值
19 LLOG_FIRST_TIME DATETIME(6) 归档文件中包含的第一条逻辑日志的生成时间,仅在开启逻辑日志时有效
20 LLOG_LAST_TIME DATETIME(6) 归档文件中包含的最后一条逻辑日志的生成时间,仅在开启逻辑日志时有效

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 性能模式,是否等待重演完成,对应 dmarch.ini 中的 ARCH_WAIT_APPLY 配置值。取值 0:高性能模式, 1:数据一致模式。本地归档取值 NULL
10 ARCH_INCOMING_PATH VARCHAR(256) 对 REMOTE 归档,表示远程节点发送过来的归档在本地的保存目录;其余类型归档显示 NULL
11 ARCH_CURR_DEST VARCHAR(256) 当前归档目标实例名,如果备库是 DMDSC 集群,则归档目标是备库控制节点,该字段表示当前被选定为归档目标的节点实例名。备库是单机的情况下,就是指的备库实例名。
12 ARCH_FLUSH_BUF_SIZE INTEGER 归档合并刷盘缓存大小,单位 MB,取值范围 0~128。缺省为 0,表示不使用归档合并刷盘
13 ARCH_RESERVE_TIME INTEGER 归档日志保留时间,单位分钟。只对远程归档和本地归档有效。服务器每隔 5 分钟检查是否存在超过保留时间的归档并删除。缺省为 0,表示不删除归档。
14 ARCH_LOCAL_SHARE INTEGER DMDSC 集群本地归档是否共享给远程节点作为远程归档。0 表示不共享,1 表示共享,缺省值为 0。此参数值在 DMDSC 集群各个节点的配置文件中需保持一致。配置为 1 时,本地归档路径和远程归档路径需配置在 ASM 或共享磁盘上,并且 dmarch.ini 中 ARCH_INCOMING_PATH 为对应节点的本地归档路径;配置为 0 时,REMOTE 归档路径,与对应节点 LOCAL 归档路径不能指向共享存储的同一个目录
15 ARCH_LOCAL_SHARE_CHECK INTEGER 是否进行 LOCAL 归档和 REMOTE 归档路径校验,缺省值等于 ARCH_LOCAL_SHARE,且只在 ARCH_LOCAL_SHARE 值为 1 时该参数才有意义。此参数值在 DMDSC 集群各个节点的配置文件中需保持一致。配置为 1 时,会进行 LOCAL 归档和 REMOTE 归档路径的一致性校验;配置为 0 时,不进行 LOCAL 归档和 REMOTE 归档的一致性校验,由用户自己保证归档配置的正确性。
16 ARCH_SEND_DELAY INTEGER 源库到异步备库的归档延时发送时间,单位为分钟,取值范围 0~1440。缺省为 0,表示不启用归档延时发送功能
17 ARCH_DEST_IP VARCHAR(64) 归档目标 IP(该字段对数据守护集群没有意义)
18 ARCH_DEST_PORT INTEGER 归档目标端口(该字段对数据守护集群没有意义)
19 ARCH_DEST_ID INTEGER 归档目标多副本节点编号,用于标识多副本 RAFT 组中不同的节点(该字段对数据守护集群没有意义)
20 ARCH_ASM_MIRROR SMALLINT 归档文件配置在 DMASM 上的镜像类型,DMASM 镜像专用,取值:1:单副本,表示外部冗余,不提供任何镜像,假设磁盘高度可靠;2:双副本,表示正常冗余,提供双向镜像,可较好的保证数据完整性;3:三副本,表示高度冗余,提供三向镜像,能够更好的保证数据的完整性。未配置显示 NULL
21 ARCH_ASM_STRIPING SMALLINT 归档文件配置在 DMASM 上的条带化粒度,DMASM 镜像专用,取值 0 表示粗粒度,32/64/128/256 表示细粒度条带化大小,单位 KB。未配置显示 NULL
22 ARCH_RECOVER_TIME INTEGER 主库向归档状态为 Invalid 的同步备库发起异步恢复的时间间隔,单位为秒,取值范围 1~86400,缺省为 1,表示主库每隔 1 秒检查一次是否存在归档状态为 Invalid 的同步备库,若存在并且通信正常,则向该备库发起异步恢复

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 恢复动作,则只有控制节点上会有最新的归档发送信息,如果主库在向备库正常同步数据,则凡是有日志生成并发送的节点上都可以查询到最新的归档发送信息。

主备异步恢复失败时,可以通过 LAST_SEND_CODE、LAST_SEND_DESC 查看最近一次的恢复失败原因。

主库执行异步恢复过程中,可以通过 TOTAL_ASYNC_TIME、TOTAL_ASYNC_RPKG 计算平均每个日志包的同步耗时(单位为毫秒),根据主库已刷盘的日志包序号和备库已重演的日志包序号可以估算剩余待同步的日志量所需耗时。

序号 数据类型 说明
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 次发送的耗时(微秒)
23 LAST_SEND_CODE INTEGER 最近一次日志发送错误码
24 LAST_SEND_DESC VARCHAR(1024) 最近一次日志发送失败的错误信息
25 TOTAL_ASYNC_RPKG BIGINT 主库在异步恢复过程中,到 ARCH_DEST 累计已同步的日志包个数,每次启动异步恢复时重新进行计数
26 TOTAL_ASYNC_TIME BIGINT 主库在异步恢复过程中,到 ARCH_DEST 已同步日志的累计耗时(毫秒),每次启动异步恢复时重新进行计数

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 是否为主库生成的日志。1:是 0:否。备库上需要进行填充的日志包一定不是来自主库的。所以在备库模式下,当 PKG_STAT 字段值为 0 或 1 时,FROM_PRIMARY 值一定为 0;只有当 PKG_STAT 字段为 2 时,FROM_PRIMARY 值才可能为 1。
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 PKG_STAT INTEGER 日志包状态,0 表示正在填充的串行包,1 表示正在填充的并行包,2 表示已填充完成待刷盘的日志包

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 下一个全局日志包序号
13 PKG_AVG_PLL INTEGER 日志包的平均并行度
14 N_FLUSH_LST INTEGER 待刷盘的日志包个数

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 相对应

22.V$DMMONITOR

查询当前登录实例上记录的监视器的相关信息,仅会打印有效的监视器连接信息。

序号 数据类型 说明
1 DW_CONN_TIME VARCHAR(32) 监视器与守护进程连接建立的时间
2 MON_CONFIRM VARCHAR(8) 是否是确认监视器
3 MID BIGINT 监视器 MID,监视器系统的唯一标识
4 MON_ID INTEGER 监视器在监视器系统中的 ID,仅对多实例监视器有意义
5 MON_TERM BIGINT 监视器在监视器系统中的任期号,仅对多实例监视器有意义
6 MON_IP VARCHAR(64) 监视器 IP
7 MON_VERSION VARCHAR(128) 监视器版本号

特殊说明:

  1. 多实例监视器配置环境下,仅打印 Leader 信息。
  2. 在多实例监视器配置环境下,如果查到多行,其中只有一行是多实例监视器的 Leader;其余信息是另外启动的非确认监视器,不属于多实例监视器集群。

23.V$RLOG_FREE_LIST

显示日志空闲链表中的空闲日志包信息。

对于主库或 NORMAL 模式的库,如果开启了 RLOG_PARALLEL_ENABLE,则会显示每路并行日志的空闲链表信息,显示行数为 WORKER_THREADS + 1,否则只显示 1 行。

其中 RLOG_BUF_SIZE 和 RLOG_POOL_SIZE 会结合日志并行信息、工作线程个数等因素再进行调整,不一定是 dm.ini 中的配置大小。

日志包内存分配关系说明如下:

(1)默认日志包大小 = RLOG_BUF_SIZE * 512 字节。

(2)FREE_RPKG_LEN = FREE_RPKG_CNT * 默认日志包大小,代表已分配但未使用的空闲空间。

(3)FREE_RPKG_LEN 一定不会超过 RLOG_POOL_SIZE 大小。

(4)已分配出的默认大小的日志包内存空间 = N_ALLOC_PAGE * 512 字节,此空间大小大于等于 FREE_RPKG_LEN,但不会超过 RLOG_POOL_SIZE 大小。

序号 数据类型 说明
1 RLOG_BUF_SIZE INTEGER 单个日志缓冲区大小(以日志页个数为单位)
2 RLOG_POOL_SIZE BIGINT 最大日志缓冲区大小,单位字节
3 N_ALLOC_PAGE INTEGER 空闲链表中已分配出的日志页个数
4 FREE_RPKG_CNT INTEGER 空闲链表中存放的日志包个数
5 FREE_RPKG_LEN BIGINT 空闲链表中存放的日志包总大小,单位字节

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 时,表示指定备库不需要有时间间隔限制,满足恢复条件后,主库的守护进程就会启动恢复流程,详细说明可参考 3.1.9 故障恢复处理

返回值:

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_database(

	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_takeover(
    mhandle         mhdle,
    mschar*         group_name,
    mschar*         db_name
);

功能说明:

获取可以接管为主库的备库信息,在主库发生故障时,可以通过调用此接口查找可以接管为新的主库的备库实例,其中包括正常接管和强制接管,通过输入参数 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_database 接口完成。

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

参数说明:

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

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

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

返回值:

0:执行成功。

<0:执行失败。

73.dwmon_attach_database

函数原型:

DWMON_RETURN
dwmon_attach_database(
	mhandle mhdle,
	mschar* group_name,
	mschar* db_name
);

功能说明:

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

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

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

参数说明:

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

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

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

返回值:

0:执行成功。

<0:执行失败。

74.dwmon_get_source_database_name

函数原型:

DWMON_RETURN

dwmon_get_source_database_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_database_name 和 dwmon_get_database_ep_info 这两个接口来完成。

首先用 dwmon_get_source_database_name 获取到源库名称,再通过 dwmon_get_database_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_STAT 获取。

参数说明:

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_STAT 获取。

参数说明:

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 置空,避免重复执行 dwmon_free_handle 引发异常。推荐使用 dwmon_free_handle_low 释放句柄。

参数说明:

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,
    mbool*		   apply_over

功能说明:

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

参数说明:

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

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

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

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

apply_over:输出参数,表示异步备库是否已重演到指定的 until_time 时间点, 0:否,1:是。

返回值:

0:执行成功。

<0:执行失败。

91.dwmon_free_handle_low

函数原型:

DWMON_RETURN
dwmon_free_handle_low(
  Mhandle*     mhdle
);

功能说明:

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

参数说明:

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

返回值:

0:执行成功。

<0:执行失败。

92.dwmon_get_takeover_time_by_group_name

函数原型:

DWMON_RETURN
dwmon_get_takeover_time_by_group_name(
   mhandle     mhdle,
   mschar*     group_name,
   muint4*     remain_time,
   mschar*     inst_name
);

功能说明:

获取指定组的自动接管时间。

参数说明:

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

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

remain_time:输出参数,自动接管时间。

inst_name:输出参数,接管实例名。

返回值:

0:执行成功。

<0:执行失败。

93. dwmon_get_database_apply_wait

函数原型:

DWMON_RETURN
dwmon_get_database_apply_wait(
     mhandle     mhdle,
     mschar*     group_name,
     mschar4*    db_name,
	 mbool;*     apply_wait
);

功能说明:

获取监视器所获取指定备库的 APPLY_WAIT 标记,标记用于表示备库是否是事务一致的。

参数说明:

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

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

db_name:输入参数,备库名。

apply_wait:输出参数,备库名。

返回值:

0:执行成功。

<0:执行失败。

94. dwmon_login_wallet

函数原型:

DWMON_RETURN
dwmon_login_wallet(
  mhandle     mhdle,
  mschar*     service_name
);

功能说明:

使用 wallet 方式登录监视器。使用此接口前需要用户先使用 dmmkstore 工具创建好 wallet 文件,配置服务名及对应的用户名和口令,将该文件拷贝到监视器所在的机器上,然后将 MON_WALLET_LOCATION 参数指定为 wallet 文件所在路径。这里的用户名及口令和服务器的登录口令是一致的,且必须有 DBA 权限。

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

参数说明:

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

service_name:输入参数,服务名,最长可为 128 字节,超长则接口执行失败。

返回值:

0:执行成功。

<0:执行失败。

95.dwmon_get_database_sync_arch_info

函数原型:

DWMON_RETURN
dwmon_get_database_sync_arch_info(
    mhandle         mhdle,
    mschar*         group_name,
    mschar*         db_name,
    muint4*         n_sync,
    mschar**        sync_dest,
    mschar**        sync_mal_sta,
    mschar**        sync_arch_sta
);

功能说明:

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

参数说明:

sync_dest、sync_mal_sta、sync_arch_sta:都为字符串指针数组类型,它们的数组长度是 n_sync 的输入值,建议 n_sync 的输入值不小于 8,避免取不到完整信息。由于 SYNC 归档与 DSC 不能兼容,所以目前 sync_dest 数组中每个指针元素指向的缓存长度最小可以为 65,sync_mal_sta 和 sync_arch_sta 中每个指针元素指向的缓存长度也不能小于 65。

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

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

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

n_sync:输入输出参数,传入要获取信息的同步归档个数,传出实际获取到的同步归

返回值:

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~86400 或 0,设置为 0 时,表示指定备库不需要有时间间隔限制,满足恢复条件后,主库的守护进程就会启动恢复流程,详细说明可参考[3.1.9 故障恢复处理](#3.1.9 故障恢复处理)。

返回值:

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_STAT 获取。

参数说明:

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_STAT 获取。

参数说明:

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:执行失败。

91. dwmon_get_group_takeover_time

函数原型:

DwMonTkovtime
dwmon_get_group_takeover_time(
   String group_name
);

功能说明:

获取指定组的自动接管时间。

参数说明:

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

返回值:

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

0:执行成功。

<0:执行失败。

92. dwmon_get_database_apply_wait

函数原型:

DwMonApplywait
dwmon_get_group_takeover_time(
   String group_name,
   String db_name,
);

功能说明:

获取指定备库的 apply_wait 标记,标记用于表示备库是否是事务一致的。

参数说明:

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

db_name:输入参数,备库名。

返回值:

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

0:执行成功。

<0:执行失败。

93. dwmon_login_wallet

函数原型:

int 
dwmon_login_wallet(
	String      service_name
);

功能说明:

使用 wallet 方式登录监视器。使用此接口前需要用户先使用 dmmkstore 工具创建好 wallet 文件,配置服务名及对应的用户名和口令,将该文件拷贝到监视器所在的机器上,然后将 MON_WALLET_LOCATION 参数指定为 wallet 文件所在路径。这里的用户名及口令和服务器的登录口令是一致的,且必须有 DBA 权限。

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

参数说明:

service_name: 输入参数,服务名,最长可为 128 字节,超长则接口执行失败。

返回值:

0:执行成功。

<0:执行失败。

**94. **dwmon_get_database_sync_arch_info

函数原型:

DwMonSyncInfo 
dwmon_get_database_sync_arch_info(
	String 			group_name, 
	String 			db_name
);

功能说明:

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

参数说明:

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

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

返回值:

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

0:执行成功,可通过 DwMonSyncInfo 的其他对象成员获取相关归档信息。

<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_8.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 无效的组名
微信扫码
分享文档
扫一扫
联系客服