将生产环境中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。