Stringa di connessione con attacheddbfilename di un db mdf sqlexpress ...

martedì 10 novembre 2009 - 15.17

kduhcm Profilo | Junior Member

Ciao ragazzi,
ho un sito web che si appoggia a un db sqlserver. In locale non ho problemi, mi collego al database con una connessione integrata windows. Ora dovrei prendere il miodb.mdf e spostarlo su un hosting a pagamento, perche' loro i database SqlServer li gestiscono cosi'. Ho messo il file miodb.mdf nella cartella app_data e tento di collegarmi con questa stringa di connessione
<add key="stringaConnessione" value="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|miodb.mdf;Integrated Security=True; User Instance=True;Initial Catalog=miodb;" />
Ho appurato che |DataDirectory| punta al percorso giusto, ma quando apro la pagina che si collega al database ho il seguente messaggio di errore:
L'utente non dispone dell'autorizzazione per l'esecuzione di questa azione.
Cosa sbaglio?

-----------------------------------------------------------------------------------------------------------------------
Sviluppo siti web Roma http://www.actasoftware.com

alx_81 Profilo | Guru

>Ciao ragazzi,
Ciao

>ho un sito web che si appoggia a un db sqlserver. In locale non
>ho problemi, mi collego al database con una connessione integrata
>windows. Ora dovrei prendere il miodb.mdf e spostarlo su un hosting
>a pagamento, perche' loro i database SqlServer li gestiscono
>cosi'. Ho messo il file miodb.mdf nella cartella app_data e tento
>di collegarmi con questa stringa di connessione
><add key="stringaConnessione" value="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|miodb.mdf;Integrated
>Security=True; User Instance=True;Initial Catalog=miodb;" />
>Ho appurato che |DataDirectory| punta al percorso giusto, ma
>quando apro la pagina che si collega al database ho il seguente
>messaggio di errore:
>L'utente non dispone dell'autorizzazione per l'esecuzione di
>questa azione.
>Cosa sbaglio?
Quelle che stai usando, si chiamano User Instances, una cosa terribile e deprecata in sql server 2008. Anche il nostro Lorenzo afferma: "Questa funzionalità tipica di SQL Server Express prende il nome di User Instances. E' così un obrobrio, che in SQL Server 2008 Express è stata deprecata quindi sarà rimossa in SQL Server 11."

Se puoi, carica il database proprio sull'istanza del hosting su cui pubblichi. Hai comprato il servizio sql server? che hosting è?

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

kduhcm Profilo | Junior Member

E' un hosting a basso costo. www.dominiofaidate.com
Ti danno 1 gb di hosting e 3 db mysql a 17 euro l'anno circa. Meno della meta' di aruba. Solo che, a differenza di aruba che ti da il pannello di controllo per gestire sql server, loro ti dicono di pubblicare il db nella cartella app_data e di connettertici. Preferisco lavorare con sql server che con mysql perche' cosi' posso riutilizzare piu facilmente il codice in altri contesti in cui lavoro. Perche' la user instance e' deprecata? Non e' che mi va in deadlog o qualcosa di simile se ho troppe connessioni al sito? Comunque questa e' la situazione. Cosa mi consigli?
-----------------------------------------------------------------------------------------------------------------------
Sviluppo siti web Roma http://www.actasoftware.com

alx_81 Profilo | Guru

>dicono di pubblicare il db nella cartella app_data e di connettertici.
>Preferisco lavorare con sql server che con mysql perche' cosi'
>posso riutilizzare piu facilmente il codice in altri contesti
>in cui lavoro. Perche' la user instance e' deprecata?
perchè è terribile e si sono accorti che non è la strada da seguire.

>Non e' che mi va in deadlog o qualcosa di simile se ho troppe connessioni
>al sito? Comunque questa e' la situazione. Cosa mi consigli?
Intendi deadlock? no, dall'errore direi che semplicemente l'utente con cui gira il sito non ha i permessi per leggere il file mdf. Il deadlock è un'altra cosa e non conta quante connessioni hai.

Qui ti dice la motivazione:
http://support.dominiofaidate.com/index.php?action=artikel&cat=7&id=48&artlang=it

se però hai fatto tutto quello che serve, apri un ticket, essendo a basso costo, non so come siano configurati. Comunica il problema e fatti aiutare dall'helpdesk.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

kduhcm Profilo | Junior Member

Ok. Ma a cosa serve User Instance=True ? Cosa comporta il fatto di mettere o di non mettere questo parametro?

-----------------------------------------------------------------------------------------------------------------------
Sviluppo siti web Roma http://www.actasoftware.com

alx_81 Profilo | Guru

>Ok. Ma a cosa serve User Instance=True ? Cosa comporta il fatto
>di mettere o di non mettere questo parametro?
http://msdn.microsoft.com/en-us/library/bb264564%28SQL.90%29.aspx

Significa che solo per una sql express, puoi definire l'utilizzo di user instance, e se è true il valore, il motore prende il file e fa l'attach al volo.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

kduhcm Profilo | Junior Member

Ok, pero' non ho capito una cosa: In che momento viene fatto l'attach? Fa ' l'attach al volo ' ogni volta che la pagina che si collega al database viene aperta? O la fa una volta sola (magari la prima volta che un utente si collega al sito, che sarebbe la cosa piu ottimale). In termini di prestazioni di quanto si e' penalizzati? Perche' io sto utilizzando la user instance in ambiente produzione, non sviluppo.
-----------------------------------------------------------------------------------------------------------------------
Sviluppo siti web Roma http://www.actasoftware.com

alx_81 Profilo | Guru

>Ok, pero' non ho capito una cosa: In che momento viene fatto
>l'attach? Fa ' l'attach al volo ' ogni volta che la pagina che
>si collega al database viene aperta? O la fa una volta sola (magari
>la prima volta che un utente si collega al sito, che sarebbe
>la cosa piu ottimale). In termini di prestazioni di quanto si
>e' penalizzati? Perche' io sto utilizzando la user instance in
>ambiente produzione, non sviluppo.
leggendo attentamente il link che ti ho mandato vedrai questa riga:
"User instance databases have the Auto Close option set so that if there are no connections to a database for 8-10 minutes, the database shuts down and the file is closed. This happens automatically, but it can take a while, especially if connection pooling is enabled for your connections."

Quindi la prima connessione fa attach, e se per 8-10 minuti non ci sono accessi, si chiude la connessione e il db fa shut down (file chiuso).
Di sicuro non è la scelta da fare in produzione per vari motivi:
- traffico rallentato
- sono deprecate ed in 2011 non le avrai più
- tempi di latenza per alcuni utenti alti

Insomma, meglio una connessione "classica" senza user instances.
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5