Se si ha bisogno di spostare un db ms-sqlserver in un'altro server o disco si deve usare 2 stored procedure di sistema chiamate sp_detach_db e sp_attach_db per staccare e attaccare il db. I passi necessari per spostare un db sono i seguenti:
- Detach il database. (Staccare il db)
- Spostare i files del db (.MDF, .LDF) nella nuova locazione
- Attaccare nuovamente il db specificando la nuova locazione dove i files sono stati messi
- Per scollgare un db si usa la stored procedure di sistema sp_detach_db, questa stored può anche aggiornare le statistiche su tutte le tabelle prima del distaccamento del db. La sintassi è la seguente:
sp_detach_db [ @dbname = ] 'dbname' [ , [ @skipchecks = ] 'skipchecks' ]
* [@dbname =] 'dbname' è il nome del database. E' di tipo nvarchar(128), e il suo valore predefinito è NULL.
* [@skipchecks =] 'skipchecks' Il parametro 'skipchecks' indica che possono essere aggiornate le statistiche o meno. Lo 'skipchecks' è un nvarchar(10), il suo valore predefinito è NULL. Se 'skipchecks' è true, non vengono aggiornate le statistiche, in caso contrario le statistiche saranno aggiornate.
Es.: EXEC sp_detach_db 'pubs', 'false'
- Per collegare un db si deve specificare il none e la locazione fisica dei files del db utilizzando la stored procedure si sistema sp_attach_db. La sintassi è la seguente:
sp_attach_db [ @dbname = ] 'dbname', [ @filename1 = ] 'filename_n' [ ,...16 ]
* [@dbname =] 'dbname' è il nome del db. dbname è un nvarchar(128), il suo valore predefinito è NULL.
* [@filename1 =] 'filename_n' è il nome del file del db. filename_n è un nvarchar(260), il suo valore predefinito è NULL. Possono essere specificati fino a 16 file.
Questo esempio mostra come attaccare il db pubs costituito da 2 files (pubs.mdf e pubs_log.ldf) presente in C:\MSSQL\Data
EXEC sp_attach_db @dbname = 'pubs',
@filename1 = 'C:\MSSQL\Data\pubs.mdf',
@filename2 = 'C:\MSSQL\Data\pubs_log.ldf'
A volte i files di database possono essere solo uno, in questi casi la stored di sistema da usare è sp_attach_single_file_db che funziona come la precedente con la differenza che si specifica un solo file in questo caso.
Possibili problemi con i vecchi utenti.
Quando si sposta un db su un altro server dove si trovano utenti diversi da quelli presenti sul vecchio server, gli utenti abilitati all'uso del db collegato sono ovviamente persi. Per esempio, se si sposta il db Sales dal server di produzione al server di test e l'utente Alex esisteva nel db Sales, sarà necessario ricollegarlo manualmente per avere un appropriato login nell'ambiente di test.
E' possibile usare la stored procedure di sistema sp_change_users_login per collegare un utente specifico al db corrente affinchè l'utente possa avere un corretto login.
L'esempio seguente mostra come l'utente Alex può essere collegato al db corrente:
EXEC sp_change_users_login 'Update_One', 'Alex', 'Alex'
E il gioco è fatto.