by你好我是李白
7.4 AA复制中Post不处理问题
7.4.1 复制环境
环境 Oracle版本 SharePlex版本 操作系统 源端 11.2.0.4 RAC 8.6.4 AIX 6100 目标端 11.2.0.4 RAC 8.6.4 RHEL 5.8 7.4.2 问题描述
链路搭建完毕之后,对链路进行选取SCN,使用expdp进行数据初始化,数据初始化完成之后,在目标端reconcile队列数据,启动post之后,post一致呈现下图的状态。
by你好我是李白
7.4.3 解决方案
(1) sp_ctrl>stop post (2) sp_ctrl>show
确认post已经处于stopped by user状态
(3) 使用sqlplus登入SharePlex用户(如果你有多个SharePlex端口,确定你登录的是正确的用户)
(4) truncate table
7.5 AA复制中跳过复制对象问题
7.5.1 问题描述
在oracle到oracle复制环境中,当源端创建一些比较大的临时表时,如果复制链路中配置了通配符,将这些并不需要的临时表加入到了复制对象中,需要在目标端post队列中去掉这些对象时,此时源端已经将这些对象删除,无法查找object_id,并使用参数SP_OPO_DISABLE_OBJECT_NUM跳过。
7.5.2 解决方案
On target:
$ export SP_SYS_VARDIR=
sp_ctrl> qstatus >>查看队列名称 sp_ctrl> exit $ qview–i qview> qinit
qview> open p r >>如果有多个队列,则根据提示选择自己的队列 qview> set detail full
by你好我是李白
qview>set out
qview > oread 0 100000 >>输出队列消息的十万行 qview> exit
然后查看当前目录输出的qview.out文件,打开并查找需要跳过的对象表名,找到obj_id。 $ ./sp_ctrl
sp_ctrl> set param SP_OPO_DISABLE_OBJECT_NUM
可以查看是否已经跳过临时对象。
7.6 AA复制中POST异常退出日志未记录报错
7.6.1 问题描述
Post will not open more than 290 cursors SR:4154302 2017年11月16日
AA复制链路中,之前由于post进程报找不到object_id,然后在队列中找到,object_id对应的表,确认表之后,在目标端设置
SP_OPO_DISABLE_OBJECT_NUM参数,跳过了TDS用户下的Q0,Q1,Q2,Q3表,昨天客户需要将这四张表重新加入到队列中,具体做法如下: 1.目标端停止post
2.在源端编辑配置文件,在原队列spdx中使用not,排除掉Q0~Q3这四张表,并在config文件中增加一行,复制TDS下Q0~Q3这四张表队列名字取名spdx05,verify config,activate config。
3.目标端reset param SP_OPO_DISABLE_OBJECT_NUM,并将除spdx05外的其他队列启动。
4.在源端基于SCN导出并在目标端导入四张表数据时,发现目标端spdx队列post进程due to error,查看日志,日志中并未记录post报错原因,event_log记录如下:
by你好我是李白
Info 2017-11-15 17:25:55.711464 20118 2902460992 Poster exited with code=1, pid = 5822 (posting from spdx, queue spdx, to spdxtar)
Notice 2017-11-15 17:27:15.492659 3280 2928380048 User command: splex start post queue spdx (from eb-tardb01-vip)
Info 2017-11-15 17:27:15.493487 7635 2902460992 Poster launched, pid = 7635 (posting from spdx, queue spdx, to spdxtar)
Notice 2017-11-15 17:27:16.580345 7635 2916102000 Poster: SQL Cache disabled. (posting from spdx, queue spdx, to spdxtar) [module opo] Info 2017-11-15 17:27:37.587999 20118 2902460992 Poster exited with code=1, pid = 7635 (posting from spdx, queue spdx, to spdxtar) post进程日志如下:
opo 2017-11-15 17:27:18.739051 7635 2916102000 src host/sid/queue=spclecsource:spdx:spdx
opo 2017-11-15 17:27:18.814391 7635 2916102000 call KillOpstModule(Post-10001-spdx-spdx)
opo 2017-11-15 17:27:18.823908 7635 2916102000 Post will not open more than 290 cursors per session (OPEN_CURSORS - 10)
opo 2017-11-15 17:27:18.823930 7635 2916102000 Max data segment: hard limit=NONE
opo 2017-11-15 17:27:18.823935 7635 2916102000 Max data segment: soft limit=NONE
opo 2017-11-15 17:27:18.823940 7635 2916102000 Max file descriptor: hard limit=1024
opo 2017-11-15 17:27:18.823945 7635 2916102000 Max file descriptor: soft limit=1024
opo 2017-11-15 17:27:18.835679 7635 2916102000 Oracle version 112 - Enterprise Edition #cpu = 24Sol
7.6.2 问题原因
操作系统使用非oracle用户安装配置SharePlex,但是并未在
/etc/security/limits.conf文件中配置该用户资源使用限制,所以该用户使用默认打开文件数1024。
by你好我是李白
在分割队列时,启动新的queue,在目标端有新的post进程,打开文件数进一步上升超过1024,导致进程异常退出,但是event_log日志中并未记录相关报错信息。
7.6.3 问题解决
From post log, it seems open files is set to 1024. There are many sessions for post, you may need to increase open file descriptors.
Please do following to shutdown sp_cop
sp_ctrl> shutdown
ulimit -n 8192 ulimit -aS
it should show 8192 for open file descriptors
then start SharePlex
./sp_cop &
./sp_ctrl> start post
Please let me know if this resolves issue. If this still does not resolve the issue please set post debug and send me the *opo*.log file.
sp_ctrl> set param SP_OPO_DEBUG_FLAG 0x1f0001ff sp_ctrl> start post
Once post is stopped, then turn off debug sp_ctrl> reset param SP_OPO_DEBUG_FLAG