23 messaggi dal 06 settembre 2002
Ciao a tutti, ho un grosso problema su Sql Server 2005 e spero qualcuno mi aiuti a risolverlo.

Mi sono trovato nella necessita' di importare i dati di 2 database non da un backup (che non esiste),
ma dai file fisici, .mdf e .ldf.

Nota: il server dove ho eseguito le operazioni descritte qui sotto e' un Windows Server 2003 usato per testare
applicazioni 2.0 prima della pubblicazione on-line

Per il primo database esisteva, nel server dove dovevo eseguire l'importazione, un database identico
anche se non aggiornato, per cui ho seguito questi passi:

1) Ho copiato i file .mdf e .ldf da importare in una nuova cartella
2) Ho messo offline il database
3) Con l'istruzione ALTER DATABASE ho modificato il percorso dei file fisici del database
4) Ho riportato online il database.

In questo caso, tutto bene, l'operazione e' durata in tutto non piu' di 10 minuti.

Nel secondo caso il db nel server non esisteva, per cui si e' reso necessario un passo in piu', cioe' la
creazione del database (avrei dovuto usare l'opzione Attach Database, ma purtroppo non l'ho fatto) e quindi
i passi sono stati questi

0) Ho creato il nuovo database
1) Ho copiato i file .mdf e .ldf da importare in una nuova cartella
2) Ho messo offline il database
3) Con l'istruzione ALTER DATABASE ho modificato il percorso dei file fisici del database
4) Ho tentato di riportare online il database.

In questo caso l'operazione di Bring online e' andata in pallone, nel senso che dopo avere girato per piu' di
30 minuti la finestra si e' chiusa, lasciando il database marcato come In Recovery e quindi di fatto inaccessibile.
Non sapendo cosa fare, ho riavviato il server e con mia grosso sorpresa anche altri database sono diventati
In Recovery, anche se questi database non sono stati minimamente toccati dall'operazione.

Dopo diverse ore e un altro reboot del server 2 db sono tornati disponibili mentre altri sono da diverse ore in stato
di recovery. A questo punto non so piu' dove sbattere la testa: qualcuno puo' dirmi per cortesia dove ho sbagliato,
e soprattutto come faccio a riportare online i database ?

Ringrazio in anticipo per le eventuali risposte
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Buono ha scritto:

1) Ho copiato i file .mdf e .ldf da importare in una nuova cartella
2) Ho messo offline il database
3) Con l'istruzione ALTER DATABASE ho modificato il percorso dei file fisici del database
4) Ho riportato online il database.


La procedura corretta è

1) fermare il servizio o scollegare il database con la sp_detach_db
2) copiare i file di database
3) riavviare il servizio (se era fermo) e fare l'attach dei nuovi file


Nel secondo caso il db nel server non esisteva, per cui si e' reso necessario un passo in piu', cioe' la
creazione del database


Non serve. La procedura di attach crea il database


0) Ho creato il nuovo database
1) Ho copiato i file .mdf e .ldf da importare in una nuova cartella
2) Ho messo offline il database


PRIMA si mette offline il database (meglio scollegarlo o fermare il servizio) e poi si copiano i file di database


Non sapendo cosa fare, ho riavviato il server e con mia grosso sorpresa anche altri database sono diventati
In Recovery, anche se questi database non sono stati minimamente toccati dall'operazione.

Dopo diverse ore e un altro reboot del server 2 db sono tornati disponibili mentre altri sono da diverse ore in stato
di recovery. A questo punto non so piu' dove sbattere la testa: qualcuno puo' dirmi per cortesia dove ho sbagliato,
e soprattutto come faccio a riportare online i database ?


Nell'error log di SQL Server e nell'event viewer del sistema operativo trovi nel dettaglio le cause dei problemi.
Per copiare i file di database questi NON devono essere in uso; se li hai copiati prima di mettere offline il database significa che l'opzione autoclose è impostata a ON. Ciò non ti assicura che tra l'inizio della copia (dove SICURAMENTE il database era chiuso e i relativi file non erano quindi in uso) e la fine il database non si sia "riaperto" per qualche motivo rendendo quindi inconsistenti i file dati...
Bye
23 messaggi dal 06 settembre 2002
Prima di tutto ti ringrazio molto per la risposta: adesso so qual'è la strada giusta da seguire se si dovesse ripresentare una situazione simile.
Stoppando e riavviando il servizio sql server adesso i database sono tornati online, tutti tranne uno, quello per cui l'operazione di Bring Online e' fallita. Questo database resta perennemente in stato di Recovery, vorrei fare un detach per poi collegarlo correttamente con la procedura che hai indicato, ma non riesco a fare niente, ho provato ad eseguire DBCC CHECKDB, ma l'errore che mi appare e' questo

Messaggio 922, livello 14, stato 2, riga 1
Database 'DbOrdini' is being recovered. Waiting until recovery is finished.

Esiste un modo per interrompere l'operazione di recovery, in modo da poter eseguire il detach e l'attach del db ?

Ciao, Grazie
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Buono ha scritto:

ho provato ad eseguire DBCC CHECKDB, ma l'errore che mi appare e' questo

Messaggio 922, livello 14, stato 2, riga 1
Database 'DbOrdini' is being recovered. Waiting until recovery is finished.

Esiste un modo per interrompere l'operazione di recovery, in modo da poter eseguire il detach e l'attach del db ?


Io avrei fatto un DROP DATABASE e non un controllo di allocazione... :-)
23 messaggi dal 06 settembre 2002
Ho provato ad eseguire DROP DATABASE, ma ottengo l'errore

Messaggio 3702, livello 16, stato 4, riga 1
Cannot drop database "DbOrdini" because it is currently in use.

Dovrei stoppare il processo che usa il db (ma qual e' ?) senza stoppare sql server, per poterlo poi cancellare. Hai qualche idea ?

Ciao, Grazie
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Io idee su quale sia il processo non ne posso avere.
Se esegui la sp_who/sp_who2 oppure accedi all'Activity Monitor di SSMS, tu potrai averne... ;-)

Bye
Modificato da l.bianchi il 24 agosto 2007 12.52 -
23 messaggi dal 06 settembre 2002
Ciao, ho controllato l'Activity Monitor ed eseguito le stored procedures sp_who e sp_who2, ma non ho trovato riferimenti al database che mi interessa (se vuoi posso postare il risultato). Ho provato a stoppare e riavviare Sql Server e purtroppo un altro database, che non ho mai toccato, e' entrato in status Recovery..

Esiste un modo per interrompere il recovery di un database ?

Ciao, Grazie
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog

Ho provato a stoppare e riavviare Sql Server e purtroppo un altro database, che non ho mai toccato, e' entrato in status Recovery..


Dai un'occhiata all'error log di SQL Server e all'event viewer del sistema operativo (cosa che ti avevo invitato a fare nella mia prima risposta). Li troverai le cause dei problemi che riscontri; con tutta probabilità c'è qualche problema sul disco dove sono i file di database...


Esiste un modo per interrompere il recovery di un database ?


No. Se fosse possibile non sarebbe garantita l'integrità dei dati...

Bye

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.