15 messaggi dal 23 febbraio 2005
Salve,
non sò se ho posto correttamente i termini della mia domanda.
Ho installato da poco SqlServer 2005 Standard Edition su un Server.
Vado ad accedere tramite Micr. SqlServer Management Studio e cerco di creare un database con singolo file. Non mi riesce. SqlServer vuole anche il nome del file log. Ora sicuramente ho capito male ma non era possibile con questa versione creare un database a singolo file come altri RDBMS. Forse solo con la versione Express?
Se possibile, io dovrei fare "attach" con database versione 2000. Mi sembrava possibile, ma anche in questo caso mi chiede il file log.
Ho un po' di confusione, come posso fare?
Vi ringrazio
Tiziano
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
tizianoricci ha scritto:
Salve,
non sò se ho posto correttamente i termini della mia domanda.
Ho installato da poco SqlServer 2005 Standard Edition su un Server.
Vado ad accedere tramite Micr. SqlServer Management Studio e cerco di creare un database con singolo file. Non mi riesce. SqlServer vuole anche il nome del file log. Ora sicuramente ho capito male ma non era possibile con questa versione creare un database a singolo file come altri RDBMS. Forse solo con la versione Express?
Se possibile, io dovrei fare "attach" con database versione 2000. Mi sembrava possibile, ma anche in questo caso mi chiede il file log.
Ho un po' di confusione, come posso fare?
Vi ringrazio
Tiziano

no, non e' possibile con nessuna versione; a partire a SQL Server 7.0 un database deve "al minimo" essere composto da 1 file di dati ed 1 file di transaction log..

se devi solo fare un attach, puoi comunque utilizzare la procedura di sistema sp_attach_single_file_db, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ae-az_4wrm.asp, che provvedera' a tentare di generare un nuovo file di log con lo stesso nome e nella stessa posizione del file presente prima del distacco del database..
saluti
Modificato da Andrea Montanari il 15 giugno 2006 18.47 -

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
11 messaggi dal 19 maggio 2006
La mia confusione è creata (forse) da Visual Studio 2005.
Ci sono dute tipi di Sql Server database che puoi utilizzare all'interno di VS2005: locali e reali ossia Sql Server hosted databases.
Se vuoi utilizzare la versione locale di database devi avere SqlServer Express installato. Infatti io che ho installato la versione
Standard mi ritorna l'errore che non è installato Sql Express.
Ora il file mdf che generari da VisualStudio non ha le stesse caratteristiche di un file MsAccess?
La stringa di connessione mi sembra preveda l'utilizzo del percorso di file , quindi suppongo che se piazzo il file mdf sul server mi diventa un sistema file-server tipo MsAccess.
E' qui che non riesco a capire, quando andai al convegno Microsoft a Roma venne detto che per distribuire un'applazione Web bastava che venisse distribuito il file mdf (con tutto il resto), semplificando cosi la WebHosting di un'applicazione che utilizza dati Sql Server.
Potete darmi ulteriori spiegazioni?
Vi ringrazio
Tiziano

Tiziano Ricci
1.976 messaggi dal 27 luglio 2005
Contributi
salve Tiziano,
tiziano-ricci ha scritto:
La mia confusione è creata (forse) da Visual Studio 2005.
Ci sono dute tipi di Sql Server database che puoi utilizzare all'interno di VS2005: locali e reali ossia Sql Server hosted databases.

direi assolutamente no, ma lo vediamo in seguito

Se vuoi utilizzare la versione locale di database devi avere SqlServer Express installato. Infatti io che ho installato la versione
Standard mi ritorna l'errore che non è installato Sql Express.
Ora il file mdf che generari da VisualStudio non ha le stesse caratteristiche di un file MsAccess?


no.. quello che tu stai in questo modo usando sono una feature presente solo in SQLExpress che si chiama User Instance..
in definitiva viene eseguita (e caricata in memoria) una "copia" di SQLExpress per ogni applicazione che ne faccia uso, rendendo completamente "privato" l'accesso a questa "istanza", che disporra' di una propria copia dei database di sistema ed i cui file di database utente verranno "sempre" posizionati nella cartella di esecuzione dell'applicazione.. l'applicazione avra' privilegi da sysadim sulla base dati, quindi tutto il discorso di "sicurezza" viene bypassato...
ma i database, sia di sistema che utente, restano database SQL Server e nulla hanno a che spartire con una soluzione file based simile ad access...


La stringa di connessione mi sembra preveda l'utilizzo del percorso di file , quindi suppongo che se piazzo il file mdf sul server mi diventa un sistema file-server tipo MsAccess.


e' stato "inventato" un modo di "attaccare" un database al momento della connessione stessa.. come probabilmente saprai, un database SQL Server e' essenzialmente un'entita' logica che si appoggia per la propria area di storage su piu' file fisici... perche' il database sia visibile a SQL Server, esso deve essere "registrato" (o attaccato) tramite apposite istruzioni, ad esempio le vecchie procedure di sistema sp_attach_xxxx mantenute per compatibilita' con SQL Server 2000 (anche se deprecate), e la nuova istruzione CREATE DATABASE ..... FOR ATTACH...
questo e' stato parzialmente integrato nella modalita' di connessione che provvede, qualora impostata in tal senso, ad attaccare il database in base alla posizione del file dati primario (i file dati secondari ed i transaction log devono risiedere nella stessa cartella del file dati primario) se il database non fosse gia' registrato..
questa impostazione e' valida per tutte le edizioni di SQL Server, al contrario delle User Instances (o RANU).. la particolaria' dei database attaccati in questo modo e' che il relativo nome logico di database viene autogenerato dal sistema in base al posizionamento fisico del file dati primario, con un limite di 1128 caratteri...
quindi il database Pubs, attaccato dalla cartella c:\Program Files\Vendor\Applicazione\Files\pubs_data.mdf avra' un nome logico "poco bello"  ...
ma per l'uso che solitamente ne fa un applicativo poco importa, visto che la connessione viene stabilita in base al nome fisico del file ed il nome logico solitamente non viene mai utilizzato all'interno degli applicativi...
non ho pero' mai verificato cosa pero' succeda nel caso una stored procedure referenzi un oggetto con la nomenclatura a tre livelli
Database.Schema.NomeOggetto... sarebbe interessanto farlo


E' qui che non riesco a capire, quando andai al convegno Microsoft a Roma venne detto che per distribuire un'applazione Web bastava che venisse distribuito il file mdf (con tutto il resto), semplificando cosi la WebHosting di un'applicazione che utilizza dati Sql Server.
Potete darmi ulteriori spiegazioni?

mi pare alcuanto azzardata un'affermazione simile
non penso che la "maggioranza" delle applicazioni, anche web, si basino su SQLExpress che consente in questo senso la possibilita' di utilizzare le RANU... diciamo che puo' essere una soluzione per scenari "di nicchia", ma al di la' di cio', possono consentire tale possibilita' viste le "idiosincrasie" delle versioni MSDE ed Express..
i relativi database hanno infatti l'opzione autoclose impostata, che fa si che il dababase venga "chiuso" al momento della chiusura dell'ultima connessione attiva.. questo fa si che i file di database siano "copiabili" sul file system, anche se logicamente il database resta registrato sull'istanza... cio' significa che i file non possono essere spostati ma solo copiati... il passo successivo sono le RANU, dove alla chiusura dell'ultima connessione attiva, l'istanza di SQLExpress viene chiusa, quindi i file di database sono liberamente spostabili... se copi l'intera cartella dell'applicazione in altra posizione e la riesegui, la registrazione del database avverra' su una nuova apposita istanza privata di SQLExpress, senza causare alcun inconveniente..
tornando ai database "distaccati", SQLX e MSDE impostano anche l'opzione relativa al modello di recupero "simple", dove il transaction log viene continuamente riciclato nel suo spazio, visto che, in parole povere, non mantiene parte attiva di log relativamente alle transazioni committate... una chiusura e distacco del database rendono possibile lo spostamente del database relativamente al suo solo file dati senza transaction log, che verra' automaticamente "ricreato" all'apertura (cioe' al riattacco) del database stesso..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

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.