SYBASE 使用技巧集錦 FAQ by 楊冶軍

Q.如何解決數據庫被標記爲"suspect"的問題之一( 一般解決方案)?

A.現象:Error 926
 Severity Level 14
 Error Message Text
 Database 'xx' cannot be opened - it has been marked SUSPECT by recover Explanation

(1) 當你使用Transact_SQL命令操作這個數據庫的數據時, 出現這個信息, 這是一個嚴重的錯誤, 如果
你要使用這個數據庫的數據, 必須改正這個錯誤.

(2) 啓動Backup Server, 後備master數據庫

1>dump database master to "/usr/sybase/master_dump.19991201"
2>go

(3) 用isql登錄到SQL Server, 須用sa帳號 (本文以pubs2數據庫爲例)

1>sp_configure "allow updates", 1
2>go
1>begin tran
2>go
1>update master..sysdatabases
2>set status = -32768
3>Where name="pubs2"
4>go

如果得到(1 row affected),則

1>commit
2>go

否則

1>rollback
2>go

(4.1)如果條件允許,bcp out用戶數據或dump用戶數據庫

(5.1)這時重新啓動SQL Server, 再有sa帳號註冊到SQL Server.

1>begin tran
2>go
1>update master..sysdatabases
2>set status=0
3>Where name="pubs2"
4>go

如果得到(1 row affected),則

1>commit
2>go

否則

1>rollback
2>go

1>sp_configure "allow updates" ,0
2>go

(4) 如果你的數據庫原來有dboption(例如"select into","trunc log on chkpt"等), 你需要重新設置
這些option..

(5) 運行dbcc命令檢查數據庫的一致性

isql -Usa -P -i dbcc.sql -o dbcc.out
dbcc.sql文件示例:
dbcc checkdb("pubs2")
go
dbcc checkalloc("pubs2")
go
dbcc checkcatalog("pubs2")
go
grep Msg dbcc.out

6) 後備用戶數據庫

1>dump database pubs2 on "/usr/sybase/pubs2_dump.19991201"
2>go




Q.如何解決數據庫被標記爲"suspect"的問題之二( 數據庫設備損壞時的解決方案 )?

A.現象: 926錯誤產生的原因有幾種。本文討論當數據庫設備初始化失敗( 設備文件丟失或文件讀寫權限
不正確 )時,導致數據庫恢復失敗,出現926錯誤的情況。

(1) 請先恢復數據庫設備及讀寫權限。

(2) 啓動Backup Server, 後備master數據庫

1>dump database master to "/usr/sybase/master_dump.19991201"
2>go

3) 用isql登錄到SQL Server, 須用sa帳號 (本文以pubs2數據庫爲例)

1>sp_configure "allow updates", 1
2>go
1>begin tran
2>go
1>update master..sysdatabases
2>set status = status - 256
3>Where name="pubs2"
4>go

如果得到(1 row affected),則

1>commit
2>go

否則

1>rollback
2>go

(4) 重新啓動SQL Server, 運行dbcc命令檢查數據庫的一致性編輯生成dbcc.sql文件:

dbcc checkdb("pubs2")
go
dbcc checkalloc("pubs2")
go
dbcc checkcatalog("pubs2")
go
isql -Usa -P -i dbcc.sql -o dbcc.out
grep Msg dbcc.out

(5) 後備用戶數據庫

1>dump database pubs2 on "/usr/sybase/pubs2_dump.19991201"
2>go




Q.如何解決ASE11.5裝載或備份數據庫報3230的錯誤?

A.用sp_dropdevice或sybase central刪除邏輯設備後,不重啓服務器,不回收虛擬設備號,重用它建立
設備,新建數據庫。這時dump&load數據庫會出3230錯誤。這是ASE11.5的BUG,過去不重新啓動服務器,
老的虛擬設備號不能使用,現在服務器不提示錯誤。但dump&load數據庫會出現3230錯誤。

解決辦法是重啓服務器,3230錯便會消失。


Q.如何刪除壞的用戶數據庫?(以pubs2爲例)

A.當使用drop database無法刪除數據庫時,使用本文所示方法可以刪除。

(1)使用isql以sa註冊SQL server

(2)設置允許修改系統表

1>sp_configure "allow updates",1
2>go

(3)把 要刪除的用戶數據庫置爲"suspect"狀態

1>use master
2>go
1>begin tran
2>go
1>update sysdatabases set status=256
2>where name="pubs2"
3>go

如果得到(1 row affected),則

1>commit
2>go

否則

1>rollback
2>go

(4)重啓server,並用isql以sa註冊。

(5)刪除數據庫

1>dbcc dbrepair(pubs2,dropdb)
2>go

(6)恢復允許修改系統表

1>sp_configure "allow updates",0
2>go

(7)結束




Q.如何修改IP地址改變後的interfaces文件?

A.安裝SYBASE Adapive Server的機器IP地址改變後, 應修改 interfaces 文件及有關的設置。

如果 interfaces 文件中使用的是機器名而不是 IP 地址, 則不需要變動。 但如果客戶端聯結服務器使
用的是服務器的 IP 地址而不是機器名,那麼客戶端需修改聯結服務器的 IP 地址.。

如果 interfaces 文件中使用的是 IP 地址, 那麼需要修改 interfaces 文件中和地址有關的部分,
可使用dscp 或 dsedit 進行修改。 如果客戶端聯結服務器使用的是服務器的地址而不是機器名,那麼客
戶端也需修改。




Q.如何檢查數據庫中數據的一致性?

A.數據庫一致性檢查(dbcc)提供了一些命令用於檢查數據庫的邏輯和物理一致性。Dbcc主要有兩個功能:

使用checkstorage 或 checktable 及 checkdb 在頁一級和行一級檢查頁鏈及數據指針。
使用checkstorage, checkalloc, 或 checkverify, tablealloc, 及indexalloc 檢查頁分配。
在下列情況中需要使用 dbcc 命令:

作爲數據庫日常維護工作的一部分, 數據庫內部結構的完整性決定於sa 或dbo 定期地運行 dbcc 檢查。
在系統報錯以後, 確定數據庫是否有損壞。
在備份數據庫之前, 確保備份的完整性。
如果懷疑數據庫有損壞時, 例如, 使用某個表時報出表損壞的信息, 可以使用 dbcc 確定數據庫中其他
表是否也有損壞。
下面是dbcc的簡單用法:

dbcc checktable (table_name)
檢查指定的表, 檢查索引和數據頁是否正確鏈接, 索引是否正確排序, 所有指針是否一致, 每頁的數據
信息是否合理, 頁偏移是否合理。

dbcc checkdb (database_name)
對指定數據庫的所有表做和checktable 一樣的檢查。
dbcc checkalloc (database_name,fix|nofix)
檢查指定數據庫, 是否所有頁面被正確分配, 是否被分配的頁面沒被使用。當使用"fix"選項時,
在檢查數據庫的同時會自動修復有問題的頁面。(若數據庫數據量很大,則該過程會持續很長時間。)
dbcc tablealloc (table_name,fix|nofix)
檢查指定的表, 是否所有頁面被正確分配, 是否被分配的頁面沒被使用。是 checkalloc 的縮小版本,
對指定的表做完整性檢查。當使用"fix"選項時,在檢查數據表的同時會自動修復數據表中有問題的頁
面。
關於上述命令的其它選項及詳細使用方法和checkstorage, checkverify, indexalloc 的詳細使用方
法, 請參閱有關命令手冊。

舉例1: Unix平臺檢查pubs2數據庫的一致性

單用戶模式啓動Server:
$SYBASE/install startserver -f RUN_server_name -m
vi dbcc_db.sql
use master
go
sp_dboption pubs2,"single user",true
go
use pubs2
go
checkpoint
go
dbcc checkdb(pubs2)
go
dbcc checkalloc(pubs2,fix)
go
dbcc checkcatalog(pubs2)
go
use master
go
sp_dboption pubs2,"single user",false
go
use pubs2
go
checkpoint
go
quit
go
isql -Usa -Pxxxxxx -SSYBASE dbcc_db.out
grep Msg dbcc_db.out
舉例2: Unix平臺檢查pubs2數據庫中titles表的一致性

vi dbcc_table.sql
use pubs2
go
dbcc checktable(titles)
go
dbcc tablealloc(titles)
go
isql -Usa -Pxxxxxx -SSYBASE < dbcc_table.sql > dbcc_table.out
grep Msg dbcc_table.out




Q.如何在Windows NT上手動卸載Sybase Server ?

A.關閉 Adaptive Server.
將Adaptive Server在Windows NT Services中由自動改爲手動
重新啓動 Windows NT server
運行sybedt32修改註冊表, 刪除以下內容:
//HKEY_LOCAL_MACHINE/SOFTWARE/SYBASE/Server/
//HKEY_LOCAL_MACHINE/SOFTWARE/SYBASE/Server/_BS
//HKEY_LOCAL_MACHINE/SOFTWARE/SYBASE/Server/_HS
//HKEY_LOCAL_MACHINE/SOFTWARE/SYBASE/Server/_MS
到註冊表的如下結構下:
//HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment
刪除DSLISTEN, DSQUERY, SYBASE, 並修改 LIB, INCLUDE, PATH刪除SYBASE有關目錄
刪除如下注冊鍵值:
//HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
SYBSQL_
SYBXPS__XP
SYBBCK__BS
SYBMON__MS
SYBHIS__HS
重新啓動 Windows NT server
使用 Start | Control Panel | Settings | Services 確認SYBASE已經卸載
刪除SYBASE Server所用數據庫設備文件及SYBASE系統文件




Q.如何更改SQL Server名稱(在UNIX、OPENVMS平臺上)?

A.在SYBASE產品中沒有特定的函數或者存儲過程用來更改SQL Server/ASE Server的名稱,因此,只能手
工修改某些參數或者配置來完成此任務。

需要修改interfaces文件;更改RUN_server_name文件名,並修改其內容,例如:-s(UNIX)、/SERVER
(OpenVMS)後面所跟的參數(server 名稱);更改配置文件名;更改errorlog文件名(如果需要);如
果server名稱加在了表sysservers中,需要更改'srvname'、'srvnetname'列,可使用sp_dropserver、
sp_addserver存儲過程來實現。

在OpenVMS系統中還要修改RUN_server_name文件中DSLISTEN的邏輯名稱,以及在使用startserver過程中
/SERVER後面所跟的參數。然後,重啓SQL/ASE Server。確認DSQUERY、DSLISTEN環境變量已經更改爲所
需內容。

另外,如果SQL/ASE Server是被設置爲遠程服務器,還要修改與此server相關的系統表sysservers中的
字段以及interfaces文件。

理論上例如配置文件、RUN腳本、errorlog文件不需要指定server 名稱(但是通常習慣指定server名
稱)。在RUN startup腳本中要指定server名稱。

您可以根據以下提綱完成此項任務:

如果server名稱加在了表sysservers中,用sp_dropserver刪除。
Shut down server
編輯 interfaces文件
更改RUN_server_name文件名,並修改其內容,-s(UNIX)、/SERVER(OpenVMS)後面所跟的參數(server
名稱)
更改errorlog文件名(如果需要)
修改DSQUERY、DSLISTEN環境變量(如果需要)
更改配置文件名(server_name.cfg、server_name.bak、server_name.nnn),在SYBASE安裝路徑下Start
server
使用sp_addserver重新添加server(如果需要)
如果server是作爲遠程server使用的,還需要刪除並重新添加。




Q.如何配置SQL Server來做遠程備份?

A.在本地機器上:
(1).本地SQL Server和Backup Server能運行。
(2).在本地的Interfaces文件中,增加遠程機器上的Backup Server名稱,只需“Quary” 行,不允許使
用別名(aliases)。

請注意:在網絡上每個Backup Server必須有一個唯一的名字,這個名字必須在 Interfaces文件之中,用
戶可以通過查看服務器運行文件來檢查它,它的選項是-S(unix) 或者/Server(VMS)。

(3).執行存儲過程SP-helpServer SYB_BACKUP確認本地Backup Server具有正確的網絡名稱。遠程Backup
Server不一定非要在系統表Syservers中有一條記錄不可,但是有它便於測試。

請注意:不要修改SYB_BACKUP,使它指向遠程Backup Server名字。

在遠程機器上:

(1).確認遠程Backup Server正在運行。
(2).確認遠程Backup Server有與本地Backup Server不同的網絡名字。

請注意:在遠程機器上的Interfaces文件中,必須包含遠程Backup Server的定義記錄,但是它不需其他
Backup Server的定義。




Q.如何配置SQL Server 11,使得快速BCP具有更好的性能?

A.有幾種方法可以改善BCP的性能:
(1)增加擴展分配(extent allocation)。缺省情況下,預分配2到31個擴展。在一個BCP批次中,未使用的
預分配擴展被釋放。爲了獲得最佳BCP性能,設置BCP批次大小和 “number of preallocated extents”
預分配擴展個數,以消除空間重新釋放。使用Sp_config number of pre-allocated exetents,nn 對於系
統10:buildmaster -ycpreallocext=nn
(2)對錶進行分區
(3)配置OAM頁面的緩衝策略,以減少對OAM(Object Allocation Map)頁面的物理讀。
(4)配置大I/O的緩衝池,例如16K:

Sp-poolconfig default, "16K" (5)使用-A標記,加大網絡包大小:

bcp -A 16384




Q.如何將SQL/ASE SERVER移植到同種平臺(相同操作系統)的系統上?

A.N1 這裏所列出的所有步驟,並不需要按順序執行,只是表明了在實驗中成功完成這項任務的順序。
N2 SYBASE 提示您保留直至今日的ISQL腳本,包括建立login、create database、disk init等等。使用
這些腳本會使您完成這項任務更加容易。這些腳本也可以通過master中系統表的內容來重新生成,可能
會繁瑣一些。
N3 成功的關鍵在於目標系統中系統表的字段與源系統中相應系統表的字段相同。特別是:syslogins與
sysdatabases中的'suid 以及 'dbid';sysusages中所有行的segmap、lstart以及size。
請在數據源系統上執行以下操作:

對所有的數據庫進行數據一致性檢查(DBCC),並後備所有的用戶數據庫。
保留master 數據庫中數據表的內容,使用select * from table_name命令:
sysdevices,sysusages,sysdatabses
syslogins,sysservers,syssvrroles,sysloginroles,sysremotelogins
對於sysusages 表,請使用以下命令:
select * from sysusages order by dbid,lstart
對於sysdatabases 表,請使用以下命令:
select * from sysdatabases order by dbid
使用bcp命令拷貝(2)中所列出的系統表內容。
Unix:bcp master..table_name out file_name -Usa -Psa_password -c
Vms:bcp master..table_name out file_name /username="sa"/sa_password/char
保留sp_configure命令的執行結果
請在目標系統上執行以下操作:

安裝並配置新的SQL Server和Backup Server。
確認所指定的master、tempdb、sybsystemprocs大小至少等於數據源系統上相應數據庫的大小,同時確認
與數據源系統相同的語言模塊以及字符集。
啓動SQL Server,使之處於正常工作狀態。參照數據源系統的配置(4中保留的執行結果)修改目標系統配
置與之相同,並確認'device'參數值至少等於源系統此參數值。
在model、sybsystemprocs數據庫中任意執行幾個動作以判斷數據庫工作正常。請不要添加用戶、角色、修
改系統表。
重啓SQL Server以測試新配置有效。
執行以下操作:
1> use master
2> go
1> sp_configure "allow updates",1
2> go
重啓SQL Server。
使用bcp命令拷貝(2)中所列出的系統表內容。
Unix:bcp master..table_name in file_name -Usa -Psa_password -b 1 -c
Vms:bcp master..table_name in file_name /user="sa"/sa_password/char/batch=1
建數據庫設備,大小至少等於源系統中相應數據庫的大小。
運行create database和alter database的腳本(或者使用命令行)。注意create、alter順序要與源系統
create、alter順序一致,並使用與之相同的參數。完成後請對比源系統與目標系統中的sysdatabases、
sysusages,使之完全相同,否則要重新做12這步工作。(請參照N3提示)注意:
在10.0以及更高版本中segmap字段在做了數據庫load之後會被修改。
在確定需要相同的dbid時,則要採用與在源系統中create、alter相同的順序,在目標系統中做create、
alter,並且使用相同的參數值。而這種需求僅僅是當數據庫中某些objects要參考不同的數據庫中的
objects纔會採用的。另外,這種需求只有在每一個數據庫中都被採用,完成的結果纔會使得sysusages表
中的segment、lastart、size字段,或者是fragment與源系統中數值相同。運行以下命令,與原系統的輸
出進行比較:
select * from sysusages order by lstart
load用戶數據庫並執行dbcc檢測。
執行以下操作:
1> sp_configure "allow updates",0
2> go
重啓SQL Server。
後備master庫以及用戶數據庫。



Q.如何做Rebuild Master(沒有後備master庫,而使用命令disk reinit,disk refit)?

A.提示1:

如果有可能,在執行這個任務之前,請先做操作系統級SYBASE DEVICES的後備。UNIX操作系統可使用命
令"dd"。因爲如果disk reinit使用了錯誤的信息,那麼,在執行了disk refit之後就會產生無法彌補的
錯誤。倘若,存在一個SYBASE DEVICES的後備文件,將會給我們一個彌補的機會。例如:當disk reinit
使用了過小的size值,我們還可以重新恢復SYBASE DEVICES文件,重新做disk reint、disk refit。

提示2:

在使用disk reinit命令時,將覆蓋SYBASE DEVICE(請參照以下語法),安全的做法是size值使用裸分
區或系統文件的大小的最大值。如果使用的是UNIX裸分區,即使你不能確認SYBASE DEVICE最初大小是不
是最大值,都要使用裸分區大小的最大值。

步驟:

.獲得將要被恢復的SYBASE DEVICE的信息。
這些信息被用來重建sysdevices,sysusages以及sysdatabases。
.從error log的server啓動信息中獲得SYBASE DEVICE的設備名、指定路徑。
.使用裸分區或系統文件的大小的最大值作爲SYBASE DEVICE的
大小。
.以上信息也可以通過最近的sysdevices系統表的內容來獲得。如果
對此信息懷有疑問,還是使用以上的方法比較穩妥。
.做操作系統級的SYBASE DEVICE後備。UNIX操作系統,使用"dd"命令實現。
.配置一個新的ASE Server。在以後的步驟中會用到這個新的master。
.如果需要,請再配置一個Backup Server。
.用單用戶模式啓動Server。
.運行disk reinit,用來重建sysdevices系統表,而沒有重新初始化SYBASE DEVICE。
語法如下:
disk reinit
name="device_name",
physname="physical_name",
vdevno=virtual_device_number,
size=number_of_blocks
完成後,請查看error log。
.確認重建的sysdevices系統表中信息正確:
——select * from sysdevices
比較表中的信息是否與error log或者保留的sysdevices中的信息相同。
.運行disk refit,用來重建sysdevices以及sysdatabases。
用法如下:
use master
go
disk refit
go
查看error log中是否有錯誤提示。
.當disk refit完成後,會自動shut down ASE Server。
.確認重建的系統表的信息是否正確:
——單用戶模式啓動ASE Server
——select * from sysusages、select * from sysdatabases
——sysusages系統表看起來是否正確?可以和以前保留的的信息進行比較。如果沒有這種可能,那麼應該
保證不出現顯而易見的錯誤。例如:是否缺少dbid;是否缺行;是否對於一個數據庫來說只有segmap=4(表
示爲日誌行)的行等等。
——sysdatabases系統表看起來是否正確?是不是沒有顯而易見的錯誤?
11、 啓動ASE Server,查看是否所有的數據庫都已經正常恢復。
.對所有的庫做dbcc檢查。
.對所有庫做後備。


Q.如何移植master設備?

A.以下步驟說明了如何將master設備移植到不同的磁盤上。請注意,在執行buildmaster之前,要停止SQL
Server的應用。

成功的關鍵在於,新建的sysusages系統表中每一行內容與舊的sysusages系統表內容相符。

.對master庫做dbcc檢查,並後備master庫。
.執行select * from table_name命令,並保留其輸出內容。其中,table_name包括:sysdevices、
sysusages、sysdatabases。同樣,可以使用bcp命令來實現。
.執行sp_configure命令,並保留其輸出內容。
.拷貝$SYBASE/server_name.cfg文件,以做保留。
.Shut down SQL/ASE Server。
.執行以下命令,創建一個新的master設備:
UNIX:buildmaster -d -ssize
VMS:buildmaster /disk= /size=size (size以頁爲單位,1頁=2K)
.編輯RUN_server_name文件,-d(UNIX)或/device(VMS)參數指向新建的設備名。
.單用戶模式啓動SQL/ASE Server:
UNIX:startserver -f RUN_sever_name -m
VMS:startserver /server=server_name /masterrecover
.執行select * from sysdevices命令,並保留其輸出內容。
.確認新建的sysusages系統表中每一行內容與舊的sysusages系統表內容相符,而且在配置好Server之後,
沒有做過alter database,那麼系統表sysusages的內容是正確的。如果做過alter database,則要按原來
的順序執行這 些腳本,如果沒有腳本,就要到保存的sysusages系統表的信息中找到alter database
的參數。
.Shutdown SQL/ASE Server,並用單用戶模式啓動Server,查看sysusages系統表內容是否正確。
.如果所配置的Backup Server名稱不是SYB_BACKUP,則要執行:
1> sp_configure "allow updates",1
2> go
1> update sysservers set srvnetname="name in interfaces file"
where srvname="SYB_BACKUP"
2> go
.裝載master庫。如果新master設備的大小與舊設備大小不同,則Server會Shut down。請注意新的系統表
將會被重寫,而且你需要調整Sysdevices系統表中master設備的大小。請執行以下兩步:
.用單用戶模式啓動Server.
.如果新設備大小與舊設備大小不同,請執行:
1> sp_configure "allow updates",1
2> go
1> update sysdevices set high=nnnn where name="master"
2> go
其中nnnn是以頁(2K)爲單位的master設備的大小,此值可以從保留的sysdevices系統表的信息中找到。
如果 所建的設備比舊設備大,請執行:
1)創建一個與master設備差不多大的數據庫,這樣做的目的是重新初始化分 配頁,使得整個master設備
可用。
2)刪除這個數據庫。
.重啓Server。
.後備master數據庫。
注意:

.在裝載master庫之前要確定SQL Server此時的字符集和語言模塊與後備master庫時的字符集和語言模塊相同。
.在執行此任務之前和完成以後使用sp_helpsort查看字符集與語言模塊是否相同。




Q.如何重建sybsystemprocs系統數據庫?

A.依照以下步驟可以實現移動sybsystemprocs系統數據庫以及設備的任務。同時這個過程也可以用來擴建
sybsystemprocs系統數據庫。

以下過程中所提到的語法結構,可以參看SYBASE相關資料。

SYBASE提醒您,在修改系統表時,SQL Server要以單用戶模式運行,同時要以"sa"用戶登錄。

. 保留駐留在sybsystemprocs系統數據庫中自定義的存儲過程腳本。
.單用戶模式啓動SQL Server,執行:
1> sp_configure "allow updates",1
2> go
1> reconfigure with override(10.0版本以上,省略此步)
2> go
.刪除sybsystemprocs系統數據庫:
1> use master
2> go
1> drop database sybsystemprocs
2> go
在重建sybsystemprocs系統數據庫之前,不要創建任何其他數據庫。
.刪除sysdevices系統表中有關sybsystemprocs系統數據庫的信息:
1> begin tran
2> delete from sysdevices where name="sysprocsdev"
我們假定sysprocsdev是默認的sybsystemprocs系統數據庫設備名。
3> select * from sysdevices
確定刪除是否正確有效,如果正確,執行:
4> commit tran
否則,執行:
4>rollback
.重啓SQL Server.
.創建sybsystemprocs系統數據庫設備:
1> disk init name="sysprocsdev",physname="physical_path",vdevno=4,size=25600
2> go
其中size是以頁爲單位(512頁=1M)。
sybsystemprocs系統數據庫設備的vdevno應該是4,SQL Server在單用戶模式下4不能被重新利用,所以
如果以上語句執行時出現問題,請重啓SQL Server。

.sybsystemprocs系統數據庫:
1> create database sybsystemprocs on sysorocsdev=50
2> go
在sysdatabases系統表中,sybsystemprocs系統數據庫的dbid=4,如果在重建
sybsystemprocs系統數據庫之前,沒有創建任何其他數據庫。
.以多用戶模式啓動SQL Server,並執行:
1> sp_configure "allow updates",0
2> go
3> reconfigure with override(10.0版本以上,省略此步)
4> go
.運行installmaster腳本:
%isql -Usa -Psa_password -Sserver_name -n -iinstallmaster -o< output_file
installmaster腳本在$SYBASE/scripts路徑下。
.重建sybsystemprocs系統數據庫中的用戶自定義存儲過程 。



Q.如何恢復master數據庫?

A.ASE can't setup and has no valid dump of master

1、編輯RUN_servername
在命令行最後加入:-T3607

2、單用戶模式啓動ASE
$cd install
$startserver -f RUN_servername -m

3、bcp out系統表
$bcp master..sysdevices out /directory.spec/devs -Usa -P -c
$bcp master..sysdatabases out /directory.spec/dbs -Usa -P -c
$bcp master..sysusages out /directory.spec/usages -Usa -P -c
$bcp master..syslogins out /directory.spec/logins -Usa -P -c
$bcp master..sysconfigures out /directory.spec/configures -Usa -P -c
$bcp master..syscharsets out /directory.spec/charsets -Usa -P -c

4、shutdownASE

5、創建新master設備
$buildmaster -d -s
(new_master_device_size以2K爲單位)

6、編輯RUN_servername
將指定master設備指定爲新創建的master設備,並刪除在第1步中增加的參數。

7、刪除/directory.spec/dbs、/directory.spec/usages文件中有關master、tempdb、model的內容。


Q.如何做 rebuild log?

A.注意:這個過程可能會引起數據的不一致性。

(1)賦予sa用戶sybase_ts_role的角色
isql -Usa -P
1>sp_role "grant","sybase_ts_role",sa
2>go
1>quit

(2)將數據庫置爲"bypass recovery"狀態
isql -Usa -P
1>sp_configure "allow updates",1
2>go
1>use master
2>go
1>update sysdatabases set status=-32768
2>where name="database_name"
3>go
1>shutdown with nowait
2>go

(3)rebuild數據庫日誌
isql -Usa -P
1>use master
2>go
1>dbcc rebuild_log(database_name,1,1)
2>go
1>shutdown with nowait
2>go

(4)重啓SQL server
1>use master
2>go
1>update sysdatabases set status=0 where name="database_name"
2>go
1>sp_configure "allow updates",0
2>go
1>shutdown with nowait
2>go

(5)在重啓SQL server之後,如果數據庫恢復正常,rebuild log工作將會成功完成,否則要恢復數據庫備
份,使用dump database或bcp命令。

8、單用戶模式啓動ASE
$cd install
$startserver -f RUN_servername -m

9、 bcp in系統表
$ bcp master..sysdevices in /directory.spec/devs -Usa -P -b 1 -c
$bcp master..sysdatabases in /directory.spec/dbs -Usa -P -b 1 -c
$bcp master..sysusages in /directory.spec/usages -Usa -P -b 1 -c
$bcp master..syslogins in /directory.spec/logins -Usa -P -b 1 -c
$bcp master..sysconfigures in /directory.spec/configures -Usa -P -b 1 -c
$bcp master..syscharsets in /directory.spec/charsets -Usa -P -b 1 -c

10、shudown ASE

11、執行installmaster腳本
$isql -Usa -P < $SYBASE/scripts/installmaster

12、啓動ASE

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章