程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> Sybase從Windows到Linux的遷移指南

Sybase從Windows到Linux的遷移指南

編輯:SyBase綜合文章
本指南實際為本人兩篇文章的合集,分為安裝和遷移兩大部分第一部分:在無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 執行ASE/bin/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 Windows上dump下來的數據庫備份文件load 到Sybase for
Linux上後,客戶端程序連線運行後報出錯信息"You must drop
and re-create xxxx",應用程序無法正常運行。問題的分析:
經分析sybase提供的出錯信息,發現當把Sybase數據庫從Windows向Linux跨平台遷
移時要求重建數據庫的存儲過程和缺省值,而且只能是刪除後重建,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.將Sybase從Windows平台向Linux平台的遷移會遇到需要重新編譯數據庫對象的問還不清楚是否也要重建。
2.對於大型業務數據庫只有采用命令腳本的方式進行自動重建,但需要DBA仔細檢
查sql腳本,特別注意一定要先備份出存儲過程的源代碼後再刪除原存儲過程。
3.在某一論壇的貼子有人說從Sybase for Linux 12.5.3開始,Sybase能自動重建等),但未經證實。最新情況,經詢問Sybase技術專家,得知自Sybase 12.5.2開始,ASE具備了自動重建跨平台數據庫和積累的經驗仍對本人在以後的工作中處理類似的問題提供了參考。 BTW:以上方法僅為個人經驗,不承擔他人使用後產生的任何後果。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved