Principale utente con più risposte
Ripristino di un database su un Linked Server

Domanda
-
Salve a tutti !
La mia domanda è questa :
Sto utilizzando uno script SQL in cui efftettuo una operazione di Ripristino di un Database del tipo :
RESTORE DATABASE [NOMEDB] FROM DISK = N'D:\ARCHIVI SQL SERVER BAK\NOMEDB.BAK' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
Questo script viene lanciato da un file di installazione sotto forma di parametro per l'utility SqlCmd di SQL Server 2008 R2.
Vorrei sapere se lanciando il setup su un computer server in cui sono installate più istanze di SQL Server, su quale istanza di SQL Server
viene ripristinato il NomeDB.
2 a domanda: supponendo di volere impiegare lo scipt SQL soprastante per una specifica istanza di SQL Server, come devo fare ?????
Grazie in anticipo per ogni risposta!!!
Risposte
-
Quello che volevo dire è che nel momento in cui il nome originale del Database si differenzia dal nome logico che uso in questa istruzione, l'istruzione si interrompe
per come l'ho formulata io; esiste un modo diverso di adoperare l'istruzione RESTORE per ripristinare un database mediante script ?Se sì come ?
L'istruzione si interrompe non tanto perché stai specificando un nuovo nome logico per il db, ma piuttosto perché probabilmente stai andando a sovrascrivere il master data file ed il transaction log di un db già presente.
Se l'intento è quello di eseguire una copia del db con un nuovo nome logico segui i consigli riportati in questo post altrimenti ti invito a spiegare meglio cosa stai cercando di fare :-)
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit- Contrassegnato come risposta AngeloNew venerdì 17 dicembre 2010 18:31
-
Questa è l'istruzione SQL che adopero
RESTORE DATABASE IMPERANA
FROM DISK = 'C:\Programmi\Impera Software\Impera.Server\Archivi\Temp\IMPERANA.BAK'
WITH MOVE 'IMPERANA' TO 'C:\Programmi\Impera Software\Impera.Server\Archivi\Archivi\IMPERANA.mdf',
MOVE 'IMPERANA_log' TO 'C:\Programmi\Impera Software\Impera.Server\Archivi\Archivi\IMPERANA.ldf'
, REPLACE, STATS = 10
GOE questo è l'errore che ottengo
Messaggio 3234, livello 16, stato 2, riga 2
Logical file 'IMPERANA' is not part of database 'IMPERANA'. Use RESTORE FILELISTONLY to list the logical file names.
Messaggio 3013, livello 16, stato 1, riga 2
RESTORE DATABASE is terminating abnormally.Come mi devo comportare???
Come puoi leggere dal messaggio di errore non esiste alcun file logico chiamato IMPERANA. Per conoscere il nome dei file logici contenuti nel backup set utilizza il comando RESTORE FILELISTONLY e a questo punto correggi il comando di restore database.
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit- Contrassegnato come risposta AngeloNew martedì 21 dicembre 2010 14:31
Tutte le risposte
-
Vorrei sapere se lanciando il setup su un computer server in cui sono installate più istanze di SQL Server, su quale istanza di SQL Server
viene ripristinato il NomeDB.
2 a domanda: supponendo di volere impiegare lo scipt SQL soprastante per una specifica istanza di SQL Server, come devo fare ?????
Per entrambe le domande c'è un'unica risposta: connettiti con sqlcmd all'instanza nella quale intendi eseguire il restore specificando nome server\nome istanza servendoti del paramentro -S.Il parametro NOUNLOAD viene utilizzato solo con i tape device, pertanto è totalmente inutile nel tuo comando. Inoltre se il media set contiene un unico backup set anche il parametro FILE = 1 è superfluo.
Infine assicurati che l'account utilizzato per eseguire l'istanza abbia le permission per accedere in lettura al path D:\ARCHIVI SQL SERVER BAK.
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit -
Vorrei sapere se lanciando il setup su un computer server in cui sono installate più istanze di SQL Server, su quale istanza di SQL Server
viene ripristinato il NomeDB.
2 a domanda: supponendo di volere impiegare lo scipt SQL soprastante per una specifica istanza di SQL Server, come devo fare ?????
Per entrambe le domande c'è un'unica risposta: connettiti con sqlcmd all'instanza nella quale intendi eseguire il restore specificando nome server\nome istanza servendoti del paramentro -S .Il parametro NOUNLOAD viene utilizzato solo con i tape device, pertanto è totalmente inutile nel tuo comando. Inoltre se il media set contiene un unico backup set anche il parametro FILE = 1 è superfluo.
Infine assicurati che l'account utilizzato per eseguire l'istanza abbia le permission per accedere in lettura al path D:\ARCHIVI SQL SERVER BAK .
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserveritA proposito, ho notato che l'istruzione RESTORE che adopero proprio in questo script lanciato dal setup :
RESTORE DATABASE COMUNE
FROM DISK = '_PATH_\COMUNE.BAK'
WITH MOVE 'Comune' TO '_MAINDIR_\Comune.mdf',
MOVE 'Comune_log' TO '_MAINDIR_\Comune.ldf'
, NOUNLOAD, REPLACE, STATS = 10
GOmi dà problemi se il nome logico del file COMUNE.BAK non è uguale a Comune.
Sai dirmi qualcosa a proposito ?
Grazie per la risposta precedente, è stata esauriente.
-
ho notato che l'istruzione RESTORE che adopero proprio in questo script lanciato dal setup :
RESTORE DATABASE COMUNE
FROM DISK = '_PATH_\COMUNE.BAK'
WITH MOVE 'Comune' TO '_MAINDIR_\Comune.mdf',
MOVE 'Comune_log' TO '_MAINDIR_\Comune.ldf'
, NOUNLOAD, REPLACE, STATS = 10
GOmi dà problemi se il nome logico del file COMUNE.BAK non è uguale a Comune.
Sai dirmi qualcosa a proposito ?
Prima dovrei capire la domanda :-)
RESTORE DATABASE COMUNE indica che "COMUNE" è il nome logico del database;
COMUNE.BAK è il nome del media set;
WITH MOVE 'Comune' TO '_MAINDIR_\Comune.mdf' indica che il nome logico del Master Data File è "Comune", mentre "Comune.mdf" è il nome fisico;
MOVE 'Comune_log' TO '_MAINDIR_\Comune.ldf' indica che il nome logico del Transaction Log è "Comune_log", mentre "Comune.ldf" è il nome fisico.Ora, puoi riformulare meglio la domanda?
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit -
Sì :
Comune.mdf è il nome del file fisico
Comune.Bak è il nome del media set, cioè il file di backup
Comune dovrà essere il nome logico del DB ripristinato
Quello che volevo dire è che nel momento in cui il nome originale del Database si differenzia dal nome logico che uso in questa istruzione, l'istruzione si interrompe
per come l'ho formulata io; esiste un modo diverso di adoperare l'istruzione RESTORE per ripristinare un database mediante script ?Se sì come ?
grazie dell'attenzione prestata alle mie domande
-
Quello che volevo dire è che nel momento in cui il nome originale del Database si differenzia dal nome logico che uso in questa istruzione, l'istruzione si interrompe
per come l'ho formulata io; esiste un modo diverso di adoperare l'istruzione RESTORE per ripristinare un database mediante script ?Se sì come ?
L'istruzione si interrompe non tanto perché stai specificando un nuovo nome logico per il db, ma piuttosto perché probabilmente stai andando a sovrascrivere il master data file ed il transaction log di un db già presente.
Se l'intento è quello di eseguire una copia del db con un nuovo nome logico segui i consigli riportati in questo post altrimenti ti invito a spiegare meglio cosa stai cercando di fare :-)
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit- Contrassegnato come risposta AngeloNew venerdì 17 dicembre 2010 18:31
-
Questa è l'istruzione SQL che adopero
RESTORE DATABASE IMPERANA
FROM DISK = 'C:\Programmi\Impera Software\Impera.Server\Archivi\Temp\IMPERANA.BAK'
WITH MOVE 'IMPERANA' TO 'C:\Programmi\Impera Software\Impera.Server\Archivi\Archivi\IMPERANA.mdf',
MOVE 'IMPERANA_log' TO 'C:\Programmi\Impera Software\Impera.Server\Archivi\Archivi\IMPERANA.ldf'
, REPLACE, STATS = 10
GOE questo è l'errore che ottengo
Messaggio 3234, livello 16, stato 2, riga 2
Logical file 'IMPERANA' is not part of database 'IMPERANA'. Use RESTORE FILELISTONLY to list the logical file names.
Messaggio 3013, livello 16, stato 1, riga 2
RESTORE DATABASE is terminating abnormally.Come mi devo comportare???
-
Questa è l'istruzione SQL che adopero
RESTORE DATABASE IMPERANA
FROM DISK = 'C:\Programmi\Impera Software\Impera.Server\Archivi\Temp\IMPERANA.BAK'
WITH MOVE 'IMPERANA' TO 'C:\Programmi\Impera Software\Impera.Server\Archivi\Archivi\IMPERANA.mdf',
MOVE 'IMPERANA_log' TO 'C:\Programmi\Impera Software\Impera.Server\Archivi\Archivi\IMPERANA.ldf'
, REPLACE, STATS = 10
GOE questo è l'errore che ottengo
Messaggio 3234, livello 16, stato 2, riga 2
Logical file 'IMPERANA' is not part of database 'IMPERANA'. Use RESTORE FILELISTONLY to list the logical file names.
Messaggio 3013, livello 16, stato 1, riga 2
RESTORE DATABASE is terminating abnormally.Come mi devo comportare???
Come puoi leggere dal messaggio di errore non esiste alcun file logico chiamato IMPERANA. Per conoscere il nome dei file logici contenuti nel backup set utilizza il comando RESTORE FILELISTONLY e a questo punto correggi il comando di restore database.
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit- Contrassegnato come risposta AngeloNew martedì 21 dicembre 2010 14:31
-