Trasferimento DB

mercoledì 17 gennaio 2007 - 21.55

squilibrio Profilo | Expert

Ciao a tutti, vorrei creare una copia esatta di un DB

io ho provato a seguire questa strada:

ho creato il backup completo del mio

ho creato un nuovo DB

a questo punto vorrei fare il restore del backup nel nuovo DB

ho provato a scegliere restore, indicando di sovrascrivere tutta la struttura ma credo che sia un problema (forse nei files) ... esiste un modo, non troppo complicato, per ottenere questo risultato?

Grazie

lbenaglia Profilo | Guru

>Ciao a tutti, vorrei creare una copia esatta di un DB
>
>io ho provato a seguire questa strada:
>
>ho creato il backup completo del mio
OK

>ho creato un nuovo DB
Operazione inutile. Per ripristinare il database non è necessario crearne uno vuoto preventivamente, è sufficiente ricorrere al comando T-SQL RESTORE DATABASE.

>a questo punto vorrei fare il restore del backup nel nuovo DB
Dove? Se lo fai sulla stessa istanza andrai a sovrascrivere quello appena backuppato, se lo fai su una istanza differente (locale o remota non importa), devi verificare che il percorso fisico dei file che costituiscono il DB esista sul server, altrimenti dovrai ricorrere alla clausola WITH MOVE.

>ho provato a scegliere restore, indicando di sovrascrivere tutta
>la struttura ma credo che sia un problema (forse nei files) ...
>esiste un modo, non troppo complicato, per ottenere questo risultato?
Utilizzare il comando T-SQL RESTORE DATABASE

Ti propongo un esempio che effettua il backup del database Northwind e lo ripristina sulla stessa istanza con un nuovo nome, ottenendo di fatto una duplicazione del database:

BACKUP DATABASE Northwind TO DISK = 'C:\Nwind.bak'; GO /* Output: Processed 376 pages for database 'Northwind', file 'Northwind' on file 2. Processed 1 pages for database 'Northwind', file 'Northwind_log' on file 2. BACKUP DATABASE successfully processed 377 pages in 0.134 seconds (22.994 MB/sec). */

Ora effettuo il restore sulla medesima istanza cambiando il nome al database
ed il percorso ai suoi files:

RESTORE DATABASE Northwind2 FROM DISK = 'C:\Nwind.bak' WITH MOVE 'Northwind' TO 'C:\northwnd.mdf', MOVE 'Northwind_log' TO 'C:\northwnd.ldf'; GO /* Output: Processed 376 pages for database 'Northwind2', file 'Northwind' on file 1. Processed 1 pages for database 'Northwind2', file 'Northwind_log' on file 1. RESTORE DATABASE successfully processed 377 pages in 0.461 seconds (6.683 MB/sec). */

Infine elimino il database 'Northwind2':

DROP DATABASE Northwind2; GO /* Output: Deleting database file 'C:\northwnd.ldf'. Deleting database file 'C:\northwnd.mdf'. */

Per maggiori informazioni leggi il seguente paragrafo sui Books Online:

"How to restore files to a new location (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/aa176742.aspx

>Grazie
Prego.

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

squilibrio Profilo | Expert

Grazie per la risposta

Scusa ma non mi è chiara una cosa, io voglio mantenere i due DB, quello vecchio e quello nuovo creato...

RESTORE DATABASE NuovoDB
FROM DISK = 'C:\Nwind.bak' x\1
WITH
MOVE 'Northwind' TO 'C:\northwnd.mdf',
MOVE 'Northwind_log' TO 'C:\northwnd.ldf';
GO

In questo modo "muovo" i file DB e log del vecchio DB su 2 nuovi file

due info:

Per correttezza dovrei crearli in C:\Programmi\SQLServer.... ecc... non in C:\?? Giusto?

Ma il comando "move" mantiene inalterato il mio DB originale?? Non è che il "move" sposta i files?

Grazie ancora

lbenaglia Profilo | Guru

>Scusa ma non mi è chiara una cosa, io voglio mantenere i due
>DB, quello vecchio e quello nuovo creato...
>
>RESTORE DATABASE NuovoDB
>FROM DISK = 'C:\Nwind.bak' x\1

Cos'è x\1?!

>WITH
> MOVE 'Northwind' TO 'C:\northwnd.mdf',
> MOVE 'Northwind_log' TO 'C:\northwnd.ldf';
>GO
>
>In questo modo "muovo" i file DB e log del vecchio DB su 2 nuovi
>file

Diciamo che semplicemente copi i file fisici che costituiscono il database di origine in un path differente (ovviamente ), ottenendo in sostanza un nuovo database (NuovoDB) che è una esatta copia di quello di origine.

>Per correttezza dovrei crearli in C:\Programmi\SQLServer....
>ecc... non in C:\?? Giusto?
I file fisici li puoi creare dove credi, ma se esegui l'operazione di restore che ti ho suggerito non puoi lasciarli nel path d'origine dato che i file che costituiscono il db (master data file .mdf e transaction log .ldf) hanno lo stesso nome logico e fisico di quelli del database di origine.

>Ma il comando "move" mantiene inalterato il mio DB originale??
Certo, cambiando il nome del db specificato nel comando RESTORE, stai facendo una copia del db originario.

>Non è che il "move" sposta i files?
NO!

>Grazie ancora
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