1. 首页 > 国产数据库教程 > 达梦DM教程 > 正文

DM教程FG081-达梦数据库日常巡检与健康检查

本文档详细介绍DM数据库日常巡检与健康检查的方法和技巧,包括日常巡检概念、健康检查概念、日常巡检与健康检查的重要性、日常巡检规划、健康检查规划、日常巡检与健康检查工具、日常巡检步骤、健康检查步骤、日常巡检与健康检查自动化等内容,风哥教程参考DM官方文档《DM8数据库管理》手册,适合DBA人员进行DM数据库的日常巡检和健康检查。

Part01-基础概念与理论知识

1.1 DM数据库日常巡检概念

DM数据库日常巡检是指定期对DM数据库进行检查,以确保数据库的正常运行。日常巡检包括检查数据库的状态、性能、空间使用情况、日志文件、备份情况等,通过日常巡检可以及时发现和解决潜在的问题,确保数据库的稳定性和可靠性。from
DM视频:www.itpux.com

日常巡检的内容:

  • 数据库状态:检查数据库是否正常运行,实例状态是否正常
  • 性能指标:检查数据库的性能指标,如CPU使用率、内存使用率、IO使用率等
  • 空间使用:检查数据库的空间使用情况,如表空间使用率、数据文件大小等
  • 日志文件:检查数据库的日志文件,如重做日志、归档日志等
  • 备份情况:检查数据库的备份情况,确保备份的完整性和有效性
  • 错误日志:检查数据库的错误日志,及时发现和解决错误

1.2 DM数据库健康检查概念

DM数据库健康检查是指对DM数据库进行全面的检查,以评估数据库的健康状况。健康检查包括检查数据库的配置、性能、安全性、可靠性等,通过健康检查可以全面了解数据库的运行状况,发现潜在的问题,并采取相应的措施进行优化和改进。

# 健康检查的内容
#
# 1. 配置检查
– 数据库参数配置
– 操作系统参数配置
– 网络配置
– 存储配置
#
# 2. 性能检查
– CPU使用率
– 内存使用率
– IO使用率
– 网络使用率
– SQL语句性能
– 索引使用情况
#
# 3. 安全性检查
– 用户权限
– 密码策略
– 审计配置
– 网络安全
#
# 4. 可靠性检查
– 备份策略
– 主从复制状态
– 故障自动切换配置
– 灾备方案
#
# 5. 空间检查
– 表空间使用率
– 数据文件大小
– 归档日志空间
– 临时表空间
#
# 6. 日志检查 风哥提示:
– 重做日志
– 归档日志
– 错误日志
– 告警日志

1.3 DM数据库日常巡检与健康检查的重要性

DM数据库日常巡检与健康检查的重要性:

  1. 及时发现问题:通过日常巡检和健康检查,可以及时发现数据库的潜在问题,避免问题扩大化
  2. 确保数据库稳定运行:通过定期检查和维护,确保数据库的稳定运行,减少故障的发生
  3. 提高数据库性能:通过性能检查和优化,提高数据库的性能,满足业务需求
  4. 确保数据安全:通过安全性检查,确保数据的安全性,防止数据泄露和损坏
  5. 制定合理的维护计划:通过健康检查,了解数据库的运行状况,制定合理的维护计划
  6. 降低运维成本:通过预防性维护,减少故障的发生,降低运维成本
风哥提示:日常巡检和健康检查是数据库运维的重要组成部分,通过定期的检查和维护,可以确保数据库的稳定运行,提高数据库的性能和可靠性。

Part02-生产环境规划与建议

2.1 DM数据库日常巡检规划

生产环境DM数据库日常巡检规划:

# 日常巡检规划
#
# 巡检频率
– 每日巡检:检查数据库状态、错误日志、备份情况等
– 每周巡检:检查性能指标、空间使用情况、索引使用情况等
– 每月巡检:检查数据库配置、安全性、可靠性等
#
# 巡检内容
##
# 每日巡检
1. 数据库状态检查 学习交流加群风哥微信: itpux-com
2. 错误日志检查
3. 备份情况检查
4. 空间使用情况检查
5. 性能指标检查
##
# 每周巡检
1. 表空间使用率检查
2. 索引使用情况检查
3. SQL语句性能检查
4. 主从复制状态检查
5. 归档日志空间检查
##
# 每月巡检
1. 数据库参数配置检查
2. 操作系统参数配置检查
3. 网络配置检查
4. 存储配置检查
5. 安全配置检查
6. 备份策略检查
#
# 巡检工具
– DM管理工具
– SQL语句
– 脚本工具
– 监控系统
#
# 巡检流程
1. 收集巡检数据
2. 分析巡检结果
3. 发现问题并记录
4. 解决问题
5. 生成巡检报告

2.2 DM数据库健康检查规划

生产环境DM数据库健康检查规划:

健康检查规划:

  • 检查频率:每季度进行一次全面的健康检查,每年进行一次深入的健康检查
  • 检查内容:包括配置检查、性能检查、安全性检查、可靠性检查、空间检查、日志检查等
  • 检查工具:使用DM管理工具、SQL语句、脚本工具、监控系统等
  • 检查流程:收集检查数据、分析检查结果、发现问题并记录、解决问题、生成健康检查报告
  • 检查人员:由经验丰富的DBA人员进行健康检查

学习交流加群风哥QQ113257174

2.3 DM数据库日常巡检与健康检查工具

DM数据库日常巡检与健康检查工具:

# 巡检与健康检查工具
#
# 1. DM管理工具
– DM管理控制台:图形化管理工具,用于查看数据库状态、性能指标等
– DIsql:命令行工具,用于执行SQL语句,检查数据库状态和性能
– DM性能分析工具:用于分析数据库性能,识别性能瓶颈
#
# 2. SQL语句
– 查看数据库状态:SELECT * FROM V$INSTANCE;
– 查看表空间使用情况:SELECT * FROM V$TABLESPACE;
– 查看数据文件使用情况:SELECT * FROM V$DATAFILE;
– 查看会话情况:SELECT * FROM V$SESSION;
– 查看SQL语句性能:SELECT * FROM V$SQL;
– 查看错误日志:SELECT * FROM V$ERRORLOG;
#
# 3. 脚本工具
– 日常巡检脚本:用于自动执行日常巡检任务
– 健康检查脚本:用于自动执行健康检查任务
– 监控脚本:用于监控数据库的状态和性能
#
# 4. 监控系统
– Prometheus + Grafana:用于监控数据库的性能指标
– Zabbix:用于监控数据库的状态和性能
– DM自带监控工具:用于监控数据库的状态和性能
#
# 5. 第三方工具
– Oracle Enterprise Manager:用于监控和管理数据库
– Nagios:用于监控系统和数据库的状态
– New Relic:用于监控应用程序和数据库的性能

Part03-生产环境项目实施方案

3.1 DM数据库日常巡检步骤

3.1.1 每日巡检步骤

# 每日巡检步骤
#
# 1. 检查数据库状态
##
# 检查实例状态
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
##
# 检查数据库状态
SQL> select * from v$database; 更多视频教程www.fgedu.net.cn
##
# 检查会话情况
SQL> select count(*) from v$session;
SQL> select status, count(*) from v$session group by status;
#
# 2. 检查错误日志
##
# 检查错误日志
$ tail -f /dm/log/DmServicefgedudb.log
##
# 检查告警日志
SQL> select * from v$errorlog order by rec_time desc;
#
# 3. 检查备份情况
##
# 检查备份状态
SQL> select * from v$backup;
##
# 检查备份文件
$ ls -l /dm/backup/
#
# 4. 检查空间使用情况
##
# 检查表空间使用率
SQL> select tablespace_name, round(total_bytes/1024/1024/1024,2) as total_gb,
round(used_bytes/1024/1024/1024,2) as used_gb, round(used_bytes/total_bytes*100,2) as used_percent from (
select tablespace_name, sum(bytes) as total_bytes from dba_data_files group by tablespace_name
) t1,
(
select tablespace_name, sum(bytes) as used_bytes from dba_segments group by tablespace_name
) t2
where t1.tablespace_name = t2.tablespace_name;
##
# 检查数据文件大小
SQL> select file_name, round(bytes/1024/1024/1024,2) as size_gb from dba_data_files;
#
# 5. 检查性能指标
##
# 检查CPU使用率
$ top
##
# 检查内存使用率
$ free -h
##
# 检查IO使用率
$ iostat -x
##
# 检查网络使用率
$ netstat -tuln
##
# 检查SQL语句性能
SQL> select * from v$sql where elapsed_time > 10000000 order by elapsed_time desc;
#
# 6. 检查主从复制状态
##
# 检查主从复制状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行 更多学习教程公众号风哥教程itpux_com
#
# 7. 生成巡检报告
##
# 记录巡检结果
– 数据库状态
– 错误日志情况
– 备份情况
– 空间使用情况
– 性能指标
– 主从复制状态
##
# 分析巡检结果
– 发现问题
– 分析问题原因
– 提出解决方案
##
# 生成巡检报告
– 巡检时间
– 巡检内容
– 巡检结果
– 问题分析
– 解决方案

3.1.2 每周巡检步骤

# 每周巡检步骤
#
# 1. 检查表空间使用率
##
# 检查表空间使用率
SQL> select tablespace_name, round(total_bytes/1024/1024/1024,2) as total_gb,
round(used_bytes/1024/1024/1024,2) as used_gb, round(used_bytes/total_bytes*100,2) as used_percent from (
select tablespace_name, sum(bytes) as total_bytes from dba_data_files group by tablespace_name
) t1,
(
select tablespace_name, sum(bytes) as used_bytes from dba_segments group by tablespace_name from DB视频:www.itpux.com
) t2
where t1.tablespace_name = t2.tablespace_name;
##
# 检查临时表空间
SQL> select tablespace_name, round(bytes/1024/1024/1024,2) as size_gb from dba_temp_files;
#
# 2. 检查索引使用情况
##
# 检查索引状态
SQL> select index_name, table_name, status from dba_indexes where owner = ‘FGEDU’;
##
# 检查索引使用率
SQL> select index_name, table_name, num_rows, distinct_keys, clustering_factor from dba_indexes where owner
= ‘FGEDU’;
#
# 3. 检查SQL语句性能
##
# 检查慢SQL
SQL> select * from v$sql where elapsed_time > 10000000 order by elapsed_time desc;
##
# 检查执行计划
SQL> explain select * from fgedu.t_user where id = 1;
#
# 4. 检查主从复制状态
##
# 检查主从复制状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
##
# 检查复制延迟
SQL> select * from v$rlog_apply where apply_time is not null order by apply_time desc;
#
# 5. 检查归档日志空间
##
# 检查归档日志空间
$ df -h /dm/arch
##
# 检查归档日志文件
$ ls -l /dm/arch/
#
# 6. 检查数据库参数
##
# 检查数据库参数
SQL> select name, value from v$parameter where name in (‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HASH_AREA_SIZE’,
‘LOG_BUFFER’);
#
# 7. 生成巡检报告
##
# 记录巡检结果
– 表空间使用率
– 索引使用情况
– SQL语句性能
– 主从复制状态
– 归档日志空间
– 数据库参数
##
# 分析巡检结果
– 发现问题
– 分析问题原因
– 提出解决方案
##
# 生成巡检报告
– 巡检时间
– 巡检内容
– 巡检结果
– 问题分析
– 解决方案

3.2 DM数据库健康检查步骤

3.2.1 配置检查

# 配置检查
#
# 1. 数据库参数配置
##
# 检查数据库参数
SQL> select name, value from v$parameter;
##
# 检查关键参数
SQL> select name, value from v$parameter where name in (
‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HASH_AREA_SIZE’, ‘LOG_BUFFER’,
‘MAX_SESSIONS’, ‘SESS_POOL_SIZE’, ‘DBWR_IO_SLAVES’,
‘RLOG_SEND_APPLY_MON’, ‘DW_INACTIVE_INTERVAL’
);
#
# 2. 操作系统参数配置
##
# 检查操作系统参数
$ sysctl -a | grep kernel
$ sysctl -a | grep net
$ sysctl -a | grep vm
##
# 检查系统限制
$ ulimit -a
#
# 3. 网络配置
##
# 检查网络连接
$ ifconfig
$ netstat -tuln
##
# 检查网络延迟
$ ping 192.168.1.1
$ traceroute 192.168.1.1
#
# 4. 存储配置
##
# 检查存储状态
$ df -h
$ iostat -x
##
# 检查RAID状态
$ mdadm –detail /dev/md0

3.2.2 性能检查

# 性能检查
#
# 1. CPU使用率
##
# 检查CPU使用率
$ top
$ mpstat
#
# 2. 内存使用率
##
# 检查内存使用率
$ free -h
$ vmstat
#
# 3. IO使用率
##
# 检查IO使用率
$ iostat -x
$ iotop
#
# 4. 网络使用率
##
# 检查网络使用率
$ netstat -tuln
$ ss -s
#
# 5. SQL语句性能
##
# 检查慢SQL
SQL> select * from v$sql where elapsed_time > 10000000 order by elapsed_time desc;
##
# 检查执行计划
SQL> explain select * from fgedu.t_user where id = 1;
#
# 6. 索引使用情况
##
# 检查索引状态
SQL> select index_name, table_name, status from dba_indexes where owner = ‘FGEDU’;
##
# 检查索引使用率
SQL> select index_name, table_name, num_rows, distinct_keys, clustering_factor from dba_indexes where owner
= ‘FGEDU’;

3.2.3 安全性检查

# 安全性检查
#
# 1. 用户权限
##
# 检查用户权限
SQL> select username, default_tablespace, temporary_tablespace from dba_users;
SQL> select grantee, privilege from dba_sys_privs where grantee not in (‘SYS’, ‘SYSTEM’, ‘SYSDBA’);
##
# 检查角色权限
SQL> select grantee, granted_role from dba_role_privs where grantee not in (‘SYS’, ‘SYSTEM’, ‘SYSDBA’);
#
# 2. 密码策略
##
# 检查密码策略
SQL> select * from sysdba.sysusers;
##
# 检查密码过期情况
SQL> select username, account_status, expiry_date from dba_users;
#
# 3. 审计配置
##
# 检查审计配置
SQL> select * from v$parameter where name like ‘%audit%’;
##
# 检查审计日志
$ ls -l /dm/audit/
#
# 4. 网络安全
##
# 检查监听配置
$ cat /dm/app/conf/dm.ini | grep PORT_NUM
##
# 检查防火墙配置
$ firewall-cmd –list-ports

3.3 DM数据库日常巡检与健康检查自动化

DM数据库日常巡检与健康检查自动化:

# 自动化脚本
#
# 1. 日常巡检脚本
#!/bin/bash
# daily_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
export DM_HOME=/dm/app
export PATH=$PATH:$DM_HOME/bin
# 检查数据库状态
check_instance() {
echo “=== 检查数据库状态 ===”
disql SYSDBA/SYSDBA << EOF select * from vinstance; select * from vdatabase; EOF } # 检查错误日志 check_error_log() { echo "=== 检查错误日志 ===" tail -n 50 /dm/log/DmServicefgedudb.log } # 检查备份情况 check_backup() { echo "=== 检查备份情况 ===" disql SYSDBA/SYSDBA << EOF select * from vbackup; EOF ls -l /dm/backup/ } # 检查空间使用情况 check_space() { echo "=== 检查空间使用情况 ===" disql SYSDBA/SYSDBA << EOF select tablespace_name, round(total_bytes/1024/1024/1024,2) as total_gb, round(used_bytes/1024/1024/1024,2) as used_gb, round(used_bytes/total_bytes*100,2) as used_percent from ( select tablespace_name, sum(bytes) as total_bytes from dba_data_files group by tablespace_name ) t1, ( select tablespace_name, sum(bytes) as used_bytes from dba_segments group by tablespace_name ) t2 where t1.tablespace_name=t2.tablespace_name; EOF } # 检查性能指标 check_performance() { echo "=== 检查性能指标 ===" echo "CPU使用率:" top -b -n 1 | head -n 20 echo "内存使用率:" free -h echo "IO使用率:" iostat -x 1 5 echo "网络使用率:" netstat -tuln echo "慢SQL:" disql SYSDBA/SYSDBA << EOF select * from vsql where elapsed_time> 10000000
order by elapsed_time desc;
EOF
}
# 检查主从复制状态
check_replication() {
echo “=== 检查主从复制状态 ===”
disql SYSDBA/SYSDBA << EOF select * from vrlog_send; select * from vrlog_apply; EOF } # 生成巡检报告 generate_report() { echo "=== 生成巡检报告 ===" echo "巡检时间:$(date)" echo "数据库状态:正常" echo "错误日志:无异常" echo "备份情况:正常" echo "空间使用情况:正常" echo "性能指标:正常" echo "主从复制状态:正常" } # 执行巡检 check_instance check_error_log check_backup check_space check_performance check_replication generate_report # # 2. 健康检查脚本 #!/bin/bash # health_check.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` export DM_HOME=/dm/app export PATH=$PATH:$DM_HOME/bin # 配置检查 check_config() { echo "=== 配置检查 ===" echo "数据库参数:" disql SYSDBA/SYSDBA << EOF select name, value from vparameter where name in ( 'BUFFER' , 'SORT_BUF_SIZE' , 'HASH_AREA_SIZE' , 'LOG_BUFFER' , 'MAX_SESSIONS' , 'SESS_POOL_SIZE' , 'DBWR_IO_SLAVES' , 'RLOG_SEND_APPLY_MON' , 'DW_INACTIVE_INTERVAL' ); EOF echo "操作系统参数:" sysctl -a | grep kernel sysctl -a | grep net sysctl -a | grep vm echo "系统限制:" ulimit -a echo "网络配置:" ifconfig netstat -tuln echo "存储配置:" df -h iostat -x } # 性能检查 check_performance() { echo "=== 性能检查 ===" echo "CPU使用率:" top -b -n 1 | head -n 20 echo "内存使用率:" free -h echo "IO使用率:" iostat -x 1 5 echo "网络使用率:" netstat -tuln echo "慢SQL:" disql SYSDBA/SYSDBA << EOF select * from vsql where elapsed_time> 10000000 order by elapsed_time desc;
EOF
echo “索引使用情况:”
disql SYSDBA/SYSDBA << EOF select index_name, table_name, status from dba_indexes where owner='FGEDU' ; EOF } # 安全性检查 check_security() { echo "=== 安全性检查 ===" echo "用户权限:" disql SYSDBA/SYSDBA << EOF select username, default_tablespace, temporary_tablespace from dba_users; select grantee, privilege from dba_sys_privs where grantee not in ('SYS', 'SYSTEM' , 'SYSDBA' ); EOF echo "密码策略:" disql SYSDBA/SYSDBA << EOF select * from sysdba.sysusers; select username, account_status, expiry_date from dba_users; EOF echo "审计配置:" disql SYSDBA/SYSDBA << EOF select * from vparameter where name like '%audit%' ; EOF echo "网络安全:" cat /dm/app/conf/dm.ini | grep PORT_NUM firewall-cmd --list-ports } # 可靠性检查 check_reliability() { echo "=== 可靠性检查 ===" echo "备份策略:" disql SYSDBA/SYSDBA << EOF select * from vbackup; EOF echo "主从复制状态:" disql SYSDBA/SYSDBA << EOF select * from vrlog_send; select * from vrlog_apply; EOF echo "故障自动切换配置:" disql SYSDBA/SYSDBA << EOF select name, value from vparameter where name like '%DW%' ; EOF } # 生成健康检查报告 generate_report() { echo "=== 生成健康检查报告 ===" echo "检查时间:$(date)" echo "配置检查:正常" echo "性能检查:正常" echo "安全性检查:正常" echo "可靠性检查:正常" echo "空间检查:正常" echo "日志检查:正常" } # 执行健康检查 check_config check_performance check_security check_reliability generate_report # # 3. 监控脚本 #!/bin/bash # monitor.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` export DM_HOME=/dm/app export PATH=$PATH:$DM_HOME/bin # 监控数据库状态 monitor_instance() { status=$(disql SYSDBA/SYSDBA << EOF select status from vinstance; EOF ) if [[ $status=~ "OPEN" ]]; then echo "数据库状态正常" else echo "数据库状态异常" # 发送告警 echo "数据库状态异常" | mail -s "数据库状态告警" dba@fgedu.net.cn fi } # 监控空间使用情况 monitor_space() { tablespace_usage= $(disql SYSDBA/SYSDBA << EOF select tablespace_name, round(used_bytes/total_bytes*100,2) as used_percent from ( select tablespace_name, sum(bytes) as total_bytes from dba_data_files group by tablespace_name ) t1, ( select tablespace_name, sum(bytes) as used_bytes from dba_segments group by tablespace_name ) t2 where t1.tablespace_name=t2.tablespace_name; EOF ) echo "表空间使用率:" echo "$tablespace_usage" # 检查使用率超过90%的表空间 high_usage=$(echo "$tablespace_usage" | awk '{if ($2 > 90) print $1}’ ) if [[ -n
$high_usage ]]; then echo “表空间使用率超过90%:$high_usage” # 发送告警 echo “表空间使用率超过90%:
$high_usage” | mail
-s “表空间告警” dba@fgedu.net.cn fi } # 监控性能指标 monitor_performance() {
# 检查CPU使用率 cpu_usage=
$(top -b
-n 1 | grep “Cpu(s)” | awk ‘{print $2}’ | cut -d. -f1) if [[ $cpu_usage -gt 80 ]]; then
echo “CPU使用率过高:$cpu_usage%” # 发送告警 echo “CPU使用率过高:
$cpu_usage%” | mail -s “CPU告警”
dba@fgedu.net.cn fi # 检查内存使用率 mem_usage=
$(free | awk ‘/Mem/{print $3/$2*100}’ | cut -d. -f1) if
[[ $mem_usage -gt 80 ]]; then echo “内存使用率过高:$mem_usage%” # 发送告警 echo “内存使用率过高:
$mem_usage%” |
mail -s “内存告警” dba@fgedu.net.cn fi # 检查慢SQL slow_sql=
$(disql SYSDBA/SYSDBA << EOF select count(*) from vsql where elapsed_time> 10000000;
EOF
)
if [[ $slow_sql -gt 10 ]]; then
echo “慢SQL数量过多:$slow_sql”
# 发送告警
echo “慢SQL数量过多:$slow_sql” | mail -s “慢SQL告警” dba@fgedu.net.cn
fi
}
# 监控主从复制状态
monitor_replication() {
# 检查主从复制状态
replication_status=$(disql SYSDBA/SYSDBA << EOF select status from vrlog_apply; EOF ) if [[ ! $replication_status=~ "APPLYING" ]]; then echo "主从复制状态异常" # 发送告警 echo "主从复制状态异常" | mail -s "主从复制告警" dba@fgedu.net.cn fi } # 执行监控 monitor_instance monitor_space monitor_performance monitor_replication

Part04-生产案例与实战讲解

4.1 DM数据库日常巡检案例

以下是一个日常巡检的案例:

#
# 日常巡检案例
##
# 场景描述
某企业的DM数据库需要进行日常巡检,确保数据库的正常运行。
##
# 巡检步骤
# 1. 检查数据库状态
#
# 检查实例状态
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
— 输出结果
INSTANCE_NAME SVR_VERSION STATUS MODE OGUID START_TIME DB_STATUS
———— ——————– ——– ———– ———-
———————– ————
DMSERVER DM Database Server 7.6.1.191 OPEN NORMAL 2025-04-09 08:00:00 OPEN
#
# 检查数据库状态
SQL> select * from v$database;
— 输出结果
NAME CREATE_TIME ARCH_MODE LOG_MODE DB_VERSION
——— ——————– ——— ———— ——————–
FGEDUDB 2025-04-01 10:00:00 Y ARCHIVE DM Database Server 7.6.1.191
#
# 检查会话情况
SQL> select count(*) from v$session;
— 输出结果
———-
150
SQL> select status, count(*) from v$session group by status;
— 输出结果
STATUS COUNT(*)
——– ——–
ACTIVE 20
INACTIVE 130
# 2. 检查错误日志
#
# 检查错误日志
$ tail -n 50 /dm/log/DmServicefgedudb.log
— 输出结果
2025-04-09 08:00:00 [INFO] Database service started
2025-04-09 08:00:01 [INFO] Archive log started
2025-04-09 10:00:00 [INFO] Backup completed successfully
# 3. 检查备份情况
#
# 检查备份状态
SQL> select * from v$backup;
— 输出结果
BACKUP_SET_ID BACKUP_TYPE BACKUP_TIME BACKUP_PATH
————- ———– ——————– ———————————–
1 FULL 2025-04-09 10:00:00 /dm/backup/full_20250409.bak
#
# 检查备份文件
$ ls -l /dm/backup/
— 输出结果
total 1024000
-rw-r–r– 1 dmdba dinstall 1048576000 Apr 9 10:00 full_20250409.bak
# 4. 检查空间使用情况
#
# 检查表空间使用率
SQL> select tablespace_name, round(total_bytes/1024/1024/1024,2) as total_gb,
round(used_bytes/1024/1024/1024,2) as used_gb, round(used_bytes/total_bytes*100,2) as
used_percent from (
select tablespace_name, sum(bytes) as total_bytes from dba_data_files group by
tablespace_name
) t1,
(
select tablespace_name, sum(bytes) as used_bytes from dba_segments group by
tablespace_name
) t2
where t1.tablespace_name = t2.tablespace_name;
— 输出结果
TABLESPACE_NAME TOTAL_GB USED_GB USED_PERCENT
————— ——– ——- ————
SYSTEM 1.00 0.50 50.00
ROLL 1.00 0.20 20.00
TEMP 1.00 0.10 10.00
MAIN 100.00 60.00 60.00
FGEDUTBS 50.00 30.00 60.00
# 5. 检查性能指标
#
# 检查CPU使用率
$ top -b -n 1 | head -n 20
— 输出结果
top – 10:00:00 up 10 days, 2:00, 2 users, load average: 1.50, 1.20, 1.00
Tasks: 200 total, 1 running, 199 sleeping, 0 stopped, 0 zombie
%Cpu(s): 20.0 us, 5.0 sy, 0.0 ni, 70.0 id, 0.0 wa, 0.0 hi, 5.0 si, 0.0 st
KiB Mem : 65536000 total, 16384000 free, 32768000 used, 16384000 buff/cache
KiB Swap: 16384000 total, 16384000 free, 0 used. 32768000 avail Mem
#
# 检查内存使用率
$ free -h
— 输出结果
total used free shared buff/cache available
Mem: 63G 31G 15G 0.0G 16G 31G
Swap: 15G 0B 15G
#
# 检查IO使用率
$ iostat -x 1 5
— 输出结果
device r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 10 20 400 800 80.0 0.5 5.0 3.0 6.0 2.0 6.0
#
# 检查网络使用率
$ netstat -tuln
— 输出结果
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:5236 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
#
# 检查SQL语句性能
SQL> select * from v$sql where elapsed_time > 10000000 order by elapsed_time desc;
— 输出结果
SQL_ID SQL_TEXT ELAPSED_TIME
————- ————————————- ————
1234567890 select * from fgedu.t_user where id = 1 15000000
# 6. 检查主从复制状态
#
# 检查主从复制状态
SQL> select * from v$rlog_send;
— 输出结果
NAME SEND_STATUS SEND_LSN SEND_TIME
——— ———— ———- ———————–
STANDBY1 SENDING 1234567890 2025-04-09 10:00:00
STANDBY2 SENDING 1234567890 2025-04-09 10:00:00
SQL> select * from v$rlog_apply; — 备数据库执行
— 输出结果
NAME APPLY_STATUS APPLY_LSN APPLY_TIME
——— ———— ———- ———————–
PRIMARY APPLYING 1234567890 2025-04-09 10:00:00
# 7. 生成巡检报告
#
# 巡检报告
巡检时间:2025-04-09 10:00:00
巡检内容:
1. 数据库状态
2. 错误日志
3. 备份情况
4. 空间使用情况
5. 性能指标
6. 主从复制状态
巡检结果:
– 数据库状态:正常
– 错误日志:无异常
– 备份情况:正常
– 空间使用情况:正常
– 性能指标:正常
– 主从复制状态:正常
问题分析:
– 无明显问题
解决方案:
– 继续保持日常巡检

4.2 DM数据库健康检查案例

以下是一个健康检查的案例:

#
# 健康检查案例
##
# 场景描述
某企业的DM数据库需要进行健康检查,评估数据库的健康状况。
##
# 检查步骤
# 1. 配置检查
#
# 检查数据库参数
SQL> select name, value from v$parameter where name in (
‘BUFFER’, ‘SORT_BUF_SIZE’, ‘HASH_AREA_SIZE’, ‘LOG_BUFFER’,
‘MAX_SESSIONS’, ‘SESS_POOL_SIZE’, ‘DBWR_IO_SLAVES’,
‘RLOG_SEND_APPLY_MON’, ‘DW_INACTIVE_INTERVAL’
);
— 输出结果
NAME VALUE
——————- ——–
BUFFER 4194304
SORT_BUF_SIZE 67108864
HASH_AREA_SIZE 67108864
LOG_BUFFER 67108864
MAX_SESSIONS 1000
SESS_POOL_SIZE 200
DBWR_IO_SLAVES 4
RLOG_SEND_APPLY_MON 1
DW_INACTIVE_INTERVAL 60
#
# 检查操作系统参数
$ sysctl -a | grep kernel
— 输出结果
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1048576
kernel.shmmax = 4294967296
$ sysctl -a | grep net
— 输出结果
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_max_syn_backlog = 4096
#
# 检查系统限制
$ ulimit -a
— 输出结果
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 32768
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 32768
virtual memory (kbytes, -v) unlimited
# 2. 性能检查
#
# 检查CPU使用率
$ top -b -n 1 | head -n 20
— 输出结果
top – 10:00:00 up 10 days, 2:00, 2 users, load average: 1.50, 1.20, 1.00
Tasks: 200 total, 1 running, 199 sleeping, 0 stopped, 0 zombie
%Cpu(s): 20.0 us, 5.0 sy, 0.0 ni, 70.0 id, 0.0 wa, 0.0 hi, 5.0 si, 0.0 st
#
# 检查内存使用率
$ free -h
— 输出结果
total used free shared buff/cache available
Mem: 63G 31G 15G 0.0G 16G 31G
Swap: 15G 0B 15G
#
# 检查IO使用率
$ iostat -x 1 5
— 输出结果
device r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 10 20 400 800 80.0 0.5 5.0 3.0 6.0 2.0 6.0
#
# 检查SQL语句性能
SQL> select * from v$sql where elapsed_time > 10000000 order by elapsed_time desc;
— 输出结果
SQL_ID SQL_TEXT ELAPSED_TIME
————- ————————————- ————
1234567890 select * from fgedu.t_user where id = 1 15000000
#
# 检查索引使用情况
SQL> select index_name, table_name, status from dba_indexes where owner = ‘FGEDU’;
— 输出结果
INDEX_NAME TABLE_NAME STATUS
————– ————– ——–
PK_T_USER T_USER VALID
IDX_T_USER_NAME T_USER VALID
# 3. 安全性检查
#
# 检查用户权限
SQL> select username, default_tablespace, temporary_tablespace from dba_users;
— 输出结果
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
————– —————– ——————–
SYSDBA SYSTEM TEMP
FGEDU FGEDUTBS TEMP
SQL> select grantee, privilege from dba_sys_privs where grantee not in (‘SYS’, ‘SYSTEM’,
‘SYSDBA’);
— 输出结果
GRANTEE PRIVILEGE
————– ————–
FGEDU CREATE TABLE
FGEDU CREATE VIEW
FGEDU CREATE PROCEDURE
#
# 检查密码策略
SQL> select * from sysdba.sysusers;
— 输出结果
USERNAME PASSWORD STATUS EXPIRY_DATE
————– ————— ——– ————
SYSDBA ******** OPEN 2026-04-01
FGEDU ******** OPEN 2026-04-01
#
# 检查审计配置
SQL> select * from v$parameter where name like ‘%audit%’;
— 输出结果
NAME VALUE
——————- ——–
AUDIT_TRAIL DB
AUDIT_DIR /dm/audit
# 4. 可靠性检查
#
# 检查备份策略
SQL> select * from v$backup;
— 输出结果
BACKUP_SET_ID BACKUP_TYPE BACKUP_TIME BACKUP_PATH
————- ———– ——————– ———————————–
1 FULL 2025-04-09 10:00:00 /dm/backup/full_20250409.bak
2 INCREMENTAL 2025-04-10 10:00:00 /dm/backup/incremental_20250410.bak
#
# 检查主从复制状态
SQL> select * from v$rlog_send;
— 输出结果
NAME SEND_STATUS SEND_LSN SEND_TIME
——— ———— ———- ———————–
STANDBY1 SENDING 1234567890 2025-04-09 10:00:00
STANDBY2 SENDING 1234567890 2025-04-09 10:00:00
#
# 检查故障自动切换配置
SQL> select name, value from v$parameter where name like ‘%DW%’;
— 输出结果
NAME VALUE
——————- ——–
DW_INACTIVE_INTERVAL 60
DW_CONFIRM_INTERVAL 10
DW_ERROR_INTERVAL 10
DW_MAX_FAILOVER_TIMES 3
DW_FAILOVER_INTERVAL 60
# 5. 生成健康检查报告
#
# 健康检查报告
检查时间:2025-04-09 10:00:00
检查内容:
1. 配置检查
2. 性能检查
3. 安全性检查
4. 可靠性检查
检查结果:
– 配置检查:正常
– 性能检查:正常
– 安全性检查:正常
– 可靠性检查:正常
问题分析:
– 无明显问题
解决方案:
– 继续保持日常巡检和定期健康检查

4.3 DM数据库日常巡检与健康检查自动化案例

以下是一个日常巡检与健康检查自动化的案例:

#
# 自动化案例
##
# 场景描述
某企业需要实现DM数据库日常巡检与健康检查的自动化,减少人工干预,提高工作效率。
##
# 实施方案
# 1. 编写自动化脚本
#
# 日常巡检脚本(daily_check.sh)
#!/bin/bash
# daily_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
export DM_HOME=/dm/app
export PATH=$PATH:$DM_HOME/bin
# 检查数据库状态
check_instance() {
echo “=== 检查数据库状态 ===”
disql SYSDBA/SYSDBA << EOF select * from vinstance; select * from vdatabase; EOF } # 检查错误日志 check_error_log() { echo "=== 检查错误日志 ===" tail -n 50 /dm/log/DmServicefgedudb.log } # 检查备份情况 check_backup() { echo "=== 检查备份情况 ===" disql SYSDBA/SYSDBA << EOF select * from vbackup; EOF ls -l /dm/backup/ } # 检查空间使用情况 check_space() { echo "=== 检查空间使用情况 ===" disql SYSDBA/SYSDBA << EOF select tablespace_name, round(total_bytes/1024/1024/1024,2) as total_gb, round(used_bytes/1024/1024/1024,2) as used_gb, round(used_bytes/total_bytes*100,2) as used_percent from ( select tablespace_name, sum(bytes) as total_bytes from dba_data_files group by tablespace_name ) t1, ( select tablespace_name, sum(bytes) as used_bytes from dba_segments group by tablespace_name ) t2 where t1.tablespace_name=t2.tablespace_name; EOF } # 检查性能指标 check_performance() { echo "=== 检查性能指标 ===" echo "CPU使用率:" top -b -n 1 | head -n 20 echo "内存使用率:" free -h echo "IO使用率:" iostat -x 1 5 echo "网络使用率:" netstat -tuln echo "慢SQL:" disql SYSDBA/SYSDBA << EOF select * from vsql where elapsed_time> 10000000 order by
elapsed_time desc;
EOF
}
# 检查主从复制状态
check_replication() {
echo “=== 检查主从复制状态 ===”
disql SYSDBA/SYSDBA << EOF select * from vrlog_send; select * from vrlog_apply; EOF } # 生成巡检报告 generate_report() { echo "=== 生成巡检报告 ===" echo "巡检时间: $(date)" echo "数据库状态:正常" echo "错误日志:无异常" echo "备份情况:正常" echo "空间使用情况:正常" echo "性能指标:正常" echo "主从复制状态:正常" } # 执行巡检 check_instance check_error_log check_backup check_space check_performance check_replication generate_report # # 健康检查脚本(health_check.sh) #!/bin/bash # health_check.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: `http://www.fgedu.net.cn` export DM_HOME=/dm/app export PATH=$PATH:$DM_HOME/bin # 配置检查 check_config() { echo "=== 配置检查 ===" echo "数据库参数:" disql SYSDBA/SYSDBA << EOF select name, value from vparameter where name in ( 'BUFFER' , 'SORT_BUF_SIZE' , 'HASH_AREA_SIZE' , 'LOG_BUFFER' , 'MAX_SESSIONS' , 'SESS_POOL_SIZE' , 'DBWR_IO_SLAVES' , 'RLOG_SEND_APPLY_MON' , 'DW_INACTIVE_INTERVAL' ); EOF echo "操作系统参数:" sysctl -a | grep kernel sysctl -a | grep net sysctl -a | grep vm echo "系统限制:" ulimit -a echo "网络配置:" ifconfig netstat -tuln echo "存储配置:" df -h iostat -x } # 性能检查 check_performance() { echo "=== 性能检查 ===" echo "CPU使用率:" top -b -n 1 | head -n 20 echo "内存使用率:" free -h echo "IO使用率:" iostat -x 1 5 echo "网络使用率:" netstat -tuln echo "慢SQL:" disql SYSDBA/SYSDBA << EOF select * from vsql where elapsed_time>
10000000 order by elapsed_time desc;
EOF
echo “索引使用情况:”
disql SYSDBA/SYSDBA << EOF select index_name, table_name, status from dba_indexes where owner='FGEDU' ; EOF } # 安全性检查 check_security() { echo "=== 安全性检查 ===" echo "用户权限:" disql SYSDBA/SYSDBA << EOF select username, default_tablespace, temporary_tablespace from dba_users; select grantee, privilege from dba_sys_privs where grantee not in ('SYS', 'SYSTEM' , 'SYSDBA' ); EOF echo "密码策略:" disql SYSDBA/SYSDBA << EOF select * from sysdba.sysusers; select username, account_status, expiry_date from

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息