2023年12月1日发(作者:)
by你好我是李白
1.SharePlex安装配置部分 ........................................... 3
1.1解压安装 .................................................... 3
1.2 ora_setup配置 .............................................. 3
1.3 sp_cop -u2300&启动......................................... 3
1.4 sp_ctrl控制台 .............................................. 4
1.5 config配置文件 ............................................. 4
1.6 analyze config
2.SharePlex常用操作 ............................................... 5
2.1 copy命令 ................................................... 5
2.2 compare与. 6
2.3 param设置参数 .............................................. 6
2.4 清除当前复制................................................ 7
2.5 SharePlex实用参数命令 ...................................... 7
2.6 忽略大事务的操作............................................ 8
2.7 修改SharePlex的数据库用户密码.............................. 8
2.8 新增复制表................................................. 11
2.9 删除复制表................................................. 13
2.10重命名表 .................................................. 15
2.11新增LOB列或者重命名列 .................................... 15
2.12 Alter table move a 16
2.13一个软件启动多个SP实例 ................................... 17
3.SharePlex AA复制实施 ........................................... 20
3.1 前言....................................................... 20
3.2 环境准备................................................... 20
3.3 数据初始化................................................. 20
3.4 reconcile队列数据 ......................................... 21
3.5开启目标端 22
3.6目标端FK,job,trigger处理 ................................ 22
4.SharePlex其他复制说明 .......................................... 22
4.1 DDL复制 ................................................... 22
4.2 异构复制map columns ....................................... 23
4.3 级联复制................................................... 24
4.3.1中间系统为数据库,有post情况下级联复制 .............. 24
by你好我是李白
4.3.2中间系统为 25
4.4 SharePlex高可用复制 ....................................... 26
4.5 配置Change-History复制.................................... 26
4. 26
4.5.2其他的change-history配置选项 ........................ 27
4.6 Oracle到Kafka复制 ........................................ 29
4.6.1概述 ................................................. 29
4.6.2发送到Kafka说明 ..................................... 29
4.6.3源端SharePlex配置 ................................... 29
4.6.4开启 29
4.6.5设置SP_OCT_USE_SUPP_KEYS参数 ........................ 29
4.6.6配置复制 ............................................. 30
4.6.7目标端SharePlex配置 ................................. 30
4.6.8查看并且修改Kafka设置 ............................... 31
4.6.9设置恢复选项 ......................................... 33
5.日常监控........................................................ 34
5.1 启动/关闭SharePlex ........................................ 34
5.2 登录控制台................................................. 34
5.3 主要监控项目............................................... 34
5.4 查看日志................................................... 36
6.一些性能诊断方案................................................ 36
6.1 针对capture too slow ...................................... 36
7.SharePlex一些问题的解决方案 .................................... 37
7.1 View events 37
7.2 忽略一些确定的可以忽略的错误............................... 37
7.3 insert null复制到Kafka不显示 ............................. 38
7.3.1问题描述 ............................................. 38
7.3.2解决方案 ............................................. 40
by你好我是李白
1.SharePlex安装配置部分
端口:
2100 :SharePlex默认端口。
2501:start launcher需要开启端口,可以使用copy快速复制表。
安装前数据库操作
打开数据库最小附加日志:首先查看v$transaction视图有没有大事务,尽量避
免有大事务的时候执行,如果系统资源非常紧张会导致宕机,RAC情况下各个节
点都需要执行。
alter database add supplemental log data (primary key,unique index) columns;
查询最小附加日志情况:
select
SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEME
NTAL_LOG_DATA_UI,SUPPLEMENTAL_LOG_DATA_FK,SUPPLEMENTAL_LOG_
DATA_ALL from v$database;
源库需要打开归档。
1.1解压安装
使用oracle用户解压,安装。
$ ./
1.2 ora_setup配置
--配置shareplex,配置时如果需要自定义复制的源与目标端的ORACLE_SID,
则需要配置别名,且/etc/oratab中必须有对应于自定义的
tnsnames别名的ORACLE_SID。
1.3 sp_cop -u2300&启动
[splex@localhost ~]export SP_SYS_HOST_NAME=cluster1vip 可以使用该参数
指定shareplex启动到指定的IP上,可以使用netstat -an | grep
--启动 -u可以启动shareplex实例到指定端口,可以复制多个库。
by你好我是李白
1.4 sp_ctrl控制台
SharePlex日常操作都在sp_ctrl控制台中进行,启动命令为:
/
停止。
1.5 config配置文件
Config配置文件为复制链路需要复制对象以及链路映射文件。
sp_ctrl> list config
sp_ctrl> verify config
sp_ctrl> activate config
sp_ctrl> activate config
如果在一定时间内获取锁失败,则继续往下进行
activate尽量执行两次,确保成功,可以同时tail -f
config配置样例以及配置规则:
datasource:
#source tables target tables routing map
#***************************************************_sid
--target_sid为目标端的sid或别名。
➢ _src --源库的用户名.表名,可以使用%通配符,全匹配半匹配
等。priv%not(table_name)排除表。
➢ _dest --目标库的用户名.表名
➢ **********************_sid--目标库的IP或hosts文件中映射名@为目
标端的sid或别名。
➢ 192.168.204.151:**********************或主机名后
加冒号,可以为该表复制单独起一个队列。
➢ 2!key(c1,c2)***********************自定义pk
1.6 analyze config
--可以分析config,生成报表,分析数据库表操作频繁记录等。
by你好我是李白
2.SharePlex常用操作
2.1 copy命令
命令说明:会将目标先truncate掉,然后再利用expdp加constraint=y参数导
出再导入,如果你不想truncate目标端的原有同步数据则你需要使用另一个命
令append
copy命令可实现单表或表分区的同步,不适合大批量表的同步。
使用要求:
目标端启动launcher: sp_ctrl> start launcher ――默
认端口是2501
同步的表出现在已激活的配置文件中。
目标端的复制表所属用户需先建立,copy可以创建表结构,但要求表空间
不变,所以建议先建好表结构再复制。
语法如下:
sp_ctrl> copy ame [at target_host]
如果相同的对象复制到不同的主机,需加at target_host选项,源端和目标端
的用户名或者表名不一致的话还需加入目标端的ame 。
检查源端的copy状态:
sp_ctrl> copy status all
copy status
cancel
当日志积累多了不方便查看时,可清除日志:
源端清除日志:sp_ctrl> clear history all
by你好我是李白
目标端清除:cd vardir/log ; rm sync_clt*log
2.2 compare与repair
如果发现或怀疑源端和目标端的表数据不一致,可以通过compare命令查
看和修复。
但由于compare需要把比较的数据排序,然后逐条比较,大量数据的比较
可能会导致资源的过量使用,所以不建议对大量数据的比较。
sp_ctrl> compare table to target
***********************[repair]
比较表分区:
sp_ctrl>***************************************@p1target
***********************[repair]
直接修复在后面加上repair,不加repair参数则将可用于修复的SQL语句生
成在日志文件中。
查看比较进度:
sp_ctrl> show compare [detail]
取消比较:
sp_ctrl> compare cancel id
清除比较日志:
sp_ctrl> remove log compare id
可以指定compare使用其他端口,不指定则随机选端口:
***************************************@p1target
***********************[repair]port2500
2.3 param设置参数
sp_ctrl> list param all --列出所有参数。
by你好我是李白
sp_ctrl> set param --设置参数
sp_ctrl> list param modified --查看被修改的参数
shareplex安装目录说明:
/bin 包含可执行程序的符号连接
/.app_modules 包含可执行程序
/data 默认参数文件,包含默认的参数设置
/doc 空目录
/install SharePlex安装、license管理等相关的脚本
/lib SharePlex 应用到的库文件
/util SharePlex 工具 ,SQL脚本,监控脚本等
2.4 清除当前复制
sp_ctrl>shutdown
$ env | grep SP_SYS_VARDIR --一定要在清除之前确认清理的实例正确。
执行下条语句之前一定确认上述参数正确,防止清理掉正在使用的实例。
$ ora_cleanup splex/splex
2.5 SharePlex实用参数命令
export SP_SYS_VARDIR=/splex/vardir --类似ORACLE_SID,指定splex使用
指定的队列配置文件等等。
export SP_SYS_HOST_NAME –在启动sp_cop之前设置,指定SharePlex启动
在指定的IP上,在RAC安装时需要注意此选项。
sp_ctrl>set param SP_OPO_DISABLE_OBJECT_NUM <源端object_ID> --在
目标端设置。抛弃指定表。
sp_ctrl>r 20 2 --执行上条命令20次,两秒一次。
sp_ctrl>help target
by你好我是李白
sp_ctrl>target set metadata time:sp_:sp_op --可以在目标端增
加列,写入时间戳与DML语句行为。
sp_ctrl>help target set metadata time
2.6 忽略大事务的操作
过大的事务复制可能会遇到问题,所以建议所有大于1000万数据DML操作事务,
分成多批次commit,并建议不要对相同表做并行的大事物操作。
在有的场景下可能不希望源端的某些修改复制到目标端,比如源端清除历史数据而
目标端需要保留等。
具体步骤如下:
源端,在数据库中以shareplex用户执行util目录下的create_,该脚本
创建了SHAREPLEX_IGNORE_TRANS procedure;只需执行一次。
在执行大的事务前先执行这个procedure,即可忽略对该事务(从这个存储过程至下
一个commit之间的所有DML操作)的复制,如:
SQL> conn test/test
SQL> exec lex_ignore_trans;
SQL> insert into tb1 values (100, 'aaa');
SQL> commit;
2.7 修改SharePlex的数据库用户密码
SharePlex数据库用户的密码还存在于SharePlex参数文件中,不能简单的在数据
库中更改,需要执行SharePlex提供的脚本进行,具体步骤如下。对每个环境都单独列
出了详细步骤。
a. 源端stop capture进程,观察SharePlex队列中数据都已应用到目标
端;
b. shutdown源端和目标端的SharePlex;
c. 执行prod/bin目录下的ora_chpwd命令来自动改变存储在数据库中
by你好我是李白
和paramdb文件中的密码。
生产环境:
dcdb02:/oracle$ ora_chpwd
This program allows you to change the password of the
SharePlex user account needed to run Oracle replication.
In response to prompts, a carriage return will choose the
default given in brackets. If there is no default, a reply must be entered.
Please enter the SID where SharePlex is installed [] :
dl2
empty response--try again : splex
注意:在此处不要使用本地的实例名,要输入TNS别名,然后回车;
In order to change the password for the SharePlex user account,
we must connect to the database as SYSTEM.
Enter password for the SYSTEM account, which will not echo [MANAGER] :
empty response--try again :
注意:此处输入oracle数据库system帐户的口令,但应当在口令的后面加上
by你好我是李白
empty response--try again : splex
Enter new password for SharePlex user :
empty response--try again :
Re-enter password for SharePlex user :
empty response--try again :
注意:此处输入SharePlex用户的口令,但应当在口令的后面加上@TNS_ALIAS, 然后
回车。
Changing SharePlex parameter database . . .
SharePlex password change completed successfully.
管理环境:
dcadm:/oracle$ ora_chpwd
This program allows you to change the password of the
by你好我是李白
In order to change the password for the SharePlex user account,
we must connect to the database as SYSTEM.
Enter password for the SYSTEM account, which will not echo [MANAGER] :
empty response--try again :
注意:此处输入oracle数据库system帐户的口令,不需要后面加上@TNS_ALIAS, 然
后回车;
connecting--This may take a few seconds.
Enter the current username for SharePlex user :
empty response--try again : splex
Enter new password for SharePlex user :
empty response--try again :
Re-enter password for SharePlex user :
empty response--try again :
注意:此处输入SharePlex用户的口令,不需要在口令的后面加上@TNS_ALIAS, 然后
回车。
Changing SharePlex parameter database . . .
SharePlex password change completed successfully.
d. 启动源端和目标端的SharePlex;
e. 源端start capture进程,观察SharePlex是否复制正常。
2.8 新增复制表
如果需要对新建的表进行复制,则需要遵循以下步骤:(尽量在
业务少的时候进行)
by你好我是李白
(1)在目标系统数据库建立相同的表,然后在源系统的SharePlex控制台
sp_ctrl下运行copy config命令将当前配置文件复制并生成一个新的配置文
件。例如,当前处在激活状态的配置文件名为filename,则建立一个文件名为
newname
的配置文件;
sp_ctrl(sysA)> copy config to
filenamenewname
(2)通过源系统的SharePlex控制台sp_ctrl运行edit config 命令编
辑新建的配置文件newname
sp_ctrl(sysA)> edit config
newname
(3)在文件里为新建的表增加一行信息,这行信息包括该表在源系统中的
表名、该表在目标服务其中的表名和路由信息。例如,在源和目标服务器的
APP模式下新建了名为a的表,则应该在文件里增加如下的信息:
**************************
(4)保存并退出配置文件;
(5)停止用户对新建表的任何操作,包括select, update,insert和delete
等操作;
(6)在源系统的SharePlex控制台sp_ctrl下运行activate config命令激
活修改后的新的配置文件,在激活的过程中原先处于激活状态的旧的配置文件
会自动解除激活状态;
sp_ctrl(sysA)> activate config
newname live
(7)此时,维护工作完成,用户可以对新建的表进行访问和操作。
如果需要对已有数据的表新增到链路中,则需要遵循如下步骤:
(1)首先在目标端停止post
sp_ctrl (192.168.204.110:2400)> stop post
sp_ctrl (192.168.204.110:2400)> show >>确认post已经停止
(2)在源端修改config,新增复制表
sp_ctrl (11rac1:2400)> copy config hr_scott to hr_scott_01 >>复制一
份正在使用的config
by你好我是李白
sp_ctrl (11rac1:2400)> edit config hr_scott_01 >>编辑复制的config,
新增复制表
datasource:
#source tables target tables routing map
192.168.204.110:**************
s192.168.204.110:*****************>>需要在host
之后自定义队列名称
sp_ctrl (11rac1:2400)> verify config hr_scott_01 >>验证config
sp_ctrl (11rac1:2400)> activate config hr_scott_01 >>激活config
注:在激活配置文件之后,目标端除新增表之外的其他复制队列已经可以激
活。
(3)查看v$transaction中start_time
SQL > select start_time from v$transaction;
查看数据库事务开始时间,确认是否所有事务都在activate config时间之
后,以保证所有事务都已捕获。
(4)expdp导出源端需要新增的表数据
[oracle@11rac1 expdp]$ expdp system/111111 directory=expdp
dumpfile= tables=s flashback_scn=5597451
(5)impdp在目标端导入新增的表数据,并禁用表上的约束以及触发器
[oracle@11rac1 expdp]$ impdp system/111111 directory=expdp
dumpfile= remap_schema=hr:scott >>如果用户相同,则不需要
使用remap_schema参数
(6)reconcile队列数据到之前选取的scn
sp_ctrl (192.168.204.110:2400)> qstatus
Queues Statistics for 192.168.204.110
Name: regions01 () (Post queue)
Number of messages: 9 (Age 7404 min; Size 1 mb)
Backlog (messages): 9 (Age 7404 min)
Name: jobs01 () (Post queue)
by你好我是李白
Number of messages: 0 (Age 0 min; Size 1 mb)
Backlog (messages): 0 (Age 0 min)
sp_ctrl (192.168.204.110:2400)> reconcile queue regions01 for -
scn 5597452 >>一般expdp导出的需要在reconcile时加1,使用
RMAN基于scn恢复的则不需要加1
(7)启动新增加的表对应的post队列
sp_ctrl (192.168.204.110:2400)> start post queue regions01
(8)查看数据同步情况以及链路情况。
2.9 删除复制表
如果将要被删除的表在当前处在激活状态的SharePlex配置文件中,则需
要遵循以下步骤:(尽量在业务少的时候进行)
(1)通过源系统的SharePlex控制台sp_ctrl运行copy config命令将当前
配置文件复制并生成一个新的配置文件。例如,当前处在激活状态的配置文件
名为filename,则建立一个文件名为newname的配置文件;
sp_ctrl(sysA)> copy config filename to newname
(2)通过源系统的SharePlex控制台sp_ctrl下运行edit config 命令编辑
配置新建的配置文件
sp_ctrl(sysA)> edit config newname
(3)在文件中将该含有该表的信息行删除。
(4)保存并退出配置文件;
(5)通过源系统的SharePlex控制台sp_ctrl运行activate config命令激
活修改后的新的配置文件,在激活的过程中原先处于激活状态的旧的配置文件
会自动解除激活状态;
sp_ctrl(sysA)> activate config newname live
(6)维护工作完成。
by你好我是李白
2.10重命名表
如果被重命名的表在当前处在激活状态的SharePlex配置文件中,则需要
遵循以下步骤:(尽量在业务少的时候进行)
(1)停止用户对该表的任何操作,包括select, update,insert和delete
等操作;
(2)在源系统和目标系统数据库中上重命名该表;
(3)通过源系统的SharePlex控制台sp_ctrl运行copy config命令将当前
配置文件复制并生成一个新的配置文件。例如,当前处在激活状态的配置文件
名为filename,则建立一个文件名为newname的配置文件;
sp_ctrl(sysA)> copy config filename to newname
(4)通过源系统的SharePlex控制台sp_ctrl运行edit config 命令编辑配
置新建的配置文件
sp_ctrl(sysA)> edit config newname
(5)在文件里修改被重命名表所在的行信息,将该表在源系统中的表名、
该表在目标服务其中的表名该为重命名后的表名。例如,在源和目标服务器的
APP模式下的表a被重命名为表b,则该表所在的行信息应该改为:
**************************
(6)保存并退出配置文件;
(7)通过源系统的SharePlex控制台sp_ctrl运行activate config命令激
活修改后的新的配置文件newname,在激活的过程中原先处于激活状态的旧的
配置文件会自动解除激活状态;
sp_ctrl(sysA)> activate config newname live
(8)维护工作完成,用户可以对重命名之后的表进行访问和操作。
2.11新增LOB列或者重命名列
by你好我是李白
对于alter table add a LOB column操作,如果被执行该操作的表在当前
处在激活状态的SharePlex配置文件中,则必须遵循以下步骤保证复制环境两
套数据库系统的一致性。(尽量在业务少的时候进行)
(1)停止用户对该表的任何操作,包括select, update,insert和
delete等操作;
(2)通过源系统的SharePlex控制台sp_ctrl下运行copy config命令将
当前配置文件复制并生成一个新的配置文件。例如,当前处在激活状态的配置
文件名为filename,则建立一个文件名为的配置文件;
newname
sp_ctrl(sysA)> copy config to
filenamenewname
(3)通过源系统的SharePlex控制台sp_ctrl下运行edit config 命令
编辑配置新建的配置文件;
sp_ctrl(sysA)> edit config
newname
(4)在文件中将要增加LOB字段(或重命名字段)的表的信息行删除。
(5)保存并退出配置文件;
(6)通过源系统的SharePlex控制台sp_ctrl运行activate config命令
激活修改后的新的配置文件,在激活的过程中原先处于激活状态的旧的配置文
件会自动解除激活状态;
sp_ctrl(sysA)> activate config
newname live
(7)在源系统和目标系统数据库中对该表增加LOB字段(或重命名字段);
(8)通过源系统的SharePlex控制台sp_ctrl运行activate config命令
激活原先的配置文件filename,在激活的过程中刚刚处于激活状态的配置文件
newname会自动解除激活状态;
sp_ctrl(sysA)> activate config
filename live
(9)维护工作完成,用户可以对该表进行访问和操作。
2.12 Alter table move a new tablespace
对于alter table move tablespace操作,如果被执行该操作的表在当前
处在激活状态的SharePlex配置文件中,则必须遵循以下步骤保证复制环境两
套数据库系统的一致性。(尽量在业务少的时候进行)
by你好我是李白
(1)停止用户对该表的任何操作,包括select, update,insert和
delete等操作;
(2)通过源系统的SharePlex控制台sp_ctrl下运行copy config命令将
当前配置文件复制并生成一个新的配置文件。例如,当前处在激活状态的配置
文件名为filename,则建立一个文件名为的配置文件;
newname
sp_ctrl(sysA)> copy config to
filenamenewname
(3)通过源系统的SharePlex控制台sp_ctrl下运行edit config 命令
编辑配置新建的配置文件;
sp_ctrl(sysA)> edit config
newname
(4)在文件中将要转移表空间的表的信息行删除。
(5)保存并退出配置文件;
(6)通过源系统的SharePlex控制台sp_ctrl运行activate config命令
激活修改后的新的配置文件,在激活的过程中原先处于激活状态的旧的配置文
件会自动解除激活状态;
sp_ctrl(sysA)> activate config
newname live
(7)在源系统和目标系统数据库中对移动该表到新的表空间;
(8)通过源系统的SharePlex控制台sp_ctrl运行activate config命令
激活原先的配置文件filename,在激活的过程中刚刚处于激活状态的配置文件
newname会自动解除激活状态;
sp_ctrl(sysA)> activate config
filename live
(9)维护工作完成,用户可以对该表进行访问和操作。
2.13一个软件启动多个SP实例
(1)分配端口号
需要给每一个sp_cop分配一个唯一的端口号
(2)创建variable-data目录
为每一个sp_cop实例创建一个variable-data目录。
按照SharePlex Instanllation Guide安装SharePlex,在安装最后,你需要
一个product目录以及一个variable-data目录关联一个端口以及一个数据
by你好我是李白
库账户,这是你的基础实例。
关闭正在运行的sp_cop实例。
为每一个实例复制一个vardir目录。
cp -p -r /splex/vardir/splex2100 /splex/vardir/splex2101
cp -p -r /splex/vardir/splex2100 /splex/vardir/splex2102
(3)定义端口号在SharePlex环境中
a.定义环境variable-data环境变量
ksh shell:
export SP_SYS_VARDIR=/
full_path_of_variable-data_directory
csh shell:
setenv SP_SYS_VARDIR /
full_path_of_variable-data_directory
b.定义环境变量SP_COP_TPORT and SP_COP_UPORT
ksh shell:
export SP_COP_TPORT=
port
export SP_COP_UPORT=
port
csh shell:
setenv SP_COP_TPORT
port
setenv SP_COP_UPORT
port
c.启动sp_cop实例使用-u选项
$ /productdir/bin/sp_cop -uport&
d.使用如下参数为环境变量中variable-data设置端口
by你好我是李白
sp_ctrl> set param SP_COP_TPORT port
sp_ctrl> set param SP_COP_UPORT port
e.关闭实例
Shut down sp_cop.
f.在variable-data目录中的rim子目录中,删除以及文件
(如果之前安装的SharePlex从未启动过sp_cop这两个文件可能不存在)
h.重复上述步骤为每一个实例
如果是为同一个数据库启动不同实例,则下面步骤可以省略。
(4)如果针对不同数据库,则需要在完成上述步骤之后,为每一个数据库运行
ora_setup
a.定义环境variable-data环境变量
ksh shell:
export SP_SYS_VARDIR=/
full_path_of_variable-data_directory
csh shell:
setenv SP_SYS_VARDIR /
full_path_of_variable-data_directory
b.定义环境变量SP_COP_TPORT and SP_COP_UPORT
ksh shell:
export SP_COP_TPORT=
port
export SP_COP_UPORT=
port
csh shell:
by你好我是李白
setenv SP_COP_TPORT
port
setenv SP_COP_UPORT
port
c./ora_setup,根据交互界面提示,为每个sp_cop实例配置不同数据库设置。
3.SharePlex AA复制实施
3.1 前言
AA复制即源端为oracle,目标端也为oracle。
实施之前一定要备份源库,并保证备份的可用性,并制定完备的回退方案。
SharePlex可以用作容灾,报表分离,数据分发,数据迁移。
使用SharePlex进行数据迁移一般具有数据量大,源端与目标段为异构平台,
停机时间短等特点,迁移完成之后,可以再次配置目标段到源端的复制,
防止试运行阶段出现问题以便回切。
使用SharePlex进行异构容灾实施步骤大致与异构迁移相同,主要区别在于
最后数据迁移完成之后目标段FK,job,trigger的处理。
3.2 环境准备
源库空间准备,中间库准备,目标端相关软件安装,RAC安装时需要安装
在共享磁盘上,并且将SharePlex启动在可浮动的一个service IP上。
在源库与目标库安装同版本的ShanrePlex,可以不同平台,但一定要保证
版本一致。
在源端编写config文件,并在源端与目标端都停止Post进程,然后verify
并analyze config,然后再根据分析结果,修改优化config文件。
3.3 数据初始化
a.有中间库时,可以使用DG搭建与源库同平台的中间库环境,并配置好
DG,然后在源端激活上一步配置好的config文件,开始capture捕获,在
by你好我是李白
v$transaction视图中事务开始时间都晚于捕获时间之后,查询select
to_char(current_scn) from v$database;选取一个SCN,然后在确保SCN之
前所有的数据都同步到中间库之后,可以将DG断开。
(1) 如果是10g之前的版本,如果数据量较大,则可以使用RMAN在中
间库不完全恢复到选取的SCN,然后使用exp人为分割大表启动多
个exp进程,启用并发加快导出数据速度。
(2) 10g以后的版本使用expdp配合FLASHBACK_SCN=
将数据导出。
b.没有中间库时,在源端先开启捕获,保证v$transaction视图中所有事务
开始时间都在捕获时间之后,然后选取scn,使用exp/expdp进行基于该
scn导出,在目标端导入。
注:目标数据库FK、job、trigger的处理,正常的job与schedule job必须都
禁用掉,使用如下语句生成批量禁用语句,然后执行。
SQL> select 'alter table "'||owner||'".'||table_name||' disable constraint
"'||constraint_name||'";' from dba_constraints where constraint_type in ('R')
and owner in('HR') order by status,owner;
SQL> select 'alter trigger "'||owner||'"."'||trigger_name||'" disable;' from
dba_triggers where owner in('HR') order by status,owner;
禁用目标端job:
SQL>alter system set job_processes=0 scope=both sid=’*’;
3.4 reconcile队列数据
在目标端,使用sp_ctrl控制台,reconcile目标端post队列中激活源端
config开启capture到选取的SCN之间的数据,以保证开启post之后,
SharePlex可以将之后数据对接,保证数据一致性。
sp_ctrl (cluster1vip:2100)>qstatus
sp_ctrl (cluster1vip:2100)>help reconcile
sp_ctrl (cluster1vip:2100)> reconcile queue datamove for -
1 scn 698767
sp_ctrl (cluster1vip:2100)>qstatus
注:数据泵导入导出的时候,reconcile时scn一般需要加1,rman until scn方
式恢复的不需要加1.
by你好我是李白
3.5开启目标端post
sp_ctrl (cluster1vip:2100)>start post
sp_ctrl (cluster1vip:2100)>qstatus
sp_ctrl (cluster1vip:2100)>show sync
使用sqlplus查看数据同步情况,同步完成之后,查看源端与目标端数据是
否一致。
3.6目标端FK,job,trigger处理
如果使用SharePlex做容灾镜像复制,目标端FK,job,trigger则禁止,直
到需要切换到灾备库时启用。
如果使用SharePlex做数据迁移,则需要在迁移完成之后启用FK,job,
trigger。
4.SharePlex其他复制说明
4.1 DDL复制
在级联复制中,DDL复制只从源端到中间端,不包含中间段到目标段。
默认SharePlex开启Truncate TABLE与ALTER TABLE to ADD COLUMNS
or DROP COLUMNS的DDL复制。
注:默认DDL配置受参数SP_OCT_REPLICATE_DDL参数影响,1为ALTER
TABLE,2为TRUNCATE TABLE,3为ALTER TABLE与TRUNCATE TABLE,默
认为3
默认SharePlex的AUTO_ADD特性会自动捕获在激活配置文件(前提是新
建的对象在配置文件中使用通配符等方式匹配)之后创建的表与索引,并
自动复制到目标端,将对象加入复制列表,维护对象以后的DDL与DML。
注:默认AUTO_ADD受SP_OCT_AUTOADD_ENABLE参数影响,默认为1,即
ENABLE
如果需要开启TRIGGER,SYNONYM,GRANT的复制,需要设置以下参数
为1
DDL command Set this parameter to 1
CREATE / DROP TRIGGER SP_OCT_REPLICATE_TRIGGER
by你好我是李白
CREATE / DROP SYNONYM SP_OCT_REPLICATE_SYNONYM
GRANT SP_OCT_REPLICATE_GRANT
如果需要开启SEQUENCE,MATERIALIZED VIEW复制,需要设置一下参数
为1
前提:1.保证SP_OCT_AUTOADD_ENABLE参数设置为1.
DDL to auto-Additional requirements
add
CREATE / Set the
DROP SP_OCT_TARGET_COMPATIBILITY
SEQUENCE parameter to at least 8.6.3
CREATE / Set the
DROP SP_OCT_TARGET_COMPATIBILITY
MATERIALIZED parameter to at least 8.6.3
VIEW*
SharePlex可以复制不包含在激活的配置文件内的对象的DDL,但是不会复
制任何数据,因为没有激活的配置文件包含对象。
SP_OCT_REPLICATE_ALL_DDL设置为1。
SP_OCT_AUTOADD_MV
Parameter to set to 1
SP_OCT_AUTOADD_SEQ
4.2 异构复制map columns
环境:RedHat6 Oracle11.2.0.4 SharePlex9.0
注意事项:
1.源库的所有列必须映射给目标端的列,名称可以不同,目标表的列数量可以
多于源库表的列数量。
2.在配置了列映射的表中使用ALTER TABLE增加列是不被支持的。
样例配置文件:
sp_ctrl (11rac1:2300)> view config hr_20170708
by你好我是李白
#source tables target tables routing map
#***************************************************_sid
************************************************
(id,name)t(nu,last_name)************************
4.3 级联复制
级联复制情境
1.源库允许有超过1024个复制路由,则可以通过发送到中间系统,通过广
播的方式,分发给目标系统。
2.源库由于防火墙限制或者其他因素导致无法直接建立与目标端的连接,
则可以使用级联复制。
注:使用级联复制,即使源库无法连接目标端,源端也要能解析目标端的主机。
级联复制要求
1. 在所有系统中创建相同SharePlex用户名用户。
2. 在目标端禁用影响DML操作的触发器。
3. 排除SharePlex用户的DML与DDL复制,配置文件中对象以外的表可
以有DML与DDL操作,但不能影响复制队列。
4. 如果序列在目标端是不需要的,则不要复制序列,复制序列会造成复制
迟缓。因为序列用来在插入操作时产生列的键值,而值会复制到目标端,
所以序列可以不复制。
4.3.1中间系统为数据库,有post情况下级联复制
配置注意事项:
1. 在所有系统的数据库中,必须有相同名称的SharePlex的用户。
2. 触发器必须在在中间库与目标库中禁用。
by你好我是李白
3. SharePlex不支持从中间库到目标库的DDL复制,只支持源库到中间库
的DDl复制,所以在中间库需要禁用掉SP_OCT_REPLICATE_DDL与
SP_OCT_REPLICATE_ALL_DDL两个参数。
4. 需要在源库与中间库创建两个配置文件。
5. 源库与中间库开启归档,防止在捕获完成之前联机重做日志被清除。
配置样例:
Example on source system
Datasource:
*************************
*************************
cust.%cust.%************
Example on intermediary system
Datasource:
*************************
*************************+************
cust.% cust.% !cust_partitions
需要配置参数
如果中间库是Oracle,需要设置参数SP_OCT_REPLICATE_POSTER为1,默认为
0,参数设置为0时,SharePlex的capture将忽略post进程的活动。
4.3.2中间系统为pass-through
配置前提
1. Oracle数据库下,创建Oracle实例以及在/etc/oratab或者windows注
册表中指定对应ORACLE_SID,数据库可以为空。
2. 不支持DDL复制
3. 只需要在源端创建一个配置文件即可。
by你好我是李白
4.4 SharePlex高可用复制
配置双向复制,停止备机端的export进程。
4.5 配置Change-History复制
4.5.1Change-History
创建Change-History配置文件
1) 确保系统符合SharePlex要求以及已经按照规范安装了SharePlex软件。
2) 在目标段创建与需要记录改变历史的源端表相同结构及表名的表,省略
掉所有列上的所有约束。
注:目标记录改变历史表不能有主键约束,外键约束,唯一键,非空,检查约
束,也不能在列上定义默认值。因为这个表记录的是改变历史,一行的值有可
能有与其他行相同的键值。Post在记录改变历史的目标端不能参照完整性约束。
3) 在目标端禁用触发器trigger。
4) 在目标表禁止除了SharePlex用户外所有用户的DML与DDL操作。
5) 在源端,使用如下语法创建config文件。
Datasource:是源端Oracle实例的ORACLE_SID
Src_是一个完整合法的源端对象()或者使用通
配符指定的对象。
!cdc:指定目标端表为change-history表
是一个在目标段完整合法的change-history表或者使用通
配符指定的表。
host是指目标系统
by你好我是李白
指定目标端的Oracle 实例
6) (可选步骤)在目标端运行
product_dir/util/add_change_tracking_脚本,添加默认名称
的列定义。Post可以自动填入默认定义的列而不需要任何额外的配置,
你也可以自定义脚本去匹配自己的要求。
注:
✓ 上述脚本只添加默认名称的列。如果添加可选择的列或者改变列的名称,
使用target命令添加自定义的列名称到Post配置。查看target命令默认
以及可选的列定义,可以参考SharePlex Reference Guide
✓ 在一个change-history配置中,配置文件中捕捉到的添加新表DDL将自
动添加默认change-history列。
4.5.2其他的change-history配置选项
这部分内容描述如何自定义配置SharePlex记录改变历史。
a) 使用自定义列明记录改变历史
在目标端可以使用target命令自定义任何目标定义的列,target详细用法可以
参考SharePlex Reference Guide。
b) 源端每一行改变都在目标端记录前镜像
可以通过在目标端设置SP_OPO_TRACK_PREIMAGE参数为U来在记录改变历
史时记录改变的值同时新增一行记录前镜像值。这个参数将会使Post在源端表
每行发生改变时在目标端记录改变历史表中插入两行:一行是改变后的镜像另
一行为改变前的镜像。前镜像由改变后的值与改变量构成,除非源端启用了
SP_OCT_USE_SUPP_KEYS参数。
当前镜像值被设置为保留,则默认列名为SHAREPLEX_SOURCE_OPERATION
的列值将会有两条记录:1.更新前的值 2.更新后的值
注:保留前镜像的行不包含任何类型为log的字段,因为redo log不会记录log
的前镜像。
by你好我是李白
可以取消设置SP_OPO_TRACK_PREIMAGE参数,然后通过使用target命令set
cdc preimage选项将全局设定改为表级别。
c) 在记录历史表中包含操作行的所有列值
在目标端记录改变历史的表中记录源端修改的行的所有列的值,而不仅仅包含
修改的列值,需要进行如下操作:
✓ 打开源端表基于所有列的最小附加日志。
示例语句:ALTER TABLE EMP ADD SUPPLEMENTAL LOG DATA (ALL)
COLUMNS;
✓ 在源端设置参数SP_OCT_USE_SUPP_KEYS为1.
✓ 在源端设置参数SP_OCT_INCLUDE_UNCHANGED_COL 为1.
注:当同时启用SP_OCT_USE_SUPP_KEYS与SP_OPO_TRACK_PREIMAGE参
数时,前镜像行将包含改变前行所有列值。
d) 在记录改变历史的复制中屏蔽掉操作类型
在目标端屏蔽掉源端DML操作类型,设置SP_OPO_TRACK_OPERATIONS参数
为合适的值,使用斜杠/分开多个值。例如,维护改变历史表只记录insert与
update,改变参数值为I/U。默认值为I/U/D,将记录所有的DML操作。
e) 设置规则与过滤器
可以通过使用target命令的set rule 选项去设置应用条件控制改变是否应用到
目标记录改变历史表中。例如,你可以指定一个加入第一列与第三列改变了,
然后应用操作并且丢弃在其他行上的任何改变,可以参考SharePlex Reference
Guide。
f) 包含提交操作
默认的,提交记录不包含在记录改变历史表中。可以通过配置Post去插入每一
次提交记录,设置SP_OPO_TRACK_COMMITS参数为1.
by你好我是李白
4.6 Oracle到Kafka复制
4.6.1概述
SharePlex的Post进程可以连接并写入到Kafka的broker中。数据被以
XML记录并包含数据定义、操作类型以及被修改的列值写入。数据被以在源端
发生的操作的连续系列写入,这些数据可以被以连续的顺序发送到目标数据库
或者被外部程序消费。
4.6.2发送到Kafka说明
SharePlex的Post进程扮演一个Kafka producer角色。一个SharePlex Post
进程只能写一个broker的默认partition 0的单一topic。想支持多个topics
或者多个broker,需要使用命名Post队列的方式配置多个SharePlex Post
进程。
SharePlex的Post进程不会创建topics,必须在Kafka平台创建topic。
出于考虑性能的原因,Post在发送到Kafka broker之前将消息集合到一批。
优化参数可用来控制批消息的大小。这可以用来平衡性能与延迟。
注:SharePlex到Kafka平台支持的平台,数据类型以及操作类型可以参考
SharePlex的Release Notes文档。
4.6.3源端SharePlex配置
当复制数据到Kafka平台时,使用一下步骤配置源端数据库以及SharePlex。
4.6.4开启supplemental logging
在源端系统oracle数据库中,启用PK/UK最小附加日志。SharePlex必须
有Oracle键信息在目标端创建合适键。
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(PRIMARY
KEY,UNIQUE) COLUMNS;
4.6.5设置SP_OCT_USE_SUPP_KEYS参数
在源端系统,设置SP_OCT_USE_SUPP_KEYS参数为1,。这个参数指导
SharePlex使用Oracle最小附加日志列作为关键键值列当update或者delete一
by你好我是李白
行数据时。当数据库supplemental logging以及该参数都被设置之后,这保证
了SharePlex可以总是构建键以及SharePlex键匹配Oracle的键。
注:可以通过查看Reference Guide官方文档查看更多关于
SP_OCT_USE_SUPP_KEYS参数的信息。
4.6.6配置复制
在源端,创建SharePlex配置文件指定Capture的路由信息。配置文件的
变化,需要根据定制的复制策略,以下显示为路由数据到Kafka的语法要求。
说明:
SID为源端Oracle数据库ORACLE_SID
Src_为源端表的拥有者以及表名
:tgt_为可选项以及指定目标端表的拥有者以及名字。Use if either
component is different from that of the source table. 允许!kafka
与:tgt_之间没有空格。正确的关键字以及双引号中是大小写敏
感,”MySchema”.”MyTable”
host是目标系统的名字。
4.6.7目标端SharePlex配置
以下部分介绍配置SharePlex Post进程连接Kafka,你必须有一个正在运
行的Kafka broker。
配置Post到Kafka:
1)创建Kafka topic
2)启动sp_cop(不要已经激活源端配置文件)
by你好我是李白
3)运行sp_ctrl
4)使用target命令配置posting到Kafka broker的topic。示例如下:
sp_ctrl> target set kafka broker=localhost:9092
sp_ctrl> target set kafka topic=shareplex
See View and change Kafka settings for command explanations and options.
4.6.8查看并且修改Kafka设置
查看当前输出到Kafka的设置,使用如下命令。
sp_ctrl>target show
修改设置,使用如下命令。
sp_ctrl>target [queue queuename] set kafka property=value
说明:
队列queuename为post队列的名字,如果需要多个post进程,使用此选
项
下表中有属性以及取值
by你好我是李白
by你好我是李白
4.6.9设置恢复选项
如果Kafka进程突然意外中止,或者机器意外中止,行变化有可能会在
kafka的topic中写两次。消费者必须通过检测以及丢弃重复来管理这种情况。
在一个事务中对每一个行操作的记录都有相同的事务ID并且通常使用
sequence ID标记。这个属性在XML输出关键词txn元素下分别使用关键词id
与关键词msgldx。
事务ID是事务提交时间的SCN,sequence ID是在事务中行变化的index。
在重写Kafka topic的恢复情境中必须保证这两个值相同。
如果想要,可以使用target命令配置Post使每一个行改变记录包含附加的
metadata信息。
target [queue ] set metadata [, ]
queuenamepropertyproperty
Example
target set metadata time, userid, trans, size
To reset the metadata
target [queue queuename] reset metadata
To view the metadata
target [queue ] show metadata
queuename
by你好我是李白
5.日常监控
5.1 启动/关闭SharePlex
启动SharePlex:
以oracle用户登录
$ sp_cop &
$ ps -ef |grep sp_ 检查进程运行情况
关闭SharePlex
$ sp_ctrl
sp_ctrl> shutdown
5.2 登录控制台
SharePlex的日常维护主要通过登录控制台执行
使用oracle用户登录。
$ sp_ctrl
5.3 主要监控项目
A. 检查复制进程状态,应该为running状态
sp_ctrl> show
B. 检查队列状态,正常业务压力下各队列中Backlog数目不应过大,0表
示该队列中无数据积累。如果积累过多则需要关注(比如百万以上)。
sp_ctrl> qstatus
C. (只在源端)检查Capture进程详细状态,可以看到每个实例的当前
Oracle Redo log号(对应”Oracle Log”)和SharePlex正在处理的
Oracle Redo log号(对应”Redo Log”)。如果发现”Redo Log”滞
后”Oracle Log”,则需要关注。
sp_ctrl (yxzb:2200)> show capture detail
by你好我是李白
Host: yxzb
Operations
Source Status Captured Since
---------- --------------- ---------- ------------------
Running 28687899 19-Jun-09 01:10:59
Log reader threads:
Thread Instance Host Oracle Log Redo Log Log Offset Kbytes Read
------ ------------ ------------ ---------- -------- ------------ ------------
1 dl1 dcdb01 22338 22338 218919904 118315716
2 dl2 dcdb02 11378 11377 87642560 40060727
sp_ctrl> /
重复执行该命令,”Log Offset”的值应该是增长的。
管理归档文件时需注意,SharePlex已经处理完的(Redo Log - 1)归
档可以删除。
D. (只在目标端)检查POST队列详细状态,可以查看处理到什么时间的
数据了。如果发现“Transactions posted"小于10,或者处理的很慢了,
则需要关注。
sp_ctrl> show post detail
sp_ctrl> /
重复执行该命令,”Operations Posted”的值应该是增长的。
E. (只在目标端)查看不一致对象,如果发现不一致对象,可根据日志中
的信息确认发生不一致的数据,找到产生原因。最后要针对该表进行同
步(一般采用copy方式)。
sp_ctrl> show sync
F. 查看status库,关注error信息
sp_ctrl> show statusdb
by你好我是李白
G. 问题解决后,可清除日志
sp_ctrl> clear status all
H. 查看队列剩余空间(以下目录根据实际环境查看)
生产库:/databackup
管理库:/databackup
I. 查看数据库归档空间剩余
生产库:/arch01 & /arch02
5.4 查看日志
很多错误需要详细的日志信息帮助解决问题。
sp_ctrl> show log reverse
在vardir的log目录下包含各进程的日志文件,最主要的是event_log文件。
show log命令只是显示了event_log文件的部分内容。
如果event_log中的信息不足以帮助解决问题,还需要去log目录下查找具
体进程的日志。
生产库日志目录(根据自己实际目录查看):
/databackup/splex/vardir/log
管理库日志目录:
/databackup/splex/vardir/log
6.一些性能诊断方案
6.1 针对capture too slow
Cpature trace 信息收集按计划执行:
1.每个小时在源端执行一次,直至跑批业务结束,至少要覆盖业务高峰期。
sp_ctrl>trace capture
by你好我是李白
2.每小时在源端执行,收集更详细的信息
sp_ctrl> set param SP_OCT_UTILIZATION_TIMERS 1
let it run for 15 mins, then turn off
sp_ctrl> reset param SP_OCT_UTILIZATION_TIMERS
3.收集更详细的信息:
sp_ctrl> stop capture
sp_ctrl> set param SP_OCT_UTILIZATION_TIMERS 2
sp_ctrl> start capture
let it run for 15 mins, then turn off
sp_ctrl> reset param SP_OCT_UTILIZATION_TIMERS
sp_ctrl> stop capture
sp_ctrl> start capture
所有生成的*.csv文件都需要收集。
7.SharePlex一些问题的解决方案
7.1 View events and error
show log event查看event日志,show statusdb查看数据库配置状态。
当post检测到错误时,会记录100条sql语句以及不同步的数据,可以在
修复问题之后,使用该sql语句在条件设置的不苛刻情况下修复不同步的数
据,
进程日志,当进程出现问题,SharePlex不仅仅在event日志中记录,也会
在相应进程日志中记录。
7.2 忽略一些确定的可以忽略的错误
注意:
1.一些错误即使写入oramsglist,post也不会忽略这些错误。
by你好我是李白
2.忽略会造成一些隐藏的数据不同步情况,如果用户无法容忍post产生间隙或
者可以接受一些数据不同步,可以使用忽略,可以在vardir中log目录下查看
SID_查看详细的忽略掉的错误情况。
忽略post中的DML错误操作步骤:
a) 在目标库, 进入SharePlex的vardir目录下的data子目录。
b) 找到oramsglist文件。
c) 如果复制没有激活,使用文本编辑器打开该文件,如果复制激活状态,则
拷贝一份文件副本,然后使用文本编辑器打开副本。
d) 在文件的开始增加错误编号。
[oracle@11rac2 data]$ vim oramsglist
942
e) 在文件的末尾,添加每一个Oracle或者SharePlex错误号码,一个错误一
行。
f) 保存并关闭文件。
g) 如果post还在运行,则停止post。
h) 如果你编辑了一个oramsglist文件的镜像,则保存镜像文件名为原始的
oramsglist。
i) 修改SharePlex参数SP_OPO_CONT_ON_ERR为1.
j) 启动post。
7.3 insert null复制到Kafka不显示
7.3.1问题描述
a.表结构
SQL> desc CONTACT_CLSLIST
Name Null? Type
by你好我是李白
----------------------------------------- -------- ----------------------------
CUST_ID NOT NULL NUMBER(10)
CONTACT_SEQ NOT NULL NUMBER(4)
CONTACT_CLASS_SEQ NOT NULL NUMBER(4)
CONTACT_CLASS_CODE NOT NULL CHAR(1)
CONTACT_NO NOT NULL VARCHAR2(680)
CONTACT_EXT VARCHAR2(16)
b.源端插入以及目标段消费
正常插入
SQL> insert into contact_clslist values(666669,5,6,'d','zhang','san');
1 row created.
SQL> commit;
目标端情况,可以看到此时所有列值都有:
{"meta":{"time":"2017-11-
by你好我是李白
_CLASS_SEQ":"7","CONTACT_CLASS_CODE":"e","CONTACT_NO":"zhang"}}
可以为空列插入空值时
SQL> insert into contact_clslist values(666671,7,8,'f','wang','');
1 row created.
SQL> commit;
查看目标端情况,可以看到此时为空列也没有了:
{"meta":{"time":"2017-11-
28T12:12:47","userid":84,"op":"ins","scn":"813","rowid":"AAAU5
pAAJAAERkBAAu","trans":"3.26.157364","seq":1,"size":1,"table":"CL_CUST2.C
ONTACT_CLSLIST","idx":"1/1","posttime":"2017-08-
11T11:08:31"},"data":{"CUST_ID":"666671","CONTACT_SEQ":"7","CONTACT
_CLASS_SEQ":"8","CONTACT_CLASS_CODE":"f","CONTACT_NO":"wang"}}
因为针对插入时,如果值少于列值,针对未明确赋值的列oracle会自动填
入null值,所以第三种现象也是null值不显示的问题。
7.3.2解决方案
在源端设置SP_OCT_INSERT_INCLUDE_NULLS为1然后重启capture进程,
插入语句将包含null值。
sp_ctrl> set param SP_OCT_INSERT_INCLUDE_NULLS 1
sp_ctrl> stop capture
sp_ctrl> start capture
关于此问题可参考:/shareplex/kb/229190
by你好我是李白
7.4 AA复制中Post不处理问题
7.4.1 复制环境
环境 源端 目标端
Oracle版本 11.2.0.4 RAC 11.2.0.4 RAC
SharePlex版本 8.6.4 8.6.4
操作系统 AIX 6100 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
(5) sp_ctrl> start post
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
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
然后查看当前目录输出的文件,打开并查找需要跳过的对象表名,
找到obj_id。
$ ./sp_ctrl
sp_ctrl> set param SP_OPO_DISABLE_OBJECT_NUM
sp_ctrl> qstatus
可以查看是否已经跳过临时对象。
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)
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
by你好我是李白
7.7 误操作ora_setup
7.7.1 问题描述
使用错误的vardir进行了ora_setup,更新了/vardir/data/
连接数据库用户,下次启动SharePlex时,SharePlex源端read进程将无法正
常工作。
7.7.2 问题原因
有多个vardir,但是未指定SP_SYS_VARDIR变量值,或者使用export
SP_SYS_VARDIR设置变量值由于某些原因,变量并未生效导致执行ora_setup
脚本时,误将正在工作的链路的SharePlex user更换,导致链路下次启动将出
现问题,丢失数据。
7.7.3 问题解决
这个问题有两种解决办法,但是都会造成丢失数据的问题,所以一定要申请
停机时间并且在数据库不处理批作业的时候,保持源端数据静止一段时间,进
行如下步骤,需要的停机时间一个小时即可。
(1) qview中使用reset
这个方案不会将更新错的SharePlex User更换回来,但是会解决掉
SharePlex重启将不复制的问题。
On the Source machine
1. shutdown shareplex
qview -i
qview> qsetup
qview> reset x
qview >exit
On the Target machine
by你好我是李白
1. shutdown shareplex
2. qview -i
qview>qsetup port#
qview >reset p
qview >exit
If you have multiple post queues, reset the post queues that got
corrupted.
3. sqlplus splex/splex
truncate shareplex_trans
4. restart shareplex
(2) ora_setup更换用户
这个方案可以将用户更换回来,即设定正确的SP_SYS_VARDIR变
量,然后执行ora_cleansp,再重新ora_setup将用户更换回来,然后重
新激活配置文件。


发布评论