Fr risiedere i dati di un DB SQL su un disco esterno

mercoledì 20 agosto 2008 - 12.00

paovanm Profilo | Junior Member

Ciao a tutti,

E' possibile far risiedere i dati (*.mdf e *.ldf) di un DB SQL su un disco esterno invece che nel folder 'C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Data' del PC su cui è installato SQL server?

Grazie in anticipo.
Michela

lbenaglia Profilo | Guru

>E' possibile far risiedere i dati (*.mdf e *.ldf) di un DB SQL
>su un disco esterno invece che nel folder 'C:\Programmi\Microsoft
>SQL Server\MSSQL.1\MSSQL\Data' del PC su cui è installato SQL
>server?

Ciao Michela,

il Master Data File ed il Transaction Log possono risiedere su qualsiasi volume visibile al sistema operativo.
Per spostarli fisicamente puoi procedere al detach del db (sp_detach_db), alla copia sul nuovo volume ed eseguirne l'attach (CREATE DATABASE...FOR ATTACH) oppure eseguire un full backup (BACKUP DATABASE) seguito dal relativo restore avendo cura di specificare la clausola WITH MOVE per spostare fisicamente i files e REPLACE per sostuire il db corrente con il backup.

Attenzione: quello che tu chiami "disco esterno" deve essere SEMPRE visibile al sistema fintanto che il servizio MSSQLServer è avviato se non vuoi che il db venga corrotto, quindi evita accuratamente dischi esterni o chiavette USB.

>Grazie in anticipo.
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

paovanm Profilo | Junior Member

Per "Sempre visibile al sistema operativo" intendi che la periferica (su cui vorrei far risiedere il DB) sia sempre connessa al pc base che ha installato SQL server?

Il PC "server" (a cui miriferivo prima) che ha installato SQL server è un pc connesso ad una rete aziendale (che da spesso svariati problemi), e quindi per aggiungere un livello di protezione al database si pensava appunto allo spostamento dei dati su una periferica esterna. Tu quindi me lo sconsiglieresti...

Cosa intendi per database corrotto?

Grazie ancora
Michela


lbenaglia Profilo | Guru

>Il PC "server" (a cui miriferivo prima) che ha installato SQL
>server è un pc connesso ad una rete aziendale (che da spesso
>svariati problemi), e quindi per aggiungere un livello di protezione
>al database si pensava appunto allo spostamento dei dati su una
>periferica esterna. Tu quindi me lo sconsiglieresti...
Che genere di problemi?
Se con "periferica esterna" intendi un volume iSCSI montato su un NAS oppure una SAN in fibra, vai tranquilla, se intendi un "giocattolo USB" allora te lo sconsiglio vivamente.

>Cosa intendi per database corrotto?
Con database corrotto intendo un db con errori fisici e/o logici che possono avere diverse cause come guasti HW al controller o al sottosistema dischi oppure errori logici determinati ad esempio dall'aver sfilato la chiavetta USB mentre il db era ancora aperto
Se gli errori coinvolgono indici NCL a volte è sufficiente ricostruirli per risolvere l'errore, ma se coinvolgono i dati (o indici CL) molto spesso occorre ripristinare il backup più recente, con la conseguente perdita delle transazioni successive al backup.

>Grazie ancora
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

paovanm Profilo | Junior Member

Ciao,
non sono ancora riuscito a spostare il DB su un disco esterno in rete, io utilizzo il seguente codice dopo aver effettuato il BK del DB:

restore database VM_dati_banchi_Development FROM DISK= 'C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\VM_dati_banchi_Development.bak'
with
move 'VM_dati_banchi_Development' TO '\\192.168.168.168\database\VM_dati_banchi_Development.mdf',
move 'VM_dati_banchi_Development_log' To '\\192.168.168.168\database\VM_dati_banchi_Development_log.ldf'

è corretto? è possibile farlo?

Grazie

lbenaglia Profilo | Guru

>restore database VM_dati_banchi_Development FROM DISK= 'C:\Programmi\Microsoft
>SQL Server\MSSQL.1\MSSQL\Backup\VM_dati_banchi_Development.bak'
>with
>move 'VM_dati_banchi_Development' TO '\\192.168.168.168\database\VM_dati_banchi_Development.mdf',
>move 'VM_dati_banchi_Development_log' To '\\192.168.168.168\database\VM_dati_banchi_Development_log.ldf'
>
>è corretto? è possibile farlo?
No, a meno di specificare un apposito trace flag ma dato che la soluzione non è supportata da Microsoft evito di segnalartela
I db SQL Server devono risiedere su una risorsa locale all'istanza, eventualmente un volume iSCSI o Fibre Channel.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5