Come spostare la cartella delle istanze LocalDB di SQL Server dalla posizione predefinita?


12

Ottengo più errori con LocalDB( errore di avvio , impossibile creare DB da SQL Server Management Studio e anche più problemi durante il tentativo di ripristinare un backup) e nessuna delle correzioni che ho trovato sta aiutando nulla. Mi sembra che tutti gli errori abbiano le loro radici nelle autorizzazioni non impostate correttamente.

Ora un semplice script di creazione di tabelle DDL funziona perfettamente da SQL Server Management Studio e crea il database nella radice della cartella del mio account utente ( come spiegato qui ). Tuttavia, la cartella Istanze (che si trova D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instancesnonostante l'installazione di SQL Server Express con Advanced Services abbia specificato la cartella DATA in un'altra posizione - dove .mdfsono archiviati solo i file SQL Server Express standard , ma non le LocalDBistanze) sembra problematica riguardo alle autorizzazioni (contrariamente all'account root) quindi e anche per avere i miei file DB in una posizione tra i miei progetti, vorrei spostare la cartella Instances in un altro posto. È possibile? Non ho nemmeno trovato una voce di registro corrispondente.

Sto usando SQL Server Express 2012 e anche SSMS della stessa versione (ultimi aggiornamenti installati).

Qualsiasi aiuto sarebbe apprezzato.

Modifica: la pagina Impostazioni database KookieMonster menzionata in precedenza ha generato un errore per me, non potendo modificare né vedere alcuna configurazione lì. Ho lasciato che Windows Update controllasse di nuovo gli aggiornamenti e c'erano alcuni aggiornamenti per SQL Server Express che non erano installati (anche se sono sicuro di aver selezionato tutto da installare prima), quindi li ho installati. Ciò mi ha permesso di andare alla pagina delle impostazioni.

Ho provato a impostare la cartella principale dell'istanza LocalDB da qualche altra parte, ma viene visualizzato un errore di accesso negato per ogni cartella che ho provato, vale a dire

Modifica non riuscita per Impostazioni "Microsoft.SqlServer.Management.Smo.ObjectKeyBase". (Microsoft.SqlServer.Smo)

------------------------------ INFORMAZIONI AGGIUNTIVE:

Si è verificata un'eccezione durante l'esecuzione di un'istruzione o batch Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


RegCreateKeyEx () ha restituito l'errore 5, "Accesso negato." (Microsoft SQL Server, errore: 22002)

Ottengo questo anche se la cartella ha il Controllo completo impostato per Tutti! Ancora più divertente l'unica cartella che funziona, quella che è impostata come predefinita (la radice dell'account utente) non ha permessi speciali applicati - proprio quelli che il mio utente ha (proprio come qualsiasi altra cartella che ho provato a impostare). In effetti questo significa che tutti i file dei miei database LocalDB vengono salvati nella cartella principale del mio account.


1
Cosa succede quando si crea un database e si imposta esplicitamente i file in una posizione specifica invece di prendere le impostazioni predefinite?
Aaron Bertrand

1
Grazie per la tua risposta! Funziona (se seleziono una cartella adatta come la cartella del mio progetto) ma è molto scomodo dover specificare il percorso ogni volta. Non riesco proprio a credere che non ci sia modo di cambiare le impostazioni predefinite.
Piedone,

Cosa succede quando si accede al nodo del server, si fa clic con il tasto destro, proprietà, parametri del database e si cambia la posizione predefinita? I valori sono quelli impostati durante l'installazione o qualcos'altro?
KookieMonster

Ho avuto lo stesso identico problema. Penso che il motivo per cui cambiare i permessi delle cartelle non abbia effetto sia perché questo in realtà ti sta dicendo che c'è un problema di permessi con il registro, in particolare creando una chiave di registro (vedi l'ultima parte: RegCreateKeyEx). Purtroppo non riesco a capire quale chiave vuole creare.
daveaglick,

Risposte:


13

Vedi il mio commento sopra. Ho usato Process Monitor per tracciare l'accesso al registro e ho scoperto che stava ottenendo un accesso negato mentre cercavo di scrivere:

3:16:40.8405491 PM sqlservr.exe 8756 RegCreateKey HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer ACCESS DENIED Desired Access: Write

Ho risolto il problema aprendo l'Editor del Registro di sistema e dando a Tutti l'accesso completo a HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer. Quindi ho cambiato il percorso predefinito e rimosso l'accesso Everyone una volta che è stato fatto. Ciò ha reso le seguenti chiavi extra che prima non c'erano:

DefaultData

DefaultLog

DirectoryBackup


Grazie. Ho percorso un percorso diverso alla fine, quindi non posso testare come questo avrebbe funzionato per me.
Piedone,

3
Ho appena provato esattamente la soluzione che hai proposto qui e sì, ho gli extra che hai citato nel registro. Tuttavia, ciò non sostituisce né modifica i valori delle proprietà correnti del mio database locale. Il registro mostra i valori desiderati per tutte e 3 le posizioni, ma in SMSS ci sono ancora le posizioni predefinite per installazione. L'uso di MS sql server compact 3.5 SP 1 potrebbe essere la ragione di tale comportamento?
user3840527

2
Questo è l'unico posto che sono stato in grado di trovare qualsiasi informazioni su questo errore. somedave, sì, la modifica delle autorizzazioni per quella chiave reg fa scomparire l'errore, ma come dice user3840527, SSMS ha ancora le posizioni predefinite originali, anche dopo essere uscito e riaperto.
Yann Duran,

@Piedone, potresti per favore spiegare cosa hai fatto invece di usare il metodo reg key? O indicare da qualche parte che spiega il metodo? Grazie
Yann Duran il

1
L'errore scompare ma la posizione non cambia
Adil Mammadov,
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.