前几天,数据库文件出问题,现象就是,一些的查询操作会报以下错误:
Microsoft OLE DB Provider for SQL Server 错误 '80004005'
Warning: Fatal error 644 occurred at Aug 5 2004 8:45AM
Microsoft OLE DB Provider for SQL Server 错误 '80004005'
Warning: Fatal error 823 occurred at Aug 4 2004 10:39PM
823 错误是指:
SQL Server 在对某设备进行读或写请求时遇到 I/O 错误。该错误通常表明磁盘
644 错误是指:
当索引 ID 表示的非聚集索引出错时发生该错误。当进程试图删除不存在的行时检测到该损坏。
那个数据库服务器的硬盘是做了Raid 5 的,查询具体的硬盘,没有看到那块硬盘坏了。把数据备份,然后恢复到另外一台机子。仍然存在这个问题。显然数据库文件有坏块了。
试图通过下面语句修复数据库,但是只能修复部分数据,但是不能完全修复。
dbcc checktable('数据表')
dbcc checktable('数据表') WITH ALL_ERRORMSGS
DBCC CHECKTABLE (数据表,repair_allow_data_loss)
DBCC DBREINDEX('数据表')
sp_dboption '数据库名', 'SINGLE USER', TRUE
DBCC CHECKDB('数据库名', REPAIR_ALLOW_DATA_LOSS)
sp_dboption '数据库名', 'SINGLE USER', FALSE
用SQL Server 的导入导出功能无法完全导出数据。会报 823 错误。对所有数据的Select ,也会报 823 错误。
下面是用这些修复语句修复后,返回的一些有代表性的错误信息:
Server: Msg 8929, Level 16, State 1, Line 1
对象 ID 797245895: 在文本 ID 4582550994944 中发现错误,该文本的所有者是由 RID = (1:65204:25) ReplyID = 22853478 标识的数据记录。
Server: Msg 8909, Level 16, State 1, Line 1
表错误: 对象 ID 0,索引 ID 13824,页 ID (1:430153)。页首结构中的 PageId = (31744:9744137)。
Server: Msg 2533, Level 16, State 1, Line 1
表错误: 未发现页 (1:307388),该页分配给了对象 ID 397244470,索引 ID 0。可能页无效或页首结构中的对象 ID 信息不正确。
Server: Msg 8978, Level 16, State 1, Line 1
表错误: 对象 ID 397244470,索引 ID 1。页 (1:307360) 缺少上一页 (1:307391) 对它的引用。可能是因为链的链接有问题。
Server: Msg 8976, Level 16, State 1, Line 1
表错误: 对象 ID 397244470,索引 ID 1。在扫描操作中未发现页 (1:307388),而其父代 (1:308098) 和上一页 (1:307387) 指向了该页。请检查先前的错误。
Server: Msg 8980, Level 16, State 1, Line 1
表错误: 对象 ID 397244470,索引 ID 1。索引节点页 (1:308098),槽 155 指向子页 (1:307389) 和上一子页 (1:307388),但未遇到这些页。
Server: Msg 8939, Level 16, State 1, Line 1
表错误: 对象 ID 825360384,索引 ID 62467,页 (1:430152)。测试(m_slotCnt < MaxSlot)失败。值为 5409 和 4048。
Server: Msg 8986, Level 16, State 1, Line 1
发现的错误数目(201)太多(属于对象 ID 797245895)。若要查看所有的错误信息,请用 'WITH ALL_ERRORMSGS' 重新运行该语句。
Server: Msg 8964, Level 16, State 1, Line 1
Table error: Object ID 797245895. The text, ntext, or image node at page (1:90548), slot 53, text ID 4297096364032 is not referenced.
Server: Msg 8974, Level 16, State 1, Line 1
Text node referenced by more than one node. Object ID 797245895, text, ntext, or image node page (1:100941), slot 15, text ID 4367996551168 is pointed to by page (1:407572), slot 25 and by page (1:430169), slot 25.
Server: Msg 8961, Level 16, State 1, Line 1
Table error: Object ID 797245895. The text, ntext, or image node at page (1:100944), slot 29, text ID 4582550732800 does not match its reference from page (1:430166), slot 55.
Server: Msg 8965, Level 16, State 1, Line 1
Table error: Object ID 797245895. The text, ntext, or image node at page (1:307381), slot 4, text ID 4584554954752 is referenced by page (1:3786), slot 75, but was not seen in the scan.
Error: 823, Severity: 24, State: 2
I/O error (torn page) detected during read at offset 0x000000d2086000 in file 'E:/database/DbName.mdf'.
17310 :
SqlDumpExceptionHandler: Process 3224 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.
17065 :
SQL Server Assertion: File: <"xact">, line = 838 Failed Assertion = '!m_parNestedXactCnt' Trying to use the transaction while there are 5 parallel nested xacts outstanding.
18052 :
Error: 3624, Severity: 20, State: 1.
17066 :
SQL Server Assertion: File: <proc.c>, line=1576 Failed Assertion = 'm_activeSdesList.Head () == NULL'.
17066 :
SQL Server Assertion: File: <recbase.cpp>, line=1378 Failed Assertion = 'm_offBeginVar < m_SizeRec'.
这些修复都无效后,最后只有采用了最原始的方式,写程序逐行用SELECT语句将数据提取出来。好在每天都有备份,这次只有几十条数据丢失。
至于为啥产生这个错误,目前仍然不知道。
前几天,数据库文件出问题,现象就是,一些的查询操作会报以下错误:Microsoft OLE DB Provider for SQL Server 错误 80004005 Warning: Fatal error 644 occurred at Aug 5 2004 8:45AM 或者:Microsoft OLE DB Provider for SQL Server 错误 80
A:
数据库
文件
和系统
文件
的区别在于其所存储的内容和用途。
系统
文件
是操作系统和应用程序所需要的
文件
,它们包括可执行
文件
、库
文件
、配置
文件
、驱动程序、日志
文件
等。它们通常包含了系统功能的实现,如启动、运行、管理和维护等。
数据库
文件
则是专门用于存储和管理数据的
文件
。它们包含了
数据库
系统所管理的表、视图、索引、存储过程等
数据库
对象的定义和数据内容。
数据库
文件
的主要作用是提供一个可靠、安全和高效的数据存储和访问环境,用于支持应用程序的数据操作和决策分析。
因此,从内容和用途上来说,
数据库
文件
和系统
文件
是两种不同的
文件
类型,它们起到不同的作用,也需要不同的管理和维护策略。