日期:2014-05-18  浏览次数:20623 次

*******这样的I/O ERROR错误还有恢复的可能吗?
现在在查询分析器中写入查询语句,甚至是select count(*) form table,都会提示如下错误

I/O error (bad page ID)detected during read at offset 0x0000008674500000 in file 'MYdb_data.MDF';

产生这样的原因发现是其中table表中有image字段,该表已经达到30G大小;

在前段时间数据库一直正常,硬盘空间40G,数据库已经到了35G以上,在前一天,突然数据库变成置疑状态,分离数据库之后想重新附加上MYDB,总是提示恢复失败,最后终于采用MDF单个文件的恢复方法恢复了数据库,其余表数据均正常,只有该table表,其中有image字段;

该table表中,可以访问到大约1/3的数据,后面的数据则无法访问,象最上面的SQL语句也无法运行,总是提示以上错误

这样的问题有办法解决吗,该表中另外2/3的数据还有读出的可能性吗?

望大家不吝赐教!

------解决方案--------------------
关注下
------解决方案--------------------
检索 ntext、text 或 image 值
可通过以下方式检索 ntext、text 或 image 值: 

在 SELECT 语句中引用该列。 
例如,以下查询将返回每个出版商在 pr_info 列中的所有信息:

USE pubs
SELECT pr_info
FROM pub_info

这是在使用 API(例如 ADO、OLE DB、ODBC 或 DB-Library)的数据库应用程序中所使用的方法。该列被绑定到一个程序变量上,然后使用特殊的 API 函数或方法逐块检索数据。

如果在 Transact-SQL 脚本、存储过程和触发器中使用这种方法,则只能用于相对较短的值。如果数据的长度大于 SET TEXTSIZE 中指定的长度,则必须增大 TEXTSIZE 或使用其它方法。当前的 TEXTSIZE 设置通过 @@TEXTSIZE 函数报告,并使用 SET TEXTSIZE 语句进行更改:

SET TEXTSIZE 64512

TEXTSIZE 的默认设置为 4096 (4 KB)。以下语句将 TEXTSIZE 重置为默认值:

SET TEXTSIZE 0

如果数据长度小于 TEXTSIZE,则将返回所有数据。

DB-Library API 还支持 dbtextsize 参数,该参数可控制可以选择的 ntext、text 和 image 数据的长度。用于 SQL Server 的 Microsoft OLE DB 提供程序和 SQL Server ODBC 驱动程序自动将 @@TEXTSIZE 设置为最大值 2 GB。

使用 TEXTPTR 函数可获得传递给 READTEXT 语句的文本指针。 
READTEXT 语句用于读取 ntext、text 或 image 数据块。例如,以下查询将返回每个出版商的示例文本数据的前 25 个字符(或第一行):

USE pubs
DECLARE @textpointer varbinary(16)
SELECT @textpointer = TEXTPTR(pr_info)
FROM pub_info
READTEXT pub_info.pr_info @textpointer 1 25

使用 SUBSTRING 函数可检索从列开头特定偏移位置开始的数据块。 
例如,以下查询将返回每个出版商的示例文本数据的前 25 个字符(或第一行):

USE pubs
SELECT SUBSTRING(pr_info, 1, 25) AS pr_info
FROM pub_info

使用 PATINDEX 函数可检索一些特定字节组合的偏移量。 
然后可以在 SUBSTRING 函数或 READTEXT 语句中使用该值检索数据。例如,以下查询将在 pub_info 表的 pr_info 列中搜索 Germany 字符串,并返回起始位置 103(字符串 Germany 的 G 在 pr_info 列的第 103 个字符处开始):

USE pubs
SELECT PATINDEX('%Germany%', pr_info) AS pr_info
FROM pub_info

PATINDEX 只在文本和字符数据类型上操作;它不接受image 值。

检索 ntext、text 或 image 的各部分值
这些方法不局限于检索从第一个字节开始的整个 ntext、text 或 image 值。可以将这些方法组合起来进行更灵活的处理,检索 ntext、text 或 image 值的不同部分。例如,以下 SELECT 语句将检索 text 值的起始标记和结束标记之间的部分:

USE Northwind
GO
CREATE TABLE TextParts (ColA INT PRIMARY KEY, ColB TEXT)
GO
INSERT INTO TextParts
VALUES( 1,
'Sample string START TAG What I want END TAG Trailing text.')
GO
SELECT SUBSTRING( ColB,
/* Calculate start as start of tag + tag length. */
(PATINDEX('%START TAG%', ColB) + 10),
/* Calculate SUBSTRING length as end - start. */
(
PATINDEX('%END TAG%', ColB) -
( PATINDEX('%START TAG%', ColB) + 10 )
)
)
FROM TextParts
GO

下面是结果集:

------------------------
What I want

(1 row(s) affected)



说明 当选择 image 数据时,返回的值包含字符 0x,表示该数据是十六进制。这两个字符算作是 TEXTSIZE 的一部分。


------解决方案--------------------
换一台服务器还原试试看
------解决方案--------------------
帮你顶一下