SYBASE ASE代理表的应用

SYBASE ASE代理表的应用

问题背景

  • 在解决数字法院现场问题时发现做读写分离的省份,写库和读库经常发生库结构不一致情况,比如读库字段缺失、索引缺失、字段顺序不一致,失会导致RS队列堆积甚至复制失败,如何检查生产环境的读写库结构一致性呢?
  • 公司在大力推行git-flow分布式开发模式,开发任务划分更细化,分支团队更多,每个团队维护使用的数据库也更多,怎么保证和检测代码合并后数据库的一致性呢?

解决问题

整体思路:

  • 通过SYBASE 组件集成服务(CIS)提供的代理表功能,访问远程服务器的数据库对象。将远程数据库的系统表和业务库的配置表代码表信息收集到本地服务器做库结构和数据一致性检查分析。

  • 以数字法院为例:

第一步:配置远程数据库连接

--NP_1210_6000为本地数据库
--NP_1211_6000为远端数据库

--sa登陆NP_1210_6000
--打开cis配置
use master
go
sp_configure 'enable cis',1
go
sp_configure "cis rpc handling", 1
go
sp_configure "max cis remote connections", 20 
go
--在双方服务器interfaces中添加对方服务器信息
--将本地服务名添加为local
sp_addserver NP_1210_6000,local
go
--重启服务器检查cis和服务名是否生效
--添加远程服务器信息
sp_addserver NP_1211_6000, ASEnterprise,NP_1211_6000
go
--添加远程登陆信息
sp_addremotelogin NP_1211_6000, sa, sa
go
sp_remoteoption NP_1211_6000, sa, sa, trusted, true
go

第二步:创建PROXY库收集远程数据库信息

--创建PROXY库
use master
go
disk init 
name='DEV_PROXY_DAT01',
physname='/home/sybase/sybasedata/DEV_PROXY_DATA01.dat',
size = '5G'
go
disk init 
name='DEV_PROXY_LOG01',
physname='/home/sybase/sybasedata/DEV_PROXY_LOG01.dat',
size = '1G'
go
create database PROXY 
on DEV_PROXY_DAT01='5G'
log on DEV_PROXY_LOG01 = '1G'
go
--设置PROXY数据库属性等操作省略...

--创建远程代理表
use PROXY
go
create proxy_table pri_ywst_sysobjects  at "NP_1211_6000.YWST.dbo.sysobjects"
go
create proxy_table pri_ywst_syscolumns  at "NP_1211_6000.YWST.dbo.syscolumns"
go
create proxy_table pri_jcsz_sysobjects  at "NP_1211_6000.JCSZ.dbo.sysobjects"
go
create proxy_table pri_jcsz_syscolumns  at "NP_1211_6000.JCSZ.dbo.syscolumns"
go
create proxy_table pri_db_aty_sysobjects  at "NP_1211_6000.DB_ATY.dbo.sysobjects"
go
create proxy_table pri_db_aty_syscolumns  at "NP_1211_6000.DB_ATY.dbo.syscolumns"
go

--收集远程库信息
create table T_TABLE_COLS (
  C_SITE varchar(100) null,
  C_DB   VARCHAR(100) NULL,
  C_TABLE VARCHAR(100) NULL,
  C_COLNAME VARCHAR(100) NULL,
  C_COLORDER INT NULL
)
go

insert into T_TABLE_COLS
select 'ST', 'YWST', obj.name, col.name, col.colid 
   from YWST..syscolumns col, YWST..sysobjects obj 
where col.id = obj.id and obj.type = 'U'
union all
select 'ST', 'JCSZ', obj.name, col.name, col.colid 
   from JCSZ..syscolumns col, JCSZ..sysobjects obj 
where col.id = obj.id and obj.type = 'U'
union all
select 'ST', 'DB_ATY', obj.name, col.name, col.colid 
   from DB_ATY..syscolumns col, DB_ATY..sysobjects obj 
where col.id = obj.id and obj.type = 'U'
union all
select 'PR', 'YWST', obj.name, col.name, col.colid 
   from PROXY..pri_ywst_syscolumns col, PROXY..pri_ywst_sysobjects obj 
where col.id = obj.id and obj.type = 'U'
union all
select 'PR', 'JCSZ', obj.name, col.name, col.colid 
   from PROXY..pri_jcsz_syscolumns col, PROXY..pri_jcsz_sysobjects obj 
where col.id = obj.id and obj.type = 'U'
union all
select 'PR', 'DB_ATY', obj.name, col.name, col.colid 
   from PROXY..pri_db_aty_syscolumns col, PROXY..pri_db_aty_sysobjects obj 
where col.id = obj.id and obj.type = 'U'
go


第三步:检查两个节点库结构和数据一致性。

--分析库结构一致性
use PROXY
go

--分析字段缺失   
SELECT * FROM (
   select p.C_SITE AS PR_SITE,
           p.C_DB AS PR_DB,
           p.C_TABLE AS PR_TABLE,
           p.C_COLNAME AS PR_COLNAME,
           s.C_SITE AS ST_SITE 
   from T_TABLE_COLS p 
      left join T_TABLE_COLS s  on p.C_SITE = 'PR' and s.C_SITE = 'ST' AND p.C_DB = s.C_DB AND p.C_TABLE = s.C_TABLE and p.C_COLNAME = s.C_COLNAME 
) t 
where t.ST_SITE IS NULL

--分析字段一致性
select * from T_TABLE_COLS p ,T_TABLE_COLS s 
where p.C_SITE = 'PR' and s.C_SITE = 'ST' AND p.C_DB = s.C_DB AND p.C_TABLE = s.C_TABLE and p.C_COLNAME = s.C_COLNAME 
and p.C_COLORDER != s.C_COLORDER

--还可以做:
--分析索引的一致性
--分析表数据的一致性
--等等


总结

同理可以将配置表、单值代码表等做代理来检测数据的一致性,各大DBMS都有远程代理的功能如ORACLE的DBLINK、ABASE的FDW等,通过远程代理我们可以做很多对开发管理和运维管理有帮助的工作!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值