realizzazione di una base di dati per la memorizzazione di dati provenienti da sensori di un...
DESCRIPTION
TRANSCRIPT
UNIVERSITÀ DEGLI STUDI DI TRIESTE
FACOLTÀ DI INGEGNERIA
CORSO DI LAUREA IN INGEGNERIA DELL’INFORMAZIONE
CURRICULUM INFORMATICA
Realizzazione di una base di dati per la memorizzazione di dati provenienti da sensori di un
impianto fotovoltaico.
RELATORE:
Prof. Maurizio FERMEGLIA
ANNO ACCADEMICO 2011-2012
LAUREANDO:
Michele Furlanetto
1. INTRODUZIONE...........................................................................4
2. ANALISI.......................................................................................5
2.1. Sistema....................................................................................5Sensori............................................................................................5
Il sistema fotovoltaico monitorato e le misure elettriche...........5Sensori metereologici..................................................................6
2.2. Dataloggers.............................................................................6
2.3. Calcolatore...............................................................................63DOM..........................................................................................6CommNetEG................................................................................6GidasViewer................................................................................7
2.4. Obiettivi...................................................................................7
3. PROGETTAZIONE.........................................................................8
Lo schema Web.............................................................................10Analisi di stabilità..........................................................................10Prestazioni....................................................................................13
4. IMPLEMENTAZIONE..................................................................14
4.1. vData_GetAll..........................................................................14
4.2. vSortedMinData_GetAll.........................................................15
4.3. vSortedMaxData_GetAll........................................................17
4.4. vSortedInstantaneousData_GetAll........................................19
4.5. vSortedAverageData_GetAll..................................................20
4.6. vSortedWindData_GetAll.......................................................22
4.7. vSortedData_GetAll...............................................................23
4.8. fSortedData_WithinDate.......................................................24
4.9. fStabilityVoltage....................................................................25
4.10. fStabilityPower.......................................................................26
4.11. fStabilityIrradiance................................................................27
4.12. fStabilityCheck1.....................................................................28
4.13. fStabilityCheck2.....................................................................29
4.14. fStability_GetAll.....................................................................30
2
4.15. fStabilityAlternative_GetAll...................................................32
4.16. fStability_WithinDate............................................................33
4.17. fStabilityAlternative_WithinDate...........................................34
4.18. fWind_WithinDate.................................................................35
4.19. fSortedData_ToXML...............................................................36
4.20. fStability_ToXML....................................................................37
4.21. fStabilityAlternative_ToXML..................................................38
4.22. fWind_ToXML........................................................................39
5. CONSIDERAZIONI FINALI...........................................................40
3
1. INTRODUZIONE
All’interno dell’Università degli Studi di Trieste è stato installato, nel 2011, un laboratorio per lo studio delle prestazioni di dispositivi fotovoltaici.
Il laboratorio è provvisto di un sistema di monitoraggio di dati climatici ed elettrici installato della ditta LSI LASTEM1, e realizzato con sensori progettati e prodotti dalla stessa.
Questi strumenti dialogano mediante dei dispositivi denominati Data Logger con un calcolatore fornito dalla stessa LSI LASTEM e dotato di una suite software proprietaria necessaria per l’acquisizione dei dati.
Tra le possibili opzioni di stoccaggio dei dati offerte dalla suite, si fa notare la presenza di una base di dati, vincolata all’uso del motore MICROSOFT® SQL SERVER® EXPRESS Edition.
Con questa premessa, obiettivo di questa tesi sarà estendere le funzionalità della base di dati per la fruizione da remoto.
Inoltre, si vuole automatizzare alcune operazioni di analisi dei dati.
Il progetto sarà esposto in questo documento in ordine di analisi, una breve panoramica di com’è formato l’intero sistema in produzione, progettazione, le linee guida seguite durante lo sviluppo, implementazione del codice necessario e infine le conclusioni.
1 http://www.lsi-lastem.it/4
2. ANALISI
E’ possibile suddividere il sistema di monitoraggio in più sezioni: i sensori, i data logger ed infine il calcolatore, di cui segue una breve descrizione.
2.1. SensoriI sensori misurano sia grandezze elettriche sia climatiche; sono installati all’esterno dell’edificio e sono adibiti alla rilevazione dei dati. Essi possono essere suddivisi in base al tipo di misura rilevata, se elettrica oppure climatica.
Il sistema fotovoltaico monitorato e le misure elettricheE’ composto di moduli fotovoltaici, convertitori e carichi.
Vi sono 5 moduli di 3 diverse tecnologie e di due produttori (Q.Cells e First Solar):
Q.Smart 95, con angolo di tilt 10°; Q.Smart 95, con angolo di tilt 34°; Q.Pro 230, con angolo di tilt 10°; Q.Pro 230, con angolo di tilt 34°; FS-272, con angolo di tilt 34°.
Per ogni coppia modulo-convertitore dei sensori provvedono 4 misure, riassunte nello schema seguente:
Figura 1 – Schema delle misure elettriche
Ulteriori analisi dei moduli esulano da questo trattato, ma può essere di interesse che in origine il progetto dell’impianto prevedesse un sesto modulo, del quale se ne può vedere traccia all’interno del database.
5
I_outI_in
V_in
V_ou
t==
Modulo Convertitore Resistenza
Sensori metereologiciQuesto gruppo di sensori è composto da:
Piranometro, con angolo di tilt 10°; Piranometro, con angolo di tilt 34°; Piranometro, con angolo di tilt 0° e fascia ombreggiante; Cella campione in silicio monocristallino Cella campione in silicio policristallino Termoigrometro; Anemometro; 5 sensori di temperatura, ognuno associato ad un modulo fotovoltaico.
2.2. DataloggersQuesti dispositivi, di fattura LSI LASTEM, permettono l’interfacciamento dei sensori con il calcolatore.
Sono tre, di cui uno dedicato ai sensori metereologici e due al settore fotovoltaico.
Questi dispositivi, oltre a effettuare il prelievo dei dati dai sensori, ne fanno una prima elaborazione: per ogni minuto di registrazione e in base al sensore di origine, forniscono il valore istantaneo, massimo, minimo e minimo.
2.3. CalcolatoreIl calcolatore fornito da LSI LASTEM è un portatile di marca HP®, modello Compaq 6037s, con sistema operativo Microsoft® Windows Vista® e di cui riporto i punti salienti della configurazione hardware:
Processore: Intel® Core™2 Duo T5670 @1.80GHz; Memoria RAM: 2.00 GB; Capacità Hard Disk: 250 GB.
In tale portatile è stata installata, da parte del fornitore, la suite software proprietaria di LSI LASTEM necessaria all’acquisizione ed al salvataggio dei dati. Tale suite si compone dei programmi qui di seguito elencati.
3DOM3DOM (Free Datalogger Oriented Manager) è il software contenente i driver per i datalogger e per gli strumenti di rilevazione; consente la configurazione dei sensori e la visualizzazione dei dati istantanei. Inoltre, permette la configurazione dei servizi di stoccaggio dati, tra cui il database Gidas.
CommNetEGCommNetEG è un programma che permette la ricezione dei dati registrati dagli strumenti LSI LASTEM, sia in modalità manuale che automatica.
6
GidasViewerGidasViewer è un programma per la visualizzazione e la rielaborazione dei dati presenti nel database Gidas.
2.4. Obiettivi
Quello che si vuole realizzare è una infrastruttura in grado di fornire i dati memorizzati secondo le seguenti strutture:
Tutti i dati metereologici ed elettrici memorizzati, organizzati in base alla data e all’ora di campionamento;
I dati metereologici ed elettrici memorizzati, organizzati in base alla data e all’ora di campionamento e di attuale utilizzo nelle linee di ricerca attive;
I dati metereologici ed elettrici memorizzati, organizzati in base alla data e all’ora di campionamento, di attuale utilizzo nelle linee di ricerca attive e relativa analisi di stabilità;
I dati provenienti dall’anemometro;
Partendo poi dai punti precedenti, si vuole fornire solamente i dati relativi a un determinato intervallo di tempo;
infine, si vuole fornire i dati in formato XML.
7
3. PROGETTAZIONE
Per soddisfare le richieste di cui il punto 2.4, è stato adottato un approccio di tipo Bottom-Up, di cui lo schema seguente riassume quanto implementato:
Figura 2 – Schema delle dipendenze
8
CORE Schema
WEB Schema
Table
RawValue
Table
ValueConfiguration
Table
InstrumentMeasure
Table
ElabTypeList
View
vData_GetAll
View
SortedAverageData
View
SortedInstantaneousData
View
SortedMinData
View
SortedMaxData
View
SortedWindData
View
SortedData
-Voc-W-Vmp-VoltageThreshold
«Function»StabilityVoltage
«Function»StabilityCheck2
-Pn-PowerThreshold
«Function»StabilityPower
-RadDIFFusaThreshold
«Function»StabilityRadiance
«Function»StabilityCheck1
-DateStart-DateStop
«Table valued Function»Stability_WhitinDate
-DateStart-DateStop
«Table valued Function»StabilityAlternative_WhitinDate
«Table valued Function»StabilityAlternative_GetAll
«Table valued Function»Stability_GetAll
«Table valued Function»Stability_ToXML
«Table valued Function»StabilityAlternative_ToXML
-DateStart-DateStop
«Table valued Function»WindData_WhitinDate
«Table valued Function»WindData_ToXML
-DateStart-DateStop
«Table valued Function»SortedData_WhitinDate
«Table valued Function»SortedData_ToXML
Le tabelle RawValue, ValueConfiguration, InstrumentMeasure ed ElabTypeList appartengono tutte allo schema Core, creato e gestito dal programma 3DOM durante l’installazione.
Viene riportato in Figura 3 lo schema logico delle suddette tabelle.
TABELLA CAMPIRawValue ConfigurationID*, ElaborationDate,
ElaborationValue, ValidPercentageValueConfiguration ValueConfigurationID,
InstrumentConfigurationID*, MeasureIndex*, ElaborationBaseIndex, ElaborationItemIndex*, ElaborationType*, Position
InstrumentMeasure InstrumentConfigurationId, MeasureIndex, MeasureName, MeasurePrecision, MeasureUnit, MeasureProperty, MeasureId
ElabTypeList IdElabType, ElabTypeString, ElabTypeToDo
Figura 3 - Schema logico dello schema Core
9
Lo schema Web Raccoglie l’implementazione effettiva del codice e delle viste sviluppate per questo progetto.
Per quanto possibile, si è cercato di mantenere la nomenclatura usata dai progettisti della base di dati.
Le viste denominate con ‘Sorted’, la cui implementazione è riportata dal paragrafo 4.2 al 4.6, hanno un duplice scopo: il primo, fondamentale, è quello di ‘rimodellare’ la struttura della tabella Core.RawValue, in modo da ridurre la chiave primaria al solo campo ElaborationDate, portando una tabella della forma
ELAB.DATE MEASURENAME ELABO.TYPE ELAB.VALUE<data-ora1> <misura-1> <elaborazione-1> <valore1><data-ora1> <misura-1> <elaborazione-2> <valore2><data-ora1> <misura-2> <elaborazione-1> <valore3><data-ora1> <misura-2> <elaborazione-2> <valore4><data-ora2> <misura-1> <elaborazione-1> <valore5>
… … … …
Nella forma
ELAB.DATE MISURA-1 ELAB-1
MISURA-1 ELAB-2
MISURA-2 ELAB-1
…
<data-ora1> <valore1> <valore2> <valore3> …<data-ora2> <valore5> … … …
La seconda funzione di ogni vista è quella di operare un taglio verticale alla tabella appena formatasi, evidenziando solo il sottoinsieme dei dati di interesse.
Analisi di stabilitàSui dati provenienti dai pannelli fotovoltaici viene svolta una suddivisione in dati stabili e instabili.
In Figura 4 è possibile notare la differenza tra i due criteri utilizzati per tale suddivisione. Entrambi si basano sull’analisi dei dati relativi alla potenza (P) erogata dal modulo fotovoltaico e dall’irradianza diffusa (G), mentre il criterio1 richiede una ulteriore analisi, basata sulla tensione (V).
10
Figura 4 – Criteri di stabilità
Al fine di semplificare l’esposizione, nel resto dell’analisi verrà esaminato il criterio 1, riportando tra parentesi quadre [] le differenze con il criterio 2.
Un dato si ritiene stabile se soddisfa contemporaneamente le tre condizioni seguenti [solo le prime due]:
G) la radiazione diffusa dev’essere maggiore di Sogli aGW
m2 ;
Viene implementato al punto (4.11).
P) la differenza di potenza tra il valore osservato e quello atteso deve risultare
inferiore a Sogli aP, ovvero se vale
|Pmisurata−Pattesa
Pattesa|<Sogli aP
Dove Pattesa viene calcolata secondo l’equazione
Pattesa=Pn∗G
100
Viene implementato al punto (4.10).
V) la differenza di tensione tra il valore osservato e quello atteso deve risultare
inferiore a Sogli aV , ovvero se vale
|V misurata−V attesa
V attesa|<Sogli aV
Dove V attesa viene calcolata secondo l’equazione
V attesa=V mp+β
100∗V OC∗(T−25)
11
Criterio 1
PV G
Criterio 2
P
G
AND
AND
Viene implementato al punto (4.11).
Si ha quindi che l’analisi di stabilità dei dati provenienti da un singolo modulo richiede l’immissione di 7 [i primi 3] parametri da parte dell’utente:
Sogli aP limite entro il quale il rapporto viene considerato stabile
Sogli aP limite entro il quale il rapporto viene considerato stabile
Pn potenza nominale del modulo;
Sogli aP limite entro il quale il rapporto viene considerato stabile
V mp tensione del punto di massima potenza a condizioni STC2
V OC tensione di circuito aperto a condizioni STC
β Coefficiente di temperatura di V OC
Figura 5 - Parametri dell'analisi di stabilità
Le soglie sono a discrezione dell’utente, in base alla rigidità richiesta dall’analisi.
Gli altri valori sono invece reperibili nei datasheet dei moduli fotovoltaici.
Inoltre, per ogni coppia tensione-potenza sono richiesti anche
T temperatura istantanea del modulo in esameG irraggiamento registrato dal piranometro avente lo stesso
angolo di tilt del modulo
2 Temperatura di cella 25° C, irraggiamento 1000 W/m2, con distribuzione spettrale di riferimento (massa d’aria AM 1,5).
12
PrestazioniL’introduzione di un indice nel campo ElaborationDate della tabella Core.RawValue ha permesso l’abbattimento del tempo di elaborazione dovuto alle operazioni delle viste vSortedMinData_GetAll, vSortedMaxData_GetAll, vSortedAverageData_GetAll, vSortedInstantaneousData_GetAll, vSortedWindData_GetAll, riducendo il costo dell’elaborazione a sole operazioni di Hash Matching.
Se da un lato questo indice conduce a un incremento di prestazioni, dall’altro aumenta considerevolmente lo spazio occupato su disco;
per dare un idea dei numeri in gioco, si segnala che la tabella Core.RawValue consta, alla data di stesura di questo documento, di più di 50 milioni di record. Si rimanda al capitolo sulle considerazioni finali per un ulteriore approfondimento.
13
4. IMPLEMENTAZIONE
4.1. vData_GetAllCostituisce le fondamenta dello schema sviluppato, ha il compito di estrarre i valori delle misure memorizzate.
CREATE VIEW [Web].[vData_GetAll]
AS
SELECT RV.ElaborationDate, IM.MeasureName, RV.ElaborationValue, ETL.ElabTypeString AS Elaboration
FROM Core.RawValue AS RV INNER JOIN Core.ValueConfiguration AS VC ON RV.ValueConfigurationID = VC.ValueConfigurationID INNER JOIN Core.InstrumentMeasure AS IM ON IM.InstrumentConfigurationId = VC.InstrumentConfigurationID AND IM.MeasureIndex = VC.MeasureIndex INNER JOIN Core.ElabTypeList AS ETL ON ETL.IdElabType = VC.ElaborationType
14
4.2. vSortedMinData_GetAllPer ogni terna di valori massimi, medi e minimi campionati ogni minuto, estrae i valori minimi.
CREATE VIEW [Web].[vSortedMinData_GetAll]ASSELECT ElaborationDate,
SUM(CASE MeasureName WHEN 'TENSAlim' THEN ElaborationValue ELSE NULL END) AS TENSAlim, SUM(CASE MeasureName WHEN 'TempINTerna' THEN ElaborationValue ELSE NULL END) AS TempINTerna, SUM(CASE MeasureName WHEN 'Tensione-1' THEN ElaborationValue ELSE NULL END) AS VinQPro34, SUM(CASE MeasureName WHEN 'Corrente-1' THEN ElaborationValue ELSE NULL END) AS IinQPro34, SUM(CASE MeasureName WHEN 'Tensione-2' THEN laborationValue ELSE NULL END) AS VoutQPro34, SUM(CASE MeasureName WHEN 'Corrente-2' THEN ElaborationValue ELSE NULL END) AS IoutQPro34, SUM(CASE MeasureName WHEN 'Tensione-3' THEN ElaborationValue ELSE NULL END) AS VinQPro10, SUM(CASE MeasureName WHEN 'Corrente-3' THEN ElaborationValue ELSE NULL END) AS IinQPro10, SUM(CASE MeasureName WHEN 'Tensione-4' THEN ElaborationValue ELSE NULL END) AS VinQSmart34, SUM(CASE MeasureName WHEN 'Corrente-4' THEN ElaborationValue ELSE NULL END) AS IinQSmart34, SUM(CASE MeasureName WHEN 'Tensione-5' THEN ElaborationValue ELSE NULL END) AS VoutQSmart34, SUM(CASE MeasureName WHEN 'Corrente-5' THEN ElaborationValue ELSE NULL END) AS IoutQSmart34, SUM(CASE MeasureName WHEN 'Tensione-6' THEN ElaborationValue ELSE NULL END) AS VinQSmart10, SUM(CASE MeasureName WHEN 'Corrente-6' THEN ElaborationValue ELSE NULL END) AS IinQSmart10, SUM(CASE MeasureName WHEN 'Tensione-7' THEN ElaborationValue ELSE NULL END) AS VinFS, SUM(CASE MeasureName WHEN 'Corrente-7' THEN ElaborationValue ELSE NULL END) AS IinFS, SUM(CASE MeasureName WHEN 'UmiditaRel' THEN ElaborationValue ELSE NULL END) AS UmiditaRel, SUM(CASE MeasureName WHEN 'TempAria' THEN ElaborationValue ELSE NULL END) AS TempAria, SUM(CASE MeasureName WHEN 'DIRvento' THEN ElaborationValue ELSE NULL END) AS DIRvento, SUM(CASE MeasureName WHEN 'VELvento' THEN ElaborationValue ELSE NULL END) AS VELvento, SUM(CASE MeasureName WHEN 'RadDIFFusa' THEN ElaborationValue ELSE NULL END) AS RadDIFFusa, SUM(CASE MeasureName WHEN 'RadGLOBale' THEN ElaborationValue ELSE NULL END) AS RadGLOBale, SUM(CASE MeasureName WHEN 'RadGL45' THEN ElaborationValue ELSE NULL END) AS RadGL45, SUM(CASE MeasureName WHEN 'POLI' THEN ElaborationValue ELSE NULL END) AS POLI, SUM(CASE MeasureName WHEN 'MONO' THEN ElaborationValue ELSE NULL END) AS MONO, SUM(CASE MeasureName WHEN 'LivelloBATT' THEN
15
ElaborationValue ELSE NULL END) AS LivelloBATT, SUM(CASE MeasureName WHEN 'TeSUPerf1' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQPro34, SUM(CASE MeasureName WHEN 'TeSUPerf2' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQSmart34, SUM(CASE MeasureName WHEN 'TeSUPerf3' THEN ElaborationValue ELSE NULL END) AS TeSUPerfFS, SUM(CASE MeasureName WHEN 'TeSUPerf4' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQPro10, SUM(CASE MeasureName WHEN 'TeSUPerf5' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQSmart10
FROM Web.vData_GetAllWHERE (Elaboration = 'Min')GROUP BY ElaborationDate
16
4.3. vSortedMaxData_GetAllPer ogni terna di valori massimi, medi e minimi campionati ogni minuto, estrae i valori massimi.
CREATE VIEW [Web].[vSortedMinData_GetAll]ASSELECT ElaborationDate,
SUM(CASE MeasureName WHEN 'TENSAlim' THEN ElaborationValue ELSE NULL END) AS TENSAlim, SUM(CASE MeasureName WHEN 'TempINTerna' THEN ElaborationValue ELSE NULL END) AS TempINTerna, SUM(CASE MeasureName WHEN 'Tensione-1' THEN ElaborationValue ELSE NULL END) AS VinQPro34, SUM(CASE MeasureName WHEN 'Corrente-1' THEN ElaborationValue ELSE NULL END) AS IinQPro34, SUM(CASE MeasureName WHEN 'Tensione-2' THEN laborationValue ELSE NULL END) AS VoutQPro34, SUM(CASE MeasureName WHEN 'Corrente-2' THEN ElaborationValue ELSE NULL END) AS IoutQPro34, SUM(CASE MeasureName WHEN 'Tensione-3' THEN ElaborationValue ELSE NULL END) AS VinQPro10, SUM(CASE MeasureName WHEN 'Corrente-3' THEN ElaborationValue ELSE NULL END) AS IinQPro10, SUM(CASE MeasureName WHEN 'Tensione-4' THEN ElaborationValue ELSE NULL END) AS VinQSmart34, SUM(CASE MeasureName WHEN 'Corrente-4' THEN ElaborationValue ELSE NULL END) AS IinQSmart34, SUM(CASE MeasureName WHEN 'Tensione-5' THEN ElaborationValue ELSE NULL END) AS VoutQSmart34, SUM(CASE MeasureName WHEN 'Corrente-5' THEN ElaborationValue ELSE NULL END) AS IoutQSmart34, SUM(CASE MeasureName WHEN 'Tensione-6' THEN ElaborationValue ELSE NULL END) AS VinQSmart10, SUM(CASE MeasureName WHEN 'Corrente-6' THEN ElaborationValue ELSE NULL END) AS IinQSmart10, SUM(CASE MeasureName WHEN 'Tensione-7' THEN ElaborationValue ELSE NULL END) AS VinFS, SUM(CASE MeasureName WHEN 'Corrente-7' THEN ElaborationValue ELSE NULL END) AS IinFS, SUM(CASE MeasureName WHEN 'UmiditaRel' THEN ElaborationValue ELSE NULL END) AS UmiditaRel, SUM(CASE MeasureName WHEN 'TempAria' THEN ElaborationValue ELSE NULL END) AS TempAria, SUM(CASE MeasureName WHEN 'DIRvento' THEN ElaborationValue ELSE NULL END) AS DIRvento, SUM(CASE MeasureName WHEN 'VELvento' THEN ElaborationValue ELSE NULL END) AS VELvento, SUM(CASE MeasureName WHEN 'RadDIFFusa' THEN ElaborationValue ELSE NULL END) AS RadDIFFusa, SUM(CASE MeasureName WHEN 'RadGLOBale' THEN ElaborationValue ELSE NULL END) AS RadGLOBale, SUM(CASE MeasureName WHEN 'RadGL45' THEN ElaborationValue ELSE NULL END) AS RadGL45, SUM(CASE MeasureName WHEN 'POLI' THEN ElaborationValue ELSE NULL END) AS POLI, SUM(CASE MeasureName WHEN 'MONO' THEN ElaborationValue ELSE NULL END) AS MONO, SUM(CASE MeasureName WHEN 'LivelloBATT' THEN
17
ElaborationValue ELSE NULL END) AS LivelloBATT, SUM(CASE MeasureName WHEN 'TeSUPerf1' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQPro34, SUM(CASE MeasureName WHEN 'TeSUPerf2' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQSmart34, SUM(CASE MeasureName WHEN 'TeSUPerf3' THEN ElaborationValue ELSE NULL END) AS TeSUPerfFS, SUM(CASE MeasureName WHEN 'TeSUPerf4' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQPro10, SUM(CASE MeasureName WHEN 'TeSUPerf5' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQSmart10
FROM Web.vData_GetAllWHERE (Elaboration = 'Max')GROUP BY ElaborationDate
18
4.4. vSortedInstantaneousData_GetAllPer ogni set di campionati ogni minuto, estrae i valori privi di elaborazione o istantanei.
CREATE VIEW [Web].[vSortedMinData_GetAll]ASSELECT ElaborationDate,
SUM(CASE MeasureName WHEN 'TENSAlim' THEN ElaborationValue ELSE NULL END) AS TENSAlim, SUM(CASE MeasureName WHEN 'TempINTerna' THEN ElaborationValue ELSE NULL END) AS TempINTerna, SUM(CASE MeasureName WHEN 'LivelloBATT' THEN ElaborationValue ELSE NULL END) AS LivelloBATT
FROM Web.vData_GetAllWHERE (Elaboration = 'Inst')GROUP BY ElaborationDate
19
4.5. vSortedAverageData_GetAllPer ogni terna di valori massimi, medi e minimi campionati ogni minuto, estrae i valori medi.
CREATE VIEW [Web].[vSortedAverageData_GetAll]ASSELECT ElaborationDate,
SUM(CASE MeasureName WHEN 'TENSAlim' THEN ElaborationValue ELSE NULL END) AS TENSAlim, SUM(CASE MeasureName WHEN 'TempINTerna' THEN ElaborationValue ELSE NULL END) AS TempINTerna, SUM(CASE MeasureName WHEN 'Tensione-1' THEN ElaborationValue ELSE NULL END) AS VinQPro34, SUM(CASE MeasureName WHEN 'Corrente-1' THEN ElaborationValue ELSE NULL END) AS IinQPro34, SUM(CASE MeasureName WHEN 'Tensione-2' THEN laborationValue ELSE NULL END) AS VoutQPro34, SUM(CASE MeasureName WHEN 'Corrente-2' THEN ElaborationValue ELSE NULL END) AS IoutQPro34, SUM(CASE MeasureName WHEN 'Tensione-3' THEN ElaborationValue ELSE NULL END) AS VinQPro10, SUM(CASE MeasureName WHEN 'Corrente-3' THEN ElaborationValue ELSE NULL END) AS IinQPro10, SUM(CASE MeasureName WHEN 'Tensione-4' THEN ElaborationValue ELSE NULL END) AS VinQSmart34, SUM(CASE MeasureName WHEN 'Corrente-4' THEN ElaborationValue ELSE NULL END) AS IinQSmart34, SUM(CASE MeasureName WHEN 'Tensione-5' THEN ElaborationValue ELSE NULL END) AS VoutQSmart34, SUM(CASE MeasureName WHEN 'Corrente-5' THEN ElaborationValue ELSE NULL END) AS IoutQSmart34, SUM(CASE MeasureName WHEN 'Tensione-6' THEN ElaborationValue ELSE NULL END) AS VinQSmart10, SUM(CASE MeasureName WHEN 'Corrente-6' THEN ElaborationValue ELSE NULL END) AS IinQSmart10, SUM(CASE MeasureName WHEN 'Tensione-7' THEN ElaborationValue ELSE NULL END) AS VinFS, SUM(CASE MeasureName WHEN 'Corrente-7' THEN ElaborationValue ELSE NULL END) AS IinFS, SUM(CASE MeasureName WHEN 'UmiditaRel' THEN ElaborationValue ELSE NULL END) AS UmiditaRel, SUM(CASE MeasureName WHEN 'TempAria' THEN ElaborationValue ELSE NULL END) AS TempAria, SUM(CASE MeasureName WHEN 'DIRvento' THEN ElaborationValue ELSE NULL END) AS DIRvento, SUM(CASE MeasureName WHEN 'VELvento' THEN ElaborationValue ELSE NULL END) AS VELvento, SUM(CASE MeasureName WHEN 'RadDIFFusa' THEN ElaborationValue ELSE NULL END) AS RadDIFFusa, SUM(CASE MeasureName WHEN 'RadGLOBale' THEN ElaborationValue ELSE NULL END) AS RadGLOBale, SUM(CASE MeasureName WHEN 'RadGL45' THEN ElaborationValue ELSE NULL END) AS RadGL45, SUM(CASE MeasureName WHEN 'POLI' THEN ElaborationValue ELSE NULL END) AS POLI, SUM(CASE MeasureName WHEN 'MONO' THEN ElaborationValue ELSE NULL END) AS MONO, SUM(CASE MeasureName WHEN 'LivelloBATT' THEN
20
ElaborationValue ELSE NULL END) AS LivelloBATT, SUM(CASE MeasureName WHEN 'TeSUPerf1' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQPro34, SUM(CASE MeasureName WHEN 'TeSUPerf2' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQSmart34, SUM(CASE MeasureName WHEN 'TeSUPerf3' THEN ElaborationValue ELSE NULL END) AS TeSUPerfFS, SUM(CASE MeasureName WHEN 'TeSUPerf4' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQPro10, SUM(CASE MeasureName WHEN 'TeSUPerf5' THEN ElaborationValue ELSE NULL END) AS TeSUPerfQSmart10
FROM Web.vData_GetAllWHERE (Elaboration = 'Ave')GROUP BY ElaborationDate
21
4.6. vSortedWindData_GetAllPer ogni set di valori campionati ogni minuto, estrae i valori provenienti dal solo anemometro.
CREATE VIEW [Web].[vSortedWindData_GetAll]ASSELECT TOP (100) PERCENT ElaborationDate, SUM(CASE
Elaboration WHEN 'RisDir' THEN ElaborationValue ELSE NULL END) AS [DIRVento RisDir], SUM(CASE Elaboration WHEN 'PrevDir' THEN ElaborationValue ELSE NULL END) AS [DIRVento PrevDir], SUM(CASE Elaboration WHEN 'RisVel' THEN ElaborationValue ELSE NULL END) AS [DIRVento RisVel], SUM(CASE Elaboration WHEN 'StdDevDir' THEN ElaborationValue ELSE NULL END) AS [DIRVento StdDevDir], SUM(CASE Elaboration WHEN 'CalmPerc' THEN ElaborationValue ELSE NULL END) AS [DIRVento CalmPerc], SUM(CASE Elaboration WHEN 'Min' THEN ElaborationValue ELSE NULL END) AS [VELVento Min], SUM(CASE Elaboration WHEN 'Ave' THEN ElaborationValue ELSE NULL END) AS [VELVento Ave], SUM(CASE Elaboration WHEN 'Max' THEN ElaborationValue ELSE NULL END) AS [VELVento Max]
FROM Web.vData_GetAllWHERE (MeasureName = 'DIRVento') OR
(MeasureName = 'VELVento')GROUP BY ElaborationDateORDER BY ElaborationDate
22
4.7. vSortedData_GetAllAffianca orizzontalmente i valori medi e istantanei, provenienti dalle viste 4.4 e 4.5.
CREATE VIEW [Web].[vSortedData_GetAll]ASSELECT AVE.ElaborationDate, AVE.VinQPro34,
AVE.IinQPro34, AVE.VoutQPro34, AVE.IoutQPro34, AVE.VinQPro10, AVE.IinQPro10, AVE.VinQSmart34, AVE.IinQSmart34, AVE.VoutQSmart34, AVE.IoutQSmart34, AVE.VinQSmart10, AVE.IinQSmart10, AVE.VinFS, AVE.IinFS, AVE.UmiditaRel, AVE.TempAria, AVE.RadDIFFusa, AVE.RadGLOBale, AVE.RadGL45, AVE.POLI, AVE.MONO, AVE.TeSUPerfQPro34, AVE.TeSUPerfQSmart34, AVE.TeSUPerfFS, AVE.TeSUPerfQPro10, AVE.TeSUPerfQSmart10, INST.TENSAlim, INST.TempINTerna, INST.LivelloBATT
FROM Web.vSortedAverageData_GetAll AS AVE INNER JOIN Web.vSortedInstantaneousData_GetAll AS INST ON INST.ElaborationDate = AVE.ElaborationDate
23
4.8. fSortedData_WithinDateOttiene la tabella con i dati medi e istantanei appartenenti ad un certo intervallo di tempo.
CREATE FUNCTION [Web].[fSortedData_WithinDate] (
-- Add the parameters for the function here@DateStart datetime, @DateStop datetime
)RETURNS TABLE ASRETURN (
-- Add the SELECT statement with parameter references here
SELECT * FROM Web.vSortedData_GetAllWHERE ElaborationDate BETWEEN @DateStart AND
@DateStop)
24
4.9. fStabilityVoltageCriterio di stabilità basato sulla tensione.Restituisce ‘0’ se instabile, ‘1’ se stabile.
CREATE FUNCTION [Web].[fStabilityVoltage] (
-- Add the parameters for the function here@Vmp real, --Voltage at maximum power@W real, --Temperature Coefficient of Voc@Voc real, --Open Circuit Voltage@Threshold real,@Vin real, --Voltage analyzed@Temperature real --Temperature of the module
)RETURNS bitASBEGIN
-- Declare the return variable hereDECLARE @Result bitDECLARE @PreResult realDECLARE @Vattesa real
-- Add the T-SQL statements to compute the return value here
SET @Vattesa=@Vmp+(@W*@Vin)/100*(@Temperature-25)
-- Avoid the division by zeroIF (@Vattesa=0)
Return 0
SET @PreResult=ABS((@Vin-@Vattesa)/@Vattesa)
-- Return the result of the functionIF (@PreResult<@Threshold)
set @result=1else
set @result=0RETURN @Result
END
25
4.10. fStabilityPowerCriterio di stabilità basato sulla potenza.Restituisce ‘0’ se instabile, ‘1’ se stabile.
CREATE FUNCTION [Web].[fStabilityPower_QPro34] (
-- Add the parameters for the function here@Pn real, --Nominal Power of the module@Threshold real,@Irraggiamento real, --Irradiance of the module@Pmisurata real --Measured power
)RETURNS bitASBEGIN
-- Declare the return variable hereDECLARE @Result bitDECLARE @Pattesa real
SET @Pattesa=@Pn*@Irraggiamento/1000
--Avoid the division by zeroIF(@Pattesa=0)RETURN 0
-- Return the result of the functionIF (ABS((@Pmisurata-@Pattesa)/@Pattesa)<@Threshold)
set @result=1ELSE
SET @Result=0RETURN @Result
END
26
4.11. fStabilityIrradianceCriterio di stabilità basato sull’irradianza diffusa.Restituisce ‘0’ se instabile, ‘1’ se stabile.
CREATE FUNCTION [Web].[fStabilityIrradiance](
-- Add the parameters for the function here@Threshold real,@Value real
)RETURNS bitASBEGIN
-- Declare the return variable hereDECLARE @Result bit
IF (@Value>@Threshold)set @result=1
else set @result=0
RETURN @Result-- Return the result of the function
END
27
4.12. fStabilityCheck1Implementa il criterio1 per l’analisi di stabilità.
CREATE FUNCTION [Web].[fStabilityCheck1] (
--Add the parameters for the function here--Parameters that will feed the stability functions@Vmp real,@W real,@Voc real,@Pn real,@RadianceThreshold real,@PowerThreshold real,@VoltageThreshold real,@DiffIrradiance real,@AssocIrradiance real,@Vin real,@Iin real,@Temperature real
)RETURNS bitASBEGIN
-- Declare the return variable hereDECLARE @Result bit=Web.fStabilityPower_QPro34(@Pn,
@PowerThreshold, @AssocIrradiance ,@Iin*@Vin)
SET @Result = @result & Web.fStabilityDiffIrradiance(@RadianceThreshold, @DiffIrradiance)
SET @Result = @result &Web.fStabilityVoltage_QPro34(@Vmp, @W, @Voc, @VoltageThreshold, @Vin, @Temperature)
-- Return the result of the functionRETURN @Result
END
28
4.13. fStabilityCheck2Implementa il criterio1 per l’analisi di stabilità.
CREATE FUNCTION [Web].[fStabilityCheck2] (
-- Add the parameters for the function here@RadianceThreshold decimal,@Pn decimal,@PowerThreshold decimal,@DiffIrradiance decimal,@AssocIrradiance decimal,@Pin decimal
)RETURNS bitASBEGIN
-- Declare the return variable hereDECLARE @Result bit
SET @Result = Web.fStabilityDiffIrradiance(@RadianceThreshold, @DiffIrradiance) & Web.fStabilityPower_QPro34(@Pn, @PowerThreshold, @AssocIrradiance ,@Pin)
-- Return the result of the functionRETURN @Result
END
29
4.14. fStability_GetAllOttiene la tabella con i dati medi e istantanei e la relativa analisi di stabilità, effettuata con il criterio 1.
CREATE FUNCTION [Web].[fStability_GetAll](--QSmart34
@VmpQSmart34 real,@WQSmart34 real,@VocQSmart34 real,@PnQSmart34 real,--QSmart10@VmpQSmart10 real,@WQSmart10 real,@VocQSmart10 real,@PnQSmart10 real,--QPro34@VmpQPro34 real,@WQPro34 real,@VocQPro34 real,@PnQPro34 real,--QPro10@VmpQPro10 real,@WQPro10 real,@VocQPro10 real,@PnQPro10 real,--FS@VmpFS real,@WFS real,@VocFS real,@PnFS real,--common@RadianceThreshold real,@PowerThreshold real,@VoltageThreshold real)
RETURNS TABLEASRETURN( -- Insert statements for procedure here
SELECT ElaborationDate, VinQPro34, IinQPro34, TeSUPerfQPro34, Web.fStabilityCheck1(@VmpQPro34, @WQPro34, @VocQPro34, @PnQPro34, @RadianceThreshold, @PowerThreshold, @VoltageThreshold, RadDIFFusa, RadGL45 ,VinQPro34, IinQPro34, TeSUPerfQPro34) AS QPro34Stability, VoutQPro34, IoutQPro34, VinQPro10, IinQPro10, TeSUPerfQPro10, Web.fStabilityCheck1(@VmpQPro10, @WQPro10, @VocQPro10, @PnQPro10, @RadianceThreshold, @PowerThreshold, @VoltageThreshold, RadDIFFusa, RadGLOBale ,VinQPro10, IinQPro10, TeSUPerfQPro10) AS QPro10Stability, VinQSmart34, IinQSmart34, TeSUPerfQSmart34, Web.fStabilityCheck1(@VmpQSmart34, @WQSmart34, @VocQSmart34, @PnQSmart34, @RadianceThreshold, @PowerThreshold, @VoltageThreshold, RadDIFFusa, RadGL45 ,VinQSmart34, IinQSmart34, TeSUPerfQSmart34) AS QSmart34Stability, VoutQSmart34, IoutQSmart34,
30
VinQSmart10, IinQSmart10, TeSUPerfQSmart10, Web.fStabilityCheck1(@VmpQSmart10, @WQSmart10, @VocQSmart10, @PnQSmart10, @RadianceThreshold, @PowerThreshold, @VoltageThreshold, RadDIFFusa, RadGLOBale ,VinQSmart10, IinQSmart10, TeSUPerfQSmart10) AS QSmart10Stability, VinFS, IinFS, TeSUPerfFS, Web.fStabilityCheck1(@VmpFS, @WFS, @VocFS, @PnFS, @RadianceThreshold, @PowerThreshold, @VoltageThreshold, RadDIFFusa, RadGL45 ,VinFS, IinFS, TeSUPerfFS) AS FSStability, UmiditaRel, TempAria, RadDIFFusa, RadGLOBale, RadGL45, POLI, MONO FROM Web.vSortedData_GetAll)
31
4.15. fStabilityAlternative_GetAllOttiene la tabella con i dati medi e istantanei e la relativa analisi di stabilità, effettuata con il criterio 2.
CREATE FUNCTION [Web].[fStabilityAlternative_GetAll] (
--QSmart34@PnQSmart34 real,--QSmart10@PnQSmart10 real,--QPro34@PnQPro34 real,--QPro10@PnQPro10 real,--FS@PnFS real,--common@RadianceThreshold real,@PowerThreshold real)
RETURNS TABLEASRETURN( -- Insert statements for procedure here
SELECT ElaborationDate, VinQPro34, IinQPro34, Web.fStabilityCheck2(@PnQPro34,VinQPro34*IinQPro34,@RadianceThreshold, @PowerThreshold, RadDIFFusa, RadGL45) AS QPro34Stability, VoutQPro34, IoutQPro34, VinQPro10, IinQPro10,Web.fStabilityCheck2(@PnQPro10,VinQPro10*IinQPro10, @RadianceThreshold, @PowerThreshold, RadDIFFusa, RadGLOBale) AS QPro10Stability, VinQSmart34, IinQSmart34, Web.fStabilityCheck2(@PnQSmart34, VinQSmart34*IinQSmart34, @RadianceThreshold, @PowerThreshold, RadDIFFusa, RadGL45) AS QSmart34Stability, VoutQSmart34, IoutQSmart34, VinQSmart10, IinQSmart10, Web.fStabilityCheck2(@PnQSmart10, VinQSmart10*IinQSmart10, @RadianceThreshold, @PowerThreshold, RadDIFFusa, RadGLOBale) AS QSmart10Stability, VinFS, IinFS, Web.fStabilityCheck2(@PnFS, VinFS*IinFS, @RadianceThreshold, @PowerThreshold, RadDIFFusa, RadGL45) AS FSStability, UmiditaRel, TempAria, RadDIFFusa, RadGLOBale, RadGL45, POLI, MONO, TeSUPerfQPro34, TeSUPerfQSmart34, TeSUPerfFS, TeSUPerfQPro10, TeSUPerfQSmart10 FROM Web.vSortedAverageData_GetAll )
32
4.16. fStability_WithinDateOttiene la tabella con i dati medi e istantanei appartenenti ad un certo intervallo temporaneo e la relativa analisi di stabilità, effettuata con il criterio 1.
CREATE FUNCTION [Web].[fStability_WithinDate](--QSmart34
@VmpQSmart34 real,@WQSmart34 real,@VocQSmart34 real,@PnQSmart34 real,--QSmart10@VmpQSmart10 real,@WQSmart10 real,@VocQSmart10 real,@PnQSmart10 real,--QPro34@VmpQPro34 real,@WQPro34 real,@VocQPro34 real,@PnQPro34 real,--QPro10@VmpQPro10 real,@WQPro10 real,@VocQPro10 real,@PnQPro10 real,--FS@VmpFS real,@WFS real,@VocFS real,@PnFS real,--common@RadianceThreshold real,@PowerThreshold real,@VoltageThreshold real,@DateStart datetime,@DateStop datetime)
RETURNS TABLEASRETURN( -- Insert statements for procedure here
SELECT * FROM Web.fStability_GetAll(@VmpQSmart34, @WQSmart34, @VocQSmart34, @PnQSmart34, @VmpQSmart10, @WQSmart10, @VocQSmart10, @PnQSmart10, @VmpQPro34, @WQPro34, @VocQPro34, @PnQPro34, @VmpQPro10, @WQPro10, @VocQPro10, @PnQPro10, @VmpFS, @WFS, @VocFS, @PnFS, @RadianceThreshold, @PowerThreshold, @VoltageThreshold) WHERE ElaborationDate BETWEEN @DateStart AND @DateStop)
33
4.17. fStabilityAlternative_WithinDateOttiene la tabella con i dati medi e istantanei appartenenti ad un certo intervallo temporaneo e la relativa analisi di stabilità, effettuata con il criterio 2.
CREATE FUNCTION [Web].[fStabilityAlternative_WhitinDate](
--QSmart34@PnQSmart34 real,--QSmart10@PnQSmart10 real,--QPro34@PnQPro34 real,--QPro10@PnQPro10 real,--FS@PnFS real,--common@RadianceThreshold real,@PowerThreshold real,@DateStart datetime,@DateStop datetime)
RETURNS TABLEASRETURN( -- Insert statements for procedure here
SELECT * FROM Web.fStabilityAlternative_GetAll(@PnQSmart34, @PnQSmart10, @PnQPro34, @PnQPro34, @PnFS, @RadianceThreshold, @PowerThreshold) WHERE ElaborationDate BETWEEN @DateStart AND @DateStop )
34
4.18. fWind_WithinDateOttiene la tabella con i dati provenienti dall’anemometro appertenenti all’intervallo temporale specificato.
CREATE FUNCTION [Web].[fWind_WithinDate] (
-- Add the parameters for the function here@DateStart datetime, @DateStop datetime
)RETURNS TABLE ASRETURN (
-- Add the SELECT statement with parameter references here
SELECT * FROM Web.vSortedWindData_GetAllWHERE ElaborationDate BETWEEN @DateStart AND
@DateStop)
35
4.19. fSortedData_ToXMLEspone in formato XML i dati provenienti dall’anemometro.
CREATE FUNCTION [Web].[fSortedData_ToXML] (
-- Add the parameters for the function here@DateStart datetime, @DateStop datetime
)RETURNS XMLASBEGIN
-- Declare the return variable hereRETURN(
SELECT *FROM
Web.fSortedData_WithinDate(@DateStart,@DateStop)FOR XML PATH ('Data')
)
END
36
4.20. fStability_ToXMLEspone in formato XML i dati provenienti dalla funzione fStability_WithinData.
CREATE FUNCTION [Web].[fStability_toXML] (
--QSmart34@VmpQSmart34 real,@WQSmart34 real,@VocQSmart34 real,@PnQSmart34 real,--QSmart10@VmpQSmart10 real,@WQSmart10 real,@VocQSmart10 real,@PnQSmart10 real,--QPro34@VmpQPro34 real,@WQPro34 real,@VocQPro34 real,@PnQPro34 real,--QPro10@VmpQPro10 real,@WQPro10 real,@VocQPro10 real,@PnQPro10 real,--FS@VmpFS real,@WFS real,@VocFS real,@PnFS real,--common@RadianceThreshold real,@PowerThreshold real,@VoltageThreshold real,@DateStart datetime,@DateStop datetime
)RETURNS XMLASBEGIN -- Insert statements for procedure here
RETURN (SELECT * FROM Web.fStability_WithinDate(@VmpQSmart34,
@WQSmart34, @VocQSmart34, @PnQSmart34, @VmpQSmart10, @WQSmart10, @VocQSmart10, @PnQSmart10, @VmpQPro34, @WQPro34, @VocQPro34, @PnQPro34, @VmpQPro10, @WQPro10, @VocQPro10, @PnQPro10, @VmpFS, @WFS, @VocFS, @PnFS, @RadianceThreshold, @PowerThreshold, @VoltageThreshold, @DateStart, @DateStop)
FOR XML PATH('Data'))END
37
4.21. fStabilityAlternative_ToXMLEspone in formato XML i dati provenienti dalla funzione fStabilityAlternative_WithinData.
CREATE FUNCTION [Web].[fStabilityAlternative_toXML] (
--QSmart34@PnQSmart34 real,--QSmart10@PnQSmart10 real,--QPro34@PnQPro34 real,--QPro10@PnQPro10 real,--FS@PnFS real,--common@RadianceThreshold real,@PowerThreshold real,@DateStart datetime,@DateStop datetime
)RETURNS XMLASBEGIN -- Insert statements for procedure here
RETURN (SELECT * FROM
Web.fStabilityAlternative_WithinDate(@PnQSmart34, @PnQSmart10, @PnQPro34, @PnQPro10, @PnFS, @RadianceThreshold, @PowerThreshold, @DateStart, @DateStop)
FOR XML PATH('Data'))
END
38
4.22. fWind_ToXMLEspone in formato XML i dati provenienti dall’anemometro.
CREATE FUNCTION [Web].[fWind_ToXML] (
-- Add the parameters for the function here@DateStart datetime, @DateStop datetime
)RETURNS XMLASBEGIN
-- Declare the return variable hereRETURN(
SELECT *FROM
Web.fWind_WithinDate(@DateStart,@DateStop)FOR XML PATH ('Data'), ROOT ('Wind')
)
END
39
5. CONSIDERAZIONI FINALI
Con questo progetto si è voluto aumentare le potenzialità del sistema, prevedendo l’interrogazione da remoto. A tal fine è stato aggiunto uno schema esterno alla base di dati, in grado di fornire i dati nella struttura richiesta, corredati della relativa analisi di stabilità.
Purtroppo, come accennato nell’introduzione, lo stato attuale delle cose prevede che la base di dati risieda in un portatile di risorse assai limitate. Ricordiamo che tale calcolatore venne fornito dalla stessa LSI LASTEM e che la stessa, per non aumentare i costi, installò il motore SQL SERVER 2005, con licenza Express.
Questa scelta portò nel mese di Gennaio 2013 a un blocco del sistema di stoccaggio, in quanto fu raggiunto il limite di 4 GB della dimensione fisica del database, imposto da tale licenza3.
Sollecitato il problema al fornitore, la soluzione temporanea è stata quella di provvedere all’aggiornamento del motore alla versione 2008 R2, anch’essa con licenza Express, ma con un limite di 10 GB4, di cui quasi 7 occupati alla data della stesura di questo documento5.
Fortunatamente, la suite proprietaria prevede la possibilità di far risiedere la base di dati in un servizio remoto. Questa capacità, unita agli strumenti di migrazione dei dati di SQL SERVER Management Studio, rende possibile il trasferimento del database a un calcolatore adeguato, possibilmente provvisto di meccanismi di replicazione e backup, lasciando inalterato il sistema ‘fisico’ e aumentando la tolleranza ai guasti dello stesso.
Con questa soluzione, infatti, eventuali problemi del portatile si tradurranno nella perdita dei dati acquisiti nel periodo di inoperatività del portatile, ma lo storico dei dati accumulati negli anni risulterà indenne.
3 http://msdn.microsoft.com/en-us/library/ms345154(v=sql.90).aspx4 http://msdn.microsoft.com/en-us/library/cc645993(v=sql.105).aspx5 Si veda il capitolo sulle prestazioni per la spiegazione di un incremento così rapido.
40