本文档风哥主要介绍Oracle EXAchk使用相关知识,包括EXAchk的概念、EXAchk组成、EXAchk使用、EXAchk配置、EXAchk监控、EXAchk故障处理等内容,由风哥教程参考Oracle官方文档Troubleshooting内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 EXAchk的概念
Oracle EXAchk是Oracle提供的一款专门针对Exadata环境的健康检查工具,用于全面检查Exadata数据库一体机的配置、性能和可靠性。EXAchk可以检查数据库、存储服务器、网络、硬件等多个层面,发现潜在问题并提供修复建议。EXAchk是Exadata环境健康检查的重要工具。更多视频教程www.fgedu.net.cn
- Exadata专用:专门针对Exadata环境设计
- 全面检查:检查数据库、存储、网络、硬件
- 最佳实践:基于Exadata最佳实践进行检查
- 自动修复:提供自动修复脚本
- 报告生成:生成详细的检查报告
1.2 EXAchk组成
Oracle EXAchk组成:
- 检查模块:数据库、存储、网络、硬件等检查模块
- 检查规则:基于Exadata最佳实践的检查规则
- 检查报告:HTML格式的检查报告
- 修复脚本:自动生成的修复脚本
- 配置文件:检查配置和参数
1. 检查模块
– 数据库检查:数据库配置、参数、性能
– 存储服务器检查:存储配置、磁盘状态
– 网络检查:网络配置、带宽、延迟
– 硬件检查:硬件状态、温度、电源
– 软件检查:软件版本、补丁状态
2. 检查规则
– 基于Exadata最佳实践
– 基于Oracle Support文档
– 基于已知问题
– 基于硬件规范
3. 检查报告
– HTML格式报告
– 详细问题描述
– 修复建议
– 优先级分类
4. 修复脚本
– 自动生成修复脚本
– 可手动执行
– 可批量执行
– 可自定义修复
5. 配置文件
– 检查参数配置
– 排除规则配置
– 输出配置
– 通知配置
1.3 EXAchk使用
Oracle EXAchk使用:
- 健康检查:定期进行健康检查
- 升级前检查:升级前进行全面检查
- 问题诊断:诊断配置问题
- 硬件检查:检查硬件状态
- 性能分析:分析性能问题
Part02-生产环境规划与建议
2.1 EXAchk规划
Oracle EXAchk规划要点:
– 检查时机:确定何时运行EXAchk
– 检查范围:确定检查哪些组件
– 检查频率:确定检查频率
– 结果处理:确定如何处理检查结果
# 检查时机规划
– 定期检查:每月或每季度定期检查
– 升级前检查:升级前进行全面检查
– 问题诊断:出现问题时进行检查
– 项目验收:项目验收时进行检查
# 检查范围规划
– 数据库检查:数据库配置和性能
– 存储服务器检查:存储配置和状态
– 网络检查:网络配置和性能
– 硬件检查:硬件状态
– 软件检查:软件版本和补丁
# 检查频率规划
– 生产环境:每月检查一次
– 关键系统:每周检查一次
– 升级前:进行全面检查
– 问题诊断:按需检查
# 结果处理规划
– 问题分类:按优先级分类问题
– 问题修复:及时修复发现的问题
– 问题跟踪:跟踪问题修复进度
– 报告归档:归档检查报告
2.2 EXAchk场景
Oracle EXAchk场景:
- 定期健康检查:定期进行健康检查
- 升级前检查:升级前进行全面检查
- 问题诊断:诊断配置问题
- 硬件检查:检查硬件状态
- 性能分析:分析性能问题
1. 定期健康检查
– 每月定期检查
– 检查所有组件
– 生成检查报告
– 跟踪问题修复
2. 升级前检查
– 升级前全面检查
– 检查升级兼容性
– 发现潜在问题
– 确保升级成功
3. 问题诊断
– 出现问题时检查
– 诊断配置问题
– 发现根本原因
– 提供修复建议
4. 硬件检查
– 检查硬件状态
– 检查磁盘状态
– 检查网络状态
– 检查电源状态
5. 性能分析
– 分析性能问题
– 检查配置问题
– 检查资源使用
– 提供优化建议
2.3 EXAchk最佳实践
Oracle EXAchk最佳实践:
- 定期运行:定期运行EXAchk进行检查
- 全面检查:检查所有相关组件
- 及时修复:及时修复发现的问题
- 跟踪问题:跟踪问题修复进度
- 归档报告:归档检查报告
Part03-生产环境项目实施方案
3.1 EXAchk配置
3.1.1 安装EXAchk
# 访问Oracle Support网站下载EXAchk
# https://support.oracle.com
# 2. 解压EXAchk
$ unzip exachk.zip -d /home/oracle/exachk
Archive: exachk.zip
inflating: /home/oracle/exachk/exachk
inflating: /home/oracle/exachk/exachk.bat
inflating: /home/oracle/exachk/README.txt
# 3. 设置权限
$ chmod +x /home/oracle/exachk/exachk
# 4. 查看EXAchk版本
$ cd /home/oracle/exachk
$ ./exachk -v
EXAchk Health Check Tool Version 19.3.0.0.0
# 5. 查看帮助信息
$ ./exachk -h
Usage: exachk [options]
Options:
-a Run all checks including best practice checks
-b Run checks for database upgrade
-c Run checks for specific components
-d Output directory for reports
-h Display help information
-o Output format (html, text, xml)
-p Profile name
-r Run specific checks
-s Silent mode
-v Display version information
# 6. 设置环境变量
$ export EXACHK_HOME=/home/oracle/exachk
$ export PATH=$EXACHK_HOME:$PATH
# 7. 配置EXAchk参数
$ vi /home/oracle/exachk/exachk.env
export EXACHK_HOME=/home/oracle/exachk
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$EXACHK_HOME:$ORACLE_HOME/bin:$PATH
# 8. 加载环境变量
$ source /home/oracle/exachk/exachk.env
3.1.2 运行EXAchk检查
$ cd /home/oracle/exachk
$ ./exachk
Checking Status of Oracle Software Stack – Clusterware, ASM, RDBMS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Oracle Stack Status
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Host Name CRS HOME RDBMS HOME ASM HOME CRS Version RDBMS Version ASM Version ASM Status RDBMS Status CRS Status
db01 /oracle/app/19c/grid /oracle/app/oracle/product/19c/dbhome_1 /oracle/app/19c/grid 19.0.0.0.0 19.0.0.0.0 19.0.0.0.0 Up Up Up
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Checking Status of Oracle Software Stack – Clusterware, ASM, RDBMS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Oracle Stack Status
Host Name CRS HOME RDBMS HOME ASM HOME CRS Version RDBMS Version ASM Version ASM Status RDBMS Status CRS Status
db01 /oracle/app/19c/grid /oracle/app/oracle/product/19c/dbhome_1 /oracle/app/19c/grid 19.0.0.0.0 19.0.0.0.0 19.0.0.0.0 Up Up Up
# 2. 运行全面检查
$ ./exachk -a
# 3. 运行数据库升级检查
$ ./exachk -b 19c
# 4. 运行特定组件检查
$ ./exachk -c database
# 5. 运行存储服务器检查
$ ./exachk -c storage
# 6. 运行网络检查
$ ./exachk -c network
# 7. 指定输出目录
$ ./exachk -a -d /home/oracle/exachk_reports
# 8. 指定输出格式
$ ./exachk -a -o html
# 9. 静默模式运行
$ ./exachk -a -s
# 10. 查看检查结果
$ ls -la /home/oracle/exachk/
total 1024
drwxr-x— 2 oracle dba 4096 Mar 31 10:00 exachk_db01_FGEDUDB_033124_100000
-rw-r—– 1 oracle dba 12345 Mar 31 10:00 exachk_db01_FGEDUDB_033124_100000.zip
# 11. 查看报告
$ cd exachk_db01_FGEDUDB_033124_100000
$ ls -la
total 2048
-rw-r—– 1 oracle dba 123456 Mar 31 10:00 exachk.html
-rw-r—– 1 oracle dba 12345 Mar 31 10:00 exachk.xml
-rw-r—– 1 oracle dba 12345 Mar 31 10:00 exachk.txt
3.2 EXAchk监控
3.2.1 配置EXAchk定期检查
$ vi /home/oracle/scripts/run_exachk.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# EXAchk定期检查脚本
export EXACHK_HOME=/home/oracle/exachk
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$EXACHK_HOME:$ORACLE_HOME/bin:$PATH
REPORT_DIR=”/home/oracle/exachk_reports”
mkdir -p $REPORT_DIR
DATE=$(date +%Y%m%d)
LOG_FILE=”$REPORT_DIR/exachk_$DATE.log”
echo “$(date): Starting EXAchk health check…” > $LOG_FILE
# 运行EXAchk
cd $EXACHK_HOME
./exachk -a -d $REPORT_DIR -s >> $LOG_FILE 2>&1
echo “$(date): EXAchk health check completed.” >> $LOG_FILE
# 发送报告
LATEST_REPORT=$(ls -t $REPORT_DIR/exachk_*.zip | head -1)
if [ -f “$LATEST_REPORT” ]; then
echo “$(date): Sending report: $LATEST_REPORT” >> $LOG_FILE
mail -s “EXAchk Health Check Report – $DATE” -a $LATEST_REPORT admin@fgedu.net.cn < $LOG_FILE
fi
# 清理旧报告(保留最近30天)
find $REPORT_DIR -name "exachk_*.zip" -type f -mtime +30 -exec rm -f {} \;
find $REPORT_DIR -name “exachk_*” -type d -mtime +30 -exec rm -rf {} \;
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/run_exachk.sh
# 3. 测试脚本
$ /home/oracle/scripts/run_exachk.sh
# 4. 设置定期检查
$ crontab -e
# 每月1日凌晨3点运行EXAchk
0 3 1 * * /home/oracle/scripts/run_exachk.sh >> /home/oracle/exachk_reports/cron.log 2>&1
3.2.2 配置EXAchk报告分析
$ vi /home/oracle/scripts/analyze_exachk.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# EXAchk报告分析脚本
REPORT_DIR=$1
if [ -z “$REPORT_DIR” ]; then
echo “Usage: $0
exit 1
fi
echo “Analyzing EXAchk report: $REPORT_DIR”
# 检查报告是否存在
if [ ! -d “$REPORT_DIR” ]; then
echo “Report directory not found: $REPORT_DIR”
exit 1
fi
# 统计问题数量
echo “”
echo “=== Problem Summary ===”
echo “Total FAILED checks: $(grep -c “FAILED” $REPORT_DIR/exachk.txt)”
echo “Total WARNING checks: $(grep -c “WARNING” $REPORT_DIR/exachk.txt)”
echo “Total INFO checks: $(grep -c “INFO” $REPORT_DIR/exachk.txt)”
# 列出失败检查
echo “”
echo “=== FAILED Checks ===”
grep “FAILED” $REPORT_DIR/exachk.txt | head -20
# 列出警告检查
echo “”
echo “=== WARNING Checks ===”
grep “WARNING” $REPORT_DIR/exachk.txt | head -20
# 生成摘要报告
SUMMARY_FILE=”$REPORT_DIR/summary.txt”
echo “EXAchk Report Summary” > $SUMMARY_FILE
echo “Generated: $(date)” >> $SUMMARY_FILE
echo “========================================” >> $SUMMARY_FILE
echo “” >> $SUMMARY_FILE
echo “Total FAILED checks: $(grep -c “FAILED” $REPORT_DIR/exachk.txt)” >> $SUMMARY_FILE
echo “Total WARNING checks: $(grep -c “WARNING” $REPORT_DIR/exachk.txt)” >> $SUMMARY_FILE
echo “Total INFO checks: $(grep -c “INFO” $REPORT_DIR/exachk.txt)” >> $SUMMARY_FILE
echo “”
echo “Summary saved to: $SUMMARY_FILE”
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/analyze_exachk.sh
# 3. 测试脚本
$ /home/oracle/scripts/analyze_exachk.sh /home/oracle/exachk/exachk_db01_FGEDUDB_033124_100000
# 4. 创建问题跟踪表
SQL> create table exachk_issues (
id number primary key,
check_date date,
check_id varchar2(100),
severity varchar2(20),
description varchar2(4000),
recommendation varchar2(4000),
status varchar2(20),
fix_date date
);
Table created.
SQL> create sequence exachk_issues_seq;
Sequence created.
3.3 EXAchk故障处理
3.3.1 EXAchk常见问题
# 错误信息
$ ./exachk
ERROR: Cannot connect to database
# 解决方案
# 1. 检查数据库状态
$ sqlplus / as sysdba
SQL> select status from v$instance;
STATUS
————
OPEN
# 2. 检查环境变量
$ echo $ORACLE_HOME
$ echo $ORACLE_SID
$ echo $PATH
# 3. 设置正确的环境变量
$ export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
$ export ORACLE_SID=FGEDUDB
$ export PATH=$ORACLE_HOME/bin:$PATH
# 4. 重新运行EXAchk
$ ./exachk
# 问题2:EXAchk权限不足
# 错误信息
$ ./exachk
ERROR: Permission denied
# 解决方案
# 1. 检查文件权限
$ ls -la /home/oracle/exachk/exachk
# 2. 设置执行权限
$ chmod +x /home/oracle/exachk/exachk
# 3. 检查目录权限
$ ls -la /home/oracle/exachk/
# 4. 使用oracle用户运行
$ whoami
oracle
# 问题3:EXAchk无法连接存储服务器
# 错误信息
$ ./exachk
ERROR: Cannot connect to storage server
# 解决方案
# 1. 检查存储服务器状态
$ dcli -g /home/oracle/cell_group -l root “cellcli -e list cell detail”
# 2. 检查网络连接
$ ping cell01
# 3. 检查SSH连接
$ ssh root@cell01 “cellcli -e list cell detail”
# 4. 重新运行EXAchk
$ ./exachk -c storage
3.3.2 EXAchk问题修复
$ cd /home/oracle/exachk/exachk_db01_FGEDUDB_033124_100000
$ cat exachk.txt
# 2. 分析失败检查
FAILED Database parameter DB_BLOCK_CHECKING value is not set as recommended
Reference: (Doc ID 1520249.1)
Recommendation: Set DB_BLOCK_CHECKING to FULL
# 3. 修复问题
SQL> show parameter db_block_checking
NAME TYPE VALUE
———————————— ———– ——————————
db_block_checking string FALSE
SQL> alter system set db_block_checking=FULL scope=spfile;
System altered.
# 4. 重启数据库
SQL> shutdown immediate;
SQL> startup;
# 5. 验证修复
SQL> show parameter db_block_checking
NAME TYPE VALUE
———————————— ———– ——————————
db_block_checking string FULL
# 6. 重新运行EXAchk验证
$ ./exachk -r “database parameter db_block_checking”
# 7. 记录修复结果
SQL> insert into exachk_issues values (
exachk_issues_seq.nextval,
sysdate,
‘DB_BLOCK_CHECKING’,
‘FAILED’,
‘Database parameter DB_BLOCK_CHECKING value is not set as recommended’,
‘Set DB_BLOCK_CHECKING to FULL’,
‘FIXED’,
sysdate
);
1 row created.
SQL> commit;
Commit complete.
Part04-生产案例与实战讲解
4.1 EXAchk分析案例
在生产环境中使用EXAchk的完整案例:
4.1.1 场景描述
某企业Exadata环境需要定期进行健康检查,使用EXAchk进行全面检查。
4.1.2 分析步骤
$ vi /home/oracle/scripts/auto_exachk.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# EXAchk自动化检查脚本
export EXACHK_HOME=/home/oracle/exachk
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$EXACHK_HOME:$ORACLE_HOME/bin:$PATH
REPORT_DIR=”/home/oracle/exachk_reports”
mkdir -p $REPORT_DIR
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE=”$REPORT_DIR/exachk_$DATE.log”
echo “========================================” > $LOG_FILE
echo “EXAchk Health Check Report” >> $LOG_FILE
echo “Date: $(date)” >> $LOG_FILE
echo “Database: $ORACLE_SID” >> $LOG_FILE
echo “========================================” >> $LOG_FILE
# 运行EXAchk
echo “” >> $LOG_FILE
echo “Running EXAchk…” >> $LOG_FILE
cd $EXACHK_HOME
./exachk -a -d $REPORT_DIR -s >> $LOG_FILE 2>&1
# 获取最新报告目录
LATEST_DIR=$(ls -td $REPORT_DIR/exachk_* | head -1)
if [ -d “$LATEST_DIR” ]; then
echo “” >> $LOG_FILE
echo “Analyzing results…” >> $LOG_FILE
# 统计问题
FAILED=$(grep -c “FAILED” $LATEST_DIR/exachk.txt 2>/dev/null || echo 0)
WARNING=$(grep -c “WARNING” $LATEST_DIR/exachk.txt 2>/dev/null || echo 0)
INFO=$(grep -c “INFO” $LATEST_DIR/exachk.txt 2>/dev/null || echo 0)
echo “” >> $LOG_FILE
echo “=== Summary ===” >> $LOG_FILE
echo “FAILED checks: $FAILED” >> $LOG_FILE
echo “WARNING checks: $WARNING” >> $LOG_FILE
echo “INFO checks: $INFO” >> $LOG_FILE
# 发送邮件
if [ $FAILED -gt 0 ] || [ $WARNING -gt 0 ]; then
mail -s “EXAchk Alert: $FAILED FAILED, $WARNING WARNING” admin@fgedu.net.cn < $LOG_FILE
fi
fi
echo "" >> $LOG_FILE
echo “EXAchk completed at $(date)” >> $LOG_FILE
# 清理旧报告
find $REPORT_DIR -name “exachk_*.zip” -type f -mtime +30 -exec rm -f {} \;
find $REPORT_DIR -name “exachk_*” -type d -mtime +30 -exec rm -rf {} \;
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/auto_exachk.sh
# 3. 测试脚本
$ /home/oracle/scripts/auto_exachk.sh
# 4. 设置定期检查
$ crontab -e
# 每月1日凌晨3点运行
0 3 1 * * /home/oracle/scripts/auto_exachk.sh >> /home/oracle/exachk_reports/cron.log 2>&1
4.2 EXAchk故障处理
在EXAchk故障处理过程中的方法和技巧:
4.2.1 故障处理流程
# 1. 运行EXAchk
$ ./exachk -a
# 2. 分析报告
$ cat exachk_db01_FGEDUDB_*/exachk.txt
# 3. 识别问题
# – FAILED: 必须修复的问题
# – WARNING: 建议修复的问题
# – INFO: 信息性问题
# 4. 制定修复计划
# – 按优先级排序
# – 评估修复风险
# – 制定回滚方案
# 5. 执行修复
# – 在测试环境验证
# – 在生产环境执行
# – 记录修复过程
# 6. 验证修复
# – 重新运行EXAchk
# – 确认问题已解决
# – 更新文档
# 示例:修复存储服务器问题
# 1. 查看问题详情
FAILED Flash cache write back mode is not enabled
Reference: (Doc ID 1520249.1)
Recommendation: Enable flash cache write back mode
# 2. 检查当前配置
$ dcli -g /home/oracle/cell_group -l root “cellcli -e list cell detail” | grep flashCacheMode
flashCacheMode: WriteThrough
# 3. 修改配置
$ dcli -g /home/oracle/cell_group -l root “cellcli -e alter cell flashCacheMode=writeback”
# 4. 验证修改
$ dcli -g /home/oracle/cell_group -l root “cellcli -e list cell detail” | grep flashCacheMode
flashCacheMode: WriteBack
# 5. 重新运行EXAchk验证
$ ./exachk -c storage
4.3 EXAchk优化
优化EXAchk配置的最佳实践:
4.3.1 优化EXAchk管理
SQL> create or replace procedure manage_exachk_results(
p_check_date in date,
p_total_failed in number,
p_total_warning in number,
p_total_info in number
) as
begin
dbms_output.put_line(‘— EXAchk Results Management —‘);
dbms_output.put_line(‘Check Date: ‘ || to_char(p_check_date, ‘YYYY-MM-DD HH24:MI:SS’));
dbms_output.put_line(‘Total FAILED: ‘ || p_total_failed);
dbms_output.put_line(‘Total WARNING: ‘ || p_total_warning);
dbms_output.put_line(‘Total INFO: ‘ || p_total_info);
— 可以扩展为记录到表中
end manage_exachk_results;
/
Procedure created.
# 2. 执行管理存储过程
SQL> set serveroutput on
SQL> exec manage_exachk_results(sysdate, 3, 8, 15);
— EXAchk Results Management —
Check Date: 2026-03-31 10:00:00
Total FAILED: 3
Total WARNING: 8
Total INFO: 15
PL/SQL procedure successfully completed.
# 3. 创建EXAchk历史表
SQL> create table exachk_history (
id number primary key,
check_date date,
total_failed number,
total_warning number,
total_info number,
report_path varchar2(4000),
notes varchar2(4000)
);
Table created.
SQL> create sequence exachk_history_seq;
Sequence created.
# 4. 记录检查历史
SQL> insert into exachk_history values (
exachk_history_seq.nextval,
sysdate,
3,
8,
15,
‘/home/oracle/exachk_reports/exachk_db01_FGEDUDB_20260331’,
‘Monthly health check’
);
1 row created.
SQL> commit;
Commit complete.
# 5. 查看检查历史趋势
SQL> column check_date format a20
SQL> select check_date, total_failed, total_warning, total_info
from exachk_history
order by check_date desc
fetch first 12 rows only;
CHECK_DATE TOTAL_FAILED TOTAL_WARNING TOTAL_INFO
——————– ———— ————– ———-
2026-03-31 10:00:00 3 8 15
2026-02-28 10:00:00 5 10 20
2026-01-31 10:00:00 8 12 25
Part05-风哥经验总结与分享
5.1 EXAchk总结
Oracle EXAchk是Exadata环境健康检查的重要工具,具有以下特点:
- Exadata专用:专门针对Exadata环境设计
- 全面检查:检查数据库、存储、网络、硬件
- 最佳实践:基于Exadata最佳实践进行检查
- 自动修复:提供自动修复脚本
- 报告生成:生成详细的检查报告
5.2 EXAchk检查清单
Oracle EXAchk检查清单:
- 定期运行:定期运行EXAchk进行检查
- 全面检查:检查所有相关组件
- 问题分类:按优先级分类问题
- 及时修复:及时修复发现的问题
- 跟踪趋势:跟踪问题趋势
- 归档报告:归档检查报告
5.3 EXAchk工具推荐
Oracle EXAchk工具推荐:
- EXAchk:Exadata健康检查工具
- ORAchk:Oracle健康检查工具
- TFA:Oracle跟踪文件分析器
- ADRCI:Oracle诊断工具
- Shell脚本:自动化检查过程
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
