Sappiamo tutti che lavorando con schemi complessi può risultare difficile (e noioso) stabilire le dipendenze tra i vari oggetti di un database.
SQL Server ci offre nativamente la stored procedure di sistema sp_depends per valutare le dipendendenze ma purtroppo si basa sull'interrogazione della tabella di sistema sysdepends che è risaputo non essere molto affidabile.
Ad esempio se creo una stored procedure basata su un oggetto che non è ancora stato definito nel database la sysdepends non verrà popolata:
USE tempdb
GO
/* Definisco la sp1 */
CREATE PROCEDURE dbo.sp1
AS
EXEC dbo.sp2
GO
/* Output:
Cannot add rows to sysdepends for the current stored procedure because it
depends on the missing object 'dbo.sp2'. The stored procedure will still be
created.
*/
/* Definisco la sp2 */
CREATE PROCEDURE dbo.sp2
AS
SELECT 1 AS [Output]
GO
/* Output:
The command(s) completed successfully.
*/
/* vediamo se la sp1 funziona... */
EXEC dbo.sp1
GO
/* Output:
Output
-----------
1
(1 row(s) affected)
*/
/* OK, la sp1 funziona correttamente
** ma vediamo un po' se ha dipendenze
*/
EXEC sp_depends [dbo.sp1]
GO
/* Output:
Object does not reference any object, and no objects reference it.
*/
/* Male, noi sappiamo che sp1 ha come dipendenza sp2.
** Eliminiamo le due procedure e definiamole nell'ordine corretto
*/
DROP PROCEDURE dbo.sp1, dbo.sp2
GO
/* Definisco la sp2 */
CREATE PROCEDURE dbo.sp2
AS
SELECT 1 AS [Output]
GO
/* Definisco la sp1 */
CREATE PROCEDURE dbo.sp1
AS
EXEC dbo.sp2
GO
/* Riverifichiamo le dipendenze */
EXEC sp_depends [dbo.sp1]
GO
/* Output:
In the current database, the specified object references the following:
name
--------
dbo.sp2
*/
/* Pulizia */
DROP PROCEDURE dbo.sp1, dbo.sp2
GO
Giusto pochi minuti fa ho ricevuto una mail da Kathryn Lye di Red Gate Software che mi invita a partecipare al programma Beta del loro nuovo prodotto:
SQL Dependency Viewer.La prima cosa che mi ha colpito è stato l'impatto grafico: veramente d'effetto!
Inoltre un'altra sorpresa è relativa alla presenza di un engine assolutamente autonomo dalla
sysdepends.
Dopo aver installato il software ho subito eseguito il test riportato poco fa (che bastardo che sono
).
Avviando il
SQL Dependency Viewer apparirà la form in
Figura 1 che permette di selezionare l'istanza, la login ed il database che si intenede analizzare:
Figura 1
Premendo il bottone OK il software procederà all'analisi delle dipendenze di tutti gli oggetti (Figura 2):
Figura 2
Al termine del calcolo (operazione estremamente veloce) apparirà un grafo che visualizza le dipendenze (Figura 3):
Figura 3
Come potete notare le dipendenze tra dbo.sp1 e dbo.sp2 risultano corrette anche se la sysdepends non ne tiene traccia!
Vi allego anche il grafo generato per il database Northwind (Figura 4):
Figura 4
Selezionando un oggetto verranno evidenziati in blu gli oggetti che lo referenziano ed in marrone gli oggetti referenziati rendendo estremamente agevole la lettura.
Una funzionalità che secondo me manca è la stampa del grafo con la possibilità di impostare lo stile di impaginazione.
Inoltre sarebbe comodo poter riarrangiare a proprio piacimento la posizione di un oggetto.
Vi ricordo che per eseguire il SQL Dependency Viewer sarà necessaria la presenza del .NET Framework 1.1 e dell'MDAC 2.8.
La Beta è pubblica quindi se lo desiderate potrete contribuire alla valutazione ed alla comunicazione di eventuali bugs a Red Gate inoltrando le vostre segnalazioni al seguente indirizzo di posta: sqlbeta@red-gate.com
Happy Beta