SYBASE 使用技巧集錦(zt)
SYBASE 使用技巧集錦
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_MACHINESOFTWARESYBASEServer
HKEY_LOCAL_MACHINESOFTWARESYBASEServer_BS
HKEY_LOCAL_MACHINESOFTWARESYBASEServer_HS
HKEY_LOCAL_MACHINESOFTWARESYBASEServer_MS
到登錄檔的如下結構下:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment
刪除DSLISTEN, DSQUERY, SYBASE, 並修改 LIB, INCLUDE, PATH刪除SYBASE有關目錄
刪除如下注冊鍵值:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices
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
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_MACHINESOFTWARESYBASEServer
HKEY_LOCAL_MACHINESOFTWARESYBASEServer_BS
HKEY_LOCAL_MACHINESOFTWARESYBASEServer_HS
HKEY_LOCAL_MACHINESOFTWARESYBASEServer_MS
到登錄檔的如下結構下:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment
刪除DSLISTEN, DSQUERY, SYBASE, 並修改 LIB, INCLUDE, PATH刪除SYBASE有關目錄
刪除如下注冊鍵值:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242406/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sybase複製(zt)
- sybase優化概述(zt)優化
- VI高階命令集錦(zt)
- SYBASE優化總結(zt)優化
- SYBASE學習筆記(zt)筆記
- Sybase基礎知識(zt)
- SYBASE資料庫dbcc命令詳解(zt)資料庫
- 安裝sybase12.5 for linux注意事項(zt)Linux
- SYBASE12.5.2 FOR REDHAT AS4.0 安裝步驟(zt)Redhat
- Portal開發與配置技巧集錦(一)
- Portal開發與配置技巧集錦(二)
- Portal開發與配置技巧集錦(三)
- PageMaker排版製作精彩應用技巧集錦
- 如何學習效能測試?LoadRunner小技巧集錦
- 知識集錦
- 管理故事集錦
- ArchLinux 問題集錦Linux
- 小問題集錦
- docker 踩坑集錦Docker
- Python例項集錦Python
- 前端知識集錦前端
- kafka問題集錦Kafka
- flutter問題集錦Flutter
- Oracle叢集檔案系統(OCFS2)使用者指南(zt)Oracle
- 修改Oracle資料庫字符集(zt)Oracle資料庫
- 新手必看!使用New File Menu常見問題集錦
- PHP命令執行集錦PHP
- 面試題集錦-SpringBoot面試題Spring Boot
- JS工程化集錦JS
- Android 知識點 集錦Android
- iOS 感測器集錦iOS
- vue知識點集錦Vue
- 面試集錦(九)git面試Git
- 面試集錦(十二)hashMap面試HashMap
- 面試集錦(三)spring面試Spring
- MySQL如何避免使用swap(ZT)MySql
- 四月前端知識集錦(每月不可錯過的文章集錦)前端
- 六月前端知識集錦(每月不可錯過的文章集錦)前端