最近一段時間
,神馬軟體系統中心
接到很多客戶諮詢sql資料庫損壞,附加資料庫報錯的一些問題,在這裡整理一下sqlsever
資料庫常見的一些
故障現象
及注意事項。
目前各大
中小型企業使用sqlsever
應用的非常多,但由於各種原因,也會經常出現一些不同的故障,常見的有一下幾種:
一,附加資料庫檔案
mdf及日誌檔案
ldf時,報
「823」
錯誤。故障出現原因:(1
)在資料庫讀寫過程中突然宕機或者斷電。(2
)伺服器重啟,重啟後資料庫出現「置疑
」狀態。(3
)磁碟i/o
錯誤在以上可能的三種突發故障下,由於緩衝資料丟失,資料庫無法寫入正確的資料,導致資料結構紊亂,重啟後資料庫無法正常附加。
二,通過之前備份的資料庫進行資料庫還原時,出現
「內部一致性錯誤」。
這通常也是資料庫管理人員最大的夢魘了,明明是做了備份,卻在還原時發現備份檔案是損壞的。
這意味著資料庫的丟失,後果是非常嚴重的
故障出現原因:(1
)備份檔案和資料庫放在同乙個物理硬碟上,硬碟出故障,備份也損壞。(2
)備份介質損壞;或者做的是網路備份,資料在網路傳輸中發生了損壞。(3
)資料庫在做完整備份、檔案備份或者檔案組備份的時候,裡面的內容就已經有了損壞。這是因為
sql server
在做資料備份的時候為了節省時間,基本只是很簡單地把資料頁面拷貝下來,不會做一致性檢查的。但是在恢復的時候,需要將資料庫恢復(
recover
)到事務一致的乙個時間點。如果備份中的損壞妨礙了
sql server
的前滾後滾
(redo
和undo)
,恢復動作就會遇到錯誤。(4
)在備份資料庫時由於磁碟中有壞道,備份出來的
mdf檔案不完整時也會出現這種錯誤。
當資料庫出現以上的故障時,需要修復資料庫檔案當中的壞頁面,如果對
mdf檔案結構不是很清楚的話,請不要對原檔案進行胡亂修改,這樣會適得其反,會造成更大的損失。我們可以先將資料庫檔案備份乙份,然後對備份檔案用命令來修復,常常這種情況用命令修復完後,資料會丟失部分!
三,附加還原資料庫後,檢測資料庫是出現一致性錯誤和分配錯誤
資料庫附加或者還遠成功後,
dbcc checkdb
通不過,報一系列錯誤。如下所示:
checkdb 發現了
5 個分配錯誤和
2 個一致性錯誤(在資料庫
'test'
中)。repair_allow_data_loss 是最低的修復級別(對於由
dbcc checkdb (test )
發現的錯誤而言)。
dbcc
執行完畢。如果
dbcc
.故障出現原因:資料庫的某個頁面被更改或者清
0,所以產生一致性錯誤和分配錯誤。
四, 最為常見的
「未能讀取並閂鎖頁
(1:4234)
(用閂鎖型別 sh)
」在檢測資料庫,會常見到下面的錯誤:
「伺服器
: 訊息
8966
,級別
16,狀態
1,行
1 未能讀取並閂鎖頁
(1:4234)
(用閂鎖型別
sh)。
sysobjects 失敗」
。這種「
未能讀取並閂鎖頁
(1:4234)
(用閂鎖型別 sh)
」錯誤常常會出現在系統表中:
sysobjects
、sysindexes
、syscolumns
等中,這種錯誤出現的原因是因為系統表被破壞,這種錯誤是很麻煩地,因為
sql的效驗比較嚴密,只要稍改乙個關鍵字節,都出報這個錯誤,但有時可以匯出部分資料。
五, 誤刪除或誤格式化
出現這種情況後,很多使用者會用市面上的一些軟體來恢復資料庫,雖然用這些資料庫軟體可以恢復出
mdf和
ldf檔案來,但幾乎都會無法附加,即使附加成功,錯誤也會很多,因為資料庫在日常中經常增加和刪除記錄,這樣就會出資料庫檔案儲存不連續的情況,而市面上的軟體都是連續取資料,所以會造成資料庫無法附加。出現這種錯誤時,使用者應盡量不要使用本計算機,更不要安裝軟體和寫任何資料。
針對最後兩種情況的資料庫損壞,恢復起來是比較複雜的,簡單的一些命令恢復是達不到恢復的目的,這需要對資料庫的結構有非常深入的了解。目前市面上,能夠智慧型恢復資料庫的工具非常之少,使用者遇到這種問題可以嘗試使用
一些資料庫恢復專用軟體通過碎片提取的方式更完整的恢復資料庫表內記錄
。
SQL資料庫空間不足怎麼辦
當存放sql server資料庫的硬碟空間不足或效能 質量不佳時,資料庫情緒自然不會好。為了調動資料庫積極性,最好的辦法莫過於給資料庫找個寬敞 安全的新家。這等搬家的大事,絕不可輕視之。推薦文章 我們知道,在新建乙個資料庫的時候,我們會分別指定其資料檔案 mdf檔案 以及事務日誌檔案 ldf檔案 存...
資料庫出現死鎖怎麼辦?
最近接到乙個需求,需要同步二十萬條資料到我們資料庫來,然而過程並不太順利,解決之後來總結一下。後來了解情況後發現 中沒有事務的相關處理,涉及到資料量很大如果出現網路波動或其他訪問操作同一張表就會容易引發死鎖問題。procedure sync mnt five tree is update num n...
忘記oracle資料庫密碼怎麼辦
很久不用的oralce資料庫,如果忘記了密碼,可以這樣解決 如果沒有設定環境變數,去目錄c oracle product 10.2.0 db 1 bin 執行以下命令 c oracle product 10.2.0 db 1 bin sqlplus nolog sql plus release 10...