none
Ripristino di un database su un Linked Server RRS feed

  • 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!!!

    mercoledì 15 dicembre 2010 16:36

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
    giovedì 16 dicembre 2010 12:26
    Moderatore
  • 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

    GO

     

    E 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
    martedì 21 dicembre 2010 13:26
    Moderatore

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
    • Contrassegnato come risposta AngeloNew mercoledì 15 dicembre 2010 17:51
    • Contrassegno come risposta annullato AngeloNew mercoledì 15 dicembre 2010 17:52
    mercoledì 15 dicembre 2010 17:26
    Moderatore
  • 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

     

    A 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
    GO

     

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

    mercoledì 15 dicembre 2010 17:56
  • 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
    GO

    mi 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
    mercoledì 15 dicembre 2010 20:30
    Moderatore
  • 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

    giovedì 16 dicembre 2010 09:17
  • 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
    giovedì 16 dicembre 2010 12:26
    Moderatore
  • 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

    GO

     

    E 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???

    martedì 21 dicembre 2010 11:41
  • 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

    GO

     

    E 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
    martedì 21 dicembre 2010 13:26
    Moderatore
  • GRAZIE

    martedì 21 dicembre 2010 14:32