本文档介绍达梦数据库生产实战综合项目一,包括项目概述、项目需求分析、项目架构设计、项目实施规划、项目实施、项目测试、项目实战案例、项目故障处理实战案例等内容,适合进行达梦数据库生产实战综合项目的技术人员参考。
Part01-基础概念与理论知识
1.1 项目概述
项目背景:
- 业务场景:某银行核心交易系统
- 数据量:500GB
- 并发量:10000 TPS
- 可用性要求:99.99%
项目目标:
- 高可用:实现数据库高可用架构
- 高性能:优化数据库性能
- 高安全:保障数据库安全
- 易运维:简化数据库运维
风哥提示:生产实战综合项目是检验DBA能力的重要方式,。
1.2 项目需求分析
功能需求:
- 数据库部署:部署DM数据库集群
- 数据迁移:迁移现有数据到DM数据库
- 性能优化:优化数据库性能
- 备份恢复:实现数据库备份和恢复
非功能需求:
- 可用性:99.99%
- 性能:响应时间< 100ms
- 安全性:数据加密、权限控制
- 可扩展性:支持数据量增长
,项目需求分析是项目成功的关键。
Part02-生产环境规划与建议
2.1 项目架构设计
架构设计:
- 数据库架构:DM DSC集群架构
- 存储架构:共享存储
- 网络架构:双网卡冗余
- 备份架构:本地备份 + 远程备份
硬件配置:
- 服务器:2台服务器
- CPU:16核
- 内存:64GB
- 存储:1TB SSD
风哥提示:
,根据业务需求设计合适的项目架构。
2.2 项目实施规划
实施步骤:
- 步骤1:环境准备
- 步骤2:数据库安装
- 步骤3:集群配置
- 步骤4:数据迁移
- 步骤5:性能优化
- 步骤6:备份恢复配置
- 步骤7:监控告警配置
- 步骤8:测试验收
时间规划:
- 环境准备:1天
- 数据库安装:1天
- 集群配置:2天
- 数据迁移:3天
- 性能优化:2天
- 备份恢复配置:1天
- 监控告警配置:1天
- 测试验收:2天
,合理规划项目实施时间保障项目按时完成。
学习交流加群风哥微信: itpux-com
Part03-生产环境项目实施方案
3.1 项目实施
实施步骤:
- 步骤1:环境准备
- 步骤2:数据库安装
- 步骤3:集群配置
- 步骤4:数据迁移
- 步骤5:性能优化
- 步骤6:备份恢复配置
- 步骤7:监控告警配置
环境准备:
— 检查系统环境
[root@fgedu ~]# cat /etc/os-release
NAME=”Oracle Linux Server”
VERSION=”9.3″
— 检查硬件配置
[root@fgedu ~]# lscpu
Architecture: x86_64
CPU(s): 16
Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
[root@fgedu ~]# free -h
total used free shared buff/cache available
Mem: 64Gi 2.0Gi 60Gi 100Mi 2.0Gi 61Gi
Swap: 16Gi 0B 16Gi
— 检查磁盘空间
[root@fgedu ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 1.0T 200G 800G 20% /
/dev/sdb1 2.0T 500G 1.5T 25% /dm/fgdata
— 配置操作系统参数
[root@fgedu ~]# vi /etc/sysctl.conf
kernel.shmmax = 68719476736
kernel.shmall = 16777216
kernel.sem = 250 32000 100 128
fs.file-max = 6815744 学习交流加群风哥QQ113257174
net.ipv4.ip_local_port_range = 9000 65535
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
[root@fgedu ~]# sysctl -p
— 配置用户限制
[root@fgedu ~]# vi /etc/security/limits.conf
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
— 创建用户和组
[root@fgedu ~]# groupadd dinstall
[root@fgedu ~]# useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
[root@fgedu ~]# passwd dmdba
— 创建目录
[root@fgedu ~]# mkdir -p /dm/app
[root@fgedu ~]# mkdir -p /dm/fgdata
[root@fgedu ~]# chown -R dmdba:dinstall /dm
[root@fgedu ~]# cat /etc/os-release
NAME=”Oracle Linux Server”
VERSION=”9.3″
— 检查硬件配置
[root@fgedu ~]# lscpu
Architecture: x86_64
CPU(s): 16
Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
[root@fgedu ~]# free -h
total used free shared buff/cache available
Mem: 64Gi 2.0Gi 60Gi 100Mi 2.0Gi 61Gi
Swap: 16Gi 0B 16Gi
— 检查磁盘空间
[root@fgedu ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 1.0T 200G 800G 20% /
/dev/sdb1 2.0T 500G 1.5T 25% /dm/fgdata
— 配置操作系统参数
[root@fgedu ~]# vi /etc/sysctl.conf
kernel.shmmax = 68719476736
kernel.shmall = 16777216
kernel.sem = 250 32000 100 128
fs.file-max = 6815744 学习交流加群风哥QQ113257174
net.ipv4.ip_local_port_range = 9000 65535
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
[root@fgedu ~]# sysctl -p
— 配置用户限制
[root@fgedu ~]# vi /etc/security/limits.conf
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft nofile 65536
dmdba hard nofile 65536
— 创建用户和组
[root@fgedu ~]# groupadd dinstall
[root@fgedu ~]# useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
[root@fgedu ~]# passwd dmdba
— 创建目录
[root@fgedu ~]# mkdir -p /dm/app
[root@fgedu ~]# mkdir -p /dm/fgdata
[root@fgedu ~]# chown -R dmdba:dinstall /dm
数据库安装:
— 上传安装文件
[root@fgedu ~]# cd /dm/app
[root@fgedu ~]# ls -lh
total 1.2G
-rw-r–r– 1 dmdba dinstall 1.2G Apr 9 10:00 dm8_20240409_x86_rh9_64.iso
— 挂载安装文件
[root@fgedu ~]# mount -o loop dm8_20240409_x86_rh9_64.iso /mnt
— 切换到dmdba用户
[root@fgedu ~]# su – dmdba
— 执行安装程序
[dmdba@fgedu ~]$ cd /mnt
[dmdba@fgedu ~]$ ./DMInstall.bin
— 安装步骤
— 步骤1:选择语言 – 选择”简体中文” – 点击”下一步”
— 步骤2:欢迎界面 – 点击”下一步”
— 步骤3:许可证协议 – 选择”接受” – 点击”下一步”
— 步骤4:安装类型 – 选择”典型安装” – 点击”下一步” 更多视频教程www.fgedu.net.cn
— 步骤5:安装路径 – 输入”/dm/app” – 点击”下一步”
— 步骤6:安装确认 – 点击”安装”
— 步骤7:安装完成 – 点击”完成”
— 配置环境变量
[dmdba@fgedu ~]$ vi ~/.bash_profile
export DM_HOME=/dm/app
export PATH=$DM_HOME/bin:$PATH
[dmdba@fgedu ~]$ source ~/.bash_profile
[root@fgedu ~]# cd /dm/app
[root@fgedu ~]# ls -lh
total 1.2G
-rw-r–r– 1 dmdba dinstall 1.2G Apr 9 10:00 dm8_20240409_x86_rh9_64.iso
— 挂载安装文件
[root@fgedu ~]# mount -o loop dm8_20240409_x86_rh9_64.iso /mnt
— 切换到dmdba用户
[root@fgedu ~]# su – dmdba
— 执行安装程序
[dmdba@fgedu ~]$ cd /mnt
[dmdba@fgedu ~]$ ./DMInstall.bin
— 安装步骤
— 步骤1:选择语言 – 选择”简体中文” – 点击”下一步”
— 步骤2:欢迎界面 – 点击”下一步”
— 步骤3:许可证协议 – 选择”接受” – 点击”下一步”
— 步骤4:安装类型 – 选择”典型安装” – 点击”下一步” 更多视频教程www.fgedu.net.cn
— 步骤5:安装路径 – 输入”/dm/app” – 点击”下一步”
— 步骤6:安装确认 – 点击”安装”
— 步骤7:安装完成 – 点击”完成”
— 配置环境变量
[dmdba@fgedu ~]$ vi ~/.bash_profile
export DM_HOME=/dm/app
export PATH=$DM_HOME/bin:$PATH
[dmdba@fgedu ~]$ source ~/.bash_profile
集群配置:
— 初始化数据库
[dmdba@fgedu ~]$ dminit path=/dm/fgdata db_name=fgedudb port_num=5236 page_size=16 extent_size=32 log_size=256 case_sensitive=1 charset=1
— 创建数据库服务
[root@fgedu ~]# cd /dm/app/script/root
[root@fgedu ~]# ./dm_service_installer.sh -t dmserver -p fgedudb -dm_ini /dm/fgdata/fgedudb/dm.ini
— 启动数据库服务
[root@fgedu ~]# DmServicefgedudb start
— 查看数据库状态
[root@fgedu ~]# DmServicefgedudb status
— 状态输出
DmServicefgedudb (pid 12345) is running.
— 配置DSC集群
— 节点1配置
[dmdba@fgedu ~]$ vi /dm/fgdata/fgedudb/dm.ini
MAL_INI = 1
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
MAL_HOST_ADDR = 192.168.1.101
MAL_HOST_PORT = 5341
MAL_INST_NAME = fgedudb01
MAL_INST_HOST = 192.168.1.101
MAL_INST_PORT = 5236
— 节点2配置
[dmdba@fgedu ~]$ vi /dm/fgdata/fgedudb/dm.ini
MAL_INI = 1
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
MAL_HOST_ADDR = 192.168.1.102
MAL_HOST_PORT = 5341 更多学习教程公众号风哥教程itpux_com
MAL_INST_NAME = fgedudb02
MAL_INST_HOST = 192.168.1.102
MAL_INST_PORT = 5236
— 重启数据库服务
[root@fgedu ~]# DmServicefgedudb restart
[dmdba@fgedu ~]$ dminit path=/dm/fgdata db_name=fgedudb port_num=5236 page_size=16 extent_size=32 log_size=256 case_sensitive=1 charset=1
— 创建数据库服务
[root@fgedu ~]# cd /dm/app/script/root
[root@fgedu ~]# ./dm_service_installer.sh -t dmserver -p fgedudb -dm_ini /dm/fgdata/fgedudb/dm.ini
— 启动数据库服务
[root@fgedu ~]# DmServicefgedudb start
— 查看数据库状态
[root@fgedu ~]# DmServicefgedudb status
— 状态输出
DmServicefgedudb (pid 12345) is running.
— 配置DSC集群
— 节点1配置
[dmdba@fgedu ~]$ vi /dm/fgdata/fgedudb/dm.ini
MAL_INI = 1
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
MAL_HOST_ADDR = 192.168.1.101
MAL_HOST_PORT = 5341
MAL_INST_NAME = fgedudb01
MAL_INST_HOST = 192.168.1.101
MAL_INST_PORT = 5236
— 节点2配置
[dmdba@fgedu ~]$ vi /dm/fgdata/fgedudb/dm.ini
MAL_INI = 1
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
MAL_HOST_ADDR = 192.168.1.102
MAL_HOST_PORT = 5341 更多学习教程公众号风哥教程itpux_com
MAL_INST_NAME = fgedudb02
MAL_INST_HOST = 192.168.1.102
MAL_INST_PORT = 5236
— 重启数据库服务
[root@fgedu ~]# DmServicefgedudb restart
数据迁移:
— 导出源数据库数据
— 使用DTS工具导出数据
— 导入到DM数据库
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA
SQL> START /dm/app/data/fgedu_data.sql
— 查看数据
SQL> SELECT COUNT(*) FROM fgedu.fgedu_account;
— 查询结果
行号 COUNT(*)
———- ———-
1 1000000
— 验证数据一致性
SQL> SELECT COUNT(*) FROM fgedu.fgedu_account WHERE account_id IS NULL;
— 查询结果
行号 COUNT(*)
———- ———-
1 0
— 使用DTS工具导出数据
— 导入到DM数据库
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA
SQL> START /dm/app/data/fgedu_data.sql
— 查看数据
SQL> SELECT COUNT(*) FROM fgedu.fgedu_account;
— 查询结果
行号 COUNT(*)
———- ———-
1 1000000
— 验证数据一致性
SQL> SELECT COUNT(*) FROM fgedu.fgedu_account WHERE account_id IS NULL;
— 查询结果
行号 COUNT(*)
———- ———-
1 0
性能优化:
— 优化数据库参数
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA from DB视频:www.itpux.com
SQL> ALTER SYSTEM SET ‘MAX_SESSIONS’ = 1000 SPFILE;
SQL> ALTER SYSTEM SET ‘MAX_OS_MEMORY’ = 0.9 SPFILE;
SQL> ALTER SYSTEM SET ‘BUFFER_POOLS’ = 4 SPFILE;
SQL> ALTER SYSTEM SET ‘BUFFER’ = 32 SPFILE;
— 创建索引
SQL> CREATE INDEX idx_fgedu_account_account_id ON fgedu.fgedu_account(account_id);
SQL> CREATE INDEX idx_fgedu_account_account_name ON fgedu.fgedu_account(account_name);
— 优化SQL语句
— 查看执行计划
SQL> EXPLAIN SELECT * FROM fgedu.fgedu_account WHERE account_id = 1000000;
— 执行计划
1 #NSET2: [0, 1, 0]
2 #PRJT2: [0, 1, 0]; exp_num(5), is_atom(FALSE)
3 #SLCT2: [0, 1, 0]; FGEDU.FGEDU_ACCOUNT.ACCOUNT_ID = 1000000
4 #BLKUP2: [0, 1, 0]; IDX_FGEDU_ACCOUNT_ACCOUNT_ID(FGEDU.FGEDU_ACCOUNT)
5 #SSEK2: [0, 1, 0]; scan_type(ASC), IDX_FGEDU_ACCOUNT_ACCOUNT_ID(FGEDU.FGEDU_ACCOUNT), scan_range[1000000,1000000]
— 收集统计信息
SQL> DBMS_STATS.GATHER_TABLE_STATS(‘FGEDU’, ‘FGEDU_ACCOUNT’);
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA from DB视频:www.itpux.com
SQL> ALTER SYSTEM SET ‘MAX_SESSIONS’ = 1000 SPFILE;
SQL> ALTER SYSTEM SET ‘MAX_OS_MEMORY’ = 0.9 SPFILE;
SQL> ALTER SYSTEM SET ‘BUFFER_POOLS’ = 4 SPFILE;
SQL> ALTER SYSTEM SET ‘BUFFER’ = 32 SPFILE;
— 创建索引
SQL> CREATE INDEX idx_fgedu_account_account_id ON fgedu.fgedu_account(account_id);
SQL> CREATE INDEX idx_fgedu_account_account_name ON fgedu.fgedu_account(account_name);
— 优化SQL语句
— 查看执行计划
SQL> EXPLAIN SELECT * FROM fgedu.fgedu_account WHERE account_id = 1000000;
— 执行计划
1 #NSET2: [0, 1, 0]
2 #PRJT2: [0, 1, 0]; exp_num(5), is_atom(FALSE)
3 #SLCT2: [0, 1, 0]; FGEDU.FGEDU_ACCOUNT.ACCOUNT_ID = 1000000
4 #BLKUP2: [0, 1, 0]; IDX_FGEDU_ACCOUNT_ACCOUNT_ID(FGEDU.FGEDU_ACCOUNT)
5 #SSEK2: [0, 1, 0]; scan_type(ASC), IDX_FGEDU_ACCOUNT_ACCOUNT_ID(FGEDU.FGEDU_ACCOUNT), scan_range[1000000,1000000]
— 收集统计信息
SQL> DBMS_STATS.GATHER_TABLE_STATS(‘FGEDU’, ‘FGEDU_ACCOUNT’);
备份恢复配置:
— 配置归档模式
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG ‘TYPE=LOCAL,DEST=/dm/arch,FILE_SIZE=1024,SPACE_LIMIT=10240’;
SQL> ALTER DATABASE OPEN;
— 配置备份策略
[dmdba@fgedu ~]$ vi /dm/app/script/backup.sh
#!/bin/bash
# backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
DM_HOME=/dm/app
DMRMAN=$DM_HOME/bin/dmrman
BACKUP_DIR=/dm/backup
LOG_DIR=/dm/log
LOG_FILE=$LOG_DIR/backup_$(date +%Y%m%d).log
# 创建目录
mkdir -p $BACKUP_DIR
mkdir -p $LOG_DIR
# 记录日志
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $LOG_FILE
}
# 全量备份
full_backup() {
log “开始全量备份”
$DMRMAN CTLFILE=”backup database full to fgedu_full_$1 backupset ‘$BACKUP_DIR/fgedu_full_$1′”
log “全量备份完成”
}
# 增量备份
incremental_backup() {
log “开始增量备份”
$DMRMAN CTLFILE=”backup database increment to fgedu_inc_$1 backupset ‘$BACKUP_DIR/fgedu_inc_$1′”
log “增量备份完成”
}
# 删除过期备份
delete_old_backup() {
log “删除过期备份”
find $BACKUP_DIR -name “fgedu_*” -mtime +7 -exec rm -rf {} \;
log “删除过期备份完成”
}
# 主函数
main() {
case $1 in
full)
full_backup $(date +%Y%m%d)
;;
inc)
incremental_backup $(date +%Y%m%d)
;;
delete)
delete_old_backup
;;
*)
echo “Usage: $0 {full|inc|delete}”
exit 1
;;
esac
}
main $@
— 设置执行权限
[root@fgedu ~]# chmod +x /dm/app/script/backup.sh
— 配置定时任务
[root@fgedu ~]# crontab -e
0 2 * * 0 /dm/app/script/backup.sh full
0 2 * * 1-6 /dm/app/script/backup.sh inc
0 3 * * * /dm/app/script/backup.sh delete
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG ‘TYPE=LOCAL,DEST=/dm/arch,FILE_SIZE=1024,SPACE_LIMIT=10240’;
SQL> ALTER DATABASE OPEN;
— 配置备份策略
[dmdba@fgedu ~]$ vi /dm/app/script/backup.sh
#!/bin/bash
# backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
DM_HOME=/dm/app
DMRMAN=$DM_HOME/bin/dmrman
BACKUP_DIR=/dm/backup
LOG_DIR=/dm/log
LOG_FILE=$LOG_DIR/backup_$(date +%Y%m%d).log
# 创建目录
mkdir -p $BACKUP_DIR
mkdir -p $LOG_DIR
# 记录日志
log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” >> $LOG_FILE
}
# 全量备份
full_backup() {
log “开始全量备份”
$DMRMAN CTLFILE=”backup database full to fgedu_full_$1 backupset ‘$BACKUP_DIR/fgedu_full_$1′”
log “全量备份完成”
}
# 增量备份
incremental_backup() {
log “开始增量备份”
$DMRMAN CTLFILE=”backup database increment to fgedu_inc_$1 backupset ‘$BACKUP_DIR/fgedu_inc_$1′”
log “增量备份完成”
}
# 删除过期备份
delete_old_backup() {
log “删除过期备份”
find $BACKUP_DIR -name “fgedu_*” -mtime +7 -exec rm -rf {} \;
log “删除过期备份完成”
}
# 主函数
main() {
case $1 in
full)
full_backup $(date +%Y%m%d)
;;
inc)
incremental_backup $(date +%Y%m%d)
;;
delete)
delete_old_backup
;;
*)
echo “Usage: $0 {full|inc|delete}”
exit 1
;;
esac
}
main $@
— 设置执行权限
[root@fgedu ~]# chmod +x /dm/app/script/backup.sh
— 配置定时任务
[root@fgedu ~]# crontab -e
0 2 * * 0 /dm/app/script/backup.sh full
0 2 * * 1-6 /dm/app/script/backup.sh inc
0 3 * * * /dm/app/script/backup.sh delete
监控告警配置:
— 部署Prometheus
[root@fgedu ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
[root@fgedu ~]# tar -zxvf prometheus-2.45.0.linux-amd64.tar.gz
[root@fgedu ~]# mv prometheus-2.45.0.linux-amd64 /usr/local/prometheus
[root@fgedu ~]# useradd -r -s /sbin/nologin prometheus
[root@fgedu ~]# chown -R prometheus:prometheus /usr/local/prometheus
— 配置Prometheus
[root@fgedu ~]# vi /usr/local/prometheus/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
– job_name: ‘dm’
static_configs:
– targets: [‘192.168.1.101:5236’, ‘192.168.1.102:5236’]
— 启动Prometheus
[root@fgedu ~]# systemctl start prometheus
[root@fgedu ~]# systemctl enable prometheus
— 部署Grafana
[root@fgedu ~]# wget https://dl.grafana.com/oss/release/grafana-10.2.0-1.x86_64.rpm
[root@fgedu ~]# rpm -ivh grafana-10.2.0-1.x86_64.rpm
— 启动Grafana
[root@fgedu ~]# systemctl start grafana-server
[root@fgedu ~]# systemctl enable grafana-server
— 配置Grafana数据源
— 访问Grafana Web界面
— http://192.168.1.100:3000
— 添加Prometheus数据源
— Configuration -> Data Sources -> Add data source
— Name:Prometheus
— URL:http://192.168.1.100:9090
— 创建仪表板
— Create -> Dashboard -> Add new panel
— 查询:dm_sessions
— 查询:dm_transactions
[root@fgedu ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
[root@fgedu ~]# tar -zxvf prometheus-2.45.0.linux-amd64.tar.gz
[root@fgedu ~]# mv prometheus-2.45.0.linux-amd64 /usr/local/prometheus
[root@fgedu ~]# useradd -r -s /sbin/nologin prometheus
[root@fgedu ~]# chown -R prometheus:prometheus /usr/local/prometheus
— 配置Prometheus
[root@fgedu ~]# vi /usr/local/prometheus/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
– job_name: ‘dm’
static_configs:
– targets: [‘192.168.1.101:5236’, ‘192.168.1.102:5236’]
— 启动Prometheus
[root@fgedu ~]# systemctl start prometheus
[root@fgedu ~]# systemctl enable prometheus
— 部署Grafana
[root@fgedu ~]# wget https://dl.grafana.com/oss/release/grafana-10.2.0-1.x86_64.rpm
[root@fgedu ~]# rpm -ivh grafana-10.2.0-1.x86_64.rpm
— 启动Grafana
[root@fgedu ~]# systemctl start grafana-server
[root@fgedu ~]# systemctl enable grafana-server
— 配置Grafana数据源
— 访问Grafana Web界面
— http://192.168.1.100:3000
— 添加Prometheus数据源
— Configuration -> Data Sources -> Add data source
— Name:Prometheus
— URL:http://192.168.1.100:9090
— 创建仪表板
— Create -> Dashboard -> Add new panel
— 查询:dm_sessions
— 查询:dm_transactions
,项目实施需要严格按照步骤执行,确保项目成功。
3.2 项目测试
测试步骤:
- 步骤1:功能测试
- 步骤2:性能测试
- 步骤3:高可用测试
- 步骤4:备份恢复测试
功能测试:
— 测试数据库连接
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA@192.168.1.101:5236
SQL> SELECT * FROM V$DATABASE;
— 测试数据查询
SQL> SELECT COUNT(*) FROM fgedu.fgedu_account;
— 测试数据插入
SQL> INSERT INTO fgedu.fgedu_account(account_id, account_name, account_balance) VALUES(1000001, ‘fgedu_test’, 1000);
SQL> COMMIT;
— 测试数据更新
SQL> UPDATE fgedu.fgedu_account SET account_balance = 2000 WHERE account_id = 1000001;
SQL> COMMIT;
— 测试数据删除
SQL> DELETE FROM fgedu.fgedu_account WHERE account_id = 1000001;
SQL> COMMIT;
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA@192.168.1.101:5236
SQL> SELECT * FROM V$DATABASE;
— 测试数据查询
SQL> SELECT COUNT(*) FROM fgedu.fgedu_account;
— 测试数据插入
SQL> INSERT INTO fgedu.fgedu_account(account_id, account_name, account_balance) VALUES(1000001, ‘fgedu_test’, 1000);
SQL> COMMIT;
— 测试数据更新
SQL> UPDATE fgedu.fgedu_account SET account_balance = 2000 WHERE account_id = 1000001;
SQL> COMMIT;
— 测试数据删除
SQL> DELETE FROM fgedu.fgedu_account WHERE account_id = 1000001;
SQL> COMMIT;
性能测试:
— 使用sysbench进行性能测试
[root@fgedu ~]# sysbench oltp_read_write –db-driver=dm –dm-host=192.168.1.101 –dm-port=5236 –dm-user=SYSDBA –dm-password=SYSDBA –dm-db=fgedudb –tables=10 –table-size=100000 –threads=16 –time=300 –report-interval=10 run
— 性能测试结果
SQL statistics:
queries performed:
read: 100000
write: 50000
other: 10000
total: 160000
transactions: 5000 (16.67 per sec.)
queries: 160000 (533.33 per sec.)
Latency (ms):
min: 5.00
avg: 15.00
max: 50.00
95th percentile: 20.00
sum: 75000.00
[root@fgedu ~]# sysbench oltp_read_write –db-driver=dm –dm-host=192.168.1.101 –dm-port=5236 –dm-user=SYSDBA –dm-password=SYSDBA –dm-db=fgedudb –tables=10 –table-size=100000 –threads=16 –time=300 –report-interval=10 run
— 性能测试结果
SQL statistics:
queries performed:
read: 100000
write: 50000
other: 10000
total: 160000
transactions: 5000 (16.67 per sec.)
queries: 160000 (533.33 per sec.)
Latency (ms):
min: 5.00
avg: 15.00
max: 50.00
95th percentile: 20.00
sum: 75000.00
高可用测试:
— 停止节点1
[root@fgedu ~]# DmServicefgedudb stop
— 测试节点2是否正常工作
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA@192.168.1.102:5236
SQL> SELECT * FROM V$DATABASE;
— 启动节点1
[root@fgedu ~]# DmServicefgedudb start
— 测试集群是否正常
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA@192.168.1.101:5236
SQL> SELECT * FROM V$DSC_INFO;
[root@fgedu ~]# DmServicefgedudb stop
— 测试节点2是否正常工作
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA@192.168.1.102:5236
SQL> SELECT * FROM V$DATABASE;
— 启动节点1
[root@fgedu ~]# DmServicefgedudb start
— 测试集群是否正常
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA@192.168.1.101:5236
SQL> SELECT * FROM V$DSC_INFO;
备份恢复测试:
— 执行全量备份
[root@fgedu ~]# /dm/app/script/backup.sh full
— 模拟数据损坏
[dmdba@fgedu ~]$ rm -rf /dm/fgdata/fgedudb/*.dbf
— 执行恢复
[dmdba@fgedu ~]$ dmrman
RMAN> RESTORE DATABASE ‘/dm/fgdata/fgedudb/dm.ini’ FROM BACKUPSET ‘/dm/backup/fgedu_full_20260409’;
RMAN> RECOVER DATABASE ‘/dm/fgdata/fgedudb/dm.ini’ FROM BACKUPSET ‘/dm/backup/fgedu_full_20260409’;
RMAN> RECOVER DATABASE ‘/dm/fgdata/fgedudb/dm.ini’ UPDATE DB_MAGIC;
— 验证数据
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA
SQL> SELECT COUNT(*) FROM fgedu.fgedu_account;
[root@fgedu ~]# /dm/app/script/backup.sh full
— 模拟数据损坏
[dmdba@fgedu ~]$ rm -rf /dm/fgdata/fgedudb/*.dbf
— 执行恢复
[dmdba@fgedu ~]$ dmrman
RMAN> RESTORE DATABASE ‘/dm/fgdata/fgedudb/dm.ini’ FROM BACKUPSET ‘/dm/backup/fgedu_full_20260409’;
RMAN> RECOVER DATABASE ‘/dm/fgdata/fgedudb/dm.ini’ FROM BACKUPSET ‘/dm/backup/fgedu_full_20260409’;
RMAN> RECOVER DATABASE ‘/dm/fgdata/fgedudb/dm.ini’ UPDATE DB_MAGIC;
— 验证数据
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA
SQL> SELECT COUNT(*) FROM fgedu.fgedu_account;
风哥提示:定期测试项目功能,确保系统稳定运行,。
Part04-生产案例与实战讲解
4.1 项目实战案例
案例背景:
- 业务场景:某银行核心交易系统
- 数据量:500GB
- 并发量:10000 TPS
- 项目周期:13天
实施过程:
- 环境准备:1天
- 数据库安装:1天
- 集群配置:2天
- 数据迁移:3天
- 性能优化:2天
- 备份恢复配置:1天
- 监控告警配置:1天
- 测试验收:2天
项目实施结果:
— 数据库状态
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA
SQL> SELECT * FROM V$DATABASE;
— 数据库信息
行号 NAME CREATE_TIME ARCH_MODE STATUS
———- ——— ——————– ———- ——–
1 FGEDUDB 2026-04-09 10:00:00 Y OPEN
— 集群状态
SQL> SELECT * FROM V$DSC_INFO;
— 集群信息
行号 EP_NAME EP_ID EP_STATUS
———- ———— ——- ———-
1 FGEDUDB01 0 OK
2 FGEDUDB02 1 OK
— 性能指标
SQL> SELECT * FROM V$SYSTEMINFO;
— 系统信息
行号 ITEM_NAME ITEM_VALUE
———- ———— ——————–
1 MAX_SESSIONS 1000
2 CPU_COUNT 16
3 MEMORY_SIZE 64
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA
SQL> SELECT * FROM V$DATABASE;
— 数据库信息
行号 NAME CREATE_TIME ARCH_MODE STATUS
———- ——— ——————– ———- ——–
1 FGEDUDB 2026-04-09 10:00:00 Y OPEN
— 集群状态
SQL> SELECT * FROM V$DSC_INFO;
— 集群信息
行号 EP_NAME EP_ID EP_STATUS
———- ———— ——- ———-
1 FGEDUDB01 0 OK
2 FGEDUDB02 1 OK
— 性能指标
SQL> SELECT * FROM V$SYSTEMINFO;
— 系统信息
行号 ITEM_NAME ITEM_VALUE
———- ———— ——————–
1 MAX_SESSIONS 1000
2 CPU_COUNT 16
3 MEMORY_SIZE 64
项目验收结果:
— 功能测试:通过
— 性能测试:通过(响应时间< 100ms) -- 高可用测试:通过(故障切换时间< 30s) -- 备份恢复测试:通过(恢复时间< 1h) -- 项目验收:通过
— 性能测试:通过(响应时间< 100ms) -- 高可用测试:通过(故障切换时间< 30s) -- 备份恢复测试:通过(恢复时间< 1h) -- 项目验收:通过
,项目实战案例展示DBA综合能力。
4.2 项目故障处理实战案例
故障场景:
- 故障类型:集群节点故障
- 故障现象:节点1数据库服务停止,集群无法正常工作
- 故障影响:影响业务访问,影响数据一致性
- 故障原因:服务器硬件故障,内存不足
处理步骤:
- 步骤1:检查节点1状态
- 步骤2:检查系统资源
- 步骤3:检查数据库日志
- 步骤4:重启节点1服务
- 步骤5:验证集群状态
检查节点1状态:
— 检查数据库服务状态
[root@fgedu ~]# DmServicefgedudb status
— 服务状态
DmServicefgedudb is stopped.
— 启动数据库服务
[root@fgedu ~]# DmServicefgedudb start
— 查看服务状态
[root@fgedu ~]# DmServicefgedudb status
— 服务状态
DmServicefgedudb (pid 12345) is running.
[root@fgedu ~]# DmServicefgedudb status
— 服务状态
DmServicefgedudb is stopped.
— 启动数据库服务
[root@fgedu ~]# DmServicefgedudb start
— 查看服务状态
[root@fgedu ~]# DmServicefgedudb status
— 服务状态
DmServicefgedudb (pid 12345) is running.
检查系统资源:
— 检查内存使用
[root@fgedu ~]# free -h
— 输出结果
total used free shared buff/cache available
Mem: 64Gi 60Gi 2.0Gi 100Mi 2.0Gi 1.0Gi
— 检查CPU使用
[root@fgedu ~]# top -n 1 | grep Cpu
— 输出结果
%Cpu(s): 95.0 us, 5.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
— 清理缓存
[root@fgedu ~]# sync
[root@fgedu ~]# echo 3 > /proc/sys/vm/drop_caches
[root@fgedu ~]# free -h
— 输出结果
total used free shared buff/cache available
Mem: 64Gi 60Gi 2.0Gi 100Mi 2.0Gi 1.0Gi
— 检查CPU使用
[root@fgedu ~]# top -n 1 | grep Cpu
— 输出结果
%Cpu(s): 95.0 us, 5.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
— 清理缓存
[root@fgedu ~]# sync
[root@fgedu ~]# echo 3 > /proc/sys/vm/drop_caches
检查数据库日志:
— 查看数据库日志
[dmdba@fgedu ~]$ tail -f /dm/app/log/dm.log
— 日志输出
2026-04-09 10:00:00 [INFO] Database started successfully
2026-04-09 10:00:00 [ERROR] Out of memory
2026-04-09 10:00:00 [ERROR] Database stopped
[dmdba@fgedu ~]$ tail -f /dm/app/log/dm.log
— 日志输出
2026-04-09 10:00:00 [INFO] Database started successfully
2026-04-09 10:00:00 [ERROR] Out of memory
2026-04-09 10:00:00 [ERROR] Database stopped
重启节点1服务:
— 重启数据库服务
[root@fgedu ~]# DmServicefgedudb restart
— 查看服务状态
[root@fgedu ~]# DmServicefgedudb status
— 服务状态
DmServicefgedudb (pid 12345) is running.
[root@fgedu ~]# DmServicefgedudb restart
— 查看服务状态
[root@fgedu ~]# DmServicefgedudb status
— 服务状态
DmServicefgedudb (pid 12345) is running.
验证集群状态:
— 查看集群状态
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA
SQL> SELECT * FROM V$DSC_INFO;
— 集群信息
行号 EP_NAME EP_ID EP_STATUS
———- ———— ——- ———-
1 FGEDUDB01 0 OK
2 FGEDUDB02 1 OK
— 测试数据库连接
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA@192.168.1.101:5236
SQL> SELECT COUNT(*) FROM fgedu.fgedu_account;
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA
SQL> SELECT * FROM V$DSC_INFO;
— 集群信息
行号 EP_NAME EP_ID EP_STATUS
———- ———— ——- ———-
1 FGEDUDB01 0 OK
2 FGEDUDB02 1 OK
— 测试数据库连接
[dmdba@fgedu ~]$ disql SYSDBA/SYSDBA@192.168.1.101:5236
SQL> SELECT COUNT(*) FROM fgedu.fgedu_account;
,集群节点故障时及时修复,恢复集群功能。
Part05-风哥经验总结与分享
5.1 最佳实践
项目实施建议:
- 需求分析:充分了解业务需求,制定合理的项目计划
- 架构设计:设计合理的架构,确保系统稳定性和可扩展性
- 环境准备:充分准备环境,确保硬件和软件满足要求
- 实施过程:严格按照步骤执行,确保实施质量
- 测试验收:充分测试,确保系统满足业务需求
项目运维建议:
- 监控告警:配置完善的监控告警,及时发现和解决问题
- 备份恢复:定期备份,确保数据安全
- 性能优化:定期优化,确保系统性能
- 故障处理:建立完善的故障处理流程,快速响应故障
- 持续优化:根据运行情况持续优化系统
,项目实施和运维需要综合考虑多种因素。
5.2 面试技巧
常见面试问题:
- 如何进行项目需求分析?了解业务需求,制定项目计划,设计项目架构
- 如何进行项目架构设计?根据业务需求设计高可用、高性能、高安全的架构
- 如何进行项目实施?严格按照步骤执行,确保实施质量
- 如何进行项目测试?功能测试、性能测试、高可用测试、备份恢复测试
- 如何处理项目故障?检查服务状态、系统资源、日志等,及时修复故障
面试回答技巧:
- 理论结合实践:先回答理论知识,再结合实际项目经验
- 举例说明:用具体的案例说明如何实施项目
- 突出重点:重点强调项目架构设计和实施过程
- 展示经验:分享实际项目中遇到的问题和解决方案
- 技术深度:展示对项目的深入理解和技术细节
,掌握项目实施和运维,轻松应对面试。
本文总结:
- 生产实战综合项目是检验DBA能力的重要方式
- 充分了解业务需求,制定合理的项目计划
- 设计合理的架构,确保系统稳定性和可扩展性
- 严格按照步骤执行,确保实施质量
- 充分测试,确保系统满足业务需求
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
