Linux下Oracle GoldenGate(OGG)的配置
2016-05-16 00:00
721 查看
首先解压下载的OGG软件,并授权:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/cdf4dda0762463ed337fce7b1352ed1a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/1031ff98c90ed1372abf31e339ddfa62.png)
之后,设置必要变量
注意修改ORACLE_SID,ORACLE_HOME,LD_LIBRARY_PATH变量值
[oracle@upgg ~]$ cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export ORACLE_BASE=/u01/oracle
export ORACLE_HOME=/u01/oracle/11g
export GG_HOME=/u01/goldengate/112101
PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GG_HOME:$LD_LIBRARY_PATH
export ORACLE_SID=updb
export PATH
然后source ~/.bash_profile使之生效
初始化GG
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/8b99a47dc452da0d29591bb82e209d22.png)
这样就OK了呀,然后就是数据库的一些配置了:
1. 归档
GoldenGate 的原理是基于对日志变化的捕获(CDC )。所以 Oracle 的 redo 对于GoldenGate 至关重要。为了保证 GoldenGate 能读取到完整的事务日志,必须打开归档。
在数据库负载较大的情况下,redo 会频繁切换日志组,我们知道,Redo 日志组在 Oracle 中有限且会被重复利用的。如果打开归档,被切换过的 redo log 就会被归档为 archive log,这样即使一个事务过长,等到提交的时候,部分可能已经归档,这时 GoldenGate 就会到 archive log 中查找对应的记录,从而保证了信息的完整性。
Oracle 10g /11g 版本的 Oracle 打开归档较简单:首先,在使用 sysdba 用户登录在SQLPLUS 下执行以下命令,确认归档是否已经开启:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/3bc6ecf2d80e7e63ae8fb02619c4accd.png)
如上结果表述已经运行在归档模式下,不需要任何处理。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/679f4feffb9cdb023f170d67a267ef5d.png)
看到如上结果的,表述运行非归档模式下,则执行如下命令:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/dcca87d1e1d161ff508888551b0b2978.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/8f17d5752533bd94dc38ecffe0d89203.png)
下面的步骤是可选的,不配置GG在使用中将出现如下警告信息:
WARNING OGG-01423 No valid default archive log destination directory found for thread 1.
我的习惯不想看到这个警告,所以做如下操作:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/33cc0fd1e073d050be54ff3e29188436.png)
2. 附加日志
当数据库启用了Supplemental Logging之后,对于修改操作,Oracle就会同时附加一些能够唯一标识修改记录的列到redo log中,如果这个表是有主键或唯一键的表,只需要附加主键或唯一键的信息即可,这样生成的redo日志量是最少的,如果某些表可能无法创建主键或者唯一键,抑或数据表本来不存在主键/唯一键,这种情况下Oracle会将所有列都做为附加信息记录到redo中,那么redo就可能增长很快,同时对性能产生较大的负面影响。所以Oracle 建议所有需要复制的表都存在主键或者唯一键。Supplemental Logging可以在数据库级设置,也可以精确到表级设置,对于数据库级有两种类型:minimal logging和identification key logging,其主要区别就在于写入redolog中的数据详尽程度不同。
从上述分析可以得出:GoldenGate要准确的知道源端的数据修改了哪些列,就需要更为详细的日志信息,所以需要数据库开启supplemental log。可以按照下列方式打开数据库级别的supplemental log。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/520baf0375ff1d88457b7b49dcebd8b4.png)
确认附加日志是否打开
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/2a858077862ca50af6c7b57c6fa00620.png)
返回YES或IMPLICIT表示附加日志被打开。
3. 回收站
在gg 11之前版本需要关闭回收站才能完成DDL同步
在gg 11 版本开始可以开启回收站也能完成DDL同步
SQL> select value from v$parameter where name='recyclebin';
VALUE
--------------------------------------------------------------------------------
on
on 表示开启回收站
off 表示关闭回收站
关闭回收站
SQL> alter system set recyclebin=off scope=spfile;
System altered.
如果你不配置DDL同步的本步骤可以不做
Recyclebin 在 10.1 中是隐含参数,关掉 recyclebin 的命令为:
SQL>ALTER SYSTEM SET “_ recyclebin” = false;
4. GG软件用户设置
gg用户有2种:
管理用户
管理用户是管理,维护GG软件的用户,此用户必须在后台数据库建立起来,并分配必要的权限。管理用户需要在原数据端建立,也需要在目标数据端建立。而原数据端与目标数据端需要的权限最小化也不相同。为了方便可以授予dba权限,甚至不建立管理用户,直接使用system用户。
数据用户
数据用户是gg运行中数据加载,数据同步的用户。比如需要将scott用户数据加载与同步到s1用户下。scott为原数据端用户,s1为目标数据端用户。数据用户存在就可以了,但管理用户必须有相应操作数据用户的权限。 比如原数据端管理用户至少有查询,修改,闪回数据用户对象的权限,目标数据端管理用户至少需要dml操作数据用户的权限.
在源端和目标端创建 GoldenGate 管理用户,并授予下列权限。
SQL>create tablespace ggdata datafile '$ORACLE_BASE/oradata/$ORACLE_SID/ggdata01.dbf' size 200m;
SQL>create userggs identified by ggm default tablespace ggdata;
SQL>grant connect,resource,unlimited tablespace to ggm ; SQL>grant execute on utl_file to ggm;
在源端还需要授予 ggm 用户以下权限:
SQL>grant connect,resource to ggm ;
SQL>grant select any dictionary,select any table to ggm;
SQL>grant alter any table to ggm;
SQL>grant flashback any table to ggm;
SQL>grant execute on DBMS_FLAHBACK TO ggm;
在目标端需要授予 ggm 用户以下权限:
grant insert any table to ggm;
grant delete any table to ggm;
grant update any table to ggm;
上面的 insert、delete、update 没有指定模式,表示在所有模式都能进行 insert、 delete、update 操作。
原数据端用户设置 略
目标数据端用户设置 略
5. 添加表级的transdata
这里的表级的 trandata 就是指表级的 supplemental log。
表级supplemental log 需要在数据库级别最小supplemental log 打开的情况下才起作用。如果数据库没有开启 minimal supplemental log,即使指定了表级supplemental log,实际在redo log 输出描述的记录仍只记录rowid和相关列值,所以我们还需要同时开启表级的transadata。添加表级的 transdat 可以理解为你需要将源端的哪些schema下的哪些表传输到目标库中,那么就需要你手动添加这些transdata。按照上一小节的内容创建GoldenGate管理用户并授予必要的权限之后,就可以使用dblogin 登录数据库,然后添加特定表的trandata。
操作步骤如下:
在 scott 用户下创建一张表 demo,用来作为需要同步的表:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/fa9a50b4728b3c56e4eb1a051d922f3b.jpg)
对这个表添加 trandata:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/7785fb6e80e6603b271317d47bef0139.jpg)
提示:在对表添加 trandata 的时候,表名可以使用通配符。例如如果我要添加 scott 用户下所有的表,则语句可以这样写:
GGSCI(source 4) add trandata scott.*;
查看表有没有附加日志:
GGSCI(source 5) info trandata scott.*;
enabled 表示开启附加日志
disabled 表示没开启附加日志
当然也可以在oracle中执行sql命令增加附加日志
SQL> alter table t1 add supplemental log data(all) columns;
更多精彩Oracle内容 请关注我:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/cdf4dda0762463ed337fce7b1352ed1a.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/1031ff98c90ed1372abf31e339ddfa62.png)
之后,设置必要变量
注意修改ORACLE_SID,ORACLE_HOME,LD_LIBRARY_PATH变量值
[oracle@upgg ~]$ cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export ORACLE_BASE=/u01/oracle
export ORACLE_HOME=/u01/oracle/11g
export GG_HOME=/u01/goldengate/112101
PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GG_HOME:$LD_LIBRARY_PATH
export ORACLE_SID=updb
export PATH
然后source ~/.bash_profile使之生效
初始化GG
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/8b99a47dc452da0d29591bb82e209d22.png)
这样就OK了呀,然后就是数据库的一些配置了:
1. 归档
GoldenGate 的原理是基于对日志变化的捕获(CDC )。所以 Oracle 的 redo 对于GoldenGate 至关重要。为了保证 GoldenGate 能读取到完整的事务日志,必须打开归档。
在数据库负载较大的情况下,redo 会频繁切换日志组,我们知道,Redo 日志组在 Oracle 中有限且会被重复利用的。如果打开归档,被切换过的 redo log 就会被归档为 archive log,这样即使一个事务过长,等到提交的时候,部分可能已经归档,这时 GoldenGate 就会到 archive log 中查找对应的记录,从而保证了信息的完整性。
Oracle 10g /11g 版本的 Oracle 打开归档较简单:首先,在使用 sysdba 用户登录在SQLPLUS 下执行以下命令,确认归档是否已经开启:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/3bc6ecf2d80e7e63ae8fb02619c4accd.png)
如上结果表述已经运行在归档模式下,不需要任何处理。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/679f4feffb9cdb023f170d67a267ef5d.png)
看到如上结果的,表述运行非归档模式下,则执行如下命令:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/dcca87d1e1d161ff508888551b0b2978.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/8f17d5752533bd94dc38ecffe0d89203.png)
下面的步骤是可选的,不配置GG在使用中将出现如下警告信息:
WARNING OGG-01423 No valid default archive log destination directory found for thread 1.
我的习惯不想看到这个警告,所以做如下操作:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/33cc0fd1e073d050be54ff3e29188436.png)
2. 附加日志
当数据库启用了Supplemental Logging之后,对于修改操作,Oracle就会同时附加一些能够唯一标识修改记录的列到redo log中,如果这个表是有主键或唯一键的表,只需要附加主键或唯一键的信息即可,这样生成的redo日志量是最少的,如果某些表可能无法创建主键或者唯一键,抑或数据表本来不存在主键/唯一键,这种情况下Oracle会将所有列都做为附加信息记录到redo中,那么redo就可能增长很快,同时对性能产生较大的负面影响。所以Oracle 建议所有需要复制的表都存在主键或者唯一键。Supplemental Logging可以在数据库级设置,也可以精确到表级设置,对于数据库级有两种类型:minimal logging和identification key logging,其主要区别就在于写入redolog中的数据详尽程度不同。
从上述分析可以得出:GoldenGate要准确的知道源端的数据修改了哪些列,就需要更为详细的日志信息,所以需要数据库开启supplemental log。可以按照下列方式打开数据库级别的supplemental log。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/520baf0375ff1d88457b7b49dcebd8b4.png)
确认附加日志是否打开
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/2a858077862ca50af6c7b57c6fa00620.png)
返回YES或IMPLICIT表示附加日志被打开。
3. 回收站
在gg 11之前版本需要关闭回收站才能完成DDL同步
在gg 11 版本开始可以开启回收站也能完成DDL同步
SQL> select value from v$parameter where name='recyclebin';
VALUE
--------------------------------------------------------------------------------
on
on 表示开启回收站
off 表示关闭回收站
关闭回收站
SQL> alter system set recyclebin=off scope=spfile;
System altered.
如果你不配置DDL同步的本步骤可以不做
Recyclebin 在 10.1 中是隐含参数,关掉 recyclebin 的命令为:
SQL>ALTER SYSTEM SET “_ recyclebin” = false;
4. GG软件用户设置
gg用户有2种:
管理用户
管理用户是管理,维护GG软件的用户,此用户必须在后台数据库建立起来,并分配必要的权限。管理用户需要在原数据端建立,也需要在目标数据端建立。而原数据端与目标数据端需要的权限最小化也不相同。为了方便可以授予dba权限,甚至不建立管理用户,直接使用system用户。
数据用户
数据用户是gg运行中数据加载,数据同步的用户。比如需要将scott用户数据加载与同步到s1用户下。scott为原数据端用户,s1为目标数据端用户。数据用户存在就可以了,但管理用户必须有相应操作数据用户的权限。 比如原数据端管理用户至少有查询,修改,闪回数据用户对象的权限,目标数据端管理用户至少需要dml操作数据用户的权限.
在源端和目标端创建 GoldenGate 管理用户,并授予下列权限。
SQL>create tablespace ggdata datafile '$ORACLE_BASE/oradata/$ORACLE_SID/ggdata01.dbf' size 200m;
SQL>create userggs identified by ggm default tablespace ggdata;
SQL>grant connect,resource,unlimited tablespace to ggm ; SQL>grant execute on utl_file to ggm;
在源端还需要授予 ggm 用户以下权限:
SQL>grant connect,resource to ggm ;
SQL>grant select any dictionary,select any table to ggm;
SQL>grant alter any table to ggm;
SQL>grant flashback any table to ggm;
SQL>grant execute on DBMS_FLAHBACK TO ggm;
在目标端需要授予 ggm 用户以下权限:
grant insert any table to ggm;
grant delete any table to ggm;
grant update any table to ggm;
上面的 insert、delete、update 没有指定模式,表示在所有模式都能进行 insert、 delete、update 操作。
原数据端用户设置 略
目标数据端用户设置 略
5. 添加表级的transdata
这里的表级的 trandata 就是指表级的 supplemental log。
表级supplemental log 需要在数据库级别最小supplemental log 打开的情况下才起作用。如果数据库没有开启 minimal supplemental log,即使指定了表级supplemental log,实际在redo log 输出描述的记录仍只记录rowid和相关列值,所以我们还需要同时开启表级的transadata。添加表级的 transdat 可以理解为你需要将源端的哪些schema下的哪些表传输到目标库中,那么就需要你手动添加这些transdata。按照上一小节的内容创建GoldenGate管理用户并授予必要的权限之后,就可以使用dblogin 登录数据库,然后添加特定表的trandata。
操作步骤如下:
在 scott 用户下创建一张表 demo,用来作为需要同步的表:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/fa9a50b4728b3c56e4eb1a051d922f3b.jpg)
对这个表添加 trandata:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/29/7785fb6e80e6603b271317d47bef0139.jpg)
提示:在对表添加 trandata 的时候,表名可以使用通配符。例如如果我要添加 scott 用户下所有的表,则语句可以这样写:
GGSCI(source 4) add trandata scott.*;
查看表有没有附加日志:
GGSCI(source 5) info trandata scott.*;
enabled 表示开启附加日志
disabled 表示没开启附加日志
当然也可以在oracle中执行sql命令增加附加日志
SQL> alter table t1 add supplemental log data(all) columns;
更多精彩Oracle内容 请关注我:
相关文章推荐
- Oracle的rownum原理和使用(分页相关)
- 分页总结
- Oracle NVL 函数
- oracle 外连接(+)
- 搞定Linux下OracleASM的安装
- Oracle数据库_虚拟机与本地数据库互通连接配置
- 卸载Oracle数据库
- zabbix3.0.2 通过orabbix监控多台oracle数据库
- Oracle试卷02
- Oracle试卷01
- oracle中的数据类型
- Oracle闪回开启及操作
- Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理
- Oracle 身份验证方式
- Oracle 删除用户和表空间
- Oracle synonyms
- Oracle同义词(synonyms)的概念作用、创建删除查看及Oracle的db link
- Oracle expdp/impdp导出导入命令及数据库备份
- php连接oracle数据库遇到的问题
- oracle实例的内存(SGA和PGA)调整,优化之原理和方法