Chinaunix首页 | 论坛 | 博客
  • 博客访问: 597613
  • 博文数量: 152
  • 博客积分: 2684
  • 博客等级: 少校
  • 技术积分: 1126
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-29 11:03
文章分类
文章存档

2012年(6)

2011年(96)

2010年(50)

分类: Sybase

2011-11-07 15:27:50

本文由sybfresher在论坛所发,CU技术文章整理,供大家参考学习,转载请注明出处,谢谢。
 
最近在学习Sybase的RS,在坛子里学习了几篇有关RS复制的文章,受益非浅。这两天我也尝试着使用RS 的MSA来创建一对多的复制环境,把过程记录了下来,不敢独享,也许会对像我一样初学RS的TX有所帮助。愿各位高手少点拍砖,多些指正。MSA可以做很多事情,包括:1。一对多的数据库级别复制 2。一对多的Warm tandby 3。一对多的表级复制。本文只做了第一点的尝试(数据库的一对多单向复制),如果建立一对多的Warm Standby,需要稍微改动一下,使之双向复制。
1. 系统环境:Replication Server 15.1, ASE 15.0.2
2. 主点:SA.test,备点1:SB.test2,备点2:SC.test3,复制服务器主机为RS,复制服务器名字为RST4
3. 在复制服务器的interfaces文件中增加:
SA
        master tcp ether SA 5000
        query tcp ehter SA 5000

SB
        master tcp ether SB 5000
        query tcp ehter SB 5000


RST4_ERSSD #用于RS的嵌入式RSSD
        master tcp ether RS 7992
        query tcp ether RS 7992

SC
        master tcp ether SC 6000
        query tcp ether SC 6000

RST4
        master tcp ether RS 5005
        query tcp ether RS 5005

在三个ASE服务器的interfaces文件中分别增加复制服务器和其他ASE服务器的接口信息。

4. 在复制服务器上使用rs_init配置复制服务:
首先在/opt/rep151/data目录下touch一个文件名rs151RST4.dat。
Replication Server Name:  RST4
Is this Replication Server the ID Server?  Yes
Do you want Replication Server System Database embedded: yes
ERSSD Name:  RST4_ERSSD
Disk Partition path:  /opt/rep151/data/rs151RST4.dat
Logical Identifier for Disk Partition:  RST4Part

5. 增加主点:
Replication Server Name:  RST4
SQL Server name:  SA
Database name:  test
Will the database be replicated:  yes

6. 增加备点SB:
Replication Server Name:  RST4
SQL Server name:  SB
Database name:  test2

7. 增加备点SC:
Replication Server Name:  RST4
SQL Server name:  SC
Database name:  test3

8. 在主点执行:
1> use test
2> go
1> sp_reptostandby test,'all' 
2> go
1> sp_config_rep_agent test,"send warm standby xacts","true"
2> go

9. 在RS上执行:
1> create database replication definition repdef_1 with primary at SA.test
2> go

1> create subscription sub_1 for
2> database replication definition repdef_1
3> with primary at SA.test
4> with replicate at SB.test2
5> without materialization
6> subscribe to truncate table
7> go

1> create subscription sub_1 for
2> database replication definition repdef_1
3> with primary at SA.test
4> with replicate at SC.test3
5> without materialization
6> subscribe to truncate table
7> go

10. 由于此时我不需要同步主、备数据库的内容,因此我没有使用dump/load命令把主库的数据同步到两个备库,此时仍需要将备库与主库的同名用户的uid保持一致。如果使用dump/load,就需要注意用户名的问题:将备库增加到复制系统后,复制服务器会自动在备库增加一个维护帐户,例如SB.test2中会增加一个名为test2_maint的user。将主库的数据load到备库后,sysusers里的数据将被覆盖,因此需要手工增加该用户,并注意suid与uid的对应关系。
也可以使用bcp来进行同步。

11. 在SB执行:
1> grant role sa_role to test2_maint
2> go

12. 在SC执行:
1> grant role sa_role to test3_maint
2> Go


13. 在SA.test、SB.test2、SC.test3中执行:
1> create table t1(c1 int)
2> go

在SA.test中执行:
1> insert into t1 values(10)
2> go
如果一切顺利,数据将会被复制到2个备点中。但此时并没有复制DDL,如果想复制DDL,可以在RS中修改复制定义:
1> alter database replication definition repdef_1
2> with primary at SA.test
3> replicate DDL
4> go

然后在主库中执行:
create table t2(c2 int)
过一会儿后t2就会被复制到两个备点了。
阅读(1392) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~