• SQL Server 2000 錯誤信息Could not continue scan with NOLOCK due to data movement解決之方法


    上周末,利用沒有使用系統的空當,本人將公司的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 http://go.microsoft.com/fwlink/events.asp.
    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,檢查成功,沒有錯誤.

  • 相关阅读:
    iOS之富文本总结
    iOS文字编辑之富文本介绍
    【原创】【小技巧】如何阻止每次手机链接到电脑上都会自动弹出图片和iTunes
    iOS枚举
    根据两点经纬度计算距离
    iOS设计模式之懒加载
    【小技巧】【源码】iOS开发中常见的小技巧,小知识点
    重要信息!Xcode 8 不支持第三方插件
    iOS开发 适配iOS10以及Xcode8
    【源码】模拟炮弹动画效果,平移动画
  • 原文地址:https://www.cnblogs.com/dimg/p/281319.html
Copyright © 2020-2023  润新知