序言:
近日,帮某政府部门迁移了一个中型数据库,抽时间整理了一下,供大家学习参考,也欢迎大家指教。
准备工作:
1.从系统表搜索出将所有的表名
select tabname from systabnames where owner='hzcz';
共有160张用户表
2.分析表空间占用比例
找出了10张大表,进行占用空间分析
tbl_grhjxm 4911503条, 占用284*4911503 = 1.39G
tbl_grcfmx 2920688, 占用306*2920688 = 894M
cz_zfmx 4499093条, 占用172*4499093 = 773M
cz_czgrzhmx 3280647条, 占用147*3280647 = 482M
tbl_nmxx 1217105条, 占用208*1217105 = 253M
tbl_mgrpmx 3131489条, 占用206*3131489 = 645M
tbl_nmhjxm 1520021条, 占用180*1520021 = 273M
tbl_jyhz 1219141条, 占用134*1219141 = 163M
tbl_grcfmx_sh 1191166条,占用1191166*280 = 333M
tbl_grhjxm_sh 1524565条,占用1524565*258 = 393M
共占空间:约 5.6G
3.编写导出、导入数据的shell脚本
导出shell7个
j_unload1.sh的内容如下:
date +"tbl_grhjxm.Start: %Y-%m-%d %H:%M:%S">>mm.log
dbaccess hzcz <<! 1>>mm.log 2>>mm.log
unload to tbl_grhjxm.txt select * from tbl_grhjxm;
!
date +"tbl_grhjxm.End : %Y-%m-%d %H:%M:%S">>mm.log
其它的与j_unload1.sh类似,见操作步骤
导出shell7个
j_load1.sh的内容如下:
date +"tbl_grhjxm.Start: %Y-%m-%d %H:%M:%S">>mm.log
dbaccess hzcz <<! 1>>mm.log 2>>mm.log
load from tbl_grhjxm.txt insert into tbl_grhjxm;
!
date +"tbl_grhjxm.End : %Y-%m-%d %H:%M:%S">>mm.log
4.编写生成数据库、表、主外键、索引、存储过程的shell脚本
4.1 导出所有存储过程
dbschema -d hzcz -f all j_hzcz_f.sql
4.2 导出所有数据表
dbschema -d hzcz -t all j_hzcz_t.sql
4.3 导出所有索引
egrep "create index|create unique index|[0-9,a-z,A-Z]);$" j_hzcz_t.sql > j_hzcz_idx.sql
4.4 在建表语句中过滤掉建立索引部分
在j_hzcz_t.sql中
:g/create index/d
:g/create unique index/d
:g/[0-9,a-z,A-Z]);$/d
4.5 去掉建表语句中的非主外键部分的constraint
在j_hzcz_t.sql中
:g/ constraint "hzcz".n[0-9][0-9][0-9]_[0-9][0-9][0-9],$/s//,/
:g// constraint "hzcz".n[0-9][0-9][0-9]_[0-9][0-9][0-9][0-9],$/s//,/
4.6 去掉主外键,并编写生成主外键的shell脚本(只能手工操作)
在j_hzcz_t.sql中,删去primary key的部分,并将类似下面的语句写入j_hzcz_key.sql
alter table tbl_hjlb add constraint primary key(lbdm,ryxz);
4.7 统计
5.安装配置新数据库服务器
具体网络上已经很多,此处不再重复
建立rootdbs
建立logdbs
onspaces -c –d logdbs -p /home/informix/zdbs/logdbs –o 0 –s 2000000
建立workdbs,并加8个chunk,每个 2G
onspaces -c –d workdbs -p /home/informix/zdbs/workdbs –o 0 –s 2000000
onspaces -a workdbs -p /home/informix/zdbs/wkchunk1 –o 0 –s 2000000
onspaces -a workdbs -p /home/informix/zdbs/wkchunk2 –o 0 –s 2000000
onspaces -a workdbs -p /home/informix/zdbs/wkchunk3 –o 0 –s 2000000
onspaces -a workdbs -p /home/informix/zdbs/wkchunk4 –o 0 –s 2000000
onspaces -a workdbs -p /home/informix/zdbs/wkchunk5 –o 0 –s 2000000
onspaces -a workdbs -p /home/informix/zdbs/wkchunk6 –o 0 –s 2000000
onspaces -a workdbs -p /home/informix/zdbs/wkchunk7 –o 0 –s 2000000
onspaces -a workdbs -p /home/informix/zdbs/wkchunk8 –o 0 –s 2000000
操作步骤:
1.停止相关应用程序及定时程序
应用程序:根据应用开发公司提供的资料停止相关应用程序
定时程序:
备份原crontab,#crontab -l > cron_file
清空crontab,#crontab k(k为空文件)
2.导出数据
共160张表,进行均匀分配,每个shell导出数据尽量不超过 1G ,
执行shell文件 | 包含表 | 空间 |
j_unload1.sh | tbl_grhjxm | 1.4G |
j_unload2.sh | Tbl_grcfmx | 0.9 G |
j_unload3.sh | Tbl_grcfmx_sh, tbl_grhjxm_sh, tbl_jyhz | 0.88 G |
j_unload4.sh | Cz_zfmx,cz_czgrzhmx | 1.15 G |
j_unload5.sh | Tbl_nmxx, tbl_mgrpmx, tbl_nmhjxm | 1.16 G |
j_unloada.sh | 剩余表1(75张表:bbb至cz_ylbzcs) | 1G 左右 |
j_unloadb.sh | 剩余表2(75张表:cz_ylfkxx至yl) | 1G 左右 |
3.压缩文件,并传到新服务器上
注,该项目中,我只压缩了内容比较大的10张表,以减少传输时间,其它文件没有压缩,毕竟压缩、解压缩也是很费时间的
4.在新的数据库服务器上建立数据库、数据表
create database hzcz in workdbs
5.导入数据(2小时)
执行shell文件 | 包含表 | 空间 | 时间 |
j_load1.sh | tbl_grhjxm | 1.4 | 4点29-5点40 |
j_load2.sh | Tbl_grcfmx | 0.9 | 4点32-5点26 |
j_load3.sh | Tbl_grcfmx_sh, tbl_grhjxm_sh, tbl_jyhz | 0.88 | 4点33-5点32 |
j_load4.sh | Cz_zfmx,cz_czgrzhmx | 1.15 | 4点34-5点43 |
j_load5.sh | Tbl_nmxx, tbl_mgrpmx, tbl_nmhjxm | 1.16 | 4点36-5点45 |
j_loada.sh | 剩余表1(75张表:bbb至cz_ylbzcs) | 1 | 4点44-4点59 |
j_loadb.sh | 剩余表2(75张表:cz_ylfkxx至yl) | 1 | 4点44-4点59 |
6.检查新老机器数据条数是否相等
执行sh jcount.sql,对比结果
7.建立主外键(10-20分钟)(5点54-5点55)
j_hzcz_key.sql
8.建立表索引(2-4小时)(5点55-6点20)
j_hzcz_idx.sql
9.加入日志(6点21)
采用无buffer的0级日志方案
ontape -s -L 0 -U hzcz
10.建立存储过程(6点25)
j_hzcz_f.sql
11.更新统计(1小时)(6点26-6点44)
update statistics
12.修改IP地址并加上网关
将原来机器网线拔掉或修改IP,将新的机器IP改成原机IP
13.建立相应的运行支持目录
根据应用开发公司提供的资料建立相关应用程序所需要的目录
14.启动程序
根据应用开发公司提供的资料启动相关应用程序
15.设置定时程序
编辑cron:crontab cron_file
编译cron:crontab -l