Il database non può essere aggiornato perché è di sola lettura o contiene file di sola lettura. Rendere scrivibile il database o i file ed eseguire nuovamente il ripristino


8

Ho ricevuto un file di database e le istruzioni per caricarlo sono installare SQL Server 2005 e quindi collegarlo utilizzando SQL Server Management Studio.

Dopo aver installato tutto, ho provato ad allegare il file MDF ma poi mi dice:

la ricerca della directory per il file "D: {nome_cartella} {nome_file} .LDF non è riuscita con errore 21 del sistema operativo (errore non trovato)

Un file LDF non è stato fornito con il database, quindi presumibilmente dovrebbe essere generato automaticamente.

Ora, l'unità D è dove si trova la mia unità CD, quindi non troverà nulla lì. Né avrà fortuna a provare a creare qualcosa lì.

  1. Perché sta cercando un file di registro in un percorso specifico? Perché non dove si trova il file di database?

  2. Come posso collegare questo database?

Mi sono reso conto che quando seleziono un database da allegare, tre voci appaiono sotto "dettagli del database". un MDF, NDF e LDF. Il "percorso file corrente" del LDF punta al percorso dell'unità D sopra, quindi l'ho rimosso.

Questa volta, quando premo "OK", ricevo un messaggio di errore diverso:

Il database non può essere aggiornato perché è di sola lettura o contiene file di sola lettura.
Rendere scrivibile il database o i file ed eseguire nuovamente il ripristino.

Attivazione file non riuscita. Il nome fisico D: {cartella} {file} .LDF potrebbe non essere corretto.
È stato creato il nuovo file di registro "...". (Microsoft SQL Server, errore: 3415)

Quindi ora crea un nuovo file di registro nella stessa cartella del file di database, il che è fantastico, ma sembra che ci siano problemi di sicurezza.

Informazioni aggiuntive:

  • Le istruzioni mi richiedono di utilizzare il nome di accesso "sa", che sembra essere l'account sysadmin. Sono collegato alla mia istanza di SQL Server utilizzando tale accesso.

  • Ho verificato le proprietà del file che non è di sola lettura. La directory non è di sola lettura. Sono ammessi tutti gli ACL.

  • Non riesco a collegare il database. Quando provo a collegarlo, viene visualizzato un messaggio di errore con "collegamento del database non riuscito".

  • Chiudere SSMS e riaprirlo come amministratore non ha fatto differenza.

  • select SERVERPROPERTY('ProductVersion')ritorna 9.00.4035.00. C'è un altro file fornito con il database chiamato "dbdata.ini" che dice "IsSql2000 = 1", quindi presumibilmente dovrebbe essere caricato in SQL Server 2000. Vedrò se riesco a farlo funzionare su 2000.

Risposte:


8

Questo non è un problema di accesso. Il problema è che si sta collegando il database a una versione successiva di SQL Server rispetto all'istanza a cui .mdfera originariamente collegato ed è di sola lettura. SQL Server sta tentando di aggiornare il database come parte dell'allegato e non è possibile perché il database è in modalità di sola lettura.

Se il database si trova READ_ONLY(il che sembra che sia il caso in base ai tuoi messaggi di errore), allora hai bisogno di tutti i file (sia di registro che di dati) per allegarlo secondo la documentazione di Technet . Se guardi sotto la FOR ATTACHclausola, descrive esplicitamente che:

... per un database di sola lettura, il registro non può essere ricostruito perché il file primario non può essere aggiornato. Pertanto, quando si collega un database di sola lettura il cui registro non è disponibile, è necessario fornire i file di registro o i file nella FOR ATTACHclausola.

È necessario l'accompagnamento .ldfper il database. Vorrei contattare chiunque abbia fornito il database e chiedere loro di fornire sia i file .mdfche i .ldffile. Quindi, è possibile collegarlo con la sintassi seguente:

CREATE DATABASE [foo]
ON (FILENAME='<<path to mdf>>')
LOG ON (FILENAME='<<path to ldf>>')
FOR ATTACH;

Lo READ_ONLYstato non può essere rimosso dal database senza collegarlo perché è archiviato nei metadati del database. Per modificarlo, il database deve essere online e collegato.

Un'altra alternativa è chiedere un backup del database. È possibile aggirare alcuni di questi problemi più facilmente se si esegue un ripristino del database anziché un allegato.


1
L'uso LOG ONcon la corrispondenza ldfnon ha risolto il problema per me
Mugen,

25

Ho appena trovato un post che ha risposto a questa domanda:

Questo potrebbe non funzionare in tutti i casi, ma stavo cercando di installare il database di ricerca semantica e ho riscontrato lo stesso errore.

Devi eseguire SQL Server Management Studio come amministratore e funziona.


9
  1. Apri il mio computer.
  2. Individua la cartella principale in cui sono stati conservati i file ".mdf" e ".ldf".
  3. Fare clic destro sulla cartella fare clic su "Proprietà".
  4. Nella finestra delle proprietà fare clic su "Sicurezza"
  5. Fai clic sul pulsante "Modifica"
  6. Abilitare "Leggi ed esegui", "Leggi", "Scrivi" per gli utenti elencati e applica le modifiche alle seguenti cartelle fino ai file del database.
  7. Prova ad allegare il file ".mdf"

grazie, le mie vecchie finestre se ne sono andate e penso che questi file siano bloccati da quel sistema operativo. ma
ho

1

Fare clic con il tasto destro del mouse sul file .mdfe .ldf, uno alla volta e fare clic su "Proprietà", quindi in fondo, dove si dice "questo file proviene da un altro computer e potrebbe essere bloccato per aiutare a proteggere il computer" facendo clic sul pulsante di sblocco.

Quindi fare clic con il tasto destro, -> proprietà, -> scheda sicurezza -> pulsante modifica e selezionare 'utenti' e dare il pieno controllo.


1

Nel mio caso, la risoluzione era quella di accedere a SSMS con la modalità Auth di Windows anziché l'utente sql che ha il ruolo di amministratore di sistema. assicurati solo che l'utente che hai utilizzato in modalità autenticazione di Windows disponga di un'autorizzazione adeguata (il mio caso era sysadmin) La mia ipotesi è che l'utente sql non disponga di un'autorizzazione adeguata. (Riscontro questo problema quando eseguo la migrazione / copia di mdf e ldf da diversi macchina)


0

Non autorizzazioni nel nostro caso, era la versione di SSMS!

(era il 2012 a livello locale in cui abbiamo ricevuto l'errore, ma ha funzionato quando abbiamo usato SSMS 17+ da una scatola remota)


-1

Ho anche avuto questo problema. Ho aiutato il mio cliente riavviando il servizio SQL ed ero in grado di collegare l'MDF secondo la normale procedura.


-2

1) Apri Gestione configurazione SQL Server

2) Seleziona Servizi SQL Server (riquadro sinistro)

3) Fai doppio clic su SqlServer (riquadro destro)

4) Selezionare la scheda Accesso

5) Seleziona il pulsante di opzione integrato e modifica il sistema locale o il servizio di rete nella casella combinata.

6) Fare clic su OK.

7) Allegare il file mdf in SQL Server Manager.


-2

Il servizio SQL Server è probabilmente in esecuzione con l' account NT Service \ MSSQLServer . Modificandolo, il sistema locale gli darà accesso.

Probabilmente è meglio creare un utente e concedere a quell'utente le autorizzazioni complete per la cartella in cui si trovano i file.

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.