SQL 4 Domande

giovedì 19 novembre 2009 - 09.01

Blacky Profilo | Newbie

Ciao! ho dei dubbi che mi piacerebbe chiarire.
Vi espongo (spero chiaramente) lo scenario.
SQL Server 2005 Express che gira sopra Windows XP SP3.

Prima domanda: volevo passare un domani, con calma alla versione 2008 Express.
Esiste una procedura da seguire? Oppure basta installare il 2008Exp e poi importare il backup del database 2005?

Seconda domanda: Sempre in ottica di migrazione, oltre ovviamente al DB dove ho i miei dati, va esportato anche "qualcosa" dei database di sistema (master, model, msdb, tempdb), oppure non è necessario?

Terza domanda: Nelle impostazioni del mio Database ho come autenticazione Server: "Autenticazione di SQL Server e di Windows", questo significa che è possibile accedere al database o con un utente configurato nel windows(XP) nel quale gira SQL oppure anche con un utente esterno purchè sia configurato e creato come utente nel database. Naturalmente, un utente che accede al database mediante una webform, si presenta al mio DB come utente ASPNET e non ovviamente come quello del suo pc. SE -se- le cose che ho scritto fino a qui son corrette, la domanda è: dato che gli utenti sono oggetti del singolo db all'interno dell'istanza, esportando il DB esporto anche quelli, è corretto?

Quarta domanda: Nel DB ho 1 istanza, nell'istanza ho 2 DB: DB_A e DB_B.
Nei vari DB ci sono alcune tabelle [ ma và? :-) ] quindi mettiamo caso che voglia esportare una tabella dal primo DB al secondo DB.

Caso A) Tabella è standAlone ossia non ha FK con nessuna altra tabella del sistema.
Che tecnica posso usare per esportare questa tabella? Con il menù attività, posso creare la struttura della tabella semplicemente generando lo script di CREATE TABLE, ma per quanto riguarda i dati?
Come posso fare un dump e poi un import?
Caso B) Tabella con FK es: la tabella A ha una FK su B, cosa si fà in questo caso? :-)

Grazie davvero!
Blacky/Francy



speedx Profilo | Junior Member

Risposta 1)
il passaggio da 2005 a 2008 è assolutamente senza problemi, puoi addiritura puoi fare il detach e l'attach o il backup ed il restore

Risposta 2)
in genere non server esportare i db di sistema

Risposta 3) la windows autentication o SQL server autentication la scegli durante l'installazione o anche successivamente dal configuratore, in genere io preferisco definire utenti che utilizzano il db su SQL. Se sposti il db da una versione all'altra non sposti anche l'utenza.... almeno non mi pare

Risposta 4)
Caso A) Tabella è standAlone ossia non ha FK con nessuna altra tabella del sistema.
Che tecnica posso usare per esportare questa tabella? Con il menù attività, posso creare la struttura della tabella semplicemente generando lo script di CREATE TABLE, ma per quanto riguarda i dati?
>>Non ricordo se sulla versione express c'è l'esporta/importa dati... in ogni caso puoi creare una query tipo INSERT INTO .... SELECT ... FROM
se i db sono su pc diversi devi linkarli.... mi pare sia possbile...

Caso B) Tabella con FK es: la tabella A ha una FK su B, cosa si fà in questo caso? :-)
nel caso di FK le disabiliti, copi i dati e le riabiliti




//// Marcello C.

Brainkiller Profilo | Guru

>Risposta 1)

Mi pare di ricordare che durante l'upgrade non viene cambiata la compatibility level ai database ma devi farlo tu.
Quindi post upgrade verifica il livello che può essere 80, 90 (per SQL 2005), o 100 (per SQL 2008)

sp_dbcmptlevel 'DatabaseName'

e se necessario upgrada a 100 con:

ALTER DATABASE databasename SET COMPATIBILITY_LEVEL = 100

Maggiori info sul compatibility level:
http://msdn.microsoft.com/en-us/library/bb510680.aspx

Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

lbenaglia Profilo | Guru

>Prima domanda: volevo passare un domani, con calma alla versione
>2008 Express.
>Esiste una procedura da seguire? Oppure basta installare il 2008Exp
>e poi importare il backup del database 2005?
Oltre a quanto già esposto da Marcello e David, ricordati che dopo aver eseguito l'attach/restore devi ricostruire gli indici, riaggiornare le statistiche in modalità full scan ed assegnare un nuovo owner al db.

>Seconda domanda: Sempre in ottica di migrazione, oltre ovviamente
>al DB dove ho i miei dati, va esportato anche "qualcosa" dei
>database di sistema (master, model, msdb, tempdb), oppure non
>è necessario?
Dato che utilizzi l'Express Edition non hai job né SSIS packages da migrare, ma restano sempre le login!
Per migrarle leggi attentamente questo articolo della Knowledge Base:
http://support.microsoft.com/kb/918992/en-us

>Terza domanda: Nelle impostazioni del mio Database ho come autenticazione
>Server: "Autenticazione di SQL Server e di Windows", questo significa
>che è possibile accedere al database o con un utente configurato
>nel windows(XP) nel quale gira SQL oppure anche con un utente
>esterno purchè sia configurato e creato come utente nel database.
>Naturalmente, un utente che accede al database mediante una webform,
>si presenta al mio DB come utente ASPNET e non ovviamente come
>quello del suo pc. SE -se- le cose che ho scritto fino a qui
>son corrette, la domanda è: dato che gli utenti sono oggetti
>del singolo db all'interno dell'istanza, esportando il DB esporto
>anche quelli, è corretto?
No.
In SQL Server esistono 2 tipologie di "utenti": le Login e gli User Accounts.
Le login (definite a livello di istanza) sono utilizzate per eseguire l'autenticazione all'istanza, quindi servono per accedere a SQL Server.
Gli User Accounts (a livello di database) sono mappati ad una login e definiscono le permission che ha un utente sugli oggetti presenti nel db.
Quando esegui l'attach o il restore di un db su una nuova istanza, ti porti dietro automaticamente gli User Accounts (in quanto presenti nella tabella di sistema sys.sysusers del db) e le relative permission sugli oggetti ma perdi l'associazione con le corrispettive Logins (anche se presenti con stesso nome e password nell'istanza di destinazione) dato che il Secure ID (SID) sarà differente (a meno di averle esportate ed importate mantenendo il SID originario).
Per ricreare l'associazione puoi utilizzare il comando:

CREATE USER user_name FOR LOGIN login_name;

>Quarta domanda: Nel DB ho 1 istanza, nell'istanza ho 2 DB: DB_A
>e DB_B.
>Nei vari DB ci sono alcune tabelle [ ma và? :-) ] quindi mettiamo
>caso che voglia esportare una tabella dal primo DB al secondo
>DB.
>
>Caso A) Tabella è standAlone ossia non ha FK con nessuna altra
>tabella del sistema.
>Che tecnica posso usare per esportare questa tabella? Con il
>menù attività, posso creare la struttura della tabella semplicemente
>generando lo script di CREATE TABLE, ma per quanto riguarda i
>dati?
>Come posso fare un dump e poi un import?
Se le righe non sono molte, da SSMS puoi generare oltre alla struttura della tabella anche i comandi di INSERT delle singole righe, diversamente puoi affidarti all'utility command line bcp.exe per esportare su file di testo i dati ed eseguire l'operazione inversa per reimportarli sull'istanza di destinazione.

>Caso B) Tabella con FK es: la tabella A ha una FK su B, cosa
>si fà in questo caso? :-)
La stessa identica cosa, avendo cura di ricreare e popolare per prima la tabella dalla parte 1 della relationship.

>Grazie davvero!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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