程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> sybase故障解決七

sybase故障解決七

編輯:SyBase綜合文章
Sybase 故障解決7 [轉]
46)如何恢復master數據庫
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<path_to_new_master_device> -s<new_master_device_size>
(new_master_device_size以2K為單位)
6、編輯RUN_servername
將指定master設備指定為新創建的master設備,並刪除在第1步中增加的參數。
7、刪除/directory.spec/dbs、/directory.spec/usages文件中有關master、tempdb、model的內容。
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、重啟ASE
11、執行installmaster腳本
$isql -Usa -P < $Sybase/scripts/installmaster
47)如何做 rebuild log (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數據庫日志
重啟Server
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命令。
48)如何重建sybsystemprocs系統數據庫
依照以下步驟可以實現移動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系統數據庫中的用戶自定義存儲過程 。
49)如何移植master設備
以下步驟說明了如何將master設備移植到不同的磁盤上。在執行此項任務的同時,請參看Sybase的相關文檔(Technical Documents#1324 entitled "Segment Remapping with Load database When Moving a Database")。請注意,在執行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<master_device> -ssize
VMS:buildmaster /disk=<master_device> /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查看字符集與語言模塊是否相同。
50)死鎖  以前,由於采用通過服務器訪問或變更數據的技術,就存在可能發生死鎖的情況。對於常常是更多地由ASE的處理特性所引起的死鎖,而不是由不恰當的事務設計所引起的死鎖,就給數據庫管理員(DBA)帶來了特別的麻煩。通過幾種增強方式,ASE 11.9.2將這些系統所引起的死鎖問題得到了解決。  此外,為了進一步處理針對數據可能發生的死鎖,已經認識到可以對釋放共享鎖的時間點加以改變,這樣一來,就能夠使對以前發生死鎖的數據行的並發訪問保持一致。在處理一個連接(join)時,以前的處理方式是將在外部表中加鎖的行一直保持到檢索到內部行時為止。然而在大多數情況下,一旦檢索到數據就不再需要對進行訪問的行繼續加鎖。隨著引入固定的行標識(RIDs),這就意味著,外部表的掃描從這一行掃描到下一行,一旦所需要的信息已經被檢索到之後,在所連接的外部表中,對行的加鎖就可以釋放了。這個功能被稱之為“帶有加鎖方式的讀提交”("read committed with lock”),並可用如下的命令加以配置:
sp_configure ‘read committed with lock’,0|1   為了證實上述情形,建立了一個實際的客戶環境,以便按照一系列它們所提供的測試進行,用於驗證他們所認為的最壞的並發情況下以確保不發生死鎖。在一台應用服務器上執行項分開的流式任務,它們包括如下任務:在一個單一邏輯事務中進行5000條SQL語句的更新操
SQR報告
用戶執行OLTP工作(插入、更新和聯機查詢)訪問一定數量的表(典型為6或7)
引用至少包含兩個子查詢的SQL語句;
在光標定義中采用截然不同的光標(cursors),以引起工作表的使用。  采用較早版本的服務器產品,進行上述的應用實驗,可能發生死鎖,其主要原因如下:  如果插入一行,服務器就會采用群聚性的索引以訪問存貯該行所在的頁面,並在一種排它性的頁面加鎖方式下執行插入操作。接著服務器就對表的每個非群聚性索引進行訪問,在一種排它性的頁面級加鎖方式下,在其末端(葉級)結構中插入相應的條目。如果第二個用戶也通過非群聚性的索引訪問該表,他們可以按照非群聚性索引保持對該葉級頁面實施共享加鎖,與此同時,這些非群聚性的索引也由這個排它性的頁面加鎖所阻礙並用在插入操作中。這種對由第二個用戶對非群聚性索引的葉級結構所進行的加鎖方式,可能阻礙插入嘗試並為第一個用戶增加一個條目,從而可能引起死鎖。  在這個商業應用的設計中,開始首先在一張表中采用零值與一個標識符兩部分組成的鍵值插入所有的新行。在一個單一的邏輯事務中對所有的行使用相同的標識符來進行並發更新。這些更新采用唯一鍵值去代替零值,就引發了索引行移動到索引的葉級結構的最後。當多個用戶並發執行這個任務時,第一個用戶就鎖定進行處理的頁面和索引所在的葉級結構的末端。這將阻礙用戶試圖對第二個按行范圍所進行的工作。當第一個用戶到達所確定的頁面邊緣,即該范圍即將終止,下一批所組塊並妨礙的頁面范圍即將開始之時,就可能發生死鎖。  即使訪問行是不同的,對表按照任何不一致的順序進行訪問,也會意味著可能發生死鎖。這是因為一個用戶所訪問的行可能在另一個用戶訪問的同一個以不同順序排列的頁面中。對於應用系統而言,當然這種設計明顯是很差的,但是卻還令人驚奇地普遍存在。  正如在 5.1節所敘述的有關“采用加鎖機制的讀提交”段的內容,當處理連接,同時對外部表的加鎖方式會一直保持到內部行被檢索到為止,這種情況就會發生。如果第二個用戶在訪問所連接的外部表中的行之前,先訪問了所連接的內部表的行,這種操作可能受阻,因為加鎖的順序被連接所破壞,從而也會引起死鎖。  采用Adaptive Server Enterprise 11.9.2的產品, 應用對索引頁的鎖存技術以代替傳統的加鎖方式,以及更小尺度的按行加鎖方式,導致了前三種死鎖類型不再發生。采用“按照加鎖進行讀提交”可以處理第四種死鎖情況。
  作為進一步的測試,在前面所述及的最壞情況實驗中,同時還進行了增加額外負載的運行實驗。這類實驗包括一個擁有7000條SQL語句的單一事務,和從Microsoft Excel電子數據表中卸載數據(加入ASE服務器)。這兩個版本的測試已經進行了多次,從未發生過死鎖。  就在Adaptive Server Enterprise產品的設計中進行修正以防止死鎖和增加並發性的同時,也發生了一種情形,可能發生死鎖,而這種情況在過去是不可能發生的。  為了解決這一問題,已經采用了一種稱之為“並發優化”的優化程序。這個方法指明了如果在一張表中需要進行存取行的頁面數小於某個固定的數字(其缺省值為16),那麼將不再考慮使用任何一個索引,而寧可對表進行直接掃描。這就意味著對於很小的表,利用索引而不是用全表掃描方式直接訪問某些可能會產生直接影響的行,存在引起死鎖的可能性。在考慮掃描一張表之前,需要確定在一張表中能有多少頁,可采用如下的命令在頁級結構中加以配置:
sp_chgattribute <tablename>, “concurrency_opt_threshold”, <value> 51)如何配置SQL Server來做遠程備份?  1.修改interfaces文件,添加遠程機器上Backup Server的條目(Backup Server的名稱,地址,端口號)    ——UNIX平台使用dscp實用工具添加
   ——Windows平台使用dsedit實用工具添加
  2.在sysservers系統表中添加遠程Backup Server名
   1>sp_addserver SYB_BACKUP,null,BACKUP_SERVER_NAME
   2>go
  3.使用sp_helpserver查看至少存在以下3個條目:
   ——本地ASE名稱
   ——本地Backup Server名稱
   ——遠程Backup Server名稱
  4.在本地機器上實現遠程備份:
   1>dump database DATABASE_NAME to "remote_Machine_path/..." at REMOTE_BACKUP_SERVER_NAME
   2> go    1>load database DATABASE_NAME from "remote_Machine_path/..." at REMOTE_BACKUP_SERVER_NAME
   2> go   1.如果要實現遠程的雙向備份,請在遠程機器上做與本地機器相同的配置.
  2.本地的Backup Server的名稱要求與遠程的Backup Server的名稱不一樣.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved