發表文章

目前顯示的是 1月, 2019的文章

Sybase 資料庫發生 Error: 644, Severity: 21, State: 1

通常此錯誤都是 索引損毀造成,在非資料庫伺服器等級機器上容易出現,官方說法通常是硬體問題引起,但實際狀況不一定。 Error: 644, Severity: 21, State: 1 後通常還會接這樣訊息: Index row entry for data row id (11316867, 0) is missing from index page 11405926 of index id 5 of table ' myTable ' in database ' CURDB '. Xactid is (7099705,6). Drop and re-create the index . 雖然 官方說法 建議使用 dbcc checktable 或是 sp_fixindex 來處理,但是效果不理想,建議還是重建比較好。 但是怎麼知道錯誤是哪個索引檔呢? 先用 sysindexes 列出全部索引 select si.* from sysindexes si,sysobjects so where so.id = si.id and so.type = 'U' and so.name = 'myTable' go 然後錯誤訊息指名 index id 5 ,所以找到欄位 indid 為 5 的索引名稱 'CUST_IDX'。 接下來就是 DROP 索引 drop index myTable.CUST_INDEX go 再來重建,由於此索引不是主索引所以下面使用 nonclustered 建立 create nonclustered index CUST_IDX on dbo.myTable (column1,column2,column3....) on 'default' go ※如果該資料表資料量很大,依照機器速度可能會花上半天左右。 參考: How to find Index List in a Sybase database? Error 644 - Sybase Infocenter