Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 General SQL Server Forums
 Data Corruption Issues
 The msytery of the missing data...

Author  Topic 

vbwizard
Starting Member

12 Posts

Posted - 2008-01-18 : 12:17:00
Hi all,
I found problem with my database and was wondering if anyone here could shed some light on the issue.

I have two tables, Absences and AbsenceDates. The first one records the absence of an employee and the second one records a record for each day of the occurance. I do a full select on the second table and I see primary keys that do NOT exist in the select of the second table. so I dug further and here is what I found.

Select * from Absences (rowcount in Query Analyser is: 20883)
Select * from Absences Order By AbsenceID Desc (rowcount is 443)

The second select contains the data that I am missing in the first select. So, I called a friend and they said to run DBCC CHECKDB and I did. The data came back as follows...


DBCC results for 'Absences'.
There are 21337 rows in 243 pages for object 'Absences'.
CHECKDB found 0 allocation errors and 0 consistency errors in database 'EmployeeAbsenteeism'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.


now if you add up the rows that the other two selects return it comes to 21326, not 21337. I am assuming that the value that DBCC gets is from sysobjects and that some sort of update would need to be run for it be accurate. This I don't care about too much, what I really need is for my main select statement to return ALL of the data, not just what it feels like returning.

My experience is with programming mainly (6 years in .net) and not DBA, so any help would be greatly appreciated.

Cheers,
Brent

**** UPDATE *****
I tried running the following sql
select * Into Absences1 From Absences
the results were: (21337 row(s) affected)

now, I did a select * from Absences1
returned 20883 rows.. :(


****** UPDATE *******
I ended up fixing the following way.
Select * Into AbsencesFix WHERE PrimaryKey < 110577
GO
INSERT INTO AbsencesFix ({allfields}) (Select {allfields} FROM
Absences WHERE PrimaryKey > 110577)
Go
sp_rename 'Absences', 'Absences_oldCorrupt'
GO
sp_rename 'AbsencesFix', 'Absences'
Go

This little script did the trick, I can now select all the data in the table.

Hope the fix that was given to me by another DBA friend of mine can help someone out who has a similar problem.

russell
Pyro-ma-ni-yak

5072 Posts

Posted - 2008-01-18 : 13:39:45
did checkdb return ANY errors?

if all of this is true, and not a typo or mistake, then i'll bulk copy the data out, drop the table, recreate and bulk insert data back in.

i'd also make sure my backups were handy...

by the way, what version and SP level SQL Server?
Go to Top of Page

rmiao
Master Smack Fu Yak Hacker

7266 Posts

Posted - 2008-01-20 : 00:31:52
There maybe a row with bad data, check then in AbsenceID buckets.
Go to Top of Page
   

- Advertisement -