本文档风哥主要介绍Oracle GoldenGate日常维护的实战操作,包括Oracle GoldenGate日常维护的概念、任务、频率、维护计划、维护操作等内容,由风哥教程参考Oracle官方文档GoldenGate文档,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 Oracle GoldenGate日常维护概念
Oracle GoldenGate日常维护是指为保证GoldenGate系统稳定、高效运行而进行的定期检查、清理、备份、优化等操作。日常维护是GoldenGate运维管理的基础工作,能够预防故障、提高性能、延长系统寿命。更多视频教程www.fgedu.net.cn
- 确保进程稳定运行
- 及时清理历史数据
- 备份重要配置
- 监控系统性能
- 预防潜在问题
1.2 Oracle GoldenGate日常维护任务
Oracle GoldenGate日常维护主要任务:
- 进程检查:检查Manager、Extract、Replicat进程状态
- 延迟监控:监控数据复制延迟情况
- Trail文件管理:清理过期Trail文件,释放存储空间
- 日志管理:归档和清理GoldenGate日志
- 配置备份:定期备份GoldenGate配置文件
- 性能监控:监控系统资源和GoldenGate性能
- 报告分析:分析进程报告,发现潜在问题
1.3 Oracle GoldenGate维护频率
Oracle GoldenGate维护任务频率规划:
– 进程状态检查:每4小时
– 延迟监控:每5分钟
– Trail文件空间检查:每天
– 错误日志检查:每天
# 周维护(Weekly)
– Trail文件清理:每周
– 报告文件归档:每周
– 配置备份:每周
– 性能趋势分析:每周
# 月维护(Monthly)
– 历史数据清理:每月
– 存储空间评估:每月
– 配置审查:每月
– 维护文档更新:每月
# 季度维护(Quarterly)
– 全面健康检查:每季度
– 容量规划评估:每季度
– 灾难恢复演练:每季度
– 维护策略优化:每季度
Part02-生产环境规划与建议
2.1 Oracle GoldenGate维护规划
Oracle GoldenGate维护规划要点:
维护责任人:
– 主维护人员:负责日常维护和故障处理
– 备份人员:在主人员不在时接管维护工作
– 审批人员:负责重要维护操作的审批
维护时间窗口:
– 日常维护:业务低峰期进行
– 周维护:周末或节假日
– 月维护:月末进行
– 紧急维护:随时响应
维护工具准备:
– GGSCI命令行工具
– 监控脚本和工具
– 备份和恢复工具
– 日志分析工具
2.2 Oracle GoldenGate维护计划
Oracle GoldenGate维护计划示例:
08:00 – 检查夜间进程状态
10:00 – 检查当前进程状态和延迟
12:00 – 检查上午运行状况
14:00 – 检查中午运行状况
16:00 – 检查下午运行状况
18:00 – 检查全天运行状况,生成日报
# 周维护计划(每周日)
02:00 – Trail文件清理
03:00 – 报告文件归档
04:00 – 配置备份
05:00 – 性能趋势分析
06:00 – 生成周报
# 月维护计划(每月最后一天)
02:00 – 历史数据清理
04:00 – 存储空间评估
06:00 – 配置审查
08:00 – 维护文档更新
10:00 – 生成月报
2.3 Oracle GoldenGate维护最佳实践
Oracle GoldenGate维护最佳实践:
- 文档化:所有维护操作都要有文档记录
- 自动化:尽量使用自动化脚本,减少人工操作
- 备份优先:任何维护操作前都要备份配置
- 变更管理:重要变更要经过审批和测试
- 监控验证:维护后要验证系统状态
- 经验积累:记录维护经验,持续优化
Part03-生产环境项目实施方案
3.1 Oracle GoldenGate日常维护操作
3.1.1 进程状态检查
GGSCI (fgedu.net.cn) 1> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXT01 00:00:00 00:00:03
EXTRACT RUNNING DP01 00:00:00 00:00:05
# 2. 检查Manager详细信息
GGSCI (fgedu.net.cn) 2> info mgr
Manager is running (IP port fgedu.net.cn.7809, Process ID 12345).
# 3. 检查Extract详细信息
GGSCI (fgedu.net.cn) 3> info extract ext01, detail
EXTRACT EXT01 Last Started 2026-04-03 08:00:00 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:03 ago)
Log Read Checkpoint Oracle Integrated Redo Logs
2026-04-03 10:00:00 SCN 12345678
# 4. 检查统计信息
GGSCI (fgedu.net.cn) 4> stats extract ext01
Sending STATS request to EXTRACT EXT01 …
Start of Statistics at 2026-04-03 10:30:00.
Extracting from FGEDU.FGEDU_ORDERS to FGEDU.FGEDU_ORDERS:
*** Total statistics since 2026-04-03 08:00:00 ***
Total inserts 10000.00
Total updates 5000.00
Total deletes 1000.00
Total operations 16000.00
3.1.2 Trail文件管理
GGSCI (fgedu.net.cn) 1> info exttrail *
Extract Trail: /oracle/goldengate/dirdat/et
Extract: EXT01
Seqno: 100
RBA: 50000000
# 2. 查看Trail文件磁盘空间
$ du -sh /oracle/goldengate/dirdat/
50G /oracle/goldengate/dirdat/
$ df -h /oracle/goldengate/
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 100G 50G 50G 50% /oracle
# 3. 清理过期Trail文件
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# cleanup_trail_daily.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
GG_HOME=”/oracle/goldengate”
TRAIL_DIR=”$GG_HOME/dirdat”
LOG_FILE=”$GG_HOME/maint/cleanup_$(date +%Y%m%d).log”
# 保留7天的Trail文件
KEEP_DAYS=7
echo “$(date): Starting Trail file cleanup” >> $LOG_FILE
# 获取当前使用的Trail序列号
CURRENT_SEQ=$(echo “info exttrail *” | $GG_HOME/ggsci | grep “Seqno” | awk ‘{print $2}’)
echo “$(date): Current Trail sequence: $CURRENT_SEQ” >> $LOG_FILE
# 删除过期Trail文件
find $TRAIL_DIR -name “et*” -mtime +$KEEP_DAYS | while read FILE; do
FILE_SEQ=$(basename $FILE | sed ‘s/et//’)
if [ $FILE_SEQ -lt $CURRENT_SEQ ]; then
echo “$(date): Deleting $FILE” >> $LOG_FILE
rm -f $FILE
fi
done
echo “$(date): Trail file cleanup completed” >> $LOG_FILE
# 4. 执行清理脚本
$ chmod +x /oracle/goldengate/maint/cleanup_trail_daily.sh
$ /oracle/goldengate/maint/cleanup_trail_daily.sh
# 5. 添加到crontab
# 0 2 * * * /oracle/goldengate/maint/cleanup_trail_daily.sh
3.1.3 日志管理
GGSCI (fgedu.net.cn) 1> view ggsevt
# 2. 查看进程报告
GGSCI (fgedu.net.cn) 2> view report ext01
# 3. 日志文件管理脚本
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# log_maintenance.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
GG_HOME=”/oracle/goldengate”
LOG_DIR=”$GG_HOME/maint/logs”
REPORT_DIR=”$GG_HOME/dirrpt”
GGS_DIR=”$GG_HOME”
# 创建日志归档目录
mkdir -p $LOG_DIR/{$(date +%Y),$(date +%Y%m)}
# 归档报告文件
echo “Archiving report files…”
find $REPORT_DIR -name “*.rpt” -mtime +7 -exec gzip {} \;
find $REPORT_DIR -name “*.rpt.gz” -mtime +30 -exec mv {} $LOG_DIR/$(date +%Y%m)/ \;
# 归档GoldenGate事件日志
echo “Archiving GoldenGate event log…”
cp $GGS_DIR/ggserr.log $LOG_DIR/$(date +%Y%m)/ggserr_$(date +%Y%m%d).log
gzip $LOG_DIR/$(date +%Y%m)/ggserr_$(date +%Y%m%d).log
# 清空当前日志(保留最近1000行)
echo “Truncating current log…”
tail -1000 $GGS_DIR/ggserr.log > $GGS_DIR/ggserr.log.tmp
mv $GGS_DIR/ggserr.log.tmp $GGS_DIR/ggserr.log
echo “Log maintenance completed”
# 4. 执行日志维护
$ /oracle/goldengate/maint/log_maintenance.sh
# 5. 添加到crontab(每周执行)
# 0 3 * * 0 /oracle/goldengate/maint/log_maintenance.sh
3.2 Oracle GoldenGate周维护操作
3.2.1 配置备份
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# backup_config.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
GG_HOME=”/oracle/goldengate”
BACKUP_DIR=”$GG_HOME/backup/config”
DATE=$(date +%Y%m%d)
# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE
# 备份参数文件
echo “Backing up parameter files…”
cp $GG_HOME/dirprm/*.prm $BACKUP_DIR/$DATE/
# 备份表定义文件
echo “Backing up table definition files…”
cp $GG_HOME/dirdef/*.def $BACKUP_DIR/$DATE/ 2>/dev/null
# 备份检查点文件
echo “Backing up checkpoint files…”
cp $GG_HOME/dirchk/* $BACKUP_DIR/$DATE/
# 备份GLOBALS文件
echo “Backing up GLOBALS file…”
cp $GG_HOME/GLOBALS $BACKUP_DIR/$DATE/ 2>/dev/null
# 备份凭据存储
echo “Backing up credential store…”
cp $GG_HOME/dircrd/* $BACKUP_DIR/$DATE/ 2>/dev/null
# 生成备份清单
echo “Generating backup manifest…”
cd $BACKUP_DIR/$DATE
find . -type f > manifest.txt
cd – > /dev/null
# 压缩备份
echo “Compressing backup…”
cd $BACKUP_DIR
tar -czf config_backup_$DATE.tar.gz $DATE/
rm -rf $DATE/
# 删除30天前的备份
echo “Cleaning up old backups…”
find $BACKUP_DIR -name “config_backup_*.tar.gz” -mtime +30 -delete
echo “Configuration backup completed: $BACKUP_DIR/config_backup_$DATE.tar.gz”
# 执行备份
$ /oracle/goldengate/maint/backup_config.sh
Backing up parameter files…
Backing up table definition files…
Backing up checkpoint files…
Backing up GLOBALS file…
Backing up credential store…
Generating backup manifest…
Compressing backup…
Cleaning up old backups…
Configuration backup completed: /oracle/goldengate/backup/config/config_backup_20260403.tar.gz
# 验证备份
$ tar -tzf /oracle/goldengate/backup/config/config_backup_20260403.tar.gz | head -20
./20260403/
./20260403/ext01.prm
./20260403/dp01.prm
./20260403/rep01.prm
./20260403/checkpoint.txt
./20260403/manifest.txt
# 添加到crontab(每周日执行)
# 0 4 * * 0 /oracle/goldengate/maint/backup_config.sh
3.2.2 性能趋势分析
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# performance_analysis.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
GG_HOME=”/oracle/goldengate”
REPORT_DIR=”$GG_HOME/maint/reports”
HISTORY_DIR=”$GG_HOME/maint/history”
mkdir -p $REPORT_DIR $HISTORY_DIR
# 收集本周性能数据
echo “Collecting performance data…”
# 获取TPS数据
echo “Extract TPS:” > $REPORT_DIR/weekly_performance_$(date +%Y%m%d).txt
GGSCI << EOF >> $REPORT_DIR/weekly_performance_$(date +%Y%m%d).txt
stats extract ext01
EOF
# 分析延迟趋势
echo -e “\nLag Trend:” >> $REPORT_DIR/weekly_performance_$(date +%Y%m%d).txt
awk -F, ‘/EXTRACT/ {print $1″,”$4}’ $HISTORY_DIR/lag_history.csv | tail -168 >> $REPORT_DIR/weekly_performance_$(date +%Y%m%d).txt
# 生成性能报告
cat > $REPORT_DIR/weekly_report_$(date +%Y%m%d).html << 'EOF'
GoldenGate Weekly Performance Report
Report Date: $(date +%Y-%m-%d)
Performance Summary
| Metric | Value | Trend |
|---|---|---|
| Average TPS | $(awk ‘/Total operations/ {sum+=$NF; count++} END {print sum/count/3600}’ $REPORT_DIR/weekly_performance_$(date +%Y%m%d).txt) | Stable |
| Average Lag | $(awk -F, ‘{sum+=$2; count++} END {print sum/count}’ $HISTORY_DIR/lag_history.csv) | Stable |
EOF
echo “Performance analysis completed”
3.3 Oracle GoldenGate月维护操作
3.3.1 历史数据清理
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# monthly_cleanup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
GG_HOME=”/oracle/goldengate”
LOG_DIR=”$GG_HOME/maint/logs”
HISTORY_DIR=”$GG_HOME/maint/history”
REPORT_DIR=”$GG_HOME/maint/reports”
# 保留3个月的历史数据
KEEP_MONTHS=3
echo “$(date): Starting monthly cleanup”
# 清理旧日志文件
echo “Cleaning old log files…”
find $LOG_DIR -name “*.log” -mtime +$((KEEP_MONTHS*30)) -delete
find $LOG_DIR -name “*.gz” -mtime +$((KEEP_MONTHS*30)) -delete
# 清理旧历史数据
echo “Cleaning old history data…”
find $HISTORY_DIR -name “*.csv” -mtime +$((KEEP_MONTHS*30)) -delete
# 清理旧报告
echo “Cleaning old reports…”
find $REPORT_DIR -name “*.html” -mtime +$((KEEP_MONTHS*30)) -delete
find $REPORT_DIR -name “*.txt” -mtime +$((KEEP_MONTHS*30)) -delete
# 清理旧备份(保留6个月)
echo “Cleaning old backups…”
find $GG_HOME/backup -name “*.tar.gz” -mtime +180 -delete
# 生成清理报告
echo “$(date): Monthly cleanup completed” >> $GG_HOME/maint/monthly_cleanup.log
# 检查磁盘空间
echo “Current disk usage:”
df -h $GG_HOME
3.3.2 配置审查
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# config_review.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
GG_HOME=”/oracle/goldengate”
REVIEW_FILE=”$GG_HOME/maint/config_review_$(date +%Y%m%d).txt”
echo “GoldenGate Configuration Review – $(date)” > $REVIEW_FILE
echo “=======================================” >> $REVIEW_FILE
# 审查进程配置
echo -e “\n1. Process Configuration:” >> $REVIEW_FILE
echo “info all” | $GG_HOME/ggsci >> $REVIEW_FILE
# 审查参数文件
echo -e “\n2. Parameter Files:” >> $REVIEW_FILE
for PARAM_FILE in $GG_HOME/dirprm/*.prm; do
echo -e “\n— $(basename $PARAM_FILE) —” >> $REVIEW_FILE
cat $PARAM_FILE >> $REVIEW_FILE
done
# 审查检查点
echo -e “\n3. Checkpoint Information:” >> $REVIEW_FILE
echo “info extract ext01, showch” | $GG_HOME/ggsci >> $REVIEW_FILE
# 审查Trail文件
echo -e “\n4. Trail File Status:” >> $REVIEW_FILE
echo “info exttrail *” | $GG_HOME/ggsci >> $REVIEW_FILE
echo “info rmttrail *” | $GG_HOME/ggsci >> $REVIEW_FILE
# 审查磁盘空间
echo -e “\n5. Disk Space Usage:” >> $REVIEW_FILE
df -h $GG_HOME >> $REVIEW_FILE
du -sh $GG_HOME/dirdat/ >> $REVIEW_FILE
# 审查日志文件
echo -e “\n6. Recent Errors:” >> $REVIEW_FILE
tail -100 $GG_HOME/ggserr.log | grep -i “error\|warning” >> $REVIEW_FILE
echo -e “\n=======================================” >> $REVIEW_FILE
echo “Review completed at $(date)” >> $REVIEW_FILE
echo “Configuration review saved to: $REVIEW_FILE”
Part04-生产案例与实战讲解
4.1 Oracle GoldenGate Trail文件清理案例
以下是一个完整的Trail文件清理案例:
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# trail_cleanup_advanced.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 场景:生产环境Trail文件占用空间过大,需要安全清理
GG_HOME=”/oracle/goldengate”
TRAIL_DIR=”$GG_HOME/dirdat”
LOG_FILE=”$GG_HOME/maint/trail_cleanup_$(date +%Y%m%d%H%M%S).log”
# 配置
KEEP_DAYS=7
DISK_THRESHOLD=80
# 记录开始时间
echo “$(date): Trail cleanup started” >> $LOG_FILE
# 1. 检查当前磁盘空间
echo “$(date): Checking disk space…” >> $LOG_FILE
DISK_USAGE=$(df -h $TRAIL_DIR | tail -1 | awk ‘{print $5}’ | sed ‘s/%//’)
echo “$(date): Current disk usage: ${DISK_USAGE}%” >> $LOG_FILE
if [ $DISK_USAGE -lt $DISK_THRESHOLD ]; then
echo “$(date): Disk usage is below threshold, cleanup not required” >> $LOG_FILE
exit 0
fi
# 2. 获取当前使用的Trail序列号
echo “$(date): Getting current trail sequences…” >> $LOG_FILE
# Extract使用的Trail
EXT_TRAILS=$(echo “info exttrail *” | $GG_HOME/ggsci | grep “Extract Trail” | awk ‘{print $3}’)
for TRAIL in $EXT_TRAILS; do
TRAIL_PREFIX=$(basename $TRAIL | sed ‘s/[0-9]*$//’)
CURRENT_SEQ=$(echo “info exttrail *” | $GG_HOME/ggsci | grep -A1 “$TRAIL” | grep “Seqno” | awk ‘{print $2}’)
echo “$(date): Trail $TRAIL_PREFIX current sequence: $CURRENT_SEQ” >> $LOG_FILE
done
# Replicat使用的Trail
REP_TRAILS=$(echo “info rmttrail *” | $GG_HOME/ggsci | grep “Rmt Trail” | awk ‘{print $3}’)
for TRAIL in $REP_TRAILS; do
TRAIL_PREFIX=$(basename $TRAIL | sed ‘s/[0-9]*$//’)
CURRENT_SEQ=$(echo “info rmttrail *” | $GG_HOME/ggsci | grep -A1 “$TRAIL” | grep “Seqno” | awk ‘{print $2}’)
echo “$(date): Trail $TRAIL_PREFIX current sequence: $CURRENT_SEQ” >> $LOG_FILE
done
# 3. 安全清理Trail文件
echo “$(date): Cleaning trail files…” >> $LOG_FILE
CLEANED_SIZE=0
CLEANED_COUNT=0
find $TRAIL_DIR -type f -name “*” -mtime +$KEEP_DAYS | while read FILE; do
FILENAME=$(basename $FILE)
FILE_SEQ=$(echo $FILENAME | grep -o ‘[0-9]*$’)
FILE_PREFIX=$(echo $FILENAME | sed ‘s/[0-9]*$//’)
# 检查文件是否还在使用
IS_ACTIVE=0
# 检查Extract使用的Trail
for TRAIL in $EXT_TRAILS; do
TRAIL_PREFIX=$(basename $TRAIL | sed ‘s/[0-9]*$//’)
if [ “$FILE_PREFIX” == “$TRAIL_PREFIX” ]; then
CURRENT_SEQ=$(echo “info exttrail *” | $GG_HOME/ggsci | grep -A1 “$TRAIL” | grep “Seqno” | awk ‘{print $2}’)
if [ $FILE_SEQ -lt $CURRENT_SEQ ]; then
IS_ACTIVE=1
fi
fi
done
# 检查Replicat使用的Trail
for TRAIL in $REP_TRAILS; do
TRAIL_PREFIX=$(basename $TRAIL | sed ‘s/[0-9]*$//’)
if [ “$FILE_PREFIX” == “$TRAIL_PREFIX” ]; then
CURRENT_SEQ=$(echo “info rmttrail *” | $GG_HOME/ggsci | grep -A1 “$TRAIL” | grep “Seqno” | awk ‘{print $2}’)
if [ $FILE_SEQ -lt $CURRENT_SEQ ]; then
IS_ACTIVE=1
fi
fi
done
# 如果文件不再使用,则删除
if [ $IS_ACTIVE -eq 1 ]; then
FILE_SIZE=$(du -k $FILE | awk ‘{print $1}’)
echo “$(date): Deleting $FILE (${FILE_SIZE}KB)” >> $LOG_FILE
rm -f $FILE
CLEANED_SIZE=$((CLEANED_SIZE + FILE_SIZE))
CLEANED_COUNT=$((CLEANED_COUNT + 1))
fi
done
echo “$(date): Cleaned $CLEANED_COUNT files, freed ${CLEANED_SIZE}KB” >> $LOG_FILE
# 4. 验证清理结果
echo “$(date): Verifying cleanup result…” >> $LOG_FILE
DISK_USAGE_AFTER=$(df -h $TRAIL_DIR | tail -1 | awk ‘{print $5}’ | sed ‘s/%//’)
echo “$(date): Disk usage after cleanup: ${DISK_USAGE_AFTER}%” >> $LOG_FILE
FREED_PERCENTAGE=$((DISK_USAGE – DISK_USAGE_AFTER))
echo “$(date): Freed ${FREED_PERCENTAGE}% disk space” >> $LOG_FILE
echo “$(date): Trail cleanup completed” >> $LOG_FILE
# 5. 发送通知
if [ $CLEANED_COUNT -gt 0 ]; then
echo “Trail cleanup completed. Cleaned $CLEANED_COUNT files, freed ${CLEANED_SIZE}KB, disk usage reduced from ${DISK_USAGE}% to ${DISK_USAGE_AFTER}%” | \
mail -s “GoldenGate Trail Cleanup Report” dba@fgedu.net.cn
fi
4.2 Oracle GoldenGate日志管理案例
以下是一个完整的日志管理案例:
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# log_management.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 场景:管理GoldenGate各类日志文件,包括归档、压缩、清理
GG_HOME=”/oracle/goldengate”
ARCHIVE_DIR=”$GG_HOME/archive/$(date +%Y)/$(date +%m)”
LOG_FILE=”$GG_HOME/maint/log_mgmt_$(date +%Y%m%d).log”
# 保留期限
REPORT_KEEP_DAYS=30
GGSERR_KEEP_DAYS=90
ARCHIVE_KEEP_DAYS=365
mkdir -p $ARCHIVE_DIR
echo “$(date): Log management started” > $LOG_FILE
# 1. 归档报告文件
echo “$(date): Archiving report files…” >> $LOG_FILE
REPORT_COUNT=0
for RPT_FILE in $GG_HOME/dirrpt/*.rpt; do
if [ -f “$RPT_FILE” ]; then
FILE_AGE=$(( ($(date +%s) – $(stat -c %Y “$RPT_FILE”)) / 86400 ))
if [ $FILE_AGE -gt 7 ]; then
gzip -c “$RPT_FILE” > “$ARCHIVE_DIR/$(basename $RPT_FILE).gz”
rm -f “$RPT_FILE”
REPORT_COUNT=$((REPORT_COUNT + 1))
fi
fi
done
echo “$(date): Archived $REPORT_COUNT report files” >> $LOG_FILE
# 2. 归档GoldenGate事件日志
echo “$(date): Archiving GoldenGate event log…” >> $LOG_FILE
if [ -f $GG_HOME/ggserr.log ]; then
# 按日期分割日志
awk -v archive_dir=”$ARCHIVE_DIR” ‘
/[0-9]{4}-[0-9]{2}-[0-9]{2}/ {
date = $1
gsub(/-/, “”, date)
outfile = archive_dir “/ggserr_” date “.log”
print >> outfile
}
‘ $GG_HOME/ggserr.log
# 清空当前日志(保留最近1000行)
tail -1000 $GG_HOME/ggserr.log > $GG_HOME/ggserr.log.tmp
mv $GG_HOME/ggserr.log.tmp $GG_HOME/ggserr.log
echo “$(date): GoldenGate event log archived” >> $LOG_FILE
fi
# 3. 压缩归档文件
echo “$(date): Compressing archive files…” >> $LOG_FILE
find $ARCHIVE_DIR -name “*.log” -type f | while read FILE; do
gzip $FILE
done
echo “$(date): Archive files compressed” >> $LOG_FILE
# 4. 清理过期归档
echo “$(date): Cleaning old archives…” >> $LOG_FILE
ARCHIVE_CLEANED=$(find $GG_HOME/archive -name “*.gz” -mtime +$ARCHIVE_KEEP_DAYS -delete -print | wc -l)
echo “$(date): Cleaned $ARCHIVE_CLEANED old archive files” >> $LOG_FILE
# 5. 清理过期报告
echo “$(date): Cleaning old reports…” >> $LOG_FILE
REPORT_CLEANED=$(find $ARCHIVE_DIR -name “*.rpt.gz” -mtime +$REPORT_KEEP_DAYS -delete -print | wc -l)
echo “$(date): Cleaned $REPORT_CLEANED old report files” >> $LOG_FILE
# 6. 生成管理报告
echo “$(date): Generating management report…” >> $LOG_FILE
cat > $GG_HOME/maint/log_mgmt_report_$(date +%Y%m%d).txt << EOF GoldenGate Log Management Report ================================ Date: $(date) Operations Performed: 1. Archived $REPORT_COUNT report files 2. Archived GoldenGate event log 3. Compressed archive files 4. Cleaned $ARCHIVE_CLEANED old archive files 5. Cleaned $REPORT_CLEANED old report files Current Storage Status: $(du -sh $GG_HOME/archive/) $(du -sh $GG_HOME/dirrpt/) $(df -h $GG_HOME) Next Scheduled Maintenance: $(date -d "+7 days" +%Y-%m-%d) EOF echo "$(date): Log management completed" >> $LOG_FILE
4.3 Oracle GoldenGate配置备份案例
以下是一个完整的配置备份案例:
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# config_backup_advanced.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 场景:完整的GoldenGate配置备份,包括本地和远程备份
GG_HOME=”/oracle/goldengate”
BACKUP_DIR=”$GG_HOME/backup”
REMOTE_BACKUP_SERVER=”backup.fgedu.net.cn”
REMOTE_BACKUP_PATH=”/backup/goldengate”
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME=”gg_config_backup_$DATE”
# 创建备份目录
mkdir -p $BACKUP_DIR/$BACKUP_NAME/{prm,def,chk,crd,sql,reports}
echo “$(date): Starting GoldenGate configuration backup”
# 1. 备份参数文件
echo “$(date): Backing up parameter files…”
cp $GG_HOME/dirprm/*.prm $BACKUP_DIR/$BACKUP_NAME/prm/ 2>/dev/null
# 2. 备份表定义文件
echo “$(date): Backing up table definition files…”
cp $GG_HOME/dirdef/*.def $BACKUP_DIR/$BACKUP_NAME/def/ 2>/dev/null
# 3. 备份检查点文件
echo “$(date): Backing up checkpoint files…”
cp $GG_HOME/dirchk/* $BACKUP_DIR/$BACKUP_NAME/chk/ 2>/dev/null
# 4. 备份凭据存储
echo “$(date): Backing up credential store…”
cp $GG_HOME/dircrd/* $BACKUP_DIR/$BACKUP_NAME/crd/ 2>/dev/null
# 5. 备份SQL脚本
echo “$(date): Backing up SQL scripts…”
cp $GG_HOME/dirsql/*.sql $BACKUP_DIR/$BACKUP_NAME/sql/ 2>/dev/null
# 6. 备份GLOBALS文件
echo “$(date): Backing up GLOBALS file…”
cp $GG_HOME/GLOBALS $BACKUP_DIR/$BACKUP_NAME/ 2>/dev/null
# 7. 备份进程报告
echo “$(date): Backing up process reports…”
cp $GG_HOME/dirrpt/*.rpt $BACKUP_DIR/$BACKUP_NAME/reports/ 2>/dev/null
# 8. 导出进程配置信息
echo “$(date): Exporting process configuration…”
{
echo “GoldenGate Process Configuration Export”
echo “Export Date: $(date)”
echo “======================================”
echo “”
echo “Manager Configuration:”
echo “info mgr” | $GG_HOME/ggsci
echo “”
echo “Extract Configuration:”
echo “info extract *” | $GG_HOME/ggsci
echo “”
echo “Replicat Configuration:”
echo “info replicat *” | $GG_HOME/ggsci
echo “”
echo “Trail Configuration:”
echo “info exttrail *” | $GG_HOME/ggsci
echo “info rmttrail *” | $GG_HOME/ggsci
} > $BACKUP_DIR/$BACKUP_NAME/process_config.txt
# 9. 生成备份清单
echo “$(date): Generating backup manifest…”
{
echo “GoldenGate Configuration Backup Manifest”
echo “Backup Date: $(date)”
echo “Backup Name: $BACKUP_NAME”
echo “======================================”
echo “”
echo “Contents:”
find $BACKUP_DIR/$BACKUP_NAME -type f | sort
echo “”
echo “File Count: $(find $BACKUP_DIR/$BACKUP_NAME -type f | wc -l)”
echo “Total Size: $(du -sh $BACKUP_DIR/$BACKUP_NAME | awk ‘{print $1}’)”
} > $BACKUP_DIR/$BACKUP_NAME/MANIFEST.txt
# 10. 压缩备份
echo “$(date): Compressing backup…”
cd $BACKUP_DIR
tar -czf ${BACKUP_NAME}.tar.gz $BACKUP_NAME/
rm -rf $BACKUP_NAME/
# 11. 计算校验和
echo “$(date): Calculating checksum…”
cd $BACKUP_DIR
md5sum ${BACKUP_NAME}.tar.gz > ${BACKUP_NAME}.tar.gz.md5
sha256sum ${BACKUP_NAME}.tar.gz > ${BACKUP_NAME}.tar.gz.sha256
# 12. 传输到远程备份服务器
echo “$(date): Transferring to remote backup server…”
scp $BACKUP_DIR/${BACKUP_NAME}.tar.gz $REMOTE_BACKUP_SERVER:$REMOTE_BACKUP_PATH/
scp $BACKUP_DIR/${BACKUP_NAME}.tar.gz.md5 $REMOTE_BACKUP_SERVER:$REMOTE_BACKUP_PATH/
scp $BACKUP_DIR/${BACKUP_NAME}.tar.gz.sha256 $REMOTE_BACKUP_SERVER:$REMOTE_BACKUP_PATH/
# 13. 验证远程备份
ssh $REMOTE_BACKUP_SERVER “cd $REMOTE_BACKUP_PATH && md5sum -c ${BACKUP_NAME}.tar.gz.md5”
if [ $? -eq 0 ]; then
echo “$(date): Remote backup verified successfully”
else
echo “$(date): WARNING – Remote backup verification failed”
fi
# 14. 清理本地旧备份(保留30天)
echo “$(date): Cleaning up old local backups…”
find $BACKUP_DIR -name “gg_config_backup_*.tar.gz” -mtime +30 -delete
find $BACKUP_DIR -name “gg_config_backup_*.tar.gz.*” -mtime +30 -delete
# 15. 生成备份报告
cat > $BACKUP_DIR/backup_report_$(date +%Y%m%d).txt << EOF
GoldenGate Configuration Backup Report
======================================
Backup Date: $(date)
Backup Name: $BACKUP_NAME
Backup Size: $(du -sh $BACKUP_DIR/${BACKUP_NAME}.tar.gz | awk '{print $1}')
Backup Location: $BACKUP_DIR/${BACKUP_NAME}.tar.gz
Remote Location: $REMOTE_BACKUP_SERVER:$REMOTE_BACKUP_PATH/${BACKUP_NAME}.tar.gz
MD5 Checksum: $(cat $BACKUP_DIR/${BACKUP_NAME}.tar.gz.md5 | awk '{print $1}')
SHA256 Checksum: $(cat $BACKUP_DIR/${BACKUP_NAME}.tar.gz.sha256 | awk '{print $1}')
Status: SUCCESS
Next Backup: $(date -d "+7 days" +%Y-%m-%d)
EOF
echo "$(date): Configuration backup completed successfully"
echo "Backup file: $BACKUP_DIR/${BACKUP_NAME}.tar.gz"
Part05-风哥经验总结与分享
5.1 Oracle GoldenGate维护总结
Oracle GoldenGate日常维护的关键要点:
- 规范化:建立规范的维护流程和操作手册
- 自动化:使用自动化脚本减少人工操作
- 文档化:记录所有维护操作和结果
- 预防性:通过维护预防故障发生
- 持续性:维护工作要持续进行,不能中断
5.2 Oracle GoldenGate维护检查清单
Oracle GoldenGate维护检查清单:
□ 检查Manager进程状态
□ 检查Extract进程状态
□ 检查Replicat进程状态
□ 监控复制延迟
□ 检查Trail文件空间
□ 检查错误日志
□ 记录维护日志
# 周维护检查清单
□ 清理过期Trail文件
□ 归档报告文件
□ 备份配置文件
□ 分析性能趋势
□ 生成维护报告
# 月维护检查清单
□ 清理历史数据
□ 评估存储空间
□ 审查配置变更
□ 更新维护文档
□ 进行容量规划
5.3 Oracle GoldenGate维护自动化
Oracle GoldenGate维护自动化建议:
- 定时任务:使用crontab设置定时维护任务
- 监控脚本:编写自动化监控脚本
- 告警集成:集成邮件、短信、钉钉告警
- 报告生成:自动生成维护报告
- 日志管理:自动归档和清理日志
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
