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

解決 Error 605 錯誤的方案

編輯:SyBase綜合文章
錯誤原始信息(例子):

An attempt was made to fetch logical page '%ld' in
database '%.*s' from cache '%.*s'. Page belongs to
object with id '%ld', not to object '%.*s'.

-------------------------------------------------------------------------------------------------
使用dbcc tablealloc 去檢查出現錯誤的表

命令格式:
dbcc tablealloc('錯誤信息中第二個表對象')

最好將錯誤結果使用 isql 的 -o 參數輸出到文件中便於察看


注意:
這個dbcc 操作可能會鎖住接受檢查的表,這將影響到其他進程的訪問和操作。
-------------------------------------------------------------------------------------------------

DBCC 結果(例子為正常結果):

The default report option of OPTIMIZED is used for this run.
The default fix option of NOFIX is used for this run.
***************************************************************
TABLE: Tablename OBJID = id_number
INDID=1 FIRST=257 ROOT=264 SORT=0
Data level: 1. 1 Data pages allocated and 1 Extents allocated.
Indid : 1. 1 Index pages allocated and 1 Extents allocated.
INDID=2 FIRST=272 ROOT=272 SORT=0
Indid : 2. 1 Index pages allocated and 1 Extents allocated.
TOTAL # of extents = 3
Alloc page 256 (# of extent=1 used pages=2 ref pages=2)
Alloc page 256 (# of extent=1 used pages=3 ref pages=3)
Alloc page 256 (# of extent=1 used pages=2 ref pages=2)
Total (# of extent=3 used pages=7 ref pages=7) in this database
DBCC execution completed. If DBCC printed error messages, contact a user with System Administrator (SA) role.

-------------------------------------------------------------------------------------------------
一.
如果有一些錯誤(例如2583或者其他)出現在 INDID為0之後,表示表本身數據損壞。
解決辦法:
1. 使用 "select into" 或者 "insert into ... select " 將壞表中能夠正常訪問的數據取出裝入一個臨時表中。同時可以使用
" where"加上一些可以縮小選擇范圍的條件盡量多的將正常的數據取出
2. 或者使用bcp去導出正常的數據
3. 對於實在無法取出的數據,只能通過應用系統中的冗余或者相關信息進行恢復
4. 刪除或者重命名壞表,並重新創建新表
5. 將導出的正常數據重新導入新表中

注意: 可能會有一些數據的丟失
-----------------------------------------------------------------------------------------------

--
二.
如果有一些錯誤(例如2583或者其他)出現在 INDID為1之後,說明表上的聚簇索引損壞,解決方法同一,也可能出現數據丟失。
如果有一些錯誤(例如2583或者其他)出現在 INDID為2,3,4.....之後,說明為表上的非聚簇索引損壞,解決方法比較簡單,刪除此索引然後重新創建即可。

步驟如下:
1. use databasename
go

2. 獲知索引名稱
select name from sysindexes where id = table_object_id and indid = index_number
go

3. 創建一個跟壞索引不同名稱但具有相同列的索引
create index
你可以使用 sp_help table_name 去察看索引上的列信息
4. 將已損壞索引刪除
drop index

---------------------------------------------------------------------------------


您正在看的Sybase教程是:解決 Error 605 錯誤的方案。----------------
當這些故障排除完畢後,有時間及業務系統允許的情況下,最好再做一次全庫的dbcc檢查

DBCC checkdb(db_name)
DBCC checkalloc(db_name)
DBCC checkcatalog(db_name)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved