Come mappare unità di rete su SQL Server

Mappare un’unità di rete su SQL Server è un’operazione utile per accedere a file o cartelle condivise da altri computer o server nella stessa rete. In questo modo si può sfruttare la potenza e la flessibilità di SQL Server per gestire e manipolare i dati presenti in queste risorse esterne. In altre parole avremmo la possibilità di posizionare i file del database su unità di rete (ad esempio un NAS)

Per mappare un’unità di rete su SQL Server, ci sono due metodi principali: usare il comando xp_cmdshell o creare una stored procedure con il codice Transact-SQL appropriato.

Metodo 1: usare il comando xp_cmdshell

Il comando xp_cmdshell è una funzione integrata di SQL Server che consente di eseguire comandi del sistema operativo direttamente da una query SQL, tuttavia, per usare questo comando, bisogna avere i permessi necessari e abilitare l’opzione xp_cmdshell nella configurazione di SQL Server.

Per abilitare l’opzione xp_cmdshell, si può usare il seguente codice:

EXEC sp_configure ‘show advanced options’, 1
RECONFIGURE
EXEC sp_configure ‘xp_cmdshell’, 1
RECONFIGURE

Dopo l’esecuzione del comando si dovrebbe ottnere un messaggio simile a questo:

L’impostazione 0 dell’opzione di configurazione ‘show advanced options’ è stata sostituita con 1. Per eseguire l’installazione, utilizzare RECONFIGURE.
L’impostazione 0 dell’opzione di configurazione ‘xp_cmdshell’ è stata sostituita con 1. Per eseguire l’installazione, utilizzare RECONFIGURE.

mappare unità di rete su SQL Server con comando xp_cmdshell

Una volta abilitata l’opzione xp_cmdshell, si può usare il comando NET USE per mappare un’unità di rete su SQL Server. Il comando NET USE ha la seguente sintassi:

NET USE [driveletter:] [\\computername\sharename] [password | *] [/USER:[domainname\]username] [/PERSISTENT:{YES | NO}]
Dove:

– driveletter: è la lettera dell’unità di rete da creare (ad esempio Z:)
– computername: è il nome del computer o del server che condivide la risorsa (ad esempio SERVER01)
– sharename: è il nome della risorsa condivisa (ad esempio una cartella)
– password: è la password per accedere alla risorsa condivisa (se richiesta)
– /USER: è il nome utente per accedere alla risorsa condivisa (se richiesto)
– /PERSISTENT: è l’opzione per rendere permanente o meno la mappatura dell’unità di rete

Per esempio, per mappare un’unità di rete Z: che punta alla cartella condivisa \\SERVER01\DATA, si può usare il seguente codice:

EXEC xp_cmdshell ‘NET USE Z: \\SERVER01\DATA’

Se la mappatura ha avuto successo, si dovrebbe ottenere un messaggio simile a questo:

The command completed successfully.

Se invece si verifica un errore, si dovrebbe ottenere un messaggio simile a questo:

System error 53 has occurred.
The network path was not found.

In questo caso, bisogna verificare che il nome del computer o del server sia corretto, e che la risorsa condivisa sia accessibile e che le credenziali fornite siano valide.

Per verificare che l’unità di rete sia stata mappata correttamente, si può usare il comando DIR per elencare i file e le cartelle presenti nell’unità di rete, per esempio

EXEC xp_cmdshell ‘DIR Z:’

In conclusione, se l’unità di rete è stata mappata correttamente, si dovrebbe ottenere un output simile a questo:

Volume in drive Z is DATA
Volume Serial Number is 1234-5678

Directory of Z:\

01/01/2020 12:00 <DIR> .
01/01/2020 12:00 <DIR> ..

La prossima volta vi mostrerò come mappare le unità di rete tramite una stored procedure, dopodiché come fare per rimapparle auomaticamente al riavvio di SQL Server