Università di Modena e Reggio Emilia Basi di dati Docente: Andrea Bulgarelli [email protected] Argomento: presentazione corso (1.0) Andrea Bulgarelli - Basi di Dati 1 Materiale didattico Web site: www.andrea.bulgarelli.name/corso Bibliografia Beneventano, Bergamaschi Guerra Vincini “Progetto di Basi di Dati Relazionali”, SQLBOL (SQL Book On Line) link disponibile sul sito del corso Dispense Andrea Bulgarelli - Basi di Dati del corso 2 DBMS: generalità Un DBMS è un sistema software in grado di gestire grandi quantità di dati in modo efficiente. Ad esempio, SQL Server un database può avere dimensioni da 1 MB a 1 TB (1.048.576 MB). Le caratteristiche funzionali di un DBMS possono essere così riassunte: Supporto per almeno un modello dei dati Linguaggi di alto livello per la creazione, la manipolazione (inserimento, modifica e cancellazione) e l’interrogazione dei dati e per il controllo del database. Da un punto di vista concettuale, i linguaggi di alto livello possono essere classificati in: DDL Data Definition Language: linguaggio non procedurale che permette di definire e mantenere la struttura del database. Permette inoltre di specificare la connessione tra le strutture logiche e fisiche del database DML Data Manipulation Language: o query language, consente l’interrogazione e la modifica dei dati del database DCL Data Control Language: Gestione degli utenti e assegnazione dei privilegi di accesso Gestione delle transazioni Controllo degli accessi (o protezione): Resilienza (fault tolerance): garantisce la massima disponibilità mediante le funzioni di backup e manutenzione in linea, il ripristino automatico nel caso di malfunzionamenti e la possibilità di installare il DBMS in un cluster per il supporto del failover. Presenza di diversi ambienti di sviluppo e utilità: interfacce di programmazione, 3 Andrea Bulgarelli Visual Basic, C++, ASP (per la programmazione Internet). Transazioni Una transazione è l’unità fondamentale di lavoro di un DBMS. Essa consiste in diversi comandi DML che leggono e aggiornano il database. Un DBMS deve gestire: Transazioni concorrenti: due transazioni si dicono concorrenti se avvengono nello stesso istante di tempo. Malfunzionamenti: Transaction abort: interruzione di una transazione. Non comporta perdita dei dati. Causata da una situazione prevista dal programma System abort: interruzione di transazioni attive derivanti da un’anomalia hardware o software. Si assume che il contenuto della memoria permanente sopravviva, mentre viene perduto il contenuto della memoria temporanea System crash: anomalia che danneggia il contenuto della memoria permanente Andrea Bulgarelli 4 Transazioni (2) L’aggiornamento non viene considerato definitivo fino a quando non viene inoltrato il COMMIT, che indica la fine della transazione. Si consideri il seguente esempio di un trasferimento bancario tra due conti, per comprendere meglio che cosa sia una transazione: BEGIN TRANSACTION Accredita 1 ML sul conto 2254/1 Addebita 1 ML sul conto 2378/1 COMMIT TRANSACTION Andrea Bulgarelli 5 Transazioni (3) che potrebbe anche essere eseguita nel seguente ordine: BEGIN TRANSACTION Addebita 1 ML sul conto 2378/1 Accredita 1 ML sul conto 2254/1 COMMIT TRANSACTION Andrea Bulgarelli 6 Transazione (4) L’elaborazione delle transazioni in un DBMS garantisce che tutte le manipolazioni dei dati siano eseguite come unità di lavoro individuale, anche in presenza di malfunzionamenti. Per raggiungere questo obiettivo le transazioni devono rispettare le proprietà ACID: Atomicità: una transazione è confermata o annullata senza possibilità intermedie. Se una transazione è confermata, tutti i suoi effetti sono mantenuti; Coerenza: questa proprietà fa in modo che le transazioni non consentano al database di raggiungere uno stato logico non corretto. In questo caso la regola logica è che il denaro non può essere né creato né distrutto; Isolamento: l’isolamento separa le transazioni concorrenti da altre transazioni concorrenti. Durabilità: Successivamente al commit di una transazione, la durabilità garantisce che gli effetti della transazione restino validi anche in caso di errori del sistema 7 Andrea Bulgarelli Stati di una transazione Andrea Bulgarelli 8 Problemi di concorrenza Lost update problem Uncommitted dependency problem Read R Inconsistency analysys problem: consiste nell’eseguire analisi sui dati durante la modifica di questi (si vedano i DSS, Decision Support System). Andrea Bulgarelli 9 Principali servizi SQL Server Motore DBMS relazionale: scalabilità, prestazioni Analysis services: strumenti per analizzare i dati memorizzati per il supporto alle decisioni. Andrea Bulgarelli Andrea Bulgarelli 10 Panoramica Net libraries Andrea Bulgarelli Andrea Bulgarelli 11 Comunicazione C/S Andrea Bulgarelli Andrea Bulgarelli 12 Architettura di protezione Autenticazione: determina se l’utente ha o meno un account di accesso valido per connettersi a un’istanza di SQL Server: di Windows: sfrutta il sistema di protezione di Windows di SQL Server: indipendenti da qualsiasi account utente o gruppo Windows Autorizzazione: determina che attività l’utente può svolgere dopo essere stato autenticato. Andrea Bulgarelli Andrea Bulgarelli 13 Autenticazione La modalità di default è l’autenticazione Windows. Andrea Bulgarelli Andrea Bulgarelli 14 Autorizzazione Dopo che SQL Server 2000 ha autenticato un utente, determina se tale ID di accesso è stato autorizzato a svolgere attività in un qualsiasi database. Account utente: In generale, un amministratore di database deve associare un ID di accesso a un ID utente prima che qualcuno con quell’ID di accesso possa accedere agli oggetti e svolgere operazioni nel database in questione. Un amministratore di database applica i permessi di protezione per gli oggetti del database. Andrea Bulgarelli Andrea Bulgarelli 15 Autorizzazione (2) Account guest: Se un ID di accesso non è stato esplicitamente associato con un qualsiasi ID utente in un database, esso viene associato all’ID dell’utente guest di quel database, se esiste. Se un database ha un account utente guest, l’accesso è limitato ai diritti che vengono conferiti all’utente guest. Se un database non ha un account utente guest, si può accedere al database solo se si dispone di un account utente valido. Di default, tutti i database utente appena creati non dispongono di un account utente guest. Andrea Bulgarelli Andrea Bulgarelli 16 Autorizzazione (3) Ruoli: i ruoli sono usati per raccogliere gli utenti in una singola unità e poi attribuire a tutti gli stessi permessi. Ogni utente in un database appartiene al ruolo di database pubblico e fruisce di tutti i permessi assegnati al ruolo pubblico, a meno che non si sia deciso di negare a un determinato utente determinati permessi. I diritti aggiuntivi devono essere conferiti esplicitamente a un utente o a un gruppo di utenti a cui l’utente appartiene. Andrea Bulgarelli Andrea Bulgarelli 17 Database e file di database Un database SQL server … È un insieme di molti oggetti (fino ad un massimo di 231-1) (di cui un massimo di 32767 database) È proprietà di un singolo utente, ma può contenere oggetti di proprietà di altri utenti Dispone di tabelle di sistema per catalogare le definizioni del database Gestisce un proprio insieme di account utente e protezioni Dispone di un log e gestisce le transazioni Può espandersi su più unità disco e macchine Ha dimensione minima di 1MB e massima 1.000.000MB Andrea Bulgarelli 18 Database di sistema Andrea Bulgarelli 19 File di database Un database SQL server consiste di tre tipi di file: MDF: file di dati primario che elenca tutti gli elementi nel database ed i dati memorizzati NDF: file di dati secondario (può non essere presente) LDF: file di log delle operazioni Andrea Bulgarelli 20 Esempio (esecuzione da Query Analyzer) CREATE DATABASE Sales_AB ON ( NAME = Sales_AB_dat, FILENAME = ‘C:\sqlserver\data\sales_AB_Dat.mdf', SIZE = 5, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_AB_log', FILENAME = ‘C:\sqlserver\data\sales_AB_Log.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO Andrea Bulgarelli 21 Considerazioni per il design di un database Nella progettazione di un database, per la realizzazione fisica del database bisogna tenere presente: Lo scopo del database Le regole di normalizzazione L’integrità dei dati La sicurezza del sistema e l’accesso ai dati Esigenze di performance La gestione e manutenzione del database Le dimensioni stimate della base dati Andrea Bulgarelli 22 Modifica di un database La modifica di un database in genere riguarda Il cambio del nome del database Aggiungere uno o più nuovi file o filegroup al database Aggiungere uno o più nuovi file di log Rimuovere file o filegroup dal database Modificare un file esistente del database per Aumentare il valore della proprietà SIZE Modificare le proprietà MAXSIZE o FILEGROWTH Modificare il nome del file (NEWNAME) 23 Andrea Bulgarelli Formato ALTER DATABASE ALTER DATABASE database { ADD FILE <filespec> [,...n] [TO FILEGROUP filegroup_name] | ADD LOG FILE <filespec> [,...n] | REMOVE FILE logical_file_name | ADD FILEGROUP filegroup_name | REMOVE FILEGROUP filegroup_name | MODIFY FILE <filespec> | MODIFY FILEGROUP filegroup_name filegroup_property } <filespec> ::= (NAME = logical_file_name [, FILENAME = 'os_file_name' ] [, SIZE = size] [, MAXSIZE = { max_size | UNLIMITED } ] [, FILEGROWTH = growth_increment] ) Andrea Bulgarelli 24 Esempio – Alter Database USE master GO CREATE DATABASE Test1 ON ( NAME = Test1dat1, FILENAME = 'c:\mssql\data\t1dat1.mdf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB ) GO ALTER DATABASE Test1 ADD FILE ( NAME = Test1dat2, FILENAME = 'c:\mssql\data\t1dat2.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB ) GO Andrea Bulgarelli 25 Rimozione di un database Sintassi DROP DATABASE database_name [,...n] Esempio DROP DATABASE publishing Attenzione a NON avere il database aperto (ad es. in un query analyzer) quando lo si vuole eliminare Andrea Bulgarelli 26