Why would I get a message "Retrying row fetch:rowoffset entry n out of range (pg% obj%, db %)" from SQL Server?

A. You may also see :- "spid % Getrow: rowoffset entry %(%) out of range (pg% obj%, db %)"

This is when SQL Server accesses a row on a page it checks the page header to see where on the page the row is. When this message appears, the page header looks corrupt. SQL Server will transparently retry the read a number of times - if the page is in cache already it will re-read from disk. 

If the page header looks ok on retry then SQL will carry on - otherwise you will get other SQL messages indicating a permanent corruption.

Causes :-

1. Using NOLOCK on select statements. This could cause you to access a page whilst it is being updated/split and this error would occur. On retry the page should be fine.

2. Buffer corruption. Something has stomped over the page in memory - on re-read from disk it looks fine.

3. Duff server memory chip(s). You'll normally see lots of other abnormal behaviour in this situation.

4. Actual corrupt page. Let's hope you have a backup.

Hide comments


  • Allowed HTML tags: <em> <strong> <blockquote> <br> <p>

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.