设为首页 收藏本站
查看: 785|回复: 0

[经验分享] SQL Server 2000 錯誤信息Could not continue scan with NOLOCK due to data movement解決之方

[复制链接]

尚未签到

发表于 2015-7-4 11:54:26 | 显示全部楼层 |阅读模式
  上周末,利用沒有使用系統的空當,本人將公司的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,檢查成功,沒有錯誤.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83063-1-1.html 上篇帖子: 视图的创建及使用(sql server 2005) 下篇帖子: SQLServer2005 Express问题:由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表