TRANSACÇÕES HSQL - Hypersonic SQL TECNOLOGIA DE BASES DE DADOS M6714 - Fernando Forte 2005 INTRODUÇÃO • Modos de inicializar a HSQLDB – Server Modes * Hsqldb Server » java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydatabase dbname.0 xdb * Hsqldb Webserver (só ligação JDBC, protocolo HTTP) » java -cp ../lib/hsqldb.jar org.hsqldb.WebServer -database.0 mydatabase -dbname.0 xdb * Hsqldb Servlet (instalado no AppServer Tomcat liga à BD) – In-Process (Stand Alone) Mode * usada por uma aplicação – Memory-Only Databases * nenhuma informação é escrita em disco. • Tipos de Tabelas – TEMP (não é escrita no disco), MEMORY, CACHED e TEXT M6714 - Fernando Forte TBD 2005 2 SISTEMA DE FICHEIROS (1) • Ficheiros da Base de Dados (2 a 5 +1) – nomeBD.properties * modified= yes, no – nomeBD.script * snapshot último checkpoint (comandos SQL antes de committed), recria memory tables no arranque da BD. – nomeBD.data * para tabelas CACHED (pode ficar corrompido se os dados não foram escritos totalmente da memória - usar .backup) – nomeBD.backup * ficheiro comprimido do .data que corresponde ao .script – nomeBD.log * comandos SQL que modificaram a BD depois do último checkpoint. * se SHUTDOWN ok não há .log – nomeBD.lck (LockFile.java - para saber se a BD está activa) M6714 - Fernando Forte TBD 2005 3 SISTEMA DE FICHEIROS (2) Log .properties: .script: modified=no version=1.3 readonly=false CREATE TABLE ... INSERT INTO ... INSERT INTO ... INSERT INTO ... .backup: .data: Cache Data (array) M6714 - Fernando Forte [contains the binary records and empty blocks] Row TBD 2005 [contains a compressed backup of old .data file] 4 TRANSACÇÕES • Efectuadas assegurando integridade da BD – propriedades ACID (Atomicity, Consistency, Isolation, Durability) – usa um SCN (System Change Number) para identificar e ordenar as Ti (um por cada linha) • Nível de consistência da BD – read uncommitted (permite dirty reads - registos uncommitted podem ser lidos) * não é levantada nenhuma excepção se Ti e Tj commit a menos que se use: » SET PROPERTY "sql.tx_no_multi_rewrite" TRUE M6714 - Fernando Forte TBD 2005 5 GESTÃO DE TRANSACÇÕES • O canal de ligação rastreia as Tis uncommitted. – Todos os objectos de cada Ti têm uma referência para os objectos dos dados antigos. • Os rollbacks são executados por ordem inversa de entrada. – não é possível fazer roolback a Ti se Tj fizer ALTER TABLE ou INSERT COLUMN ou DROP COLUMN da mesma tabela pois estes comandos fazem logo commit M6714 - Fernando Forte TBD 2005 6 RECUPERAÇÃO • Baseada em log * o .log contêm as modificações feitas à BD quando da execução da transacção (commit). – Checkpoints * Tis executadas em série. * depois de um checkpoint podem existir Tis uncommitted, committed ou rollback. * se não houver um SHUTDOWN adequado estas Tis são parcialmente committed (no estado do último checkpoint). * ao reiniciar é lido o ficheiro .log para recuperação das Tis committed depois do último checkpoint. M6714 - Fernando Forte TBD 2005 7 CÓDIGO JAVA * Database.java ¤ (inicializa a BD e lê o sistema de ficheiros) * ScriptReaderBase.java ¤ (prog base para os leitores de scripts, verifica DDLs) * ScriptRunner.java ¤ (lê .log e verifica se rollbacks) * Log.java ¤ (gere o sistema de ficheiros da BD quando SHUTDOWN, volta ao estado do último checkpoint, apaga ficheiros .old e .new de Tis não terminadas) * Logger.java ¤ (assegura ACID - verifica o estado da BD, regista e rescreve as entradas de .log DDL e DML apenas necessários) * PersistentStore.java ¤ (gere os objectos das tabelas cached) * Transaction.java , TransactionManager.java ¤ (gerem cada registo - commit, rollback das Tis) M6714 - Fernando Forte TBD 2005 8 FUTURAMENTE • Melhorar mecanismos de log e estatísticas. • Possibilidade de criar novos níveis de isolamento nas transacções. • Capacidade de suportar concorrência na execução de comandos SQL. M6714 - Fernando Forte TBD 2005 9 REFERÊNCIAS BIBLIOGRÁFICAS • Silberschatz, Abraham; Korth, Henry; Sudarshan “Database System Concepts 5th Edition”. United States of America: McGraw Hill Companies Inc., 2006. ISBN 007-124476-X. p609-719. • http://hsqldb.org • Simpson, Blaine; Toussi, Fred - “Hsqldb User Guide”. Julho 2005. 145p. M6714 - Fernando Forte TBD 2005 10