复制服务器维护手册
1. 准备:RS12.5及以前版本需要一个ASE数据库服务器来存放RSSD数据库,可以用已存在的ASE或新建一个ASE作为RSSD的数据库服务器;RS12.6及以后版本可以使用ASA或者ASE作为RSSD的数据库服务器,若使用ASA则无需准备,安装RS时会自动创建。
2. 安装部分:使用setup 或 install应用程序从安装介质卸载RS产品到机器上
3. 配置部分:使用rs_init 应用程序来安装配置RS
1. 创建sybase用户
2. 创建sybase安装目录
3. 执行install (图形界面)或者 install –c (文本界面) 安装RS服务器产品
4. 设置SYBASE环境变量
sh or ksh使用 cat $SYBASE/ SYBASE.sh >> $SYBASE/.profile
csh 使用 cp $SYBASE/SYBASE.csh $SYBASE/.cshrc
5. 执行dscp增加一个复制服务器和一个复制服务管理器的interface信息
6. 执行rs_init 配置一个新的复制服务器(RS)
7. 执行rsmgen 配置一个新的复制服务管理器(RSM)
1. 执行setup 安装RS服务器产品
2. 重启机器
3. 执行dsedit增加一个复制服务器和一个复制服务管理器的interface信息
4. 执行rs_init 配置一个新的复制服务器
5. 执行开始菜单中的“RSM Server设置” 配置一个新的复制服务管理器 (注意RSM Server Char Set一项最好选择iso_1)
1. 安装RS_pcclient客户端产品
2. 如果RSM服务不在本机,用dsedit增加一个RSM服务
3. 在sybase central菜单中选择“工具”->“连接”->“Sybase Replication Server”, 然后在弹出的界面中选择RSM服务器,第一次用sa登录
4. 在登录进去的RSM server中使用“add server”将相关ASE和RS增加进来,增加RS之前需先将其RSSD所在的ASE加进来。
1. PDS:
包含主数据的数据服务器
2. PDB:
包含主数据的数据库
3. PRS:
Primary RS - 主复制服务器,它负责:
-从RepAgent接受事务
-把事务转发给其它RS或直接修改RDB
-把有关复制定义等的信息转发给已建立路由的其它RS
每个RSS至少有一个PRS,它负责汇集要出版发行的数据
4. RSSD:
RS System Database
每个RS都有其自己的RSSD( including all system tables),内容主要为:
-有关SD的信息
-有关Replietion definition,subscriptions,publications的信息
-有关Routes的信息
-拒收的事务
5. Stable Device(SD):
中转设备
每个RS都有自己的SD,用来保存它要处理的信息。它包含三类中转队列(Stable queues)
IBQ(Inbound queues)进站队列:PDB中已开始但未commit的事务中的数据
OBQ(Outboud queues)出站队列:已commit且正在写入RS的SD中的事务中的数据
MatQ(Matarialization queues)初始化队列:自动初始化时用到的数据和命令
6. RepAgent thread:
复制代理线程,是ASE的内部线程
-读取PDB的事务日志,找出作用于带有复制标记的表上的事务
-利用LTL语言把这些事务转发给RS
-维护事务日志中的第2截断点,从而保证在该事务未被贮存 到RS的SD中之前,不会被截断
7. second trancate point:
第二截断点
在数据库LOG中维护一个基本(primary)截断点,利用它标明事务活动边界-实现LOG
空间的回收。在复制系统中,由RepAgent维护第二(second)截断点,利用它标明事务已被转发给复制服务器-在事务未转发给复制服务器之前,相应的LOG空间不可被回收
8. SQT:
Stable Queue Transaction interface:
该线索由SD队列读出信息流并按其提交次序进行装配
9. DSI EXEC:
该线索对RDB执行事务
10. DSI:
Data Server Interface scheduler thread:
它通过SQT 读出SD队列然后通过DSI EXEC线索对RDB执行事务
11. Replication definition:
复制定义(Repdef),指明可复制的主表数据,其中包含:
- PDB的地点
-主表名称
-列或参数及其数据类型
-主表的PK
-搜索列(可在where子句中使用的列)
针对一个主表可建立多个复制定义
12. Article:
文章
是指已利用create article命令被加入到一个publication-出版物中的Repdef(复制定义)
13. publication:
出版物,可以简化系统管理
可把一个复制点要订阅的所有Article都组装成一个出版物单元(publication)
14. subcription:
订阅物
Repdef的作用只是使得相应主数据可供其它点请求复制,但在真正要求把数据复制到一个复制点时,还必须使用subscription
15. Replicated procedure:
可复制的存储过程
所谓可复制的存储过程是指当该存储过程在一个数据库(主点或复制点)执行后,
可连同参数一起被复制它另一个数据库去执行它
16. Projections:
投影
针对一张表的不同垂直片(投影)建立多个供出版的Repdef
其作用是使各复制点只获得主数据的不同的视图
17. Connection:
连接
RS对受其管理的每个DB使用一个connection.
RS中的maintenance user 利用DSI(Data Server Interface)线 索
通过一个connection把PDB的更新传送给RDB
18. IBQ:
进站队列
PDB中已开始但未commit的事务中的数据
对应每个PDB都有一个IBQ
如果事务被rollback,RS则废弃IBQ中已收到但还未送入OBQ(或RDB)的数据行
19. OBQ:
出站队列
PDB中已commit且正在被写入RS的SD或直接写入RDB中的事务中的数据
对每个与该RS连接的RDB以及每个与该RS建立路由的RS都有一个OBQ
20. MatQ:
初始化队列
保存自动初始化时用到的数据和命令
其空间大小必须足以保存RS在进行初始化时涉及的全部信息:
-从PDB取出的全体订阅物
-在一个大事务中插入的全体数据
21. exceptions log:
例外日志
用到RSSD中的三张系统表
rs_exceptchdr,rs_exceptcmd,rs_systext
如果定义了错误处理动作:则失败的事务能自动记入其中
由管理员定期地监视和解决这些失败的事务
必须定期地清理它,否则会填满RSSD可用空间
22. Function:
函数
它是个RS对象,它代表数据服务器的一个操作,比如insert, delete, select或begin tran。RS把这些操作当作函数发送给其它RS,每个函数是一个名字及一组数据参数组成。为了能在一个目标数据库中执行这个函数,RS利用函数串(function string)把它转换为一个或一组数据库命令
23. Replicate RS:
RRS复制点RS
-其功能是由PRS接收事务然后把它作用於一个RDB
-对与PDB地理距离非常远的RDS设置一个RRS可改善性能
24. Intermediate RS
IRS中间RS
-其功能仅仅是由一个RS接收事务然后再把它转发另一个RS
-为距PDB较远而彼此邻近的一组RS再设置一个IRS,
则可改善性能及网络利用率
25. Route:
路由
在两个RS间建立连接
一个RS利用route向另一RS发送数据和信息。
RSI(Replication Server Interface)线索利用Router把数据和消息发送给其他RS
设置一个route则针对源RS的RSSD中的各表在目的RS的RSSD中自动建立相应订阅者(subscriptions)
启动RS:如果RSSD server是ASE,必须先启动该ASE;
NT平台上在控制面板的服务中或者在sybase central中启动服务
UNIX平台上执行安装目录下install里的RUN_xxx启动复制服务器
停止RS:如果RSSD server是ASE,必须先停止RS再停止该ASE;
可在服务中停止RS服务;
也可isql登录到RS执行shutdown 停止RS服务
启动agent:isql登录到主点数据库中,执行sp_start_rep_agent PDB
停止agent:isql登录到主点数据库中,执行sp_stop_rep_agent PDB
isql登录到RS中,执行admin who 检查所有线程
admin who_is_down 检查RS中down掉的线程
admin who_is_up 检查RS中up的线程
isql登录到RS中,执行 resume connection to RDS.RDB
如果要跳过使DSI down的第一个事务:resume connection to RDS.RDB skip transaction
修改复制服务器的cfg文件中RS_charset=xxxx
两种方法:
1. Isql登录到RS中,执行如: configure replication server set memory_limit to "256"
2. Isql登录到RSSD中,执行rs_configure 检查所有参数值
rs_configure memory_limit, 256 修改参数
通常修改的参数有memory_limit,sqt_max_cache_size,sts_cache_size 等;如果配置的connection 较多,可修改相关线程参数。
参数修改后需重新启动RS使之生效。
isql登录到RS,执行admin disk_space 检查稳定队列空间使用情况
增加partition:add partition logical_name on ‘physical_name’ with size xxxx
删除partition:drop partition logical_name
(partion文件必须先存在,unix下可以先touch该文件,windows下也同样)5
1)登录RS: create error class test_error_class
2)登录RSSD: rs_init_erroractions test_error_class,rs_sqlserver_error_class
3)登录RS: (以忽略重复键值为例)
assign action log for test_error_class to 2601
assign action ignore for test_error_class to 3621
4)登录RS:
suspend connection to RDS.testb
alter connection to RDS.testb set error class test_error_class
resume connection to RDS.testb
表中有大字段时,该字段在复制定义里的状态需与其在主点数据库里的复制状态一致
如 create replication definition REP_TABLE
with primary at PDS.PDB
with all tables named TABLE1
(A int, B text null)
primary key (A)
replicate minimal columns
relicate_if_changed (B)
在PDB:sp_setrepcol TABLE1,B,replicate_if_changed
或者两边都为 always_replicate 或do_not_replicate状态
在RDB(复制点数据库)中maint用户需有数据库的dbo权限
在生成复制定义时注意主键的完整
在图形界面中生成复制定义时,如果一个表的主键定义为identity字段再加别的字段
,图像界面生成的复制定义只有identity字段定义为主键,需要手工去修改与原来的主键一致.
登录到RSSD,执行rs_helpexception 列出所有exception
执行 rs_helpexception transaction_id, v 查看某一事务的详细信息
使用 rs_delexception transaction_id 可删除该事务信息
登录到RS,执行sysadmin log_first_tran, RDS, rdb
然后在RSSD里通过rs_helpexception查看其信息
drop connection to DS.DB
如果连接的是主点数据库,在DB里执行sp_config_rep_agent DB,disable
在数据库DB里删除rs_开头的表及存储过程,删除maint用户
登录到主点数据库PDB,先停止agent:sp_stop_rep_agent PDB
use PDB ,去掉第二截断点:dbcc settrunc( ltm, ignore)
注意:该命令会导致主点数据库丢掉未复制出去的事务,造成数据不一致,只是在万不得以时才执行。
1) PDS:sp_addserver PDS, local
2) RS:create user PRS_ra set password PRS_ra_ps
3) RS:grant connect source to PRS_ra
4) RS:alter connection to PDS.PDB set log transfer to ON
5) PDB:sp_config_rep_agent PDB,enable,PRS,PRS_ra,PRS_ra_ps
6) PDS:sp_start_rep_agent PDB
1)创建逻辑连接:create logical connection to ds.db
2)增加active 数据库: 使用 rs_init
(选择active库会备复制,is this a Physical Connection 选择 yes)
3)设置active数据库的复制状态:sp_reptostandby activedb,'all'
4)增加standby数据库: 使用 rs_init
(在rs_init中, 选择standby库会备复制,is this a Physical Connection 选择 yes
设置为standby,填入已建立好的逻辑连接ds和db,备份库也要选择被复制状态)
5)如果standby数据库中suid 在syslogins与sysusers不一致,则修改它们:
update <standbydb>..sysusers set users.suid = logins.suid
from <standbydb>..sysusers users, master..syslogins logins
where users.name = logins.name and users.suid <> logins.suid
6)给standby数据库中maint用户增加dbo权限:sp_addalias rdb_maint,dbo
7) 启动active 和 standby 数据库的连接
(在rep中用admin who_is_down 查看后,用resume connection to)
(不记录日志的事务1 select into 2 快速bcp 3 truncate
table,前两个不会复制到备点,而truncate table 可复制到备点)
登录到RS,执行
alter connection to RDS.RDB set dsi_keep_triggers to ‘off’
go
1)检查RS日志文件
2)检查RSSD server日志文件
3)检查PDS或RDS日志文件
4)根据Sybooks Troubleshooting Guide的提示采取措施
(通常有空间、权限、重复键值、数据类型匹配、规则、约束等原因)/
5)错误信息记录在rs_systext表里,可以在安装后立刻做表备份,以后可以truncate
rs_systext表,再导入原来备份信息
通常可能的情况是,主点数据库中存在早期的未提交事务,时间越长,inbound会越大;而因为事务未提交,其数据是不会复制到复制点数据库的。这种情况要尽快处理,否则会影响到partition空间以及主点数据库的空间。方法是查询主点数据库服务器的master..syslogshold,找到dbid为主点数据库的用户事务进程(而不是replication_truncation_point)的spid,并kill该spid。
执行大事务(如一次性insert,update,delete数百万行记录)会产生大量日志,而复制服务器是根据日志进行复制的,这样可能会造成:
1) 主点数据库日志空间被大量占用
2) 复制服务器的partition空间被大量占用
3) 复制点的locks数目被耗尽
4) 等待这个事务复制完成需要很长时间
方式
l dump load方式,应该先把主点数据库中登录名也在备点建立
时机:
l 可以先在配置复制前同步数据
l 也可以先配置好复制系统,建立好连接,出版,订阅,然后停止主点业务系统备份数据,
停掉复制到备点的连接,备点做数据同步,完成后,恢复备点到复制的连接.
l 通过图形界面出版的时候要求表要有主键或唯一索引,但是可以生成脚本,然后修改脚本,选定某个列做主键或唯一索引.
l 如果用脚本执行,要注意复制状态(要自己去处理设置主点的表,存储过程等允许被复制,)
限制
l 不能嵌套存储过程
l 不能内嵌事务
l 不能有slect into语句
l 备份点最好要求表有唯一索引(或复制定义时生成脚本,编辑指定某一索引,然后在命令行执行)
l 复制是事务的还原
l 1>alter user sa set password password
l 2>go