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.
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