oracle中如何解决OGG

57次阅读
没有评论

共计 2906 个字符,预计需要花费 8 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 oracle 中如何解决 OGG-01163 问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

故障现象:
复制进程 Abended,在日志中报了以下错误:
2018-02-23 21:28:36  ERROR  OGG-01163  Oracle GoldenGate Delivery for Oracle, rlis.prm:  Bad column length (21) specified for column BATCHNO in table LISBASE.LCSIGNLIST, maximum allowable length is 20.

故障分析:
经询问得知,因应用产生超过现有字段长度的数据,应用运维人员在未知会 DBA 的情况下直接修改了表的字段定义,且该字段为主键。从而导致了该错误。

故障解决:
因为 GoldenGate 的复制进程默认是从 trail 文件中获取表的 meta data 信息,在抓取进程未重启的情况下,trail 文件中表的 meta data 信息并不会更新。所以我们需要手工介入,让复制进行使用新的 meta data.

步骤:
1、在源库使用 defgen 工具生成表的定义文件:
//LCSIGNLIST_def.prm
DEFSFILE ./dirdef/LCSIGNLIST.def
USERID ggs@LISDB_BEQ, PASSWORD AACAAAAAAAAAAALAOGDEBEAACFOGYIVGRDIIDGQHSBPDRHXF, ENCRYPTKEY DEFAULT
TABLE LISBASE.LCSIGNLIST;

defgen PARAMFILE dirdef/LCSIGNLIST_def.prm
这时会生成一个 LCSIGNLIST.def 文件,这其实就是个文本文件,按照 OGG 的描述方式对表的定义进行了描述:

*+- Defgen version 5.0, Encoding ISO-8859-1
*
* Definitions created/modified  2018-02-23 23:33
*
*  Field descriptions for each column entry:
*
*  1  Name
*  2  Data Type
*  3  External Length
*  4  Fetch Offset
*  5  Scale
*  6  Level
*  7  Null
*  8  Bump if Odd
*  9  Internal Length
*  10  Binary Length
*  11  Table Length
*  12  Most Significant DT
*  13  Least Significant DT
*  14  High Precision
*  15  Low Precision
*  16  Elementary Item
*  17  Occurs
*  18  Key Column
*  19  Sub Data Type
*  20  Native Data Type
*  21  Character Set
*  22  Character Length
*  23  LOB Type
*  24  Partial Type
*
Database type: ORACLE
Character set ID: zhs16gbk
National character set ID: UTF-16
Locale: neutral
Case sensitivity: 14 14 14 14 14 14 14 14 14 14 14 14 11 14 14 14
TimeZone: +08:00
*
Definition for table LISBASE.LCSIGNLIST
Record length: 632
Syskey: 0
Columns: 16
BATCHNO  64  30  0  0  0 1 0  30  30  0 0 0 0 0 1  0 1  0  1  -1  0 0 0
CONTNO  64  20  36  0  0 1 0  20  20  0 0 0 0 0 1  0 1  0  1  -1  0 0 0
MANAGECOM  64  10  62  0  0 1 0  10  10  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
MAKEOPERATOR  64  60  78  0  0 1 0  60  60  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
MAKEDATE  192  19  144  0  0 1 0  19  19  19 0 5 0 0 1  0 0  0  12  -1  0 0 0
MAKETIME  64  8  166  0  0 1 0  8  8  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
MODIFYDATE  192  19  180  0  0 1 0  19  19  19 0 5 0 0 1  0 0  0  12  -1  0 0 0
MODIFYTIME  64  8  202  0  0 1 0  8  8  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
RECEIVEOPERATOR  64  60  216  0  0 1 0  60  60  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
RECEIVEDATE  192  19  282  0  0 1 0  19  19  19 0 5 0 0 1  0 0  0  12  -1  0 0 0
RECEIVETIME  64  8  304  0  0 1 0  8  8  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
REASON  64  255  318  0  0 1 0  255  255  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
STATE  64  1  578  0  0 1 0  1  1  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
STANDBYFLAG1  64  10  584  0  0 1 0  10  10  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
STANDBYFLAG2  64  10  600  0  0 1 0  10  10  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
STANDBYFLAG3  64  10  616  0  0 1 0  10  10  0 0 0 0 0 1  0 0  0  1  -1  0 0 0
End of definition

在该案例中被修改的列是 BATCHNO,原来的长度为 20,我们可以看到定义文件中此时已经是 30,前面的 64 为数据类型,64 表示 VARCHAR2 类型。

2、将定义文件传到目标库(或者复制粘贴也可以),修改复制进行的参数,增加:
SOURCEDEFS ./dirdef/LCSIGNLIST.def OVERRIDE
这个参数的意思是从 LCSIGNLIST.def 获取表的定义,OVERRIDE 必须,这样才能覆盖 trail 中的 meta 信息。
将复制进程起来后,在日志中我们可以观察到:
2018-02-23 23:33:14  INFO  OGG-02752  Oracle GoldenGate Delivery for Oracle, rlis.prm:  The definition for table LISBASE.LCSIGNLIST from definitions file /u01/app/oracle/product/ogg/gghome/12.2.0.1/gghome_1/dirdef/LCSIGNLIST.def overrides the table metadata from the trail.
LCSIGNLIST.def 已经使用了,复制进程也正常进行。

看完了这篇文章,相信你对“oracle 中如何解决 OGG-01163 问题”有了一定的了解,如果想了解更多相关知识,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计2906字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)