暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Times Ten 内存库业务负载过高进行拆库操作

IT那活儿 2022-04-12
690

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

问题背景

由于地市要上线新业务,但内存库负载较高,无法支撑新业务上线,对内存库进行拆库操作。

拆库割接步骤

老环境:ceshi11 ceshi21  主备  主机双实例(userinfo account)

路由库:ceshecbe19 ceshecbe29 主备 实例(cbedata)

新环境:ceshi12 ceshi22  主备  主机双实例(userinfo account)

1. 现网新环境清理(重启主机、检查服务IP、冻结HA服务,摧毁新环境TT库)。

2. 新环境TT库配置ini文件(新环境的连接串添加到ini文件中,在进行替换)。

将新环境连接串添加到sys.odbc.ini  sys.ttconnect.ini 这两个文件中。

3. 老环境导出结构,新环境TT库导入对象结构(ttschema userinfo/account)

--老环境主库导出对象结构:

ceshi11(userinfo):ttschema userinfo > /logds/dump/ceshi11 _userinfo .sqlceshi11(account):ttschema userinfo > /logds/dump/ceshi11 _accout .sql

--将导出的对象结构传输到新环境:

scp ceshi11*.sql ceshi12:/logds/dump

新环境将导入前编辑sql文本将关于序列,asp关系的语句保留下来在将它们去除。

--序列等数据导入到新环境后需要建立,asp关系新环境根据老环境创建。剔除的表保持一致。

ttisql userinfo@/logds/dump/ceshi11 _userinfo .sql 进行导入ttisql account@/logds/dump/ceshi11 _accout .sql 进行导入user info手动加载内存ttadmin -rampolicy manual -noautoreload userinfottadmin -ramload userinfo

--建立asp关系:

create active standby pairUSERINFO on " CESHI12", USERINFO on " CESHI22"store USERINFO on "CESHI12"failthreshold 100store USERINFO on "CESHI22"failthreshold 100

--打开复制进程:

ttadmin -repstart userinfo

--进入数据库将CESHI12设置为主库:

ttisql userinfocall ttrepstateset(‘active’);

--检查是否为active状态。

call ttrepstateget;

--account手动加载内存:

ttadmin -rampolicy manual -noautoreload accountttadmin -ramload accountttstatus

--建立asp关系:

create active standby pairACCOUNT on " CESHI12", USERINFO on " CESHI22"store ACCOUNT on "CESHI12"failthreshold 100store ACCOUNT on "CESHI22"failthreshold 100

--打开复制进程:

ttadmin -repstart account

--进入数据库将CESHI12设置为主库:

ttisql accountcall ttrepstateset(‘active’);

--检查是否为active状态。

call ttrepstateget;

以上可以在割接前提前准备。

4. 老环境冻结ha服务

crm configure property maintenance-mode=true

5. 停应用,检查老环境连接数

--查询总的连接数:

ttstatus | grep conn

--查询哪些应用的连接数比较高:

ttstatus |grep Server |awk '{print$4}' | sort | uniq -c

--杀连接:

ttstatus | grep "Node:" | grep -v grep | awk '{print $2}' | xargs kill -9ttstatus | grep Process | grep -v grep | awk '{print $2}' | xargs kill -9ttstatus | grep Server | grep -v grep | awk '{print $2}'  | xargs kill -9

@、检查主备事物同步状况:

ttisql -e "call ttrepsubscriberwait(,,,,-1);bye;" -connstr userinfottisql -e "call ttrepsubscriberwait(,,,,-1);bye;" -connstr accountttisql -e "call ttrepsubscriberwait(,,,,-1);bye;" -connstr cbedata

注:  < 00 >  --00(正常),01(异常)。

@、检查主备库数据一致性:

ttisql -e "vertical call ttbookmark;bye;" -connstr userinfottisql -e "vertical call ttbookmark;bye;" -connstr account

6. 停止主备复制进程并删除asp关系 新老环境都要停

ttisql -e "call ttrepstop; bye;" -connstr userinfottisql -e "call ttrepstop; bye;" -connstr accountttisql -e "call ttrepstop; bye;" -connstr cbedatattisql userinfodrop active standby pair;ttisql accountdrop active standby pair;ttisql cbedatadrop active standby pair;

7. 老环境导出数据

userinfottBulkCp -o -s "|" "dsn=userinfo" USERINFO.USER_CUST/logds/dump/ USERINFO.USER_CUST.unl > logds/dump/ USERINFO.USER_CUST.log &accountttBulkCp -o -s "|" "dsn=account" ACCOUNT. ACCT_CUST logds/dump/ ACCT_CUST.unl > /logds/dump/ ACCT_CUST.log &userinfoselect count(*) from USERINFO.USER_CUST;accountselect count(*) from ACCOUNT. ACCT_CUST;

导出数据通过日志和数据库查询结果做对比看是否一致。

8. 传输数据文件并导入数据

scp *.unl ceshi12:/logds/dump

--新环境给文件权限进行导入:

chown ttuser:ttusers USERINFO.USER_CUST.unlchown ttacct:ttusers ACCT_CUST.unl>>>userinfottBulkCp -i -xp 10000 -s "|" "dsn=userinfo" USERINFO.USER_CUST /logds/dump/ USERINFO.USER_CUST.unl  > /logds/dump/ USERINFO.USER_CUST.log &>>>accountttBulkCp -i -xp 10000 -s "|" "dsn=account" ACCOUNT. ACCT_CUST /logds/dump/ ACCOUNT. ACCT_CUST.unl > /logds/dump/ ACCOUNT. ACCT_CUST.log &

--新环境导入数据通过日志和数据库查询结果做对比看是否一致。

userinfoselect count(*) from USERINFO.USER_CUST;accountselect count(*) from ACCOUNT. ACCT_CUST;

9. 创建序列

可以通过之前保留下来的序列直接创建,太多也可以放到一个sql文本中进数据库通过@命令插入。

10. 进行业务割接

11. 创建新老环境asp关系,起复制进程

Userinfo

--建立asp关系:

create active standby pairUSERINFO on " CESHI12", USERINFO on " CESHI22"store USERINFO on "CESHI12"failthreshold 100store USERINFO on "CESHI22"failthreshold 100ttisql userinfocall ttrepstart;call ttrepstateset('active');call ttrepstateget;ceshi11create active standby pairUSERINFO on " CESHI11", USERINFO on " CESHI21"store USERINFO on "CESHI11"failthreshold 100store USERINFO on "CESHI21"failthreshold 100ttisql userinfocall ttrepstart;call ttrepstateset('active');call ttrepstateget;account

--建立asp关系:

create active standby pairACCOUNT on " CESHI12", USERINFO on " CESHI22"store ACCOUNT on "CESHI12"failthreshold 100store ACCOUNT on "CESHI22"failthreshold 100ttisql accountcall ttrepstart;call ttrepstateset('active');call ttrepstateget;ceshi11create active standby pairACCOUNT on " CESHI11", USERINFO on " CESHI21"store ACCOUNT on "CESHI11"failthreshold 100store ACCOUNT on "CESHI21"failthreshold 100ttisql accountcall ttrepstart;call ttrepstateset('active');call ttrepstateget;cbedata

--建立asp关系:

Cbe19create active standby pairCBEDATA on " CESHI19", USERINFO on " CESHI29"store CBEDATA on "CESHI19"failthreshold 100store CBEDATA on "CESHI29"failthreshold 100ttisql cbedatacall ttrepstart;call ttrepstateset('active');call ttrepstateget;

--新环境检查对象结构:

ttschema userinfottschema account

12. 新老环境主库收集统计信息

userinfo

--编写一个脚本收集统计信息。

--创建一个~/OptEstimateStats目录:

vi update.sh#!/usr/bin/ksh. ~/.profilettisql -connstr userinfo -v 1 << EOF | sed -e 's/< //g' | sed -e 's/ >//g' > ~/OptEstimateStats/update.sqlselect 'call ttOptEstimateStats('''||trim(tblowner)||'.'||trim(tblname)||''',1,'''||'51 PERCENT'||'''); commit; sleep 1;'from sys.tables where owner = 1 and tblowner not in ('TTREP', 'SYS')order by tblowner,tblname;quit;EOFsleep 5echo "Begin "`date` >> ~/OptEstimateStats/log/update_`date +%Y%m%d`.logttisql -connStr "dsn=userinfo;uid=ttha;pwd=Lw<Bc7&3" -f ~/OptEstimateStats/update.sql >> ~/OptEstimateStats/log/update_`date +%Y%m%d`.logecho "Ended "`date` >> ~/OptEstimateStats/log/update_`date +%Y%m%d`.logaccountvi update.sh#!/usr/bin/ksh. ~/.profilettisql -connstr account -v 1 << EOF | sed -e 's/< //g' | sed -e 's/ >//g' > ~/OptEstimateStats/update.sqlselect 'call ttOptEstimateStats('''||trim(tblowner)||'.'||trim(tblname)||''',1,'''||'51 PERCENT'||'''); commit; sleep 1;'from sys.tables where owner = 1 and tblowner not in ('TTREP', 'SYS')order by tblowner,tblname;quit;EOFsleep 5echo "Begin "`date` >> ~/OptEstimateStats/log/update_`date +%Y%m%d`.logttisql -connStr "dsn=account;uid=ttha;pwd=Lw<Bc7&3" -f ~/OptEstimateStats/update.sql >> ~/OptEstimateStats/log/update_`date +%Y%m%d`.logecho "Ended "`date` >> ~/OptEstimateStats/log/update_`date +%Y%m%d`.log

13. 老环境变更ini文件(主备)

14. 起应用连接

15. 重建新老环境备库

Userinfottdaemonadmin -stopttdaemonadmin -statrtttdestroy userinfottrepadmin -duplicate -verbosity 2 -from userinfo -host ceshi12 -uid ttha -pwd 'Lw<Bc7&3' -ramload "dsn=userinfo"

--加载:

ttadmin -rampolicy manual -noautoreload account

--起同步进程:

ttisql userinfocall ttrepstart;call ttrepstateget;accountttdaemonadmin -stopttdaemonadmin -startttstatus

--摧毁account:

ttdestroy account

--重建:

ttrepadmin -duplicate -verbosity 2 -from account -host ceshi12 -uid ttha -pwd 'Lw<Bc7&3' -ramload "dsn=account"

--加载:

ttadmin -rampolicy manual -noautoreload account

--起同步进程:

ttisql accountcall ttrepstartcall ttrepstateget;cbedatattdaemonadmin -stopttdaemonadmin -startttstatus

--摧毁cbedata:

ttdestroy cbedata

--重建:

ttrepadmin -duplicate -verbosity 2 -from cbedata -host ceshi19 -uid ttha -pwd 'Lw<Bc7&3' -ramload "dsn= cbedata "

--加载:

ttadmin -rampolicy manual -noautoreload cbedata

--起同步进程:

ttisql cbedatacall ttrepstartcall ttrepstateget;



本文作者:毛龙奇

本文来源:IT那活儿(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论