SQL Server – Come eseguire una query ALTER COLUMN evitando un Command Timeout – T-SQL Come eseguire una query ALTER COLUMN per modificare il tipo o il formato di una colonna SQL Server senza incorrere in un Command Timeout e senza dover riavviare il DB Server

SQL Server - Recuperare il Product Key da una installazione esistente

Se vi siete imbattuti in questo articolo è probabile che siate alle prese con la necessità di modificare il tipo o il formato di una colonna interna a una tabella SQL Server con una query di tipo ALTER COMMAND, che però vi restituisce un Command Timeout. In questo articolo illustrerò un workaround che consente di farlo senza dover riavviare il DB Server utilizzando la Stored Procedure predefinita SP_CONFIGURE.

Il problema

Prendiamo ad esempio la seguente tabella SQL Attachments, utilizzata per gestire dei file allegati di grandi dimensioni:

Immaginiamo ora di voler modificare la colonna Description, portandola da nvarchar(250)nvarchar(MAX). Inutile dire che il database si trova in produzione, quindi non abbiamo la possibilità di arrestarlo o riavviarlo: al tempo stesso i file, ovvero record contenuti nella tabella, sono centinaia di migliaia. Questo significa che, provando a eseguire una ALTER query come la seguente:

Ci verrà certamente restituito un Connection Timeout.

Cosa possiamo fare?

La soluzione

Il miglior workaround che ho trovato per gestire situazioni di questo tipo è quello di utilizzare  SP_CONFIGURE, una delle tante Stored Procedure già presenti all’interno della dotazione standard di SQL Server. Questa procedura può essere utilizzata per visualizzare, ed eventualmente anche per modificare, le principali opzioni di configurazione del server. Nello specifico, l’impostazione che vogliamo modificare è “remote query timeout”, che per impostazione predefinita è impostata a 600 (secondi).

Il piano è dunque: portare questa impostazione a zero, eseguire la nostra query (senza più rischiare alcun timeout) e poi riportarla a 600 immediatamente dopo. Ecco come è possibile farlo:

Ovviamente, prima di eseguire questo elenco di comandi, è opportuno sincerarsi che l’impostazione configurata sul server SQL sia effettivamente valorizzata a 600. Per far questo possiamo eseguire SP_CONFIGURE in modalità display, ottenendo un elenco di tutte le impostazioni attualmente configurate comprensive del valore attualmente impostato:

Ovviamente, qualora il valore del parametro “remote query timeout” risulti diverso da 600, sarà opportuno modificare il penultimo comando presente nell’elenco di query riportato in precedenza, così da assicurare il ripristino del valore originario.

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.