将生产环境中AIX5.3平台上的Sybase ASE12.5.2迁移到备机作测试用,下面简单记录下主要步骤。
环境:
Sybase ASE version: 12.5.2 32bit
OS Version: AIX 5.3
$SYBASE: /home/syb123
Instance name: TEST
database name: testdb
备机上建立好了与主机相同的vg与lv
主要步骤:
1.将主机上的目录/home/syb123打包,拷贝到备机,解开tar包到备机的相同目录下。删除备机/home/syb123下的interfaces文件。
2.修改资源文件resource file中的实例名(srvbuild.server_name),主机名(srvbuild.network_hostname_list)等信息。主要有3个rs文件: syb_dataserver.rs,syb_backupserver.rs,syb_sqlloc.rs
3.新建Sybase ASE实例。执行:
srvbuildres -r /home/syb123/syb_dataserver.rs
在新建实例的过程中,因为异步IO没有开启,报错Symbol resolution failed for /usr/ccs/lib/libc.a[aio_64.o] 。解决方法见:
AIX上未启动异步IO导致Sybase服务创建失败
4.配置字符集roman8。
源数据库的字符集为roman8,使用资源文件配置新建的备机上的字符集为roman8、排序规则为:bin_roman8。unix/linux环境上新建的实例默认没有安装bin_roman8这个排序规则,需要手动添加:
cd /home/syb123/charsets/roman8
charset -Usa -P -STEST binary.srt roman8
然后在执行:srvbuildres -r /home/syb123/syb_sqlloc.rs 来修改实例的默认字符集和排序规则。
5.新建备份服务
srvbuildres -r /home/syb123/syb_backupserver.rs
6.从源实例中导出disk init脚本
使用下面的SQL语句能够导出:
select 'disk init name="'+name+'",physname="'+phyname+'",size="'+convert(varchar,convert(int,(high-low+1)*2.0/1024.0))+'M"'+char(10)+'go' from master.dbo.sysdevices
where low/power(2,24)>0
go
7.导出create database语句
使用ddlgen导出源实例中用户数据库的create database语句。
/home/syb123/ASEP/bin/ddlgen -Usa -P -STEST -TDB -Ntestdb -O./ddlgen-testdb.sql
从上面的输出文件ddlgen-testdb.sql中将create database命令提取出来,加上for load选项。类似如下的命令:
create database test on .....
log on ......
for load
go
8.在备机上上初始化设备和创建用户数据库
在执行disk init命令先配置参数: number of devices,
sp_configure "number of devices",50
go
然后分别执行上面得到的disk init命令来初始化Sybase逻辑设备,执行create database来创建用户数据库以备恢复用。
在create database命令中加入for load选项,能够提高创建库的速度,因为不需要将逻辑设备上的页面清空。
9.恢复源数据库
在备机上恢复从主机上拷贝过来的testdb数据库的备份。
load database testdb from '/syb_backup/testdb20110920.dump'
go
在主机上备份数据库testdb的时候,加入了压缩选项:compress=4。在恢复的时候不需要加入压缩选项,sybase备份服务器能够自动识别压缩级别。这点还是挺方便的!
10.增加临时数据库tempdb的空间
alter database tempdb on tempdb_data01='4000m'
11.在备机将数据库testdb的属主有sa改为syb
use testdb
go
sp_changedbowner syb
go
12.重建登录、角色、用户信息
因为主机与备机是相同的平台,可以直接导出源实例master数据库中系统表的数据。从源实例中导出下面4张系统表的数据。
syslogins,sysloginroles,sysroles,sysusers
在备机上导入:
先开启选项:allow updates to system catalog。sp_configure "allow updates",1
导入4张系统表的数据,只追加新添加的登录、用户信息。
bcp master.dbo.syslogins in ./syslogins-20110920.bcpout -c -Usa -P -STEST -t~# -b1
bcp master.dbo.sysloginroles in ./sysloginroles-20110920.bcpout -c -Usa -P -STEST -t~# -b1
bcp master.dbo.sysroles in ./sysroles-20110920.bcpout -c -Usa -P -STEST -t~# -b1
bcp master.dbo.sysusers in ./sysusers-20110920.bcpout -c -Usa -P -STEST -t~# -b1
13.配置用户数据库testdb的options
use master
go
sp_dboption testdb,'select into',true
go
sp_dboption testdb,'trunc',true
go
use testdb
go
checkpoint
go
14.配置备机的参数
如果备机与主机环境相同的话,可以将主机上的<servername>.cfg直接拷贝到备机。否则,根据主机的cfg文件适当调整sybase ase的参数。
15.备份master数据库、导出几张重要系统表的数据
初始化设备、新建数据库,添加登录等操作后,要及时备份master数据库。最好对几张重要的系统表再做一次备份。使用bcp导出系统表sysusages,sysdatabases,sysdevices,syslogins,sysloginroles,sysroles,sysusers。