Configurazione di un database diverso da Access : SQL Server

Access può ritenersi la soluzione ideale per una piccola azienda ma già per configurare una media impresa è consigliabile scalare verso un database tipo Sql Server. Microsoft  stessa sconsiglia l’uso di Access per più di 5 postazioni di lavoro anche se chi scrive ritiene che questo numero possa essere esteso di qualche unità. Altri motivi che potrebbero fare preferire database diversi possono essere know-how aziendale, sistemi di sicurezza o di backup più adeguati. Anche in questo caso si consiglia una accurata analisi con la consulenza di un tecnico.

Se la scelta ricade su altri database di casa Microsoft come MSDE o SQL SERVER questi prevedono un funzione di import di una base dati Access pertanto il porting è piuttosto semplice. Altri database possono rendere questa operazione un pò più complessa o addirittura necessario riscrivere le tabelle ma se si hanno le competenze su uno specifico database può valerne la pena.

Per eseguire il porting da DB Access a SQL Server :

  1. Accedere a SQL Server Management Studio (o Enterprise Manager per versioni precedenti alla 2005), creare un nuovo database, quindi selezionare la voce "Importa Dati" da “Tutte le attività” selezionando il file Access come file sorgente. Questa funzione importa la struttura delle tabelle e i dati ma potrebbe non ricreare alcune parti della struttura per cui è necessario eseguire i punti seguenti.
  2. Ricreare tutti gli indici. Le tabelle create non riportano gli indici. In questo caso Gea.Net dovrebbe essere in grado di operare ugualmente tuttavia con il popolarsi delle tabelle si riscontrerebbe un notevole degrado delle prestazioni. Si consiglia di ricreare quantomeno le Primary Key così come definite nel database Access di origine. Per evitare di svolgere queste operazioni manualmente ci si può avvalere dell’importazione della struttura (referenziato nel paragrafo successivo). Inoltre è buona norma creare chiavi secondarie in base all’uso che viene fatto di Gea.Net avvalendosi della consulenza di un tecnico qualificato come amministratore di database.
  3. Solo per versioni precedenti la 4.0. Le tabelle FC_DISPONIBILITA e FC_COMMESSE si avvalgono di due campi contatore (rispettivamente DC_CONTATORE e OC_CONTATORE). Nel porting questi due campi vengono creati erroneamente con tipo timestamp anziché numerico identità. E’ necessario ricreare i contatori cambiando il tipo dei due campi e impostando la colonna identità nelle proprietà della struttura (per Sql Server 2000 IDENTITY = Yes sulle proprietà del campo) altrimenti non è disponibile la funzione di calcolo del fabbisogno.

 

Porting o upsizing da DB Access a SQL Server 2008 :

Sql Server 2008 mette a disposizione la funzione "Import data" che permette di importare la struttura e i dati da Access.

Import data può causare alcuni problemi tipo :

Per ovviare a questo problema è possibile usare “Importa struttura” e “Importa Dati” da “Configurazione”, “Dati anagrafici”, altrimenti deve essere rivista la struttura a mano una volta importato il database.

 

DbConnectionString per database diverso da Access

Ma ora che abbiamo portato i nostri dati da un database ad un altro cosa dobbiamo fare in Gea.Net ?

E’ sufficiente cambiare la DbConnectionString . Se abbiamo optato per MSDE o SQLSERVER l’apposito comando “SQL SERVER” genera qualcosa del tipo :

Provider=SQLOleDb.1;Persist Security Info=True;User ID=sa;Password=;Initial Catalog=GEA;Data Source=localhost;Current Language=English;

Che dovrà essere modificata indicando le proprie impostazioni. Ad esempio Data Source dovrà tenere il nome del server, Initial Catalog sarà il nome del database, ecc.

La variabile Current Language = Italian ( lingua per le composizioni dei comandi ) potrebbe non essere supportata da SQL server in versione inglese.

Qualora ci fossero problemi nella creazione della DbConnectionString o la verifica di questa desse esito negativo possiamo creare un  file  UDL (Universal Data Link) ed aprirlo per avere un interfaccia grafica che può aiutarci.

Maggiori informazioni sarà possibile rintracciarle in rete, ma dato l’argomento è bene avvalersi di un tecnico competente o di un Amministratore di database.  

 

Copia (Backup) di Sql Server

Per avere la certezza di non perdere il lavoro fatto occorre copiare il database almeno ogni tre giorni, anche se l’ideale sarebbe farlo tutti i giorni. Quando il database è Access o MySql l’operazione di copia e di successivo ripristino è piuttosto semplice in quanto è sufficiente copiare il file o la cartella contenente il database, magari quando le applicazioni che lo usano non sono aperte. Con SqlServer come per altri database che forniscono servizi, questa la semplice operazione di copia del file contenente il database non è consentita se non facendo il detach.  

Per fare le copie di salvataggio manualmente è possibile utilizzare Sql server Management Studio connettendo il server su cui è depositato il database. Viene mostrato l’elenco dei database presenti sul server e per ognuno di essi è possibile lanciare una specifica funzione attivabile cliccando il tasto destro del mouse dal nome del database a cui siamo interessati.

 

 

A questo punto verrà mostrata una finestra che mostra sulla sinistra le funzioni “Generale” e “Opzioni”. Scegliere “Generale” per indicare il database di origine e il file di destinazione, quindi scegliere “Opzioni” indicando “Sovrascrivi tutti i set di backup esistenti”

 

  

 

Sarà creato il file come da voi indicato che potrà essere copiato liberamente su DVD o disco esterno in modo che possa essere trasferito e conservato in altro luogo.

 

Pianificazione della copia di Sql Server

Il modo più semplice per procedere a backup è pianificare le copie con SQL Agent ad una certa ora affinché non debba essere eseguita manualmente.

Se anche si dispone della versione Express che non permette di pianificare il backup è possibile aggirare l’ostacolo seguendo i seguenti passi :

1) Per prima cosa bisogna salvare lo script. Invece di eseguire il backup come visto in precedenza, clicchiamo sul pulsante “Script” posto in alto, quindi scegliamo la seconda opzione  “Genera script azione su file”. Ci viene creato un file che chiamiamo [nomedatabase].sql.

2) Nella stessa cartella in cui risiede lo script sql, creiamo un file batch che possiamo chiamare [nomedatabase].bat come di seguito facendo attenzione a sostituire i nomi indicati in giallo con i parametri relativi alla vostra configurazione

SETLOCAL

 

SET BKPFILENAME=GEA

SET BKPEXT=bak

 

SET MONTH=%DATE:~3,2%

SET DAY=%DATE:~0,2%

SET YEAR=%DATE:~6,4%

SET HOUR=%TIME:~0,2%

SET MINUTE=%TIME:~3,2%

SET SECOND=%TIME:~6,2%

SET BKPFILE=%BKPFILENAME%-%YEAR%-%MONTH%-%DAY%-%HOUR%-%MINUTE%-%SECOND%.%BKPEXT%

 

SQLCMD -S NOMESERVER -i %BKPFILENAME%.sql

 

IF EXIST %BKPFILENAME%.%BKPEXT% RENAME %BKPFILENAME%.%BKPEXT% %BKPFILE%

3) Possiamo schedulare l’esecuzione del nostro file [nomedatabase].bat tra le operazioni pianificate di Windows, raggiungibile da Start, Programmi, Accessori, Utilità di sistema, Operazioni pianificate.

 

Ripristino di Sql Server

Se si è verificato un problema grave potrebbe essere che abbiate dovuto sostituire il server, quindi dopo aver reinstallato Sql server occorre creare un nuovo database. Dopo avere inserito il nome ed eventualmente altri parametri, confermate per procedere alla creazione.

 

 

Ora procediamo con il ripristino con il solito click del tasto destro del mouse, indicando il nome del database di destinazione, il nome del file di origine e, selezionando “Opzioni”, spuntare “Sovrascrivi il database esistente (WITH REPLACEMENT)”.

 

  

 

Permessi e autorizzazioni su SQL Server 2008

Creare l’account di accesso

Per differenziare le autorizzazioni a livello di database è necessario creare un account di accesso al database per ogni utente (tasto destro del mouse, quindi “Nuovo account di accesso ..”).

Durante la creazione dell’account, configurarlo indicando la password di accesso. Se l’account è di tipo  sysadmin (come l’account sa predefinito) si avrà libero accesso alle tabelle indipendentemente dalle impostazioni che si assegneranno a livello di tabella.

Durante la creazione dell’account di accesso dovremo assegnarlo al database definendo l’utente con cui questo lo identifica. Per semplificare possiamo assegnare il nome dell’utente uguale al nome dell’account di accesso.

 

Creare l’utente (user) del database

Ora che abbiamo definito l’account dovremo assegnare i diritti ad ogni tabella del nostro database.

Per ogni tabella del database dovremo cliccare il tasto destro del mouse, quindi “Proprietà”, poi “Autorizzazioni”. Con il tasto “cerca”, poi “sfoglia”, troveremo l’utente a cui potremo assegnare i diritti di “Aggiornamento”, “Eliminazione”, “Inserimento” e soprattutto “Selezione”.

Ricordiamo che se non viene consentita la selezione riceveremo un errore applicativo ad ogni tentativo di accesso alla tabella.

Ultima operazione : dovremo indicare il nostro acconto di accesso sulla ConnectionString in “Configurazione”, “Dati Anagrafici” per ogni utente.

 

Creare i ruoli (roles)

Creando tutti gli utenti della nostra organizzazione possiamo definire al dettaglio le autorizzazioni. Ma questa attività può risultare molto lunga e noiosa inoltre andiamo incontro a modifiche ripetitive nel momento in cui un utente cambia il tipo di attività in azienda. Per superare tutto questo possiamo sfruttare i ruoli (roles) del database. Sarà sufficiente creare un ruolo per ogni gruppo di persone della nostra azienda (ad esempio “amministrazione”, “magazzino”, ecc.) dopodiché assegneremo uno o più utenti al ruolo. In questo modo se un utente cambia il ruolo in azienda sarà sufficiente spostarlo da un ruolo a un altro.

Una volta definite le autorizzazioni del gruppo potremo sempre aggiungere o togliere permessi ai singoli utenti. Si ricordi che le autorizzazioni di utenti e ruoli si sovrappongono pertanto ad un utente potremo negare un permesso definito nel ruolo di appartenenza o assegnare un permesso non previsto dal ruolo.

Iniziamo a definire un nuovo ruolo. Ne troviamo alcuni già presenti e definiti da sistema ma per evitare confusione ne creiamo uno nostro.

Al nostro ruolo assegniamo un nome e aggiungiamo gli utenti di appartenenza al gruppo.

Ora è necessario indicare all’account di accesso che oltre a verificare i permessi dell’utente dovrà anche verificare i permessi del nostro nuovo ruolo.

Ora possiamo andare sulle singole tabelle e assegnare i permessi nello stesso modo con cui abbiamo fatto per gli utenti. Se ora facciamo “Cerca” vedremo sia gli utenti che i ruoli.

 

Se adesso torniamo sulle proprietà del ruolo troveremo la tabella a cui abbiamo assegnato i permessi.

Ora siamo in una situazione ottimale per la nostra gestione. Abbiamo creato un account di accesso per ogni utente della nostra organizzazione, ma se due utenti hanno le stesse autorizzazioni possiamo crearne uno solo.

Abbiamo organizzato la nostra azienda per gruppi (ruoli) di appartenenza e ogni utente appartiene almeno ad un ruolo.

Abbiamo definito tutti i permessi a livello di ruolo. Solo le eccezioni vengono definite sul singolo utente ( ad esempio se il responsabile è in ferie potremmo assegnare maggiori permessi a chi ne fa le veci ).

A questo punto ogni nuovo utente potrà essere inserito in modo molto veloce perché sarà sufficiente creare un nuovo account di accesso, creare un nuovo utente e assegnare l’utente al ruolo.

Allo stesso modo anche il cambio di mansioni all’interno di una organizzazione è veloce quanto assegnare all’utente un nuovo ruolo del database.

 

Modificare la struttura delle tabelle

Utilizzando SQL Server 2008 Management Studio potrebbe essere necessario modificare la struttura di alcune tabelle ed imbattersi in questo errore

 “Saving changes is not permitted. The changes that you have made require the following tables to be dropped and re-created. You have either made changes to a table that can't be re-created or enabled the option Prevent saving changes that require the table to be re-created.” 

Se si prova ad inviare un comando “ALTER TABLE” tuttavia il comando viene eseguito correttamente. Questo errore è causato da una mancanza di autorizzazione da parte di Management Studio alle modifiche della struttura delle tabelle. In effetti SQL Server Management Studio per default ha attivato l’opzione “Prevent Saving Changes That Require Table Re-creation”.  Per disabilitare questa opzione

1) Aprire SQL Server 2008 Management Studio (SSMS). Click sul menu “Tools” menu quindi click su “Options...”.

 

2) Nel navigation pane, espandere il nodo Designers quindi selezionare “Table and Database Designers”. In “Table Options” deselezionare “Prevent saving changes that require the table re-creation” e confermare con “OK”. 

 

Una volta disabilitata l’opzione sarà possibile modificare la struttura. La modifica comporterà la segnalazione di un dialogo di Warning a cui sarà necessario rispondere “YES” per confermare le modifiche.