Fakulta elektrotechniky a informatiky david.zak@upce.cz Databázové systémy II Přednáška č. 10 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky david.zak@upce.cz
Databázové systémy II - př.10 Obsah Zálohování dat Export dat Import dat Práce s XML dokumenty Databázové systémy II - př.10
Databázové systémy II - př.10 Rizika Hodnotu dat si uvědomíme teprve v okamžiku, kdy o ně přijdeme. Database Oracle 10g má nástroje na zotavení při poškození disku (v poškozených blocích) nebo při poškození transakčního žurnálu. Databázové systémy II - př.10
Fyzická záložní databáze Fyzická záložní databáze umožňuje umístění 2 databází v různých geografických lokalitách. Aktualizace dat v produkčním systému se na záložním systému realizují prostřednictvím souborů transakčního žurnálu (na záložním systému se aplikují nad tzv. záložní (standby) databází). Přenos souborů je realizován prostřednictvím síťových protokolů. Databázové systémy II - př.10
Logická záložní databáze Aktualizace dat se realizuje na úrovni logického SQL. Část uživatelů může aktivně pracovat na produkčním systému, zatímco jiní uživatelé mohou vykonávat různé operace na záložním systému. Záložní server může sloužit například pro dolování dat nebo analýzy. Při analytických operacích nevadí malé zpoždění vůči hlavní databázi na produkčním systému – příklad: pokud zkoumáme chování zákazníka za poslední měsíc, poslední hodina, o kterou je databáze zpožděna, nám vůbec nevadí. Databázové systémy II - př.10
Aktualizace dat v záložní databázi Synchronní aktualizace dat - proces, který zapisuje data do produkční databáze, ve stejném čase zapíše také data do záložní databáze Asynchronní aktualizace dat - data se do záložní databáze zapíší s určitým zpožděním. Asynchronní aktualizace může být výhodná v tom případě, pokud selžou nějaké operace. Tento systém může ošetřit chyby od samotného uživatele. Databázové systémy II - př.10
Databázové systémy II - př.10 Způsoby zálohování Kompletní zálohování - zálohují se všechna data a databázové struktury, které databáze obsahuje. Zálohovat můžeme na pevný disk, optický disk, pásku či síťový disk. Obnova je jednoduchá (při dostatečně aktuální záloze) Nevýhodou je zálohování velkého objemu dat, proto se tento způsob zálohování používá obvykle v delších časových intervalech Databázové systémy II - př.10
Databázové systémy II - př.10 Způsoby zálohování Rozdílové/přírůstkové zálohování ukládají se jen ty datové stránky, které byly změněny od poslední kompletní zálohy Při obnově nejprve využijeme kompletní zálohu a potom aktualizujeme data na základě přírůstkových (rozdílových) záloh Výhodou je menší objem dat a proto se používá k kratších časových intervalech Databázové systémy II - př.10
Databázové systémy II - př.10 Způsoby zálohování Záloha transakčního žurnálu (protokolu) Zálohován jen transakční žurnál, to znamená transakce provedené od poslední kompletní zálohy Databázové systémy II - př.10
Databázové systémy II - př.10 Offline zálohování Konzistentní offline zálohování se provádí, když byla databáze zastavena normálním způsobem. Je možné provést zálohování: Datových souborů Řídících souborů Online souborů protokolu Souboru init.ora nebo souboru s parametry serveru (spfile) Zálohování všech těchto souborů poskytne kompletní obraz databáze v okamžiku jejího zastavení. Není korektní provádět zálohu databázových souborů při spuštěné a otevřené databázi kromě online zálohování (databáze běží v režimu ARCHIEVELOG). Databázové systémy II - př.10
Online transakční žurnál Všechny změny provedené v databázi se ukládají do transakčního žurnálu. Transakčních žurnálů je obvykle více, například 3, při zaplnění prvního se přejde na druhý, potom na třetí a tento proces se neustále cyklicky opakuje. Pomocí transakčních žurnálů je možné zrekonstruovat databázi do stavu odpovídajícího určitému okamžiku. Děje se tak automaticky na pozadí nebo na pokyn uživatele. Databázové systémy II - př.10
Soubory protokolu (redo log) Databázové systémy II - př.10
Online transakční žurnál K dispozici jsou 2 režimy: ARCHIVELOG – všechny změny databáze jsou trvale uloženy v archivovaném transakčním žurnálu, tento režim umožňuje zotavení nejen po selhání instance databázového serveru, ale také po selhání diskového media – tedy při poškození datových souborů NOARCHIVELOG – pouze zotavení při selhání instance, zotavení bude provedené jen z aktivního transakčního žurnálu Stav zjistíme dotazem ARCHIVE LOG LIST; Start archivace ARCHIVE LOG START; Databázové systémy II - př.10
Zastavení běhu instance Aby se mohl režim změnit, je třeba instanci restartovat (to není pro databázový server a jeho administrátora obvykle moc žádoucí, ale v tomto případě nevyhnutelné). Proces zastavení může proběhnout ve 4 režimech Normal – se zastavením se čeká na odpojení všech aktuálně připojených uživatelů Immediate – v tomto režimu jsou před zastavením odvolány všechny aktivní transakce a následně odpojeni všichni uživatelé Abort – v tomto režimu bude zastavení provedeno okamžitě a „bezohledně“ Transactional – všichni aktivní uživatelé budou odpojeni po ukončení svých transakcí a až poté dojde k zastavení Samotný průběh restartu může trvat dlouhou dobu. Databázové systémy II - př.10
Online transakční žurnál Obnova dat z transakčního žurnálu se může provést například příkazem RECOVER DATABASE UNTIL TIME ‘2007-04-27 5:00’ Databázové systémy II - př.10
Plánování pravidelného zálohování Můžeme využít některou z předdefinovaných strategií nebo vytvořit vlastní strategii zálohování. Předdefinované strategie obsahují: Přírůstková záloha 1x týdně (vhodná pro nepříliš aktualizované databáze) Kompletní záloha každý den (vhodná pro transakční nepříliš velké databáze) Kompletní záloha 1x týdně (vhodná pro velké a často aktualizované databáze) Dále můžeme vybrat den v týdnu a hodinu. Vytvořená úloha bude v seznamu aktivních úloh. Databázové systémy II - př.10
Databázové systémy II - př.10 Import a export dat Import a export dat používáme zejména pro výměnu dat s jinými aplikacemi. Mezi často používané formáty patří: SQL - textové soubory s jednotlivými SQL příkazy (skripty) Textové soubory, např. s oddělovači sloupců a řádků (např. CSV Comma-separated values) s pevnou šířkou sloupců XML soubory Soubory tabulkových procesorů (např. Excel – XLS) Databázové systémy II - př.10
Databázové systémy II - př.10 Import a export dat SQL developer nabízí export dat do souborů Databázové systémy II - př.10
Export dat z SQL Developeru Můžeme exportovat: data z tabulky, výsledky dotazu nebo výstup reportu buď do souboru nebo do schránky Windows. Při exportu je možné definovat omezující podmínky či vybrat sloupce Databázové systémy II - př.10
Export dat z SQL Developeru Formát INSERT (SQL), tabulka Trpaslici -- INSERTING into TRPASLICI Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (1,'Stistko',110,1980); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (2,'Kychal',115,1983); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (3,'Profa',120,1999); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (4,'Rypal',112,2001); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (5,'Brucoun',109,1976); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (6,'Stydlin',117,1984); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (7,'Smudla',108,1993); Databázové systémy II - př.10
Export dat z SQL Developeru Formát TEXT, tabulka Trpaslici "ID" "JMENO" "VYSKA" "NAROZEN" "1" "Stistko" "110" "1980" "2" "Kychal" "115" "1983" "3" "Profa" "120" "1999" "4" "Rypal" "112" "2001" "5" "Brucoun„ "109" "1976" "6" "Stydlin" "117" "1984" "7" "Smudla" "108" "1993" Databázové systémy II - př.10
Export dat z SQL Developeru Formát CSV, tabulka Trpaslici "ID","JMENO","VYSKA","NAROZEN" "1","Stistko","110","1980" "2","Kychal","115","1983" "3","Profa","120","1999" "4","Rypal","112","2001" "5","Brucoun","109","1976" "6","Stydlin","117","1984" "7","Smudla","108","1993" Databázové systémy II - př.10
Export dat z SQL Developeru Formát XML, tabulka Trpaslici <?xml version='1.0' encoding='null' ?> <results> <row> <ID><![CDATA[1]]></ID> <JMENO><![CDATA[Stistko]]></JMENO> <VYSKA><![CDATA[110]]></VYSKA> <NAROZEN><![CDATA[1980]]></NAROZEN> </row> <ID><![CDATA[2]]></ID> <JMENO><![CDATA[Kychal]]></JMENO> <VYSKA><![CDATA[115]]></VYSKA> <NAROZEN><![CDATA[1983]]></NAROZEN> </results> Databázové systémy II - př.10
Export dat z SQL Developeru Formát XLS, tabulka Trpaslici Databázové systémy II - př.10
Export dat z SQL Developeru Formát LOADER, tabulka Trpaslici LOAD DATA INFILE * Truncate INTO TABLE "TRPASLICI" FIELDS TERMINATED BY ',' TRAILING NULLCOLS (ID, JMENO, VYSKA, NAROZEN) begindata "1","Stistko","110","1980" "2","Kychal","115","1983" "3","Profa","120","1999" "4","Rypal","112","2001" "5","Brucoun","109","1976" "6","Stydlin","117","1984" "7","Smudla","108","1993" Databázové systémy II - př.10
Export dat z SQL Developeru Formát HTML, tabulka Trpaslici <html> <body> <table> <th>ID</th> <th>JMENO</th> <th>VYSKA</th> <th>NAROZEN</th> <tr> <td>1</td> <td>Stistko</td> <td>110</td> <td>1980</td> </tr> <td>2</td> <td>Kychal</td> <td>115</td> <td>1983</td> </table> </body> </html> Databázové systémy II - př.10
Databázové systémy II - př.10 Import a export DDL SQL Developer nabízí export SQL příkazů pro vytváření databázových objektů, v rámci jednoho typu objektů je možné označit více objektů (tabulek, procedur, …) a uložit DDL příkazy, které se vztahují k vytváření těchto objektů. Databázové systémy II - př.10
Kompletní export schématu v SQL Developeru Volba Tools – Export DDL (and Data) Umožňuje uložit DDL příkazy všech (nebo vybraných) databázových objektů v rámci schématu včetně uložených dat (pokud nebude nastaveno filtrování) Výsledný soubor je typu sql (text s SQL příkazy). Databázové systémy II - př.10
Export a import dat v Oracle XE Databázové systémy II - př.10
Export a import dat v Oracle XE Databázové systémy II - př.10
Databázové systémy II - př.10 Import dat v Oracle XE Databázové systémy II - př.10
Databázové systémy II - př.10 Import dat v Oracle XE Databázové systémy II - př.10
Migrace v SQL Developeru Migrace je proces převodu dat z jiné platformy (SQL Developer nabízí kromě Oracle např. MySQL, MS SQL server či Access), využívá se tool Oracle Migration Workbench Migrace se může skládat pouze z DDL příkazů vlastních dat v tabulkách, … Migrace může být Online (provede se právě teď) Offline (prostřednictvím zálohy objektů a dat do souboru) Databázové systémy II - př.10
Kopírování objektů mezi schématy či databázemi Oracle v SQL Developeru Příklad migrace dat ze schématu trpaslik na serveru asuei01.upceucebny.cz do schématu pokus na notebooku (localhost) Tj. export vybraných tabulek a spuštění skriptu na localhostu, viz praktická ukázka. Ukázka nástroje Schema Diff (hledá odlišnosti v DDL). Databázové systémy II - př.10
Export dat – klasické formy Před prvním exportem nebo importem je nutné spustit skript CATALOG.SQL Pro tento krok je nutné přihlásit se jako uživatel SYS. Pro export je možné spustit utilitu exp z příkazové řádky operačního systému. Další možností je využitím Enterprise Manager Console nebo WWW EM stránek. Exportovat je možné Databázi Schéma daného uživatele Vybrané tabulky a na ně navázané struktury Pro export je nezbytné mít práva (pověření pro příslušný uzel). Databázové systémy II - př.10
Databázové systémy II - př.10 Export dat Export může být Jednorázový (nyní) Jednorázový (odložený - plánovaný) Opakovaný Databázové systémy II - př.10
Export dat do flat-souborů Flat soubor - prostý textový soubor, kde data mohou (ale nemusí) být oddělena nějakým oddělovačem (čárka, mezera, tabulátor, …). Například data načítaná do datových skladů pochází často z různých – nehomogenních zdrojů, například ze souborových či desktopových databází (MS Access, dBase) nebo data z databází libovolného databázového serveru (firem Oracle, IBM, Microsoft, Sybase, Interbase, Ingres, …) Prosté soubory jsou tedy častým prostředkem pro přenos dat mezi těmito systémy, terminologicky často označované jako: ETT (Extraction, Transformation & Transport) nebo ETL (Extraction, Transformation & Loading) Databázové systémy II - př.10
Export dat do flat-souborů Pro správný zápis je třeba SET heading off SET feedback off SET echo off SET pagesize 0 SPOOL C:\pokus.dat SELECT id || ‘,’ || ‘”’||jmeno||‘”’ FROM trpaslici; SPOOL off Takto uložené soubory jsou snadno stravitelné prakticky libovolnou databázovou platformou. Databázové systémy II - př.10
Import dat z flat-souborů Pro import dat z externích datových zdrojů se používá utilita SQL*Loader. Spouští se z operačního systému příkazem sqlldr Je možné, aby řídící soubor obsahoval jak parametry importu, tak samotná data: LOAD FILE INFILE *INTO TABLE trpaslici FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘”’ (id, jmeno) BEGINDATA 1, „Smudla“ 2, … Databázové systémy II - př.10
Import dat z flat-souborů Poznámky: tabulka, do níž importujeme, musí být předem vytvořena Příklad volání utility Sqlldr USERID=scott/tiger CONTROL=c:\filename.ctl LOG=c:\filename.log Databázové systémy II - př.10
Databázové systémy II - př.10 Externí tabulky Umožňují použít příkaz SELECT na soubory s daty oddělenými čárkami, poziční soubory s pevnou šířkou Nelze upravovat, je jen možné se na ně dotazovat. Nemohou být indexovány, neboť pro řádky neexistují žádné hodnoty ROWID. Vhodné pro načítání a slučování dat – tedy nikoli jako náhrada tabulek. Databázové systémy II - př.10
Databázové systémy II - př.10 Externí tabulky Závisí na nastavení objektu DIRECTORY databáze Oracle CREATE OR REPLACE DIRECTORY ext_dir as ‘/tmp/’; A práv uživatele k tomuto adresáři GRANT read, write on directory ext_dir to username; Soubory musí být na databázovém serveru, vlastní databázové procesy musí být schopny soubor zjistit, otevřít a přečíst. To lze řešit i připojením/mapováním disků. Databázové systémy II - př.10
Externí tabulky s oddělovačem Vytvoření tabulky create table ext_table_csv ( i Number, n Varchar2(20), m Varchar2(20)) organization external ( type oracle_loader default directory ext_dir access parameters ( records delimited by newline fields terminated by ',' missing field values are null) location ('file.csv') ) reject limit unlimited; Databázové systémy II - př.10
Externí tabulky s pevnou šířkou sloupců Vytvoření tabulky create table ext_table_fixed ( field_1 char(4), field_2 char(30)) organization external ( type oracle_loader default directory ext_dir access parameters ( records delimited by newline fields ( field_1 position(1: 4) char( 4), field_2 position(5:30) char(30))) location ('file') ) reject limit unlimited; Databázové systémy II - př.10
Databázové systémy II - př.10 Oracle a XML Současné IT prostředí je heterogenní, stále více se prosazuje XML jako univerzální formát pro výměnu dat, proto je i Oraclem masivně podporován. Oracle sází na kombinaci SQL + XML + Java Oracle umožňuje: vygenerovat výstup z dtb. tabulky či dotazu do XML definovat datový typ XML provádět XML operace nad daty v relačních databázích provádět SQL operace nad daty v XML dokumentech Databázové systémy II - př.10
Databázové systémy II - př.10 XML repositář XML dokumenty jsou uloženy v XML repositářích, které umožňují přístup k těmto dokumentům prostřednictvím protokolů HTTP, FPT a WebDAV (standard umožňující číst a měnit datové elementy databáze podobně jako složky a soubory souborového systému) Součástí repositáře je i správa přístupových oprávnění, správa složek, SQL vyhledávání v XML repositáři, API pro práci s XML repositářem a manipulace s objekty pomocí Java servletu. Databázové systémy II - př.10
Výpis tabulky ve formátu XML Funkce SYS_XMLGEN – vygeneruje několik XML dokumentů dle počtu řádků ve výsledku dotazu SYS_XMLAGG – vygeneruje jediný dokument Příklad: select SYS_XMLGEN(JMENO) from TRPASLICI; <?xml version="1.0"?> <JMENO>Stistko</JMENO> Databázové systémy II - př.10
Výpis tabulky ve formátu XML Funkce XMLelement – výpis pomocí elemetů XMLatributes – výpis jednotlivých atributů XMLforest – výpis atributů pomocí samostatných elementů Příklady: select xmlelement("trpaslik",xmlattributes(jmeno, narozen as "rok")) from TRPASLICI; <trpaslik JMENO="Stistko" rok="1980"></trpaslik> select xmlelement("trpaslik",xmlforest (jmeno, narozen as "rok")) <trpaslik><JMENO>Stistko</JMENO><rok>1980</rok></trpaslik> <trpaslik> <JMENO>Stistko</JMENO> <rok>1980</rok> </trpaslik> Databázové systémy II - př.10
Databázové systémy II - př.10 Datový typ SYS.XMLType Příklad CREATE TABLE XML_table (zaznam SYS.XMLType); Pomocí funkce SYS.XMLType.createxml(řetězec) můžeme konvertovat textový řetězec na typ SYS.XMLType Příklad použití INSERT INTO XML_table VALUES (SYS.XMLType.createxml(řetězec obsahující XML dokument)); Databázové systémy II - př.10
Databázové systémy II - př.10 Technologie XQuery Jazyk XQuery je nově přijatý standard standardizační organizací W3C. Jazyk XQuery používá množinu příkazů FLOWR (akronym složený z hlavních příkazů FOR, LET, WHERE, ORDER BY, RETURN) FOR – umožňuje iteraci přes sourozenecké uzly (analogie FROM v SQL) LET – znamená přiřazení WHERE – filtrovací kritérium ORDER BY – řazení RETURN - určuje návratový dokument formátovaný dle našich požadavků Technologie XQuery může být použita jak nad XML dokumenty, tak i pro relační tabulky. Tato technologie je také vhodná i pro vytváření XML dokumentů v repositáři. Databázové systémy II - př.10
Databázové systémy II - př.10 Balíček DBMS_XMLGEN Příklad použití v SQL dotazu: SELECT DBMS_XMLGEN.getXML('SELECT * FROM emp') FROM dual; Výsledek dotazu: <?xml version="1.0"?> <ROWSET> <ROW> <EMPNO>7369</EMPNO> <ENAME>SMITH</ENAME> <JOB>CLERK</JOB> <MGR>7902</MGR> <HIREDATE>17-DEC-1980 00:00:00</HIREDATE> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </ROW> ... </ROWSET> Databázové systémy II - př.10
Databázové systémy II - př.10 Balíček DBMS_XMLGEN Příklad použití v kodu PL/SQL: DECLARE ctx DBMS_XMLGEN.ctxHandle; xml CLOB; BEGIN ctx := dbms_xmlgen.newcontext('select * from emp'); dbms_xmlgen.setrowtag(ctx, 'MY-ROW-START-HERE'); xml := dbms_xmlgen.getxml(ctx); dbms_output.put_line(substr(xml,1,255)); END; / Databázové systémy II - př.10
Databázové systémy II - př.10 Otázky Děkuji za pozornost. Databázové systémy II - př.10