当前位置: 首页 > news >正文

达梦数据库-重做日志文件(三)-自动化迁移脚本和检查 磁盘 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.
  1. 自动化迁移达梦日志文件路径的 Shell 脚本
  2. 磁盘 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 表现。

http://www.dtcms.com/a/354923.html

相关文章:

  • 详细介绍Linux 内存管理 匿名页面和page cache页面有什么区别?
  • Mybatis 与 Springboot 集成过程详解
  • vue有哪些优缺点
  • 前端实现Linux查询平台:打造高效运维工作流
  • 从图卷积网络(GCN)到简化图卷积网络(SGC)的对话
  • RAG系统深度优化全攻略:从理论到实践的高性能实现
  • 【C语言16天强化训练】从基础入门到进阶:Day 14
  • NVFP4量化技术深度解析:4位精度下实现2.3倍推理加速
  • 内网对抗-红日靶场4通关详解
  • 财务数据报销画像技术实现:从数据采集到智能决策的全流程解析
  • 2025docker快速部署Nginx UI可视化管理平台
  • Unity3d使用SerialPortUtilityPro读取串口数据
  • Linux(一) | 初识Linux与目录管理基础命令掌握
  • Libvio 访问异常排查指南
  • 2021/07 JLPT听力原文 问题一 2番
  • 【python】@staticmethod装饰器
  • nginx 配置文件初识全局块、events、http、server、location 的层级关系
  • SDK、JDK、JRE、JVM的区别
  • JSON 快速上手:语法解析与应用实例
  • 【VSCode】使用VSCode打开md文件以及转化为PDF
  • 打工人日报#20250828
  • HTTP 分块传输编码:深度解析与报文精髓
  • 第21节:环境贴图与PBR材质升级——构建电影级真实感渲染
  • Java 实现HTML转Word:从HTML文件与字符串到可编辑Word文档
  • 腕上智慧健康管家:华为WATCH 5与小艺的智美生活新范式
  • 使用EasyExcel实现Excel单元格保护:自由锁定表头和数据行
  • mac电脑双屏显示时程序坞跑到副屏的解决方法
  • 吱吱企业通讯软件以安全为基,搭建高效的通讯办公平台
  • ckman部署的clickhouse,节点迁移
  • 微算法科技(NASDAQ:MLGO)推出创新型混合区块链共识算法,助力物联网多接入边缘计算