Quite a while ago I got some usefull suggestions on what to do with errors like this:
COP1_DS: database1 DBCC has Errors'
10:16:50 ===================== DBCC CHECKALLOC(database1) ====================
10:40:30 Sybase message 2525 , Severity 16 , state 1
Server ` COP1_DS '
Table Corrupt: Object id wrong; tables: alloc page 1330432
10:40:30 extent id=1330608 l page#=1330613 objid in ext=699149536 (name =
10:40:30 header1) objid in page=5 (name = sysprocedures) objid in
10:40:30 sysindexes=699149536 (name = header1)
10:53:13 ===================== DBCC TABLEALLOC(syslogs) ====================
10:53:13 =================== DBCC CHECKCATALOG(database1) ==================
10:53:57 ===================== DBCC CHECKDB(database1) =====================
11:35:29 Sybase message 605 , Severity 16 , state 1
Server ` COP1_DS '
An attempt was made to fetch logical page '1330613' in database
11:35:29 'database1' from cache 'default data cache'. Page belongs to object
11:35:29 with id '5', not to object 'header1'.
No fix so far has worked. BCP fails when it reaches that page.
I've executed a dbcc page command to get the information and its right, the objid is wrong:
1> dbcc page(11,1330613,2,0,1)
Page read from disk.
Buffer header for buffer 0x2F008800 (Mass head)
page=0x2F009000 bdnew=0x00000000 bdold=0x00000000 bhash=0x00000000
bmass_next=0x00000000 bmass_prev=0x00000000 bvirtpg=320097717 bdbid=11
bmass_head=0x2F008800 bmass_tail=0x2F008800 bcache_desc=0x203C0350
Mass bkeep=0 Mass bpawaited=0 Mass btripsleft=0 Mass btripsleft_orig=0
bmass_size=2048 (2K pool) bunref_cnt=0
bmass_stat=0x0800 (0x00000800 (MASS_NOTHASHED))
Buffer blpageno=1330613 bpg_size=2k Mass blpageno=1330613 (Buffer slot #: 0
bxls_pin=0x00000000 bxls_next=0x00000000 bspid=0
bxls_flushseq=0 bxls_pinseq=0 bcurrxdes=0x00000000
Latch and the wait queue:
Latch (address: 0x2F008820)
latchmode: 0x0 (FREE_LATCH)
latchwaitq: 0x00000000 latchwaitqt: 0x00000000
The problem is that this corruption crept into the system and its in all of the backups. If I had a clean backup even a month or so old I'd say suck it up and go to it. However I can't get a clean backup.
If I could just toggle that objid I think it would make all my problems go away.
As I can see, the error is on sysprocedures (objid 5) table which makes the rescue action little more complicated. In such case I'm thinking about following ways:
1) In case of sysprocedures, the best way probably will be to bcp all the data out, create new database, create all the structures and bcp data back.
2) Or you can drop all procedures and and recreate them (you must have source codes). But you will get error when dropping the procedure stored on the corrupted page. You will have to truncate the table (and delete related entries in syscolumns and sysqueryplans)
3) As usually you can use dbcc prtipage command to find the last page of the table and then use the dbcc pglink to narrow down the extent of corruption. Then bcp data out in two wawes - data up to corrupted page and then the rest of the data, etc. I don't see much point in doing this in this situation.
Warning: points I mentioned were just ideas (I didn't test it), not exact instructions...