Site icon Ryadel

SQL Server - Come eseguire una query ALTER COLUMN evitando un Command Timeout - T-SQL

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.

 

Exit mobile version