FIX: Cursor Created on Linked Server That Requests Meta-Data May Cause Handled Access Violation (302477)



The information in this article applies to:

  • Microsoft SQL Server 2000 (all editions)

This article was previously published under Q302477
BUG #: 354284 (SHILOH_BUGS)
BUG #: 354764 (SHILOH_BUGS)

SYMPTOMS

If a cursor is created on a system stored procedure that returns schema information from a remote server, a handled access violation may occur in the XdesRMReadOnly::Init function causing only that client's connection to SQL Server to be terminated.

RESOLUTION

To resolve this problem, obtain the latest service pack for Microsoft SQL Server 2000. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:

290211 INF: How to Obtain the Latest SQL Server 2000 Service Pack

Hotfix

NOTE: The following hotfix was created prior to Microsoft SQL Server 2000 Service Pack 2.

The English version of this fix should have the following file attributes or later:
   File name    Platform
   -----------------------------------------------------------
   s80303i.exe  x86 - SQL Server 2000 original release fix
   s80426i.exe  x86 - SQL Server Service Pack 1 fix
				
NOTE: Due to file dependencies, the most recent hotfix or feature that contains the above files may also contain additional files.

WORKAROUND

Do not attempt to create cursors on the system stored procedures listed in the "More Information" section.

STATUS

Microsoft has confirmed that this is a problem in SQL Server 2000. This problem was first corrected in Microsoft SQL Server 2000 Service Pack 2.

MORE INFORMATION

This problem can occur when the cursor is created on the following system stored procedures:
  • sp_table_privileges_ex
  • sp_column_privileges_ex
  • sp_tables_ex
  • sp_columns_ex
  • sp_primarykeys
  • sp_foreignkeys
  • sp_indexes
  • sp_catalogs
With the hotfix applied, SQL Server now returns the following error messages:
Server: Msg 16955, Level 16, State 2, Line 0
Could not create an acceptable cursor.
Server: Msg 16945, Level 16, State 1, Procedure sp_cursoropen, Line 57
The cursor was not declared.
Here are the first 13 functions from the short stack dump reported in the SQL Server error log file from the original released version of SQL Server 2000 (8.00.194):
004084FC Module(sqlservr+000084FC) (XdesRMReadOnly::Init(class DBTABLE *,class LockSpaceId,class XactDesc const *)+00000027)
004082C9 Module(sqlservr+000082C9) (ReadOnlyXactImp::GetXdes(class DBTABLE *)+00000137)
00405378 Module(sqlservr+00005378) (AutoSimpleXact::GetXdes(class DBTABLE *)+0000000C)
00405398 Module(sqlservr+00005398) (AutoSystemXact::GetXdes(unsigned short)+0000001C)
004204D9 Module(sqlservr+000204D9) (CSysScan::OpenScan(unsigned short,long,class XDES *,enum ESysScanMode)+00000150)
00420982 Module(sqlservr+00020982) (CSysScan::StartScan(unsigned short,long,short,int,class XDES *,enum ESysScanMode,int)+000000A3)
0045A2F8 Module(sqlservr+0005A2F8) (CColumnScan::FStartScan(struct OBJID const &,class XDES *,enum ESysScanMode)+000000F5)
005B1F87 Module(sqlservr+001B1F87) (CMetaBaseTable::Init(class IMemObj *,class CAlgTable *,unsigned long,unsigned short,int,class CMetaBaseTable const *,class CBrowseMode *,unsigned long)+0000028A)
005B454B Module(sqlservr+001B454B) (CMetaSelect::SetUpTables(class CAlgStmt *,unsigned short *,unsigned short *,int,class CBrowseMode *)+000001C0)
005C3798 Module(sqlservr+001C3798) (CMetaCursor::SetUpTables(class CAlgStmt *,unsigned short *,unsigned short *,int,class CBrowseMode *)+0000001A)
005B40FE Module(sqlservr+001B40FE) (CMetaSelect::Init(class CAlgStmt *,int,class CBrowseMode *)+0000029C)
005C32AB Module(sqlservr+001C32AB) (CMetaCursor::Init(class CAlgStmt *,enum CRS::ScrollOption)+00000446)
005B75CF Module(sqlservr+001B75CF) (CCursorDeclareStmt::Init(class CAlgStmt *,class CCompPlan *)+00000158)
				

Modification Type:MajorLast Reviewed:10/9/2003
Keywords:kbBug kbfix kbSQLServ2000preSP2Fix KB302477