This section contains writeups for sysindexes Manager errors.
21
Index row for object %ld (index id %d) was not found in database %d.
Each database has a sysindexes table. The sysindexes Manager maintains and provides access to the rows of the sysindexes table. It handles inserting and deleting of sysindexes rows and manages the abort and recovery of individual operations performed on the rows. It also provides read/write access to the database information structure.
sysindexes contains one row for each:
Clustered index
Nonclustered index
Table that has no clustered index
Table that contains text or image columns
Error 8402 occurs when one of these rows is expected but not found for the object specified in the error message.
Determine the name of the database mentioned in the error message:
1> use master 2> go
1> select db_name(database_ID) 2> go
where database_ID is the database ID in the error message.
Search the sysindexes table for the object displayed in the error message:
1> use database_name 2> go
1> select * from sysindexes 2> where id = object_ID 3> go
where object_ID is the object ID in the error message.
If the object is found in sysindexes, continue with step 4.
If the object is not found in sysindexes, call Sybase Technical Support.
If the object specified in the error message is not a system table (a system table's object ID is less than 100), continue with step 5.
If the object specified in the error message is a system table, refer to “How to Fix a Corrupted Index on System Tables” in the Encyclopedia of Tasks chapter for instructions on how to repair the system table index. Then go to step 7.
Drop the index for the object specified in the error message.
Re-create the index. This clears the corruption in most cases.
Run dbcc checktable on the table to verify that the corruption is gone. If corruption still exists, call Sybase Technical Support.
Refer to drop index and create index in the Reference Manual for information about dropping and re-creating indexes.
All versions
21
Could not find index descriptor for objid %d, indid %d in dbid %d.
Each index accessed in Adaptive Server requires a descriptor which is a “handle” for referencing the index. When the descriptor is no longer needed (for example, the query completes or the index is dropped), the server frees up the descriptor so that it can be assigned to another object as needed.
Error 8419 prevents a stored procedure or other compiled object from being recompiled after an index or a table column is dropped; consequently the server attempts to process the query via a stale plan, using the missing index or column. When the descriptor containing sysindexes information for the index is found to be missing from cache, Error 8419 is raised. Here is a typical scenario:
create table t1 create procedure p1 as insert into t1 values(...) go begin transaction go create clustered index on t1(..) execute procedure p1 (query plan uses the new index) rollback transaction (index dropped) go execute procedure p1 (Error 8419 raised as the server attempts to use the old plan)
Error 8419 is due to an Adaptive Server problem and is raised with the following states:
State |
Meaning |
---|---|
1 |
Index descriptor row not found in cache when attempting to make a copy of the table’s first index structure. |
2 |
Index descriptor row not found in cache when attempting to copy the next index structure for the table. |
3 |
Could not retrieve a pointer to the first index descriptor row for the table in the cache. |
4 |
Could not retrieve a pointer to the next index for the table in the cache as expected. |
5 |
Could not retrieve a specific field within an index descriptor row using a pointer to the table’s first index row. |
6 |
Could not retrieve a specific field within an index descriptor row using a pointer to the table’s next index row. |
7 |
Could not retrieve a pointer to an index descriptor row in the cache after dropping the index. |
8 |
Could not retrieve a pointer to an index descriptor row in the cache after dropping a column of the table. |
9 |
Could not retrieve a pointer to an index descriptor row in the cache while accessing the root page of the index. This state is raised only by diagserver. |
10 |
Could not retrieve a pointer to an index descriptor row in the cache while releasing locks associated with the row. |
11 |
Could not find the start of the index descriptor chain. |
12 |
Could not update a specific field within an index descriptor row using a pointer to the index row. |
Call Sybase Technical Support to upgrade to a version in which the problem is resolved.
Have the following information ready when you call Sybase Technical Support:
Adaptive Server version and SWR rollup level
Server error log
Text of the query which causes the error.
All versions