达梦守护集群主库处于mount状态问题处理

主库mount状态恢复:DMDBA运维日记
本文记录了在虚拟机上搭建的DW环境中,主库被挂起后次日发现处于mount状态的问题。通过启动dmwatcher、检查端口和日志,作者逐步解决主库连接问题并成功将其打开,备库也同步更新为standby状态。

主库处于mount状态问题

在虚拟机新搭建的dw环境,测试正常后,挂起虚拟机,关闭crt工具下班,第二天回来后发现守护失败:主库处于mount状态,dmwatcher守护进程不能将主库open。
查询主库状态
SQL> select instance_name,host_name,status,mode,mode,mode,oguid from v$instance;

行号 INSTANCE_NAME HOST_NAME STATUS$ MODE$ OGUID


1 DMDW1 dw1 MOUNT PRIMARY 453331

已用时间: 4.625(毫秒). 执行号:1.

于是想到需要启动dmwatcher守护进程,在主库上启动守护进程
[dmdba@dw1 ~]$ dmwatcher /opt/dmdbms/data/lzdm/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY

再次查看主库的状态,主库仍然处于mount状态,
查看主库的dmwatcher日志
[dmdba@dw1 log]$ tail -0f dm_dmwatcher_DMDW1_202110.log
2021-10-13 20:36:48.940 [INFO] dmwatcher P0000020612 T0000139923596203840 dw2_conn_mgr_thread create, connect ip:10.228.10.16, port:5536, from_flag:0
2021-10-13 20:36:48.941 [INFO] dmwatcher P0000020612 T0000139923596203840 DMWATCHER[4.0] group(GRP1) initialized succeed.
GUID(7EF96A5E7EF96A5E26F9D02F7841ABD7)
2021-10-13 20:36:48.977 [INFO] dmwatcher P0000020612 T0000139923596203840 DMWATCHER[4.0] IS READY
2021-10-13 20:36:49.947 [INFO] dmwatcher P0000020612 T0000139923485456128 dw2_send_port_set to dmserver vio(3) set, mid(-1), to name:DMDW1, ip:127.0.0.1
2021-10-13 20:36:49.950 [ERROR] dmwatcher P0000020612 T0000000000000020617 Can’t connect to DM server on ‘10.228.10.16’ port(5536) errno(111)
2021-10-13 20:36:49.950 [INFO] dmwatcher P0000020612 T0000139923477034752 dw2_group_process_svr_info_low, receive ep(seqno:0, master:0, n_ok:0) message, change ep(DMDW1) status from ERROR to OK.
2021-10-13 20:36:49.952 [INFO] dmwatcher P0000020612 T0000139923477034752 Local db apply info changed, old info[p_db_magic:0, n_apply_ep:0], new info to set[p_db_magic:330004170, n_apply_ep:0]!
2021-10-13 20:36:49.952 [INFO] dmwatcher P0000020612 T0000139923477034752 dw2_process_ohis_info, n_ohis changed from 0 to 7, from_ep:DMDW1, ep_seqno:0, hpc_master:0
2021-10-13 20:36:49.953 [INFO] dmwatcher P0000020612 T0000139923477034752 dw2_process_ohis_info local apply info, p_db_magic:330004170, n_apply_ep:0, n_fill_ep:1 pkg_seq_arr:[4742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], apply_lsn_arr:[37833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]!
2021-10-13 20:36:49.953 [INFO] dmwatcher P0000020612 T0000139923477034752 服务器端(DMDW1)公钥发生变化,广播新值给监视器

从日志可以看到一条错误信息,主库链接不到备库的5536端口
测试端口的情况:
从主库链接备库的5536端口:
[dmdba@dw1 log]$ telnet 192.168.3.16 5536
Trying 192.168.3.16…
telnet: connect to address 192.168.3.16: Connection refused

链接端口失败
检查备库上端口是否开启:
[dmdba@dw2 lzdm]$ lsof -i:5536
备库上5536为开启,同样检查主库上的5536是否开启,由那个进程开启
[dmdba@dw1 log]$ lsof -i:5536
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dmwatcher 21412 dmdba 4u IPv6 422116 0t0 TCP *:5536 (LISTEN)
从查询结果看出,5536是由dmwatcher进程开启,于是想到备库的dmwatcher进程未启动,在备库上启动dmwatcher进程
在备库上启守护进程
[dmdba@dw2 ~]$ dmwatcher /opt/dmdbms/data/lzdm/dmwatcher.ini

再次查看主库状态

主库:
SQL> select instance_name,host_name,status,mode,mode,mode,oguid from v$instance;

行号 INSTANCE_NAME HOST_NAME STATUS$ MODE$ OGUID


1 DMDW1 dw1 OPEN PRIMARY 453331

备库:
SQL> select instance_name,host_name,status,mode,mode,mode,oguid from v$instance;

行号 INSTANCE_NAME HOST_NAME STATUS$ MODE$ OGUID


1 DMDW2 dw2 OPEN STANDBY 453331

已用时间: 6.374(毫秒). 执行号:400.

更多资讯请上达梦技术社区了解:https://eco.dameng.com

<think>根据用户的问题和提供的引用,用户在执行SQL时遇到达梦数据库处于MOUNT状态问题MOUNT状态是数据的一种运行状态,此时数据可以读取控制文件,但无法对数据文件进行读写操作,因此无法执行SQL语句(如查询、更新等)。下面将结合引用内容,详细说明解决方法。 ### 问题原因分析 1. **数据状态**:达梦数据库有多个状态,包括: - `MOUNT`:数据已装载,但未打开,只能读取控制文件,不能访问数据文件。 - `OPEN`:数据已打开,可以正常读写数据文件。 - `SUSPEND`:挂起状态,暂停I/O操作。 - 其他状态(如关闭、启动中等)。 2. **常见触发场景**: - 数据异常关闭或崩溃后重启。 - 服务器硬件改动(如增加内存)后重启[^1]。 - 群环境中守护失败[^2]。 - 首次初始化后未正常启动退出即尝试MOUNT方式启动[^3]。 --- ### 解决方案 #### 方法一:通过图形化工具转换状态(推荐) 1. 打开达梦数据库管理工具(DM Management Tool)。 2. 连接目标数据(使用SYSDBA账号)。 3. 在左侧对象树中右键点击数据实例,选择**管理服务器**。 4. 在弹出窗口中选择**系统管理** -> **打开**。 5. 点击**转换**按钮,将状态从`MOUNT`改为`OPEN`。 6. 刷新左侧目录树,确认数据对象可见[^1]。 #### 方法二:通过命令行(DISQL)转换状态 1. 使用DISQL连接数据: ```bash cd /opt/dmdbms/bin # 进入达梦安装目录 ./disql SYSDBA/SYSDBA@localhost:5236 ``` 2. 执行状态转换命令: ```sql -- 将数据MOUNT状态切换到OPEN状态 ALTER DATABASE OPEN; ``` 3. 验证状态: ```sql SELECT name, status$, role$ FROM v$database; -- 查看数据状态 SELECT instance_name, status, mode FROM v$instance; -- 查看实例状态[^4] ``` **预期输出**: - `status$` 应为 `4`(OPEN状态)[^4]。 - `mode` 应为 `PRIMARY`()或 `STANDBY`()。 #### 方法三:检查守护进程(群场景) 若为群环境(如DataWatch),需确保: 1. **状态**: ```sql SELECT name, status$, role$ FROM v$database; ``` - `role$=1` 表示,`status$` 应为 `4`(OPEN)[^5]。 2. **守护进程状态**: - 检查`dmwatcher`进程是否正常运行: ```bash ps -ef | grep dmwatcher ``` - 若守护进程异常,重启守护服务: ```bash systemctl restart DmWatcherService ``` 3. **手动修复状态**: ```sql ALTER DATABASE OPEN; -- 执行 ``` --- ### 状态转换规则说明 | 操作 | 命令 | 适用场景 | |------|------|----------| | 关闭 → MOUNT | `ALTER DATABASE MOUNT;` | 需修改配置文件或执行恢复操作 | | MOUNT → OPEN | `ALTER DATABASE OPEN;` | 正常业务运行 | | OPEN → SUSPEND | `ALTER DATABASE SUSPEND;` | 暂停I/O(如份) | | SUSPEND → OPEN | `ALTER DATABASE RESUME;` | 恢复业务 | > ⚠️ **注意**: > - 新初始化的数据**必须**先正常启动(`OPEN`)一次,才能使用`MOUNT`方式启动[^3]。 > - 切换需在`MOUNT`状态下执行`ALTER DATABASE PRIMARY`/`STANDBY`[^3]。 --- ### 预防措施 1. **定期检查数据状态**: ```sql SELECT name, status$, role$ FROM v$database; ``` 2. **配置监控告警**:对`status$`非`4`(OPEN)状态触发报警。 3. **避免异常关机**:服务器重启前先关闭数据服务: ```bash systemctl stop DmServiceDMSERVER ``` --- ### 常见错误排查 | 错误现象 | 解决方案 | |----------|----------| | `ALTER DATABASE OPEN` 失败 | 检查日志`/opt/dmdbms/log/dm_xxx.log`,确认是否有数据文件损坏 | | 状态不同步 | 重启守护进程,或使用`dmmonitor`工具修复 | | 权限不足 | 使用SYSDBA账号执行状态转换 | > 💡 **提示**:若转换状态失败,请联系达梦技术支持提供日志分析。 --- §§相关问题§§ 1. 如何监控达梦数据库的运行状态? 2. 达梦数据库切换的操作步骤是什么? 3. 达梦数据库数据文件损坏如何修复?</think>### 达梦数据库处于 MOUNT 状态的解决方法 当达梦数据库处于 MOUNT 状态时,数据可以读取控制文件但无法执行 SQL 操作(如查询、更新等)。以下是三种解决方案: --- #### 一、图形化界面操作(推荐) 1. **连接数据** 打开达梦管理工具 → 使用 SYSDBA 账号连接数据 2. **转换数据状态** - 右键数据实例 → 选择"管理服务器" - 在"系统管理"选项卡 → 点击"打开"按钮 - 点击"转换"按钮 → 状态变为 OPEN - 刷新左侧目录树即可看到数据对象[^1] ![图形化操作流程](https://example.com/dm-gui.png) *(示意图:状态转换按钮位置)* --- #### 二、命令行解决方案 ```sql -- 1. 使用DISQL连接数据 ./disql SYSDBA/your_password@localhost:5236 -- 2. 检查当前状态(确认是否为MOUNT) SELECT name, status$, role$ FROM v$database; /* 正常输出应为: NAME STATUS$ ROLE$ ------ -------- ------ DMDB 4 1 -- STATUS$=4表示OPEN状态 */ -- 3. 转换到OPEN状态 ALTER DATABASE OPEN; -- 4. 验证状态转换 SELECT name, status$ FROM v$database; -- 当status$=4表示成功[^4] ``` --- #### 三、守护群特殊处理环境) 当异常处于 MOUNT 状态时: ```sql -- 1. 检查状态 SELECT instance_name, status, mode, oguid FROM v$instance; -- 2. 停止守护进程 systemctl stop DmWatcherService -- 3. 强制打开 ALTER DATABASE OPEN FORCE; -- 4. 重启守护进程 systemctl start DmWatcherService[^2][^5] ``` --- ### 关键概念说明 | **状态** | **描述** | **允许操作** | |----------|----------|--------------| | **MOUNT** | 装载状态 | 读取配置文件,禁止数据读写 | | **OPEN** | 打开状态 | 允许所有SQL操作 | | **SUSPEND** | 挂起状态 | 暂停I/O操作 | > ⚠️ **重要提示**: > 1. 新初始化的**必须**先正常启动退出,才能使用 MOUNT 方式启动[^3] > 2. 状态转换命令只能在 SYSDBA 用户下执行 > 3. 环境中操作前需停止守护进程[^2] --- ### 预防措施 1. **服务自启配置** 在`/etc/rc.local`添加: ```bash systemctl start DmServiceDMSERVER systemctl start DmWatcherService # 群环境需要 ``` 2. **状态监控脚本** ```sql #!/bin/bash status=$(echo "SELECT status$ FROM v$database;" | ./disql -s) [ $status -ne 4 ] && echo "ALERT: Database not OPEN!" | mail -s "DM Status Alert" admin@example.com ``` 3. **配置参数优化** 在`dm.ini`中增加: ```ini AUTO_OPEN = 1 # 启动时自动OPEN CHECK_DB_OPEN = 60 # 每分钟检查状态 ``` > 💡 通过`SELECT * FROM V$DM_INI WHERE PARA_NAME LIKE '%OPEN%';`可查看相关参数[^4] ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值