FIX: SELECT * FROM SYSINDEXES su un database che viene aggiornato a SQL Server 2000 potrebbe causare una violazione di accesso

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 295114
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
BUG #: 235696 (SHILOH_bugs)
Sintomi
L'esecuzione di un'istruzione SELECT * FROM SYSINDEXES query di un database che è stato aggiornato da Microsoft SQL Server 7.0 può causare una violazione di accesso. Se si verifica una violazione di accesso, un messaggio simile a verrà visualizzato il seguente nella finestra della query:
ODBC: Msg 0, livello 19, stato 1
SqlDumpExceptionHandler: 51 processo generato irreversibile c0000005 EXCEPTION_ACCESS_VIOLATION. Questo processo verrà terminato.

Server: Messaggio 1203, livello 20, stato 1, riga 1
Elabora ID 51 tentativo di sblocco senza proprietario risorsa KEY: 7: 2: 1 (790023da5d09).
Cause
La lunghezza massima definita per la colonna di chiavi la tabella di sistema sysindexes in SQL Server 2000 è 1088, mentre in SQL Server 7.0, è solo 816. Quando un database viene aggiornato da SQL Server 7.0, è possibile che la lunghezza massima definita per la colonna di chiavi non viene aggiornata. Di conseguenza, quando viene creato un indice colonna cui chiavi supera 816 byte e successivamente viene recuperato l'indice, come in un'istruzione SELECT * FROM SYSINDEXES query, il prelettura buffer viene scritto oltre i byte 816 che sono stati allocati, causando la violazione di accesso.
Risoluzione
Per risolvere il problema, ottenere il service pack più recente per SQL Server 2000. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
290211INF: Come ottenere il Service Pack più recente per SQL Server 2000
Status
Microsoft ha confermato che questo problema riguarda SQL Server 2000. Il problema è stato risolto nel Service Pack 1 per SQL Server 2000.
Informazioni

Procedura per riprodurre il problema

  1. Collegare o ripristinare un database di SQL Server 7.0 in un server SQL Server 2000.
  2. Eseguire le istruzioni SQL seguenti per creare una tabella e un indice, in cui la colonna chiavi supera i byte 816:
    use <dbname>goif object_id('t1') is not null drop table t1gocreate table t1 (c1 int, c2 int, c3 int, c4 int,  c5 int, c6 int, c7 int, c8 int, c9 int, c10 int, c11 int, c12 int, c13 int, c14 int, c15 int, c16 int, c17 int, d1 int, d2 int, d3 int, d4 int,  d5 int, d6 int, d7 int, d8 int, d9 int, d10 int, d11 int, d12 int, d13 int, d14 int, d15 int, d16 int, d17 int )gocreate clustered index i_t1 on t1 (c1, c2, c3, c4, c5, c6,c7, c8, c9, c10, c11, c12, c13, c14, c15, c16)create nonclustered index i_t2 on t1 (d1, d2, d3, d4, d5, d6,d7, d8, d9, d10, d11, d12, d13, d14, d15, d16)go					


  3. Eseguire la query seguente per riprodurre la violazione di accesso:
    SELECT * FROM SYSINDEXES					
Inoltre, il dump dello stack e gli errori seguenti vengono visualizzati nel log degli errori SQL Server:
2001-04-02 17:55:04.09 spid51    Using 'sqlimage.dll' version '4.0.5'Stack Dump being sent to d:\mssql8\MSSQL\log\SQL00011.dmp2001-04-02 17:55:04.09 spid51    Error: 0, Severity: 19, State: 02001-04-02 17:55:04.09 spid51    SqlDumpExceptionHandler: Process 51 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process..********************************************************************************* BEGIN STACK DUMP:*   04/02/01 17:55:04 spid 51**   Exception Address = 004270D7 (CStmtQuery::ErsqExecuteQuery(class CMsqlExecContext *,class CEsComp const *,class CEsComp const *,unsigned long *,int,int)const  + 0000044A Line 0+00000000)*   Exception Code    = c0000005 EXCEPTION_ACCESS_VIOLATION*   Access Violation occurred reading address 00000038* Input Buffer 52 bytes -*  select * from sysindexes  *  *******************************************************************************Short Stack Dump004270D7 Module(sqlservr+000270D7) (CStmtQuery::ErsqExecuteQuery(class CMsqlExecContext *,class CEsComp const *,class CEsComp const *,unsigned long *,int,int)const +0000044A)00441A34 Module(sqlservr+00041A34) (CStmtSelect::XretExecute(class CMsqlExecContext *)const +0000021C)004160DB Module(sqlservr+000160DB) (CMsqlExecContext::ExecuteStmts(class ExecutionContext *)+0000027E)00415765 Module(sqlservr+00015765) (CMsqlExecContext::Execute(class CCompPlan *,class CParamExchange *)+000001C7)00415410 Module(sqlservr+00015410) (CSQLSource::Execute(class CParamExchange *)+00000343)005A683F Module(sqlservr+001A683F) (CStmtPrepQuery::XretExecute(class CMsqlExecContext *)const +00000211)004160DB Module(sqlservr+000160DB) (CMsqlExecContext::ExecuteStmts(class ExecutionContext *)+0000027E)00415765 Module(sqlservr+00015765) (CMsqlExecContext::Execute(class CCompPlan *,class CParamExchange *)+000001C7)00415410 Module(sqlservr+00015410) (CSQLSource::Execute(class CParamExchange *)+00000343)00459A54 Module(sqlservr+00059A54) (language_exec(struct srv_proc *)+000003C8)004175D8 Module(sqlservr+000175D8) (process_commands(struct srv_proc *)+000000E0)410735D0 Module(UMS+000035D0) (ProcessWorkRequests(class UmsWorkQueue *)+00000264)4107382C Module(UMS+0000382C) (ThreadStartRoutine(void *)+000000BC)7800BEA1 Module(MSVCRT+0000BEA1) (_beginthread+000000CE)77E92CA8 Module(KERNEL32+00012CA8) (CreateFileA+0000011B)-------------------------------------------------------------------------------2001-04-02 17:55:04.49 spid51    clean_tables_xact: active sdes for tabid 22001-04-02 17:55:04.49 spid51    Process 51 unlocking unowned resource: KEY: 7:2:1 (790023da5d09)2001-04-02 17:55:04.49 spid51    Error: 1203, Severity: 20, State: 12001-04-02 17:55:04.49 spid51    Process ID 51 attempting to unlock unowned resource KEY: 7:2:1 (790023da5d09)..2001-04-02 17:55:04.50 spid51    clean_tables_xact: active sdes for tabid 22001-04-02 17:55:04.50 spid51    Process 51 unlocking unowned resource: KEY: 7:2:1 (790023da5d09)2001-04-02 17:55:04.50 spid51    Error: 1203, Severity: 20, State: 12001-04-02 17:55:04.50 spid51    Process ID 51 attempting to unlock unowned resource KEY: 7:2:1 (790023da5d09)..2001-04-02 17:55:04.50 spid51    Error: 0, Severity: 19, State: 02001-04-02 17:55:04.50 spid51    language_exec: Process 51 generated an access violation. SQL Server is terminating this process..2001-04-02 17:55:04.50 spid51    clean_tables_xact: active sdes for tabid 22001-04-02 17:55:04.50 spid51    Process 51 unlocking unowned resource: KEY: 7:2:1 (790023da5d09)2001-04-02 17:55:04.50 spid51    Error: 1203, Severity: 20, State: 12001-04-02 17:55:04.50 spid51    Process ID 51 attempting to unlock unowned resource KEY: 7:2:1 (790023da5d09)..				

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 295114 - Ultima revisione: 01/16/2015 22:20:00 - Revisione: 4.2

Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbmt kbbug kbfix kbsqlserv2000sp1fix KB295114 KbMtit
Feedback