达梦数据库-重做日志文件(三)-自动化迁移脚本和检查 磁盘 I/O 性能建议
达梦数据库-重做日志文件(redo)(三)-自动化迁移脚本和检查 磁盘 I/O 性能建议
1.查看redo文件
SQL> select * from v$rlogfile;行号 GROUP_ID FILE_ID PATH CLIENT_PATH CREATE_TIME RLOG_SIZE MIN_EXEC_VER MIN_DCT_VER
---------- ----------- ----------- ----------------------------- ------------ -------------------------- -------------------- ------------ -----------
1 2 0 /dm8/data/DAMENG/DAMENG01.log DAMENG01.log 2025-08-26 14:26:59.000000 2147483648 V8.1.1.1 4
2 2 1 /dm8/data/DAMENG/DAMENG02.log DAMENG02.log 2025-08-26 14:26:59.000000 2147483648 V8.1.1.1 4已用时间: 2.813(毫秒). 执行号:1001.
- ✅ 自动化迁移达梦日志文件路径的 Shell 脚本
- ✅ 磁盘 I/O 性能优化建议(针对数据、日志、归档)
✅ 一、自动化迁移脚本(Shell)
📌 脚本功能:安全关闭数据库 → 迁移日志文件 → 修改配置 → 启动数据库
⚠️ 请根据你的实际路径调整变量
📄 migrate_dameng_log.sh
#!/bin/bash# ========================================
# 达梦数据库日志文件迁移脚本
# 作者:DBA
# 用途:将联机日志从原路径迁移到新路径
# ========================================# ====== 用户可配置区 ======
DM_HOME="/dm8"
DATA_DIR="/dm8/data/DAMENG"
INI_FILE="$DATA_DIR/dm.ini"
OLD_LOG_PATHS=("/dm8/data/DAMENG/DAMENG01.log""/dm8/data/DAMENG/DAMENG02.log"
)
NEW_REDO_DIR="/relog" # 新日志目录
NEW_LOG_PATHS=("$NEW_REDO_DIR/DAMENG01.log""$NEW_REDO_DIR/DAMENG02.log"
)
DM_SERVER="$DM_HOME/bin/dmserver"
SYS_USER="SYSDBA"
SYS_PWD="SYSDBA"
DB_PORT="5236"
# ==========================# 日志函数
log_info() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] INFO: $*"
}log_error() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $*" >&2
}# 检查是否为 root 或 dmdba
if [ "$(id -u)" -ne 0 ] && [ "$USER" != "dmdba" ]; thenlog_error "请以 dmdba 用户或 root 用户运行此脚本"exit 1
fi# 1. 关闭数据库
log_info "正在关闭数据库..."
disql $SYS_USER/$SYS_PWD@localhost:$DB_PORT << EOF
SHUTDOWN IMMEDIATE;
EXIT
EOFif [ $? -ne 0 ]; thenlog_error "数据库关闭失败,请手动检查"exit 1
fi
log_info "数据库已关闭"# 2. 创建新目录
log_info "创建新日志目录: $NEW_REDO_DIR"
mkdir -p "$NEW_REDO_DIR"
chown dmdba:dinstall "$NEW_REDO_DIR"
chmod 755 "$NEW_REDO_DIR"# 3. 复制日志文件
log_info "开始复制日志文件..."
for path in "${OLD_LOG_PATHS[@]}"; doif [ ! -f "$path" ]; thenlog_error "源文件不存在: $path"exit 1ficp "$path" "$NEW_REDO_DIR/"if [ $? -ne 0 ]; thenlog_error "复制文件失败: $path"exit 1fi
done
log_info "日志文件复制完成"# 4. 备份 dm.ini
log_info "备份 dm.ini 配置文件"
cp "$INI_FILE" "$INI_FILE.bak_$(date +%Y%m%d_%H%M%S)"
log_info "原配置已备份为: $INI_FILE.bak_..."# 5. 修改 dm.ini 中的 LOG_PATH
log_info "更新 dm.ini 中的 LOG_PATH"
# 使用 sed 替换 LOG_PATH 行
NEW_LOG_PATH_STR=$(IFS=,; echo "${NEW_LOG_PATHS[*]}")
sed -i "s|^LOG_PATH=.*|LOG_PATH=$NEW_LOG_PATH_STR|" "$INI_FILE"if grep -q "LOG_PATH=$NEW_LOG_PATH_STR" "$INI_FILE"; thenlog_info "dm.ini 更新成功"
elselog_error "dm.ini 更新失败,请手动检查"exit 1
fi# 6. 启动数据库
log_info "启动数据库服务..."
nohup $DM_SERVER $INI_FILE > $DATA_DIR/startup.log 2>&1 &
sleep 5# 检查进程是否启动
if pgrep -f "dmserver $INI_FILE" > /dev/null; thenlog_info "数据库启动成功"
elselog_error "数据库启动失败,请检查 $DATA_DIR/startup.log"exit 1
fi# 7. 验证迁移结果
log_info "正在验证迁移结果..."
sleep 10
disql $SYS_USER/$SYS_PWD@localhost:$DB_PORT << EOF | grep -q "SUCCESS"
set heading off;
SELECT 'SUCCESS' FROM DUAL WHERE EXISTS (SELECT 1 FROM V\$RLOGFILE WHERE PATH LIKE '$NEW_REDO_DIR%'
);
exit
EOFif [ $? -eq 0 ]; thenlog_info "✅ 日志文件迁移成功!新路径: $NEW_REDO_DIR"log_info "💡 建议:确认运行稳定后,可删除原日志文件以释放空间"
elselog_error "❌ 验证失败!请检查数据库状态和配置"exit 1
fi# 结束
log_info "脚本执行完成"
🛠️ 使用方法
# 1. 保存脚本
vim migrate_dameng_log.sh# 2. 授予执行权限
chmod +x migrate_dameng_log.sh# 3. 以 dmdba 或 root 运行
sudo -u dmdba ./migrate_dameng_log.sh
✅ 脚本会自动备份
dm.ini
,失败可恢复。
✅ 二、磁盘 I/O 性能优化建议
为了最大化达梦数据库性能,建议将不同类型的文件放在 独立的物理磁盘 上:
文件类型 | 推荐磁盘 | 建议 |
---|---|---|
联机日志(Redo Log) | sdb (SSD) | 高速顺序写,必须低延迟 |
数据文件(.DBF) | sdc (SSD 或 SAS) | 随机读写,高吞吐 |
归档日志(ARCH) | sdd (大容量 SATA) | 大文件顺序写,空间优先 |
临时表空间(TEMP) | sde (SSD) | 排序、哈希操作频繁 |
备份文件 | sdf (NAS 或磁带) | 独立,避免影响生产 |
📊 推荐磁盘布局示例
挂载点 | 用途 | 磁盘类型 | 备注 |
---|---|---|---|
/relog | 联机日志 | SSD | /dev/sdb1 |
/data | 数据文件 | SSD/SAS | /dev/sdc1 |
/arch | 归档日志 | SATA | /dev/sdd1 |
/temp | 临时文件 | SSD | /dev/sde1 |
/backup | 备份 | NAS | /dev/sdf1 或 NFS |
🔍 I/O 性能检查命令
1. 查看磁盘使用率
df -h /relog /data /arch
2. 查看 I/O 负载
iostat -x 1 5
关注:
%util
> 80% 表示磁盘过载await
> 10ms 表示响应慢
3. 测试磁盘写性能(模拟日志写入)
# 测试 /relog 写性能(2GB 文件)
dd if=/dev/zero of=/relog/test.log bs=4k count=524288 oflag=direct
rm /relog/test.log
理想速度:SSD > 100MB/s
4. 查看达梦 I/O 等待
-- 查看等待事件
SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME LIKE '%I/O%';
✅ 最佳实践总结
项目 | 建议 |
---|---|
🔄 日志路径 | 迁移到独立 SSD(/relog ) |
💾 归档路径 | 独立大容量磁盘(/arch ) |
🧩 多数据文件 | 按表空间分布到不同磁盘 |
📈 监控 | 使用 iostat , vmstat 定期检查 |
🔐 权限 | 所有目录属主为 dmdba:dinstall |
🎯 结语
你现在拥有:
✅ 自动化脚本:一键迁移日志路径,安全可靠
✅ I/O 优化方案:实现性能最大化与故障隔离
🚀 建议在维护窗口执行迁移,并配合监控工具(如 Zabbix、Prometheus)持续观察 I/O 表现。