Errore di esecuzione in processo / stored procedure

martedì 16 gennaio 2007 - 11.35

Pokino Profilo | Junior Member

ciao, da qualche giorno sto combattendo con un problema di cui non trovo aiuto in rete.. speriamo in .nethell

ho un processo che gira su sql server 2005 e va a costruire sullo stesso server delle tabelle a partire da altre tabelle contenute in un server diverso sql 2000 linkato al primo

ho schedulato il processo che lancia in sequenza 8 stored procedures e per i primi 2 giorni tutto ok, poi ha iniziato ad avere problemi sulla prima sp

il messaggio di errore se lancio la procedura a manina è:

Messaggio 7359, livello 16, stato 1, procedura sp_crea_t_anagrafiche, riga 20
Il provider OLE DB "SQLNCLI" per il server collegato "pinco" ha segnalato una modifica nella versione dello schema tra la fase di compilazione ("63463302107404285") e quella di esecuzione ("63335022510249981") per la tabella ""db"."dbo"."carriere"".

il bello è che se la rilancio una seconda volta la procedura va a buon fine e schedulando il processo di seguito non da problemi

cosa può essere?

lbenaglia Profilo | Guru

>il messaggio di errore se lancio la procedura a manina è:
>
>Messaggio 7359, livello 16, stato 1, procedura sp_crea_t_anagrafiche,
>riga 20
>Il provider OLE DB "SQLNCLI" per il server collegato "pinco"
>ha segnalato una modifica nella versione dello schema tra la
>fase di compilazione ("63463302107404285") e quella di esecuzione
>("63335022510249981") per la tabella ""db"."dbo"."carriere"".

Molto probabilmente il piano di esecuzione creato in fase di compilazione della stored procedure, si basa su uno schema che al momento dell'esecuzione della sp è cambiato.
Purtroppo non idea di cosa combina questa sp, ma una soluzione (brutta) potrebbe essere quella di ricompilare la stored procedure ad ogni esecuzione.
Per fare questo puoi adottare due strade:

- Eseguire la stored procedure specificando la clausola WITH RECOMPILE:
EXEC dbo.myProcedure WITH RECOMPILE;

- Modificare la stored procedure aggiungendo la clausola WITH RECOMPILE:
ALTER PROCEDURE dbo.myProcedure WITH RECOMPILE AS ...

Devo dire che entrambe le soluzioni non mi piacciono per niente, ma senza ulteriori informazioni, non saprei suggerirti altro

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Pokino Profilo | Junior Member

quello che fa la sp è mettere insieme dati di viste diverse eseguite sul db linkato, che nn dipende direttamente da me ma ad una esplorazione non presenta alterazioni..

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

inoltre ho scoperto che lo stesso identico processo sulla mia macchina di sviluppo gira ed è collegato allo stesso server linkato, inoltre il db di destinazione è identico in quanto fatto con un backup dello sviluppo

lbenaglia Profilo | Guru

>quello che fa la sp è mettere insieme dati di viste diverse eseguite
>sul db linkato, che nn dipende direttamente da me ma ad una esplorazione
>non presenta alterazioni..

Le alterazioni le fa eccome!
Il codice che hai postato fa una SELECT...INTO, quindi la tabella di destinazione viede droppata da qualche parte (ecco la modifica dello schema!).
Inoltre spiegami che senso ha eseguire una SELECT DISTINCT TOP (100) PERCENT....
Per quale motivo elimini e ricrei la tabella ad ogni esecuzione?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Pokino Profilo | Junior Member

altera i dati certo ma nn capisco perchè l'esecuzione diretta non da nessun problema..

il select distint 100 ecc. viene in automatico da SQL Server Management Studio 2005

e elimino e ricreo la tabella perchè i dati vengono rinnovati ogni giorno

lbenaglia Profilo | Guru

>altera i dati certo ma nn capisco perchè l'esecuzione diretta
>non da nessun problema..
Dovresti preparare un esempio che riproduca il problema, altrimenti la vedo dura riuscire a darti una mano.

>il select distint 100 ecc. viene in automatico da SQL Server
>Management Studio 2005
Non è un motivo valido per utilizzare i comandi SQL generati da SSMS
Quel SELECT DISTINCT TOP (100) PERCENT è assolutamente inutile...

>e elimino e ricreo la tabella perchè i dati vengono rinnovati
>ogni giorno
Per quale motivo elimini la tabella?! Puoi svuotarla in modo estremamente efficiente utilizzando i comando T-SQL TRUNCATE TABLE <nome tabella>.
In questo modo la clausola INTO della SELECT risulta superflua e puoi popolare la tabella utilizzando la sintassi:

INSERT INTO <nome tabella> SELECT * FROM...

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Pokino Profilo | Junior Member

nn so proprio come fare per questo esempio
per cercare di rendere più simile possibile i due casi, per l'ultima prova ho modificato l'utente utilizzato dal SQL Server Agent della macchina che da problemi in 'Sistema locale' ma l'errore è sempre

Messaggio
Eseguito come utente: NT AUTHORITY\SYSTEM. Si è verificato un errore non specificato in SQL Server. La connessione potrebbe essere stata interrotta dal server. [SQLSTATE HY000] (errore 0). NOTA: sono stati eseguiti 2 tentativi, come richiesto, ma il passaggio ha avuto esito negativo. Passaggio non riuscito.

--

per le modifiche sql faccio sicuramente delle prove, ti ringrazio per le dritte, come avrai capito mi barcameno con le istruzioni standard ma mi fermo ad un certo punto..

mi puzza un po' che tutto sia causato da qualcosa sui permessi, che ne dici?

Pokino Profilo | Junior Member

porca miseria, ho inserito nel primo passaggio la clausola 'with recompile' ma nn cambia nulla..

il primo passaggio della giornata si pianta:
Eseguito come utente: NT AUTHORITY\SYSTEM. Si è verificato un errore non specificato in SQL Server. La connessione potrebbe essere stata interrotta dal server. [SQLSTATE HY000] (errore 0). NOTA: sono stati eseguiti 2 tentativi, come richiesto, ma il passaggio ha avuto esito negativo. Passaggio non riuscito.

se lo rischedulo da il messaggio di errore al tentativo 1 sul primo passaggio:

Eseguito come utente: NT AUTHORITY\SYSTEM. Il provider OLE DB "SQLNCLI" per il server collegato "lazzaro" ha segnalato una modifica nella versione dello schema tra la fase di compilazione ("63382878390097917") e quella di esecuzione ("63389847313094653") per la tabella ""rear_csa"."dbo"."real_carriere"". [SQLSTATE 42000] (errore 7359)

poi riprova e da il messaggio:

Eseguito come utente: NT AUTHORITY\SYSTEM. Il provider OLE DB "SQLNCLI" per il server collegato "lazzaro" ha segnalato una modifica nella versione dello schema tra la fase di compilazione ("63382878390097917") e quella di esecuzione ("63389847313094653") per la tabella ""rear_csa"."dbo"."real_carriere"". [SQLSTATE 42000] (errore 7359). Passaggio riuscito.

gli altri passaggi non danno problemi

schedulandolo nuovamente la terza volta tutto ok..

Eseguito come utente: NT AUTHORITY\SYSTEM. Passaggio riuscito.

Perchè? Sono disperao

Pokino Profilo | Junior Member

ultimo aggiornamento, nn molto felice

questo l'ho estratto dal log di SQL Server:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

che fo?

lbenaglia Profilo | Guru

>ultimo aggiornamento, nn molto felice
>
>questo l'ho estratto dal log di SQL Server:
Hai mandato in crash l'istanza a causa di una eccezione.

>che fo?
Noi ci possiamo fare ben poco, se vuoi contatta il PSS di Microsoft:
http://www.microsoft.com/italy/info/contattaci.mspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5