SQL Server in uno stato di confusione: esiste il database o no?


8

Si è verificato un problema davvero strano e fastidioso. In qualche modo l'istanza di SQL Server 2008 R2 in esecuzione sul nostro server è stata in qualche modo danneggiata.

Innanzitutto, abbiamo notato che mancava il database creato ieri. Quindi, ci siamo guardati intorno e abbiamo scoperto che era ancora lì, ma distaccato. Quindi, abbiamo provato ad allegare il mdf ma abbiamo ricevuto un messaggio simile a quello The file is currently in use.

Ho pensato che fosse strano, quindi ho riavviato SQL Server. Stessa cosa ... ok, tempo per misure drastiche ... quindi, ho fermato il servizio, ho compresso il mdf, ho avviato il servizio, decompresso e poi ho provato a ripristinarlo. Il messaggio sopra era sparito, ma poi ho ricevuto:

Impossibile collegare un database con lo stesso nome di un database esistente

Ahia. Ovviamente non viene visualizzato nel database explorer, quindi non ho idea di cosa stia succedendo ... ultima risorsa:

DROP DATABASE [DatabaseName]

Certo che non ha funzionato .. questo mi dice che il database non esiste. Quindi, sono bloccato ... ad un certo punto SQL Server pensa che il database esista e ad un altro punto pensa che il db non esista .. ovviamente è in uno stato di confusione.

Qualcuno l'ha mai visto prima? Hai qualche idea su come risolverlo?


Quindi i file fisici non ci sono più, giusto? Vedi ancora il tuo database in sys.databases?? Ad esempio, SELECT * FROM sys.databaseselenca ancora il tuo database?
marcs

@Josien ringrazia per la punta .. L'ho messo anche lì
Matt

@marc_s L'ho provato ora, ma non viene visualizzato quando eseguo quella query
Matt

Cosa SELECT name, user_access_desc, state_desc FROM sys.databasesrivela?
Mark Storey-Smith,

Perché mai qualcuno dovrebbe sottovalutare questo post? Qualcuno potrebbe per favore elaborare? Scherzi a parte ...
Matt,

Risposte:


5

Giusto .. L'ho capito ... un po 'di clown qui (che non ne possiede uno) ha ribattezzato il db in modo che il suo nome in SSMS sia diverso dai nomi dei file mdf e ldf .. e non solo un po' diverso .. . completamente differente. LOL. Grazie comunque per i tuoi utili suggerimenti.


4
Per essere al sicuro, nega l'autorizzazione ALTER al database a tutti tranne "sa", cambia la password "sa" e sii selettivo quando dai la password a "clown"
Carol Baker West

4

Se non avessi il permesso di vedere il database, questo sarebbe esattamente i sintomi. Il database non verrebbe visualizzato nelle visualizzazioni. Sei sicuro di non aver semplicemente eliminato i file di un database a cui non hai avuto accesso? Operi come amministratore di sistema?

Aggiornare


Il database è stato staccato o offline ? Quando dici di So, we looked around and found that it was still there, but detachedcosa stai parlando esattamente? Dove hai guardato, cosa hai trovato? Identificare che un database è stato "staccato" (al contrario, diciamo, eliminato) non è banale.


Sono davvero un amministratore di sistema
Matt,

2
Da quando l'hai menzionato, ho uno script sul mio blog che rileva i file di database non collegati nelle cartelle di dati / log predefinite: voluntarydba.com/post/2012/08/21/…
Jon Seigel

Grazie, ci proverò più tardi quando sarò in ufficio.
Matt

@JonSeigel, bello, ma sfortunatamente questo non ha prodotto nulla per me. Ho provato anche qualcos'altro .. riavviare il server e quindi creare un nuovo DB con quel nome .. non mi lascerebbe fare ... molto fastidioso. Penso che dovrò ignorare questa situazione e creare un nuovo db con un nome diverso.
Matt

3

Esegui query su database sys. È possibile che il database sia stato creato con uno spazio alla fine del nome. Eseguire il codice seguente e notare che è possibile creare solo uno dei database e non importa quale si crea per primo, è possibile crearne solo uno.

create database [test]
create database [test ]

Penso che questo sia un bug, giusto?
AK

Probabilmente no. Suppongo che SQL stia eseguendo un TRIM sul nome del database quando sta verificando se il valore esiste. Dovrebbe essere intenzionale, quindi probabilmente è progettato.
mrdenny,

@mrdenny, grazie, ma nessun aiuto lì .. il database non si presenta affatto, con qualsiasi variazione nel nome di sorta .. e ci sono solo una manciata di database su quel server, quindi lo individuerei immediatamente se fosse lì . Grazie comunque
Matt

0

ESEGUI 'DBCC CHECKDB' sul master, msdb e sul database stesso per vedere cosa dice. Potrebbe essere necessario mettere il sistema in modalità utente singolo per far funzionare dbcc in modalità di riparazione con perdita di dati. O semplicemente ripristinare i backup di master e msdb come appropriato.


Eseguirlo sul master e msdb non ha aiutato e non posso provarlo sul db stesso, perché non riesco a vedere il db nello studio di gestione in alcun modo ...
Matt

0

Per me questo è stato risolto aggiornando i database. Ho eseguito un ripristino non riuscito e ho visualizzato db che non è stato eliminato con lo stesso messaggio di errore: "Il database non esiste sul server".


2
Potresti voler approfondire il modo esatto di "aggiornare i database".
Mustaccio

0

Stavo riscontrando lo stesso problema con SQL Server 2008r2.

Stavo cercando di duplicare un database (versioning pippo) e ho finito per confondere il server SQL. SQL Server Management Studio pensava che il database esistesse (lo erano MDF e LDF) ma il database master non pensava che esistesse il database (non si presentava nei database sys.d)

Il trucco era rinominare i file MDF e LDF, quindi creare il database da SQL, create database [db name here]quindi eliminare il database e infine collegare i file MDF e LDF da prima.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.