**## 第一步:停止Oracle端的GoldenGate进程
# 切换到Oracle用户
su - oracle
# 进入GoldenGate目录
cd /usr/local/ggs_oracle
# 启动GGSCI
./ggsci
在GGSCI中执行:
-- 查看当前状态
INFO ALL
-- 停止投递进程
STOP EXTRACT PORA1
-- 停止管理器
STOP MANAGER
-- 再次确认状态
INFO ALL
-- 退出GGSCI
EXIT
预期输出:
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER STOPPED
EXTRACT ABENDED EORA1 00:00:00 12160:55:58
EXTRACT STOPPED PORA1 00:00:00 00:00:00
第二步:停止MySQL端的GoldenGate进程
# 连接到MySQL服务器(如果需要)
# ssh到MySQL服务器,或者如果当前就是MySQL服务器:
# 进入MySQL GoldenGate目录
cd /usr/local/ggs_mysql # 或者相应的MySQL GG目录
# 启动GGSCI
./ggsci
在GGSCI中执行:
-- 查看当前状态
INFO ALL
-- 停止复制进程(如果运行的话)
STOP REPLICAT RFROM135
-- 停止管理器
STOP MANAGER
-- 确认状态
INFO ALL
-- 退出
EXIT
第三步:清理Oracle端的GoldenGate跟踪文件
# 回到Oracle服务器
cd /usr/local/ggs_oracle
# 检查当前跟踪文件大小
du -sh dirdat/
ls -l dirdat/ | wc -l
# 清理3天前的跟踪文件(保留最近3天)
find dirdat/ -type f -mtime +3 -exec ls -lh {} \; | wc -l # 先查看要删除的文件数量
find dirdat/ -type f -mtime +3 -delete # 实际删除
# 或者更激进的清理(保留最近1天)
find dirdat/ -type f -mtime +1 -delete
# 检查清理结果
du -sh dirdat/
ls -l dirdat/ | wc -l
第四步:清理MySQL端的GoldenGate跟踪文件
# 在MySQL服务器上执行
cd /usr/local/ggs_mysql # 或相应的MySQL GG目录
# 清理跟踪文件
find dirdat/ -type f -mtime +3 -delete
# 或者
find dirdat/ -type f -mtime +1 -delete
第五步:清理Oracle数据库归档日志
# 回到Oracle服务器,使用RMAN清理
rman target /
# 在RMAN中执行清理
RUN {
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-3';
DELETE NOPROMPT OBSOLETE;
}
# 退出RMAN
EXIT
第六步:检查空间释放情况
# 检查根分区空间
df -h /
# 检查各目录大小
du -sh /u01/app/oracle/oradata/archivelog/
du -sh /usr/local/ggs_oracle/dirdat/
du -sh /u01/app/oracle/fast_recovery_area/
# 如果有MySQL服务器,也检查
du -sh /usr/local/ggs_mysql/dirdat/
第七步:可选 - 清理其他临时文件
# 清理Oracle诊断文件
find /u01/app/oracle/diag -name "*.trc" -mtime +7 -delete
find /u01/app/oracle/diag -name "*.trm" -mtime +7 -delete
# 清理core dump文件
find /u01 -name "core*" -type f -delete
第八步:验证清理结果
# 最终空间检查
df -h
# 检查关键目录
du -sh /u01/app/oracle/oradata/archivelog/
du -sh /usr/local/ggs_oracle/dirdat/
# 检查是否还有大文件
find /u01 -type f -size +100M -exec ls -lh {} \; 2>/dev/null | head -10
预期清理效果
- GoldenGate跟踪文件:可能释放几GB到几十GB
- 归档日志:可能释放几十GB到几百GB
- 总释放空间:应该能让根分区使用率从100%降到安全水平
注意事项
- 执行顺序:严格按照上述步骤执行
- 备份确认:确保已有有效备份后再清理
- 业务影响:GoldenGate停止期间数据同步会中断
- 监控:清理后监控空间使用情况**
运维
OGG进程启动顺序原则
#总原则:先启动目标端,再启动源端;先启动Manager,再启动工作进程。
目标端MANAGER → 目标端REPLICAT → 源端MANAGER → 源端EXTRACT → 源端DATA PUMP
第一步:启动目标端(MySQL端)的OGG
cd /usr/local/ggs_mysql
./ggsci
GGSCI> START MANAGER
GGSCI> INFO MANAGER
# 确认状态为 RUNNING
1.2 启动目标端的Replicat进程
GGSCI> START REPLICAT RFROM135
GGSCI> INFO REPLICAT RFROM135
# 确认状态为 RUNNING
1.3 查看目标端整体状态
GGSCI> INFO ALL
GGSCI (yz-yf-mysql) 11> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING RFROM135 00:00:00 00:00:02
第二步:修复源端(Oracle端)的OGG问题
2.1 登录源端服务器,先查看错误信息
cd /usr/local/ggs_oracle
./ggsci
GGSCI> INFO ALL
GGSCI> VIEW REPORT EORA1
#重点查看EORA1进程的错误报告最后几行,找到ABENDED的原因。
2.2 常见错误及修复方法
第三步:启动源端(Oracle端)的OGG
3.1 启动源端Manager
GGSCI> START MANAGER
GGSCI> INFO MANAGER
3.2 启动初始抽取进程EORA1(修复错误后)
GGSCI> START ERORA1
GGSCI> INFO ERORA1
# 确认状态为 RUNNING
3.3 启动Data Pump进程PORA1
GGSCI> START PORA1
GGSCI> INFO PORA1
# 确认状态为 RUNNING
3.4 查看源端整体状态
GGSCI> INFO ALL
添加新表
1.添加oracle 表
-- 连接到Oracle源库
SQL> CREATE TABLE gg_test_table (
id NUMBER PRIMARY KEY,
name VARCHAR2(50),
create_date DATE DEFAULT SYSDATE,
amount NUMBER(10,2)
);
-- 插入初始测试数据
SQL> INSERT INTO gg_test_table (id, name, amount) VALUES (1, 'OGG同步测试', 100.50);
SQL> COMMIT;
#开启表的补充日志
ALTER TABLE B2B.GG_TEST_TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
2.mysql中添加表
-- 连接到MySQL目标库
MySQL> CREATE TABLE gg_test_table (
id INT PRIMARY KEY,
name VARCHAR(50),
create_date DATETIME,
amount DECIMAL(10,2)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.配置OGG提取进程(EORA1)
GGSCI> VIEW PARAMS EORA1
#添加测试表到抽取配置
GGSCI> EDIT PARAMS EORA1
#添加表映射(如果已有TABLE语句,追加在最后):
table b2b.gg_test_table;
4.配置OGG投递进程(如果使用Pump)
GGSCI> EDIT PARAMS PORA1
# 在文件末尾添加:table b2b.gg_test_table;
5.创建DEFGEN参数文件
GGSCI> EDIT PARAMS defgen_b2b_update
#输入内容
DEFSFILE ./dirdef/eora1.def
USERID ggs, PASSWORD ggs
TABLE B2B.ORDER_INFO;
TABLE B2B.ORDER_DETAIL0;
TABLE B2B.PRODUCT_MAIN;
TABLE B2B.USERS;
TABLE B2B.BUYERINFO;
TABLE B2B.SUPPLY;
TABLE B2B.AREAINFO;
TABLE B2B.BI_STORE;
TABLE B2B.RELATION_AREASTORAGE;
TABLE B2B.PRODUCT_BRAND;
TABLE B2B.CRM_COMPANY_INFO;
TABLE B2B.CRM_CONTACTS_INFO;
TABLE B2B.BUYER_TAG_INFO;
TABLE B2B.GG_TEST_TABLE;
6.执行DEFGEN
./defgen paramfile dirprm/defgen_b2b_update.prm
#DEFGEN的工作原理,DEFGEN工具会读取defgen_b2b_update.prm文件中的配置, 连接到数据库获取表结构,使用USERID ggs, PASSWORD ggs连接到Oracle数据库,查询B2B.GG_TEST_TABLE的表结构(列名、数据类型、长度等),获取所有其他指定表的表结构,生成完整的定义文件,DEFGEN会创建一个包含所有指定表结构的新文件,覆盖./dirdef/eora1.def文件,包含15张表的完整结构定义,包括新添加的B2B.GG_TEST_TABLE
7.传输定义文件(RFROM135继续运行)
scp dirdef/eora1.def oracle@192.168.114.136:/usr/local/ggs_mysql/dirdef/
# 2. 检查MySQL端定义文件
ssh oracle@192.168.114.136 "grep -i gg_test_table /usr/local/ggs_mysql/dirdef/eora1.def"
8.目标服务器需要执行的操作(mysql服务器)
#检查RFROM135配置(进程继续运行)
GGSCI> VIEW PARAMS RFROM135 | grep -i gg_test_table
#在RFROM135中添加测试表映射
GGSCI>EDIT PARAMS RFROM135
#在文件末尾添加:
MAP b2b.gg_test_table, TARGET market_yufa.gg_test_table;
#重启RFROM135使配置生效
GGSCI> STOP REPLICAT RFROM135
GGSCI> START REPLICAT RFROM135
#再次检查RFROM135配置
GGSCI> VIEW PARAMS RFROM135 | grep -i gg_test_table
9.检查同步状态
-- 在Oracle源库执行
SQL> INSERT INTO B2B.GG_TEST_TABLE (id, name, amount) VALUES (300, 'PORA1修复测试', 777.00);
SQL> COMMIT;
# Oracle端检查抽取
GGSCI> STATS EXTRACT EORA1, TABLE b2b.gg_test_table
# MySQL端检查复制
GGSCI> STATS REPLICAT RFROM135, TABLE b2b.gg_test_table
# 检查延迟
GGSCI> LAG EXTRACT PORA1
GGSCI> LAG REPLICAT RFROM135
-- 在MySQL目标库查询
MySQL> SELECT * FROM market_yufa.gg_test_table ORDER BY id;
10.oracle 服务器需要重启同步任务
# 1. 重启进程
GGSCI> STOP EXTRACT EORA1
GGSCI> STOP EXTRACT PORA1
GGSCI> START EXTRACT EORA1
GGSCI> START EXTRACT PORA1
# 2. 验证配置
GGSCI> VIEW REPORT EORA1 |grep "gg_test_table"
GGSCI> VIEW REPORT PORA1 |grep "gg_test_table"
# 3. 测试同步