SQL 2000 - Could not continue scan with NOLOCK due to data movement解決之方法
http://www.cnblogs.com/dimg/archive/2005/11/21/281319.aspx
上週末,利用沒有使用系統的空當,本人將公司的eHR資料庫從一臺Server移到另一臺Server上,(由於DB檔案過大,本人採用一分割合併工具將DB 檔案先在源伺服器上分割成小檔案,再在目的伺服器上進行合併).順利移過之後,經過簡單的測試,加上這個動作以前也做過,應該不會有問題,本人就回家了.
今早一來檢視系統使用狀況,發現SQL Job中的Integrity Check 出現了錯誤,手工執行這個Job還是出現,因為這在以前的環境沒有發生過這樣的情況,但是系統在使用過程中也沒有使用者發現異常,所以我就對這個錯誤沒有做進一步的分析.10分鐘後,其中一個開發程式設計師就說,在呼叫一個儲存過程時出現一個莫名其妙的錯誤,說以前從來沒有見過,而且在測試環境執行OK,當時我就納悶,看了一下錯誤資訊:
Could not continue scan with NOLOCK due to data movement
用Event Viewer檢視事件,
Event Type: Error
Event Source: MSSQLSERVER
Event Category: (2)
Event ID: 17052
Date: 2005-11-21
Time: 下午 12:28:48
User: CMMSG-GLBHR\Administrator
Computer: CMMSG-GLBHR
Description:
Error: 823, Severity: 24, State: 2
I/O error (torn page) detected during read at offset 0x000000491b6000 in file 'E:\DB\eHR2_Data.MDF'.
For more information, see Help and Support Center at .
Data:
0000: 37 03 00 00 18 00 00 00 7.......
0008: 0c 00 00 00 43 00 4d 00 ....C.M.
0010: 4d 00 53 00 47 00 2d 00 M.S.G.-.
0018: 47 00 4c 00 42 00 48 00 G.L.B.H.
0020: 52 00 00 00 05 00 00 00 R.......
0028: 65 00 48 00 52 00 32 00 e.H.R.2.
0030: 00 00 ..
怎麼會出現I/O錯誤,難道是硬體問題,這臺伺服器可是1個月之前才剛從市面上買來的.在網上轉了一大圈之後,發現居然有一位網友發生了跟我同樣的異常,並在IT168上撰寫了一篇長達3頁的文章說如何解決這個問題.因為系統正在使用,且採用他的方案需要耗時較長,而且成功性也沒有100%的保証.
所以我就在找另外一個方法.
我採用的方法是,
1).在資料庫上執行DBCC CHECKDB,按正常來講,執行完後在最後應顯示
CHECKDB found 0 allocation errors and 0 consistency errors in database 'eHR2'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
如果有錯誤的話,找出錯誤的資訊,當時我執行的時候就有7筆錯誤資訊,不過這7筆錯誤資訊都是指向同一個表(姑且命名為表A),而且表A裡面的資料量非常大.
2),利用中午休息時間,將系統暫停,將表A裡面的資料用DTS匯入到另外一個表(表B),這個時候發現錯誤,提示
I/O error (torn page) detected during read at offset 0x000000491b6000 in file 'E:\DB\eHR2_Data.MDF'.這同Event Viewer裡面記錄的錯誤資訊是一模一樣的.既然出錯了,所以我採用另外一種方式來將表A裡的資料移到另一表中,採用INSERT INTO 語句直接插入方式,關鍵的地方出來了,這個時候系統提示我不能寫入,Primary Key Duplicated Error,難道表B中已有資料,我開啟表中,果然已經有資料,只不過是部分資料,這個時候我明白了,一定是這個表中有部分資料出現了問題,果不其然,我找到了出現問題的部分資料所在範圍.
3). 然後我所做的就是將出現問題的資料之外的資料全部匯入到一個新表中,然後將出錯的表A刪除,再將新表ReName為表A.為了檢查是否成功,我再次執行DBCC CHECKDB,檢查成功,沒有錯誤.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-661743/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於SQL Server的WITH(NOLOCK)和(NOLOCK)SQLServer
- SQL Server 2000 Error 14274 ,不能刪除job解決方法SQLServerError
- sql server2000忘記sa密碼的解決方法SQLServer密碼
- Many To Many could not initialize proxy – no Session的解決方法Session
- pip install 提示:Could not install packages due to an EnvironmentErrorPackageError
- PHP 7.3 "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? 解決方法PHPUI
- 關於 artisan migrants Could not find drive 解決方法
- Android: The following classes could not be instantiated: 解決方法Android
- ORA-20000的解決方法
- ORA-20005的解決方法
- FATAL ERROR: Could not find ./bin/my_print_defaults 解決方法Error
- PRVF-0002Could not retrieve local nodename的解決方法
- 在DDMS中檢視/data/data/*下檔案的解決方法
- mysql中出現Unit mysql.service could not be found 的解決方法MySql
- MySQL could not be resolved: Temporary failure in name resolution報錯解決方法MySqlAI
- 怎麼解決SQL server 2000的中文問題?SQLServer
- SQL SERVER Msg 7391解決方法SQLServer
- [轉帖]SQL秘笈 : NOLOCK、ROWLOCK、UPDLOCK的使用!SQL
- Could not find *.apk!解決辦法APK
- win10安裝sql2000沒有反應怎麼辦_win10安裝不了sql2000的解決方法Win10SQL
- SQL Server 2000 死鎖(dead lock) 問題解決SQLServer
- 解決 SQL Server 2000 企業管理器出錯SQLServer
- win10專業版系統安裝SQL2000掛起的解決方法Win10SQL
- Data Pump Import速度問題之解決過程Import
- SQL ERROR 7311解決方法SQLError
- 解決"Could not reserve enough space for object heap"Object
- Linux下ODBC連線HGDB報Could not SQLConnect錯解決方法LinuxSQL
- Failed to restart Polybase Data Movement service after running sp_polybase_join_groupAIREST
- ORA-01403:no data found 解決方法兩則
- 升級pip報錯ERROR: Could not install packages due to an OSError: [WinError 5]ErrorPackage
- 解決Win2000 不能啟動的幾種方法
- SQL2005轉SQL2000的方法SQL
- SQL Server 中的 NOLOCK 到底是什麼意思?SQLServer
- xmanager之linux 解決方法Linux
- SQL Server置疑資料庫解決方法SQLServer資料庫
- 錯誤 qt.qpa.plugin: Could not find the Qt platform plugin “windows“ in ““ 的解決方法QTPluginPlatformWindows
- Go:錯誤 could not launch process: EOF 解決Go
- Could not find jar tool executable問題解決JAR