devilring
发表于 2012-05-10 10:57
这样吧,我把之前执行的几个命令结果集都再发一遍,请各位高手再看看
我的目的也很明确,因为我猜测服务器上原有的复制机制是使用的数据库复制(create database replication definition)这种批量的方式,所以想在现有的数据库复制定义下,增加或删除所需要复制的表,我已经测试过,在主库创建一个表,备库是不会同步创建的,而且我问询过之前sybase工程师安装时我单位在现场的同事,他也告诉我考虑到日志量问题当初仅设置为数据复制;以下是之前各位高手让我执行的命令和结果:
1>rs_helprep
2>go
Replication Definition Name PRS Primary DS.DB Primary Table Replicate Table Type
--------------------------- --- ------------- ------------- --------------- ----
rs_classes JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_classes Tbl
rs_columns JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_columns Tbl
rs_databases JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_databases Tbl
rs_dbreps JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_dbreps Tbl
rs_dbsubsets JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_dbsubsets Tbl
rs_erroractions JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_erroractions Tbl
rs_funcstrings JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_funcstrings Tbl
rs_functions JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_functions Tbl
rs_objects JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_objects Tbl
rs_routes JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_routes Tbl
rs_systext JIFEIRS JIFEI_RSSD.JIFEIRS_RSSD rs_systext Tbl
Sybase RSMServer_JIFEIRS_RSMReplication Definition Name PRS Type Creation Date
--------------------------- --- ---- -------------
rs_databases JIFEIRS TblJan 18 20085:21PM
1>rs_helprep rs_databases
2>go
PDS.DB Primary Table Replicate Table
------ ------------- ---------------
JIFEI_RSSD.JIFEIRS_R rs_databases rs_databases
Col. Name Rep. Col. Name Datatype Len. Pri. Col. Searchable
--------- -------------- -------- ----------- ----------- -----------
dsname dsname varchar 30 1 0
dbname dbname varchar 30 1 0
dbid dbid int 4 1 0
dist_status dist_status tinyint 1 1 0
src_status src_status tinyint 1 1 0
attributes attributes tinyint 1 0 0
errorclassid errorclassid binary 8 1 0
funcclassid funcclassid binary 8 1 0
prsid prsid int 4 1 1
rowtype rowtype tinyint 1 0 1
sorto_status sorto_status tinyint 1 1 0
ltype ltype char 1 1 0
ptype ptype char 1 1 0
ldbid ldbid int 4 1 0
enable_seq enable_seq int 4 1 0
Function Name FString Class FString Source FString Name
------------- ------------- -------------- ------------
rs_delete rs_sqlserver_function_class Class Defaultrs_delete
rs_insert rs_sqlserver_function_class Class Defaultrs_insert
rs_select rs_sqlserver_function_class Class Defaultrs_select
rs_select_with_lock rs_sqlserver_function_class Class Defaultrs_select_with_lock
rs_truncate rs_sqlserver_function_class Class Defaultrs_truncate
rs_update rs_sqlserver_function_class Class Defaultrs_update
Subscription Name Replicate DS.DBOwner Creation Date
----------------- -------------------- -------------
1>rs_helpdbrep
2>go
DB Rep.Def. NamePrimary DS.DBPrimary RS Rep.DDL Rep.Sys. Rep.Table Rep.Func. Rep.Tran. Creation Date
--------------------------------------- ----------- ----------- ----------- ----------- ----------- -------------
Eisen
发表于 2012-05-10 10:59
哦。那么看来不是MSA,而是warmstandby,那你先照2BeSybPro老大说的,先到主点库那里用
sp_reptostandby dbname看看显示
devilring
发表于 2012-05-10 11:07
回复19楼,我单位的复制服务器并没有出错,一直正常运行着,数据复制也正常,现在的情况是我们有个应用系统升级了,表结构变化了,还新增加了些表,所以我想把这些表结构变化的表先从原有的数据库复制定义里去掉,然后修改完表结构,并添加好新增表,再把这些表添加到数据库复制定义里;而且不用create replication definition 和create subscription 这种方式,用alter database replication definition这种批量的方式,这是我通过这几天自己看资料找到的最快的办法,而且改动也少,但是我不知道是否可行,而且又不太会用这些命令,也不知道怎么找到原有的数据库复制定义的defname,所以发帖子请教,问问高手们我这种思路对不对,如果对请告诉我命令怎么用,越详细越好,谢谢!
再次注明下:我没有安装介质,没有测试环境,只有一个正常运行的生产环境,而且生产环境的rm图形界面的客户端坏了(Sybase RSMServer_JIFEIRS_RSM)服务启动不了了,所以我无法通过可视化界面来操作,只有使用后台命令
2BeSybPro
发表于 2012-05-10 11:07
你的系统绝对是warmstandby,所有命令和数据应该自动复制。rs_helprepdb是不会有结果的。表不会同步创建是因为数据滞后(latency)。
在Replication server上跑下面的命令。
admin health
go
admin disk_space
go
admin who,sqm
go
admin who,sqt
go
devilring
发表于 2012-05-10 11:14
1> admin health
2> go
Mode QuiesceStatus
---------------- -------- --------
NORMAL TRUE HEALTHY
1> admin disk_space
2> go
Partition Logical Part.Id Total SegsUsed Segs State
-------------------------- ------------------------------- ----------- ----------- ----------- -------------------------------
d:\device\SD_JIFEIRS_04 SD_JIFEIRS_04 104 2000 0 ON-LINE//
d:\device\SD_JIFEIRS_02 SD_JIFEIRS_02 102 2000 0 ON-LINE//
d:\device\SD_JIFEIRS_01 SD_JIFEIRS_01 101 2000 0 ON-LINE//
d:\device\SD_JIFEIRS_03 SD_JIFEIRS_03 103 2000 1 ON-LINE//
1> admin who,sqm
2> go
Spid State Info DuplicatesWrites Reads Bytes B Writes B Filled
---- -------------------- -------------------------------------------- ----------- ----------- ----------- ----------- -----------
10 Awaiting Message 108:1 APCHUANBO3.bohai 7330 197980799 388566052 -1970069355 14154325 13191558
9 Awaiting Message 108:0 APCHUANBO3.bohai 0 0 0 0 0 0
8 Awaiting Message 101:0 JIFEI_RSSD.JIFEIRS_RSSD 0 0 0 0 0 0
B Reads B Cache Save_Int:Seg First Seg.Block Last Seg.BlockNext Read Readers Truncs
----------- ----------- --------------- ----------------- --------------- ----------- ----------- -----------
26707585 11860150 0:782285 782285.21 782285.21 782285.22.0 2 2
0 0 strict:0 0.1 0.0 0.1.0 1 1
0 0 0:0 0.1 0.0 0.1.0 1 1
1> admin who,sqt
2> go
Spid State Info Closed Read Open Trunc Removed Full SQM Blocked First TransParsed SQM ReaderChange Oqids Detect Orphans
---- -------------------- ------------------------------ ----------- ----------- ----------- ----------- ----------- ----------- ----------- ------------------------ ----------- ------------ --------------
17 Awaiting Wakeup 108:1DIST APCHUANBO3.bohai 0 0 0 0 0 0 1 0 0 0 0
12 Awaiting Message 101 JIFEI_RSSD.JIFEIRS_RSSD 0 0 0 0 0 0 0 0 0 0 1
11 Awaiting Message 108 APCHUANBO3.bohai 0 0 0 0 0 0 0 0 0 0 1
176 Awaiting Message 110 JIFEI.bohai 0 0 0 0 0 0 0 0 1 1 0
2BeSybPro
发表于 2012-05-10 11:18
你的9137错误是因为命令错,用了引号不正确。
create database replication definition ....
with primary at ....
replicate tables in ('userA.t1', 'userA.t2')
It should be:
create database replication definition ....
with primary at ...
replicate tables in (userA.t1, userA.t2)
Warmstandby不要用create database replication definition,for warmstandby replication definition不是必须的(只是为了提高性能)。
devilring
发表于 2012-05-10 11:18
在主数据库执行结果如下:
1> use bohai
2> go
1> sp_reptostandby bohai
2> go
The replication status for database 'bohai' is 'NONE'.
(return status = 0)
2BeSybPro
发表于 2012-05-10 11:28
正如我最先估计的一样,你的系统用的是warmstandby和sp_setreptable。你必须用sp_setreptable手工设置表复制。
Eisen
发表于 2012-05-10 11:34
本帖最后由 Eisen 于 2012-05-10 11:36 编辑
2BeSybPro 发表于 2012-05-10 11:28 static/image/common/back.gif
正如我最先估计的一样,你的系统用的是warmstandby和sp_setreptable。你必须用sp_setreptable手工设置表复制 ...
对。不过,估计他在alter table后,之前sp_setreptable的标记都没了,
lz你到bohai那个库上去,挨个对你希望复制的表执行
sp_setreptable tablename检查一下复制标记状态。
另外,还去你主点库bohai上执行
sp_config_rep_agent bohai
看看有否开启"send warm standby xacts"
devilring
发表于 2012-05-10 11:37
回复25楼:
1、高手老大,你说的那个什么用了引号不正确,可是那存储过程也不是我写的啊,是系统里自带的啊。。。。。这是咋回事
2、create database replication definition 命令和 alter database replication definition 命令,我用省略号是因为我不会啊,你就别用省略号了吧,麻烦给我写个例子吧,既然2BeSybPro老大和Eisen老大都认为我说的在原有数据库复制定义的基础上增加和删除需要复制的表这种方式可行,那就请给我个用alter database replication definition 来实现的例子吧,你们千万别省略,我省略是我不懂啊。。。。。。。
3、再就是想个办法让我能确认并找到现有的数据库复制定义的rep_defname,这样我就明了了
以下是我的主服务器、备份服务器,rs服务器的名字:
主:server名apchuanbo3,数据库名:bohai
备:server名jifei,数据库名:bohai
rs:jifeirs,jifei_rssd,jifei_rsm