Sybase从Windows到Linux的迁移指南(使用资源文件来快速新建sybase服务器)

已在solaris10,ASE12.5.2下用资源文件resource_files新建了一个4k的sybase服务器。测试该方法通过!
不过在windows下没有这个命令srvbuildres,况且windows下还要配置注册表信息才能启动服务除非你想每次都通过RUN_servername来启动!

Sybase从Windows到Linux的迁移指南

 

本指南实际为本人两篇文章的合集,分为安装和迁移两大部分

第一部分:在无GUI环境下安装sybase for linux 12.5.0.1

通常我们建立sybase for linux数据库服务器的时候,都是执行asecfg来建立数据
库,但是这种方式是需要在
服务器上安装X的,即使是通过X FORWARD的方式来操作,也至少需要安装上X
lib
。在许多时候下,我们都希望
在服务器上安装的软件包越精越好,即只需要在console环境下就能建立好我们所
需要的服务器。
sybase for linux
就提供了这样一套无需任何X软件包的数据库建立工具---
srvbuildres
,它通过读取资源文件
来完成基于console的数据库建立工作。

一 安装rpm
rpm -ivh --nodeps <rpm
包名>

二 激活sybase帐号
passwd sybase

三 设置内核参数
echo $( expr <
你的内存容量(MB为单位)> /* 1024 /* 1024 ) >
/proc/sys/kernel/shmmax
echo "kernel.shmmax = "$( expr <
你的内存容量(MB为单位)> /* 1024 /*
1024 ) >> /etc/sysctl.conf
echo "
本机ip hostname" >> /etc/hosts

四 创建数据库服务器和备份服务器
sybase帐号登录
cp ~/ASE/init/sample_resource_files/srvbuild.adaptive_server.rs ~/server.rs
cp ~/ASE/init/sample_resource_files/srvbuild.backup_server.rs ~/backup.rs
编辑 server.rs

sybinit.release_directory: USE_DEFAULT
sybinit.product: sqlsrv
sqlsrv.server_name: kbibm_ase <---
填入你所准备起的数据库服务器名称, 这里是我的数据库服务器名字
sqlsrv.new_config: yes
sqlsrv.do_add_server: yes
sqlsrv.network_protocol_list: TCP
sqlsrv.network_hostname_list: <---
填入数据库服务器所在主机的主机名
sqlsrv.network_port_list: <---
端口号
sqlsrv.server_page_size: USE_DEFAULT
sqlsrv.force_buildmaster: no
sqlsrv.master_device_physical_name: /opt/sybase-12.5/data/master.dat
<---
设定master文件所在位置
sqlsrv.master_device_size: 100 <--- size
MB为单位,这里建立100MB大小的
设备文件。
sqlsrv.master_database_size: 90
--- master_database size 至少要小于
master_device 7MB
,所以这里填90MB
sqlsrv.errorlog: USE_DEFAULT
sqlsrv.do_upgrade: no
sqlsrv.sybsystemprocs_device_physical_name:
/opt/sybase-12.5/data/systemprocs.dat
sqlsrv.sybsystemprocs_device_size: 200 <---
建立200MB大小的systemprocs
备文件
sqlsrv.sybsystemprocs_database_size: 200
sqlsrv.sybsystemdb_device_physical_name:
/opt/sybase-12.5/data/sybsystemdb.dat
sqlsrv.sybsystemdb_device_size: 200 <---
建立200MB大小的sybsystempdb设备文件
sqlsrv.sybsystemdb_database_size: 200
sqlsrv.default_backup_server: kbibm_bak <---
填入你所准备建立的备份数据库名

备份服务器的rs文件也按此方式进行修改

五 执行srvbuildres来建立数据库
$SYBASE/ASE/bin/srvbuildres -s $SYBASE -r <rs
文件>

六 建立sqlloc.rs来设置本地化
sybinit.release_directory: USE_DEFAULT
sqlsrv.server_name: kbibm_ase
sqlsrv.sa_login: sa
sqlsrv.sa_password: serverj
sqlsrv.default_language: us_english
sqlsrv.language_install_list: us_english
sqlsrv.language_remove_list: USE_DEFAULT
sqlsrv.default_characterset: cp850
sqlsrv.characterset_install_list: cp850
sqlsrv.characterset_remove_list: USE_DEFAULT
sqlsrv.sort_order: binary

执行$SYBASE/ASE/bin/sqlloc sqlloc.rs 设置locale

七 由于/etc/init.d/sybase中有两处存在bug,所以我们要修改它
SYBASE_ASE=`basename $SYBASE/ASE*` 改为 SYBASE_ASE=`basename $SYBASE/ASE`
SYBASE_OCS=`basename $SYBASE/OCS*` 改为 SYBASE_OCS=`basename $SYBASE/OCS`
否则将不能正常启动sybase

/etc/init.d/sybase restart

现在我们就可以用 isql -U sa -P -S <数据库服务器名> 登录进去了。

以上步骤在redhat 7.3 上操作通过。

------------------------------------------------------------------------------

第二部分:将Sybase for Windows 12.5的数据库迁移到Sybase for Linux 12.5平台。

软件环境
-------------------
源数据库:Adaptive Server Enterprise/12.5/SWR 9616 GA/P
目的数据库:Adaptive Server Enterprise/12.5.0.1/EBF 10292 IR

操作系统:Redhat 7.3

硬件环境
----------
IBM Netfinity 5600


遇到的问题:
当把Sybase for Windowsdump下来的数据库备份文件load Sybase for
Linux
上后,客户端程序连线运行后报出错信息"You must drop
and re-create xxxx",
应用程序无法正常运行。

问题的分析:
   
经分析sybase提供的出错信息,发现当把Sybase数据库从WindowsLinux跨平台迁
移时要求重建数据库的存储过程和缺省值,而且只能是删除后重建,sp_recompile
命令不起作用。如果只是小型的业务系统,手工删除、重建存储过程和缺省值并不
是很困难的事,而对于大型的数据库系统可能存有上百条存储过程和缺省值,手工
重建是不现实的。
   Sybase
并没有提供一套供管理员使用的批量重建存储过程和缺省值的管理工具。
为此,我自行编写了sql命令文件来实现自动化重建缺省值和存储过程的功能。

   
缺省值的重建比存储过程的重新建要简单一些。附件是重建缺省值的sql文件
通过isql -Usa -S<服务器名> -i sybwintolinux.sql,将该sql文件导入sybase
for linux
数据库中,该sql将在
sybsystemprocs
库中建立一个名为sp_rebuild_defaults的存储过程来重建指定数
据库中的所有缺省值。
使用方法为 sp_rebuild_defaults <目标数据库名>

存储过程的重建则要复杂一些,我是采了以下步骤操作:
.首先我们先要把原有的存储过程代码导出到外部文件中
  1. use <
业务数据库名>
     go
     select a.text into tempdb..procs from syscomments a, sysobjets b
where b.type = 'P' and b.id = a.id
     go
  2. $ bcp tempdb..procs out procs.sql -Usa -S<
服务器名> -r '' -c
  3. $ sed -e 's/endcreate/end/ngo/ncreate/g' procs.sql > newprocs.sql
      
newprocs.sql文件原有内容之前增加 use <业务数据库名> 两行
                                          go
      
在原有内容最后,增加 一条 go命令
  
现在,我就获得了一份完整的业务数据库中的存储过程源代码文件。

.删除业务数据库原有的存储过程
  1.$ sed -n -e 's/create/ proc[a-z]*/ /drop/ procedure/ /g w dropprocs.sql' newprocs.sql
      
dropprocs.sql文件内容之前增加 use <业务数据库名> 两行
                                       go
      
在最后新增一行, 写入 go命令
   
现在就得到了一个用于删除原有存储过程的sql文件
  2. $ isql -Usa -S<
服务器名> -i dropprocs.sql
     
删除业务系统中原来的存储过程,注意,在操作前,最好再仔细检查一遍
dropprocs.sql
文件。

.导入存储过程到数据库中
   $ isql -Usa -S<
服务器名> -i newprocs.sql
     
将存储过程重新导入Sybase数据库中,Sybase将会自动重新编译所有的存储
过程。

完成以上操作后,将客户端程序重新连上Sybase for linux,经测试运行正常。

总结:
1.
SybaseWindows平台向Linux平台的迁移会遇到需要重新编译数据库对象的问
题,这里列举的是存储过程和缺省值,由于我这里没有建立过触发器和规则,所以
还不清楚是否也要重建。
2.
对于大型业务数据库只有采用命令脚本的方式进行自动重建,但需要DBA仔细检
sql脚本,特别注意一定要先备份出存储过程的源代码后再删除原存储过程。
3.
在某一论坛的贴子有人说从Sybase for Linux 12.5.3开始,Sybase能自动重建跨平台数据库备份文件中的所有数据库对象(存储过程,缺省值,触发器,规则等),但未经证实。

最新情况,经询问Sybase技术专家,得知自Sybase 12.5.2开始,ASE具备了自动重建跨平台数据库
对象的功能了。也就不需要再按以上方式重建对象了,但我在解决上述问题时采取的一些思路
和积累的经验仍对本人在以后的工作中处理类似的问题提供了参考。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值