Deprecated Features on SQL Server

In informatica, il termine deprecato (deprecated) è usato per indicare che una funzionalità o una caratteristica presente nella versione del software in uso sarà eliminata (non supportata) nelle versioni successive; se ne sconsiglia quindi l’utilizzo in nuovi progetti e si raccomanda di adeguare il software esistente che faccia uso di chiamate a funzionalità deprecate.

Anche sulla piattaforma SQL Server, ad ogni rilascio di versione, alcune funzionalità vengono dichiarate deprecate, Microsoft ne sconsiglia quindi l’utilizzo per i nuovi sviluppi.

L’elenco delle funzionalità e delle caratteristiche deprecate in SQL Server 2008 R2 è disponibile a questo link:

http://technet.microsoft.com/it-it/library/ms143729.aspx 

Com’è possibile individuare le funzionalità deprecate e che al tempo stesso vengono utilizzate dalle applicazioni database che accedono ad una determinata istanza SQL Server ?

Possiamo rispondere a questa domanda utilizzando la DMV sys.dm_os_performance_counters che, come citato nei BOL, restituisce una riga per ogni contatore delle prestazioni gestito dall’istanza SQL Server. Filtrando le righe restituite dalla DMV sys.dm_os_performance_counters per la colonna object_name e chiedendo che nel nome del contatore sia contenuta la stringa “:Deprecated Features”, otteniamo l’elenco delle funzionalità deprecate nella versione di SQL Server in uso.

Sappiamo che la chiamata alla funzione RAISERROR, riportata nel seguente frammento di codice T-SQL è deprecata:

RAISERROR 54321 N’This is an old-style of RAISERROR.’;
go

Eseguiamo ora il codice T-SQL riportato di seguito:

select
  [object_name]
  ,[instance_name]
  ,[cntr_value]
from
  sys.dm_os_performance_counters
where
  ([object_name] like N’%:Deprecated Features%’)
  and instance_name = N’OldStyle RaisError’;
go

RAISERROR 54321 N’This is an old-style of RAISERROR.’;
go

select
  [object_name]
  ,[instance_name]
  ,[cntr_value]
from
  sys.dm_os_performance_counters
where
  ([object_name] like N’%:Deprecated Features%’)
  and instance_name = N’OldStyle RaisError';

L’output è illustrato nelle figure 1 e 2:

Figura 1 – Scheda risultati, contatore SQLServer:Deprecated Features Oldstyle RAISERROR

Figura 2 – Scheda messaggi con visualizzazione dell’errore ID=54321

La DMV sys.dm_os_performance_counters è stata interrogata prima e dopo la chiamata deprecata alla funzione RAISERROR, nella prima query il valore del contatore SQLServer:Deprecated Features Oldstyle RAISERROR è ZERO mentre dopo l’utilizzo (deprecato) di RAISERROR, il valore del contatore è uguale a UNO.

La query riportata nel seguente frammento di codice T-SQL esegue, sull’istanza SQL Server 2008 correntemente connessa, l’estrazione delle funzionalità deprecate con almeno un utilizzo (da riavvio del servizio SQL Server).

select
  [object_name]
  ,[instance_name]
  ,[cntr_value]
from
  sys.dm_os_performance_counters
where
  ([object_name] like N’%:Deprecated Features%’)
  and ([cntr_value] > 0);

L’output è illustrato in Figura 3:

Figura 3 – Funzionalità deprecate, ma utilizzate da un’istanza SQL Server