The sp_diskblock procedure shown below translates a SQL Server virtual disk and block number into the corresponding SQL Server device, database, and logical page number. This information can be useful for gathering information about read or write errors that SQL Server might encounter, such as the Read/Write Error described in Chapter 26, "System Messages."
Because the sp_diskblock procedure collects information from the system tables of the SQL Server on which it is executed, you must execute sp_diskblock on the SQL Server where the read/write error occurred.
sp_diskblock virtual_disk, block_number
sp_diskblock 0, 22 Virtual disk 0, block 22 corresponds to: Logical page 18 in the "master" database (dbid=1) on device "master".
CREATE PROC sp_diskblock @@disk int, @@block int AS DECLARE @@low int, @@dname varchar(30), @@msg varchar(90), @@lpage int, @@dbid int, @@segmap int SELECT @@low = low, @@dname = name FROM master.dbo.sysdevices WHERE low/16777216 = @@disk IF (@@low IS NULL) BEGIN SELECT @@msg = 'Virtual device ' CONVERT(varchar, @@disk) ' does not exist on this server.' PRINT @@msg RETURN (1) END ELSE BEGIN SELECT @@lpage = lstart @@block @@low - vstart, @@dbid = dbid, @@segmap = segmap FROM master.dbo.sysusages WHERE (@@block @@low) >= vstart AND (@@block @@low) <= (vstart size) IF (@@dbid IS NULL) BEGIN SELECT @@msg = 'Block ' CONVERT(varchar, @@block) ' on disk "' @@dname '" is currently not in use for any database.' PRINT @@msg RETURN (1) END ELSE BEGIN SELECT @@msg = "Virtual disk " convert(varchar,@@disk) ", block " convert(varchar,@@block) " corresponds to:" PRINT @@msg SELECT @@msg ='Logical page ' convert(varchar,@@lpage) ' in the "' DB_NAME(@@dbid) '" database (dbid=' convert(varchar(3),@@dbid) ') on device "' @@dname '".' PRINT @@msg END END RETURN (0) go