ZAČÍNÁME S
DB2 Express-C Kniha od komunity pro komunitu RAUL CHONG, IAN HAKES, RAV AHUJA PŘEDMLUVA DR. ARVIND KRISHNA
TŘETÍ VYDÁNÍ
2
Začínáme s DB2 Express-C
Třetí vydání (červen 2009) Třetí výtisk (říjen 2010) Toto vydání je aktuální pro IBM® DB2® Express-C verze 9.7.2 pro Linux®, UNIX® a Windows®. © Copyright IBM Corporation, 2007, 2010. Všechna práva vyhrazena.
Obsah O knize ............................................................................................................................... 9 Poznámky a patenty ...................................................................................................... 9 Kdo by měl číst tuto knihu? .......................................................................................... 10 Jaká je struktura knihy? ............................................................................................... 10 Kniha pro komunitu ...................................................................................................... 11 Autoři a spolupracovníci............................................................................................... 12 Poděkování .................................................................................................................. 13 Úvodní slovo ................................................................................................................ 14 ČÁST I – PŘEHLED A NASTAVENÍ................................................................................ 15 Kapitola 1 – Co je DB2 Express-C? ............................................................................... 17 1.1 Vývoj, nasazení a distribuce zdarma...bez omezení! ............................................ 17 1.2 Stažení DB2 Express-C ......................................................................................... 18 1.3 Uživatelská pomoc a technická podpora ............................................................... 19 1.4 DB2 servery ........................................................................................................... 19 1.5 DB2 klienti a ovladače ........................................................................................... 20 1.6 Volnost pro vývojáře aplikací ................................................................................. 21 1.7 DB2 verze versus DB2 edice ................................................................................. 22 1.8 Přechod na jinou DB2 edici ................................................................................... 22 1.9 Údržba a aktualizace DB2 Express-C ................................................................... 23 1.10 Související volně přístupný software a komponenty DB2.................................... 23 1.10.1 IBM Data Studio ............................................................................................ 24 1.10.2 DB2 Text Search .......................................................................................... 24 1.10.3 WebSphere Application Server – Community Edition .................................. 24 1.11 Shrnutí ................................................................................................................. 24 Kapitola 2 – Produkty a související funkce .................................................................. 27 2.1 Funkce obsažené v předplatné verzi DB2 Express (FTL) ..................................... 30 2.1.1 Opravné balíčky .............................................................................................. 30 2.1.2 Zotavení HADR (High Availability Disaster Recovery) ................................... 31 2.1.3 Replikace dat .................................................................................................. 31 2.2 Funkce, které nejsou dostupné v DB2 Express-C ................................................. 32 2.2.1 Dělení databází do oblastí .............................................................................. 32 2.2.2 Koncentrátor připojení .................................................................................... 33 2.2.3 Geodetic Extender .......................................................................................... 33 2.2.4 Řízení přístupu LBAC (Label-based Access Control) .................................... 33 2.2.5 Správa zátěže (Workload Manager - WLM) ................................................... 34 2.2.6 Vysoká komprese ........................................................................................... 35 2.2.7 SQL kompatibilita ............................................................................................ 36 2.3 Placené produkty, které jsou vázané na DB2 ........................................................ 37 2.3.1 DB2 Connect .................................................................................................. 37 2.3.2 InfoSphere Federation Server ........................................................................ 38 2.3.3 InfoSphere Replication Server ........................................................................ 39 2.3.4 Optim Development Studio (ODS) ................................................................. 39 2.3.5 Optim Database Administrator (ODA) ............................................................ 40 2.4 Nabídky DB2 v Amazon Elastic Compute Cloud ................................................... 40 2.5 Shrnutí ................................................................................................................... 40 Kapitola 3 – Instalace DB2 ............................................................................................. 41
4
Začínáme s DB2 Express-C
3.1 Předinstalační požadavky ...................................................................................... 41 3.2 Práva v operačním systému pro instalaci .............................................................. 41 3.3 Instalační průvodce ................................................................................................ 42 3.4 Validace vaší instalace .......................................................................................... 49 3.5 „Tichá“ instalace..................................................................................................... 51 3.6 Shrnutí ................................................................................................................... 52 3.7 Cvičení ................................................................................................................... 52 Kapitola 4 –Prostředí DB2 .............................................................................................. 57 4.1 Konfigurace DB2 .................................................................................................... 65 4.1.1 Proměnné prostředí ........................................................................................ 66 4.1.2 Konfigurace správce DBM (dbm cfg).............................................................. 66 4.1.3 Konfigurace databáze (db cfg) ....................................................................... 68 4.1.4 Profilový registr DB2 ....................................................................................... 69 4.2 DB2 Administration Server (vývojově zastaralý) ................................................... 70 4.3 Shrnutí ................................................................................................................... 72 4.4 Cvičení ................................................................................................................... 72 Kapitola 5 – Nástroje DB2 .............................................................................................. 77 5.1 IBM Data Studio ..................................................................................................... 79 5.2 Řídicí centrum (vývojově zastaralý) ....................................................................... 80 5.2.1 Spuštění Řídicího centra ................................................................................ 83 5.3 Editor příkazů (vývojově zastaralý) ........................................................................ 83 5.3.1 Spouštění Editoru příkazů .............................................................................. 84 5.3.2 Přidání připojení k databázi ............................................................................ 85 5.4 Asistent pro dotazy SQL (vývojově zastaralý) ....................................................... 85 5.5 Tlačítko Zobrazit příkaz (vývojově zastaralý) ........................................................ 87 5.6 Centrum úloh (vývojově zastaralý) ........................................................................ 88 5.6.1 Databáze Tools Catalog (vývojově zastaralý) ................................................ 88 5.7 Žurnál (vývojově zastaralý) .................................................................................... 89 5.7.1 Spuštění Žurnálu ............................................................................................ 90 5.8 Health Monitor (vývojově zastaralý)....................................................................... 91 5.8.1 Centrum narušení (vývojově zastaralý) .......................................................... 91 5.9 Self-tuning memory manager ................................................................................ 94 5.10 Skriptování ........................................................................................................... 94 5.10.1 SQL skripty ................................................................................................... 94 5.10.2 Skripty operačního systému (shellu) ............................................................ 96 5.11 Výhoda Windows Vista ........................................................................................ 96 5.12 Shrnutí ................................................................................................................. 97 5.13 Cvičení ................................................................................................................. 97 ČÁST II – UČÍME SE DB2: DATABÁZOVÁ ADMINISTRACE ..................................... 102 Kapitola 6 –Architektura DB2 ...................................................................................... 103 6.1 Procesní model DB2 ............................................................................................ 103 6.2 Paměťový model DB2 .......................................................................................... 105 6.3 Úložný model DB2 ............................................................................................... 106 6.3.1 Stránky a prostory......................................................................................... 107 6.3.2 Fondy vyrovnávací paměti (buffer pooly) ..................................................... 107
Contents 6.3.3 Tabulkové prostory ....................................................................................... 109 6.4 Shrnutí ................................................................................................................. 114 6.5 Cvičení ................................................................................................................. 114 Kapitola 7 – Připojování klientů DB2 .......................................................................... 119 7.1 DB2 Adresáře ...................................................................................................... 119 7.1.1 Adresář Systémové databáze....................................................................... 119 7.1.2 Adresář Lokální databáze ............................................................................. 120 7.1.3 Adresář uzlu .................................................................................................. 120 7.1.4 Adresář DCS ................................................................................................. 120 7.2 Asistent pro konfiguraci (vývojově zastaralý) ...................................................... 120 7.2.1 Potřebná nastavení na straně serveru ......................................................... 121 7.2.2 Potřebná nastavení na straně klienta ........................................................... 124 7.2.3 Vytváření klientských a serverových profilů.................................................. 128 7.3 Shrnutí ................................................................................................................. 131 7.4 Cvičení ................................................................................................................. 131 Kapitola 8 – Práce s databázovými objekty ............................................................... 135 8.1 Schémata ............................................................................................................. 135 8.2 Veřejná synonyma (nebo aliasy) ......................................................................... 136 8.3 Tabulky ................................................................................................................ 137 8.3.1 Datové typy ................................................................................................... 137 8.3.2 Identifikační sloupce ..................................................................................... 142 8.3.3 Sekvenční objekty......................................................................................... 142 8.3.4 Systémové katalogové tabulky ..................................................................... 143 8.3.5 Deklarované globální dočasné tabulky (DGTTs) .......................................... 144 8.3.6 Vytvářecí globální dočasné tabulky (CGTT) ................................................. 146 8.4 Pohledy ................................................................................................................ 146 8.5 Indexy .................................................................................................................. 147 8.5.1 Poradce s návrhem....................................................................................... 147 8.6 Referenční integrita.............................................................................................. 149 8.7 Vývoj schématu.................................................................................................... 150 8.8 Shrnutí ................................................................................................................. 151 8.9 Cvičení ................................................................................................................. 151 Kapitola 9 – Nástroje pro přesuny dat ........................................................................ 155 9.1 Utilita EXPORT .................................................................................................... 156 9.2 Utilita IMPORT ..................................................................................................... 157 9.3 Utilita LOAD ......................................................................................................... 157 9.4 Utilita db2move .................................................................................................... 159 9.5 Utilita db2look ...................................................................................................... 159 9.6 Shrnutí ................................................................................................................. 162 9.7 Příklady ................................................................................................................ 162 Kapitola 10 – Zabezpečení databáze ........................................................................... 165 10.1 Autentifikace ...................................................................................................... 166 10.2 Autorizace .......................................................................................................... 167 10.2.1 Privilegia ..................................................................................................... 167 10.2.2 Autority ........................................................................................................ 168
5
6
Začínáme s DB2 Express-C
10.2.3 Role............................................................................................................. 173 10.3 Skupinová privilegia ........................................................................................... 174 10.4 Skupina PUBLIC ................................................................................................ 174 10.5 Příkazy GRANT a REVOKE .............................................................................. 174 10.6 Autorizace a kontrola privilegií ........................................................................... 175 10.7 Rozšířená bezpečnost ve Windows................................................................... 176 10.8 Shrnutí ............................................................................................................... 177 10.9 Cvičení ............................................................................................................... 177 Kapitola 11 – Záloha a obnovení ................................................................................. 183 11.1 Databázové logování (protokolování) ................................................................ 183 11.2 Typy logů ........................................................................................................... 184 11.3 Typy logování..................................................................................................... 184 11.3.1 Kruhové logování ........................................................................................ 184 11.3.2 Archivní logování ........................................................................................ 185 11.4 Logování databáze z Řídicího centra ................................................................ 186 11.5 Parametry logování ............................................................................................ 187 11.6 Záloha databáze ................................................................................................ 189 11.7 Obnova databáze .............................................................................................. 190 11.7.1 Typy obnovení ............................................................................................ 190 11.7.2 Obnova databáze ....................................................................................... 191 11.8 Další operace s BACKUP a RESTORE ............................................................ 191 11.9 Shrnutí ............................................................................................................... 192 11.10 Cvičení ............................................................................................................. 192 Kapitola 12 – Úlohy pro údržbu ................................................................................... 195 12.1 REORG, RUNSTATS, REBIND......................................................................... 195 12.1.1 Příkaz REORG ........................................................................................... 196 12.1.2 Příkaz RUNSTATS ..................................................................................... 196 12.1.3 BIND / REBIND........................................................................................... 197 12.1.4 Úlohy pro údržbu z Řídicího centra ............................................................ 198 12.2 Možnosti údržby ................................................................................................. 199 12.3 Shrnutí ............................................................................................................... 201 12.4 Cvičení ............................................................................................................... 201 Kapitola 13 – Souběžnost a uzamykání ...................................................................... 205 13.1 Transakce .......................................................................................................... 205 13.2 Souběžnost ........................................................................................................ 206 13.3 Problémy bez kontroly souběžnosti ................................................................... 207 13.3.1 Ztráta aktualizace ....................................................................................... 207 13.3.2 Nepotvrzené čtení....................................................................................... 208 13.3.3 Neopakovatelné čtení ................................................................................. 208 13.3.4 Fantomové čtení ......................................................................................... 209 13.4 Úrovně izolace ................................................................................................... 210 13.4.1 Nepotvrzené čtení....................................................................................... 210 13.4.2 Kurzorová stabilita ...................................................................................... 211 13.4.3 Čtecí stabilita .............................................................................................. 213 13.4.4 Opakovatelné čtení ..................................................................................... 213
Contents 13.4.5 Porovnání úrovní izolace ............................................................................ 213 13.4.6 Nastavení úrovně izolace ........................................................................... 214 13.5 Eskalace zámků ................................................................................................. 215 13.6 Monitorování uzamykání .................................................................................... 216 13.7 Čekání zámků .................................................................................................... 217 13.8 Výskyty a detekce uváznutí (deadlock) ............................................................. 218 13.9 Nejvhodnější přístupy k souběžnosti a uzamykání............................................ 219 13.10 Shrnutí ............................................................................................................. 221 13.11 Cvičení ............................................................................................................. 221 ČÁST III – UČÍME SE DB2: VÝVOJ APLIKACÍ ............................................................ 227 Kapitola 14 – Úvod do vývoje aplikací v DB2 ............................................................. 229 14.1 Vývoj aplikací DB2: velký přehled...................................................................... 229 14.2 Vývoj na straně serveru ..................................................................................... 231 14.2.1 Uložené procedury...................................................................................... 231 14.2.2 Uživatelsky definované funkce ................................................................... 232 14.2.3 Triggery ....................................................................................................... 232 14.3 Vývoj na straně klienta ....................................................................................... 233 14.3.1 Vložené SQL ............................................................................................... 233 14.3.2 Statické SQL versus Dynamické SQL ........................................................ 234 14.3.3 CLI a ODBC ................................................................................................ 236 14.3.4 JDBC, SQLJ a pureQuery .......................................................................... 239 14.3.5 OLE DB ....................................................................................................... 241 14.3.6 ADO.NET .................................................................................................... 242 14.3.7 PHP............................................................................................................. 243 14.3.8 Ruby on Rails ............................................................................................. 244 14.3.9 Perl.............................................................................................................. 244 14.3.10 Python ....................................................................................................... 244 14.4 XML a DB2 pureXML ......................................................................................... 245 14.5 Webové služby................................................................................................... 245 14.6 Administrativní API............................................................................................. 247 14.7 Další vývoj.......................................................................................................... 247 14.7.1 Pracování s Microsoft Access a Microsoft Excel ........................................ 247 14.8 Vývojové nástroje............................................................................................... 249 14.9 Jednoduché programy ....................................................................................... 249 14.10 Shrnutí ............................................................................................................. 250 Kapitola 15 – DB2 pureXML ......................................................................................... 251 15.1 Použití XML v databázích .................................................................................. 252 15.2 XML databáze .................................................................................................... 252 15.2.1 Databáze s povoleným XML ....................................................................... 252 15.2.2 Nativní XML databáze ................................................................................ 253 15.3 XML v DB2 ......................................................................................................... 254 15.3.1 Výhody technologie pureXML ..................................................................... 255 15.3.2 Základy XPath ............................................................................................ 257 15.3.3 Základy XQuery .......................................................................................... 260 15.3.4 Vkládání XML dokumentů........................................................................... 261
7
8
Začínáme s DB2 Express-C
15.3.5 Dotazování XML dat ................................................................................... 264 15.3.6 Spojení v SQL/XML .................................................................................... 271 15.3.7 Spojení s XQuery........................................................................................ 272 15.3.8 Operace UPDATE a DELETE .................................................................... 272 15.3.9 XML indexování .......................................................................................... 275 15.4 Práce s XML schématy ...................................................................................... 276 15.4.1 Registrování vašich XML schémat ............................................................. 276 15.4.2 Validace XML schématu ............................................................................. 278 15.4.3 Další podpora XML ..................................................................................... 279 15.6 Shrnutí ............................................................................................................... 280 15.7 Příklady .............................................................................................................. 280 Příloha A – Řešení problémů ....................................................................................... 283 A.1 Zjišťování více informací o chybových kódech ................................................... 284 A.2 SQLCODE a SQLSTATE .................................................................................... 284 A.3 Administrační notifikační log................................................................................ 285 A.4 db2diag.log .......................................................................................................... 285 A.5 CLI trasy .............................................................................................................. 286 A.6 Nedostatky a opravy DB2 .................................................................................... 286 Příloha B – Odkazy a zdroje ......................................................................................... 287 B.1 Odkazy ................................................................................................................ 287 B.2 Webové stránky: .................................................................................................. 287 B.3 Knihy .................................................................................................................... 288 B.4 Kontaktní emaily .................................................................................................. 289
O knize Poznámky a patenty © Copyright IBM Corporation 2007, 2010 Všechna práva vyhrazena. IBM Canada 8200 Warden Avenue Markham, ON L6G 1C7 Canada Žádná část této publikace nesmí být kopírována a rozmnožována nebo překládána do jiného jazyka bez předcházejícího svolení vlastníků výše zmíněných autorských práv. IBM si tímto vyhrazuje právo na neposkytování žádných záruk, či případně reflektování stížností spojených s obsahem a zněním tohoto dokumentu - a výslovně tímto odmítá jakékoliv využití tohoto dokumentu za účelem sebeobohacení či zisku. IBM nepřijímá žádnou zodpovědnost za jakékoliv chyby, které se mohou objevit v tomto dokumentu. Informace obsažené v tomto dokumentu se mohou změnit bez předchozího ohlášení. IBM si vyhrazuje právo udělat jakékoliv změny nebo revize bez souhlasu jakékoliv osoby. IBM nepřijímá žádný závazek k udržování zde uvedených informací aktuálními. Informace v tomto dokumentu, které se týkají produktů jiných firem než IBM, byly dodány od dodavatelů těchto produktů. IBM netestovalo tyto produkty a nemůže garantovat přesnost výkonu, kompatibility a další veličiny spojené s těmito cizími produkty. Otázky k produktům jiných firem by měly být adresovány dodavatelům těchto produktů. IBM, IBM logo a ibm.com jsou ochranné známky nebo registrované názvy International Business Machines Corp., registrované v mnoha jurisdikcích po celém světě. Ostatní produkty a názvy služeb mohou být ochrannou známkou IBM nebo jiných firem. Současný seznam ochranných známek firmy IBM je k dispozici na webu pod “Copyright and trademark information” na www.ibm.com/legal/copytrade.shtml. Java a všechny Java-based ochranné známky a loga jsou majetkem firmy Sun Microsystems, Inc. ve Spojených Státech a dalších zemích. Microsoft a Windows jsou ochranné známky Microsoft Corporation ve Spojených státech a dalších zemích. Linux je registrovanou známkou Linuse Torvaldse ve Spojených státech a dalších zemích. UNIX je registrovanou známkou The Open Group ve Spojených státech a dalších zemích. Ostatní názvy společností, produktů nebo služeb mohou být ochrannými známkami nebo službami s těmito známkami spojenými. Reference na IBM produkty nebo služby uvedené v publikaci nezaručují, že výše zmíněné jsou k dispozici ve všech zemích, kde IBM působí.
10
Začínáme s DB2 Express-C
Kdo by měl číst tuto knihu? Tato kniha je určená pro kohokoliv, kdo pracuje nebo chce pracovat s databázemi, tedy databázové administrátory (DBA), vývojáře aplikací, konzultanty, softwarové architekty, produktové manažery, školitele a studenty.
Jaká je struktura knihy? Část I, Přehled a nastavení: vysvětluje podstatu a vlastnosti edice DB2 Express-C, představuje rodinu produktů DB2 a její vlastnosti, pomáhá při instalaci, vytvoření databází a prozkoumává nástroje, se kterými je dodávána DB2. Část II, Učíme se DB2: Databázová administrace je navržena tak, aby vás seznámila s DB2 prostředím, architekturou, vzdáleným připojováním, databázovými objekty, pohyby dat (import/export/načtení), bezpečností, zálohou a obnovou, souběžností, uzamykáním a ostatními běžnými úkoly správy. Část III - Učíme se DB2: vývoj aplikací, představuje vývoj aplikací v DB2, obsahuje vývoj na straně serveru a klienta. Je zde také probrán SQL/XML, XQuery a pureXML®. Příloha obsahuje užitečné informace o řešení problémů. Cvičení jsou obsažena ve většině kapitol; každý požadovaný vstupní soubor se nachází v komprimovaném souboru expressc_book_exercises_9.7.zip , který doplňuje tuto knihu. Materiál v této knize je také použit jako součást kurzů DB2 on Campus Program a úzce souvisí s e-learningovými videoprezentacemi, které jsou dostupné na www.channelDB2.com/oncampus. Více o DB2 on Campus programu se můžete dozvědět na stránce DB2 Express-C: www.ibm.com/db2/express/students.html.
Poznámka: Pro více informací o programu DB2 on Campus se podívejte na video zde: http://www.channeldb2.com/video/video/show?id=807741:Video:3902
Ve třetím vydání byly provedeny změny a přibyly také nové informace. Pro ty, kteří četli druhé vydání (které pokrývalo verzi 9.5), jsme udělali jednodušší vyhledávání změn, které jsou obsažené v DB2 verze 9.7. Tyto změny budou označeny ikonou:
O knize
11
Kniha pro komunitu Tato kniha byla vytvořena týmem DB2 Express-C. Online verze je uvolněna zdarma pro komunitu DB2 Express-C. V době psaní byla tato publikace stažena více než 85 000-krát a byla přeložena dobrovolníky po celém světě do 9 jazyků, což značí opravdu výrazný přínos komunity! Pokud nám chcete poslat zpětnou vazbu, přispět novým materiálem, vylepšit stávající obsah nebo pomoci s překladem knihy do jiného jazyka, pošlete prosím mail s Vaším plánovaným přínosem na
[email protected] s předmětem e-mailu “DB2 ExpressC book changes.” Úspěch této knihy byl inspirací k vývoji více než 25 nových knih zdarma, které mapují produkty IBM a také technologie nepocházející z IBM. Kniha je součástí série DB2 on Campus Book Series, která byla zahájena v lednu 2010. Pro více informací o knize nebo sérii DB2 on Campus Book Series navštivte webovou stránku IBM® DB2 Express-C na ibm.com/db2/express
12
Začínáme s DB2 Express-C
Autoři a spolupracovníci Následující osoby vytvořily buď samotný obsah knihy, nebo se výrazně podílely na spolupráci při jejím vzniku.
Raul F. Chong – hlavní autor Raul je programovým manažerem DB2 on Campus v IBM laboratořích v Torontu
Ian Hakes – spoluautor a editor Ian je bývalou oporou komunity DB2 Express-C a nyní pracuje jako expert využití v IBM laboratořích v Torontu.
Rav S. Ahuja – spoluautor a vydavatel Rav je DB2 senior produktovým manažerem v IBM laboratořích v Torontu. Český překlad knihy vznikl díky aktivitám těchto osob: Jiří Šůla – překlad, korekce Ostrava, databázový specialista
Pavel Šustr – korekce IBM Toronto Lab, vývoj kernelu DB2 pro Linux, UNIX a Windows
O knize
13
Poděkování Velice děkujeme těmto osobám za jejich pomoc a práci na materiálech, které jsou uvedeny v referencích této publikace: Tedu Wassermanovi, Claře Liu a Paulu Yipovi z IBM laboratořích v Torontu, kteří vyvinuli materiál sloužící jako framework pro tuto knihu. Donu Chamberlinovi a Cindy Saracco za jejich IBM developerWorks články o XQuery, a Matthiasu Nicolovi za jeho prezentaci o pureXML. Kevinu Czapovi a Grantu Hutchisonovi za vývoj technických materiálů. Katherine Boyachokové a Natashe Tolubové za obal a vzhled knihy. Susan Visserové za recenzi a poskytnutí pomoci při vydávání této publikace.
14
Začínáme s DB2 Express-C
Úvodní slovo Inovace je základním kamenem technického pokroku. V IBM je inovace nedílnou součástí evoluce našich databázových serverů. IBM bylo průkopníkem v managementu dat v 60. a 70. letech - pokračujeme v tomto trendu a přinášíme do této oblasti stále nové technologie, což je reflektováno tisíci patenty naší firmy. Výsledkem je, že i největší společnosti na světě, při uchování nejcitlivějších firemních dat a dalších řešení, spoléhají na produkty IBM, včetně DB2. DB2 není určena jen pro enterprise segment. S příchodem oceňované DB2 Express-C je DB2 technologie k dispozici i pro malé a středně velké firmy – a to vše zdarma! Přestože jsou na trhu další volně přístupné a open-source databázové servery, DB2 Express-C nabízí oproti těmto alternativám obrovské výhody. DB2 Express-C obsahuje velké množství pokročilých vlastností. Tyto inovace poskytují nové možnosti, redukují administrativní náklady, zlepšují výkon a redukují cenu infrastruktury. Hybridní technologie DB2 Express-C je schopná spravovat relační a také XML data, která jsou uložena v jejich nativním formátu. Jde o jednu z oblastí, která dělá DB2 ideálním řešením pro SOA a Web 2.0 aplikace, kde jsou XML data hojně využívána. Na rozdíl od dalších databázových serverů "zdarma" nenajdete v DB2 Express-C velký počet omezení. Žádný limit v množství dat, která se mohou v databázích uložit, stejně tak není omezen počet databází, které může uživatel vytvořit. A samozřejmě - pokud požadujete podporu nebo asistenci od IBM, pomoc je vzdálena jen jedno kliknutí myši. Tato kniha slouží jako průvodce začátečníka, který chce začít používat DB2 Express-C. Pomůže vám s pochopením konceptů DB2 a rozvine vaše schopnosti pro administraci DB2 serverů a vývoj aplikací. Schopnosti a znalosti, které získáte, můžete snadno použít v dalších edicích DB2 na Linuxu, UNIXu a Windows. Přestože není DB2 Express-C open-source produktem, my v IBM velmi podporujeme nadšení a související iniciativy. Jsem potěšen tím, že tato kniha je vyvíjena komunitou DB2 Express-C a bude zdarma k dispozici komukoliv z komunity. Vyzývám vás k obohacení a aktualizování této publikace - ať už zkušenostmi a postřehy, ale také vůlí překládat tuto knihu do dalších jazyků.
Arvind Krishna generální manažer Information Management, IBM Software Group
ČÁST I – PŘEHLED A NASTAVENÍ
1 Kapitola 1 – Co je DB2 Express-C? Databázový software DB2 Express-C ("DB2 Express-C") je členem rodiny IBM DB2 - velice výkonného softwaru pro správu relačních a XML dat. DB2 Express-C je edicí DB2, která je zdarma, bez limitů a je i snadno použitelná. C v názvu DB2 Express-C znamená Komunitu (Community). Komunita uživatelů DB2 Express-C se spojuje dohromady, aby si uživatelé vzájemně pomohli - ať už online nebo offline. DB2 Express-C komunita zahrnuje celou škálu lidí a firem, jejichž objektem zájmu je architektura, vývoj a funkčnost databázových řešení. Členy komunity jsou: Vývojáři aplikací, kteří potřebují otevřené standardy databázového softwaru k vývoji samostatných, klient-server, webových a enterprisových aplikací Výrobci hardware, infrastruktury a dalších typů řešení, která vkládají, používají nebo využívají kompletní databázový server jako součást jejich řešení Konzultanti, databázoví administrátoři, IT architekti, kteří potřebují robustní databázový server ke školení, rozvoji schopností, vyzkoušení a vytváření prototypů Nové, malé a středně velké firmy, které potřebují spolehlivé databázové servery pro jejich aplikace a operace Databázoví nadšenci a lidé, kteří milují technologické novinky a kteří chtějí používat databázový server pro vývoj Web 2.0 a aplikací nové generace Studenti, učitelé a ostatní akademičtí pracovníci, kteří chtějí velice všestranný databázový server pro výuku, výukový software, projekty a výzkum DB2 Express-C obsahuje stejné základní funkce a je postavena na stejném jádru jako placené edice DB2 pro Linux, UNIX a Windows. DB2 Express-C může být provozována na 32-bitových nebo 64-bitových operačních systémech s Linuxem nebo Windows. Je také k dispozici pro Solaris (x64) a jako beta verze na Mac OS X (x64). Může být zprovozněna na systému s jakkoliv velkou pamětí a libovolným počtem procesorů, a nemá žádné zvláštní požadavky na úložiště dat nebo systémová nastavení. DB2 Express-C také zdarma obsahuje pureXML. PureXML je unikátní technologie DB2, která ukládá a zpracovává XML dokumenty nativně.
1.1 Vývoj, nasazení a distribuce zdarma...bez omezení! Věta nadpisu shrnuje klíčové myšlenky, které stojí za DB2 Express-C:
18
Začínáme s DB2 Express-C Vývoj zdarma: Pokud jste programátor aplikací a potřebujete databázi pro vaši aplikaci, můžete použít DB2 Express-C. Nasazení zdarma: Pokud pracujete ve výrobní sféře a potřebujete databázový systém, který uchová vaše důležité záznamy, můžete použít DB2 Express-C. Distribuce zdarma: Pokud vyvíjíte aplikaci nebo nástroj, který vyžaduje interní databázi, můžete se rozhodnout pro DB2 Express-C. Přestože DB2 Express-C bude součástí vaší aplikace a bude tak distribuována pokaždé, když aplikaci prodáte, je její použití stále zdarma. Při re-distribuci DB2 Express-C je vyžadována registrace v IBM, je ale také zdarma. Bez limitů: Konkurence nabízí limity velikosti databází, počet databází, počet uživatelů - s DB2 Express-C nenarazíte na ŽÁDNÁ z těchto omezení. Vaše databáze může pokračovat v růstu bez toho, aniž by narušila licenční smlouvu. Nejsou zde také žádná omezení na počet připojení nebo uživatelů na server.
Poznámka: Pokud se chcete naučit více o DB2 Express-C a jeho roli v informačním světě a Web 2.0, podívejte se na tuto videoprezentaci: http://www.channeldb2.com/video/video/show?id=807741:Video:3922
1.2 Stažení DB2 Express-C Všechny DB2 Express-C soubory jsou k dispozici zdarma ke stažení a použití na ibm.com/db2/express. K dispozici jsou následující verze: DB2 Express-C 9.7.2 pro Windows DB2 Express-C 9.7.2 pro Windows 64-bit DB2 Express-C 9.7.2 pro Linux DB2 Express-C 9.7.2 pro Linux 64-bit DB2 Express-C 9.7.2 pro Linux on Power DB2 Express-C 9.7.2 pro Solaris x86-64 DB2 Express-C 9.5.2 beta pro Mac OS X Poznámka: DB2 Express-C pro Windows také nabízí odlehčenou verzi, která je o 44% menší než verze standardní. Je k dispozici pouze v angličtině a neobsahuje žádné grafické nástroje ani funkci Text Search.
Chapter 1 – What is DB2 Express-C?
19
1.3 Uživatelská pomoc a technická podpora Pokud máte odbornou otázku týkající se DB2 Express-C, můžete ji poslat na DB2 ExpressC forum. Toto fórum (zdarma přístupné) je monitorováno DB2 experty z firmy IBM, přestože komunita dobrovolníků odpovídá na většinu otázek sama. IBM také dává uživatelům možnost koupit pro DB2 Express ("DB2 Express") roční předplatné (také známé jako Fixed Term License nebo FTL). Toto předplatné zahrnuje technickou podporu IBM (24 x 7) a updaty softwaru. Kromě podpory a aktualizace softwaru dostane uživatel při zaplacení ročního poplatku (zhruba $1,990 za server a rok v USA, může se lišit podle zemí) také dodatečné funkce: HADR (clustering pro High Availability a Disaster Recovery), SQL replikace (pro replikaci dat s ostatními DB2 servery) a Backup Compression (pro vytváření komprimovaných záloh databáze). Více informací o možnostech předplatného je k nalezení zde: ibm.com/db2/express/support.html
1.4 DB2 servery Všechny edice DB2 serverů obsahují stejné core komponenty; dodatečné funkcionality jsou dodávány jako balíčky, podle kterých si uživatel může vybrat edici, která mu bude vyhovovat. Obrázek 1.1 ilustruje rozdíly mezi DB2 edicemi.
Obrázek 1.1 - DB2 Servery Jak je ukázáno na Obrázku 1.1, DB2 Express-C je stejný jako DB2 Express bez několika komponent. DB2 Express-C je zdarma pro komunitu. Technická podpora je k dispozici přes online fórum, nebo lze využít oficiální IBM technickou podporu (24 x 7) pokud si zaplatíte roční předplatné (DB2 Express Fixed Term License). Obrázek 1.1 také vysvětluje, proč je tak jednoduché upgradovat z DB2 Express-C. Pokud chcete v budoucnu upgradovat na jakoukoliv jinou DB2 edici, všechny DB2 servery mají stejné core komponenty. To také znamená, že jakékoliv aplikace vyvinuté pro jednu edici
20
Začínáme s DB2 Express-C
budou bez modifikací pracovat i v edicích jiných. Také znalosti získané v jedné edici můžete použít i v ostatních edicích.
1.5 DB2 klienti a ovladače DB2 klient obsahuje nezbytnou funkcionalitu k připojení se na DB2 server; nicméně DB2 klient nemusí být vždy nainstalován. Například aplikace JDBC typu 4 potřebují k připojení na DB2 server pouze nainstalovaný JDBC driver. DB2 klienti a drivery jsou k dispozici v několika variantách: IBM Data Server Client: nejvíce kompletní, obsahuje GUI nástroje, drivery. IBM Data Server Runtime Client: odlehčený klient se základní funkcionalitou, obsahuje drivery. DB2 Runtime Client Merge Modules for Windows: převážně užíván jako vnořený DB2 runtime klient jako součást instalace Windows aplikace. IBM Data Server Driver for JDBC and SQLJ: umožňuje Java aplikacím připojovat se na server, aniž by bylo nutné instalovat celý klient. IBM Data Server Driver for ODBC and CLI: umožňuje ODBC a CLI aplikacím připojit se na DB2 server bez nutnosti instalace klienta. IBM Data Server Driver Package: obsahuje Windows driver, který podporuje .NET rozhraní, ODBC, CLI a open source. Tento driver byl kdysi známý jako IBM Data Server Driver for ODBC, CLI and .NET. Obrázek 1.2 ukazuje rozdílné DB2 klienty a ovladače.
Chapter 1 – What is DB2 Express-C?
21
Obrázek 1.2 – DB2 klienti a ovladače Na levé straně Obrázku 1.2, jsou zobrazeny všechny DB2 ovladače a klienti. Přestože všichni klienti DB2 obsahují požadované ovladače, počínaje DB2 databázovým serverem ("DB2") verze 9 poskytujeme ovladače také samostatně. DB2 klienti a ovladače jsou zadarmo a jsou vám k dispozici ke stažení z webu DB2 Express-C. Klienti a ovladače mohou sloužit k připojení k DB2 serveru na Linuxu, v UNIXu nebo v systémech Windows. Pro konektivitu k DB2 z z/OS® nebo DB2 pro i5/OS® server potřebujete využít DB2 Connect™ server (ukázán uprostřed Obrázku 1.2). Software na připojení k DB2 si probereme v Kapitole 2. Poznámka: Přestože se tato kniha zaměřuje na DB2 databázový server, klienti IBM Data Server se také mohou připojit k jiným databázovým serverům rodiny IBM - například Informixu. Proto je všeobecný název "IBM Data Server klient" rozdílný oproti konkrétnějšímu "DB2 klient".
1.6 Volnost pro vývojáře aplikací DB2 nabízí prostředí pro vývoj aplikací, které je založeno na standardech a je kódově nezávislé napříč celou rodinou DB2. SQL standardizace celé produktové linie DB2 poskytuje běžnou sadu programového rozhraní pro přístup k databázím. Navíc každý produkt DB2 poskytuje SQL prekompilátory a aplikační programová rozhraní (API), která dovolují vývojářům vložit statický nebo dynamický SQL do přenositelných verzí programů. DB2 má také nativně spravovaný .NET provider a integraci s nástroji Microsoft® Visual Studio. Jazyky a standardy, které můžete použít s DB2: SQL, XQuery, XPath C/C++ (CLI, ODBC a vložené SQL) Java (JDBC a SQLJ) COBOL PHP Perl Python Ruby on Rails .NET jazyky OLE-DB ADO MS Office: Excel, Access, Word Webové služby
22
Začínáme s DB2 Express-C
1.7 DB2 verze versus DB2 edice Pokud jste mezi produkty DB2 nováčky, můžete být lehce zmatení rozdílem mezi verzí DB2 a edicí DB2. Jednou za několik let IBM veřejně vydává novou DB2 verzi. Verze obsahuje nové funkce a výrazná vylepšení produktu. Aktuálně podporována verze je DB2 verze 9. Verze může mít také svá vydání, která mohou obsahovat nové funkce, ne ale natolik významná, aby vytvořily novou verzi. Například 9.5 a 9.7 jsou vydání DB2 verze 9. Během několika posledních let IBM přišlo s novým vydáním DB2 každé 1-2 roky, přestože mezi novými verzemi jsou obvykle více než tři roky. Nejnovější verze je v9.7, která se stala veřejně dostupnou (GA - general ability) v červnu 2009. Každé vydání může také obsahovat několik úrovní úprav, které obvykle obsahují opravy aktuálních problémů a nově dodané funkce. V době psaní této knihy je nejnovější verze, vydání, modifikace (V,R,M - version, release,modification) DB2 Express-C 9.7.0, které odpovídá označení 9.7 s opravným balíčkem 0, což znamená, že je na úrovni GA. Na druhou stranu mají edice vybrané balíčky, případně skupiny balíčků, které jsou propojeny s určitou edicí. Jak bylo zmíněno dříve, edice se různí právě balíčky, funkcemi, cenou a licencemi. DB2 verze 9.7 (také známo jako DB2 9.7) má několik edic; například DB2 Express-C 9.7, DB2 Express 9.7, DB2 Workgroup 9.7 a DB2 Enterprise 9.7 (viz Obrázek 1.1).
1.8 Přechod na jinou DB2 edici S růstem vaší databáze může vyvstat potřeba upgradu na edici DB2, která podporuje silnější hardwarovou konfiguraci. Jestliže tato situace nastane, upgrade na jinou edici DB2 je jednoduchý: Pokud upgradujete z DB2 Express-C na DB2 Express (Fixed Term License) na stejném počítači, vše co potřebujete, je zadat licenci do programu db2licm. Pokud upgradujete na jinou DB2 edici na stejném počítačovém systému, odinstalujte DB2 Express-C a následně nainstalujte novou edici DB2. Při odinstalaci DB2 Express-C nejsou vaše databáze mazány (ale vždy se doporučuje jejich zálohování ). Pokud upgradujete DB2 a nová edice bude nainstalovaná na jiný počítač, ale stejný operační systém, nainstalujte novou DB2 edici na nový počítač, na starém počítači proveďte zálohu databází, tuto zálohu přeneste na nový systém a databáze obnovte. Potřebujete také uložit konfiguraci instance (dbm cfg) ze starého počítače a aplikovat tuto konfiguraci na počítači novém. Příkazy pro backup a restore jsou detailněji probírány v Kapitole 11, Záloha a obnovení. Nastavení dbm cfg je věnováno více místa v Kapitole 5, DB2 prostředí. Ani v jednom případě není třeba modifikovat vaši klientskou aplikaci.
Chapter 1 – What is DB2 Express-C?
23
1.9 Údržba a aktualizace DB2 Express-C Instalační image DB2 Express-C jsou aktualizovány pravidelně. Tyto aktualizace se v zásadě shodují s dostupností nových vydání nebo verzí (v případě, že je opraveno velké množství chyb). V minulosti byl DB2 Express-C typicky updatován jednou ročně. Nicméně DB2 Express-C je nabízen bezplatně, bez záruk, nepřichází s oficiálním a periodickým vydáním nebo balíky bugfixů (které jsou uvolněny několikrát ročně). Jakmile je k dispozici aktualizovaná verze, případně nové vydání, starší verze DB2 Express-C nejsou dále udržovány a podporovány. Jak bylo zmíněno dříve, pokud vyžadujete přístup k bezpečnostním fixům a pravidelně plánovaným updatům nebo fix balíkům, IBM nabízí roční předplatné (FTL). Po zaplacení předplatného je možné vaši instalaci DB2 Express-C updatovat licenčním klíčem pro FTL, což vás opravňuje k přístupu k technické podpoře DB2 a bugfixům během celé doby platnosti licence. Díky předplatnému je také možné zdarma upgradovat verze, případně zůstat u své starší verze a pouze aplikovat bugfixy a bezpečnostní patche po dobu platnosti vaší ročního předplatného.
1.10 Související volně přístupný software a komponenty DB2 Veškerý software je k dispozici zdarma ke stažení v sekci download na stránkách DB2 Express-C (www.ibm.com/db2/express/download.html). Kromě softwaru DB2 Express-C jsou zde k dispozici také další užitečné softwarové balíky, stáhnutelné a použitelné zdarma: •
Visual Studio Add-ins
•
DB2 Spatial Extender
Užitečnými můžete shledat také dodatečné toolkity založené na DB2 Express-C, které jsou k dispozici ke stažení z webu IBM Alphaworks (www.alphaworks.ibm.com/datamgmt): •
Starter Toolkit pro DB2 on Rails (www.alphaworks.ibm.com/tech/db2onrails/)
•
Web 2.0 Starter Toolkit pro DB2 (www.alphaworks.ibm.com/tech/web2db2)
Pokud sháníte nenáročný aplikační server zdarma, IBM vám nabízí: •
WebSphere® Application Server – Community Edition (WAS CE)
Poznámka: Přestože prostorová data jsou v DB2 dostupná již téměř 10 let, ví o tom poměrně málo uživatelů. DB2 Spatial Extender je k dispozici zdarma ve všech edicích DB2, včetně DB2 Express-C. Spatial Extender vám umožňuje pracovat s prostorovými a geodetickými informacemi v SQL. Tato schopnost vám například pomůže odpovědět na otázku typu: "Jaký je nejbližší obchod s výprodejem pro každého zákazníka, který žije v Torontu a minulý rok u nás utratil více než 3000 dolarů?". DB2 Spatial Extender můžete také použít pro lékařské aplikace. Například vám pomůže zodpovědět otázku: "Jaké jsou
24
Začínáme s DB2 Express-C
charakteristiky maligních buněk v MRI obrazu mozku?" Více informací je k nalezení v tématu About DB2 Spatial Extender v Informačním centru IBM DB2 Database pro Linux, UNIX a Windows.
1.10.1 IBM Data Studio IBM Data Studio je nástroj založený na Eclipse, který umožňuje spravovat vaše databáze a pomáhá vám vyvíjet XQuery, SQL skripty, uživatelsky definované funkce a uložené procedury. Studio obsahuje interní debugger. IBM Data Studio vám navíc umožní pracovat s diagramy fyzického modelu dat (PDM) k lepšímu pochopení vztahů mezi tabulkami. Také vám může pomoci vyvíjet a publikovat data jako např. Web služby použitím drag and drop, tedy metody, která nevyžaduje znalosti programování. IBM Data Studio nahrazuje DB2 nástroje jako např. Control Center a Command Editor, které už se nepoužívají (jsou obsaženy v DB2, ale nejsou již dále vyvíjeny). IBM Data Studio je detailněji probráno v Kapitole 5, DB2 Nástroje.
1.10.2 DB2 Text Search DB2 Text Search je volitelnou komponentou DB2. Je poháněna technologií IBM OmniFind™ a umožňuje vám vykonávat výkonné, rychlé a detailní fulltextové hledání v textových dokumentech, včetně jakéhokoliv XML dokumentu uloženého nativně v DB2. Tato komponenta používá jazykové zpracování k nalezení rozdílných tvarů hledaného výrazu uvnitř textu. Například pokud hledáte slovo "studovat", DB2 Text Search také najde jiné tvary slova, například "studia" nebo "studoval". K nainstalování komponenty DB2 Text Search vyberte custom instalaci DB2 Express-C a zvolte možnost DB2 Text Search v kategorii Server support. Poznámka: Podobná funkce je také k dispozici u rozšíření DB2 nazvaného Net Search Extender (NSE). Užívání NSE je méně časté, jeho funkci přebralo DB2 Text Search.
1.10.3 WebSphere Application Server – Community Edition IBM WebSphere Application Server - Community Edition (WASCE) je "light" Java EE 5 aplikační server, který je k dispozici zdarma. Je postaven na technologii Apache Geronimo, spojuje nejnovější poznatky opensource komunity a přináší integrovanou, dostupnou a flexibilní platformu pro vývoj a nasazení Java aplikací. Technická podpora pro WASCE je možná přes roční předplatné.
1.11 Shrnutí DB2 Express-C edice nabízí špičkové funkce za nulovou cenu. Přináší volnost pro vývoj, nasazení a distribuci, není limitován velikostí databáze, obsahuje stejné funkcionality a technologie pureXML jako ostatní, komerční edice DB2. DB2 Express-C podporuje široké
Chapter 1 – What is DB2 Express-C?
25
pole klientů, ovladačů a programovacích jazyků a poskytuje jednoduchou cestu upgradu na další edice DB2.
2 Kapitola 2 – Produkty a související funkce Tato kapitola popisuje funkce DB2 včetně možnosti nákupu roční předplatné licence DB2 Express (Fixed term License - FTL). Také popisuje funkce obsažené v ostatních DB2 edicích, v některých případech placených. Rozdíly mezi neplacenou verzí DB2 Express-C (bez záruky) a možností ročního předplatného pro DB2 Express jsou vyznačeny níže v Tabulce 2.1. Funkce
Zadarmo (bez záruky)
Placené předplatné* (FTL)
Core DB2 funkce
Ano
Ano
Admin nástroje zadarmo
Ano
Ano
Vývojové nástroje zadarmo
Ano
Ano
Autonomic capabilities
Ano
Ano
pureXML možnost
Ano
Ano
Ano
Ano
Oficiální IBM 24x7 podpora
Ne
Ano
Fixpacky
Ne
Ano
High Availability (HADR)
Ne
Ano
SQL Data replication
Ne
Ano
Backup Compression
Ne
Ano
Max. podpora procesoru
2 jádra
4 jádra (max. 2 sockety)
Max. podpora pamětí
2GB
4GB
Dostupnost aktualizací
Aktualizace při vydáních, obvykle ročně
nových jednou
Bezpečnostní patche a opravné balíčky několikrát ročně
Přístup k obrazům verzí/vydání
Ne, jen aktuální vydání a beta inst.obrazy jsou k dispozici
Ano, přes IBM Passport Advantage
Bezplatná pomoc***
komunitní
instalačním předchozích
Cena za server za rok ** 0 US $2,995 Tabulka 2.1: Srovnání neplacené verze DB2 Express-C a verze s ročním předplatným (FTL)
28
Začínáme s DB2 Express-C
* Funkce označené v předplatném jsou k dispozici jen po dobu platnosti předplatného. ** Cena předplatného platí pro USA a může být bez upozornění změněna. Ceny v jiných zemích se mohou lišit. *** Bezplatná komunitní pomoc je k dispozici formou diskuzního fóra.
Tabulka 2.2 uvádí funkcionality jednotlivých edic DB2 9.7. Funkce, které mohou být dokoupeny jednotlivě, jsou vypsány u konkrétních edic a jsou zvýrazněny světle šedým pozadím. Funkce
DB2 Express předplatné (FTL)
DB2 Express Edition
DB2 Workgroup Server Edition (WSE)
DB2 Enterprise Server Edition (ESE)
Homogenní SQL replikace
Ano
Ano
Ano
Ano
Homogenní federace
Ano
Ano
Ano
Ano
Net Search Extender, DB2 Text Search
Ano
Ano
Ano
Ano
Spatial Extender
Ano
Ano
Ano
Ano
Komprese zálohy
Ano
Ano
Ano
Ano
pureXML technologie
Ano
Ano
Ano
Ano
Zotavení HADR (High availability disaster recovery)
Ano
High Availability Feature
Ano
Ano
Tivoli® System Automation
Ano
Ano
Ano
Advanced Copy Services
Ne
Ano
Ano
Reorganizace online
Ne
Ano
Ano
Kapitola 2 – Produkty a související funkce MQT
Ne
Ne
Ne
Ano
MDC
Ne
Ne
Ne
Ano
Paralelismus dotazů
Ne
Ne
Ne
Ano
Koncentrátor připojení
Ne
Ne
Ne
Ano
Dělení tabulek do oblastí
Ne
Ne
Ne
Ano
Governor
Ne
Ne
Ne
Ano
Komprese: řádková, indexů, XML, temp tabulek
Ne
Ne
Ne
Storage Optimization Feature
Řízení přístupu LBAC
Ne
Ne
Ne
Advanced Access Control Feature
Geodetic Extender
Ne
Ne
Ne
Geodetic Data Management Feature
Query Patroller
Ne
Ne
Ne
DB2 zátěže
Ne
Ne
Ne
Performance Optimization Feature
Performance Expert
Ne
Ne
Ne
Homogenní Q replikace
Ne
Ne
Ne
Homogeneous Replication Feature for ESE
Dělení databází do oblastí
Ne
Ne
Ne
Ne
správa
Tabulka 2.2: DB2 Version 9.7 edice: podpora možností a funkcí Funkce dostupné s dalšími DB2 edicemi:
29
30
Začínáme s DB2 Express-C
Funkce, které se dají doplnit do DB2 Express Edition High Availability Feature Funkce, které jsou bezplatnou součástí DB2 Workgroup Edition: High Availability a zotavení (HADR), reorganizace, Advanced Copy Services
Tivoli
System
Automation,
Online
Dostupnost DB2 na dodatečných platformách UNIX: AIX®, Solaris a HP-UX Funkce, které jsou bezplatnou součástí DB2 Enterprise Edition: Dělení tabulek do oblastí Tabulky materializovaných dotazů (MQT) Tabulky multidimenzionálního dělení do klastrů (MDC) Paralelizmus dotazů Koncentrátor připojení Governor Funkce, které se dají doplnit do DB2 Enterprise Edition Storage Optimization Feature (včetně komprese) Advanced Access Control (pokročilé zabezpečení) Performance Optimization (Workload Management, Performance Expert, Query Patroller) Geodetic Data Management (analýza geografických lokací) Placené produkty týkající se DB2: DB2 Connect InfoSphere Warehouse Editions InfoSphere Balanced Warehouse WebSphere Federation Server WebSphere Replication Server
2.1 Funkce obsažené v předplatné verzi DB2 Express (FTL) Tato část se zaměřuje na DB2 opravné balíčky, HADR a SQL replikaci.
2.1.1 Opravné balíčky Opravný DB2 balíček je sadou opravného kódu, který se aplikuje na nainstalovaný DB2 produkt. Cílem je opravit kód verze vydání. S nainstalovanou předplatnou licencí jsou
Kapitola 2 – Produkty a související funkce
31
opravné balíčky volně ke stažení a nainstalování. Jsou obvykle k dispozici každé čtyři měsíce, případně v jiném předem vyhrazeném termínu. Ke stažení posledního opravného balíčku naštivte stránku technické podpory na http://www.ibm.com/software/data/db2/support/db2_9/
2.1.2 Zotavení HADR (High Availability Disaster Recovery) High Availability Disaster Recovery (HADR) je schopnost databáze poskytnout vysoce dostupné řešení po havárii - ať už celkové nebo částečné. Prostředí HADR se obvykle skládá ze dvou databázových serverů - primárního a sekundárního (které od sebe mohou být geograficky vzdáleny). Primární server je ten, na kterém je uložena databáze a kam se připojují klientské aplikace. Jakmile proběhnou transakce na hlavním serveru, záznamy databázového logu jsou automaticky po síti přeneseny na sekundární server. Sekundární server má klonovou kopii primární databáze, obvykle vzniklou zálohou primární databáze a jejím obnovením na sekundárním systému. Logy přijaté z primární databáze jsou přehrány a aplikovány na sekundární databázi. Díky nepřetržitému přehrávání záznamů logu je sekundární databáze stále aktualizována podle primární databáze a v případě selhání primární databáze může sekundární server převzít funkci primární. Plnohodnotné HADR řešení pro DB2 vám dává: Bleskurychlou možnost, která je transparentní pro uživatele a klientské aplikace. Transakce na atomické úrovni jako prevence ztráty dat. Možnost upgradovat systémy nebo aplikace bez viditelného přerušení služeb. Vzdálenou správu poskytující plnou obnovu z lokální havárie postihující datové centrum. Jednoduchou správu pomocí grafických nástrojů DB2. To vše bez znatelného ovlivnění celkového výkonu systému. Poznámka: Pro ukázku toho, jak HADR funguje, prosím navštivte: http://www.ibm.com/software/data/db2/express/demo.html
DB2 9.7 bude nově obsahovat možnost povolit klientům číst ze sekundárního serveru. Očekává se, že schopnost ‘read-on-standby’ bude k dispozici v DB2 9.7 Fixpack 1.
2.1.3 Replikace dat Tato funkce povoluje replikaci dat mezi zdrojovým serverem, kde jsou data shromažďována, a cílovým serverem, kde jsou data používána. Obrázek 2.1 poskytuje přehled o tom, jak replikace funguje.
32
Začínáme s DB2 Express-C
Obrázek 2.1 –SQL Replikace Na Obrázku 2.1 jsou znázorněny dva servery, zdrojový a cílový. Na zdrojovém serveru program Capture zachytí změny, které byly provedeny nad databází. Na cílovém serveru program Apply aplikuje změny do replikované databáze. Replikace je užitečná pro mnoho účelů, které požadují replikovaná data - například odlehčení zátěže, naplňování dat datových skladů, auditing změn v historii. Užíváním funkce SQL replikace můžete replikovat data mezi DB2 Express a ostatními IBM databázovými servery, včetně těch na systémech Linux, UNIX, z/OS a i5/OS.
2.2 Funkce, které nejsou dostupné v DB2 Express-C Tato sekce popisuje některé funkcionality, které jsou k dispozici v jiných edicích DB2, ne však v DB2 Express-C nebo ročním předplatném pro DB2 Express.
2.2.1 Dělení databází do oblastí Funkce dělení databází do oblastí (DPF) poskytuje distribuované zpracování dotazů napříč clusterem databázových serverů. Je k dispozici pouze s InfoSphere Warehouse Editions a umožňuje rozložení dat do více oblastí nebo uzlů, které mohou být na několika odlišných serverech. DPF je založeno na architektuře shared-nothing, kde každá databázová oblast má podmnožinu celkových dat na svých vlastních nezávislých discích.
Kapitola 2 – Produkty a související funkce
33
Každý počítač, jak je přidáván do databázového clusteru, přináší dodatečný výkon pro zpracování dat, a to svým procesorem, pamětí, disky. Tak umožňuje rozdělení náročnějších úkolů a komplexnějších dotazů na menší části, které jsou následně distribuovány napříč různými databázovými uzly k paralelnímu zpracování. To má za následek větší souběžnost procesů a rychlejší odezvu, než jaká je možná při umístění databáze pouze na jednom serveru. Funkce DPF je velice užitečná v prostředích velkých datových skladů a v business intelligence, které mohou zpracovávat od stovek gigabajtů až po několik terabajtů dat.
2.2.2 Koncentrátor připojení Koncentrátor připojení je funkce, která umožňuje podporu velkého množství současně přihlášených uživatelů. Dříve každé databázové připojení vyžadovalo jednoho databázového agenta. Koncentrátor připojení uvádí koncept "logického agenta" , který umožňuje jednomu agentovi ovládat několik připojení. Agenti jsou více popsáni v Kapitole 6. DB2 Architektura.
2.2.3 Geodetic Extender DB2 Geodetic Extender je k dispozici jako placená možnost pro DB2 Enterprise Server Edition. Tato nástavba umožňuje mnohem jednodušší vývoj business intelligence a egovernment aplikací, které požadují analýzy geografických lokací. DB2 Geodetic Extender může sestrojit virtuální globus v jakémkoliv měřítku. Většina informací o poloze je ukládána pomocí známých souřadných systémů, jako například globálního polohovacího systému (GPS) a může být reprezentována jako geografické souřadnice (zeměpisná délka a šířka). Business data, například adresy, mohou být pomocí DB2 Geodetic Extender zkonvertovány do geokódů. Enterprisové aplikace pracují lépe, pokud jsou data uložena v této neprojektivní formě, nikoli v mapové projekci (zemský povrch do 2D mapy), která zůstane tam, kam patří: v prezentační vrstvě, k zobrazení a tisknutí map.
2.2.4 Řízení přístupu LBAC (Label-based Access Control) Tento přístup poskytuje granulární zabezpečení na úrovni řádků a sloupců. Používá "štítek", který je asociovaný s uživatelskými sezeními, a řádky nebo sloupce k poskytnutí přístupu k datům ve vaší tabulce. Obrázek 2.2 ilustruje, jak LBAC pracuje.
34
Začínáme s DB2 Express-C
Obrázek 2.2 – Příklad, jak LBAC pracuje Na obrázku má tabulka EMP jeden sloupec, SALARY, a interní sloupec ID , který obsahuje štítek pro určený řádek. Další sloupce na obrázku jsou jen pro ilustrační potřeby. Pokud je spuštěn dotaz, záleží na štítku uživatele – podle něj uvidí rozdílné řádky. Sloupec s názvem No LBAC reprezentuje řádky, které by byly vybrány, pokud by LBAC nebyl implementován. Jak můžete vidět, jsou vybrány všechny záznamy s platem větším nebo rovným 50 000. Nyní řekněme, že uživatel, který spouští dotaz, má bezpečnostní štítek 100. Povšimněte si řádků, které jsou vybrány v tomto případě – jde o třetí sloupec zleva. DB2 bude hledat záznamy, kde je plat větší nebo roven 50 000, a pak zkontroluje bezpečnostní štítek. Například první řádek má plat 60 000 a ID štítku má hodnotu 255. Pokud tento uživatel má štítek hodnoty 100, která je menší než 255, neuvidí tento řádek, který se tedy také nezobrazí ve výstupu dotazu. Bezpečnost LBAC musí být implementována bezpečnostním administrátorem, který vlastní autoritu SECADM.
2.2.5 Správa zátěže (Workload Manager - WLM) Workload Manager spravuje vytížení napříč databází, založené na uživateli a aplikační prioritě kombinované se zdroji dostupnosti a prahu vytíženosti. Umožňuje regulovat vytížení a dotazy vaší databáze, důležité dotazy s vysokou prioritou jsou tedy spuštěny okamžitě – zamezuje tak „zbloudilým“ dotazům, aby obsadily veškeré dostupné systémové zdroje – zajišťuje, že systém běží efektivně. WLM byl více rozšířen ve verzi DB2 9.7 a poskytuje více možností, než nástroje Query Patroller a DB2 Governor, které byly dostupné v minulých verzích DB2.
Kapitola 2 – Produkty a související funkce
35
2.2.6 Vysoká komprese DB2 podporuje několik typů komprese: Komprese NULL a defaultní hodnoty. Tento typ komprese se aplikuje na sloupce, jejichž hodnoty jsou standardně NULL nebo systémové defaultní, například 0, kde se nespotřebuje žádný diskový prostor. Multidimenzionální Clustering Multidimenzionální clustering (MDC) tabulek, kde stránky fyzických dat jsou seskupeny ve vícerozměrném prostoru. Užívají blokové indexy, což je v podstatě způsob komprese indexu, neboť blokový index ukazuje na blok záznamů, nikoliv jednotlivý záznam. Komprese databázové zálohy Tato komprese je užívána na zálohované obrazy. Indexy a LOB tabulkové prostory jsou komprimovány. Komprese databázového řádku Řádková komprese pracuje na principu nahrazení opakujících se řetězců v řádku kratšími symboly. Překlad těchto kratších symbolů zpět na řetězce je uchováván ve slovníku. Řádková komprimace může dramaticky zvýšit výkon při I/O operacích – více řádků může být přeneseno z disku do paměti (a naopak), protože řádky jsou kratší. Výhodou jsou také nižší náklady na úložný prostor, tato položka bývá jednou z největších v rozpočtu IT oddělení ve společnostech. Co se týče vytížení procesoru, je nutné více výpočetního výkonu – komprimované řádky je nutné dekomprimovat předtím, než budou zpracovávány. Mějte na paměti, že data transakčního logu jsou také v komprimovaném formátu. Pro přistup k XML a LOB sloupcům DB2 obyčejně neužívá bufferpool (paměť), ale provádí přímé I/O operace na disk. Důvodem je obvykle nemalá velikost XML a LOBů; proto by při načtení do paměti mohlo vzniknout stránkování. Od verze DB2 9.5 je však možné používat lob inlining, tedy vnoření malých XML dokumentů (menších než 32K) přímo do základního řádku tabulky, nikoli do separátního interního úložiště známého jako XDA. Výhody tohoto přístupu jsou dvě: Za prvé – k XML dokumentům může být nyní přistupováno skrz bufferpool a za druhé - XML dokumenty mohou tedy těžit z uložení v tabulce = využívat řádkovou komprimaci. DB2 9.7 nově obsahuje další vylepšení komprimace: Interní objekty XDA (kde je XML uloženo) mohou být nyní komprimovány. Indexy a dočasné tabulky (systémové a uživatelské) mohou být komprimovány. LOBy mohou být vnořeny podobně jako XML.
36
Začínáme s DB2 Express-C
2.2.7 SQL kompatibilita Přestože mnoho výrobců dodržuje standardy SQL 92 a SQL/PSM, ne všechny funkcionality uvedené ve standardech jsou podporovány a naopak, některé neobsažené ve standardech podporovány jsou. DB2 verze 9.7 v otázce kompatibility nyní podporuje většinu PL/SQL syntaxe podporovanéostatními výrobci, navíc používá své vlastní SQL PL. Obrázek 2.3 ukazuje, jak podpora funguje.
Obrázek 2.3 – Podpora PL/SQL v DB2
Z obrázku je zřejmé, že byl vytvořen kompilátor PL/SQL, který je vestavěný do DB2 enginu. SQL kompatibilita také zahrnuje podporu nástroje zvaného CLPPlus. CLPPlus je nástroj příkazové řádky, který umožňuje spouštět SQL a další příkazy. Je podobný již existujícímu DB2 Command Line Processor (CLP). Obrázek 2.4 ukazuje, jak vypadá CLPPlus.
Obrázek 2.4 –CLPPlus
Kapitola 2 – Produkty a související funkce
37
Je také podporována většina datových typů PL/SQL, například BINARY_INTEGER, RAW, atd. Ostatní datové typy Oraclu – jako například VARCHAR2 jsou podporovány bez nutnosti funkce SQL Compatibility, ale tuto možnost kompatibility je třeba povolit změnou hodnoty DB2_COMPATIBILITY_VECTOR v registru. Více vysvětlení o datových typech Oraclu a této proměnné v registrech najdete dále v knize. Výše popsané funkce SQL kompatibility jsou k dispozici v edicích DB2 9.7 Workgroup and Enterprise. Předpokládá se, že v nedaleké budoucnosti budou k dispozici i v DB2 Express edition (včetně možnosti ročního předplatného nebo FTL). DB2 Express-C 9.7 nepodporuje PL/SQL a CLPPlus, jsou ale k dispozici další změny a zjednodušení přibližující aplikace Oracle k DB2. Jde o nové datové typy, nové skalární funkce, podporu modulů a sémantiku aktuálního potvrzení (CC) v izolační úrovni kurzorové stability (CS). Tyto možnosti jsou probírány v knize později.
2.3 Placené produkty, které jsou vázané na DB2 Tato sekce poskytuje stručný popis placených produktů a služeb, které mohou být použity s DB2.
2.3.1 DB2 Connect DB2 Connect je placený software, který umožňuje klientu DB2 pro Linux, UNIX nebo Windows připojit se na DB2 pro z/OS nebo DB2 pro i5/OS server, jak je znázorněno na Obrázku 2.5. DB2 Connect není vyžadován pro spojení opačným směrem; při připojení z DB2 pro z/OS nebo DB2 pro i5/OS na DB2 pro Linux, UNIX nebo Windows server. DB2 Connect existuje ve dvou hlavních edicích, v závislosti vašich požadavcích na spojení: DB2 Connect Personal Edition a DB2 Connect Enterprise Edition.
38
Začínáme s DB2 Express-C
Obrázek 2.5 – DB2 Connect
2.3.2 InfoSphere Federation Server Dříve známý jako WebSphere Information Integrator (pro podporu federace), WebSphere Federation Server umožňuje spojovat různorodé databáze, tedy můžete spouštět dotazy pracující s objekty z odlišných relačních databázových systémů. Pokud si zakoupíte WebSphere Federation Server, můžete spouštět například dotaz uvedený v Kódu 2.1 níže. SELECT FROM
* Oracle.Table1 DB2.Table2 SQLServer.Table3
A B C
WHERE A.col1 < 100 and B.col5 = 1000 and C.col2 = 'Test'
Kód 2.1 – Federovaný dotaz Obrázek 2.6 ukazuje použití WebSphere Federation Serveru.
Kapitola 2 – Produkty a související funkce
39
Obrázek 2.6 – InfoSphere Federation Server Podpora spojování relačních databází, jenž jsou součástí rodiny IBM, je v DB2 Express-C vestavěná. To znamená, že produkt WebSphere Federation Server není vyžadován, chcete-li spustit dotaz nad dvěma DB2 databázemi, případně pokud chcete spustit dotaz mezi DB2 databází a Informix databází (Informix je součástí rodiny IBM).
2.3.3 InfoSphere Replication Server Dříve známý jako WebSphere Information Integrator (pro podporu replikace), InfoSphere Replication Server povoluje SQL replikaci databázových záznamů databázových serverů nepatřících do rodiny IBM. Také obsahuje funkci známou jako Q-Replication určenou k replikaci dat pomocí fronty zpráv.
2.3.4 Optim Development Studio (ODS) Dříve známý jako Data Studio Developer, ODS je nástroj založený na Eclipse, který lze jednoduše integrovat do Data Studia a sdílet stejné prostředí Eclipse. ODS vám může pomoci vytvořit pracovní databáze za použití kopírování a vkládání z existujících databází Oracle nebo DB2.
40
Začínáme s DB2 Express-C
2.3.5 Optim Database Administrator (ODA) Dříve známý jako Data Studio Administrator, ODA je nástroj založený na Eclipse. Může být jednoduše integrován do Data Studia, při sdílení stejné platformy Eclipse. ODA umožňuje správu databázových změn a zjednodušení provádění automatických změn schématu.
2.4 Nabídky DB2 v Amazon Elastic Compute Cloud Stojí za zmínku, že IBM uzavřelo partnerství s Amazon Web Services (AWS) za účelem provozování DB2 na „obláčku“ Amazon’s Elastic Compute Cloud (EC2). AWS přináší řadu integrovaných služeb, které vytvářejí výpočetní platformu “na obláčku”. AWS je k dispozici na bázi modelu pay-as-you-go. To znamená, že AWS vám umožní pronájem výpočetní kapacity (virtuálních serverů a úložišť) a vy zaplatíte pouze za kapacitu, kterou využijete. Například řekněme, že si obstaráte jeden virtuální server EC2 pro normální databázové operace a během sezónních zátěžových špiček si pořídíte další databázový server na pár hodin. V tomto případě zaplatíte AWS navíc jen dobu, po kterou byl druhý server v provozu. IBM nabízí tři různé možnosti nasazení DB2 na platformě cloud Amazonu: DB2 Express-C AMI (Amazon Machine Image) pro testování a vývoj Pay-as-you-go Production-ready AMI s DB2 Express a DB2 Workgroup Možnost vyvořit si vlastní AMI použitím DB2 licencí, které již vlastníte Pro více informací a návod, jak začít s DB2 na Amazon EC2, prosím navštivte ibm.com/db2/cloud
2.5 Shrnutí DB2 Express-C nabízí bezplatnou, jednoduše ovladatelnou a robustní platformu pro vyvíjení databázových aplikací, jejich nasazení do produkce a distribuování s aplikacemi třetích stran. Je ideální, pokud jste spokojení s podporou a asistencí od komunity a nepotřebujete nejnovější záplaty nebo pokročilé funkce. Pokud ale vyžadujete podporu od IBM, pravidelné updaty (opravné balíčky) nebo další zdroje použití a podporu vysoce dostupných cluster serverů, IBM nabízí za nízký roční poplatek edici DB2 Express s předplatitelskou licenci (FTL). Jestliže požadujete náročnější funkce pro kriticky důležitá řešení a velkoobjemové databázové aplikace, IBM nabízí škálovatelnější edice DB2 a související softwarové produkty. Máte tedy možnost začít s DB2 Express-C a s růstem vašcih požadavků přecházet na další edice DB2.
3 Kapitola 3 – Instalace DB2 Instalace DB2 je opravdu přímočará a při typické instalaci s výběrem defaultních hodnot bude server DB2 zprovozněný ve velice krátkém čase. Nejprve si stáhněte vhodný instalační soubor DB2 Express-C pro vaši platformu, který je dostupný na webu DB2 Express-C (www.ibm.com/db2/express).
3.1 Předinstalační požadavky DB2 Express-C je k dispozici pro Linux®, Sun Solaris (x64) a Microsoft Windows® 2003, XP, Vista a Windows 7. Je také k dispozici jako beta verze pro Mac OS X. Podporuje 32– bitové a 64-bitové architektury procesorů a PowerPC (Linux). K provozování DB2 na jiné platformě (například v UNIXu) je třeba zakoupit jednu z jiných edic databázového serveru, které byly popsány dříve. Požadavky na operační systém pro všechny edice DB2 jsou také popsány v následujícím dokumentu: www.ibm.com/software/data/db2/udb/sysreqs.html Co se hardware týče, DB2 Express-C může být nainstalován na systémy s jakýmkoliv počtem jader a pamětí, využije však maximálně 2 jádra a 2 GB paměti ve verzi zdarma a maximálně 4 jádra a 4 GB paměti v předplacené verzi DB2 Express. Systém může být fyzický nebo virtuální, vzniklý hadrwarovým rozdělením systému nebo použitím softwarového virtuálního stroje. DB2 Express-C samozřejmě můžete provozovat na nižších hardwarových konfiguracích, například na jednom procesoru s 1 GB paměti. Nejnovější informace o hardwarových požadavcích DB2 Express-C se nacházejí na webové stránce DB2 Express-C: www.ibm.com/software/data/db2/express/about.html
3.2 Práva v operačním systému pro instalaci K nainstalování DB2 Express-C na Linux nebo Windows je nutné mít přístup k účtu, který má příslušné autority. Pro instalaci v Linuxu musíte být při instalaci DB2 Express-C root (superuživatel). Můžete také nainstalovat DB2 Express-C jako běžný uživatel, avšak schopnosti produktu budou v tomto případě omezené. Například pří instalaci pod autoritou běžného uživatele nemůžete vytvořit více instancí a musíte se spokojit s jedinou, defaultně nainstalovanou během procesu instalace. Pro instalaci v systémech Windows musí uživatelský účet patřit do skupiny administrátorů stystému, na němž chcete instalaci provádět. Ve Windows 2008, Windows Vista nebo vyšších je možné začít instalaci jako běžný uživatel, avšak během instalačního procesu se objeví okno instalátoru DB2, vyžadující administrátorské údaje.
42
Začínáme s DB2 Express-C
Pokud je během instalace třeba vytvořit nebo ověřit doménový účet, ID uživatele, který instalaci provádí, musí patřit do skupiny doménových administrátorů. Můžete také použít vestavěný lokální systémový účet, přestože to nedoporučujeme. Lokální systémový účet nevyžaduje heslo, ale nemůže využívat síťové prostředky. Uživatelský účet musí mít také práva pro "Přístup k tomuto počítači ze sítě". Poznámka: Podívejte se na videoprezentaci instalace DB2 Express-C na níže uvedém odkazu. Přestože jde o instalaci DB2 verze 9.5, jediný rozdíl vůči verzi DB2 9.7 je barva instalačních oken: http://www.channeldb2.com/video/video/show?id=807741:Video:4442
3.3 Instalační průvodce Přestože existuje několik možností, jak nainstalovat DB2 Express-C, nejjednodušší metodou je využítí grafického průvodce instalací DB2. Po stažení a dekomprimaci instalačního obrazu DB2 Express-C můžete spustit instalačního průvodce takto: Windows: Spusťte setup.exe soubor, který se nachází v adresáři EXP/image/ Linux: Spusťte příkaz db2setup, který se nachází v adresáři exp/disk1/ Instalace DB2 Express-C je při sledování instrukcí v instalátoru velice přímočará. Ve většině případů je dostačující ponechat defaultní nastavení, takže jedinou aktivitou je přijmutí licence a klikání na tlačítko Další do doby aktivace tlačítka Dokončit, pak kliknutím na Dokončit tlačítko instalaci ukončíte. Po několika minutách je vaše instalace kompletní a DB2 je nainstalována a připravena ke spuštění!
Kapitola 3 – Instalace DB2
43
Obrázek 3.1 ukazuje Příruční panel instalace DB2. Klikněte na Instalace produktu a pak vyberte Instalovat Nový – nainstalujete tak na váš systém novou kopii DB2 Express-C. Pokud jste někdy měli nainstalován DB2 Express-C, případně jinou edici DB2, může se objevit tlačítko nazvané “Pracovat s existujícím”. Produkt DB2 je možno nainstalovat několikrát – tyto instalace mohou být v různých verzích a úrovních vydání.
Obrázek 3.1 – Příruční panel instalace DB2
44
Začínáme s DB2 Express-C
Po přijetí licence je obvykle dostačující vybrat “Typickou” instalaci (defaultní), jak ukazuje Obrázek 3.2. Pokud chcete také nainstalovat komponentu DB2 Text Search, vyberte možnost “Vlastní”.
Obrázek 3.2 – Typy instalací
Kapitola 3 – Instalace DB2
45
V dalším kroku, jak je ukázáno na Obrázku 3.3, můžete zvolit instalaci produktu, vytvořit soubor odpovědí instalace nebo obojí. Soubory odpovědí jsou probírány v sekci 3.5, Tichá instalace. Defaultní možností je “Instalovat produkt DB2 Express-C do počítače a zároveň uložit nastavené parametry do souboru odpovědí”.
Obrázek 3.3 – Výběr instalace
46
Začínáme s DB2 Express-C
Vyberte defaultní hodnoty také v několika dalších obrazovkách. Po zobrazení okna na Obrázku 3.4 musíte vyplnit jméno uživatele, které bude použito pro instalaci a spuštění instance včetně dalších služeb. Jestliže použijete již existujícího uživatele, musí být členem skupiny lokálních administrátorů ve Windows. Pokud uživatel neexistuje, bude vytvořen jako lokální administrátor. Pole pro doménu musí tedy zůstat prázdné, pokud uživatel nepatří do domény. Defaultní uživatel ve Windows se jmenuje db2admin. V případě Linuxu je defaultním uživatelem db2inst1.
Obrázek 3.4 – Zadání uživatelských informací pro DB2 Administrační server
Kapitola 3 – Instalace DB2
47
Instalační průvodce nakonec zobrazí (Obrázek 3.5) přehled instalovaných součástí a konfiguraci zvolenou v předchozích krocích. Kliknete-li na tlačítko “Dokončit”, spustí se instalace a programové soubory se začnou ukládat na váš systém.
Obrázek 3.5 – Přehled toho, co a jak se bude instalovat
48
Začínáme s DB2 Express-C
Po skončení instalace se objeví okno podobné tomu, které je ukázáno na Obrázku 3.6 . Informuje vás o výsledku instalačního procesu a případně o dalších krocích požadovaných pro dokončení instalace.
Obrázek 3.6 – Instalace je dokončena
Kapitola 3 – Instalace DB2
49
Po kliknutí na “Dokončit” v okně, které shrnuje výsledek instalace (Obrázek 3.6), se objeví aplikace Začínáme s produktem DB2, viz. Obrázek 3.7. Tato malá aplikace nastiňuje další možnosti užitečné pro začátek práce s DB2. Je zde například volba vytvoření defaultní sample databáze (vhodně nazvané SAMPLE) nebo vytvoření vlastní nové databáze. Pokud nechcete využít možnosti aplikace First Steps ihned, můžete okno zavřít a aplikaci případně spustit jindy. Aplikaci Začínáme s produktem DB2 můžete ve Windows manuálně spustit přes Start → Programy → IBM DB2 → DB2COPY1 (výchozí) → Instalační nástroje → Začínáme s produktem DB2, nebo zadejte příkaz db2fs z příkazové řádky. Na Linuxu spusťte příkaz db2fs z terminálového okna.
Obrázek 3.7 – Začínáme s produktem DB2
3.4 Validace vaší instalace Po nainstalování DB2 je možné použít tři příkazy z Příkazového okna DB2 (ve Windows) nebo z terminálu (na Linuxu) k ověření, zda vaše instalace proběhla v pořádku:
50
Začínáme s DB2 Express-C db2level: Tento příkaz zobrazí informace o nainstalovaném DB2 produktu, úrovni opravných balíčků a další podrobnosti. db2licm -l: Tento příkaz zobrazí všechny licenční informace, které se týkají nainstalovaných DB2 produktů. db2val: Jedná se o nový příkaz, který je k dispozici od verze DB2 9.7. Ověřuje vaši instalaci tím, že kontroluje esenciální funkcionalitu vaší DB2 kopie. Ujišťuje se, že vaše instance jsou konzistentní a funguje vytváření databází, a že připojení k nim je funkční.
Obrázek 3.8 níže ukazuje příklad výstupu těchto tří příkazů.
Obrázek 3.8 – Příkazy db2level, db2licm a db2val pro validaci vaší instalace Na obrázku příkaz db2level vypisuje, že je nainstalována DB2 9.7 (DB2 v9.7.200.358), opravné balíčky na 2. úrovni, což znamená, že kód DB2 není na základním levelu, je na něm aplikované druhý fix balíček. Příkaz db2licm -l naznačuje, že máte nainstalovanou edici DB2 Express-C, která má nekonečnou licenci, bez záruky, což umožňuje využívat až 2 jádra a až 2GB paměti. Příkaz db2val sám popisuje hodnoty na výstupu. Poznámka: Pokud chcete kdykoliv zkontrolovat konzistenci databáze, použijte utilitu INSPECT.
Kapitola 3 – Instalace DB2
51
3.5 „Tichá“ instalace Mohou nastat situace, kdy potřebujete nainstalovat klienta DB2 na více počítačů, nebo potřebujete vložit DB2 databázový server jako součást vaší aplikace a chcete DB2 nainstalovat jako součást instalačního procesu samotné aplikace. V těchto situacích je ideální volbou pro nainstalování tichá instalace DB2. DB2 umožňuje tichou instalaci využitím souborů odpovědí, které ukládají instalační informace jako jednoduchý text. Kód 3.1 ukazuje část souboru odpovědí.
PROD=UDB_EXPRESS_EDITION LIC_AGREEMENT=ACCEPT FILE=C:\Program Files\IBM\SQLLIB\ INSTALL_TYPE=TYPICAL LANG=EN INSTANCE=DB2 DB2.NAME=DB2 DEFAULT_INSTANCE=DB2 DB2.SVCENAME=db2c_DB2 DB2.DB2COMM=TCPIP ...
Kód 3.1 – Příklad souboru odpovědí Existuje několik možností, jak vygenerovat soubor odpovědí: Nainstalujte DB2 Express-C na počítač pomocí instalačního průvodce DB2. Jednou z prvních možností průvodce je volba (ukázáno na Obrázku 3.3), v níž vybíráte uložení instalační konfigurace do souboru odpovědí. Na konci instalace instalátor vygeneruje tento soubor odpovědí do zadaného adresáře pod určeným jménem. Jedná se o textový soubor, takže jej můžete později manuálně editovat. Editujte vzorový soubor odpovědí, který je dodávaný s instalačním image DB2 Express-C. Tento ukázkový soubor (označený příponou .rsp) se nachází v adresáři db2/platform/samples/ V systémech Windows můžete také využít příkazu pro generování souboru odpovědí: db2rspgn –d
Tichou instalaci DB2, která využívá soubor odpovědí v systémech Windows, spustíme následujícím příkazem: setup -u V Linuxu spustíme příkaz: db2setup -r
52
Začínáme s DB2 Express-C
3.6 Shrnutí Kapitola detailně probrala instalaci DB2 Express-C. Tato edice DB2 je dostupná pro Linux, Solaris a různé varianty Windows a může být spuštěna na 32-bitových, 64-bitových a Power PC architekturách procesorů. Po výčtu požadovaných uživatelských oprávnění nutných pro instalaci DB2 jsme krok za krokem prošli instalací pomocí instalačního průvodce DB2. Následovaly poinstalační nastavení, včetně spuštění „Začínáme s produktem DB2“ a kontroly instalačního procesu. Nakonec jsme se podívali na to, jak se vytváří a spouští tichá instalace, která využívá soubory odpovědí.
3.7 Cvičení V tomto cvičení nainstalujete DB2 Express-C a vytvoříte SAMPLE databázi Cíl Předtím, než začnete zkoumat všechny funkce a nástroje, které přicházejí s DB2 ExpressC, musíte nejdříve software nainstalovat na váš systém. V tomto cvičení provedete základní instalaci DB2 Express-C ve Windows. Stejný instalační průvodce je také k dispozici na Linuxu; kroky jsou tedy podobné i na této platformě. Postup 1. Získejte instalační image DB2 Express-C: Stáhněte vhodnou verzi instalačních obrazů DB2 Express-C z webu DB2 Express-C (www.ibm.com/db2/express). Rozbalte soubory do libovolného adresáře. 2. Najděte vámi zvolený adresář se soubory obsahující rozbalené instalační soubory DB2. 3. Spusťte Příruční panel instalace DB2: Spusťte Příruční panel instalace DB2 dvojitým kliknutím na soubor setup.exe. V Linuxu jako root uživatel spusťte příkaz db2setup. V panelu pak klikněte na možnost Instalace Produktu v levém části okna. 4. Spusťte instalačního průvodce DB2: instalační průvodce otestuje, zda jsou splněny všechny systémové požadavky a zjistí, zda již existují instalace DB2. V průvodci klikněte na Instalovat nový ke spuštění instalace, pak klikněte na Další. . 5. Zkontrolujte licenční ujednání: Přečtěte a souhlaste s licenčním ujednáním (vyberte “Přijímám podmínky...”) a klikněte na tlačítko Další pro pokračování. 6. Vyberte si typ instalace: V tomto cvičení zvolte možnost Typické (je vybraná defaultně). Možnost Kompaktní provede základní instalaci a možnost Vlastní vám pak dovolí vybrat si specifické komponenty a funkce, které chcete, aby byly nainstalovány. Pro pokračování klikněte na tlačítko Další. 7. Vyberte instalaci, vytvoření souboru odpovědí nebo obojí: Nechte nastavenou defaultní hodnotu – bude nainstalována DB2 a také bude vytvořen soubor odpovědí. Kliknutím na tlačítko Další pokračujete k dalšímu kroku.
Kapitola 3 – Instalace DB2
53
8. Vyberte instalační adresář: v tomto okně máte možnost zvolit si, na jaký disk a do jakého adresáře se DB2 soubory nainstalují. Ujistěte se, že je ve zvolené lokaci dostatek místa pro instalaci. Pro účely tohoto cvičení použijte defaultní nastavení disku a adresáře (ukázáno níže): Drive:
C:
Directory:
C:\Program Files\IBM\SQLLIB
Klikněte na tlačítko Další pro pokračování. 9. Nastavte informace o uživateli: Jakmile je DB2 Express-C nainstalována, jsou spuštěny jisté DB2 procesy jako systémové služby. Tyto služby pro své spuštění vyžadují účet v operačním systému. V prostředí Windows je defaultně používané (a také doporučované) konto db2admin. Pokud uživatelský účet ještě neexistuje, DB2 jej pro vás v operačním systému vytvoří. Můžete také uvést existující účet, ale toto konto musí mít práva lokálního administrátora. Doporučujeme použít defaultní hodnotu. Ujistěte se, že jste uvedli k tomuto účtu také heslo. Na Linuxu je defaultním uživatelem db2inst1 jako vlastník instance, db2fenc1 pro chráněného uživatele a dasusr1 je výchozí účet DB2 Administration serveru. Pokračujte kliknutím na tlačítko Další. 10. Konfigurujte instanci DB2: DB2 instance může být chápána jako kontejner pro databáze. Instance musí existovat předtím, než je v ní vytvořena databáze. Během instalace ve Windows je automaticky vytvořena instance s názvem DB2. V prostředí Linuxu se defaultní instance jmenuje db2inst1. Instancemi se budeme zabývat v knize později. Defaultně je instance DB2 nakonfigurovaná tak, aby naslouchala přes TCP/IP na portu 50000. Obě defaultní hodnoty – protokolu i portu – mohou být změněny kliknutím na tlačítko Konfigurovat. V tomto příkladu doporučujeme zanechat defaultní nastavení. Pro pokračování klikněte na tlačítko Další. 11. Začátek instalace: Zkontrolujte seznam instalovaných součástí obsahující hodnoty, zadané v předchozích krocích. Klikněte na tlačítko Dokončit – instalátor začne kopírovat soubory do instalačního umístění. DB2 také spustí některé iniciační konfigurační procesy. 12. Začínáme s produktem DB2. Po ukončení instalace se zobrazí se okno utility, která se nazývá Začínáme s produktem DB2. Tato utilita může být také spuštěna později zadáním příkazu db2fs. 13. SAMPLE je databází, kterou je možno používat pro účely testování. Může být vytvořena z utility First Steps kliknutím na tlačítko Vytvořit databázi SAMPLE. Klikněte na toto tlačítko, objeví se okno, které je vidět níže na obrázku. Vyberte druhou možnost (Data a objekty XML a SQL). SAMPLE databáze může být také vytvořena použitím příkazu db2sampl -xml -sql.
54
Začínáme s DB2 Express-C
14. Za několik okamžiků budete schopni sami ověřit, zda databáze byla opravdu vytvořena. Nástroj DB2 Control Center otevřete takto: Start → Programy → IBM DB2 → DB2COPY1 (výchozí) → Nástroje pro obecnou administraci → Řídicí centrum . Řídicí centrum můžete také spustit příkazem db2cc. Při prvním spuštění se objeví pop-up okno, které se bude ptát na způsob zobrazení Řídicího centra. Nechte defaultní hodnotu (Rozšířené) a klikněte na OK. V levém panelu se podívejte na adresář Všechny databáze. Pokud nevidíte databázi SAMPLE v tomto adresáři, ujistěte se, že jste provedli aktualizaci Vybrané → Aktualizovat 15. Restartujte počítač. Tento krok je vhodný, přestože není tento bod zmíněn v oficiální instalační dokumentaci DB2. Doporučujeme restartovat systém (pokud je to možné, alespoň Windows) abychom se ujistili, že všechny procesy nastartují tak, jak mají, a abychom správně pročistili paměť. 16. Zkontrolujte svou DB2 instalaci spuštěním příkazů: db2level, db2licm a db2val. Ze Start menu Windows otevřete DB2 Command Window následujícím způsobem: Start → Programy → IBM DB2 → DB2COPY1 (výchozí) → Nástroje
Kapitola 3 – Instalace DB2
55
příkazového řádku → Příkazové okno. Z příkazového okna (nebo shellu v Linuxu) napište db2level a prozkoumejte výstup. Udělejte to samé s příkazem db2licm -l. Dále zkuste příkaz db2val. Pokud je db2val úspěšně ukončen, vaše instalace proběhla bez problémů! Pokud se vyskytly chyby, zkontrolujte log soubor, který je zmíněn v chybové hlášce. Výstup tří příkazů by měl být podobný tomu, který bylo možno vidět již dříve na Obrázku 3.8.
4 Kapitola 4 –Prostředí DB2 Prostředí DB2 obsahuje různé databázové objekty a konfigurační soubory. Obrázek 4.1 ukazuje přehled různých příkazů a nástrojů, které pracují s DB2, a také znázorňuje prostředí DB2 na straně pravé. Jedná se o oblast, která nás bude v této kapitole zajímat. Na levé straně jsou uvedeny různé DB2 příkazy, SQL, SQL/XML a Xquery dotazy, které mohou být spouštěny pro komunikaci s DB2 databázovým serverem. Uprostřed obrázku se nacházejí jména různých nástrojů, které se používají v interakci s DB2 databázovým serverem .
Obrázek 4.1 – Velký přehled DB2: prostředí Poznámka: Podívejte se na videoprezentace o prostředí DB2 na těchto odkazech: http://www.channeldb2.com/video/video/show?id=807741:Video:4029
58
Začínáme s DB2 Express-C
http://www.channeldb2.com/video/video/show?id=807741:Video:4042
U popisu prostředí DB2 bude vhodné popsat každou komponentu zvlášť, krok za krokem. Obrázek 4.2 ukazuje podobu databázového serveru DB2 po instalaci DB2 Express-C 9.7.
Obrázek 4.2 – Reprezentace DB2 serveru po nainstalování DB2 Express-C 9.7 Součástí instalace ve Windows je také vytvoření defaultní instance nazvané DB2 (db2inst1 na Linuxu). Je zobrazená jako zelený box na levé straně na Obrázku 4.3. Instance je (zjednodušeně) nezávislé prostředí, kde se spouští aplikace a kde se zakládají databáze. Na databázovém serveru můžete vytvořit mnoho instancí a použít je pro různé účely. Například jedna instance může být použita pro ukládání databází pro produkční nasazení, druhá instance může být použita jako testovací prostředí. Všechny tyto instance jsou nezávislé – to znamená, že operace na jedné instanci neovlivní instance ostatní.
Obrázek 4.3 – Defaultní instance DB2 je vytvořena
Kapitola 4 – DB2 Prostředí
59
K vytvoření nové DB2 instance použijte příkaz db2icrt , kde je nahrazeno názvem o délce maximálně 8 znaků. Například pro vytvoření instance myinst použijeme příkaz db2icrt myinst. Obrázek 4.4 ukazuje novou instanci nazvanou myinst jako oddělený zelený box na pravé straně.
Obrázek 4.4 –DB2 server se dvěma instancemi Uvědomte si, že každá instance má unikátní číslo portu. To také umožňuje rozlišit mezi instancemi, když se chcete připojit do databáze na určitou instanci vzdáleným klientem používajícím TCP/IP. Pokud používáte Příkazové okno DB2, můžete aktivovat instanci DB2 pomocí tohoto příkazu systému Windows: set db2instance=myinst Zapamatujte si, že před a za rovnítkem by neměly být mezery. Pokud v tomto našem příkladu vytvoříte databázi z Příkazového okna, vytvoří se v instanci myinst. K vypsání instancí v systému slouží příkaz: db2ilist Na Linuxu musí instance odpovídat systémovému uživateli. Pro přepnutí mezi instancemi tedy „přepínáme“ uživatele. Tento uživatel je znám jako vlastník instance. Můžete odlogovat a zalogovat vlastníka instance nebo lze použít příkaz su. Tabulka 4.1 ukazuje některé užitečné příkazy pro práci na úrovni instancí. Příkaz
Popis
db2start
Spustí současnou instanci
60
Začínáme s DB2 Express-C
db2stop
Zastaví současnou instanci
db2icrt
Vytvoří novou instanci
db2idrop
Smaže instanci
db2ilist
Vypíše instance, které se nacházejí v systému
db2 get instance
Vypíše aktuálně aktivní instanci
Tabulka 4.1 – Užitečné DB2 příkazy pro práci s instancemi Některé z výše uvedených příkazů mohou být provedeny přes Řídicí centrum. Například zde rozbalte adresář Instance a klikněte pravým tlačítkem na vybranou instanci, můžete vybrat Spustit, což je ekvivalentem spuštění příkazu db2start z příkazové řádky DB2 nebo Zastavit, což má stejnou funkci jako spuštění příkazu db2stop, jak je ukázáno na Obrázku 4.5.
Obrázek 4.5 – Příkazy pro instance v Řídicím centru K vytvoření databáze v aktivní instanci spusťte příkaz z Příkazového okna DB2: db2 create database mydb1 K vypsání všech vytvořených databází spusťte příkaz:
Kapitola 4 – DB2 Prostředí
61
db2 list db directory Uvnitř jakékoliv instance můžete vytvořit mnoho databází. Databáze je sadou objektů, jako jsou tabulky, pohledy, indexy, atd. Databáze jsou nezávislé jednotky a proto tedy nesdílí objekty s dalšími databázemi. Obrázek 4.6 ukazuje databázi MYDB1 vytvořenou uvnitř instance DB2.
Obrázek 4.6 – Databáze MYDB1 vytvořená v instanci DB2 Tabulka 4.2 ukazuje některé příkazy, které můžete použít na úrovni databází. Příkaz/SQL příkaz
Popis
db2 create database
Vytvoří novou databázi
db2 drop database
Smaže databázi
db2 connect to
Připojí se k databázi
db2 create table/create view/create index
SQL příkaz pro vytvoření tabulky, pohledu, resp. Indexu
Tabulka 4.2 - Příkazy/SQL příkazy na databázové úrovni Pokud chceme vytvořit další databázi se stejným názvem (MYDB1), ale v instanci myinst, měly by být spuštěny následující příkazy z Příkazového okna DB2: db2 set db2 set
list db directory db2instance=myinst create database mydb1 db2instance=db2
62
Začínáme s DB2 Express-C
Obrázek 4.7 ukazuje novou databázi MYDB1 vytvořenou v instanci myinst.
Obrázek 4.7 – Databáze MYDB1 vytvořená v instanci myInst Když je databáze zakládána, je vytvořeno také několik defaultních objektů: tabulkové prostory, tabulky, fondy vyrovnávacích pamětí a log soubory. Vytvoření těchto objektů zabere trochu času, což je důvodem, proč příkaz create database může vyžadovat pro provedení i několik minut. Obrázek 4.8 ukazuje tři tabulkové prostory vytvořené defaultně na levé straně obrázku. Tabulkovými prostory se budeme více zabývat v Kapitole 6, Architektura DB2. Prozatím nám bude stačit představit si tabulkové prostory jako logickou vrstvu mezi logickými tabulkami a fyzickými zdroji, jako jsou například disky a paměť.
Kapitola 4 – DB2 Prostředí
63
Obrázek 4.8 – Defaultně vytvořené tabulkové prostory při tvorbě databáze Tabulkový prostor SYSCATSPACE obsahuje tabulky systémového katalogu. Systémovým katalogem jsou v ostatních databázových systémech nazývána data slovníku. V podstatě obsahuje systémové informace, které by neměly být modifikovány nebo mazány; pokud se tak stane, databáze nebude pracovat korektně. Tabulkový prostor TEMPSPACE1 je používán DB2 vždy, když systém potřebuje místo navíc pro určité operace – například při řazení. Tabulkový prostor USERSPACE1 je běžně používán jako úložiště uživatelských databázových tabulek, pokud není při vytváření tabulky specifikován jiný tabulkový prostor. Můžete také vytvořit váš vlastní tabulkový prostor použitím příkazu CREATE TABLESPACE. Obrázek 4.9 ukazuje tabulkový prostor MYTBLS1 vytvořený v MYDB1 v instanci DB2. Když vytváříte tabulkový prostor, zadáváte disky a paměť (fondy vyrovnávací paměti), které se mají použít. Proto pokud máte “horkou” tabulku, což je tabulka, která je využívaná velice často, můžete jí přidělit nejrychlejší disky a nejvíce paměti tím, že jí přiřadíte tabulkový prostor s těmito vlastnostmi. Na Obrázku 4.9 ukazujeme další dva objekty, které jsou vytvořeny defaultně: fond vyrovnávací paměti nazvaný IBMDEFAULTBP a log soubory. Buffer pool je jednoduše cache paměť použitá databází. Můžete vytvořit jeden nebo více buffer poolů, ale vždy musí existovat jeden buffer pool o velikosti stránky, která odpovídá velikosti stránky existujících tabulkových prostorů. Stránkování a velikost stránky bude detailněji probírána v Kapitole 6, Architektura DB2. Log soubory jsou obvykle používány pro obnovení. Pokud pracujete v databázi, nejsou do databáze ukládána jen data, ale také se ukládá log soubor o všech operacích, které data ovlivňují. Log soubory si můžete představit jako dočasné soubory, v nichž je povolena operace automatického ukládání. Logy jsou více rozebírány v Kapitole 11, Záloha a obnovení.
64
Začínáme s DB2 Express-C
Obrázek 4.9 – Defaultně vytvořené buffer pooly a logy Před několika stránkami jsme si řekli, že instance jsou nezávislými prostředími, a proto mohou existovat stejně pojmenované databáze v různých instancích. Stejně jako instance, jsou i databáze nezávislými jednotkami; proto nemají objekty v jedné databázi žádný vztah k objektům v databázi jiné. Obrázek 4.10 ukazuje tabulkový prostor mytbls1 uvnitř MYDB1 databáze a stejně pojmenovaný tabulkový prostor v SAMPLE databázi, vše v rámci instance DB2. Není to chybné, protože databáze jsou nezávislými jednotkami. Z důvodu omezeného prostoru neukazuje Obrázek 4.10 ostatní defaultní objekty databáze.
Obrázek 4.10 – Tabulkový prostor se stejnými jmény v různých databázích.
Kapitola 4 – DB2 Prostředí
65
Jakmile jste vytvořili tabulkový prostor, můžete vytvořit objekty uvnitř tohoto tabulkového prostoru – tabulky, pohledy a indexy, jak je znázorněno na Obrázku 4.11.
Obrázek 4.11 – Tabulky, pohledy, indexy vytvořené uvnitř tabulkového prostoru
4.1 Konfigurace DB2 Parametry DB2 mohou být konfigurovány nástrojem Poradce pro konfiguraci. Pokud k této utilitě chcete přistupovat z Řídicího centra, klikněte pravým tlačítkem na databázi a vyberte Poradce pro konfiguraci. Odpovíte na pár otázek o vašich systémových prostředcích a využití. Na tomto základě vypíše Poradce pro konfiguraci seznam parametrů DB2, které mohou být změněny na uváděné hodnoty. Pokud chcete vědět více detailů o DB2 konfiguraci, čtěte dále, v opačném případě používejte Poradce pro konfiguraci a budete s prací v DB2 spokojení. DB2 server může být konfigurován na čtyřech různých úrovních:
Proměnné prostředí
Konfigurace správce DBM (dbm cfg)
Konfigurace databáze (db cfg)
Profilový registr DB2
Rozdělení je také možno vidět na Obrázku 4.12. Všimněte si polohy každého boxu a jeho přesahů. Například proměnné prostředí jsou nastaveny na úrovni operačního systému serveru, zatímco parametry konfigurace správce DBM jsou určeny na úrovni instance.
66
Začínáme s DB2 Express-C
Parametry databázové konfigurace jsou určovány na úrovni databáze a profilový registr DB2 je určován jak na úrovni operačního systému, tak na úrovni instance.
Obrázek 4.12 –Konfigurace DB2
4.1.1 Proměnné prostředí Proměnné prostředí jsou zadávány na úrovni operačního systému. Jednou z klíčových proměnných prostředí je DB2INSTANCE. Tato proměnná určuje aktivní instanci, se kterou se pracuje a pro kterou se uplatňují DB2 příkazy. Například pro určení aktivní instance myinst ve Windows spusťte v operačním systému příkaz: set db2instance=myinst
4.1.2 Konfigurace správce DBM (dbm cfg) Konfigurace správce DBM (dbm cfg) obsahuje parametry, které ovlivňují instance a všechny databáze, které jsou uvnitř instancí. Konfigurace správce DBM může být viděna nebo modifikována prostřednictvím příkazového řádku nebo přes Řídicí centrum DB2. Pro práci s dbm cfg z Řídicího centra vyberte instanci objektu z adresáře instancí a z nabídky kontextového menu vyberte Konfigurovat parametry... Tak, jak je ukázáno na Obrázku 4.13.
Kapitola 4 – DB2 Prostředí
67
Obrázek 4.13 – Konfigurace dbm cfg douboru z prostředí Řídicího centra. Po vybrání hodnoty Konfigurovat parametry se objeví obrazovka - Obrázek 4.14 se seznamem parametrů dbm cfg.
68
Začínáme s DB2 Express-C
Obrázek 4.14 – Konfigurace správce DBM Mnoho parametrů je dynamických, což znamená, že se změny okamžitě projeví; některé změny ale mohou vyžadovat zastavení a opětovné spuštění instance. Tyto příkazy lze napsat také v příkazové řádce, db2stop a db2start. Předtím, než je instance zastavena, se musí odpojit všechny aplikace. Pokud chcete vynutit zastavení instance, můžete použít příkaz db2stop force. Instance může být také zastavena přes Řídicí centrum kliknutím na instanci objektu a vybráním hodnoty Zastavit nebo Spustit. Tabulka 4.3 ukazuje několik užitečných příkazů pro správu dbm cfg z příkazové řádky. Příkaz
Popis
db2 get dbm cfg
Získá informace o dbm cfg
db2 update dbm cfg Aktualizuje hodnotu dbm cfg parametru using
Tabulka 4.3 – Příkazy pro práci s dbm cfg
4.1.3 Konfigurace databáze (db cfg) Databázový konfigurační soubor (db cfg) obsahuje parametry, které ovlivňují celou databázi. Databázový konfigurační soubor může být viděn nebo modifikován přes příkazovou řádku nebo přes prostředí Řídicího centra DB2. Pro práci s db cfg z Řídicího centra vyberte databázový objekt z adresáře databází, klikněte na něm pravým tlačítkem myši a v kontextovém menu vyberte Konfigurovat parametry, jak ukazuje Obrázek 4.15.
Obrázek 4.15 – Konfigurace db cfg z Řídicího centra. Po vybrání možnosti Konfigurovat parametry se objeví podobná obrazovka, jakou můžete vidět na Obrázku 4.16 – zobrazí se seznam parametrů db cfg.
Kapitola 4 – DB2 Prostředí
69
Obrázek 4.16 – Konfigurace databáze Tabulka 4.4 ukazuje některé užitečné příkazy pro správu db cfg z příkazové řádky. Příkaz
Popis
get db cfg for
Získá informace o db cfg pro danou databázi
update db cfg for Aktualizuje hodnotu parametru db cfg using Table 4.4 – Příkazy pro nastavení konfigurace databáze, db cfg
4.1.4 Profilový registr DB2 Profilový registr DB2 obsahuje parametry, které mohou být závislé na určité platformě a mohou být zadány globálně (mohou ovlivňovat všechny instance) nebo na úrovni instance (ovlivňují jednu určitou instanci). Tabulka 4.5 ukazuje některé užitečné příkazy pro manipulaci s DB2 profilovým registrem Příkaz db2set -all
Popis Vypíše všechny proměnné profilového registru, které jsou aktuálně zadané
70
Začínáme s DB2 Express-C
db2set –lr
Vypíše všechny proměnné DB2 profilového registru
db2set <parametr>=
Přířadí parametru danou hodnotu
Tabulka 4.5 – Příkazy pro manipulaci s profilovým registrem DB2 Tabulka 4.6 ukazuje některé často používané proměnné registru DB2 Proměnná registru
Popis
DB2COMM
Určuje komunikační rozhraní, které se spouští při spouštění databázového správce.
DB2_EXTSECURITY
Ve Windows zabraňuje nepovolanému přístupu k DB2 tím, že uzamkne DB2 systémové soubory. Ukládá název DB2 kopie, která je aktuálně používaná.
DB2_COPY_NAME
Pro přepnutí na jinou, nainstalovanou DB2 kopii, nemůžete použít tuto proměnnou, je třeba spustit příkaz: instalační_cesta\bin\db2envar.bat.
Tabulka 4.6 – Často používané proměnné profilového registru v DB2 Například pro povolení komunikace použitím TCP/IP se nastavuje proměnná registru DB2COMM na TCP/IP tak, jak je ukázáno níže: db2set db2comm=tcpip
4.2 DB2 Administration Server (vývojově zastaralý) DB2 Administration Server (DAS) je proces (démon), který se spouští na serveru DB2 a umožňuje vzdáleným klientům administraci DB2 serveru v grafickém prostředí. DAS je potřebný jen v případě použití grafických nástrojů – ať lokálně nebo vzdáleně. Jak je ukázáno na Obrázku 4.16, stačí jen jeden DAS pro jeden fyzický počítač.
Kapitola 4 – DB2 Prostředí
Obrázek 4.16 – DB2 Administration Server (DAS)
71
72
Začínáme s DB2 Express-C
4.3 Shrnutí V této kapitole jsme prozkoumali prostředí DB2, a to od konceptů a vytváření instancí a databází, až po jejich běžné příkazy. Odtud jsme se podívali na další klíčové aspekty instancí: ukázali jsme tři typy tabulkových prostorů a tabulky, pohledy, indexy, které mohou být vytvořeny uvnitř tabulkového prostoru; fondy vyrovnávacích pamětí a logy. Nakonec jsme probrali strukturu konfigurace DB2 a její změny na čtyřech různých úrovních, a to: v proměnných prostředí; v konfiguraci správce DBM; v konfiguraci databáze a přes profilový registr DB2.
4.4 Cvičení Cvičení v této sekci vám umožní zkoumat postupy zmíněné v této kapitole a představí vám některé z nástrojů DB2. Část 1: Založte databázi pomocí průvodce vytvořením databáze V této části založíte databázi pomocí Průvodce vytvořením databáze v prostředí Řídicího centra. Postup 1. V Řídicím centru, panelu Zobrazení objektu na levé straně klikněte pravým tlačítkem na adresář Všechny databáze a vyberte Vytvořit databázi → S automatickou údržbou. Spustí se průvodce tvorbou databáze. 2. V okně průvodce (stránka Název) uveďte název databáze a umístění. Použijte následující hodnoty: Database Name: Default Drive (Windows): Default Path: (Linux): Alias: Comment:
EXPRESS C: /home/db2inst1 Pokud necháte prázdné, doplní se EXPRESS Nepovinný, optimální údaj
Klikněte na tlačítko Další pro pokračování na další stránku průvodce. Poznámka: V systémech Windows můžete defaultně vytvořit databázi jen na disku, nikoli ve struktuře adresářů. Pokud chcete vytvořit databázi v určité struktuře, nastavte proměnnou DB2_CREATE_DB_ON_PATH v registrech 3. Na stránce Úložiště nedělejte žádné změny a klikněte na Další. 4. Na stránce Údržba ponechte defaultní hodnotu (Ano, mohu určit okno údržby offline …) a klikněte na Další.
Kapitola 4 – DB2 Prostředí
73
5. Specifikujte čas offline údržby v průvodci na stránce Časování. Konfigurujte v okně start na 1 hodinu v noci každé pondělí až čtvrtek, šestihodinová doba trvání. Pokračujte kliknutím na tlačítko Další. 6. Konfigurujte upozornění v průvodci na stránce Poštovní Server. V případě detekce problému při údržbě může DB2 poslat zprávu na pager, případně pošle e-mail. Pokud toto chcete nastavit, zadejte validní SMTP server, aby mohlo DB2 využívat posílání e-mailů. V tomto cvičení nemáme žádný SMTP server, takže nechte stránku prázdnou a pokračujte dále kliknutím na tlačítko Další. Zkontrolujte vybrané možnosti v průvodci na stránce Shrnutí. Kliknutím na tlačítko Dokončit odstartujete proces založení databáze. Založení databáze obvykle trvá několik minut, během nichž je zobrazen průběh postupu. Část 2: Pracování s instancemi, databázemi a konfigurace V této části vytvoříte novou instanci, databázi a změníte konfigurační parametry DB2 serveru v prostředí Windows. Můžete to udělat jak z Řídicího centra, tak z Příkazové řádky DB2. Ukážeme si instrukce užitím Příkazové řádky DB2. Postup 1. Otevřeme Příkazovou řádku DB2 výběrem Start → Programy → IBM DB2 → DB2COPY1 (výchozí) → Nástroje příkazového řádku → Příkazové okno. Další, kratší cestou je vybrat Start → Spustit a zde napsat db2cmd. 2. Z příkazové řádky DB2 vytvoříme novou instanci nazvanou newinst db2icrt newinst
3. Přepneme se do nové instance newinst a zkontrolujeme, zda je to opravdu aktuálně zvolená instance, pak ji „nastartujeme“. set db2instance=newinst (Tip: žádné mezery před a za rovnítkem!) db2 get instance (Toto ověřuje, že newinst je současná instance) db2start
4. Vytvoříme databázi newdb s defaultní hodnotou v instanci - newinst. Zabere několik minut, než DB2 vytvoří interní objekty v databázi a vytvoří iniciační konfiguraci. db2 create database newdb
5. Připojíme a odpojíme se z nové databáze newdb. Pak ji odebereme. db2 connect to newdb db2 terminate db2 drop db newdb
74
Začínáme s DB2 Express-C 6. Zastavíme aktuálně běžící instanci newinst: db2stop
7. Necháme si vypsat všechny instance na vašem serveru: db2ilist
8. Přepneme se do instance DB2 a pak ověříme, zda jsme se skutečně přepnuli: set db2instance=db2 db2 get instance
9. Odebereme instanci newinst: db2idrop newinst
10. Nalezneme aktuální hodnotu parametru FEDERATED v dbm cfg. Defaultně by zde měla být hodnota NO: db2 get dbm cfg Tip: V Linuxu můžete provést příkaz db2 get dbm cfg | grep FEDERATED
11. Změňte parametr FEDERATED v dbm cfg na YES a zkontrolujte, zda se změna projevila. db2 update dbm cfg using FEDERATED YES
FEDERATED není dynamickým parametrem, změny se neprojeví, dokud nezastavíte instanci. Abyste zastavili instanci, musíte si být jisti, že na ni nejsou vedena žádná připojení. Jedním způsobem, jak lze vyřešit daný problém, je spuštění těchto příkazů: db2 force applications all db2 terminate
Restartujte instanci a zkontrolujte nové hodnoty FEDERATED: db2stop db2start db2 get dbm cfg
12. Připojte se k databázi SAMPLE s uživatelským jménem a heslem, které používáte ve svém operačním systému db2 connect to sample user using
13. Zkontrolujte, kolik aplikací běží ve vaší aktuální instanci
Kapitola 4 – DB2 Prostředí
75
db2 list applications
14. Otevřete další Příkazové okno a připojte se znovu do databáze SAMPLE bez zadání uživatele a hesla. Opět se podívejte, kolik připojení nyní máte. db2 connect to sample db2 list applications
15. Z jednoho příkazového okna DB2 vynuceně ukončete připojení. Ukážeme příklad, jak může DBA vynutit ukončení práce určitého uživatele (který pravděpodobně přetěžuje systémové prostředky) db2 force application ()
Ukazatel aplikace je číslo nebo text aplikace, kterou chcete ukončit. Toto číslo obdržíte jako výstup příkazu db2 list applications. Aplikace db2bp.exe reprezentuje příkazový řádek DB2. 16. Ověřte, že připojení jednoho z příkazových oken DB2 bylo vynuceně ukončeno. Pokud nevíte, který ze dvou příkazových řádků DB2 byl ukončen, spusťte následující příkaz v obou. db2 select * from staff
Příkazová řádka DB2, která byla vynuceně ukončena, vrátí chybovou zprávu s kódem SQL1224N. Druhé příkazové okno DB2 by mělo vrátit výsledek dotazu. 17. Smažte a znovu vytvořte DAS, spusťte jej. db2admin db2admin db2admin db2admin
stop drop create start
18. Podívejte se na současnou hodnotu registru DB2COMM db2set -all
19. Odregistrujte proměnnou DB2COMM a ověřte, že tomu tak opravdu je db2set db2comm= db2stop
(Tip: Pokud spustíte příkaz db2stop a existují zde připojení, obdržíte chybovou hlášku. Co byste měli dělat? Pro vyřešení problému se podívejte na předchozí krok) db2start db2set -all
76
Začínáme s DB2 Express-C 20. Ve vaší instanci nastavte proměnnou v registrech DB2COMM na tcpip a npipe a ověřte novou hodnotu db2set db2comm=tcpip,npipe db2stop db2start db2set -all
21. Zkontrolujte aktuální hodnotu parametru LOGSECOND v db cfg a pak ji změňte na 5 a ověřte, zda je nová hodnota správně uložena db2 db2 db2 db2
connect to sample get db cfg update db cfg using LOGSECOND 5 get db cfg
5 Kapitola 5 – Nástroje DB2 V této kapitole si popíšeme některé nástroje, které můžeme používat s DB2. Ve verzi DB2 9.7 je používání většiny popisovaných nástrojů na ústupu, budou sice stále podporované, ale nebudou již vylepšované a v dalších vydání produktu už nemusí být obsažené. IBM Data Studio tyto nástroje plně nahrazuje. Červenou elipsou na Obrázku 5.1 je naznačen náš objekt zájmu této kapitoly.
Obrázek 5.1 –DB2 velké schéma: DB2 nástroje
78
Začínáme s DB2 Express-C
Poznámka: Podívejte se na videoprezentace o nástrojích DB2 a skriptování na následujících odkazech: http://www.channeldb2.com/video/video/show?id=807741:Video:4202 http://www.channeldb2.com/video/video/show?id=807741:Video:4182
Obrázek 5.2 znázorňuje všechny nástroje DB2, které jsou k dispozici z¨menu Start. Většina těchto nástrojů je stejná jak pro Linux, tak pro Windows.
Obrázek 5.2 – DB2 nástroje z IBM DB2 Start menu V Tabulce 5.1 vidíte seznam příkazů, které se mohou použít ke spuštění některých populárních nástrojů jak v Linuxu, tak ve Windows. Také je zde seznam nástrojů, které jsou ve verzi DB2 9.7 na ústupu. Název nástroje
Příkaz
Na ústupu?
Editor příkazů
db2ce
Ano
Příkazový procesor (CLP)
db2
Ne
Příkazové okno (jen na platformách Windows)
db2cmd
Ne
Řídicí centrum
db2cc
Ano
Centrum úloh
db2tc
Ano
Centrum narušení
db2hc
Ano
Asistent pro konfiguraci
db2ca
Ano
Kapitola 5 – Nástroje DB2 Začínáme s produktem DB2
db2fs
79
Ne
Tabulka 5.1 – Zkratky příkazů ke spuštění některých DB2 nástrojů
5.1 IBM Data Studio IBM Data Studio je ve verzi DB2 9.7 primárním nástrojem, který se používá při administraci databáze a rovněž pro vývojářskou činnost. Data Studio je zdarma. Může být spuštěno na Linuxu a ve Windows a je součástí produktů IBM Integrated Data Management portfolio. Přestože se vývoj Data Studia řídí svým rozvrhem a nekoresponduje s vývojem DB2, snaží se být produkty ve svých verzích co nejvíce zkoordinovány. Například DB2 9.7 a IBM Data Studio 2.2 byly vydány ve stejný den v červnu 2009. Obrázek 5.3 ukazuje, jak vypadá IBM Data Studio.
Obrázek 5.3 - IBM Data Studio Pokud znáte Eclipse, na první pohled je vám jasné, že Data Studio je na Eclipse založené. V Data Studiu budete obvykle pracovat v perspektivě Správy databází (naznačená červená oblast v pravém horním rohu). Pokud vyvíjíte Javovský program, můžete se také přepnout do Java perspektivy. Dvě další oblasti jsou naznačené v obrázku: Nahoře vlevo se nachází Průzkumník datových projektů (Data Project Explorer v anglické verzi)
80
Začínáme s DB2 Express-C Dole vlevo se nachází Průzkumník administrace (Data Source Explorer v anglické verzi)
Záložka Průzkumník datových projektů je určena pro vývojáře databází, pro práci s SQL skripty, XQuery, uloženými procedurami, UDF a Data Web službami. Zložka Průzkumník administrace je určena pro databázové administrátory ke správě instancí a databází DB2. Používáním této záložky docílíte téměř kompletní funkčnosti, jakou měly minulé verze Řídicího centra. V hlavní části obrázku můžete vidět proceduru s názvem PROCEDURE1 – jedná se o editor se zvýrazněnou syntaxí, Průzkumník datových projektů. V závislosti na tom, jakou úlohu spouštíte, se bude objevovat editor nebo jiná okna – buď k vepsání kódu nebo k nastavení konfigurací. IBM Data Studio je k dispozici ve dvou variantách: Samostatný balíček IDE balíček Samostatný balíček je mnohem menší než IDE balíček, ale nepodporuje vývoj Data Web služeb a nemůže být rozšířený o další IBM produkty založené na Eclipse, například InfoSphere Data Architect. Jinak je prostředí stejné, stejně tak i možnosti programu. S IBM Data Studio můžete také pracovat s jinými databázovými servery - například Informixem. Společnosti, které pracují s více databázovými servery a mají malý tým databázových administrátorů, případně vývojářů, mají výhodu, že s tímto nástrojem může pracovat celý tým. Poznámka: Pro více informací o Data Studiu se podívejte na elektronickou knihu zdarma, která je součástí této série - Getting Started with IBM Data Studio for DB2.
5.2 Řídicí centrum (vývojově zastaralý) Před verzí DB2 9.7 bylo primárním nástrojem DB2 pro databázovou administraci Řídicí centrum, jehož prostředí můžete vidět na Obrázku 5.4.
Kapitola 5 – Nástroje DB2
81
Obrázek 5.4 – Řídicí centrum DB2 Řídicí centrum je centralizovaný administrační nástroj, který vám umožňuje: Vidět vaše systémy, instance, databáze a databázové objekty. Vytvořit, modifikovat a spravovat databáze a databázové objekty. Spustit další grafické nástroje DB2. Panel na levé straně vám poskytuje vizuální pohled na hierarchii databázových objektů ve vašem systému (systémech) – zobrazuje „adresáře“ pro tabulky, pohledy, atd. Když dvojitě kliknete na adresář (například na adresář Tabulky, jak je ukázáno na Obrázku 5.4), panel v pravé části vypíše dané objekty, v tomto případě všechny tabulky, které jsou asociované s databází SAMPLE. Pokud vyberete určitou tabulku v pravém horním panelu, v pravém spodním panelu se zobrazí detailnější informace o této tabulce. Pokud kliknete pravým tlačítkem na různých adresářích nebo objektech v levé, stromovité strukturní části, objeví se menu, které se týká daného adresáře nebo objektu. Například po kliknutí pravým tlačítkem na instanci a výběru Konfigurovat parametry budete mít možnost vidět a měnit Konfiguraci správce DBM. Podobně: kliknete-li pravým tlačítkem na databázi a vyberete Konfigurovat parametry, budete moci vidět a měnit databázový konfigurační soubor. DB2 prostředí a konfigurační parametry jsou probírány více do detailů v Kapitole 5, Prostředí DB2.
82
Začínáme s DB2 Express-C
Při prvním spuštění Řídicího centra se vás program zeptá, jakým způsobem chcete přizpůsobit zobrazení používaného prostředí. Odvíjí se od toho, jaké typy nabídek a databázových objektů budou k dispozici. Obrázek 5.5 ukazuje dialogové okno o podobě Řídicího centra.
Obrázek 5.5 – Dialogové okno Řídicího centra DB2 Možnost Základní podporuje základní funkcionality DB2, Rozšířené ukazuje více možností a funkcí. Možnost Vlastní vám umožňuje nastavit specifické funkce, volby a možnosti, které chcete vidět. Pro pozdější vyvolání tohoto okna vyberte Nástroje → Přizpůsobit Řídicí centrum, jak je ukázáno na Obrázku 5.6.
Obrázek 5.6 – Přizpůsobení Řídicího centra
Kapitola 5 – Nástroje DB2
83
5.2.1 Spuštění Řídicího centra Je mnoho způsobů, jak můžete spustit Řídicí centrum: Klikáním přes Windows Start menu. Spuštěním příkazu db2cc z příkazové řádky. Kliknutím na ikonu Řídicího centra nástroje.
v liště jakéhokoliv jiného DB2 grafického
Kliknutím na ikonu DB2 v systémové liště ve Windows, jak ukazuje Obrázek 5.7 (Kliknutí pravého tlačítka na zelené DB2 ikoně a výběr položky Řídicí centrum DB2).
Obrázek 5.7 – Spuštění Řídicího centra DB2 ze systémové lišty Windows
5.3 Editor příkazů (vývojově zastaralý) Díky Editoru příkazů DB2 můžete spustit DB2 příkazy, SQL a XQuery dotazy, analyzovat náročnost dotazů, vidět nebo aktualizovat výsledky dotazů. Obrázek 5.8 ukazuje Editor příkazů s popisem jeho prvků.
84
Začínáme s DB2 Express-C
Obrázek 5.8 – Editor příkazů DB2 Ve vstupním prostoru můžete zadávat i více příkazů za sebou, jednotlivé příkazy musí být odděleny znakem pro ukončení příkazu. Pokud stistknete tlačítko pro provedení příkazu (první tlačítko vlevo na Obrázku 5.9), provedou se příkazy jeden po druhém. Jestliže označíte jeden určitý řádek, provede se jen označený příkaz. Aby se mohly provádět SQL příkazy, musí existovat databázové připojení, takže jedním z příkazů by měl být připojovací příkaz.
Obrázek 5.9 – Editor příkazů – záložka Příkazy
5.3.1 Spouštění Editoru příkazů Editor příkazů můžete spustit několika způsoby: Z Windows Start Menu: Start → Programy → IBM DB2 → DB2COPY1 (výchozí) → Nástroje příkazového řádku → Editor příkazů. Z příkazové řádky napsáním db2ce. Z menu Nástroje v Řídicím centru.
Kapitola 5 – Nástroje DB2
85
Přímo v Řídicím centru: - Pravým tlačítkem klikněte na ikonu databáze SAMPLE a vyberte z menu položku Dotaz... - Kdykoliv je vybrán objekt, nad kterým se dají provádět dotazy (databáze, tabulky, atd.), můžete spustit Editor Příkazů kliknutím na odkaz Dotaz v Řídicím centru, panelu o detailech objektu Z Řídicího centra kliknutím na ikonu Editoru příkazů Obrázku 5.10.
v liště, jak je ukázáno na
Obrázek 5.10 – Ikona Editoru příkazů v Řídicím centru
5.3.2 Přidání připojení k databázi Pro přidání připojení k databázi klikněte na tlačítko Přidat... (viz Obrázek 5.8). Objeví se dialogové okno, které je znázorněné na Obrázku 5.11.
Obrázek 5.11 – Přidání připojení k databázi
5.4 Asistent pro dotazy SQL (vývojově zastaralý) Pokud nejste zběhlí v používání SQL jazyka, máte možnost využívat asistenta nebo průvodce generováním SQL kódu. Z Editoru příkazů je vám k službám Asistent pro dotazy SQL. Jak je zobrazeno na Obrázku 5.12, SQL průvodce spustíte z Editoru příkazů
86
Začínáme s DB2 Express-C
kliknutím na poslední ikonu s textem SQL. Tato ikona se zobrazuje, jen pokud jste připojeni k databázi.
Obrázek 5.12 – Spuštění Asistenta pro dotazy SQL Obrázek 5.13 ukazuje Asistenta pro dotazy SQL. Jeho používání je velice jednoduché. Nejprve vyberte typ SQL dotazu, se kterým chcete pomoci (SELECT, INSERT, UPDATE, DELETE). V závislosti na vašem výběru typu dotazu se objeví rozdílné možnosti. Ve spodní části okna vidíte, jak je tvořen SQL příkaz v závislosti na výběru různých možností v průvodci.
Kapitola 5 – Nástroje DB2
87
Obrázek 5.13 – Asistent pro dotazy SQL
5.5 Tlačítko Zobrazit příkaz (vývojově zastaralý) Většina grafických nástrojů a průvodců DB2 vám umožní podívat se na příkaz SQL, který je vytvářen jako výsledek vaší práce v grafických nástavbách. Abyste tento SQL výstup viděli, klikněte na tlačítko Zobrazit příkaz , jak je ukázáno na Obrázku 5.14 a Obrázku 5.15
Obrázek 5.14 –Tlačítko Show SQL
Obrázek 5.15 – Výstup tlačítka Zobrazit příkaz
88
Začínáme s DB2 Express-C
Možnost vidět SQL statusy a příkazy je velice užitečná, pokud se učíte syntaxi SQL jazyka a pro uložení těchto příkazů do souboru k pozdějšímu užití. Opakovaným použitím těchto příkazů také můžete vytvářet skript.
5.6 Centrum úloh (vývojově zastaralý) Grafický nástroj Centrum úloh vám umožňuje vytvořit úlohy: sérii operací, například DB2 příkazy, příkazy operačního systému nebo skripty. Následnost akcí může být nastavena při chybovém nebo při úspěšném průběhu. Například pokud úloha, která provádí zálohu ve 3:00, je úspěšná, pošle se e-mail databázovému administrátorovi. V opačném případě může Centrum úloh poslat zprávu DBA na pager. Obrázek 5.16 ukazuje prostředí Centra úloh.
Obrázek 5.16 – Centrum úloh
5.6.1 Databáze Tools Catalog (vývojově zastaralý) Všechny detaily o úlohách a jejich plánu spouštění jsou ukládány ve zvláštní databázi DB2, která se nazývá Tools Catalog. Tato databáze musí existovat předtím, než jsou naplánovány úlohy. K vytvoření databáze Tools Catalog použijte tohoto příkazu: CREATE TOOLS CATALOG systools CREATE NEW DATABASE toolsdb
Na příkladu výše je systools název schematu pro všechny tabulky v databázi a toolsdb je název databáze. Schematy se budeme více zabývat v Kapitole 8, Pracujeme s databázovými objekty.
Kapitola 5 – Nástroje DB2
89
5.6.1.1 Spuštění Centra úloh Centrum úloh můžete spustit z Řídicího centra kliknutím na Nástroje → Centrum úloh, jak je zobrazeno na Obrázku 5.17. Také můžete program spustit z nabídky Start systému Windows: Start → Programy → IBM DB2 → DB2COPY1(výchozí) → Nástroje pro obecnou administraci → Centrum úloh
Obrázek 5.17 – Spouštění Centra úloh 5.6.1.2 Plánování úloh s Centrem úloh Jakýkoliv skript, ať už byl vytvořen přes grafické rozhraní nebo ne, může mít naplánované spuštění v Centru úloh. Úlohy jsou spouštěny v jejich naplánovaném čase na systému, kde jste vytvořili databázi Tools Catalog. Doporučujeme vám, abyste nejprve prozkoumali prostředí Centra úloh sami. Naplánování úloh je velice jednoduché a intuitivní.
5.7 Žurnál (vývojově zastaralý) Grafický nástroj DB2 Žurnál poskytuje DBA přehled o aktivitách v online formě. Obrázek 5.18 ukazuje okno Žurnálu a Tabulka 5.2 informuje o tom, jaké informace v něm můžete nalézt.
90
Začínáme s DB2 Express-C
Obrázek 5.18 – Žurnál
Typ informace
Popis
Historie úloh
Všechny naplánované úlohy a status jejich průběhu
Databázová historie
Záznam o aktivitách REORGanizace, atd.)
Oznámení
Historie oznámení, která vrací nástroje DB2. Je to užitečné, pokud chcete porovnat staré a nové chybové hlášení, případně pokud zavřete dialogové okno nešťastnou náhodou moc rychle.
Oznamovací Log
Obsahuje zprávy na systémové úrovni. Jsou sem ukládány kritické chyby
v databázi
(záloha,
obnova,
Tabulka 5.2 – Informace poskytované Žurnálem
5.7.1 Spuštění Žurnálu Z Řídicího centra můžete spustit Žurnál kliknutím na Nástroje → Žurnál, jak je ukázáno na Obrázku 5.19. Můžete jej také spouštět ze nabídky Start systému Windows: Start → Programy → IBM DB2 → DB2COPY1(výchozí) → Nástroje pro obecnou administraci → Žurnál.
Kapitola 5 – Nástroje DB2
91
Obrázek 5.19 – Spuštění Žurnálu
5.8 Health Monitor (vývojově zastaralý) Health Monitor je defaultním agentem, který se spouští s enginem DB2 a má na starosti sledování všech aspektů zdraví databáze (paměť, správa místa, předem definované automatické aktivity, atd.). Pokud nějaká část DB2 funguje mimo nastavené parametry, dojde k výjimce a databázový administrátor je upozorněn. Existují tři typy upozornění: Upozornění: nenormální stav Varování: nekritický stav, který nevyžaduje okamžitou pozornost, ale může indikovat neoptimalizovaný systém Alarm: kritický stav, který vyžaduje okamžitý zásah Health Monitor může být zapnutý nebo vypnutý v Konfiguraci správce DBM (dbm cfg) parametrem HEALTH_MON.
5.8.1 Centrum narušení (vývojově zastaralý) Centrum narušení je grafickým nástrojem pro interakci s Health Monitorem. Centrum narušení řeší problémy s výstrahami systému na úrovni instance, databáze a tabulkového prostoru. Tento program ilustruje Obrázek 5.20.
92
Začínáme s DB2 Express-C
Obrázek 5.20 – Centrum narušení 5.8.1.1 Spuštění Centra narušení Centrum narušení můžete spustit z Řídicího centra vybráním Nástroje → Centrum narušení, jak můžete vidět na Obrázku 5.21. Tento nástroj se také může spouštět ze Start → Programy→ IBM DB2 → DB2COPY1 (výchozí) → Monitorovací nástroje → Centrum narušení
Kapitola 5 – Nástroje DB2
93
Obrázek 5.21 – Spouštění Centra narušení
5.8.1.2 Konfigurace výstražných notifikací Pokud spustíte Centrum narušení, můžete nakonfigurovat výstražné notifikace kliknutím na Centrum narušení → Konfigurovat → Upozornění výstrahy, jak je ukázáno na Obrázku 5.22. Výstražné notifikace vám umožní zadávat kontaktní jména s e-mailovými adresami a čísla pagerů lidí, kteří budou kontaktováni, pokud dojde k výstraze.
94
Začínáme s DB2 Express-C
Obrázek 5.22 – Upozornění výstrahy
5.9 Self-tuning memory manager Self-tuning memory manager (STMM) byl uveden ve verzi DB2 9 a je jednou z několika autonomních funkcí, která zjednodušuje úlohu konfigurace paměti automatickým zadáním hodnot konfiguračních parametrů. Pokud je povolený, automatizovaný proces přerozděluje dostupné paměťové prostředky mezi několik odběratelů v databázi. Paměťový tuner odpovídá na změny charakteristik zatížení, přizpůsobuje hodnoty paměťových konfiguračních parametrů a pro zoptimalizování výkonu rozšiřuje buffer pooly. K zapnutí STMM zaktualizujte hodnotu v db cfg parameteru SELF_TUNING_MEM na ON. Další autonomní funkce, jako třeba automatická údržba a automatické ukládání, jsou probírány na jiných místech publikace.
5.10 Skriptování Skriptování je vždy užitečnou funkcí, pokud má uživatel možnost vytvořit soubor skriptu, do kterého by ukládal opakující se kódy DB2 a SQL příkazů. Například DBA může chtít spouštět daný skript každý den, aby věděl počet záznamů v určitých tabulkách. Existují dvě formy skriptování: SQL skripty Skripty operačního systému (shellové)
5.10.1 SQL skripty SQL skripty obsahují dotazy a databázové příkazy. Tyto platformě nezávislé skripty jsou relativně jednoduché na pochopení. Nicméně nejsou podporovány proměnné nebo parametry. Například příkazy ukázané v Kódu 5.1 níže jsou uloženy v souboru s názvem script1.db2. CONNECT TO EXPRESS; CREATE TABLE user1.mytable ( col1 INTEGER NOT NULL, col2 VARCHAR(40), col3 DECIMAL(9,2)); SELECT * FROM user1.mytable FETCH FIRST 10 ROWS ONLY; COMMIT;
Kód 5.1 – Příklad SQL skriptu uloženého v souboru script1.db2 Ve skriptu výše jsou všechny příkazy SQL odděleny oddělovačem – v tomto případě se jedná o středník. Název souboru nemusí používat příponu “db2”, může být použita jakákoliv přípona. 5.9.1.1 Spouštění SQL skriptů
Kapitola 5 – Nástroje DB2
95
SQL skript může být spuštěn buď z Editoru příkazů nebo přes příkazovou řádku DB2 ve Windows, případně pomocí shellu v Linuxu. Pro spuštění skriptu v Kódu 5.1 z příkazového řádku DB2, případně shellu v Linuxu, použijte následující příkaz: db2 -t -v -f script1.db2 -z script1.log
nebo stejný příkaz s kratším zápisem: db2 –tvf script1.db2 –z script1.log
V tomto příkazu: -t
znamená, že příkazy používají defaultní oddělovač řádků (středník)
-v znamená zapnutí verbose módu; db2 tedy bude vypisovat příkazy, které se spouští -f
znamená, že následuje jméno souboru, které obsahuje samotné tělo skriptu
-z znamená, že se do názvu souboru, který je následně uveden, bude přidávat výstup, který bude užitečný při další analýze (není to povinné, ale vhodné a doporučované) Pokud je použit přepínač -t a není uveden specifický oddělovač, použije se jako standardní oddělovač středník. Mohou nastat situace, kdy je zapotřebí jiný oddělovač příkazů. Například skript, který obsahuje SQL PL kód potřebuje použít rozdílný znak, než je standardní středník, protože v SQL PL jsou středníky užívané pro ukončování příkazu v procedurách. Například ve skriptovém souboru functions.db2 uvedeném v Kódu 5.2 níže můžete vidět, že skript obsahuje příkazy k vytvoření funkce a středník je potřebný na konci příkazu SELECT, protože to je součástí syntaxe vyžadované uvnitř funkce. Pro ukončovací znak v příkazu CREATE FUNCTION používáme znak vykřičníku. Pokud bychom použili středník jako oddělovač příkazů, nastal by zde konflikt skriptu s příkazem SELECT, což by zapříčinilo chybu v DB2. CREATE FUNCTION f1() SELECT … ; … END!
Kód 5.2 – Obsah souboru skriptu functions.db2 Abychom informovali DB2, že jsme použili jiný symbol pro ukončovací znak, použijeme přepínač –d, za kterým následuje ukončovací znak, jak je naznačeno níže: db2 –td! –v –f functions.db2 –z functions.log
Pokud se chcete dozvědět více o dalších přepínačích, které mohou být použity z příkazové řádky DB2 nebo shellu v Linuxu, použijte příkaz: db2 list command options
96
Začínáme s DB2 Express-C
5.10.2 Skripty operačního systému (shellu) Skripty operačního systému poskytují lepší flexibilitu a jsou mocnější, než SQL skripty, protože vám umožňují přidávat programovou logiku. Jsou platformově závislé, ale podporují parametry a proměnné. Kód 5.3 ukazuje příklad jednoduchého skriptu operačního systému Windows. set DBPATH=C: set DBNAME=PRODEXPR set MEMORY=25 db2 CREATE DATABASE %DBNAME% ON %DBPATH% MEM_PERCENT %MEMORY% APPLY DB AND DBM db2 CONNECT TO %DBNAME% USER %1 USING %2 del schema.log triggers.log app_objects.log db2 set schema user1 db2 –t –v –f schema.db2 –z schema.log db2 –td@ -v –f triggers.db2 –z triggers.log db2 –td@ -v –f functions.db2 –z functions.log
AUTOCONFIGURE
USING
Kód 5.3 – Obsah skriptu operačního systému create_database.bat Pro spuštění tohoto skriptu operačního systému spusťte z příkazové řádky ve Windows: create_database.bat db2admin ibmdb2
kde db2admin je uživatelem a prvním parametrem skriptu, ibmdb2 je heslem a druhým parametrem skriptu. Ve Windows přípona “bat” říká operačnímu systému, že se jedná o spustitelný dávkový soubor. V Linuxu potřebujete změnit mód souboru, aby bylo zřejmé, že soubor je spustitelný – například použitím příkazu chmod +x. Potom ho můžete spouštět tak, jak již bylo uvedeno výše.
5.11 Výhoda Windows Vista User Access Control (UAC) ve Windows Vista způsobuje, že aplikace se spouští se standardními právy, i když jste lokálním administrátorem. To znamená, že jakýkoliv DB2 nástroj nebo příkaz, který spustíte, bude hlásit problém s přístupem. Abyste se tomuto problému vyhnuli, využijte unsadnění nazvané "Příkazový řádek - Administrátor", které bylo speciálně vytvořeno pro uživatele Visty. Z tohoto okna můžete spouštět ostatní příkazy a další nástroje (použitím příkazů ukázaných v Tabulce 5.1 na začátku této kapitoly). Také můžete daný nástroj DB2 spouštět přes Windows Vista Start menu a na daném DB2 nástroji, který chcete spustit, kliknout pravým tlačítkem a vybrat možnost Spustit jako administrátor. Pokud je povolena rozšířená bezpečnost DB2, která je nastavena defaultně (viz. Kapitola 10, Databázová bezpečnost), musíte být také jako aktuální uživatel členem skupiny DB2ADMNS, abyste mohli používat grafické nástroje jako je Řídicí centrum.
Kapitola 5 – Nástroje DB2
97
5.12 Shrnutí V této kapitole jsme se podívali na širokou škálu nástrojů pro administraci, konfiguraci a správu vašich databázových serverů DB2. S příchodem DB2 verze 9.7 se stalo IBM Data Studio hlavním administrativním nástrojem, který poskytuje novou dimenzi databázové administrace a vývojářské práce. Také jsme probrali několik nástrojů, které jsou od nynějška na ústupu: Řídicí centrum, Asistenta SQL dotazů, Centrum úloh a Žurnál a nakonec Centrum narušení a Monitor. Každopádně nástroje Command Line Processor a Příkazové okno zůstanou součástí aplikace ve verzích následujících po DB2 9.7. Stejně tak zůstane nástroji Self Tuning Memory Management za úkol optimalizovat chod databáze. Klíčovou součástí dovedností každého databázového administrátora je používání skriptů ke spouštění příkazů a funkcí DB2. V této kapitole jsme se poměrně podrobně zabývali skripty SQL a skripty v prostředí operačního systému, přesněji tím, jak jsou vytvářeny, ukládány a spouštěny. Kapitolu jsme ukončili zmínkou, jak nástroje DB2 jednoduše spouštět v prostředí Windows Vista.
5.13 Cvičení Cvičení v této sekci vás naučí pracovat prakticky se skripty DB2. Část 1: Naplnění databáze EXPRESS použitím skriptu V této části naplníte databázi EXPRESS (kterou jste minule vytvořili) použitím Editoru Příkazů a dvěma skripty. Postup 1. Naplňte databázi EXPRESS několika tabulkami a daty. Vaší výhodou je to, že oba dva skripty, Lab_Chpt5.db2 a Lab_Chpt5.dat pro vás už byly vytvořené. Lab_Chpt5.db2 skript obsahuje příkazy, které vytváří tabulky a tudíž musí být tento skript spuštěn jako první. Lab_Chpt5.dat skript obsahuje příkazy, které vkládají data do tabulek. Oba skripty mohou být nalezeny v souboru expressc_book_exercises_9.7.zip, který doprovází tuto knihu. Ke spuštění těchto skriptů otevřete Editor příkazů. Ujistěte se, že nová databáze, kterou jste vytvořili, je vybrána v liště. Pokud se nová databáze neobjeví v seznamu, přidejte připojení tlačítkem Přidat. 2. V Editoru příkazů klikněte na Vybrané Otevřít a nalezněte adresář, kam jste skriptové soubory uložili. Vyberte soubor Lab_Chpt5.db2 a klikněte na tlačítko OK. Obsah souboru by se měl nyní zobrazit v Editoru příkazů ve vstupním prostoru. Pro spuštění skriptu klikněte na tlačítko Spustit. Zkontrolujte, že nenastaly během probíhání skriptu žádné chyby. 3. Zopakujte 2.bod také pro soubor Lab_Chpt5.dat.
98
Začínáme s DB2 Express-C
Nová databáze bude mít funkci úložiště pro velice jednoduchý obchod s knihami. Tabulka BOOKS obsahuje všechny informace o knížkách, které se nacházejí v obchodě. Tabulka CUSTOMERS obsahuje informace o každém ze zákazníků obchodu. A konečně tabulka SALES obsahuje prodejní data. Kdykoliv si zákazník koupí knihu, je proveden záznam do tabulky SALES. Diagram níže znázorňuje strukturu a vztahy mezi tabulkami. Tabulka BOOKS book_id
title
cost
image
(INTEGER)
(INTEGER)
DECIMAL(7,2)
BLOB (1MB)
Tabulka CUSTOMERS cust_id
firstnme
lastname
address
email
(INTEGER)
VARCHAR
VARCHAR(100)
VARCHAR(300)
VARCHAR(100)
Tabulka SALES sales_id
prod_id
cust_id
qty
price
purch_date
(INTEGER)
(INTEGER)
(INTEGER)
(INTEGER)
DECIMAL(7,2)
TIMESTAMP
Část 2: Vytvořte instalační skript pro databázi EXPRESS Skripty jsou výkonným mechanismem pro provádění opakujících se úloh, například získávání statistických přehledů z databáze, zálohování, nasazování databáze. Skripty operačního systému mají výhodu v podpoře parametrů, jsou tak mnohem flexibilnější. V této části vytvoříte skript operačního systému, který vytvoří EXPRESS databázi jako EXPRESS2 databázi. Skript bude volat již vygenerované SQL skripty pro databázové objekty. Vzhledem k omezenému prostoru bude toto cvičení a specifické příkazy ukázáno na Windows platformě. Pokud preferujete práci v Linuxu, ujistěte se, že provedete změny v uvedených instrukcích. Postup 1. Otevřete textový editor a vložte informace, které jsou ukázány níže. Většina lidí udělá chybu při přepisování textu. Účelně neposkytujeme dané řádky jako samostatný soubor - řešení vlastních chyb vám dá více! Nezapomeňte, že máte zadat správnou cestu k souborům schema.ddl, triggers.ddl a app_objects.ddl , které najdete také v doprovodném souboru knihy - expressc_book_exercises_9.7.zip.
2. Uložte skript v adresáři, create_database.bat.
například
Kapitola 5 – Nástroje DB2
99
nazvěte
ho
C:\express
a
Poznámka: Pokud používáte Wordpad, ověřte v dialogovém oknu Uložit jako že máte zvolen MS-DOS Formát. Pokud soubor uložíte v jiném formátu, Wordpad může do souboru vložit neviditelné znaky a způsobit tak problém při spouštění skriptu. Před a za názvem souboru také použijte uvozovky, jak je ukázáno na obrázku níže, abyste se ujistili, že Windows nepřidá koncovku .TXT.
100
Začínáme s DB2 Express-C
3. Pro spuštění skriptů, které vyžadují interakci s DB2, musíte být v příkazovém prostředí DB2. Pro otevření Příkazového okna DB2 spusťte Start → Program Files → IBM DB2 → DB2COPY1 (výchozí) → Nástroje příkazového řádku → Příkazové okno. Alternativně můžete po Start→ Spustit, zadat příkaz db2cmd a stiskněte enter, jak je ukázáno níže.
4. Pak pro spuštění skriptu odešlete následující příkazy v Příkazovém okně: cd C:\express create_database.bat db2admin ibmdb2
Kapitola 5 – Nástroje DB2
101
5. Udělejte si chvilku času a projděte si skript, který jste vytvořili. Rozumíte všemu, co se děje na jednotlivých řádcích? 6. Pokuste se odpovědět na následující otázky: A. Kde je definované připojení k databázi? B. Co znamenají %1 a %2? C. Co dělá následující kód? Kde je použit? Proč? SET DBPATH=C: D. Co udělá následující řádek kódu? del schema.log, triggers.log, app_objects.log E. Co se stane, pokud je skript volán bez jakýchkoliv parametrů? F. Proč SQL skripty neobsahují příkaz CONNECT TO? Jak se připojují do databáze?
ČÁST II – UČÍME SE DB2: DATABÁZOVÁ ADMINISTRACE
6 Kapitola 6 –Architektura DB2 V této kapitole stručně probereme architekturu DB2. Dozvíte se o: Procesním modelu DB2 Paměťovém modelu DB2 Úložném modelu DB2 Poznámka: Pro více informací o architektuře DB2 se podívejte na následující video: http://www.channeldb2.com/video/video/show?id=807741:Video:4482
6.1 Procesní model DB2 Obrázek 6.1 zobrazuje Procesní model DB2. Obdélníky zde reprezentují procesy, elipsy reprezentují vlákna. Hlavní proces DB2 se nazývá db2sysc. Pod tímto procesem je několik vláken, jedno z hlavních se jmenuje také db2sysc. Jedná se o hlavní vlákno, ze kterého se vytvářejí vlákna další. Pokud se vzdálená aplikace pokusí připojit na server voláním SQL příkazu CONNECT, obdrží vzdálení naslouchači komunikačního protokolu tento požadavek a kontaktují koordinujícího agenta DB2 (db2agent). Agent DB2 je jako malý pracant - vykonává operace ve prospěch DB2. Pokud je aplikace lokální, což znamená, že je spuštěna ze serveru, kroky jsou velice podobné, jen požadavek přebírá agent db2ipccm místo vlákna db2tcpcm. V některých případech, například, když je povolená paralelizace, může db2agent vytvořit další agenty, kteří vypadají jako vlákna db2agntp. Ostatní agenti, kteří jsou ukázáni na obrázku jako db2pfchr, db2loggr, db2dlock, mohou být také použiti za různým účelem. Nejčastější procesy jsou popsány v Tabulce 6.1 a nejběžnější vlákna jsou popsána v Tabulce 6.2.
104
Začínáme s DB2 Express-C
Obrázek 6.1 – Procesní model DB2
Název procesu db2sysc (Linux) db2syscs (Win)
Popis Hlavní systémový DB2 správce nebo engine. Počínaje verzí DB2 9.5 existuje jen jediný, vícevláknový engine pro celý oddíl. Všechny Engine Dispatchable Units (EDU) jsou vlákny uvnitř tohoto procesu. Bez tohoto procesu nemůže databázový server fungovat.
db2acd
Autonomní počítací démon. Je používaný pro vykonávání automatických úloh na straně klienta – například Health monitor, automatické údržbové nástroje a administrátorský plánovač. Tento proces byl dříve nazýván db2hmon.
db2wdog
Hlídací pes DB2. Hlídací pes je rodičem procesu hlavního enginu, db2sysc. Vyčistí systémové prostředky, pokud db2sysc proces skončí abnormálně.
db2vend
Chráněný vendor proces byl představen ve verzi DB2 9.5 Veškerý kód vendorů, třetích stran, se spouští v tomto procesu mimo samotný engine. Aplikace vendorů třetích stran jsou jiné, než IBM programy, které jsou v interakci s DB2; například archivování logu může být spravováno vendorským kódem. Specifikuje se parametr uživatelské výstupní rutiny, ukazující na tento kód.
db2fmp
Chráněné procesy, které spouští uživatelský kód na serveru mimo dosah firewallu - jde jednak o uložené procedury a také uživatelské
Kapitola 6 – DB2 Architektura
105
funkce. Tento proces nahrazuje dva procesy (db2udf a db2dari), které byly používané v předchozích verzích DB2. Tabulka 6.1 – Běžné procesy DB2
Název vlákna
Popis
db2sysc
Systémové ovládací vlákno. Toto vlákno je nastartování, ukončení a správu běžící instance.
db2tcpcm
Naslouchač TCP/IP komunikace.
db2agent
Koordinační agent, který vykonává databázové operace za samotné aplikace (nejméně 1 pro připojení, záleží na tom, zda je Connection Concentrator povolen).
db2agntp
Tento podagent je vytvořen, pokud je INTRA_PARALLEL nastaveno na YES. Toto vlákno provádí databázové operace pro aplikace. db2agent bude koordinovat práci mezi různými db2agntp podagenty.
db2pfchr
DB2 asynchronní I/O datové čtení (NUM_IOSERVERS)
db2pclnr
DB2 asynchronní I/O datové zapisování (NUM_IOCLEANERS)
zodpovědné
za
Tabulka 6.2 – Běžná vlákna DB2
6.2 Paměťový model DB2 Paměťový model DB2 se skládá z různých oblastí v paměti na úrovni instance, databáze, aplikace a agenta, jak je ukázáno na Obrázku 6.2. Jednotlivé oblasti paměti si v této knize nebudeme popisovat do detailů, poskytneme jen velice stručný přehled.
106
Začínáme s DB2 Express-C
Obrázek 6.2 – Paměťový model DB2 Pokud je spuštěna instance, je alokována sdílená paměť databázového správce. To obvykle nezabere moc místa. Když se poprvé připojíte do databáze, je alokována Database Global Memory. V tomto bloku je nejdůležitější částí buffer pool (v češtině překládáno jako fondy vyrovnávacích pamětí), obzvláště pro zlepšení výkonu dotazů. Velikost buffer poolů bude určovat velikost celé Database Global Memory. Agent Private Memory je paměť, která je využívána každým DB2 agentem. Bez použití Koncentrátora připojení vyžaduje každé připojení jednoho agenta. Typický agent využívá zhruba 3 až 5 MB paměti. S Koncentrátorem připojení využívá více připojení jednoho agenta, proto se redukují požadavky na fyzickou paměť.
6.3 Úložný model DB2 V této sekci si popíšeme následující koncepty: Stránky a prostory Fondy vyrovnávací paměti Tabulkové prostory
Kapitola 6 – DB2 Architektura
107
6.3.1 Stránky a prostory Stránka je minimální úložná jednotka v DB2. Povolené velikosti stránky jsou: 4K, 8K, 16K a 32K. Extenty jsou sdružením stránek. Pracovat najednou jen s jednou stránku v DB2 je nákladné na úkor výkonu; proto tedy DB2 pracuje místo stránek s extenty. Velikosti stránky a extentu jsou definovány při práci s fondy vyrovnávací paměti a tabulkovými prostory, jak bude ukázáno v následujícím textu.
6.3.2 Fondy vyrovnávací paměti (buffer pooly) Fondy vyrovnávací paměti jsou reálnou vyrovnávací pamětí cache pro tabulky a indexová data. Vylepšují výkon tím, že redukují přímý sekvenční I/O a podporují asynchronní čtení (prefetching) a zapisování. Řekněme tedy, že DB2 předvídá, které stránky budou potřebné a načte je z disku do fondu vyrovnávací paměti, takže jsou připraveny k použití. Fondy vyrovnávací paměti jsou alokované jednotky paměti - 4K, 8K, 16K a 32K stránky. Měl by existovat nejméně jeden fond vyrovnávací paměti pro databázi a nejméně jeden odpovídající fond vyrovnávací paměti pro tabulkový prostor o dané stránkové velikosti. 6.3.2.1 Vytvoření fondu vyrovnávací paměti K vytvoření fondu vyrovnávací paměti můžete použít příkaz CREATE BUFFERPOOL. Alternativně pak můžete v Řídicím centru kliknout v dané databázi pravým tlačítkem na adresáři Fondy vyrovnávací paměti a vybrat položku Vytvořit, jak je ukázáno na Obrázku 6.3
Obrázek 6.3 – Vytvoření fondu vyrovnávacích pamětí
108
Začínáme s DB2 Express-C
Po kliknutí na Vytvořit se objeví dialogové okno, které můžete vidět na Obrázku 6.4
Obrázek 6.4 – Dialogové okno Vytvořit fond vyrovnávacích pamětí Význam většiny položek na Obrázku 6.4 je evidentní. Pole Neblokováno a Blokováno se vztahuje k počtu stránek, které by měly existovat jako neblokové a blokové. Blokové fondy vyrovnávacích pamětí zajišťují, že souvislé stránky na disku se přesunou do fondu vyrovnávacích pamětí také jako souvislý, blokový prostor; to může zvýšit výkonnost. Počet stránek nemůže být větší než 98% počtu stránek pro fond vyrovnávacích pamětí. Pokud je zadaná hodnota 0, znamená to, že blokový I/O není povolený. Jakmile je vytvořen fond vyrovnávací paměti, zobrazí se v Řídicím centru, jak je zobrazeno na Obrázku 6.5.
Kapitola 6 – DB2 Architektura
109
Obrázek 6.5 – Řídicí centrum po vytvoření fondu vyrovnávací paměti SAMP16K
6.3.3 Tabulkové prostory Tabulkové prostory jsou logickým rozhraním mezi logickými tabulkami na straně jedné a fyzickou pamětí systému (fondy vyrovnávací paměti a kontejnery - disky) na straně druhé. Použitím příkazu CREATE TABLESPACE vytvoříte tabulkový prostor, v příkazu dále můžete specifikovat: Velikost stránky pro tabulkový prostor (4kB, 8kB, 16kB, or 32kB). Velikost stránky musí korespondovat s velikostí stránky ve fondu vyrovnávací paměti. Název buffer poolu asociovaného do tohoto tabulkového prostoru. Velikost extentu. Velikost asynchronního I/O datového čtení. 6.3.3.1 Typy tabulkových prostorů Existují tři typy tabulkových prostorů: Běžné Tyto tabulkové prostory jsou určeny pro tabulky uživatelů. Například tabulkový prostor USERSPACE1, který je vytvořen defaultně, je běžným tabulkovým prostorem.
110
Začínáme s DB2 Express-C Velké Jsou užívány, aby oddělily LOB data do jejich vlastních tabulkových prostorů. Jsou také používány pro ukládání XML dat pro databáze vytvořené s podporou pureXML a využitím datových typů XML pro sloupce. Velké tabulkové prostory jsou defaultní. Dočasné Existují dva typy dočasných tabulkových prostorů: - Systémově dočasné Jsou užívány pro interní operace DB2 - třeba pro řazení. Například tabulkový prostor TEMPSPACE1, který je vytvořen defaultně při vytváření databáze, je systémově dočasným tabulkovým prostorem. Musí existovat vždy nejméně jeden systémově dočasný tabulkový prostor. - Uživatelsky dočasné Jsou využívány pro vytvoření uživatelsky definovaných Deklarovaných Globálních Dočasných Tabulek (Declared Global Temporary Tables - DGTT) a Vytvořených Globálních Dočasných Tabulek (Create Global Temporary Tables - CGTT), což jsou dočasné tabulky v paměti. Často se zaměňují se systémovými dočasnými tabulkovými prostory. Předtím, než mohou být použity DGTT a CGTT, musí uživatel vytvořit uživatelský dočasný tabulkový prostor.
6.3.3.2 Správa tabulkových prostorů Tabulkové prostory mohou být rozděleny na základě toho, jak jsou spravovány. To se specifikuje v příkazu CREATE TABLESPACE. Spravován systémem Tento typ je znám jako System Managed Storage (SMS). To znamená, že operační systém spravuje ukládání. Jsou jednoduché na správu, kontejnerová úložiště jsou adresáře souborového systému. Prostor není předalokovaný, ale soubory rostou dynamicky. Jakmile jednou specifikujete kontejner, jsou informace v době vytváření uloženy. Ostatní kontejnery nemohou být později přidány ledaže by bylo použito přemístěné úložiště. Pokud je použit SMS tabulkový prostor, nemohou být tabulková, indexová a LOB data rozšířena napříč různými tabulkovými prostory. Spravován databází Tento typ tabulkového prostoru je znám jako Database Managed Storage (DMS), což znamená, že DB2 přebírá správu za ukládání. Správa prostoru vyžaduje více zásahů od DBA. Kontejnerem mohou být předalokované soubory nebo raw zařízení. Pro raw zařízení jsou data zapisována přímo, bez O/S cache. Použitím příkazu ALTER TABLESPACE může být změněna jejich velikost, kontejnery mohou být přidány nebo vyjmuty. DMS tabulkové prostory jsou nejlepší pro výkon.
Kapitola 6 – DB2 Architektura
111
Tabulková, indexová a LOB data mohou být rozdělena do jednotlivých tabulkových prostorů, čímž je vylepšen výkon. Spravován automatickým úložištěm Tento typ tabulkového prostoru je spravován automatickým úložištěm a může těžit z toho, že je jednoduchý pro používání jako SMS tabulkový prostor a má také výbornou výkonnost a flexibilitu – podobně jako DMS tabulkový prostor. Proto je tento typ od verze DB2 9 nastaven jako defaultní. Pro tyto tabulkové prostory uživatel nejprve nadefinuje cestu úložiště a logickou skupinu úložných zařízení, které DB2 použije pro správu prostoru. Explicitně není definován žádný kontejner. Kontejnery jsou automaticky vytvořeny napříč úložných cest. Růst již existujících kontejnerů, stejně jako přidání nových, je kompletně spravováno DB2. Pokud není specifikována úložná cesta v příkazu CREATE DATABASE, je pro cestu úložiště použita cesta databáze. Cesta databáze je tam, kde jsou uloženy hlavní databázové definice. Pokud není specifikována databázová cesta, je získána z Konfigurace správce DBM parametrem DFTDBPATH. Ve Windows to může být jen disk, nikoliv cesta. Pro povolení automatického ukládání musíte nejprve vytvořit databázi s povoleným automatickým ukládáním (je to defaultní hodnota) a asociovat s ní sadu úložišť. Po vytvoření můžete, pokud je to nutné, předefinovat cesty úložiště použitím databázové RESTORE operace. Pak můžete vytvořit tabulkové prostory, které budou využívat automatické úložiště (opakujeme, jedná se o defaultní chování). Správa automatického úložiště je velice podobná DMS tabulkovým prostorů, ale operace jsou automatizované, takže jsou spravovány DB2. Automatizováno je také přiřazení a alokace kontejnerů a automatická změna velikosti. Podívejme se na příklad tabulkového prostoru spravovaného automatickým úložištěm. Nejprve vytvoříme databázi, kde je povoleno automatické úložiště, viz tyto příklady: Automatické úložiště je defaultně povoleno: CREATE DATABASE DB1
Automatické úložiště je explicitně specifikováno: CREATE DATABASE DB1 AUTOMATIC STORAGE YES
Automatické úložiště je defaultně povoleno, ale ukládací cesty nejsou specifikovány. Pokud je cestou úložiště adresář, musí být předtím vytvořen: Příklad ve Windows: CREATE DATABASE DB1 ON C:/, C:/storagepath1, D:/storagepath2
Všimněte si, že první položkou v seznamu je disk, protože ten ve Windows reprezentuje databázovou cestu (nemůže to být cesta samotná). Tato položka se také bude používat jako jedna z úložných cest. Takže cesta databáze je C:, úložné
112
Začínáme s DB2 Express-C cesty obsahují C:, C:\storagepath1 a D:\storagepath2 za předpokladu, že existují dva zmíněné adresáře ještě předtím, než příkaz spustíte. Příklad v Linuxu: CREATE DATABASE DB1 ON /data/path1, /data/path2
Automatické úložiště je explicitně zakázáno: CREATE DATABASE DB1 AUTOMATIC STORAGE NO
Dále vytvořte tabulkový prostor s povoleným automatickým úložištěm, viz následující příklady: Automatické úložiště pro tabulkové prostory je také povoleno defaultně: CREATE TEMPORARY TABLESPACE TEMPTS
Automatické úložiště je explicitně specifikováno pro tabulkový prostor: CREATE TABLESPACE TS2 MANAGED BY AUTOMATIC STORAGE
Automatické úložiště je implicitně specifikováno, počáteční velikost je alokována spolu s tím, jak moc se bude zvětšovat a maximální velikostí, které může dosáhnout. CREATE TABLESPACE TS1 INITIALSIZE 500 K INCREASESIZE 100 K MAXSIZE 100 M
6.3.3.3 Jak jsou data v tabulkových prostorech uložena Defaultně DB2 ukládá na disk jednotlivě, napříč kontejnery. Například pokud máte tabulkový prostor s velikostí stránky 4K a velikostí extentu 8 stránek, používající 3 kontejnery DMS tabulkového prostoru, znamená to, že se zapíše 32K dat (4K x 8 extentů v jednom obsahu = 32K) na jeden disk předtím, než se bude zapisovat další. Tak je to ukázáno na Obrázku 6.6. Uvědomte si, že tabulky nesdílí obsahy.
Kapitola 6 – DB2 Architektura
113
Obrázek 6.6 – Zapisování dat v tabulkových prostorech 6.3.3.4 Vytvoření tabulkového prostoru pomocí Řídicího centra Pro vytvoření tabulkového prostoru z Řídicího centra klikněte pravým tlačítkem na adresáři Tabulkové prostory v určené databázi a vyberte Vytvořit, jak je ukázáno na Obrázku 6.7. Objeví se Průvodce vytvořením tabulkového prostoru, viz. Obrázek 6.8.
Obrázek 6.7 – Vytvoření tabulkového prostoru z Řídicího centra
114
Začínáme s DB2 Express-C
Obrázek 6.8 – Průvodce vytvořením tabulkového prostoru Průvodce, který je ukázán na Obrázku 6.8, vás provede několika kroky při vytváření tabulkových prostorů.
6.4 Shrnutí V této kapitole jsme prozkoumali tři klíčové aspekty architektury DB2: procesní, paměťový a úložný model, podívali jsme se na běžné procesy a vlákna, včetně db2sysc, bez kterého by DB2 nefungovalo. Úložný model byl popsán detailně, byly v něm zahrnuty tři nejdůležitější aspekty: stránky a extenty, fondy vyrovnávací paměti (včetně detailů o vytváření) a tabulkové prostory. Nakonec jsme se podívali na různé typy tabulkových prostorů, včetně detailů jejich správy (SMS, DMS, automatická správa) a tvorby nového tabulkového prostoru použitím Řídicího centra.
6.5 Cvičení Toto cvičení vám pomůže porozumět DB2 procesnímu, paměťovému a úložnému modelu v prostředí Windows. Připomenete si různé procesy a vlákna, budete sledovat využití paměti a v praxi si ověříte, jak vytvořit databázi, která používá automatické úložiště a úložné cesty ve Windows. Ideálně by měly být úložné cesty vytvořeny napříč několika disky, ale váš počítač nemusí mít více disků, proto následující příklady používají jen jeden disk - C:\. Postup: 1. Podívejme se na některé procesy ve Windows. Nejprve otevřete příkazové okno DB2 (Start → Spustit → db2cmd) a ujistěte se, že instance je zastavena provedením tohoto příkazu: db2stop force
Kapitola 6 – DB2 Architektura
115
2. Otevřete Správce úloh v prostředí Windows a vyberte záložku Procesy, klikněte na Název procesu pro seřazení položek a najděte proces db2sysc.exe, jak je ukázáno na obrázku níže.
3. Neměli byste proces db2syscs.exe najít, protože v prvním kroku jsme říkali, že zastavíme instanci DB2. 4. Spusťte instanci DB2 tímto příkazem: db2start a zopakujte minulý krok. Můžete už nyní najít proces db2syscs.exe? 5. Nyní se podívejme na využití CPU a paměti. Proveďte tyto kroky: A. Ujistěte se, že na vašem systému neběží žádná jiná aplikace – pokud tomu tak není, všechny ostatní aplikace zavřete B. Otevřete nové příkazové okno DB2 a zadejte: db2stop force C. Ve Správci úloh se přepněte do záložky Výkon D. Nechte Správce úloh a Příkazovou řádku DB2 otevřenou vedle sebe, jak je ukázáno na obrázku níže. Zapište si množství dostupné fyzické paměti a využití CPU.
116
Začínáme s DB2 Express-C
E. Spusťte db2start a během spouštění monitorujte CPU a paměť po dobu, kdy je příkaz spouštěn. Můžete vidět ostrou špičku ve využití CPU a redukci dostupné paměti o 50MB až 70MB. Toto množství paměti spotřebuje instance DB2. Pokud spustíte příkaz db2stop force znovu, paměť by se měla vrátit na svou původní hodnotu.
6. Opakujte předcházející krok, ale tentokrát monitorujte, co se stane po připojení k SAMPLE databázi. Spusťte následující příkazy z Příkazového okna DB2: db2start db2 connect to sample
Kapitola 6 – DB2 Architektura
117
Jakmile se připojíte do databáze SAMPLE, uvidíte úbytek v paměti, která je k dispozici. To je proto, že pokud se připojíte do databáze, databázová globální paměť (fond vyrovnávací paměti, katalogová cache, atd) je alokovaná. 7. Opakujte přechozí krok, ale tentokrát sledujte, co se stane, pokud vytvoříte fond vyrovnávací paměti o určité velikosti. Ujistěte se, že nepřesáhnete velikost fyzické paměti ve vašem počítači. Pokud tak uděláte, DB2 nebude alokovat fond vyrovnávací paměti okamžitě, ale bude vytvoření odkládat, dokud nebude databáze neaktivní. Navíc bude vytvořen malý fond vyrovnávací paměti a DB2 ho bude používat, dokud se neuvolní dostatek paměti. Například k vytvoření fondu vyrovnávací paměti o 160 MB spusťte tento příkaz nad SAMPLE databází: db2 create bufferpool mybp immediate size 5000 pagesize 32k
8. Vytvořte databázi mydb1, která používá automatické ukládání a kde je cestou databáze disk C: a úložné cesty jsou C:, C:\mystorage1, C:\mystorage2. Spusťte následující příkaz z Příkazového okna DB2: db2 create database mydb1 on C:\, C:\mystorage1, C:\mystorage2
Pokud jste spustili příkaz, pravděpodobně jste dostali místo realizace chybovou hlášku, uvedené adresáře C:\mystorage1, C:\mystorage2 musí existovat. Vytvořte je tedy a zkuste příkaz spustit znovu!
7 Kapitola 7 – Připojování klientů DB2 Tato kapitola se zabývá nastavením, které je potřebné pro připojení z DB2 klienta na DB2 server za využití TCP/IP protokolu. Zapamatujte si, že DB2 server má v sobě komponentu klienta, takže DB2 server se také může chovat jako klient a připojovat se na další DB2 servery. Je několik způsobů, jak nastavit konektivitu DB2 klienta; nicméně v této kapitole budeme probírat jen nejjednodušší metodu, která využívá Asistenta pro konfiguraci. Poznámka: Pro více informací o konektivitě klientů do DB2 se podívejte na toto video: http://www.channeldb2.com/video/video/show?id=807741:Video:4222 Asistent pro konfiguraci je počínaje verzí DB2 9.7 na ústupu; každopádně je stále používán a je přítomen v produktu.
7.1 DB2 Adresáře Slovníky DB2 jsou binární soubory, které ukládají informaci o tom, na které databáze se můžete připojit z vašeho stroje. Existují čtyři adresáře: Adresář Systémové databáze Adresář Lokální databáze Adresář uzlu Adresář DCS Prohlížení a aktualizace obsahu všech těchto adresářů může být provedeno přes grafický nástroj Asistent pro konfiguraci.
7.1.1 Adresář Systémové databáze Adresář vypadá jako obsah knihy. Ukazuje všechny databáze, ať už jsou lokální nebo vzdálené, na které se můžete připojit. Pro lokální databáze bude ukazovat na záznam v adresáři Lokální databáze. Pro vzdálené databáze bude ukazovat na záznam v adresáři uzlu. K prohlédnutí obsahu tohoto adresáře spusťte příkaz: list db directory
120
Začínáme s DB2 Express-C
7.1.2 Adresář Lokální databáze Tento adresář obsahuje informace o databázích, na které se můžete připojit a které existují na vašem počítači. Pro prohlédnutí obsahu tohoto adresáře spusťte tento příkaz: list db directory on
7.1.3 Adresář uzlu Tento adresář obsahuje informace o tom, jak se připojit na danou vzdálenou databázi. Například pokud se používá protokol TCP/IP, měl by TCP/IP záznam uzlu obsahovat IP adresu serveru, na který se snažíte připojit, a port instance, kam patří tato databáze. Pro prohlédnutí obsahu tohoto adresáře spusťte příkaz: list node directory
7.1.4 Adresář DCS Tento adresář se objeví, jen pokud máte nainstalován DB2 Connect software pro připojení do DB2 na z/OS (mainframe) nebo DB2 na i5/OS. Pro prohlédnutí obsahu adresáře spusťte tento příkaz: list dcs directory
7.2 Asistent pro konfiguraci (vývojově zastaralý) Používáním grafického nástroje Asistent pro konfiguraci můžete snadno konfigurovat konektivitu mezi DB2 klientem a DB2 serverem. Pro spuštění Asistenta pro konfiguraci vyberte: Start → Programy → IBM DB2 → DB2COPY1 → Instalační nástroje → Asistent pro konfiguraci. Z příkazové řádky můžete nástroj spustit příkazem db2ca. Obrázek 7.1 znázorňuje Asistenta pro konfiguraci.
Kapitola 7 – Připojování klientů DB2
121
Obrázek 7.1 – Asistent pro konfiguraci
7.2.1 Potřebná nastavení na straně serveru Na straně serveru je nutné nastavit dvě věci: 1) DB2COMM Tato proměnná registru DB2 určuje, který komunikační protokol naslouchačů by měl sledovat požadavky od klientů. TCP/IP je běžým a nejvíce používaným komunikačním protokolem. Změna tohoto parametru vyžaduje restart instance. Pro prohlížení a změny hodnoty DB2COMM v Asistentu pro konfiguraci zvolte Konfigurovat → Registr DB2, jak je znázorněno na Obrázku 7.2 a Obrázku 7.3.
122
Začínáme s DB2 Express-C
Obrázek 7.2 – Přístup do registrů DB2
Obrázek 7.3 – Ověřování hodnoty proměnné DB2COMM v registru DB2
2) SVCENAME Tento parametr Konfigurace správce DBM by měl být nastaven buď na název služby (jak je definováno v souboru služeb TCP/IP) nebo na číslo portu, které je použito, když chceme
Kapitola 7 – Připojování klientů DB2
123
přistoupit k databázím této instance. Z Asistenta pro konfiguraci zvolte Konfigurovat → Konfigurovat správce DBM, jak je ukázáno na Obrázku 7.4
Obrázek 7.4 – Kontrolování dbm cfg z Asistenta pro konfiguraci Jakmile jste v okně Konfigurace správce DBM, najděte sekci Komunikace a podívejte se na SVCENAME. Pokud je nutné, můžete změnit hodnotu na řetězec, případně na číslo portu. Okno je ukázáno na Obrázku 7.5.
124
Začínáme s DB2 Express-C
Obrázek 7.5 – Kontrolování parametru SVCENAME v dbm cfg
7.2.2 Potřebná nastavení na straně klienta Před připojením potřebujete znát u klienta tyto informace: Název databáze, na kterou se budete připojovat. Číslo portu DB2 instance na serveru, kam patří databáze. Můžete také použít název služby, pokud je související záznam v souboru služeb TCP/IP. Uživatelské jméno a heslo do operačního systému, na kterém běží databáze. Tento uživatel musí být předtím definován na straně serveru. Výše uvedené informace mohou být vloženy do DB2 klienta použitím Asistenta pro konfiguraci. Nejprve spusťte průvodce pro přidání databáze – klikněte na Vybrané → Přidat databázi s použitím průvodce, jak je ukázáno na Obrázku 7.6
Kapitola 7 – Připojování klientů DB2
125
Obrázek 7.6 – Vyvolání Přidání databáze s použitím průvodce K tomuto průvodci se můžete dostat také kliknutím pravého tlačítka na prázdném prostoru v Asistentu pro konfiguraci a vybráním Přidat databázi s použitím průvodce. Průvodce přidáním databáze ukazuje Obrázek 7.7.
Obrázek 7.7 – Průvodce přidáním databáze
126
Začínáme s DB2 Express-C
V Průvodci přidáním databáze jsou na výběr tři možnosti: 1. Použít profil Mohou nastat situace, kdy potřebujete konfigurovat mnoho klientů, kteří se budou připojovat na stejný DB2 server. V těchto situacích je vhodné provést veškeré konfigurace pro jednoho klienta a uložit tuto konfiguraci do „profilového“ souboru. S tímto souborem můžete nahrávat všechny informace přímo ostatním klientům. Pokud na Obrázku 7.7 vyberete Použít profil, budete nahrávat informace z již existujícího „profilu“. Více detailů je uvedeno později v této kapitole, v části zabývající se tvorbou klientských a serverových profilů. 2. Prohledat síť Tato metoda, také známá jako Discovery, dává DB2 za úkol prohledat síť pro daný server, instanci a databázi. Aby tato metoda fungovala, musí běžet DAS na každém DB2 serveru, kde se mohou databáze objevit. V metodě existují dva vyhledávací způsoby: Search: Prohledává celou síť. Nedoporučuje se, pokud se jedná o rozsáhlou síť s mnoha huby, protože získání dat ze systému zabere hodně času Known: Prohledává v síti server a adresu, kterou zadáte. Obě metody jsou ilustrovány na Obrázku 7.8
Obrázek 7.8 – Dvě metody vyhledávání Mohou nastat okolnosti, kdy administrátor nechce, aby klienti prohledávali síť s databázemi s tajnými informacemi. Tomu se dá zabránit díky DAS, na úrovni instance nebo databáze. Více detailů o problému poskytuje Obrázek 7.9.
Kapitola 7 – Připojování klientů DB2
127
Obrázek 7.9 – Konfigurování parametrů, které umožňují nalézání Obrázek 7.9 ukazuje rozdílné úrovně, v nichž můžete umožnit nebo zakázat možnost nalézání. Na úrovni DAS můžete přidělit parametru DISCOVER hodnotu SEARCH nebo KNOWN. Na úrovni instance se může v Konfiguraci správce DBM nastavit parametr DISCOVER_INST na DISABLE nebo ENABLE. Nakonec na úrovni databáze může být parametr DISCOVER_DB také nastaven na ENABLE nebo DISABLE. Nastavení těchto parametrů vám poskytuje přehled při možnostech nalézání databází. 3. Ručně nastavit připojení k databázi Pokud budete používat tuto metodu, manuálně do Asistenta pro konfiguraci zadáváte název cílového serveru, čísla portu a informace o databázi. V katalogu se vygenerují příkazy pro spuštění konfigurace připojení. Asistent pro konfiguraci nebude kontrolovat, zda jsou informace správně zadané. To, že jsou nesprávně zadané, poznáte tak, že se nebudete moci připojit na server. Také se ujistěte, že zadané uživatelské jméno a heslo pro vzdálenou databázi, jsou správné. Defaultně je autentifikace prováděna na DB2 serveru, kam se snažíte připojit, proto je nutné zadat uživatele, který je na tomto serveru již definovaný.
128
Začínáme s DB2 Express-C
7.2.3 Vytváření klientských a serverových profilů Pokud konfigurujete velký počet serverů nebo klientů, je lepší nedefinovat je jeden po druhém, ale nastavit první, vyexportovat jeho profil, a pak použít tento profil pro další klienty/servery. Ušetří to spoustu administrativního času při nastavování prostředí. Pro vytvoření přizpůsobeného profilu z Asistenta pro konfiguraci klikněte na Konfigurovat v menu, pak vyberte Profil pro export → Přizpůsobit, jak vidíte na Obrázku 7.10
Obrázek 7.10 – Exportování profilu Obrázek 7.11 ukazuje pole, která musí být pro vyexportování profilu vyplněna
Kapitola 7 – Připojování klientů DB2
129
Obrázek 7.11 – Dialogové okno Přizpůsobit profil pro export Obrázek 7.12 ukazuje výsledek po kliknutí na “Exportovat” v dialogovém oknu Přizpůsobit profil pro export.
Obrázek 7.12 – Výsledek exportu profilu Pro import přizpůsobeného profilu z Asistenta pro konfiguraci klikněte na menu Konfigurovat a zde vyberte Profil pro import → Přizpůsobit, jak je ukázáno na Obrázku 7.13
130
Začínáme s DB2 Express-C
Obrázek 7.13 – Importování profilu Obrázek 7.14 zobrazuje pole, která musí být vyplněna pro dokončení importu profilu
Obrázek 7.14 – Přizpůsobit profil pro import
Kapitola 7 – Připojování klientů DB2
131
7.3 Shrnutí Klíčovou vlastností správy relačních databází je připojování od klienta na server. V této kapitole jsme se podívali na konektivitu klienta, začali jsme s významem a obsahem databázových a uzlových adresářů asociovaných s DB2. Dále jsme probrali grafický nástroj Asistent pro konfiguraci, abychom nastavili připojení klient-server, včetně toho, co má být nastaveno u každé z těchto stran. Také jsme se podívali, jak může být použit Průvodce pro přidání databáze pro vytvoření spojení serveru pomocí jedné ze tří metod: použitím uloženého profilu, prohledáním sítě (také znám jako Discovery) nebo ručním zadáním informací o serveru. Následně byla detailněji popsána tvorba klientského a serverového profilu.
7.4 Cvičení Asistent pro konfiguraci může být použit pro rychlé a jednoduché konfigurování vzdálených databázových připojení. V tomto cvičení budete katalogovat databázi, která se nachází na vzdáleném DB2 serveru (zastoupena například počítačem vašeho souseda) při užití obou vyhledávacích a discover módů. Jakmile je jednou databáze katalogovaná, budete schopni přistupovat k ní, jako by byla ve vašem lokálním systému. Tento příklad předpokládá, že pracujete v síti. Pokud to není váš případ, můžete v každém případě využít vlastní počítač jako klientský i serverový stroj a následující instrukce upravte tak, abyste se připojovali na svůj systém. Postup 1. Zeptejte se svého souseda (nebo školitele) na následující informace: 2. Informace o vzdálené databázi: (PR)
Protokol
__TCPIP____
(IP)
IP Adresa nebo host jméno
____________
(PN)
Číslo portu instance
____________
(DB)
Název databáze
_ SAMPLE __
Tipy: Pro získání jména hostu v prostředí Windows napište hostname z příkazové řádky. IP adresu v prostředí v příkazovém řádku.
Windows
získáte
spuštěním
příkazu
ipconfig
3. Otevřete Asistenta pro konfiguraci. (Tip: je přístupný přes Start menu). 4. Otevřete menu Vybrané a vyberte položku Přidat databázi s použitím průvodce. 5. V průvodci na stránce Zdroj vyberte možnost Ručně nastavit připojení k databázi. Klikněte na tlačítko Další a tím se posunete na další stránku průvodce.
132
Začínáme s DB2 Express-C 6. Na stránce Protokol vyberte možnost TCP/IP. Pro posun na další stránku průvodce klikněte na tlačítko Další. 7. V průvodci na stránce TCP/IP zadejte celý hostname nebo IP adresu, kterou jste získali v 1.kroku. Zadejte číslo portu, které jste získali v 1. kroku. Klikněte na tlačítko Další a posunete se tak na další stránku průvodce. 8. Poznámka: Pokud máte záznam v lokálním souboru služeb, můžete vyplnit Název služby. Port musí být na lokálním počítači i serveru stejný. Pokud použijete tuto možnost, DB2 se podívá do souboru služeb na lokálním stroji, ne na serveru. Pokud chcete používat tuto možnost, musíte přidat záznam do tohoto souboru. 9. V průvodci na stránce Databáze zadejte jméno databáze definované na vzdáleném serveru, které jste si poznamenali v 1. kroku do kolonky Název databáze. Všimněte si, že pole Alias databáze je automaticky vyplněno stejnou hodnotou. Alias databáze je název, které lokální aplikace používají pro připojení do databáze. Pokud již máte lokální databázi definovanou jako SAMPLE, DB2 vás nenechá katalogovat další databázi se stejným názvem. Musíte tu tedy použít rozdílné přezdívkové jméno. Pro tento příklad změňte databázový alias na SAMPLE1. Pokud chcete, můžete volitelně vložit komentář o této databázi. Kliknutím na tlačítko Další přejdete v průvodci na další stránku. 10. V průvodci na stránce Zdroj dat můžete nepovinně registrovat novou databázi (zdroj dat) jako ODBC datový zdroj. Automaticky jej zaregistruje ve správci ODBC dat ve Windows. Například odkškrtněte Registrovat tuto databázi pro rozhraní CLI/ODBC pokud nebudete používat ODBC. Kliknutím na tlačítko Další přejdete v průvodci na následující stránku. 11. V průvodci na stránce Volby uzlu specifikujte operační systém serveru, kde je databáze uložena. Všechny počítače v těchto laboratořích používají Microsoft Windows, ujistěte se, že položka Windows je vybrána v roletce. Pole Název instance by mělo být nastaveno na DB2. Pokud není, nastavte jej na DB2. Pro posun na další stránku v průvodci, klikněte na tlačítko Další. 12. Tato stránka průvodce, Volby systému, vám dává možnost překontrolovat, zda jsou hodnoty systému a jména hostu správně zadány, a překontrolovat nastavení operačního systému. Pro posun na další stránku klikněte na tlačítko Další. 13. Stránka Volby zabezpečení průvodce vám umožňuje specifikovat, kde chcete, aby se uživatel identifikoval, a jakou metodu chcete použít. Vyberte možnost Použít hodnotu ověřování v konfiguraci správce DBM serveru. Použije se metoda specifikovaná parametrem AUTHENTICATION v konfiguračním souboru vzdálené instance. Klikněte na tlačítko Dokončit pro katalogizování vzdálené databáze a zavřete průvodce. Může se objevit potvrzovací okno. Klikněte na tlačítko Test Connection, abyste se ujistili, že se můžete úspěšně připojit do databáze. Také se ujistěte, že uživatelské jméno a heslo, které jste zadali, je validní a definované na straně serveru (spíše je to tak, že parametr AUTHENTICATION Serveru je nastaven na hodnotu SERVER). Pokud je test konektivity úspěšný, máte úspěšně zakatalogovanou vzdálenou databázi. Pokud není úspěšný, vraťte se zpět
Kapitola 7 – Připojování klientů DB2
133
v průvodci a ujistěte se, zda všechna data jsou správně specifikovaná. (Klikněte na tlačítko Change pro vrácení se zpět do nastavení průvodce). 14. Otevřete Řídicí centrum a zkuste se podívat na různé tabulky v nově zakatalogované databázi. 15. Vraťte se zpět do Asistenta pro konfiguraci a zkuste katalogovat jinou databázi, tentokrát použitím možnosti Prohledat síť. Dostaňte se průvodcem stejnými kroky, kterými jsme manuálně konfigurovali konektivitu. Mějte na paměti, že v rozsáhlých sítích může být zpracování vyhledávání časově náročné.
8 Kapitola 8 – Práce s databázovými objekty Tato kapitola se zabývá databázovými objekty jako jsou schémata, tabulky, pohledy, indexy, sekvence, atd. Některé pokročilejší aplikační objekty, například triggery, uživatelsky definované funkce (UDFs) a uložené procedury jsou probírány v Kapitole 14, Úvod do vývoje aplikací v DB2. Poznámka: Pro více informací o práci s databázovými objekty se podívejte na video: http://www.channeldb2.com/video/video/show?id=807741:Video:4242
8.1 Schémata Schémata jsou pojmenované prostory, v nichž se shromažďují databázové objekty. Jsou primárně určeny k: Poskytnutí údaje, kdo je vlastníkem objektu nebo o vztahu k aplikaci Logickému seskupení souvisejících objektů Všechny databázové objekty DB2, kromě veřejných synonym, mají celé jméno složené ze dvou částí. Schéma tvoří první část jména, jak je ukázáno zde: .
Celé objektové jméno musí být unikátní. Když se připojujete do databáze a vytvoříte objekt nebo se na něj odkazujete bez specifikace schématu, použije DB2 vaše ID, kterým jste připojeni do databáze, jako hodnotu názvu schématu. Například pokud jste připojeni do databáze SAMPLE jako uživatel arfchong a vytvoříte tabulku artists použitím následujícícho příkazu CREATE TABLE: CREATE TABLE artists …
Celé jméno vytvořené tabulky bude arfchong.artists. Můžete použít příkazu set schema pro nastavení schématu pro sezení. Tabulka 8.1 ukazuje příklad. connect to sample user arfchong using mypsw select * from staff ## Hledá objekt arfchong.staff set schema db2admin select * from staff ## Hledá objekt db2admin.staff
136
Začínáme s DB2 Express-C
Tabulka 8.1 – Příklad použití příkazu set schema Jako ukázka použití schémat může být ilustrován "soutěžní systém". Řekněme, že společnost pořádá soutěž, kde účastníci musí vytvořit jejich vlastní tabulky a spustit některé SQL operace. Všem účastníkům je dáno stejné uživatelské jméno pro připojení do databáze a stejné skripty pro vytvoření tabulek, kde všechny objekty jsou nekvalifikované, což znamená, že nemají žádný název schématu. Poté, co se soutěžící přihlásí do soutěžního systému, je vygenerováno schéma, které je založené na časovém razítku po připojení. Tedy soutěžící A bude pracovat na tabulce se stejným jménem jako soutěžící B, ale s jiným schématem, a proto nedojde ke konfliktu jejich práce.
8.2 Veřejná synonyma (nebo aliasy) Nový ve verzi DB2 9.7 je koncept veřejných synonym, také známých jako veřejné aliasy. Veřejná synonyma dovolují odkazovat na objekty, aniž byste museli specifikovat schéma. Tabulka 8.2 ukazuje příklad. connect to sample user arfchong using mypsw create public synonym raul for table arfchong.staff select * from raul select * from arfchong.raul ## Chyba connect to sample user db2admin using psw select * from raul
Tabulka 8.2 – Příklad veřejného synonyma V tabulce Listing 8.2 se nejprve připojíte uživatelem arfchong a vytvoříte veřejné synonymum raul, které odkazuje na tabulku arfchong.staff. Synonymum samo o sobě nepoužívá schéma. Pokud se budete snažit schéma napsat, obdržíte chybu. Ostatní uživatelé, například db2admin v příkladu z Tabulky 8.2 také může použít veřejné synonymum raul. V případě, že není použito klíčové slovo public, je vytvořené synonymum synonymem privátním. V Tabulce 8.3 prozkoumáme stejný příklad, ale s použitím privátního synonyma. connect to sample user arfchong using mypsw create synonym raul for table arfchong.staff select * from raul select * from arfchong.raul ## OK, funguje connect to sample user db2admin using psw select * from raul ## Chyba, nemůže najít db2admin.raul select * from arfchong.raul ## OK, funguje
Tabulka 8.3 – Příklad privátního synonyma V Tabulce 8.3 můžete vidět, že pokud je synonymum privátní, nemůže na něj být odkazováno, když je připojen jiný uživatel, který neuvede schéma.
Kapitola 8 – Práce s databázovými objekty
137
8.3 Tabulky Tabulka je souhrn souvisejících dat, logicky uspořádaných do sloupců a řádků. Tabulka 8.4 níže ukazuje příklad toho, jak vytvořit tabulku pomocí příkazu CREATE TABLE. CREATE TABLE artists (artno SMALLINT name VARCHAR(50) classification CHAR(1) bio CLOB(100K) picture BLOB(2M) ) IN mytbls1
not null, with default 'abc', not null, logged, not logged compact
Tabulka 8.4 – Příklad použití příkazu CREATE TABLE V následujících částích si popíšeme hlavní prvky příkazu CREATE TABLE.
8.3.1 Datové typy Obrázek 8.1 získaný z informačního centra IBM vypisuje datové typy podporované DB2
138
Začínáme s DB2 Express-C
Obrázek 8.1 – Vestavěné datové typy DB2 Datové typy, které jsou ukázány na Obrázku 8.1, jsou detailněji popsány v dokumentaci DB2. Většina z nich je běžná nebo podobná jako ve všech relačních databázových systémech, takže si je zde nebudeme popisovat. Na druhou stranu některé datové typy, například velké objekty (LOBy), nemusí být příliš intuitivní pro nové uživatele. Datové typy velkých objektů jsou určeny pro uchování velkých znakových řetězců, velkých binárních řetězců a souborů, jak je ukázáno na Obrázku 8.2
Kapitola 8 – Práce s databázovými objekty
139
Obrázek 8.2 – Datový typ LOB Tyto velké binární objekty jsou obvykle pro zjednodušení zkracovány: binární velký objekt je BLOB, znakový velký objekt je CLOB a double byte znakový velký objekt je také znám jako DBCLOB. Obrázek 8.1 také uvádí nové datové typy, které přichází s DB2 9.7: BOOLEAN ARRAY ROW CURSOR Tyto datové typy jsou součástí databázových serverů Oraclu a jsou nyní podporovány také v DB2. Oraclovské datové typy jsou probírány trochu více do detailů později v kapitole. 8.3.1.1 Uživatelsky definované typy DB2 vám dovoluje definovat vlastní datový typ použitím uživatelsky definovaných typů (UDT). UDT mohou být rozděleny na různé typy: Rozdílný Strukturovaný Referenční Pole
140
Začínáme s DB2 Express-C Řádek Kurzor
Typy referenční, pole, řádek a kurzor jsou ve verzi DB2 9.7 nové a jsou používány s SQL PL rutinami. Uživatelsky definované rozdílné datové typy jsou založeny na vestavěných datových typech. Tyto UDT jsou užitečné, když: existuje potřeba ustanovit kontext pro proměnné existuje potřeba, aby si DB2 vynutilo datové typování přísnou kontrolou typů SQL příkazy uvedené v Tabulce 8.5 ilustrují příklad, jak a kdy použít rozdílné UDT: CREATE DISTINCT TYPE LIBRA AS INTEGER WITH COMPARISONS CREATE DISTINCT TYPE KILOGRAM AS INTEGER WITH COMPARISONS CREATE TABLE person (f_name VARCHAR(30), vaha_l LIBRA NOT NULL, vaha_k KILOGRAM NOT NULL )
Tabulka 8.5 - Příklad rozdílných datových typů V tomto příkladu jsou vytvořeny dva rozdílné UDT: LIBRA a KILOGRAM. Oba jsou vytvořeny na existujícím typu - INTEGERu. Klauzule WITH COMPARISONS, která je definovaná jako součást syntaxe, říká, že bude také vytvořena funkce se stejným jménem jako je datový typ. Tabulka person používá dva nové UDT ve sloupcích vaha_l, resp. vaha_k. Pokud nyní spustíme následující příkaz: SELECT F_NAME FROM PERSON WHERE vaha_l > vaha_k
Obdržíte chybovou hlášku, protože jsou porovnávány dva sloupce různých datových typů. Přestože vaha_l a vaha_k používá datové typy LIBRA, resp. KILOGRAM a oba datové typy byly vytvořeny založením na INTEGERu, je nemožné porovnat tyto typy. To je ale přesně, co chcete, protože v reálném životě srovnání mezi librami a kilogramy nedává žádný smysl. V dalším příkladu byste rádi porovnali sloupec vaha_l s integerem; bohužel, tyto datové typy jsou různé, a proto pokud nepoužijete konverzní funkci (CAST), obdržíte chybovou hlášku. Jak můžete vidět na příkazu níže, použili jsme konverzní funkci LIBRA(), proto je porovnání možné. Jak bylo naznačeno dříve, konverzní funkce LIBRA() byla vytvořena s UDT, když se užilo spojení WITH COMPARISONS v příkazu CREATE DISTINCT TYPE. SELECT F_NAME FROM PERSON WHERE weight_p > LIBRA(30)
Kapitola 8 – Práce s databázovými objekty
141
8.3.1.2 Datové typy Oracle databázového serveru Databázovými servery DB2 jsou nyní podporovány následující datové typy Oracle databází: NUMBER, VARCHAR2, TIMESTAMP(n), “DATE”, BOOLEAN, INDEX BY, VARRAY, Row Type, Ref Cursor. Abyste s nimi mohli pracovat, potřebujete nejprve povolit proměnnou v registrech DB2_COMPATIBILITY_VECTOR, například: db2set DB2_COMPATIBILITY_VECTOR=FF db2stop db2start
Jakmile je tato proměnná v registru povolena, nové databáze budou schopné podporovat tyto datové typy. Některé z těchto typů můžou být použity jen v případě kontextu SQL PL.. Poznámka: Pokud používáte edici DB2, která podporuje možnosti SQL kompatibility (popsáno v Kapitole 2), můžete také použít tyto datové typy tam, kde je použito PL/SQL. Pokud je to tento případ, hodnota pro nastavení proměnné DB2_COMPATIBILITY_VECTOR v registrech by měla být 'FFF' místo 'FF', jak bylo ukázáno na příklad výše.
8.3.1.3 Implicitní konverze nebo slabá typová kontrola Mnoho dynamických jazyků, jako např. Ruby on Rails nebo PHP vám dovolují implicitně používat konverzi. To byl problém v DB2, protože DB2 vyžadovalo silnou typovou kontrolu. S DB2 verze 9.7 se pravidla zmírnila a implicitní konverze nebo slabá typová kontrola jsou povoleny. To znamená, že například můžete přiřadit nebo porovnávat řetězce a číselné typy, jak je ukázáno zde: create table t1 (col1 int) select * from t1 where col1 = '42'
V tomto příkladu řetězec '42' může být porovnáván s integer sloupcem col1. Navíc ve verzi DB2 9.7 je vám povoleno specifikovat netypové parametrové značky a netypové NULLy ve více situacích. Minule jste museli explicitně užít konverzi na daný datový typ. Například tento příkaz nyní funguje: select ?, NULL, myUDF(?, NULL) from t1
8.3.1.4 Hodnoty NULL Hodnota null reprezentuje neznámý stav. Příkaz CREATE TABLE může definovat sloupec použitím klauzule NOT NULL, aby se zajistilo, že sloupec obsahuje hodnoty známých dat. Můžete také specifikovat defaultní hodnotu sloupce, pokud je deklarován NOT NULL. Další příkaz ukazuje příklady tohoto chování: CREATE TABLE staff (
142
Začínáme s DB2 Express-C ID NAME DEPT JOB YEARS SALARY COMM )
SMALLINT NOT NULL, VARCHAR(9), SMALLINT NOT NULL with default 10, CHAR(5), SMALLINT, DECIMAL(7,2), DECIMAL(7,2) with default 15
V tomto příkladu jsou ID a DEPT sloupce definovány jako NOT NULL. V případě, že žádná hodnota není zadána, DEPT sloupec obsahuje defaultní hodnotu 10.
8.3.2 Identifikační sloupce Identifikační sloupce jsou číselné sloupce, které automaticky generují unikátní číslo pro každý přidaný řádek. Může existovat jen jeden identifikační sloupce pro tabulku. Jsou dva způsoby, jak vygenerovat hodnotu identifikačního sloupce, závisející na tom, jak byl definován: Generovaný vždy: hodnoty jsou vždy generovány DB2. Aplikacím není povoleno dodání explicitní hodnoty. Generovaný defaultně: hodnoty mohou být explicitně zadány aplikací respektive pokud není zadaná žádná hodnota, ji vygeneruje ji DB2. DB2 nemůže garantovat jedinečnost. Existence této možnosti je opodstatněna užitím při propagacích, pro vyprazdňování a znovunačítání tabulek. Podívejme se na následující příklad: CREATE TABLE subscriber( subscriberID INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 100 INCREMENT BY 100), firstname VARCHAR(50), lastname VARCHAR(50) )
V příkladu je sloupec subscriberID definován jako INTEGER, který je identifikačním sloupcem a je vždy generován. Počáteční generovaná hodnota je 100 a přírůstkem je také 100.
8.3.3 Sekvenční objekty Přestože jsou sekvenční objekty nezávislými na tabulkách, jsou v této sekci zmíněny, protože pracují podobně jako identifikační sloupce. Rozdílem je, že sekvenční objekty generují unikátní čísla napříč databází, kdežto identifikační sloupce generují unikátní čísla uvnitř tabulky. Následující příkazy vám poskytnou ukázku: CREATE TABLE t1 (salary int) CREATE SEQUENCE myseq
Kapitola 8 – Práce s databázovými objekty
143
START WITH 10 INCREMENT BY 1 NO CYCLE INSERT INTO t1 VALUES (nextval for myseq) INSERT INTO t1 VALUES (nextval for myseq) INSERT INTO t1 VALUES (nextval for myseq) SELECT * FROM t1 SALARY ----------10 11 12 3 record(s) selected. SELECT prevval for myseq FROM sysibm.sysdummy1 1 ----------12 1 record(s) selected
Tabulka 8.6 - Příklady sekvencí PREVVAL poskytuje aktuální hodnotu sekvence a NEXTVAL poskytuje následující hodnotu. Příklad výše také využívá SYSIBM.SYSDUMMY1, což je systémová katalogová tabulka, která obsahuje jeden sloupce a jeden řádek. Může být použita v situacích, kdy dotaz vyžaduje jedinou hodnotu ve výstupu. Systémové katalogové tabulky jsou popsány v další části.
8.3.4 Systémové katalogové tabulky Každá databáze má své vlastní systémové katalogové tabulky a pohledy. Ukládají metadata o databázových objektech. Pokud se tyto systémové tabulky poškodí, zůstane vaše databáze nepoužitelná. Na tyto tabulky se můžete dotazovat jako na jakékoliv normální tabulky v databázích. Pro identifikaci systémových katalogových tabulek jsou použita tři schémata: SYSIBM: základní tabulky, optimalizované pro DB2 užití SYSCAT: pohledy založené na tabulkách SYSIBM optimalizované pro jednoduché použití SYSSTAT: databázová statistika Následuje několik příkladů katalogových pohledů:
144
Začínáme s DB2 Express-C SYSCAT.TABLES SYSCAT.INDEXES SYSCAT.COLUMNS SYSCAT.FUNCTIONS SYSCAT.PROCEDURES
8.3.5 Deklarované globální dočasné tabulky (DGTTs) Deklarované dočasné tabulky jsou tabulky vytvořené v paměti a jsou používány aplikacemi a pokud aplikace skončí, jsou odebrány. Tyto tabulky mohou být přístupné jen aplikaci, která je vytvořila a neexistují v žádných DB2 katalogových tabulkách. Přístup k těmto tabulkám disponuje velice dobrý výkonem, protože neexistuje spor s katalogem, neřeší se uzamykaní řádků, defaultně není zapnuto logování (logování není povinné) a nekontroluje se oprávnění. Jakýkoliv standardní index může být vytvořen v dočasné tabulce, existuje tedy indexová podpora pro tyto tabulky. Můžete nad nimi také spustit RUNSTATS. Deklarované dočasné tabulky se nacházejí uvnitř uživatelského dočasného tabulkového prostoru, který musí být definován dříve, než se vytvoří jakékoliv dočasné tabulky. Příkazy v Tabulce 8.7 ukazují příklad, jak se vytváří tři deklarované dočasné tabulky: CREATE USER TEMPORARY TABLESPACE apptemps MANAGED BY SYSTEM USING ('apptemps'); DECLARE GLOBAL TEMPORARY TABLE temployees LIKE employee NOT LOGGED; DECLARE GLOBAL TEMPORARY TABLE tempdept (deptid CHAR(6), deptname CHAR(20)) ON COMMIT DELETE ROWS NOT LOGGED; DECLARE GLOBAL TEMPORARY TABLE tempprojects AS ( fullselect ) DEFINITION ONLY ON COMMIT PRESERVE ROWS NOT LOGGED WITH REPLACE IN TABLESPACE apptemps;
Kód 8.7 - Práce s DGTT Pokud je vytvořena deklarovaná dočasná tabulka, její schéma je SESSION; toto schéma musí být uvedeno, pokud odkazujete na DGTT. Uživatelské ID použité k vytvoření dočasné tabulky bude mít všechna práva v tabulce. Každá aplikace, která vytvoří dočasnou tabulku, bude mít svou vlastní nezávislou kopii, jak je ukázáno na Obrázku 8.3.
Kapitola 8 – Práce s databázovými objekty
145
Obrázek 8.3 – Rozsah deklarovaných globálních dočasných tabulek Kód 8.8 ilustruje rozsah limitů deklarovaných globálních dočasných tabulek. Předpokládá se, že uživatelské dočasné tabulkové prostory již byly vytvořeny. Z příkazového okna DB2 #1: db2 connect to sample db2 declare global temporary table mydgtt (col1 int, col2 varchar(10)) on commit preserve rows db2 insert into session.mydgtt values (1,'hello1'),(2,'hello2'), (3,'hello3') db2 select * from session.mydgtt COL1 ----------1 2 3 3 record(s)
COL2 ---------hello1 hello2 hello3 selected.
Z příkazového okna DB2 #2: db2 connect to sample db2 select * from session.mydgtt SQL0204N "SESSION.MYDGTT" is an undefined name.
SQLSTATE=42704
Kód 8.8 - Pracování s DGTT - detail Jak můžete vidět v Kódu 8.8 - pokud se pokusíte užít SESSION.MYDGTT v druhém sezení (příkazové okno DB2 #2), dostanete chybovou hlášku, protože DGTT nebyla v tomto sezení definovaná. Zapamatujte si, že definice DGTT používá ON COMMIT PRESERVE
146
Začínáme s DB2 Express-C
ROWS klauzuli, protože práce v Příkazovém oknu DB2 bude automaticky po každém příkazu commitovaná.
8.3.6 Vytvářecí globální dočasné tabulky (CGTT) Pokud vám DGTT umožní vytvořit dočasnou tabulku, definice tabulky nemůže být sdílena napříč různými připojeními a sezeními. Pokaždé, když je navázáno sezení, musí se spustit příkaz DECLARE GLOBAL TEMPORARY TABLE. Na druhou stranu v případě vytvářecích globálních dočasných tabulek (CGTT) je nutné pouze jednorázové vytvoření dočasných tabulek, které je následně trvale uloženo v DB2 katalogu. To znamená, že další připojení mohou jednoduše použít tabulku bez toho, aniž by ji musely znovu také vytvořit. Ačkoliv může být tabulková struktura využita okamžitě, data pro každé připojení jsou na sobě vzájemně nezávislá a zmizí, pokud se připojení uzavře. Například podívejme se na Kód 8.9. Předpokládáme, že uživatelský dočasný tabulkový prostor již byl vytvořen. Z Příkazového okna DB2 #1: db2 connect to sample db2 create global temporary table mycgtt (col1 int, col2 varchar(10)) on commit preserve rows db2 insert into mycgtt values (1,'hello1'),(2,'hello2'), (3,'hello3') db2 select * from mycgtt COL1 ----------1 2 3 3 record(s)
COL2 ---------hello1 hello2 hello3 selected.
Z Příkazového okna DB2 #2: db2 connect to sample db2 select * from mycgtt COL1 COL2 ----------- ---------0 record(s) selected.
Kód 8.9 - Pracování s CGTT - detail V Kódu 8.9 vidíme, že uvnitř Příkazového okna DB2 #2 (další sezení nebo připojení) není nutné vytvořit CGTT znovu, můžete na ni jednoduše odkázat; nicméně žádná data nejsou vrácena, protože data byla specifická pro první sezení.
8.4 Pohledy Pohled je znázorněním dat v tabulce. Data pro pohledy nejsou ukládána odděleně, ale jsou získána, když je vyvolán pohled. Vnořené pohledy, což znamená, že pohled je vytvořen na
Kapitola 8 – Práce s databázovými objekty
147
základě dalšího pohledu, jsou podporovány. Všechny informace pohledů jsou uchovány v následujících katalogových pohledech DB2: SYSCAT.VIEWS, SYSCAT.VIEWDEP a SYSCAT.TABLES. Kód 8.10 ukazuje příklad, jak vytvořit a použít pohled. CONNECT TO MYDB1; CREATE VIEW MYVIEW1 AS SELECT ARTNO, NAME, CLASSIFICATION FROM ARTISTS; SELECT * FROM MYVIEW1; Output: ARTNO -----10 20 30 ...
NAME ------------HUMAN MY PLANT THE STORE
CLASSIFICATION -------------A C E
Kód 8.10 - Práce s pohledy
8.5 Indexy Index je seřazená sada klíčů, které vedou k řádku v tabulce. Index bere v potaz jedinečnost a také vylepšuje výkon. Některé charakteristiky, které definují indexy: Index může být řazen vzestupně nebo sestupně Indexové klíče mohou být unikátní nebo neunikátní Pro index může být použito několik sloupců (tomu se říká složený index) Pokud jsou index a fyzická data klastrovány v podobné indexové sekvenci, jsou klastrovaným indexem Například: CREATE UNIQUE INDEX artno_ix ON artists (artno)
8.5.1 Poradce s návrhem Poradce s návrhem je excelentním nástrojem, který vám poradí optimální návrh vaší databáze pro určité SQL pracovní zatížení. Poradce s návrhem vám může pomoci s navrhováním vašich indexů, Tabulkami materializovaného obsahu (MQTs), Multidimenzionálním dělením do klastrů (MDC) a Změnami dělení tabulek. Poradce s návrhem spustíte z Řídicího centra; klikněte pravým tlačítkem na databázi a vyberte Poradce s návrhem, jak je ukázáno na Obrázku 8.4.
148
Začínáme s DB2 Express-C
Obrázek 8.4 – Vyvolání Poradce s návrhem z Řídicího centra Obrázek 8.5 ukazuje Poradce s návrhem. Pro získání výsledného doporučení návrhu následujte kroky tohoto průvodce.
Obrázek 8.5 – Poradce s návrhem
Kapitola 8 – Práce s databázovými objekty
149
8.6 Referenční integrita Referenční integrita umožňuje vaší databázi spravovat vztahy mezi tabulkami. Můžete ustanovit typ vztahu potomek-rodič mezi tabulkami, jak je ukázáno na Obrázku 8.6. Na obrázku jsou dvě tabulky, DEPARTMENT a EMPLOYEE, která odkazuje na číslo oddělení. WORKDEPT sloupec v tabulce EMPLOYEE obsahuje čísla oddělení, která existují v tabulce DEPARTMENT. Je to proto, že je v tomto příkladu tabulka DEPARTMENT tabulkou rodičovskou a tabulka EMPLOYEE je potomkem = závislou tabulkou. Obrázek také ukazuje příkaz CREATE TABLE pro tabulku EMPLOYEE potřebný pro ustanovení vztahu.
Obrázek 8.6 – Ukázka referenční integrity mezi tabulkami V referenční integritě se často používají koncepty uvedené v Tabulce 8.1. Koncept
Popis
Rodičovská tabulka
Kontrolní datová tabulka, ve které existuje rodičovský klíč
Závislá tabulka
Tabulka závislá na datech z rodičovské tabulky, obsahuje také cizí klíč. Pro řádek, který existuje v závislé tabulce musí existovat související řádek v tabulce rodičovské.
Primární klíč
Definuje rodičovský klíč v rodičovské tabulce. Nemůže obsahovat NULL hodnoty a hodnoty musí být unikátní. Primární klíč se skládá z jednoho nebo více sloupců v tabulce.
Cizí klíč
Odkazuje na primární klíč v rodičovské tabulce
150
Začínáme s DB2 Express-C
Tabulka 8.1 - Klíčové koncepty referenční integrity Data v tabulkách mohou souviset s daty v jedné nebo více tabulkách referenční integritou. Omezení mohou být také vložena do datových hodnot, mohou se tak přizpůsobit určitému účelu nebo roli. Například pokud sloupec v tabulce ukládá pohlaví člověka, mohou omezení vynutit, že jedinými povolenými hodnotami budou “M” pro muže a “F” pro ženy.
8.7 Vývoj schématu Když potřebuje obchod změnu, musí se také měnit podpůrná informační technologie (IT) a systémy. V databázovém světě to tedy znamená, že musí být vytvořeny nové tabulky, již existující musí být smazány nebo modifikovány, logika triggerů se musí změnit, atd. Přestože tyto změny vypadají velice jednoduše na zrealizování, v reálu to může být velice náročné a komplexní. Jsou zapotřebí dlouhá výpadková okna, musí být spuštěny spletité a riskatní procedury. Jeden z důvodů obtížnosti realizace změn byl ten, že DB2 požadovala, aby všechny objekty byly konzistentní vždy, za všech podmínek. Proto akce, které ovlivňovaly objekty, závislé na měněných objektech, byly buď nepovolené nebo způsobily, že závislé objekty musely být smazány. Obrázek 8.7 znázorňuje ukázkový scénář.
Obrázek 8.7 – Ukázkový scénář evoluce schématu V příkladu na Obrázku 8.7 potřebuje definice View1 změnu, což nezáleží jen na TableQ1 s finančními informacemi o společnosti za první kvartál, ale i na TableQ1 a TableQ2 s prvním a druhým kvartálem. Běžně byste smazali View1 a vytvořili byste jeho novou definici; každopádně View2 je závislý na View1. DB2 v dřívějších verzích, než je 9.7, by vám nedovolilo smazat View1, protože je závislý na View2. Museli byste nejprve smazat View2, abyste mohli smazat View1 a pak zrekonstruovat oba pohledy. S DB2 9.7 se pravidla zjemnila. Nyní jsou změny, které ovlivňují závislé objekty povoleny. Závislý objekt (View2 v příkladu) musí být znovu platný, ale to se děje automaticky. Proces je známý jako automatická revalidace. Pro zapínání a vypínání automatické revalidace a pro určení, kdy revalidace nastane, je použit parametr db cfg AUTO_REVAL. Například pokud nastavíte tento parametr na DEFERRED_FORCE, revalidace bude odložena do doby, než je k neplatnému objektu nebo závislým objektům přistoupeno. Příkazy CREATE budou povoleny na závislých objektech, které zatím neexistují.
Kapitola 8 – Práce s databázovými objekty
151
Ostatní změny, které ovlivňují závislostní model obsahují implementaci prvků jako CREATE OR REPLACE syntaxi pro pohledy, funkce, procedury, triggery, aliasy, atd. Například: create or replace procedure p1 begin ... end
Pokud objekt (například procedura P1) při použití této syntaxe neexistuje, bude vytvořen. Pokud již existoval, bude nahrazen - a to je tím, co je důležité na závislosti objektů. Pokud je P1 nahrazena, objekty závislé na P1 jsou automaticky překontrolovány. Podobná situace nastane pro novou funkci jako RENAME COLUMN a pro změnu datového typu s ALTER COLUMN, která byla také vylepšena o větší podporu změn datových typů. Související koncept, známý jako měkká invalidace, umožňuje uživatelům smazat objekt, i když ostatní běžící transakce ho používají. Jakýmkoliv novým transakcím bude odepřen přístup do mazaného objektu.
8.8 Shrnutí V této kapitole jsme se podívali na databázové objekty v DB2: co jsou, jak se vytvářejí a jak se používají. Představili jsme databázové schéma a porovnali jsme jej s novým veřejným synonymem, stejně jako jsme porovnávali veřejná a privátní synonyma. Dál jsme se do hloubky bavili o tabulkách a jejich prvcích: datových typech (vestavěný a uživatelsky definovaný), identifikačních sloupcích, sekvencích objektů, a globálních dočasných tabulkách. Následovaly informace o pohledech, indexech a použití grafického nástroje Poradce s návrhem pro vylepšení přístupnosti a dostupnosti dat uvnitř tabulky. Nakonec jsme prozkoumali referenční integritu, abychom mohli definovat vztahy mezi tabulkami. Také jsme se zabývali novým konceptem schématu, který umožňuje měnit objekty bez zbytečných komplikací.
8.9 Cvičení Dosud jste pro ilustraci postupů používali existující tabulky v databázi SAMPLE. Časem budete vytvářet vlastní tabulky v databázi. V tomto cvičení použijete Průvodce vytvořením tabulky pro vytvoření dvou nových tabulek v databázi SAMPLE. Postup 1. Spusťte Průvodce vytvořením tabulky, jak bylo ukázáno v kapitole. (Řídicí centrum → Všechny databáze → SAMPLE → (pravé kliknutí) Tabulky → Vytvořit …) 2. Definujte název tabulky, definice sloupců a jakékoliv omezení. Tabulka bude použita pro uložení informací o dodávkách úřadu, použitého v projektu databáze SAMPLE. Pokaždé, když se materiál nakoupí, přidá se do tabulky řádek. Tabulka bude mít šest sloupců: - product_id:
unikátní identifikátor nakupované věci
- description:
popis věci
152
Začínáme s DB2 Express-C - quantity:
zakoupené množství
- cost:
cena za předmět
- image:
obrázek předmětu (pokud je k dispozici)
- project_num:
projekt, pro který se předmět kupoval
3. Na první stránce průvodce v poli Schéma tabulky použijte uživatelské ID, na které jste aktuálně přihlášeni a zadejte následující název tabulky: SUPPLIES. Můžete také nepovinně zadat komentář. Klikněte na tlačítko Další, tím se dostanete na další stránku průvodce. 4. Z této stránky můžete přidávat sloupce tabulky. Klikněte na tlačítko Přidat… pro přidání sloupce.
5. Zadejte jako název sloupce product_id a vyberte datový typ: INTEGER. Odškrtněte S povolenou hodnotou null, a klikněte na tlačítko Použít pro definování sloupce. 6. Pro zbývající sloupce v tabulce opakujte tento krok použitím definic, které jsou ukázány níže. Jakmile jsou všechny sloupce přidány (Použity), klikněte na tlačítko OK a seznam sloupců, které jste právě vytvořili, se objeví v souhrnu. Klikněte na tlačítko Další pro pokračování na další stránku průvodce. Název sloupce
Atributy
product_id (completed)
INTEGER, NOT NULL
description
VARCHAR, délka 40, NOT NULL
Kapitola 8 – Práce s databázovými objekty
153
quantity
INTEGER, NOT NULL
cost
DECIMAL, před des. čárkou 7, des. míst 2, NOT NULL
image
BLOB, 1MB, NULLABLE, NOT LOGGED
project_num
CHAR, délka 6, NOT NULL
Poznámka: Při deklaraci sloupce LOB může byt použita volba NOT LOGGED. Je to povinnost pro sloupce větší než 1 GB. Pro LOBy větší než 10 MB je to také doporučeno, jelikož změny velkých sloupců mohou lehce zaplnit logovací soubor. I když je použito NOT LOGGED, změny na LOB souboru během transakce mohou být stále vráceny zpět. Také si všimněte, že sloupec s obrázkem je jako jediný definován jako NULLABLE. Proč si myslíte, že sloupec byl definován takto? 7. V tomto bodě jsou všechny povinné informace pro vytváření tabulek zadány. Tím, že ostatní panely průvodce přeskočíte, vyberete defaultní hodnoty. Vždy můžete přidat klíče a omezení i poté, co je tabulka vytvořena. 8. Přidejte podmínky do tabulky, chceme omezit sloupec quantity. Na stránce průvodce Podmínky klikněte na tlačítko Přidat. V poli Název kontroly zadejte: valid_quantities. V poli Kontrolní podmínka zadejte: quantity > 0 Klikněte na tlačítko OK. Měli byste vidět souhrn vaší právě přidané podmínky, kterou jste zadali na stránce Podmínky. Klikněte na tlačítko Další pro pokračování na další straně průvodce. 9. Můžete pokračovat s průvodcem a měnit další parametry tabulky. Můžete také přeskočit na stránku Souhrn nebo jednoduše klikněte na tlačítko Dokončit pro vytvoření tabulky. 10. Z Řídicího centra klikněte na adresář Tabulky pod databází SAMPLE v panelu Zobrazení objektu. Tabulka, kterou jste právě vytvořili, by se nyní měla objevit v seznamu. Abyste viděli provedené změny, může být nutné obnovit Řídicí centrum. 11. Nyní otestujme implicitní konverzi užitím tabulky STAFF v databázi SAMPLE. Zkuste následující příkaz: C:\>db2 describe table staff
Zjistíte, že ID sloupec je definován jako SMALLINT C:\>db2 select * from staff where id = '350' → Všimněte si, že '350' je
řetězec
C:\>db2 select * from staff where id = 350 → Všimněte si, že 350 je
číslo
V obou dvou příkladech by měl výstup vypadat takto:
154
Začínáme s DB2 Express-C ID NAME DEPT JOB YEARS SALARY COMM ------ --------- ------ ----- ------ --------- --------350 Gafney 84 Clerk 5 43030.50 188.00
V prvním příkazu SELECT se použilo '350' jako textový řetězec, DB2 vykonává implicitní konverzi na číslo (SMALLINT).
9 Kapitola 9 – Nástroje pro přesuny dat Nástroje nebo příkazy popsané v této kapitole jsou používány pro přesun dat v jedné databázi nebo napříč databázemi na stejných či různých platformách. Obrázek 9.1 vám ukazuje přehled nástrojů pro přesun dat.
Obrázek 9.1 – Nástroje pro přesuny dat Na Obrázku 9.1 jsou znázorněny dvě databáze, databáze A a B. Použitím utility EXPORT je možné exportovat data z tabulky do souboru. Soubor může být v jakémkoliv z těchto formátů: ASC = ASCII DEL = oddělené ASCII WSF = formát sešitu (Lotus Worksheet File) IXF = Integrated Exchange Format ASC a DEL jsou textové soubory, které mohou být otevřeny a prohlíženy v libovolném textovém editoru. WSF je formátem, kterým se mohou data přesouvat do tabulkových procesorů, jako je například Excel nebo Lotus® 1-2-3. IXF je formát, který neobsahuje jen data, ale také Datový definiční jazyk (DDL) tabulky. IXF je vhodným formátem pro rekonstrukci tabulek – můžete využít přímo souboru s formátovaným exportem IXF, což u ostatních formátů není možné. Jakmile jsou data vyexportována do souboru, lze využít utilitu IMPORT pro import dat ze souboru do další tabulky. Před importováním formátů ASC, DEL a WSF musí tabulka existovat, nikolik však při použití formátu IXF. Další metodou je nahrát data do tabulky pomocí utility LOAD. LOAD utilita je rychlejší a ukládá přímo do databázových stránek bez další interakce s DB2 enginem, avšak tato metoda neověřuje podmínky a nespouští triggery. Pro garanci konzistence dat nahrávaných pomocí utility LOAD, je následně často užíván příkaz SET INTEGRITY.
156
Začínáme s DB2 Express-C
Následujíci sekce obsahuje detailnější popis utilit EXPORT, IMPORT a LOAD. Poznámka: Pro více informací o práci s nástroji pro přesun dat se podívejte na toto video: http://www.channeldb2.com/video/video/show?id=807741:Video:4262
9.1 Utilita EXPORT Utilita EXPORT je používána pro extrahování dat z tabulky do souboru, jak již bylo řečeno dříve. V pozadí toho příkazu je ve skutečnosti operace SELECT jazyka SQL. Následující příklad exportuje do souboru employee.ixf v IXF formátu 10 řádků z tabulky employee. EXPORT TO employee.ixf OF IXF SELECT * FROM employee FETCH FIRST 10 ROWS ONLY
Doporučujeme vám otestovat tento příklad. Tabulka zaměstnanců je součástí databáze SAMPLE, takže nejprve se budete potřebovat připojit do této databáze, což bylo náplní minulé kapitoly. Pokud pro svou práci preferujete grafické nástroje, utilita EXPORT může být také spuštěna z Řídicího centra, jak je ukázáno na Obrázku 9.2.
Obrázek 9.2 – Spouštění dialogu pro EXPORT tabulky Jak je znázorněno na obrázku, nejprve kliknutím vyberete tabulku zaměstnanců, a pak pravým tlačítkem z pop-up menu vyberete možnost Exportovat. Po vybrání této možnosti se zobrazí průvodce. K dokončení operace jednoduše následujte kroky průvodce.
Kapitola 9 – Nástroje pro přesuny dat
157
9.2 Utilita IMPORT Jak již bylo uvedeno dříve, utilita IMPORT je používána pro nahrávání dat ze souboru do tabulky. V pozadí této utility je ve skutečnosti operace SQL INSERT. Po spuštění operace INSERT jsou zaktivovány všechny triggery, všechny podmínky jsou okamžitě vynucovány a využívají se fondy vyrovnávací paměti. Následující příklad nahraje všechna data ze souboru employee.ixf v IXF formátu do tabulky employee_copy. Doporučujeme vám vyzkoušet si tento příklad, avšak nejprve je třeba spustit utilitu EXPORT popsanou v předchozí sekci. IMPORT FROM employee.ixf OF IXF REPLACE_CREATE INTO employee_copy
Možnost REPLACE_CREATE je jednou z mnoha voleb, kterou je možno zadat v utilitě IMPORT. Tato operace nahrazuje veškerý předešlý obsah tabulky employee_copy, tedy obsah existující před spuštěním utility IMPORT. Pokud tabulka neexistuje, bude vytvořena, a poté se do ní vloží data, Pokud upřednostňujete práci z Řídicího centra, utilitu IMPORT můžete spustit označením tabulky, kliknutím pravého tlačítka myši a vybráním možnosti Import, jak je vidět na Obrázku 9.3
Obrázek 9.3 – Spuštění dialogového okna pro import
9.3 Utilita LOAD Utilita LOAD je rychlejší cestou, jak nahrát data ze souboru do tabulky. Jak již bylo probíráno dříve, utilita LOAD nevužívá DB2 engine, proto nejsou aktivovány triggery. Také
158
Začínáme s DB2 Express-C
nejsou použity fondy vyrovnávací paměti a podmínky mohou být vynucovány, ale jen ve zvláštním kroku. Na druhou stranu je operace LOAD rychlejší než IMPORT, protože přistupuje k nahrávání dat nízkoúrovňově, přímým zápisem dat na disk. Pracuje ve třech fázích: LOAD, BUILD a DELETE. Následující příklad nahraje všechna data ze souboru employee.ixf ve formátu IXF do tabulky employee_copy. Možnost REPLACE je jednou z mnoha voleb, které jsou k dispozici u utility LOAD. V tomto případě je použita pro nahrazení celého obsahu tabulky employee_copy. LOAD FROM employee.ixf OF IXF REPLACE INTO employee_copy
Po spuštění tohoto příkazu se může tabulkový prostor vašich tabulek ocitnout ve stavu CHECK PENDING. To znamená, že ke zkontrolováni vašich dat musíte spustit příkaz SET INTEGRITY. Následující příklad vám ukáže, jak: SET INTEGRITY FOR employee_copy ALL IMMEDIATE UNCHECKED
Pokud upřednostňujete práci v Řídicím centru, můžete spustit utility LOAD a SET INTEGRITY podle Obrázku 9.4 , resp. 9.5.
Obrázek 9.4 – Spuštění utility LOAD
Kapitola 9 – Nástroje pro přesuny dat
159
Obrázek 9.5 – Spuštění průvodce Nastavením integrity
9.4 Utilita db2move Utility EXPORT, IMPORT a LOAD pracují v jednom okamžiku na jedné tabulce. Přestože můžete napsat skript pro generování výše uvedených příkazů pro každou tabulku v databázi, přesně tuto práci za vás může udělat další utilita nazvaná db2move. Utilita db2move může pracovat jen se soubory IXF, názvy souborů jsou generovány automaticky. Níže uvedený příklad ukazuje, jak spustit db2move s možnostmi export a import s použitím databáze SAMPLE. db2move sample export db2move sample import
Řídicí centrum nemá žádnou grafickou nástavbu pro db2move.
9.5 Utilita db2look Utility EXPORT, IMPORT, LOAD a db2move vám umožňují přenášet data z jedné tabulky do druhé, ať už v jedné databázi nebo napříč několika databázemi. Utilita db2look se používá pro extrahování DDL příkazů, databázové statistiky a charakteristik tabulkového prostoru pro databáze a jejich uložení do souboru skriptu, který později může být spuštěn
160
Začínáme s DB2 Express-C
na jakémkoliv systému. Například pokud chcete naklonovat databázi z DB2 serveru, který běží na Linuxu, na databázový server DB2, který běží na Windows, měli byste nejprve spustit utilitu db2look na serveru DB2 v Linuxu, abyste získali strukturu databáze a uložili tuto strukturu do skriptového souboru. Pak překopírujte tento skriptový soubor na DB2 Windows server a spusťte skript pro vytvoření klonované databáze. Dalším krokem je spuštění utility db2move s exportní možností na serveru v Linuxu a následné kopírování všech vygenerovaných souborů na server DB2 ve Windows. Pak následuje spuštění db2move s možností import nebo load. Tímto je vaše databáze zcela naklonována z jednoho serveru na druhý, při rozdílných platformách. Výše uvedený scénář je vhodný, pokud potřebujete pracovat s databázemi na různých platformách - například na Linuxu a ve Windows. Pokud jsou oba servery provozovány na stejné platformě, použijete raději příkazy pro zálohu a zotavení, což zprůhlední a zjednodušší celý proces. Příkazy backup a restore jsou probírány detailněji o kapitolu dále. Následující příklad ukazuje extrahování definic tabulkových prostorů, fondů vyrovnávací paměti a DDL příkazů z databáze SAMPLE a jejich uložení do souboru sample.ddl. Doporučujeme vám spustit následující příkaz, a poté zobrazit jeho výstupný textový soubor sample.ddl.
Příkaz db2look má příliš parametrů na to, abychom je v této knize popisovali, avšak pomocí –h získáte stručný popis dostupných možností: db2look -h Utilita db2look může být také spuštěna z Řídicího centra, viz Obrázek 9.6
Kapitola 9 – Nástroje pro přesuny dat
161
Obrázek 9.6 - Extrahování DDL z Řídicího centra Na Obrázku 9.6 vyberte databázi, ze které chcete získat DDL, klikněte na ni pravým tlačítkem a vyberte Generovat příkaz DDL. Objeví se okno Generovat příkaz DDL, které vám ukazuje některé možnosti, jak je vidět na Obrázku 9.7.
Obrázek 9.7 - Extrahování DDL z Řídicího centra
Začínáme s DB2 Express-C
162
9.6 Shrnutí V této kapitole jsme probrali různé funkce pro export a import v DB2. Začali jsme pohledem na různé možnosti exportních formátů (ASC, DEL, WSF a IXF), pak jsme se posunuli na hlubší zkoumání utility EXPORT. Následovalo probírání utilit IMPORT a LOAD společně s příkazem SET INTEGRITY, který se používá po příkazu LOAD. Příkaz db2move vám poskytuje možnosti, jak zjednodušit exportní a importní procesy. Více komplexnější příkaz, db2look, vám umožňuje extrahovat a uložit veškeré databázové prvky, které jsou potřebné pro nezávislé znovuvytvoření databáze.
9.7 Příklady Pokud naklonujete databázi, vaším cílem by mělo být znovuvytvoření databáze způsobem, který je přímočarý a umožňuje opakování. To se obyčejně děje použitím SQL skriptů, které mohou být okamžitě spuštěny poté, co je DB2 nainstalována. V tomto příkladu extrahujete definice objektu z databáze EXPRESS (vytvořené v předešlých cvičeních) použitím Řídicího centra. Postup 1. Otevřete Řídicí centrum. 2. Klikněte pravým tlačítkem na databázi EXPRESS a vyberte Generovat příkaz DDL z nabídky menu. Spustíte tak dialogové okno Generovat příkaz DDL. 3. V okně Generovat příkaz DDL specifikujte možnosti generovaného DDL, jak je ukázáno níže. Pokud jste vytvořili ve vašem prostředí další objekty, jako např. tabulkové prostory, fondy vyrovnávacích pamětí, atd., měli byste je zde vybrat. Pokud jste žádný z těchto typů objektů nevytvořili, odškrtněte box. Databázová statistika není obsažena, protože produkční prostředí bude nejspíše obsahovat jiný soubor statistik, než prostředí vývojové. Podobně je to s konfiguračními parametry, budou spíše rozdílné. Pokud je všechno ve vašem vlastním prostředí zkonfigurováno přesně tak, jak bude nasazováno, můžete do výběru zahrnout další možnosti.
Kapitola 9 – Nástroje pro přesuny dat
163
4. Přesuňte se na záložku Objekt. Můžete zde specifikovat objekty, pro které chcete generovat DDL. Vyberte uživatele a schéma, které jste používali při vytváření všech vašich objektů, a vygenerujte DDL pro všechny objekty v tomto schématu. Pro spuštění generování DDL klikněte na tlačítko Generovat.
5. Shrnutí výsledného DDL. Výsledkem předchozího kroku je skript se všemi SQL příkazy pro vybrané objekty. Nyní uspořádáte tento skript do logických skupin.
164
Začínáme s DB2 Express-C 6. Vytvořte adresář C:\express v souborovém systému a uložte vygenerovaný DDL soubor do tohoto nového adresáře pod názvem schema.ddl. (Klikněte na tlačítko Uložit)
7. Otevřete nově uložený soubor v Editoru příkazů. (Tip: V Příkazovém editoru, vyberte Soubor → Otevřít) 8. Přestože jsme opravdu chtěli jen DDL pro tabulky, zjistíte, že jsou obsaženy i ostatní databázové objekty. Přesuňte všechny příkazy CREATE TRIGGER do odděleného souboru, který nazvěte triggers.ddl. I když jsme vytvořili pouze jeden trigger, obecně je lepší tyto objekty oddělovat. 9. Nyní doporučujeme také vyjmout všechny: CONNECT TO příkazy DISCONNECT příkazy V tomto bodě byste měli mít tedy dva skripty: C:\express\schema.ddl, který obsahuje DDL pro tabulky, pohledy, indexy a podmínky. C:\express\triggers.ddl, který obsahuje DDL pro triggery 10. Pročistěte skript pro nasazení: vyjměte nepotřebné komentáře (např. -- CONNECT TO…) Oddělte funkce a procedury do jejich vlatních souborů (užitečné, pokud je zde hodně funkcí a procedur). Můžete je také chtít seskupit podle funkce nebo aplikace (např. billing.ddl, math.ddl, stringfunc.ddl, atd.) 11. Možná jste si všimli speciálního znaku, který slouží pro oddělování konců triggerů, funkcí a procedur (@). Je nezbytné oddělit konec příkazu CREATE a konec procedurálních příkazů objektu.
10 Kapitola 10 – Zabezpečení databáze Tato kapitola pojednává o tom, jakým způsobem je zajištěno zabezpečení v DB2. Obrázek 10.1 ukazuje základní přehled.
Obrázek 10.1 – Přehled zabezpečení DB2 Jak je ukázáno na Obrázku 10.1, bezpečnost v DB2 se skládá ze dvou částí: Autentifikace Jedná se o proces, kterým se ověřuje platnost údajů uživatele. Autentifikace je prováděna bezpečnostní službou přes bezpečnostní plug-in, mimo DB2. Defaultní bezpečnost je založena na bezpečnosti operačního systému (účet v operačním systému), můžete však také použít plug-iny pro Kerberos, LDAP, nebo si můžete sestavit svůj vlastní autentifikační plug-in. Pokud používáte defaultní autentifikační plug-in operačního systému, je uživatelské jméno a heslo posláno do databázového serveru (například jako součást připojovacího řetězce). Databázový server pak vyvolá autentifikaci operačního systému pro ověření platnosti uživatelského jména a hesla. Autorizace V této fázi DB2 kontroluje, zda může autentifikovaný uživatel spustit požadovanou operaci. Autorizační informace jsou uloženy v katalogu DB2 a konfiguračním souboru DBM. Například na Obrázku 10.1 se uživatel bob připojuje do databáze SAMPLE tímto příkazem: CONNECT TO sample USER bob USING pwd
Pro provedení autentifikačního potvrzení jsou operačnímu systému nebo externímu autentifikačnímu procesu předány oba údaje, bob a pwd. Tedy že uživatel jménem bob je již definovaný a heslo, které zadal, je opravdu heslo příslušného uživatele. Pokud je tato
166
Začínáme s DB2 Express-C
část úspěšná, operační systém vrátí bezpečnostní proměnnou serveru DB2. Dále když uživatel bob spustí například příkaz: SELECT * FROM mytable
DB2 převezme kontrolu nad bezpečností a prověří, zda uživatel bob má SELECT práva v tabulce mytable. Pokud autorizační kontrola selže, DB2 vrátí chybové hlášení, v opačném případě se příkaz provede. Poznámka: Pro více informací o práci se zabezpečením DB2 se podívejte na toto video: http://www.channeldb2.com/video/video/show?id=807741:Video:4267
10.1 Autentifikace Přestože aktuální autentifikace je spouštěna operačním systémem přes defaultní plug-iny (nebo další externí procesy), DB2 rozhoduje, na jaké úrovni se autentifikace provádí. Databázový konfigurační parametr AUTHENTICATION uložený na DB2 server má velkou řadu možných hodnot. Například je-li parametr nastaven na SERVER (defaultní možnost), autentifikace se provede operačním systémem nebo externím procesem na serveru. Pokud je parametr AUTHENTICATION nastaven na CLIENT, autentifikace se provede operačním systémem nebo externím procesem na straně klienta. Je to ukázáno na Obrázku 10.2.
Obrázek 10.2 – Kde se provádí autentifikace Parametr AUTHENTICATION může být nastaven na jakoukoliv z hodnot, které jsou zmíněny v Tabulce 10.1
Příkaz
Popis
Kapitola 10 – Zabezpečení databáze
167
SERVER (defaultní)
Autentifikace je umístěna na serveru
CLIENT
Autentifikace je umístěna na klientu
SERVER_ENCRYPT
Podobné jako SERVER, až na to, že uživatel a heslo jsou kryptovány
KERBEROS
Autentifikace se odehrává použitím zabezpečovacích mechanismů Kerberos
SQL_AUTHENTICATION_DATAENC
Serverová autentifikace a připojení musí využívat kryptování dat
SQL_AUTHENTICATION_DATAENC_CMP
Podobné jako možnost výše, kryptování dat jen pokud je to možné
GSSPLUGIN
Autentifikace používá externí GSS API plugin bezpečnostního mechanismu
Tabulka 10.1 – Validní hodnoty parametru AUTHENTICATION
10.2 Autorizace Autorizace se skládá z privilegií, autorit, rolí a přístupu založeném na štítkách (label-based access control - LBAC) - údajů, které jsou uloženy v systémových tabulkách DB2 a jsou spravovány DB2. Privilegia umožňují uživateli spouštět jednoduché typy operací nad databází, jako například CREATE, UPDATE, DELETE, INSERT, atd. Role umožňují seskupovat jednotlivá privilegia, která můžete přidělit uživateli, skupině nebo dalším rolím. Autorita je předdefinovaná role, která se skládá z několika privilegií. Label-based Access Control (LBAC) obsahuje politiku a štítky, které podporují různorodý přístup do specifického řádku a sloupce určitým uživatelům. LBAC není obsažen v DB2 Express-C, ale můžete si o něm více přečíst v Kapitole 2.
10.2.1 Privilegia Obrázek 10.3 ukazuje některá z různých privilegií v DB2.
168
Začínáme s DB2 Express-C
Obrázek 10.3 – Výpis několika DB2 privilegií Uživatelská skupina dostávající privilegia CONTROL má také práva udělovat privilegia nějaké jiné skupině nebo uživateli. Pro získání detailů o dalších odlíšných privilegiích se podívejte do Informačního centra DB2.
10.2.2 Autority Autority jsou rozděleny do dvou skupin: Autority na úrovni instance: Tyto autority mohou působit na úrovni instance, například SYSADM. Autority na úrovni databáze: Tyto autority mohou působit na úrovni databáze, například DBADM.
Kapitola 10 – Zabezpečení databáze
169
10.2.2.1 Autority na úrovni instance Tabulka 10.2 vypisuje autority na úrovni instance Autorita
Popis
SYSADM
Spravuje instance jako celek
SYSCTRL
Administruje instance databázové správy
SYSMAINT
Udržuje databáze v instanci
SYSMON
Monitoruje instance a jejich databáze
Tabulka 10.2 - Autority na úrovni instance Pro začlenění SYSADM, SYSCTRL, SYSMAINT nebo SYSMON autorit do skupiny je nutno změnit parametry DBM CFG - skupině v operačním systému se musí přiřadit SYSADM_GROUP, SYSCTRL_GROUP, SYSMAINT_GROUP a SYSMON_GROUP. Například pro přidání SYSADM autority do skupiny operačního systému myadmns můžete použít tento příkaz: update dbm cfg using SYSADM_GROUP myadmns
Každá instance DB2 má své vlastní definice skupin autorit. Ve Windows jsou tyto parametry defaultně prázdné, což znamená, že skupina Lokálních administrátorů bude zároveň SYSADM autoritou. V DB2 verze 9.7 bude mít také SYSADM autoritu skupina DB2ADMNS (pokud je povolena rozšířená bezpečnost) a účet lokálního systému. Autorizační ID pro účet lokálního systému je SYSTEM. Na Linuxu je skupinou vlastníka instance defaultní SYSADM skupina. Obrázek 10.4, extrahovaný z DB2 Řídicího centra, ukazuje rozdíly mezi autoritami na úrovni instance a různé funkce, které spouští. Jak obrázek naznačuje, autorita SYSADM obsahuje všechny funkce SYSCTRL a více. SYSCTRL autorita obsahuje všechny funkce SYSMAINT a více, atd..
170
Začínáme s DB2 Express-C
Obrázek 10.4 - Autority na úrovni instance a jejich funkce
Kapitola 10 – Zabezpečení databáze
171
10.2.2.2 Autority na úrovni databáze Tabulka 10.3 uvádí autority na úrovni databáze. Autorita
Popis
SECADM
Spravuje bezpečnost v databázi
DBADM
Administruje databázi Přiděluje a odebírá autority a privilegia (jiné, než autority SECADM, DBADM, ACCESSCTRL a DATAACCESS. Uvědomte si, že je pro udělování a odebírání těchto autorit zapotřebí autorita SECADM)
ACCESSCTRL Umožňuje přístup k datům v databázi.
DATAACCESS SQLADM
Monitoruje a ladí SQL dotazy
WLMADM
Spravuje vytíženost systému
EXPLAIN
Poskytuje uživatelům možnost vysvětlení EXPLAIN nedává přístup k datům samotným)
plánu
dotazu
(autorita
Tabulka 10.3 - Autority na úrovni databáze K tomu, abyste přidali autoritu na úrovni databáze, použijte příkaz GRANT. Například pro přidání DBADM v databázi SAMPLE pro uživatele bob použijte: connect to sample grant DBADM on database to user bob
Na výše uvedeném příkladu se nejprve potřebujete připojit k databázi, v tomto případě k databázi SAMPLE, a potom můžete přidělit DBADM uživateli. Pro přidělení autority DBADM a dalších autorit na databázové úrovni potřebujete být SECADM. Zapamatujte si, že DBADM nemůže vytvářet tabulkové prostory, přestože se jedná o objekty uvnitř databáze, protože tabulkové prostory souvisí s kontejnery (disky) a fondy vyrovnávacích pamětí (paměť) - což jsou fyzické zdroje v systému. Toto provádí SYSADM. Obrázek 10.5 pořízený z Informačního centra DB2 ukazuje rozdílné autority na úrovni databáze a funkce, které provádějí.
172
Začínáme s DB2 Express-C
Obrázek 10.5 - Autority na úrovni databáze a jejich funkce Poznámka: V DB2 verze 9.7 byl s cílem většího zabezpečení a splnění vládních požadavků zaktualizován autorizační model. Byl rozdělen podle příslušných povinností na systémového administrátora, databázového administrátora a bezpečnostního administrátora. Obecně se oproti předešlým verzím DB2 rozptyl funkcí jednotlivých autorit ztenčil a zredukoval. Například SYSADM již nemá práva pro přístup k datům v jakékoliv databázi. DBADM již nemá práva pro přístup k datům v databázi, kterou administruje. Na druhou stranu SECADM získal více funkcí, například schopnost přidávat a odebírat autority a privilegia uživatelům, rolím a skupinám. Nové autority byly také vytvořeny za účelem větší granularity a kontroly systémové bezpečnosti. To minimalizuje riziko, že data budou vystavena uživatelům, kteří je nepotřebují pro svou práci. DB2 verze 9.7.2 také obsahuje některá zlepšení auditingu, která dovolují přehrát poslední aktivity nad databází. Například pokud potřebujete analyzovat, co udělal určitý požadavek, který ovlivnil data několik let zpátky, můžete k získání analytických údajů nyní použít informace z databázového auditu.
10.2.2.3 Návrat SYSADM a DBADM k nastavení ve verzi DB2 před 9.7 Pokud chcete, aby se SYSADM choval stejně, jako ve verzích před DB2 9.7, existují dvě možnosti, jak toho docílit:
Kapitola 10 – Zabezpečení databáze
173
Pokud je SYSADM zakladatelem databáze, pak automaticky obdrží autority DATAACCESS, ACCESSCTRL, SECADM a DBADM pro tuto databázi, což dává SYSADM stejné možnosti, jako měl ve verzích, které předcházely DB2 9.7. Pokud SYSADM není zakladatelem databáze, pak k obdržení stejných možností jako v minulých verzích DB2 (kromě SECADM) musí SECADM provést GRANT DBADM s DATAACCESS a ACCESSCTRL (což je defaultní) pro SYSADM v dané databázi. Několik případů na zvážení pro SECADM: Defaultně je SECADM zakladatel databáze. Pokud uživatel se SECADM autoritou přidělí SECADM uživateli s autoritou SYSADM, pak může SYSADM přidávat autoritu SECADM jiným uživatelům. Pokud uživatel s autoritou SECADM přidělí DBADM uživateli, DBADM také automaticky přijme DATAACCESS a ACCESSCTRL. Pokud migrujete databázi DB2 verze 9.5, nebudou se schopnosti SYSADM a DBADM měnit, protože DB2 při migraci automaticky přidává DBADM, DATAACCESS a ACCESSCTRL do skupiny SYSADM. DB2 také automaticky přiděluje DATAACCESS a ACCESSCTRL každému autorizačnímu kontu, které při migraci vlastní DBADM. Navíc DB2 automaticky přidává SECADM uživatelskému kontu, které provádí migraci, pokud v databází neexistuje jiné uživatelské konto se schopností SECADM. SYSADM ztrácí implicitní schopnost přidávat nebo odebírat DBADM a SECADM, nyní může tyto akce provádět pouze SECADM.
10.2.3 Role Role umožňují správcům zabezpečení přidělovat privilegia nebo autority několika uživatelům nebo skupinám. Role jsou velice podobné skupinám, ale jsou definovány uvnitř databáze, proto poskytují několik výhod. Například privilegia a autority, které jsou přiděleny rolím, jsou použity při každé tvorbě objektu - například pro pohled a trigger, což je právě rozdílem oproti skupinám. Na druhou stranu nemůžete přidělit autority úrovně instance, například SYSADM roli. Lze přidělit jen privilegia a autority databázové úrovně; zatímco pro skupiny mohou být přidělena všechna privilegia a autority. Práce s rolemi vyžaduje několik následujících kroků: 1. Administrátor zabezpečení (SECADM) musí nejprve vytvořit roli příkazem, např.: CREATE ROLE TESTER
2. Dále DBADM musí roli přiřadit privilegia nebo autority. Například pro přidání privilegia SELECT v tabulce STAFF a DEPT v databázi SAMPLE do role TESTER spusťte: GRANT SELECT ON TABLE STAFF TO ROLE TESTER GRANT SELECT ON TABLE DEPT TO ROLE TESTER
Začínáme s DB2 Express-C
174
3. V dalším kroku Administrátor zabezpečení přidělí roli TESTER uživatelům RAUL a JIN: GRANT ROLE TESTER TO USER RAUL, USER JIN
4. Pokud uživatel JIN opustí oddělení TEST, Administrátor zabezpečení od uživatele JIN odebere roli TESTER: REVOKE ROLE TESTER FROM USER JIN
10.3 Skupinová privilegia Pokud se rozhodnete používat skupiny místo rolí, mějte na paměti následující:
Přidělená práva skupiny se implicitně dědí členy skupiny díky členství ve skupině.
Pokud je uživatel vyjmut ze skupiny, ztrácí implicitní privilegia skupiny, ale stále mu zůstávají privilegia, která byla explicitně přidělena. Privilegia, která byla přidělena uživateli explicitně, musí být explicitně uživateli odebrána.
10.4 Skupina PUBLIC DB2 definuje interní skupinu nazvanou PUBLIC. Každý uživatel, který je identifikovaný operačním systémem nebo síťovou autentifikací, je implicitně členem skupiny PUBLIC. Pří vytváření databáze jsou jistá privilegia přidělena PUBLICu automaticky: CONNECT, CREATETAB, IMPLICIT SCHEMA, BINDADD Pro zvýšení bezpečnosti doporučujeme odebrání všech privilegií ze skupiny PUBLIC, jak je ukázáno níže: REVOKE REVOKE REVOKE REVOKE
CONNECT ON DATABASE FROM PUBLIC CREATETAB ON DATABASE FROM PUBLIC IMPLICIT_SCHEMA ON DATABASE FROM PUBLIC BINDADD ON DATABASE FROM PUBLIC
10.5 Příkazy GRANT a REVOKE Příkazy GRANT a REVOKE jsou součástí standardu SQL a jsou používány k udělení nebo odebrání privilegií uživatelům, skupinám nebo rolí. Uživatel, který spouští tyto příkazy, musí mít nejméně autoritu ACCESSCTRL. Níže jsou příklady těchto příkazů: Pro přidání privilegia SELECT nad tabulkou T1 uživateli USER1: GRANT SELECT ON TABLE T1 TO USER user1
Kapitola 10 – Zabezpečení databáze
175
Pro přidání všech privilegií nad tabulkou T1 skupině GROUP1: GRANT ALL ON TABLE T1 TO GROUP group1
Pro odebrání všech privilegií nad tabulkou T1 skupině GROUP1: REVOKE ALL ON TABLE T1 FROM GROUP group1
Pro přidání privilegia EXECUTE na proceduru p1 uživateli USER1: GRANT EXECUTE ON PROCEDURE p1 TO USER user1
Pro odebrání privilegií EXECUTE pro procedure p1 uživateli USER1: REVOKE EXECUTE ON PROCEDURE p1 FROM USER user1
10.6 Autorizace a kontrola privilegií Nejjednodušší cestou, jak zkontrolovat autorizace a privilegia, je přes Řídicí centrum. Obrázek 10.6 ilustruje, jak spustit dialogové okno tabulkových privilegií pro tabulku EMPLOYEE z Řídicího centra.
Obrázek 10.6 - Spouštění dialogového okna Oprávnění pro tabulky Jak je ukázáno na Obrázku 10.6, klikněte na dané tabulce pravým tlačítkem a vyberte Oprávnění. Jakmile je možnost vybrána, otevře se dialogové okno Oprávnění pro tabulky,
176
Začínáme s DB2 Express-C
jak je ukázáno na Obrázku 10.7. Tento obrázek také vysvětluje různá pole a prvky v dialogovém oknu.
Tabulka 10.7 – Dialogové okno Oprávnění pro tabulky Alternativně lze dotazovat katalogový pohled DB2 SYSCAT, který obsahuje autorizační informace. Například pokud chcete vědět, zda má uživatel DB2ADMIN privilegium SELECT v tabulce T2 a zajímá vás, kdo toto privilegium přidělil, můžete spustit tento dotaz: SELECT grantor, grantee, selectauth FROM syscat.tabauth WHERE tabname = 'T2' GRANTOR GRANTEE SELECTAUTH ------------------------------------------------ARFCHONG DB2ADMIN Y
V tomto uvedeném příkladu uživatel ARFCHONG přidělil privilegia SELECT uživateli DB2ADMIN.
10.7 Rozšířená bezpečnost ve Windows K ochraně přístupu k DB2 souborům a adresářům v systémech Windows (například těm, kde si DB2 ukládá informace o uložených instancích) povoluje DB2 defaultně při instalaci rozšířenou bezpečnost. Rozšířená bezpečnost vytváří dvě skupiny:
Kapitola 10 – Zabezpečení databáze
177
DB2ADMNS: Tato skupina a lokální administrátoři budou mít kompletní přístup ke všem DB2 objektům přes operační systém. DB2USERS: Tato skupina bude moci číst a přistupovat ke všem DB2 objektům přes operační systém. V DB2 verzi 9.7 budou mít členové skupiny DB2ADMNS automaticky autoritu SYSADM v DB2, pokud je povolena rozšířená bezpečnost a není nastaven konfigurační parametr databáze SYSADM_GROUP.
10.8 Shrnutí Tato kapitola pokryla bezpečnostní aspekty DB2. Začali jsme vyčerpávajícím srovnáním rozdílů a významů mezi autentifikací a autorizací. Odtud jsme nahlédli na různé úrovně autorit, které poskytují bezpečnost pro instance a databáze. Dále jsme se podívali na nový koncept rolí a na to, jak mohou být využity ve váš prospěch s ohledem na bezpečnost a omezení nastavení bezpečnosti přes skupiny. Zvlášť jsme probírali skupinu PUBLIC, stejně jako doporučení, jak zabezpečit, aby obyčejný uživatel neměl přístup k datům na serveru. Kromě toho jsme zkoumali příkazy GRANT a REVOKE a nakonec jsme se podívali na to, jak pro zjištění úrovně autorizací a privilegií použít Řídicí centrum a systémové katalogové tabulky.
10.9 Cvičení Až doposud jste pro spouštění všech příkazů v databázi používali instanci administrátorského účtu (SYSADM). Tento účet má široký přístup do všech utilit, dat, k databázovým objektům. Proto je velice důležité jej střežit, aby se předešlo náhodným či úmyslným ztrátám dat. Ve většině případů budete chtít vytvořit různá uživatelská konta nebo skupiny s limitovanou sadou oprávnění. V tomto příkladu vytvoříte nové uživatelské konto a pak mu přidělíte specifická práva. Část 1 - Práce s privilegii V této části cvičení si prakticky otestujete, jak přidělit a odebrat privilegia uživateli pomocí Řídicího centra. Postup 1. Otevřete Správu počítače kliknutím na ikonu Můj počítač na ploše a vybráním položky Spravovat z menu. 2. Rozbalte záložku Systémové nástroje ve stromové struktuře v levém panelu okna, a pak rozbalte složku Místní uživatelé a skupiny. Klikněte pravým tlačítkem na složce Uživatel a vyberte položku Nový uživatel. 3. V dialogovém okně Nový uživatel zadejte následující informace: do pole Uživatelské jméno zadejte customer a do Jméno a příjmení zadejte Customer1. Do pole Popis zadejte A typical bookstore customer. Do polí Heslo a
178
Začínáme s DB2 Express-C Potvrzení hesla zadejte ibmdb2ibm. Odškrtněte box u možnosti Při dalším přihlášení musí uživatel změnit heslo a klikněte na tlačítko Vytvořit pro vytvoření nového uživatele a pak klikněte na tlačítko Zavřít pro zavření dialogového okna.
4. Otevřete Řídicí centrum a vyberte rozšířené zobrazení. Pro přepnutí do rozšířeného zobrazení vyberte Nástroje →Přizpůsobit Řídicí centrum menu. Pak vyberte možnost Rozšířené a klikněte na tlačítko OK. 5. Rozbalte v Řídicím centru stromovou strukturu v levém panelu na Všechny databáze → EXPRESS → Tabulky. 6. Přidělte požadovaná privilegia nově vytvořenému uživateli. Ze seznamu tabulek v databázi EXPRESS klikněte pravým tlačítkem na tabulku CUSTOMERS a vyberte položku Oprávnění pro otevření dialogového okna Oprávnění pro tabulky. 7. Klikněte na tlačítko Přidat uživatele a vyberte uživatele customer, kterého jste před chvílí vytvořili. Pro zavření dialogového okna Přidat uživatele klikněte na tlačítko OK. 8. Zjistíte, že uživatel customer byl přidán do seznamu uživatelů, ale nemá přidělena žádná privilegia. Pro přidělení privilegií SELECT, INSERT, UPDATE a DELETE uživateli změňte každou roletku na hodnotu Ano. Internetový zákazník by měl mít možnost vidět svá data o účtu. Nedáváme uživateli ostatní povolení, protože je nevyžadují. Klikněte na tlačítko OK pro zavření dialogového okna Oprávnění pro tabulky pro akceptování provedených změn.
Kapitola 10 – Zabezpečení databáze
179
9. Zopakujte kroky 7-9 pro tabulky BOOKS a SALES. Pro tabulku BOOKS přidělte jen privilegium SELECT, protože zákazník by neměl být schopen modifikovat jakákoliv data v majetku obchodu. Pro tabulku SALES přidělte pouze privilegia SELECT a INSERT. Zákazník by neměl mít DELETE nebo UPDATE privilegia, protože jen zaměstnanci obchodu by měli mít přístup modifikovat prodejní transakce. 10. Pomocí nedávno vytvořeného uživatele se spuštěním příkazu v Příkazovém okně DB2 připojte do databáze customer: db2 connect to express user customer using ibmdb2ibm
Zkuste spustit příkaz SELECT nad tabulkou customers. Co se stane? Pokuste se smazat nebo změnit data (DELETE, resp.UPDATE) v tabulce SALES. Co se stane?
Část 2 - Práce s autoritami SYSADM, DBADM a SECADM V této části cvičení si procvičíte, jak přiřadit autority SYSADM a DBADM a pochopíte, jak tyto autority pracují. Postup 1. Použijte stejný postup jako v části jedna a vytvořte nového uživatele: mysysadm 2. Vytvořte Windows skupinu mysysadmgrp. Opakujte stejné kroky, které byly nutné k vytvoření uživatele, ale místo klikání pravým tlačítkem na složce Uživatel, klikněte pravým tlačítkem na složce Skupiny a vyberte Nová skupina. Do pole Název skupiny zadejte mysysadmgrp. Pro přidání nového člena klikněte v sekci
180
Začínáme s DB2 Express-C Členové na Přidat a zadejte mysysadm. Klikněte na tlačítko Kontrola názvů pro potvrzení, že jste údaj o členovi zadali správně. Pokud jste tak udělali, klikněte na Vytvořit a pak na Zavřít. 3. Dosud jste vytvořili jednoho uživatele mysysadm a jednu skupinu mysysadmgrp, do níž patří uživatel mysysadm. To se vše dělo v operačním systému Windows. Nyní potřebujeme informovat DB2, že chceme, aby skupina mysysadmgrp byla skupinou SYSADM - uděláme to tak, že spustíme tento příkaz z Příkazového okna DB2: db2 update dbm cfg using SYSADM_GROUP mysysadmgrp
Pokud není parametr SYSADM_GROUP dynamický, budete potřebovat zastavit a spustit instanci. Parametr force v příkazu db2stop garantuje, že předtím, než se provede db2stop, jsou všechna připojení zrušena. db2stop force db2start
4. Připojte se k databázi SAMPLE uživatelem mysysadm z DB2 Příkazového okna a spusťte příkaz SELECT * nad tabulkou STAFF. Všimněte si, že potřebujete uvést správné schéma, které bylo použito při vytváření této tabulky. V příkladu níže používáme schéma arfchong. db2 connect to sample user mysysadm using ibmdb2ibm db2 select * from arfchong.staff
Měli byste dostat chybové hlášení podobné našemu. Proč? Nejste SYSADM? SQL0551N "MYSYSADM" does not have the required authorization or privilege to perform operation "SELECT" on object "ARFCHONG.STAFF". SQLSTATE=42501
Od DB2 verze 9.7 SYSADM nedostává defaultně autoritu DBADM, to je důvodem, proč jste obdrželi chybu. 5. Použitím uživatele Windows, který vytvořil databázi SAMPLE se připojte do databáze. V příkladu je tím uživatelem ARFCHONG. Dále přidejte uživateli mysysadm DBADM bez DATAACCESS a zkuste SELECT na tabulce STAFF znovu jako mysysadm. Fungovalo to? Proč? db2 db2 db2 db2
connect to sample user arfchong using ibmdb2ibm grant dbadm without dataaccess on database to user mysysadm connect to sample user mysysadm using ibmdb2ibm select * from arfchong.staff
Jak vidíte, dostáváte stále stejné chybové hlášky, i když DBADM byl přidělen mysysadm. Toto chování je očekáváno, protože jsme zahrnuli klauzuli WITHOUT DATAACCESS, což znamená, že autorita DATAACCESS nebyla přiřazena, tudíž
Kapitola 10 – Zabezpečení databáze
181
mysysadm stále nemá autoritu k přistupování k datům. Příklad vám ukázal, jak se může omezit DBADM přístup k datům. 6. Pojďme nyní přidělit DATAACCESS uživateli mysysadm a zkusíme znovu příkaz SELECT. db2 db2 db2 db2
connect to sample user arfchong using ibmdb2ibm grant DATAACCESS on database to user mysysadm connect to sample user mysysadm using ibmdb2ibm select * from arfchong.staff
Nyní by váš SELECT měl pracovat! Tento úkol vám ukázal nové chování pro SYSADM a DBADM, které je v DB2 verze 9.7 novinkou. Hlavní myšlenka, kterou byste si měli z toho cvičení odnést je, že existuje separace mezi přístupem k datům a tím, co SYSADM a DBADM dělají. 7. Resetujte hodnotu SYSADM_GROUP na NULL, takže skupina lokálních administrátorů a konto LocalSystem se znovu stanou SYSADM: db2 update dbm cfg using sysadm_group NULL db2stop force db2start
11 Kapitola 11 – Záloha a obnovení V této kapitole si probereme logování databáze DB2, tvorbu celé nebo částečné kopie vaší databáze pomocí utility BACKUP a obnovení vašich dat použitím utility RESTORE. Poznámka: Pro více informací o logování, záloze a obnovení se podívejte na toto video: http://www.channeldb2.com/video/video/show?id=807741:Video:4282
11.1 Databázové logování (protokolování) Pokaždé, když jste pracovali s textovým editorem a chtěli jste se ujistit, že je váš dokument uložený, klikli jste na tlačítko Uložit. V databázovém světě přesně tuhle funkci vykonává příkaz COMMIT. Pokaždé, když je spuštěn příkaz COMMIT, máte jistotu, že jakékoliv změny, které se s daty udály, budou někde uloženy. Zjednodušeně řečeno, pokud pracujete s textovým dokumentem, někdy uvidíte ve spodním pravém rohu krátkou zprávu “auto-saving”. V databázovém světě se to děje také, protože jakékoliv operace s daty (například UPDATE, INSERT nebo DELETE) se změny při samotném provádění někam uloží. Zmíněné “někam” v minulých odstavcích odkazuje na databázové logy. Databázové logy jsou uloženy na disku a jsou použity pro nahrávání akcí nebo transakcí. Pokud nastane systémová nebo databázová havárie, jsou logy použity pro přehrání a zrekonstruuje potvrzené transakce během obnovení. Obrázek 11.1 poskytuje grafický přehled procesu, pokud pracujeme v databázovém kontextu s termínem "logování".
184
Začínáme s DB2 Express-C
Obrázek 11.1 – Logování databáze Na Obrázku 11.1 vidíme tabulkový prostor a logy. Obojí zůstává na discích, přesto ale doporučujeme, ať nejsou uchovávány na stejném disku. Při spuštění například operace UPDATE se stránky pro řádek (řádky) přenesou do fondu vyrovnávací paměti. Aktualizační změna se spouští ve fondu vyrovnávací paměti a staré i nové hodnoty budou uloženy v log souborech, někdy okamžitě, někdy při naplnění logového bufferu. Pokud je po UPDATE spuštěn příkaz COMMIT, do logu souboru se okamžitě uloží stará a nová hodnota. Tento proces je opakován při mnoha dalších operacích SQL, které se dějí v databázi. Stránky ve fondu vyrovnávací paměti jsou “zviditelněny” a zapsány do tabulkového prostoru disku pouze po vyvstanutí specifických podmínkek, například při dosažení hranice výměny stránky specifikované v parametru CHNGPGS_THRES. Parametr CHNGPGS_THRES udává procentuální limit zaplnění fondu vyrovnávací paměti “špinavými” stránkami („špinavá stránka“ je stránka obsahují změnu). Z pohledu výkonu nedává smysl provádět při každé operaci COMMIT dva zápisy na disk: jeden pro zapsání logu a druhý pro zapsání do tabulkového prostoru disku; to je důvodem, proč se data “zviditelňují” do tabulkového prostoru disku jen při dosažení hranice parametru CHNGPGS_THRES.
11.2 Typy logů Existují dva typy logů: Primární logy Jsou předalokované a počet dostupných primárních logů je určen databázovým konfiguračním parametrem LOGPRIMARY. Sekundární logy Jsou dynamicky alokovány podle potřeb DB2. Maximální počet sekundárních logů je nastaven databázovým konfiguračním parametrem LOGSECOND. Dynamické alokování logu je nákladné; proto se pro každodenní operace vystačí s logováním do primárního logu. Sekundární log soubory jsou smazány, jakmile jsou ukončena všechna databázová připojení. Pokud nastavíte LOGSECOND na hodnotu -1, je možné nekonečné logování (každopádně se to nedoporučuje, mohou vám dojít systémové prostředky).
11.3 Typy logování Existují dva typy logování: kruhové logování (defaultní) a archivní logování.
11.3.1 Kruhové logování Kruhové logování je defaultní a je povoleno, pokud jsou oba parametry databázové konfigurace LOGARCHMETH1 a LOGARCHMETH2 nastaveny na OFF. Tyto parametry indikují metodu, která bude použita pro archivaci logů. Pokud je vypnete, znamená to, že
Kapitola 11 – Záloha a obnovení
185
nechcete archivovat logy, což je přesně způsob, jakým pracuje kruhové logování. Obrázek 11.2 naznačuje ukázkovou ilustraci kruhového logování.
Obrázek 11.2 – Práce s primárními a sekundárními logy Na Obrázku 11.2 jsou 3 primární logy, proto tedy můžeme předpokládat, že hodnota parametru LOGPRIMARY je 3. Pro zjednodušení zde na příkladu probíhá jen jedna transakce. Jakmile je transakce spuštěna, začnou se naplňovat logové soubory v pořadí P1, P2. Jestliže se objeví potvrzení (commit) a informace je později zapsána do tabulkového prostoru disku, můžou být P1 a P2 přepsány, protože informace není dále potřebná pro obnovení po havárii (což bude více probíráno později v kapitole). Na druhou stranu, pokud je transakce tak dlouhá, že využije P1, P2, P3, a stále potřebuje více logovacího místa, protože nebyla potvrzena nebo zapsána, pak je dynamicky alokován sekundární log (S1 na obrázku). Pokud transakce pokračuje, je alokováno více sekundárních logů, až do hranice, kterou určuje LOGSECOND. Pokud je stále požadováno více logů, objeví se chybová hláška, která poukazuje na naplněnost logů a transakce se vrátí zpět. Alternativně můžete konfigurovat DB2 použitím konfiguračního parametru BLK_LOG_DSK_FUL pro pokračování zapisování do logu každých 5 minut, některé transakce tedy zůstanou "viset". To poskytuje DBA trochu času pro nalezení nového místa, aby mohla transakce pokračovat. Kruhové logování vám umožňuje obnovení z nehody. Pokud chcete vaše data obnovit k určitému okamžiku, je důležité vědět, že nejbližší dostupný čas je časem poslední zálohy.
11.3.2 Archivní logování Při archivním logování, také známém jako udržovací logování, nejsou log soubory přepisovány, ale jsou uchovávány buď online nebo offline. Online archivní logy zůstávají s aktivními logy, které jsou zapotřebí pro zotavení z hávarie. Offline archivní logy se přesouvají na jiná média, například pásky, což může být provedeno rutinou USEREXIT, Tivoli Storage Manager nebo dalším archivním produkty třetích stran. Pro povolení archivních logů nastavte databázové konfigurační parametry LOGARCHMETH1 nebo LOGARCHMETH2 (případně oba) na hodnotu jinou, než OFF. Další možností povolení je nastavení konfiguračního parametru LOGRETAIN na RECOVERY. To automaticky způsobí, že LOGARCHMETH1 bude nastaven na LOGRETAIN. Každopádně parametr LOGRETAIN je na ústupu a byl zde ponechán hlavně jako kompatibilitní funkce se staršími verzemi DB2.
186
Začínáme s DB2 Express-C
Archivní logy jsou běžně používány v produkčních systémech; tím, že se logy uchovávají, umožňuje databázové zotavení zpátky v čase do období nejstaršího log souboru. S archivním logováním může DBA zotavit chyby v databázi způsobené lidmi. Například pokud uživatel systému nedopatřením začne provádět nesprávnou transakci, která trvá dny, při detekci problému může DBA obnovit systém zpátky do času předtím, než vzniknul problém. Nicméně zde může být vyžadována určitá manuální manipulace, aby se transakce znovu spustila korektně. Archivní logování je požadováno pro roll-forward zotavení a online zálohování. Obrázek 11.3 zobrazuje proces archivního logování.
Obrázek 11.3 – Archivní logování
11.4 Logování databáze z Řídicího centra Kliknutím pravého tlačítka na databázi a vybráním položky Konfigurovat protokolování databáze, můžete nakonfigurovat logování databáze z Řídicího centra, jak je zobrazeno na Obrázku 11.4
Kapitola 11 – Záloha a obnovení
187
Obrázek 11.4 – Konfigurace protokolování databáze z Řídicího centra. Obrázek 11.5 ukazuje Průvodce konfigurováním protokolování databáze, kde můžete vybrat mezi kruhovým a archivním logováním.
Obrázek 11.5 – Průvodce konfigurováním protokolování databáze
11.5 Parametry logování Existuje množství parametrů DB CFG, které se týkají logování. Tabulka 11.1 vypisuje hlavní z nich.
188
Začínáme s DB2 Express-C Parametr
Popis
logbufsz
Množství paměti, které se používá jako buffer pro záznamy předtím, než se zapíší na disk.
logfilsz
Velikost každého konfigurovaného logu, jednotkou jsou 4 KB stránky.
logprimary
Počet primárních logů o velikosti logfilsz, které se vytvoří ihned.
logsecond
Počet sekundárních log souborů, které se vytvoří a použijí pro zotavení, pokud bude zapotřebí.
newlogpath
Databázové aktivní a archivní logy jsou při výchozím stavu uloženy ve vašem adresáři databáze v podadresáři SQLOGDIR. Lokaci můžete změnit tím, že změníte hodnotu tohoto konfiguračního parametru a nasměrujete jej do jiného adresáře nebo na zařízení.
mirrorlogpath
Pro ochranu logů v primární cestě v případě selhání disku, případně nechtěnému smazání, můžete specifikovat, že se identická sada logů bude ukládat také do sekundární (mirrorované) cesty.
logarchmeth1 logarchmeth2
Určuje umístění jiných, než aktivních logů, pro uložení log souborů. Pokud jsou uvedeny oba dva parametry, každý log je archivován dvakrát. To znamená, že budete mít dvě kopie archivních log souborů ve dvou různých umístěních. Dostupné hodnoty jsou OFF (což znamená, že je povoleno kruhové logování), LOGRETAIN, USEREXIT, DISK, TSM, VENDOR.
loghead
Název log souboru, který je aktuálně aktivní.
softmax
Ovlivňuje počet logů, které jsou zapotřebí pro obnovení.
overflowlogpath
Určuje lokaci log souborů pro DB2, které jsou zapotřebí pro operaci roll-forward. Podobně jako možnost OVERFLOW LOG PATH příkazu ROLLFORWARD.
blk_log_dsk_ful
Nastavuje se pro předcházení chyb plných disků, které se generují, když DB2 nemůže vytvořit nový log soubor v aktivní log cestě. Místo toho se DB2 pokusí vytvořit log soubor každých pět minut, dokud nebude úspěšný. Po odblokování mohou pokračovat příkazy SQL v read-only režimu.
max_log
Procento maximálních aktivních log prostorů v jedné transakci.
num_log_span
Počet aktivních log souborů pro 1 aktivní UOW.
Kapitola 11 – Záloha a obnovení mincommit
189
Počet potvrzení ve skupině předtím, než proběhne zápis na disk.
Tabulka 11.1 – Parametry logování
11.6 Záloha databáze DB2 příkaz BACKUP vám umožňuje zachytit obraz kopie vaší databáze v čase, kdy je příkaz spouštěn. Nejjednodušší syntaxe, kterou můžete použít pro spuštění tohoto příkazu, je: BACKUP DATABASE [ TO ]
Většina příkazů a utilit může být prováděno online nebo offline. Online předpokládá, že když spouštíte váš příkaz, mohou se další uživatelé připojovat a provádět operace v databázi. Offline znamená, že když provádíte operaci, nejsou do databáze připojení žádní další uživatelé. Pro povolení online operace přidejte klíčové slovo ONLINE k příkazové syntaxi, jinak defaultně příkaz počítá se spouštěním v offline režimu. Například pokud chcete zálohovat databázi SAMPLE do umístění C:\BACKUPS můžete spustit tento příkaz z Příkazového okna DB2 nebo Linuxového shellu: db2 BACKUP DB sample TO C:\BACKUPS
Mějte na paměti, že adresář C:\BACKUPS musí existovat předtím, než příkaz spustíte. Také se ujistěte, že když spouštíte výše uvedený příkaz, neexistují žádná připojení do databáze. V opačném případě obdržíte chybové hlášení o tom, že offline záloha nemůže být provedena, protože existují připojení k databázi. Pro zjištění, zda existují v dané instanci k databázi připojení, spusťte příkaz z Příkazového okna DB2 nebo v Linuxovém shellu: db2 list applications
Pro ukončení všech připojení ke všem databázím v instanci spusťte příkaz z Příkazového okna DB2 nebo Linuxového shellu: db2 force applications all
Určitě nechcete spouštět tento poslední příkaz v produkčním prostředí s mnoha uživateli; jinak obdržíte mnoho telefonátů od naštvaných spolupracovníků! Zapamatujte si také, že poslední příkaz se spouští asynchronně. To znamená, že když se pokusíte spustit zálohovací program hned poté, nemusí fungovat. Pokud jste obdrželi při prvním opakovaném pokusu chybové hlášení, počkejte pár vteřin a zopakujte zálohovací příkaz. Po úspěšném spuštění zálohovacího příkazu je vytvořen nový soubor, který obsahuje obraz databáze. Popis názvu souboru podle konvence ukazuje Obrázek 11.6.
190
Začínáme s DB2 Express-C
Obrázek 11.6 – Konvence názvu zálohovacího obrazu Typ “0” znamená, že záloha je plnou zálohou. Typ “3” znamená, že se jedná o zálohu tabulkového prostoru. Uzel má fixní hodnotu, NODE0000, pro databáze v jedné partitioně, což je případem všech DB2 edic, kromě DB2 Enterprise Edition s funkcí DPF. Katalogový uzel má také stejnou hodnotu, CATN0000. Pro více informací se podívejte do manuálů DB2. V případě, že se pořídí více záloh a uloží se do stejné lokace, je použito pro rozeznání mezi těmito image soubory časové razítko na konci souboru. Jak uvidíme v následující sekci, může příkaz RESTORE použít časový údaj z určené zálohy.
11.7 Obnova databáze Obnova databáze zahrnuje obnovu databáze ze zálohy a/nebo logů. Při obnově ze zálohy znovu vytvoříte databázi, která existovala v čase, kdy byla záloha pořízena. Pokud bylo archivní logování povoleno před zálohováním, můžete obnovit databázi nejen zálohovacím image souborem, ale také z logů. Jak uvidíme v následující sekci, obnova roll-forward vám umožní obnovovat ze zálohy a pak aplikovat (roll-forward) logy do konce logů nebo do specifického časového údaje.
11.7.1 Typy obnovení Existují tři typy obnovení:
Obnovení po havárii nebo restartu Předpokládejme, že pracujete na klientském počítači a spouštíte důležitou transakci v databázi DB2. Najednou vypadne proud nebo někdo náhodou vytáhne napájecí kabely od počítače: co se stane s databází? Až zapnete počítač a spustíte DB2, automaticky se spustí obnovení po havárii. Při obnovení po havárii spustí DB2 automaticky příkaz RESTART DATABASE, který bude číst a přehrávat/rušit transakce na základě aktivního logu. Jakmile je příkaz dokončen, máte garantováno, že databáze zůstane v konzistentním stavu, tedy že transakce dříve potvrzené pomocí COMMIT budou zapsány na disk, a ostatní budou zrušeny.
Obnovení verze nebo obrazu Tento typ obnovení předpokládá, že obnovujete jen ze zálohovacího image souboru; proto vaše databáze bude umístěna do stavu při posledním pořizování zálohy.
Kapitola 11 – Záloha a obnovení
191
Jakékoliv transakce, které byly spouštěny v databázi po vytvoření zálohy, budou ztraceny.
Obnovení roll-forward S tímto typem obnovení nejenže provedete RESTORE ze zálohovaného image souboru, ale v závěru zálohy také spustíte příkaz ROLLFORWARD pro aplikaci logů, můžete tedy obnovovat ke specifickému časovému údaji. Tento typ obnovování minimalizuje ztráty dat.
11.7.2 Obnova databáze Pro obnovení databáze ze zálohovacího image souboru se používá příkaz RESTORE. Následující syntaxe je nejjednodušší, která může být použita: RESTORE DATABASE [from ] [taken at <čas.razítko>]
Například pokud máte zálohovaný image soubor databáze sample s tímto jménem:
Můžete provést obnovení takto: RESTORE DB sample FROM TAKEN AT 20101128105511
11.8 Další operace s BACKUP a RESTORE Následuje seznam několika funkcionalit, pro které můžete také využít příkazy BACKUP a RESTORE. Doporučujeme vám vyhledat detailní informace v manuálu DB2. Záloha databáze v 32-bitové instanci a její obnovení v 64-bitové instanci Obnovení přes existující databázi Použití přesměrovaného obnovení na systém, kde je jiný počet disků, než je specifikovaný v image souboru Záloha a obnova na základě tabulkového prostoru, nikoliv celé databáze Provádění deltové a přírůstkové zálohy; delta záloha zaznamenává jen změny od jedné zálohy k druhé záloze, zatímco přírůstková záloha zaznamenává všechny změny a hromadí je do zálohovacího image souboru Záloha z FlashCopy (požadavkem je správný hardware) Obnovení smazaných tabulek (pokud byla možnost pro danou tabulku povolena)
Začínáme s DB2 Express-C
192
Záloha z jedné platformy (například Windows) a následné obnovení na jinou platformu (například Linux) není možná. V těchto případech použijte db2look a db2move. Pokud jde o edice DB2 podporující UNIXové operační systémy, záloha a obnovení z jedné UNIX platformy do druhé bude kompatibilní.
11.9 Shrnutí V této kapitole jsme prozkoumali funkci logování v DB2, včetně dvou typů logů (primární a sekundární), dvou typů logování (kruhový a archivní) a různé parametry databáze, které souvisí s logováním. Pro každý typ logování jsme si vysvětlili, kdy a proč se používá a jak jej nastavit z Řídicího centra. Také jsme se podívali na to, jak spustit zálohu a obnovu pomocí Příkazové řádky DB2, včetně detailního pohledu na tři typy databázových obnovení: havarijní, verzové a rollforward.
11.10 Cvičení Přestože je DB2 schopno automatizovaně provádět aktivity údržby databáze, někdy chcete mít pod kontrolou, kdy se jaká aktivita objeví. V tomto cvičení vytvoříte upravenou noční zálohu pro databázi EXPRESS. Postup 1. Ze stromovité struktury v levém panelu Řídicího centra otevřete Řídicí centrum → Všechny databáze. Klikněte pravým tlačítkem na databázi EXPRESS a vyberte položku Zálohovat. Otevře se Průvodce zálohováním. 2. Stránka Úvod v průvodci sumarizuje aktuální stav databáze včetně času poslední zálohy a logovací metody. Klikněte na tlačítko Další pro přesunutí na další stránku průvodce. 3. V průvodci na stránce Obraz vyberte cíl záložního obrazu. Typicky vyberete jiný fyzický disk, než kde máte uložený existující záložný image soubor. Pro náš příklad vytvořte nový adresář na systémovém disku C:\db2backup a určete tento adresář jako zálohovací lokaci. V průvodci vyberte z roletky Typ média položku Souborový systém. Klikněte na tlačítko Přidat, vyberte adresář, který jste vytvořili, a pak klikněte na tlačítko OK. Pro přesun na další stránku průvodce klikněte na tlačítko Další. 4. Můžete prozkoumat stránky Volby a Výkon, ale defaultní hodnoty jsou většinou dostačující, protože DB2 automaticky provádí databázovou zálohu v nejoptimálnějším nastavení. Pokud jste zmíněné záložky prozkoumali, přesuňte se na stránku Naplánovat. 5. Pokud není na stránce Naplánovat povolený plánovač, povolte ho nyní. Vyberte, aby systém vytvořil katalog nástrojů, a vytvořte nový katalog. Zadejte schéma pro katalog nástrojů a vyberte jeho vytvoření v existující databázi EXPRESS. Katalog nástrojů uchovává metadata o všech naplánovaných úlohách. Pro pokračování
Kapitola 11 – Záloha a obnovení
193
klikněte na tlačítko OK. Jakmile je katalog nástrojů vytvořen, klikněte pro pokračování na tlačítko Další.
6. Na stránce Naplánovat vyberte Vytvořit jako úlohu v Centru úloh. Naplánujte zálohu tak, aby se spouštěla každý den v 1 hodinu ráno. Pro pokračování na další stránku klikněte na tlačítko Další.
194
Začínáme s DB2 Express-C
7. Na stránce Souhrn můžete překontrolovat naplánované úlohy, které budou vytvořeny. Pokud máte překontrolováno, pro vytvoření úlohy klikněte na tlačítko Dokončit. 8. Pro zobrazení nebo modifikaci nově vytvořené zálohovací úlohy spusťte Centrum úloh.
12 Kapitola 12 – Úlohy pro údržbu Tato kapitola pojednává o úlohách potřebných pro dobrou údržbu vašich databází. Celkovou tendencí DB2 je automatizovat většinu těchto úloh. Edice DB2 Express-C, stejně jako ostatní aktuální DB2 edice, tyto automatizované možnosti obsahují. Uvedená samospráva je velkou výhodou pro malé a střední firmy, které si nemohou dovolit platit databázového správce na plný pracovní úvazek. Na druhou stranu, stávající DBA bude mít více volného času na provádění složitějších aktivit, které budou pro společnost přínosné. Poznámka: Pro více informací o údržbových úlohách se podívejte na video: http://www.channeldb2.com/video/video/show?id=807741:Video:4302
12.1 REORG, RUNSTATS, REBIND V DB2 existují tři hlavní úlohy pro údržbu, jak je naznačeno na Obrázku 12.1: REORG, RUNSTATS a REBIND.
Obrázek 12.1 – Úlohy pro údržbu: REORG, RUNSTATS, REBIND
Obrázek 12.1 ukazuje kruhový cyklus spouštění úloh pro údržbu. Pokud je spouštěn REORG, je doporučováno také spustit RUNSTATS a po něm REBIND. Po nějakém čase se díky operacím UPDATE, DELETE a INSERT změní data v tabulce. Cyklus znovu začne úlohou REORG.
196
Začínáme s DB2 Express-C
12.1.1 Příkaz REORG Při provádění operací INSERT, UPDATE a DELETE ve vaší databázi dochází postupem času k fragmentaci vašich dat v databázových stránkách . Příkaz REORG získává zpět ztracený prostor a reorganizuje data tak, aby jejich získávání bylo efektivnější. Nejvíce z příkazu REORG vytěží často modifikované tabulky. Stejně jako na tabulky můžete REORG použít i na indexy. REORG může být spouštěn v online nebo offline režimu. Offline REORG je rychlejší a efektivnější, ale nepovoluje přístup k tabulce. Online REORG povoluje přístup k tabulce, ale spotřebuje více systémových prostředků; pracuje nejlépe na malých tabulkách. Syntaxe: REORG TABLE
Příklad: REORG TABLE employee
Pro zjištění, zda tabulky nebo index potřebují být reorganizovány, může být před REORG použit příkaz REORGCHK.
12.1.2 Příkaz RUNSTATS DB2 optimalizátor je “mozkem” DB2. Nalézá nejefektivnější přístupové cesty k nalezení a získání dat. K maximalizaci databázového výkonu optimalizátor zvažuje cenu dotazu za pomoci statistiky databázových objektů, jenž je uložena v katalogových tabulkách. Katalogové tabulky vedou statistiky například o počtu sloupců a řádků v tabulce, počtu a typech indexů, atd. Statistické informace se neaktualizují dynamicky, takový je stávající design produktu. Určitě byste nechtěli, aby DB2 aktualizovala statistiky po každé operaci provedené v databázi,; to by negativně ovlivnilo celkový výkon samotné databáze. Místo toho DB2 nabízí příkaz RUNSTATS, který tyto statistiky aktualizuje. Je velice důležité uchovávat databázové statistiky aktuální. DB2 optimalizátor může zásadním způsobem změnit přístupovou cestu k datům, jestliže předpokládá velikost tabulky jeden řádek versus milion řádků. S aktuálními databázovými statistikami může DB2 vybrat lepší přístupový plán. Frekvence aktualizace statistik by měla být určena četností změn dat v tabulce. Syntaxe: RUNSTATS ON TABLE <schéma.název_tabulky>
Příkaz: RUNSTATS ON TABLE myschema.employee
Kapitola 12 – Úlohy pro údržbu
197
12.1.3 BIND / REBIND Úspěšné spuštění příkazu RUNSTATS neznamená, že všechny dotazy budou používat nejnovější statistiky. Přístupový plán pro statické příkazy SQL je vytvořen v okamžiku spuštění příkazu BIND, takže statistiky použité v tomto čase nemusí být totožné s aktuálními. Tuto myšlenku vám více přiblíží Obrázek 12.2.
Obrázek 12.2 – Bind proces pro statické příkazy SQL Na Obrázku 12.2 je znázorněna předkompilace embedded C programu (uloženého jako soubor s příponou “sqc”). Předkompilace vygeneruje dva soubory: jeden s příponou “.c”, který obsahuje kód jazyka C bez SQL kódu a druhý “.bnd” obsahující všechny SQL příkazy. C soubor s příponou “.c” je kompilovaný jako obvykle překladačem C a vytváří „knihovnu“, jak je ukázáno vpravo nahoře na obrázku. Se souborem “.bnd” je to podobně, jeho navázáním (pomocí BIND) se vygeneruje balíček, který je uložen v databázi. Vázání je ekvivalentem pro kompilování SQL příkazů, kde je nejvhodnější přístupový plán určován na základě statistik dostupných v daném čase. Vytvořený plán je poté uložen do balíčku. Co se stane, pokud nyní za pomoci C programu vložíme do tabulky 1 milion řádků? Jestliže poté spustíme RUNSTATS, statistiky se zaktualizují, avšak balíček se automaticky nezaktualizuje, tedy přístupové cesty se nepřepočítají s využitím posledních statistik. Pro vyžití nejnovějších statistik je třeba použit příkaz db2rbind, který znovu naváže veškeré existující balíčky. Syntaxe: db2rbind database_alias -l
Příklad: Pro rebind včech balíčků databáze SAMPLE a uložení výstupního logu do souboru mylog.txt spusťte tento příkaz:
198
Začínáme s DB2 Express-C db2rbind sample -l mylog.txt
12.1.4 Úlohy pro údržbu z Řídicího centra Z Řídicího centra můžete spustit REORG a RUNSTATS, jak ukazuje Obrázek 12.3.
Obrázek 12.3 – REORG a RUNSTATS z prostředí Řídicího centra Vyberete si tabulku, se kterou chete operovat, klikněte pravým tlačítkem a zvolte Reorganizovat (pro REORG) nebo Spustit statistiku (pro RUNSTATS). 12.1.4.1 Databázový operační pohled Po výběru databáze vám databázový operační pohled v pravé spodní části okna Řídicího centra sdělí informace o databázi, například její velikost, datum poslední zálohy, nastavený čas automatické údržby, atd. Tento pohled vás rychle informuje o tom, jaké zásahy údržby jsou ve vaší databázi zapotřebí, viz Obrázek 12.4.
Kapitola 12 – Úlohy pro údržbu
199
Obrázek 12.4 – Databázový operační pohled z Řídicího centra
12.2 Možnosti údržby Existují tři možnosti, jak provést úkoly údržby: Manuální údržba Můžete spouštět aktivity údržby manuálně dle potřeby. Tvorba skriptů pro provádění údržby Můžete vytvořit skripty s příkazy pro údržbu a naplánovat jejich opakující se spouštění. Automatická údržba DB2 se automaticky postará o údržbu (REORG, RUNSTATS, BACKUP). V této sekci se zaměříme na automatickou údržbu. Automatická údržba se skládá z: Uživatelsky definovaného údržbového „okna“, kde se úkoly mohou spouštět s minimálním přerušením. Například pokud má systém nejmenší aktivitu v neděli mezi 2:00 až 4:00 ráno, tento časový interval by mohl být využit jako údržbové „okno“.
200
Začínáme s DB2 Express-C Existují dvě údržbová „okna“: jedno pro online operace a druhé pro offline operace. DB2 bude provádět údržbové operace automaticky jen tehdy, když budou zapotřebí, a to v údržbovém „okně“.
Z Řídicího centra můžete spustit Konfigurování automatické údržby, jak je ukázáno na Obrázku 12.5.
Obrázek 12.5 – Spuštění průvodce konfigurací automatické údržby Obrázek 12.6 ukazuje průvodce konfigurace automatické údržby.
Kapitola 12 – Úlohy pro údržbu
201
Obrázek 12.6 – Konfigurovat automatickou údržbu – průvodce
12.3 Shrnutí Tato kapitola probrala důležitost údržby vašich databází, včetně role cyklu REORG, RUNSTATS a REBIND. Příkaz REORG, jak název napovídá, reorganizuje vaše data tak, aby se eliminovala fragmentace a data se načítala rychleji. RUNSTATS aktualizuje statistické informace užívané optimalizačním nástrojem DB2 pro vylepšení výkonu. Procesy BIND nebo REBIND aktualizují databázové balíčky nejnovějšími přístupovými cestami. Také jsme se podívali na grafické nástroje poskytované v DB2 Řídicím centru pro aktivity údržby v manuálním, skriptovaném a automatickém módu.
12.4 Cvičení V tomto cvičení budete konfigurovat automatickou údržbu v DB2 databázi SAMPLE. Postup 1. Z konfigurace Řídicího centra, stromové struktury v levém panelu, klikněte pravým tlačítkem na databázi SAMPLE a vyberte položku Konfigurovat automatickou údržbu. Spustíte tak průvodce Konfigurovat automatickou údržbu.
202
Začínáme s DB2 Express-C 2. Stránka průvodce Úvod zobrazuje současné nastavení automatické údržby. Pokud byla databáze vytvořena s možností automatické údržby, pak už je údržba nakonfigurována. Průvodce můžete použít pro změnu možností automatické údžby. Pro přesun na další stránku klikněte na tlačítko Další. 3. Stránka průvodce Typ se vás ptá, zda chcete zakázat všechny automatické údržby, nebo zda chcete změnit nastavení automatické údržby. Vyberte možnost pro změnu současné automatické údržby a klikněte na tlačítko Další. 4. Stránka Časování po vás chce určení okna pro údržbu. Nakonfigurujte databázi, aby byla offline v sobotu a v neděli mezi půlnocí a 6:00 ráno, jak je ukázáno níže. Klikněte na tlačítko Změnit (vedle okna údržby offline) a vyberte požadované časy. Po určení požadovaných informací klikněte na tlačítko OK pro návrat do průvodce. Nechte online okno tak, jak je (online údržba může nastat kdykoliv). Klikněte na tlačítko Další.
5. Na stránce Upozornění můžete nastavit kontakt pro případ selhání aktivity. Nyní ale tento krok přeskočte. Klikněte na tlačítko Další. 6. Na stránce Aktivity si vybíráte u specifických aktivit, zda je chcete spouštět individuálně automaticky nebo neautomaticky. V tomto příkladu se ujistěte, že jsou všechna zaškrtávací pole Automaticky zaškrtnuta a zaškrtávací pole Upozornit zaškrtnuta nejsou. Klikněte na tlačítko Další. 7. Před přechodem na další stránku průvodce byste měli zkonfigurovat zálohovou lokaci databáze. Vzhledem k možnosti poškození disku by bylo ideální ukládat
Kapitola 12 – Úlohy pro údržbu
203
zálohy na jiný disk,. Ze stránky Aktivity vyberte možnost Zálohovat databázi (BACKUP) a klikněte na tlačítko Konfigurovat nastavení. 8. V záložce Kritéria zálohování dialogového okna Konfigurovat natavení vyberte možnost Vyvážit možnost zotavení a výkon. V záložce Umístění zálohy vyberte existující zálohovací lokaci a klikněte na tlačítko Změnit. Zvolte jinou lokaci pro provedení zálohy (ujistěte se, že na jednotce máte dostatek místa). V záložce Režim zálohování se ujistěte, že je vybrán Zálohovat offline. Klikněte na tlačítko OK pro zavření záložky Konfigurovat nastavení. Klikněte na tlačítko Další. 9. Stránka Souhrn v průvodci Konfigurovat automatickou údržbu obsahuje shrnutí hodnot, které jste vybrali. Pro akceptování a provedení změn klikněte na tlačítko Dokončit.
13 Kapitola 13 – Souběžnost a uzamykání 1
Tato kapitola se bude zabývat tím, jak povolit více uživatelům přístup do databáze, aniž by se vzájemně ovlivňovali, a jak uchovat jejich operace konzistentní. Probereme koncepty transakcí, souběžnosti a uzamykání. Poznámka: Pro více informací o souběžnosti a uzamykání se podívejte na následující video: http://www.channeldb2.com/video/video/show?id=807741:Video:4322
13.1 Transakce Transakce nebo také pracovní jednotka se skládá z jednoho nebo více SQL příkazů, které se při spuštění chovají jako jednotka. To znamená, že pokud jeden příkaz selže, neprovede se celá transakce a jakýkoliv krok, který byl proveden před tímto selháním, se vrátí zpět. Transakce končí příkazem COMMIT, což také znamená start nové transakce. Obrázek 13.1 znázorňuje příklad transakce.
Obrázek 13.1 – Příklad transakce Na Obrázku 13.1 je příklad, kdy chcete přesunout 100 dolarů z vašeho spořicího účtu na účet platební. Jak je ukázáno na obrázku, může být pro splnění tohoto úkolu vyžadována následující sekvence: 1
Termín souběžnost je synonymem pro frekventovanější sousloví - konkurenční přístup.
206
Začínáme s DB2 Express-C - Odečíst 100 dolarů ze spořicího účtu - Přičíst 100 dolarů na platební účet
Představte si, co by se stalo, pokud by se uvedené akce neprováděly jako jednotka práce, transakce. Pokud by vypadl proud poté, co se odepsala částka z vašeho spořicího účtu, ale předtím, než by se připsala na účet platební, přišli byste o 100 dolarů!
13.2 Souběžnost Souběžnost předpokládá, že několik uživatelů může pracovat ve stejném čase ve shodných databázových objektech. Databázový systém DB2 byl navržen jako systém víceuživatelský. Přístup k datům musí být správně koordinovaný a musí transparentně používat mechanismus pro zajištění konzistence a integrity dat. Podívejte se na příklad znázorněný na Obrázku 13.2.
Obrázek 13.2 – Příklad souběžnosti a potřeba jejího kontrolování Na Obrázku 13.2 jsou čtyři aplikace, App A, App B, App C a App D, které se pokouší přistupovat do stejného řádku (řádek 2) v tabulce. Bez jakékoliv kontroly souběžnosti by všechny aplikace mohly provádět operace na stejném řádku. Pokud budeme předpokládat, že všechny aplikace budou aktualizovat sloupec Age v řádku 2 odlišnými hodnotami, aplikace, která by aktualizovala hodnotu jako poslední, by byla v této situaci „vítězem“. Na příkladu je zjevné, že je zapotřebí určitého řazení souběžnosti pro garanci konzistence výsledků. Tato souběžnost je založena na používání zámků. Koncepty uzamykání a souběžného přístupu jdou ruku v ruce. Uzamykání dočasně zastaví provádění operací ostatních aplikací, dokud se nedokončí jiná operace. Čím více je uzamykání v systému, tím méně je možná souběžnost a naopak – čím méně je v systému uzamykání, tím více je možná souběžnost. Zámky se získávají automaticky, jsou zapotřebí pro podporu transakcí a zanikají, když transakce skončí (ať už užitím příkazu COMMIT nebo ROLLBACK). Zámky mohou být získány pro tabulky nebo řádky a existují dva jejich základní typy: Sdílené zámky (S zámky) – získaný, pokud aplikace chce číst a zabránit ostatním, aby aktualizovali stejný řádek Exkluzivní zámek (X zámky) – získá se, pokud aplikace aktualizuje, vkládá nebo maže řádek
Kapitola 13 – Souběžnost a uzamykání
207
Nyní se podívejte na Obrázek 13.3, který je podobný Obrázku 13.2, ale nyní ukazuje také zámek.
Obrázek 13.3 – Příklad souběžnosti a potřeby zámků Například pokud v Obrázku 13.2 App B jako první přistupuje k řádku 2 a provádí UPDATE, X zámek App B pozastaví úpravy v řádku. Pokud se App A, App C a App D pokouší přistoupit do stejného řádku, nebudou schopny provést UPDATE, protože existuje X zámek. Tato kontrola umožňuje konzistenci a integritu dat.
13.3 Problémy bez kontroly souběžnosti Bez určité formy kontrolování souběžnosti mohou nastat tyto problémy Ztráta aktualizace Nepotvrzené čtení Neopakovatelné čtení Fantomové čtení
13.3.1 Ztráta aktualizace Ztráta aktualizace je problém podobný tomu, který byl vysvětlován dříve v této sekci, kde aplikace, která prováděla poslední změnu byla „vítězem“.
Obrázek 13.4 – Ztracená aktualizace
208
Začínáme s DB2 Express-C
Na Obrázku 13.4 existují dvě aplikace, které se snaží aktualizovat stejný řádek. Ta nalevo je App1 a ta po pravé straně je App2. Pořadí událostí je tedy: 1. App1 zaktualizuje řádek 2. App2 zaktualizuje stejný řádek 3. App1 transakci potvrdí 4. App2 transakci potvrdí Aktualizace aplikace App1 je ztracena, jakmile aplikace App2 provede svou aktualizaci, proto se takovému problému říká „Ztráta aktualizace“.
13.3.2 Nepotvrzené čtení Nepotvrzené čtení (uncommited read) nebo také „špinavé čtení“ (dirty read) umožňuje aplikaci číst informace, které nejsou ještě potvrzené, proto tedy nemusí být přesné.
Obrázek 13.5 – Nepotvrzené čtení Obrázek 13.5 znázorňuje toto pořadí událostí: 1. App1 aktualizuje řádek 2. App2 čte novou hodnotu z řádku 3. App1 vrací zpět změny, které byly provedeny pro tento řádek App2 čte nepotvrzená, neplatná data. Této situaci se také říká nepotvrzené čtení.
13.3.3 Neopakovatelné čtení Neopakovatelné čtení předpokládá, že nemůžete obdržet stejné výsledky, pokud spouštíte stále stejné operace.
Kapitola 13 – Souběžnost a uzamykání
209
Obrázek 13.6 – Neopakovatelné čtení Obrázek 13.6 naznačuje situaci, kdy si chcete zarezervovat letenku z Dallasu do Honolulu. Pořadí jednotlivých událostí je: 1. App1 otevře kurzor (také známý jako množina výsledků) a získá to, co je možno vidět na Obrázku 13.6 2. App2 smaže řádek, který je obsažen v kurzoru (například řádek. Kde je destinací „San Jose“) 3. App2 potvrdí změny 4. App1 zavře a znovuotevře kurzor V tomto případě nemůže být znovu reprodukována původní datová sada, App1 nedostane stejná data při čtení; těmto problémům se říká “neopakovatelné čtení”.
13.3.4 Fantomové čtení Problém fantomového čtení je podobný, jako již zmíněný problém neopakovatelného čtení, s tím rozdílem, že v následujícím čtení můžete obdržet dodatečné řádky navíc. Obrázek 13.7 ukazuje příklad tohoto problému.
210
Začínáme s DB2 Express-C
Obrázek 13.7 – Fantomové čtení Obrázek 13.7 ukazuje následující posloupnost událostí: 1. App1 otevře kurzor 2. App2 přidá řádek do databáze, který by patřil do zmíněného kurzoru 3. App2 potvrdí změny 4. App1 zavře a znovuotevře kurzor V tomto případu App1 nedostane stejná data při opakovaném čtení, získá jich více, proto je tento problém nazývaný „fantomové čtení“.
13.4 Úrovně izolace Uvažujte o úrovních izolace jako o pravidlech uzamykání; na základě výběru úrovně izolace můžete v aplikaci při kontaktu s databází obdržet rozdílné chování. DB2 poskytuje různé úrovně ochrany pro izolaci dat: Nepotvrzené čtení (Uncommitted Read - UR) Kurzorová stabilita (Cursor Stability - CS) Čtecí stabilita (Read Stability - RS) Opakovatelné čtení (Repeatable Read RR)
13.4.1 Nepotvrzené čtení Nepotvrzené čtení je také známé jako špinavé čtení (dirty read). Jedná se o nejnižší úroveň izolace a poskytuje nejvyšší stupeň souběžnosti. Při čtecích operacích se neobjevuje uzamykání řádků, ledaže by se jiné aplikace pokusily odstranit nebo změnit
Kapitola 13 – Souběžnost a uzamykání
211
tabulku; a operace aktalizace se chovají, jako by používaly izolační úroveň kurzorové stability. Stále možný výskyt problémů na této úrovni izolace: Nepotvrzené čtení Neopakovatelné čtení Fantomové čtení Problémy, kterým tato úroveň izolace předchází: Ztráta aktualizace
13.4.2 Kurzorová stabilita Kurzorová stabilita je defaultní úrovní izolace. Poskytuje minimální stupeň uzamykání. Velice stručně – s touto úrovní izolace je "aktuální" řádek kurzoru uzamčen. Pokud je řádek pouze čten, zámek trvá, dokud se nezíská řádek další nebo dokud není jednotka práce ukončena. Pokud je řádek aktualizován, zámek trvá, dokud není jednotka práce ukončena. Stále možný výskyt problémů na této úrovni izolace: Neopakovatelné čtení Fantomové čtení Problémy, kterým tato úroveň izolace předchází: Ztráta aktualizace Nepotvrzené čtení 13.4.2.1 Aktuální potvrzení V dřívějších verzích DB2 (než v 9.7) při použití úrovně izolace kurzorové stability zapisovač (operace UPDATE) zakazoval čtenáři (operace SELECT) přístup k stejnému řádku. Logické tedy bylo, že pokud zapisovač dělá změny v řádku, proces čtení by měl čekat, než se dokončí změny a uvidí hodnotu po konečném potvrzení. V DB2 verze 9.7 existuje nové chování izolační úrovně kurzorové stability pro nové databáze. Toto nové chování je implementováno používáním sémantiky aktuálního potvrzení (currently committed - CC). S CC zapisovač nebude zabraňovat čtení v přístupu na stejný řádek. Toto chování bylo také možné v minulosti, pokud se použila úroveň izolace nepotvrzené čtení (UR); každopádně rozdílem je, že UR při čtení obdrží nepotvrzenou hodnotu, zatímco s CC čtení obdrží aktuálně potvrzenou hodnotu. Aktuálně potvrzená hodnota je potvrzená hodnota před startem operace. Například mějme tabulku T1 s následujícím obsahem: FIRSTNAME
LASTNAME
212 Raul Jin
Začínáme s DB2 Express-C Chong Xie
Nyní vaše aplikace AppA spustí tento příkaz, ale nepotvrdí ho: update T1 set lastname = 'Smith' where firstname = 'Raul'
Poté aplikace AppB spustí tento příkaz: select lastname from T1 where firstname = 'Raul' with CS
V minulých verzích, před DB2 9.7 tento příkaz bude „viset“, protože bude čekat, až se uvolní exkluzivní zámek, držený příkazem pro aktualizaci aplikací AppA (zapisovač). S DB2 verze 9.7 a povoleným aktuálním potvrzením (defaultně pro nové databáze) vrátí příkaz aktuálně potvrzenou hodnotu, což je Chong. Všimněte si, že přestože je CS defaultní, v příkazu pro zřejmost píšeme 'with CS'. Budeme se o tom více bavit později v kapitole. Pokud AppB zkusí tento příkaz: select lastname from T1 where firstname = 'Raul' with UR
Pokud je použita izolace UR, výsledkem bude Smith, což je nepotvrzená hodnota. Tento příklad ukazuje, jak je díky CC vylepšena souběžnost pro aplikace tím, že umožňuje přístup čtení v řádku, který je zároveň zapisovačem aktualizován. Dalším scénářem, který mohl nastat v minulých verzích DB2 je, že čtení zamezilo zapisovači přístup k řádku. Tento případ byl jedním z důvodů, proč se COMMIT doporučoval také pro čtecí operace, jelikož se může ujistit, že sdílený zámek (S) bude uvolněn. S CC toto není nutné, protože čtení nebude blokovat zápis. Pokud jde o nepotvrzené operace INSERT, čtecí operace je defaultně přeskočí, což znamená, že výsledná sada tyto řádky nezobrazí. Pro příkazy DELETE by čtecí operace také měla přeskočit (ignorovat) ovlivněné řádky, ale chování závisí na hodnotě proměnné registru DB2 - DB2_SKIPDELETED. Defaultní chování CC mohou změnit další proměnné registrů a vlastnosti v příkazech BIND a PREPARE. Zapamatujte si: Aktuální potvrzení znamená, že se zobrazí pouze aktuálně potvrzené informace, proto budou nepotvrzené INSERT nebo DELETE operace ignorovány. Jak bylo zmíněno dříve, CC je v nových databázích defaultně povoleno. Pokud jej chcete vypnout nebo povolit pro databáze vzniklé před DB2 verze 9.7 a upgradované na verzi DB2 9.7, můžete zaktualizovat konfigurační hodnotu na CUR_COMMIT. Například pro jeho vypnutí v databázi SAMPLE spusťte: db2 update db cfg for sample using CUR_COMMIT off
Kapitola 13 – Souběžnost a uzamykání
213
db2stop db2start
13.4.3 Čtecí stabilita Se čtecí stabilitou jsou všechny řádky, které aplikace obdrží (během jednotky práce), uzamknuty. Například pokud máte tabulku, která obsahuje 10 000 řádků a dotaz vrátí 10 řádků, je uzamknuto jen těchto 10 řádků. Čtecí stabilita užívá mírný stupeň uzamykání. Problémy, které jsou s touto úrovní izolace stále možné: Fantomové čtení Problémy, kterým tato úroveň izolace předchází: Ztráta aktualizace Nepotvrzené čtení Neopakovatelné čtení
13.4.4 Opakovatelné čtení Opakovatelné čtení je nejvyšší úrovní izolace. Poskytuje nejvyšší stupeň uzamykání a nejmenší stupeň souběžnosti. Zámky setrvávají na všech řádcích, ze kterých se tvoří výsledná sada; to znamená, že i řádky, které nemusí být ve výsledné sadě, mohou být uzamknuté. Žádná jiná aplikace nemůže aktualizovat, mazat nebo přidávat řádek, který by mohl ovlivnit výslednou sadu do doby, než je jednotka práce vykonána. Opakovatelné čtení zaručuje, že stejný dotaz spuštěný aplikací více než jednou ve stejné jednotce práce, vrátí pokaždé stejný výsledek. Problémy, které jsou s touto úrovní izolace stále možné: žádný Problémy, kterým tato úroveň izolace předchází: Ztráta aktualizace Nepotvrzené čtení Neopakovatelné čtení Fantomové čtení
13.4.5 Porovnání úrovní izolace Obrázek 13.8 porovnává různé úrovně izolace. Je z něj patrné, že úroveň izolace nepotvrzeného čtení (UR) nevyužívá zámků. Úroveň izolace kurzorové stability (CS) využívá zámku pro řádek 1, když z něj čte, ale zámek uvolní, jakmile přejde na řádek 2, atd. Pro úrovně izolace čtecí stability (RS) nebo opakovatelného čtení (RR) platí, že jakýkoliv získaný řádek bude uzamčen a uzamčení potrvá až do doby, kdy je transakce ukončena (po potvrzení transakce).
214
Začínáme s DB2 Express-C
Obrázek 13.8 – Porovnávání úrovní uzamkyání pro získávání dat
13.4.6 Nastavení úrovně izolace Úrovně izolace mohou být specifikovány na několika úrovních: Sezení (application) Připojení Příkaz Úroveň izolace je obvykle definována v sezení nebo na úrovni aplikace. Pokud není ve vaší aplikaci specifikována úroveň izolace, použije se defaultní kurzorová stabilita. Tabulka 13.1 ukazuje možné úrovně izolace pro programy .NET nebo JDBC a dále ukazuje, jak tyto vlastnosti, pokud jsou nastaveny, odpovídají izolační úrovni DB2.
DB2
.NET
JDBC
Uncommitted Read (UR)
ReadUncommitted
TRANSACTION_READ_UNCOMMITTED
Cursor Stability (CS)
ReadCommitted
TRANSACTION_READ_COMMITTED
Read Stability (RS)
RepeatableRead
TRANSACTION_REPEATABLE_READ
Repeatable Read (RR)
Serializable
TRANSACTION_SERIALIZABLE
Tabulka 13.1 – Porovnání úrovní izolace
Kapitola 13 – Souběžnost a uzamykání
215
Úroveň izolace v příkazu může být nastavena pomocí klauzule WITH {úroveň_izolace}. Například: SELECT ... WITH {UR | CS | RS | RR}
Příklad v praxi: Aplikace potřebuje získat „hrubý“ počet záznamů v tabulce. Výkon systému má nejvyšší prioritu. Je vyžadována úroveň izolace stabilního kurzoru, s výjimkou jednoho SQL příkazu: SELECT COUNT(*) FROM tab1 WITH UR
Pro vložené SQL je úroveň nastavena v čase svázání, pro dynamické SQL je úroveň nastavena v době spuštění. Výběr toho, jakou úroveň izolace použít, záleží na vaší aplikaci. Pokud vaše aplikace nepotřebuje přesný počet, jak bylo ukázáno na obrázku výše, vyberte izolaci UR. Pokud vaše aplikace vyžaduje velice úzkou kontrolu nad daty, se kterými pracuje, vyberte izolaci RR. Pro použití aktuálního potvrzení v čase svázání nebo přípravy, použijte syntaxi: BIND: >--+-------------------------------------------------------------+--> '--CONCURRENTACCESSRESOLUTION--+--USE CURRENTLY COMMITTED--+--' '--WAIT FOR OUTCOME---------'
PREPARE: concurrent-access-resolution: |-+-USE CURRENTLY COMMITTED-+--------------------------| '-WAIT FOR OUTCOME--------'
V JDBC aplikaci, která používá IBM Data Server Driver pro JDBC a SQLJ, můžete pro povolení aktuálního potvrzení použít vlastnost concurrentAccessResolution.
13.5 Eskalace zámků Každý zámek provedený DB2 spotřebuje určité množství paměti. Pokud si optimalizátor myslí, že je lepší mít jeden zámek pro celou tabulku než více zámků pro jednotlivé řádky, dochází k eskalaci zámků. Proces ilustruje Obrázek 13.9.
216
Začínáme s DB2 Express-C
Obrázek 13.9 – Eskalace zámku Existují dva hlavní parametry databázové konfigurace, které se týkají eskalace zámků: LOCKLIST – Množství paměti (v 4k stránkách), které je rezervované pro správu zámků pro všechny připojené aplikace. MAXLOCKS – Procento z celého seznamu zámků, které může jedna aplikace maximálně využívat. Defaultní hodnotou pro oba parametry je AUTOMATIC, což znamená, že samoladící správce paměti (STMM) tuto velikost modifikuje automaticky. Pokud nepovolíte STMM a nastavíte hodnotu sami, tyto hodnoty ovlivní výskyt eskalace zámků. Například pokud nastavíte LOCKLIST na 200K a MAXLOCKS na 22%, pak eskalace zámků nastane, když jedna aplikace vyžaduje více, než 44K paměti na zámky (200 K * 22% = 44K). Pokud se eskalace zámků objevuje s tímto nastavením častěji, zvyšte hodnotu LOCKLIST a MAXLOCKS. Eskalace zámků není dobrá pro výkon, jelikož redukuje souběžnost. Pro zjištění, kdy nastává eskalace zámků, může být použit diagnostický logovací soubor DB2 (db2diag.log) . Pro více informací o tomto souboru se podívejte do Přílohy A.
13.6 Monitorování uzamykání Používání zámků DB2 aplikací můžete monitorovat snímkováním zámků. Pro zapnutí snímkování zámků spusťte tento příkaz: UPDATE MONITOR SWITCHES USING LOCK ON Jakmile je přepínač zapnutý, budou vloženy informace, které se monitorují. Pro obdržení reportu zámků v daném čase spusťte tento příkaz:
Kapitola 13 – Souběžnost a uzamykání
217
GET SNAPSHOT FOR LOCKS FOR APPLICATION AGENTID Obrázek 13.9 ukazuje výstup snímkování vzorové aplikace. Application Lock Snapshot Snapshot timestamp 00:09:08.672586
= 11-05-2002
Application handle Application ID Sequence number Application name Authorization ID Application status Status change time Application code page Locks held Total wait time (ms) List Of Locks Lock Name Lock Attributes Release Flags Lock Count Hold Count Lock Object Name Object Type Tablespace Name Table Schema
= = = = = = = = = =
= = = = = = = = =
9 *LOCAL.DB2.00B9C5050843 0001 db2bp.exe ADMINISTRATOR UOW Waiting Not Collected 1252 4 0
0x05000700048001000000000052 0x00000000 0x40000000 255 0 98308 Row TEST4K ADMINISTRATOR
Obrázek 13.9 – Snímkování aplikačního zámku Poznámka: Při vývoji DB2 verze 9.7 bylo vynaloženo vysoké úsilí pro přesun monitoringu databází od systémového monitoru a technologie snímkování směrem k SQL přístupu do interní paměti, například k funkcím správy tabulek, vytížení a nástrojům IBM Data Studia. Pro více informací se podívejte se na oficiální dokumentaci DB2.
13.7 Čekání zámků Pokud dvě nebo více aplikací potřebují provést operaci nad stejným objektem, jedna z nich musí čekat, aby obdržela potřebné uzamčení. Defaultně budou aplikace čekat do nekonečna. Čas, kdy aplikace čekají na zámek, je kontrolován jedním parametrem databázové konfigurace - LOCKTIMEOUT. Defaultní hodnotou tohoto parametru je -1 (nekonečné čekání).
218
Začínáme s DB2 Express-C
Registr CURRENT LOCK TIMEOUT může být použit pro nastavení zámku, který čeká na dané připojení. Defaultně je tento registr nastaven na hodnotu LOCKTIMEOUT. Pro změnu jeho hodnoty použijte příkaz SET LOCK TIMEOUT. Jakmile je hodnota tohoto registru pro připojení nastavena, bude se vztahovat na celou transakci. Příklad: SET LOCK TIMEOUT=WAIT n
13.8 Výskyty a detekce uváznutí (deadlock) Uváznutí nastane, pokud dvě nebo více aplikací připojených do stejné databáze čekají do nekonečna na zdroj. Čekání není nikdy vyřešeno, protože každá aplikace pozdržuje zdroje, které ostatní potřebují. Uváznutí jsou nejčastějším problémem při návrhu aplikací. Obrázek 13.10 ilustruje uváznutí.
Obrázek 13.10 – Scénář uváznutí Na Obrázku 13.10 uživatel A drží cereálie a nebude pokračovat, dokud nedostane mléko. Na druhé straně uživatel B drží mléko a nebude pokračovat, dokud nedostane cereálie. Proto tu máme situaci uváznutí. Výskyt uváznutí se v DB2 verze 9.7 díky používání aktuálního potvrzování výrazně zredukoval. Důvodem je fakt, že první aplikace nemusí čekat na druhou aplikaci, než uvolní zámek, ale místo toho zpřístupňuje aktuálně potvrzenou hodnotu. Pro simulaci uváznutí v DB2 následujte tyto kroky: 1. Vypněte aktuální potvrzování: db2 update db cfg for sample using cur_commit off db2stop force db2start
2. Otevřete dvě Příkazová okna DB2 (které budeme nazývat “CLP1”, resp. “CLP2”) reprezentující dvě rozdílné aplikace, které se připojují do databáze. 3. Z CLP1 spusťte tyto příkazy:
Kapitola 13 – Souběžnost a uzamykání
219
db2 connect to sample db2 +c update employee set firstnme = 'Mary' where empno = '000050'
Nejprve se připojujeme do databáze SAMPLE a pak spouštíme v tabulce employee aktualizační příkaz řádku, kde “empno = 000050”. Možnost “+c” v příkazu indikuje, že nechceme, aby Příkazové okno DB2 automaticky potvrzovalo příkaz. To děláme záměrně, abychom mohli držet zámky. 4. Z CLP2 spusťte příkazy: db2 connect to sample db2 +c update employee set firstnme = 'Tom' where empno = '000030'
V okně CLP2, které reprezentuje druhou aplikaci, se také připojujeme do databáze SAMPLE, ale aktualizujeme v tabulce employee jiný řádek.
5. Z CLP1 spusťte: db2 +c select firstnme from employee where empno = '000030'
Při začátku provádění příkazu SELECT, fyzicky - stisknutí klávesy Enter, to vypadá, že se dotaz zaseknul. Není zaseknutý, ale čeká na uvolnění exkluzivního zámku, který byl zabrán CLP2 na tomto řádku v kroku 3. V tomto bodě, pokud má LOCKTIMEOUT defaultní hodnotu (-1), zůstane aplikace na CLP1 čekat do nekonečna. 6. Z CLP2 spusťte: db2 +c select firstnme from employee where empno = '000050' Spuštěním SELECT příkazu, který je uvedený výše, nyní vytváříme uváznutí. Tento příkaz SELECT také bude vypadat zaseknutý, jelikož čeká na exkluzivní zámek, který byl vytvořen CLP1 na tomto řádku v kroku 2. V této příkladové situaci uváznutí zkontroluje DB2 parametr databázové konfigurace DLCHKTIME. Tento parametr nastavuje časový interval pro kontrolu uváznutí. Například pokud je parametr nastaven na 10 vteřin, DB2 každých 10 vteřin bude kontrolovat, zda nenastalo uváznutí. Samozřejmě, že pokud uváznutí nastane, použije DB2 interní algoritmus, aby rozhodl, která ze dvou transakcí bude vrácena a která bude pokračovat. Pokud čelíte většímu množství uváznutí, měli byste překontrolovat vaše existující transakce a podívat se, zda je možná změna jejich struktury.
13.9 Nejvhodnější přístupy k souběžnosti a uzamykání Uvádíme zde několik tipů, při jejich dodržování dosáhnete nejlepší možné míry souběžnosti: 1. Přesvědčte se, že jste povolili aktuální potvrzování (CC), pokud vám to dovoluje aplikační logika vaší aplikace.
220
Začínáme s DB2 Express-C 2. Mějte transakce co nejkratší. Toho může být docíleno častým spouštěním příkazu COMMIT (také pro transakce, při kterých se data jen načítají), pokud vám to dovolí aplikační logika vaší aplikace. 3. Logujte informace o transakcích, jen pokud je to vyžadováno. 4. Data mažte rychlým způsobem. Můžete spustit příkaz: ALTER TABLE ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE
Nebo nyní v DB2 verze 9.7 použijte příkaz TRUNCATE: TRUNCATE
5. Provádějte modifikaci dat v dávkách/skupinách. Například: DELETE FROM ( SELECT * FROM tedwas.t1 WHERE c1 = … FETCH FIRST 3000 ROWS ONLY)
6. Pro přesuny dat používejte možnosti souběžnosti u nástrojů DB2. 7. Nastavte parametr LOCKTIMEOUT na databázové úrovni (doporučené časy jsou mezi 30 a 120 vteřinami). Nenechávejte hodnotu defaultní (-1). Také můžete použít hodnotu založenou na sezeních. 8. Nečtěte více dat, než požadujete. Například použijte klauzuli FETCH FIRST n ROWS ONLY v příkazu SELECT.
Poznámka: Pro více informací o praktických radách o souběžnosti a uzamykání se podívejte na dokumenty „Best Practices“, které jsou dostupné na http://www.ibm.com/developerworks/data/bestpractices/
13.10 Shrnutí V této kapitole jsme se podívali na údržbu datové integrity přes transakční kontrolu, souběžnost uživatelského přístupu a úrovni uzamykání. Různé úrovně souběžnosti mají obtíže, které mohou ovlivnit správu a přístup k datům. Také jsme se detailně podívali na roli nastavení úrovní izolace, jak se vyrovnat s těmito problémy a jak se může s úrovní izolace pohybovat, aby se zaručila maximální možná míra flexibility, kterou vaše aplikace vyžadují. Také jsme se podívali na eskalaci zámků, čekání na zámky, monitorování zámků, spolu s příčinami, detekcemi a řešením databázových uváznutí. Nakonec jsme se podívali na nejvhodnější nápady z praxe, které vám umožní nejlepší možné výsledky pro potřeby vaší souběžnosti.
13.11 Cvičení Ve cvičení si procvičíte koncepty souběžnosti a uzamykání, které jsme probírali v této kapitole použitím Příkazového okna DB2. Tento nástroj používá defaultně úroveň izolace CS. Po spuštění příkazu SQL Příkazové automaticky spustí commit (což je také známo jako autocommit). Pro ilustrační účely budeme ve cvičení používat přepínač +c pro vypnutí autocommitu a použijeme klauzuli WITH <úroveň_izolace> pro několik SQL příkazů, aby se přepsala defaultní izolace. Část 1: Testování problému Fantomového čtení a izolace RR Postup: 1. Otevřete dvě Příkazová okna DB2, jak je ukázáno na obrázku níže. Budeme horní okno nazývat "Příkazové okno DB2 #1" a spodní pak "Příkazové okno DB2 #2"
2. Z Příkazového okna DB2 #1 spusťte:
222
Začínáme s DB2 Express-C db2 connect to sample db2 +c select * from staff
Dotaz vrátí 35 záznamů. 3. Z Příkazového okna DB2 #2 spusťte: db2 connect to sample db2 +c insert into staff (id,name) values (400, 'test')
4. Z Příkazového okna DB2 #1 spusťte: db2 +c select * from staff
Tento dotaz by měl stále vracet 35 záznamů. 5. Z Příkazového okna DB2 #2 spusťte: db2 commit
6. Z Příkazového Okna #1 spusťte: db2 +c select * from staff
Tentokrát je výsledkem 36 záznamů! Příkazové okno DB2 #1 reprezentuje jednu aplikaci, která otevřením kurzoru nebo výsledné sady (select * from staff) obdrží 35 záznamů. Během stejné transakce (protože v tomto okně nespouštíme žádný příkaz commit) aplikace otevře stejný kurzor a stále vidí 35 záznamů, přestože aplikace v Příkazovém okně DB2 #2 vloží (ale nepotvrdí) nový záznam. Dále aplikace z příkazového okna #2 provede potvrzení vložení, takže potřetí aplikace v Příkazovém oknu DB2 #1 otevře kurzor, sada výsledků vrátí o jeden záznam více (fantomové čtení), zobrazí tedy 36 záznamů. Tento příklad ilustruje problém fantomového čtení: Během stejné transakce otevření stejného kurzoru vrací více záznamů. Používáme úroveň izolace CS, jak bylo zmíněno dříve v kapitole, CS nepředchází problémům s fantomovým čtením. 7. Vyčistíme záznamy, které jsme přidali a zkusíme jiné kroky: Z Příkazového okna DB2 #1 spusťte: db2 rollback
Z příkazového okna DB2 #2 spusťte: db2 delete from staff where id = 400 db2 select * from staff
Opět se vrátí 35 záznamů.
Chapter 13 – Concurrency and Locking
223
8. Nyní se podívejme na úroveň izolace RR, která může předejít problému fantomového čtení. Z příkazového okna DB2 #1 spusťte: db2 connect to sample db2 +c select * from staff with RR
Vrátí se 35 záznamů. Z Příkazového okna DB2 #2 spusťte: db2 connect to sample db2 +c insert into staff (id,name) values (400, 'test')
Tento příkaz zůstane zaseknutý, což jsme předpokládali. Pokud je do příkazu SELECT v Příkazovém oknu DB2 #1 vložena klauzule WITH RR, tato úroveň izolace zabraňuje operaci INSERT na řádku, což by změnilo výslednou množinu. Příklad ilustruje, jak úroveň izolace RR zabraňuje problémům fantomového čtení. 9. Před pokračováním do druhé části příkladu opět pročistíme záznamy: Z Příkazového okna DB2 #2: Ctrl-C (to interrupt)
Zavřete okno. Z příkazového okna DB2 #1: db2 rollback
Zavřete okno. Část 2: Testování úrovně izolace aktuálně potvrzeného (CC) a nepotvrzeného čtení (UR) Postup 1: Analyzujte chování izolace CS bez předchozího potvrzení 1. Otevřete Příkazové okno DB2 a spusťte následující příkazy: db2 connect to sample db2 select * from staff
Prozkoumejte obsah tabulky STAFF, obzvláště se podívejte na ID hodnoty '10'. Hodnota odpovídající tomuto ID ve sloupci NAME je Sanders. Zavřete okno. 2. Aktuální potvrzení je defaultní pro nové databáze. Ověříme si, že je povolené pro ukázkovou databázi:
224
Začínáme s DB2 Express-C db2 get db cfg for sample
Podívejte se na konec řádku výstupu: Currently Committed
(CUR_COMMIT) = ON
Pokud je hodnota ON, nejprve ji vypněte (OFF), takto můžeme zkoumat chování izolace CS (jedná se o defaultní nastavení v dřívejších verzích, než je DB2 9.7): db2 update db cfg for sample using CUR_COMMIT off db2 force applications all
Přidáním možnosti force se ujišťujete, že neexistují žádná připojení, takže aktualizace CUR_COMMIT nabude platnosti při příštím připojení. Ověřte, že CUR_COMMIT není povolen. Mělo by se zobrazit: Currently Committed
(CUR_COMMIT) = DISABLED
3. Otevřete dvě Příkazová okna, jako v části 1 tak, že jedno bude nad druhým. Podívejme se, jak izolace CS pracuje bez aktuálně potvrzeného, když změna (zapisování) a výběr (čtení) mají zájem o stejný řádek. Zapamatujte si, že nepotřebujeme udávat "WITH CS" po příkazu (to je defaultní). Z Příkazového okna DB2 #1 (což je zapisování) spusťte: db2 connect to sample db2 +c update staff set name = 'Chong' where id = 10
Z Příkazového okna DB2 #2 (což je čtení) spusťte: db2 connect to sample db2 +c select * from staff
Tento SELECT zůstane viset, bude čekat, až aplikace v příkazovém řádku DB2 #1 uvolní exkluzivní zámek (X). Jak můžete vidět, defaultní chování verzí, které existovaly před DB2 9.7, poskytuje menší souběžnost. Z Příkazového okna DB2 #2 spusťte: CTRL-C (stiskněte tyto klávesy pro přerušení)
Zavřete okno.
Z Příkazového okna DB2 #1: db2 rollback
Zavřete okno. Postup 2: Analyzujte chování izolace CS s aktuálním potvrzením 1. Povolte aktuální potvrzení ON:
Chapter 13 – Concurrency and Locking
225
Otevřete Příkazové okno DB2 a spusťte: db2 update db cfg for sample using CUR_COMMIT on db2 force applications all
Zavřete okno. 2. Otevřete dvě Příkazová okna DB2 jako v první části, jedno nad druhým a spusťte následující příkazy: Z Příkazového okna DB2 #1: db2 connect to sample db2 +c update staff set name = 'Chong' where id = 10
Z Příkazového okna DB2 #2: db2 connect to sample db2 +c select * from staff
Nyní tento příkaz SELECT pracuje! Neuvázne a zobrazí hodnotu Sanders, což je aktuálně potvrzená hodnota. Z Příkazového okna DB2 #1: db2 rollback
Zavřete okno. Z Příkazového okna DB2 #2: db2 rollback
Zavřete okno. Postup 3: Analyzujte chování izolace UR 1. Otevřete dvě Příkazová okna DB2 jako v první části, jedno nad druhým a spusťte následující příkazy: Z Příkazového okna DB2 #1: db2 connect to sample db2 +c update staff set name = 'Chong' where id = 10
Z Příkazového okna DB2 #2: db2 connect to sample db2 +c select * from staff with UR
226
Začínáme s DB2 Express-C Tento příkaz SELECT pracuje, ale vidíte, že zobrazená hodnota je Chong, což je hodnota nepotvrzená. Z Příkazového okna DB2 #1: db2 rollback
Zavřete okno. Z Příkazového okna DB2 #2: db2 rollback
Zavřete okno.
ČÁST III – UČÍME SE DB2: VÝVOJ APLIKACÍ
14 Kapitola 14 – Úvod do vývoje aplikací v DB2 IBM DB2 je výkonný databázový server pro správu relačních a XML dat. Nabízí flexibilitu nejen pro databázové administrátory, ale také pro databázové vývojáře. Je jedno, jaký jazyk si vyberete pro vývoj vašich programů, DB2 poskytuje ovladače, adaptéry a rozšíření, které potřebujete jako součást vaší aplikace. A co více, s DB2 Express-C můžete vyvíjet vaše aplikace za nulovou cenu, bez omezení velikosti databáze a na stejné úrovni podpory programovacích jazyků, které podporují další verze DB2. Jednou vyvinutá aplikace používající DB2 Express-C může být spouštěna v jakékoliv edici DB2, aniž by bylo nutné aplikaci jakkoliv modifikovat. Poznámka: Tato sekce je jen úvodem do vývoje aplikací DB2. Existuje série více než 25 volně stažitelných knih, vyvíjených jako součást DB2 on Campus Book Series, zabývající se vývojem aplikací DB2. Jiné knihy v sérii obsahují jiné, než DB2 předměty, jako např.: Java, PHP, Ruby on Rails, Python, Perl, Web 2.0, SOA, Eclipse, vývoj Open Source, Cloud Computing a mnohem více! Další knihy pokrývají IBM technologie jako například pureQuery, Data Studio, InfoSphere Data Architect více do detailů. Tyto knihy byly představeny na začátku října 2009.
14.1 Vývoj aplikací DB2: velký přehled DB2 nabízí databázovým vývojářům přizpůsobivost, se kterou mohou využívat možnosti na straně serveru, jako například uložené procedury a uživatelsky definované funkce. Vývojáři aplikací mohou vyvíjet klientské aplikace v jazyku, který si vyberou. Tato flexibilita je ilustrována na Obrázku 14.1.
230
Začínáme s DB2 Express-C
Obrázek 14.1 - DB2 je pro každého: databázového i aplikačního vývojáře Levá strana na Obrázku 14.1 reprezentuje klientský stroj, kde programátor aplikací vyvíjí a kde spouští své programy. Na tomto klientovi může být v operačním systému navíc doinstalován IBM Data Server Client, to ale závisí na typu aplikace, která je vyvíjena. IBM Data Server client obsahuje potřebné ovladače připojení, jako například ovladače JDBC a ovladače ODBC/CLI. Mohou být také staženy samostatně, pokud navštívíte webovou stránku IBM DB2 Express-C Web site na ibm.com/db2/express Použitím programovacích nástrojů, jako jsou např. IBM Data Studio, InfoSphere Data Architect (IDA), Rational Software Architect (RSA), Rational Application Developer (RAD), atd., můžete vyvíjet své aplikace ve vámi vybraném jazyku. API knihovny podporující tyto jazyky jsou také obsaženy v IBM Data Server Client, takže když se připojíte na DB2 Server, všechny programové instrukce (při použití těchto API) jsou patřičně přeloženy do příkazů XQuery nebo SQL, kterým již DB2 rozumí. Tabulka 1.1 poskytuje stručný přehled nástrojů, které jsme zmínili dříve. Název nástroje
Popis
IBM Data Studio
IBM Data Studio je nástroj založený na Eclipse, který umožňuje uživatelům spravovat jejich databázové servery a vyvíjet uložené procedury, funkce a Data Web služby. IBM Data Studio bylo probíráno v knize již dříve.
InfoSphere Data Architect (IDA)
IDA je nástrojem, který modeluje vaše data. Pomáhá vám sestavit logický databázový návrh a fyzický návrh.
Kapitola 14 – Úvod do vývoje aplikací v DB2
231
Rational Software Architect (RSA)
RSA je nástroj pro softwarové inženýry, je založený na Eclipse a pomáhá při vývoji UML diagramů.
Rational Application Developer (RAD)
RAD je nástroj založený na Eclipse, je určen pro vývoj rapid aplikací, tedy pro softwarové vývojáře.
Visual Studio
Microsoft Visual Studio je IDE, které vám umožňuje vyvíjet aplikace na platformě Windows použitím Microsoft technologií.
ZendCore
Dříve nazýváno ZendCore for IBM je volně dostupné IDE pro vývoj PHP aplikací.
Tabulka 14.1 - Nástroje, které vám mohou pomoci při vývoji aplikací pro DB2 Na pravé straně Obrázku 14.1 je naznačen DB2 server, který obsahuje jednu databázi. Uvnitř této databáze jsou uloženy procedury, uživatelsky definované funkce a triggery. V následující sekci si popíšeme tyto objekty více do detailů.
14.2 Vývoj na straně serveru Vývoj na serverové straně v DB2 předpokládá, že aplikační objekty jsou vyvinuty a uloženy v DB2 databázi. V této sekci budou stručně probrány následující aplikační objekty: Uložené procedury Uživatelsky definované funkce (UDF) Triggery
14.2.1 Uložené procedury Uložené procedury jsou objekty databázové aplikace, které zapouzdřují SQL příkazy a business logiku. Ponechání části aplikační logiky v databázi poskytuje vylepšení výkonu, jelikož je redukován síťový provoz mezi aplikací a databází. Uložené procedury navíc poskytují centralizované místo, kam se ukládá váš kód, takže ostatní aplikace mohou použít již napsanou a uloženou proceduru. Pro zavolání uložené procedury se používá příkaz CALL. V DB2 můžete vyvíjet uložené procedury v různých jazycích, včetně SQL PL, Java, C/C++, CLR, OLE a COBOL. Jednoduchý příklad, jak vytvořit a zavolat SQL PL uloženou proceduru z Příkazového okna DB2 nebo shellu v Linuxu, je ukázán zde: db2 create procedure P1 begin end db2 call P1
232
Začínáme s DB2 Express-C
V příkladu je procedura P1 prázdná, uložená procedura, která nedělá nic. Příklad ukazuje, jak jednoduše lze vytvořit proceduru. Pro vývoj uložených procedur s komplexní logikou doporučujeme použít IBM Data Studio, které obsahuje debugger.
14.2.2 Uživatelsky definované funkce Uživatelsky definovaná funkce (UDF) je objektem databázové aplikace, který umožňuje uživatelům rozšířit SQL jazyk jejich vlastní logikou. Funkce vždy vrací hodnotu nebo hodnoty podle business logiky obsažené ve funkci. Pro vyvolání funkce se může využít SQL příkazu nebo funkce values. V DB2 můžete vyvíjet UDF v několika jazycích, včetně SQL PL, Java, C/C++, OLE, CLR. Tento jednoduchý příklad vám ukáže, jak vytvořit a zavolat SQL PL UDF z Příkazového okna DB2 ve Windows nebo ze shellu v Linuxu: db2 create function F1() returns integer begin return 1000; end db2 values F1
V tomto příkladu funkce F1 vrací celočíselnou hodnotu 1000. Pro vyvolání této funkce může být použit příkaz VALUES. Stejně jako v případě uložených procedur vám doporučujeme vytvářet funkce v IBM Data Studio.
14.2.3 Triggery Trigger je objekt, který automaticky provádí operace v tabulce nebo pohledu. Spouštěcí akce na objektu, kde je trigger definován, způsobí spuštění triggeru. Trigger není běžně brán jako aplikační objekt; proto tedy databázoví vývojáři normálně neprogramují triggery, ale databázoví administrátoři ano. Protože je vyžadován kód, zahrnuli jsme do této sekce trigger. Níže je uveden příklad triggeru: create trigger myvalidate no cascade before insert on T1 referencing NEW as N for each row begin atomic set (N.myxmlcol) = XMLVALIDATE(N.myxmlcol according to xmlschema id myxmlschema); end
V tomto případu je trigger spuštěn před operací INSERT na tabulce T1. Trigger vloží hodnotu (což je XML dokument), ale vyvolá funkci XMLVALIDATE, aby zkontroloval tento XML dokument s daným schématem. o XML a XML schématech hovoří více Kapitola 15, DB2 pureXML.
Kapitola 14 – Úvod do vývoje aplikací v DB2
233
14.3 Vývoj na straně klienta Jak již napovídá název, při vývoji na straně klienta vývojáři softwaru tvoří své programy na klientu a pak se připojují a přistupují k databázi DB2 použitím aplikačního programového rozhraní (API), které je poskytováno DB2. V této sekci si probereme: Vložené SQL Statické SQL versus Dynamické SQL CLI a ODBC JDBC, SQLJ a pureQuery OLE DB ADO.NET PHP Ruby on Rails Perl Python
14.3.1 Vložené SQL Vložené SQL aplikace jsou aplikacemi, kde je SQL vloženo do hostitelského jazyka, například do C, C++ nebo COBOLu. Vložené SQL aplikace mohou obsahovat statické nebo dynamické SQL, které jsou popsány v další sekci. Obrázek 14.2 ukazuje, jak je aplikace s vloženým SQL strukturována.
Obrázek 14.2 - Vývoj aplikace s vloženým SQL
234
Začínáme s DB2 Express-C
Na obrázku C program hello.sqc obsahuje vložené SQL. Vložené SQL API pro jazyk C používá EXEC SQL (zvýrazněn na Obrázku 14.2), aby umožnilo prekompilačnímu procesu rozeznat SQL příkazy od C kódu. Také si můžete povšimnout, že v hello.sqc je před některými proměnnými předpona tvořená dvojtečkou, například:dbname, :userID a :psw. Tyto proměnné se nazývají hostujícími proměnnými. Hostující proměnné jsou proměnné hostujícího jazyka, na něž je odkazováno příkazy vloženého SQL. Spuštění příkazu precompile (také znám jako příkaz prep) s možností bindfile vygeneruje dva soubory - hello.bnd, vázací soubor obsahující jen SQL příkazy, a hello.c, který obsahuje jen kód jazyka C. Vázací soubor se zkompiluje použitím příkazu bind, výsledkem je balíček uložený v databázi. Balíček obsahuje kompilované/spustitelné SQL a přístupový plán k datům. Pro spuštění příkazu bind musí existovat připojení k databázi. Ve spodní části obrázku je soubor hello.c kompilován a zlinkován jako jakýkoliv jiný program C. Výsledný spustitelný soubor hello.exe musí pro úspěšné spuštění souhlasit s balíčkem uloženým v databázi.
14.3.2 Statické SQL versus Dynamické SQL U příkazů statického SQL je struktura SQL plně známa v době před kompilací. Například: SELECT lastname, salary FROM employee
V tomto příkladu jsou jména sloupců (lastname, salary) a název tabulky (employee) odkazovány v příkazu a jsou plně známy v době před kompilací. Následující příklad je také statickým příkazem SQL: SELECT lastname, salary FROM employee WHERE firstnme = :fname
V tomto druhém příkladu je hostitelská proměnná :fname použita jako součást vloženého příkazu SQL. Ačkoli je hodnota hostitelské proměnné neznámá v době spuštění, její datový typ je znám z programu a všechny ostatní objekty (názvy sloupce, název tabulky) jsou předem známy. K výpočtu přístupového plánu používá DB2 pro tyto hostitelské proměnné odhady, proto se v tomto případě stále jedná o statické SQL. Předkompilace, navázání a kompilace statických příkazů SQL se provádí před spuštěním aplikace.. Statické SQL je nejlépe používat na databázích, jejichž statistiky se příliš nemění. Podívejme se nyní na více příkladů: SELECT ?, ? FROM ?
V tomto příkladu jsou názvy odkazovaných sloupců a tabulky neznámé až do doby spuštění. Proto je přístupový plán vytvořen jen v době spuštění a používá statistik dostupných v tomto čase. Tyto typy příkazů se nazývají dynamickými SQL příkazy. Některá programová API, jako např. JDBC a ODBC, vždy používají dynamické SQL bez ohledu na to, zda SQL příkaz obsahuje objekty známé nebo ne. Například u příkazu SELECT lastname, salary FROM employee jsou všechny názvy sloupců a tabulky předem známé, ale u JDBC nebo ODBC nedochází k předkompilaci. Veškeré přístupové plány pro příkaz jsou počítány v době spuštění.
Kapitola 14 – Úvod do vývoje aplikací v DB2
235
Pro práci s SQL příkazem jako dynamickým se obecně používají dva příkazy: PREPARE: Tento příkaz připravuje nebo kompiluje SQL příkaz a zároveň vytváří přístupový plán k datům EXECUTE: Tento příkaz spouští SQL příkaz Alternativně můžete IMMEDIATELY
spustit
PREPARE
a
EXECUTE
v jednom
příkazu:
EXECUTE
Kód 14.1 ukazuje příklad vloženého dynamického SQL příkazu v C, který je připraven a spuštěn. strcpy(hVStmtDyn, “SELECT name FROM emp WHERE dept = ?"); PREPARE StmtDyn FROM :hVStmtDyn; EXECUTE StmtDyn USING 1; EXECUTE StmtDyn USING 2;
Kód 14.1 – Vložený dynamický SQL příkaz v C využívající PREPARE a EXECUTE Kód 14.2 ukazuje stejný příklad jako v Kódu 14.1, ale používá příkaz EXECUTE IMMEDIATELY. EXECUTE IMMEDIATELY SELECT name from EMP where dept = 1 EXECUTE IMMEDIATELY SELECT name from EMP where dept = 2
Kód 14.2 - Vložený dynamický SQL příkaz v C využívající EXECUTE IMMEDIATELY V mnoha dynamických programovacích jazycích, jako je PHP nebo Ruby on Rails, kde se SQL spouští dynamicky, mají programátoři sklon psát shodné SQL příkazy s jinými hodnotami, např.: SELECT lastname, salary FROM employee where firstnme = 'Raul' SELECT lastname, salary FROM employee where firstnme = 'Jin' ... V tomto příkladu jsou příkazy shodné, až na hodnotu sloupce firstnme. DB2 považuje tyto dva dynamické příkazy a rozdílné, a proto v čase spuštění připraví a pak spustí každý příkaz nezávisle. Režie na přípravu několikanásobného spuštění téhož příkazu může způsobit pokles výkonu, proto je od DB2 verze 9.7 doporučováno psát příkazy takto: SELECT lastname, salary FROM employee where firstnme = ? Znak otazníku (?) v příkazu je znám jako návěstí parametru. Použitím návěstí parametru program může připravit příkaz jen jednou a pak spustit příkazy EXECUTE, které dodávají v parametru rozdílné hodnoty. DB2 verze 9.7 představila technologii, která se nazývá koncentrátor příkazu. Zde jsou všechny příkazy automaticky seskupeny do jednoho příkazu s návěstím parametrů, a poté spouštěny s proměnlivými hodnotami pole pomocí EXECUTE. Koncentrátor příkazů má svůj rozhodovací mechanismus určující, kdy se příkazy nemají dát do stejné skupiny; například pokud úmyslně přidáte některé klauzule ovlivňující DB2 optimalizátor.
236
Začínáme s DB2 Express-C
Se zřetelem na výkon má statické SQL obvykle lepší výkon než dynamické SQL, protože plán přístupu pro statické SQL je prováděn v době předkompilační a ne při spouštění. Nicméně ve velmi aktivním prostředí, například při operacích INSERT a DELETE, nemusí být statistika spočítaná v čase předkompilace aktuální, a proto přístupový plán statického SQL nemusí být optimální. V tomto příkladu může být lepší volbou dynamické SQL za předpokladu, že je často spouštěn příkaz RUNSTATS za cílem shromáždit aktuální statistiky. Poznámka: Mnoho uživatelů si myslí, že vložené SQL je jen statické. V reálu ale může být jak statické, tak dynamické.
14.3.3 CLI a ODBC Call Level Interface (CLI) bylo původně vyvinuto společnostmi X/Open Company a SQL Access Group. Jednalo se o specifikaci volatelného SQL prostředí s cílem vyvíjet přenositelné C/C++ aplikace bez ohledu na výrobce relačního databázového systému. Na základě předběžného konceptu X/Open Call Level Interface vyvinula společnost Microsoft Open Database Connectivity (ODBC) a později byla většina specifikací X/Open Call Level Interface zahrnuta do ISO CLI International Standard. DB2 CLI je založeno na obou: ODBC a mezinárodním standardu pro SQL/CLI, jak je ukázáno na Obrázku 14.3.
Obrázek 14.3 - DB2 CLI je založen na ODBC a mezinárodním standardu ISO CLI DB2 CLI zahrnuje ODBC 3.51 a může být použito jako ODBC Driver, pokud je načteno pomocí ODBC Driver Manager. Obrázek 14.4 znázorňuje podporu DB2 CLI pro ODBC.
Kapitola 14 – Úvod do vývoje aplikací v DB2
237
Obrázek 14.4 – DB2 CLI zahrnuje ODBC 3.51 CLI/ODBC má následující charakteristiku: Kód je jednoduše přenositelný mezi různými výrobci relačních databázových systémů Na rozdíl od vloženého SQL zde není potřeba předkompilace nebo hostujících proměnných Spouští dynamické SQL Je velice populární Pro spuštění CLI/ODBC aplikace je jedinou potřebnou věcí mít nainstalovaný ovladač DB2 CLI. Tento ovladač je možno nainstalovat z kteréhokoliv následujícího klientu a ovladače mohou být staženy a použity volně z www.ibm.com/db2/express: IBM Data Server Client IBM Data Server Runtime Client IBM Data Server Driver for ODBC and CLI Pro vývoj aplikace CLI/ODBC potřebujete DB2 CLI ovladač a také příslušné knihovny, které mohou být nalezeny jen v IBM Data Server Client. Pro lepší pochopení, jak se pro vaše aplikace nastavuje DB2 CLI ovladač, se podívejme na následující příklad. Obrázek 14.5 zobrazuje tři rozdílné stroje, jeden v Indonésii, další v Brazílii a v Kanadě.
238
Začínáme s DB2 Express-C
Obrázek 14.5 - DB2 CLI/ODBC ukázkový scénář Obrázek ukazuje dva modelové scénáře: Na levé straně jsou řekněme počítače v Indonésii, na kterých je spuštěna ODBC aplikace, která může pracovat s jakýmkoliv relačním databázovým serverem, jako je například Oracle, Microsoft SQL Server nebo DB2. ODBC Driver Manager načte příslušný ODBC ovladač v závislosti na tom, k jaké databázi je přistupováno. V případě, že aplikace přistupují k DB2 databázi v Kanadě, připojení potřebuje jít přes DB2 Client, který obsahuje komponenty pro vzdálené připojení. Na pravé straně máme řekněme CLI aplikaci, která je spuštěna na stroji v Brazílii. Jedná se o CLI aplikace, protože může využívat některé specifické funkce, které nejsou dostupné v ODBC, ale také protože aplikace bude pracovat jen s DB2 databází. CLI aplikace využije DB2 CLI Driver. Aplikace se může připojit na lokální databázi v Brazílii. Pokud se potřebuje připojit vzdáleně do databáze v Kanadě, použije se DB2 klient. Posledním bodem v této sekci je porovnání mezi aplikací CLI/ODBC a dynamickou C aplikací s vloženým SQL. Toto srovnání ilustruje Obrázek 14.6.
Kapitola 14 – Úvod do vývoje aplikací v DB2
239
Obrázek 14.6 - CLI/ODBC aplikace versus dynamická aplikace C s vnořeným SQL Jak je vidět na Obrázku 14.6, jediným rozdíl mezi CLI/ODBC a Dynamickou C aplikací s vloženým SQL je ten, že v případě CLI/ODBC je váš kód přenositelný a může přistupovat k jiným serverům relačních databází pouhou změnou připojovacího řetězce. U dynamické aplikace s vloženým SQL píšete kód pro specifické prvky DB2. Samozřejmě dalším rozdílem je cesta, jakou se rozdílné funkce pro PREPARE a EXECUTE vyvolávají.
14.3.4 JDBC, SQLJ a pureQuery Java Database Connectivity (JDBC) je Javovské programové API, které standardizuje prostředky pro práci a přístup k databázím. V JDBC je kód snadno přenositelný mezi různými výrobci relačních databázových systémů. Jediné vyžadované změny v kódu jsou obvykle ty, které se týkají JDBC ovladače a připojovacího řetězce. JDBC používá pouze dynamické SQL a je velice populární. SQLJ je standardem pro vložené SQL v Java programech. Ačkoli může také spolupracovat s JDBC, jak je ukázáno na Obrázku 14.7, je hlavně používán se statickými SQL. Přestože je obvykle více kompaktní než programy JDBC a poskytuje lepší výkon, není rozšířen ve významnějším měřítku. Programy SQLJ musí být zpracovány pomocí preprocesoru (SQLJ překladač) před jejich kompilací.
240
Začínáme s DB2 Express-C
Obrázek 14.7 - Vztahy mezi aplikacemi SQLJ a JDBC DB2 klient na Obrázku 14.7 může a nemusí být vyžadován. Záleží na typu použitého JDBC ovladače, což bude tématem později v kapitole. pureQuery je plug-in IBM (založený na Eclipse) pro správu relačních dat jako objektů. Je k dispozici od roku 2007. pureQuery může automaticky generovat kód pro ustanovení objektového-relačního mapování (ORM) mezi vaším objektově orientovaným kódem a relačními databázovými objekty. Začnete s vytvářením Java projektu s Optim Development Studio (ODS), připojíte se do databáze DB2 a ODS pak objeví všechny databázové objekty. Přes grafické rozhraní ODS si můžete vybrat tabulku a použít pureQuery k vygenerování kódu, který dovede transformovat jakoukoliv entitu relační tabulky do objektu Javy. Vygenerovaný kód vytváří relevantní SQL příkazy a rodičovské Java objekty, které tyto příkazy zapouzdří. Vytvořené Java objekty a obsažené SQL příkazy mohou být dále upravovány. S pureQuery se můžete v době spouštění rozhodnout, zda chcete spustit SQL ve statickém nebo dynamickém módu. pureQuery podporuje Javu a .NET. 14.3.4.1 Ovladače JDBC a SQLJ Ačkoli existuje několik typů ovladačů JDBC (například 1, 2, 3 a 4), typy 1 a 3 nejsou běžně používané a jejich podpora ze strany DB2 je na ústupu. Pro typ 2 existují dva ovladače, jak si stručně popíšeme, ale jeden z nich je taktéž na ústupu. Typy 2 a 4 jsou podporovány DB2, jak je ukázáno v Tabulce 14.2. Ovladače 2. typu vyžadují nainstalovaný DB2 klient, jelikož jej ovladač používá pro ustanovení komunikace s databází. Typ 4 je čistě Javovský klient, takže není zapotřebí instalovat DB2 klienta, ale ovladač musí být nainstalován na stroji, kde běží aplikace JDBC.
Typ ovladače
Název ovladače
Zabaleno jako
Podporuje
Minimální vyžadovaná verze Java SDK
Kapitola 14 – Úvod do vývoje aplikací v DB2 Typ 2
DB2 JDBC Type 2 Driver pro Linux, UNIX a Windows (na ústupu*)
db2java.zip
JDBC 1.2 a JDBC 2.0
1.4.2
Typ 2 a Typ 4
IBM Data Server Driver pro JDBC a SQLJ
db2jcc.jar a sqlj.zip
Vyhovující JDBC 3.0
1.4.2
db2jcc4.jar a sqlj4.zip
JDBC 4.0 a dřívější
6
241
Table 14.2 - Ovladače DB2 JDBC a SQLJ * To znamená, že je stále podporovaný, ale nepočítá se s jeho dalším vývojem a nasazením.
Jak již bylo dříve zmíněno a ukázáno v Tabulce 14.2, Typ 2 je vybaven dvěma různými ovladači; nicméně DB2 JDBC Typ 2 Driver pro Linux, UNIX a Windows s názvem souboru db2java.zip je na ústupu. Po instalaci DB2 serveru, DB2 klienta nebo IBM Data Server Driveru pro JDBC a SQLJ jsou soubory db2jcc.jar a sqlj.zip kompatibilní s JDBC 3.0 automaticky přidány do vaší cesty k třídám.
14.3.5 OLE DB Object Linking and Embedding, Database (OLE DB) je sadou rozhraní, která poskytuje přístup k datům uloženým v různorodých zdrojích. Původně navrženo k nahrazení ODBC, avšak postupně obohaceno o podporu širšího spektra zdrojů včetně nerelačních databází, jako třeba objektově orientovaných databází a tabulkových procesorů. OLE DB je implementováno využitím Component Object Model (COM) technologie. Uživatelé OLE DB mohou přistupovat k databázi DB2 pomocí IBM OLE DB Provider pro DB2. Tento poskytovatel má následující charakteristiku: Název poskytovatele: IBMDADB2 Podporuje úroveň 0 specifikace poskytovatele OLE DB, obsahuje některá dodatečná rozhraní z úrovně 1 Vyhovuje specifikacím Microsoft OLE DB verze 2.7 a novějším Vyžaduje instalaci IBM Data Server Client s Microsoft Data Access Components (MDAC) Pokud není IBMDADB2 explicitně specifikován, bude defaultně využit ovladač Microsoftu OLE DB driver (MSDASQL). MSDASQL umožňuje klientům využívat OLE DB pro přístup k datům jiných databázových serverům, než je Microsoft SQL Server, a to použitím ovladače ODBC, ale negarantuje plnou funkcionalitu ovladače OLE DB.
242
Začínáme s DB2 Express-C
14.3.6 ADO.NET Platforma .NET Framework je náhradou technologie Component Object Model (COM) firmy Microsoft. Použitím .NET Frameworku můžete kódovat aplikace .NET ve více než čtyřiceti programovacích jazycích; nejpopulárnější jsou C# a Visual Basic .NET. Třída knihovny .NET Framework poskytuje stavební kameny, ze kterých jsou postaveny vaše .NET aplikace. Tato třída knihoven nepřísluší žádnému jazyku a poskytuje rozhraní k operačnímu systému a aplikačním službám. Vaše aplikace .NET (jedno, v jakém jazyku) se kompilují do Intermediate Language (IL), typu strojového kódu. Common Language Runtime (CLR) je srdcem .NET Framework, kompiluje IL kód za běhu a pak ho spouští. Při spouštění kompilovaného IL kódu CLR aktivuje objekty, ověřuje jejich bezpečnostní transparentnost, alokuje jejich paměť, spouští je a čistí paměť, jakmile je spuštění ukončeno. U Javy je to tak, že program může být spouštěn na různých platformách s minimálními nebo žádnými úpravami: jeden jazyk, ale mnoho platforem. Program v .NET, který je napsaný v jednom ze čtyřiceti podporovaných jazyků, může být spuštěn na jedné platformě, Windows, s minimálními nebo žádnými modifikacemi: více jazyků, ale jedna platforma. ADO.NET je způsob, jakým je řešen přístup k datům v .NET Framework. ADO.NET podporuje přístup připojený i odpojený. Klíčovou komponentou odpojených dat v ADO.NET je třída DataSet, jejíž instance se chovají jako databázová cache, zůstávají v paměti aplikace. Pro připojený i odpojený přístup vaše aplikace používají databáze pomocí prostředku známého jako data provider. Různé databázové produkty obsahují své vlastní .NET data providery, včetně DB2 pro Windows. .NET data provider obsahuje implementace následujících základních tříd: Connection: navazuje a spravuje databázové připojení. Command: spouští SQL příkazy v databázi. DataReader: čte a vrací výsledkovou sadu dat z databáze. DataAdapter: spojuje instanci DataSet s databází. Přes instanci DataAdapter může DataSet číst a zapisovat data databázové tabulky. Tři datoví provideři, kteří pracují s DB2, jsou ukázáni v Tabulce 14.3 Data Provider ODBC .NET Data provider (nedoporučuje se)
Specifikace Provádí ODBC volání datového zdroje DB2 použitím ovladače DB2 CLI. Má stejnou podporu klíčových slov a stejné restrikce jako ovladač DB2 CLI.
Kapitola 14 – Úvod do vývoje aplikací v DB2
243
Může být použit s .NET Framework verze 1.1, 2.0 nebo 3.0. OLE DB .NET Data provider
Používá IBM DB2 OLE DB Driver (IBMDADB2).
(nedoporučuje se)
Má stejnou podporu klíčových slov a stejné restrikce jako DB2 OLE DB driver Může být použit s .NET Framework verze 1.1, 2.0, nebo 3.0.
DB2 .NET Data provider
Rozšiřuje DB2 podporu rozhraní ADO.NET.
(doporučený)
Provider spravovaný DB2 implementuje stejnou sadu tříd a metod standardu ADO.NET. Je definován v prostoru jmen IBM.DATA.DB2. Je možné jej následujících:
získat
stažením
jednoho
z
- Data Server Driver for ODBC, CLI, and .NET - IBM Data Server Runtime Client - DB2 Data Server Tabulka 14.3 - Datoví provideři ADO.NET
14.3.7 PHP PHP Hypertext Preprocessor (PHP) je open source, platformově nezávislý, skriptovací jazyk určený pro vývoj webových aplikací. Může být vložen do HTML a obecně běží na web serveru, který zpracovává PHP kód a vytváří výstup ve formátu webových stránek. PHP je jazykem modulárním. Pro dosažení cílené funkcionality můžete používat rozšíření. Jedny z nejpopulárnějších rozšíření PHP jsou ta, která se používají pro přístup k databázím. IBM podporuje přístup k DB2 databázím přes dvě rozšíření: ibm_db2: Rozšíření ibm_db2 nabízí procedurální aplikační rozhraní pro vytváření, čtení, aktualizování a zapisování databázových operací, navíc s rozsáhlým přístupem k databázovým metadatům. Může být zkompilováno s PHP verze 4, ale i PHP verze 5. pdo_ibm: pdo_ibm je ovladačem pro PHP Data Objects (PDO) rozšíření, které nabízí přístup k databázi DB2 přes standardní objektově-orientované databázové rozhraní, představené v PHP verze 5.1. Může být zkompilováno s přímým využitím knihoven DB2.
244
Začínáme s DB2 Express-C
PHP rozšíření a ovladače jsou dostupné zdarma v repozitářích PECL na http://pecl.php.net/ nebo spolu s IBM Data Server Client. Obě rozšíření, ibm_db2 a pdo_ibm, jsou založeny na vrstvě IBM DB2 CLI. IBM také navázalo partnerství se Zend Technologies Inc., podpořilo vývoj ZendCore, prostředí pro vývoj PHP a DB2 Express-C, které je zdarma. ZendCore bundle obsahuje PHP knihovny, Apache Web server a DB2 Express-C. Pro stažení ZendCore přejděte na: http://www.ibm.com/software/data/info/zendcore
14.3.8 Ruby on Rails Ruby je open source objektově orientovaný jazyk. Rails je webovým frameworkem vytvořeným použitím Ruby. Ruby on Rails (RoR) je ideálním prostředkem pro vývoj webových aplikací s databází na pozadí. Tato nová technologie je založena na architektuře Modelu, Pohledu, Kontroleru (MVC) a následuje principy agilního vyvíjení softwaru. Rails nevyžaduje speciální formát souborů nebo integrované vývojové prostředí (IDE); můžete začít s textovým editorem. Každopádně existuje množství IDE s podporou Rails, například RadRails, což je prostředí Rails pro Eclipse. Pro více informací o RedRails navštivte http://www.radrails.org/. DB2 podporuje Ruby 1.8.5 a novější a Ruby on Rails 1.2.1 a novější. IBM_DB gem obsahuje IBM_DB Ruby ovladač a Rails adaptér, což vám umožňuje pracovat s DB2 na základě CLI vrstev. Tato součást (gem) musí být nainstalována v průběhu instalace IBM Data Server Client. Pro nainstalování ovladače IBM_DB a adaptéru můžete použít Ruby gem nebo jako Rails plug-in.
14.3.9 Perl Perl je populární interpretovaný programovací jazyk, který je k dispozici zdarma na mnoha operačních systémech. Využívá dynamických SQL a je ideální pro prototypové aplikace. Perl poskytuje standardní modul zvaný Database Interface (DBI) pro přístup k různým databázím. Je k dispozici na http://www.perl.com. Tento modul komunikuje s ovladači od různých databázových výrobců. V případě DB2 je to ovladač DBD::DB2, který je k dispozici z http://www.ibm.com/software/data/db2/perl.
14.3.10 Python Python je dynamický jazyk, často používaný pro skriptování. Klade důraz na čitelnost kódu a podporuje rozmanité programovací paradigmata, včetně procedurálního, objektově orientovaného, aspektově orientovaného, meta- a funkcionální programování. Python je ideálním pro rychlé vyvíjení aplikací. Tabulka 14.4 ukazuje rozšíření, která jsou k dispozici pro přístup k databázím DB2 z Python aplikace. Rozšíření
Popis
Kapitola 14 – Úvod do vývoje aplikací v DB2 ibm_db
245
Definováno IBM Poskytuje nejlepší podporu pro pokročilé funkce. Umožňuje vám spouštět SQL dotazy, volat uložené procedury, používat pureXML a přistupovat k metadatovým informacím.
ibm_db_dbi
Implementuje Python Specifikace v2.0.
Database
Nenabízí některé z pokročilých podporovaných API ibm_db.
API funkcí
Pokud máte aplikaci s ovladačem, který podporuje Python Database API Specifikace v2.0, můžete se lehce přepnout do ibm_db. API ibm_db a ibm_db_dbi jsou zabaleny společně. ibm_db_sa
Podporuje SQLAlchemy, populární open source Python SQL toolkit a object-torelational maper (ORM).
Tabulka 14.4 - IBM Data Server - rozšíření Python
14.4 XML a DB2 pureXML Extensible Markup Language (XML) je základní technologií pro nástroje a techniky Web 2.0, stejně jako pro Service Oriented Architecture (SOA). IBM brzy poznalo důležitost XML a investovalo do této oblasti významné prostředky, plodem je technologie pureXML - technologie, která poskytuje lepší úložnou podporu XML dokumentů v DB2. Počínaje rokem 2006 je DB2 9 hybridním databázovým serverem: umožňuje nativní ukládání relačních dat, stejně jako ukládání hierarchických dat. Již minulé verze DB2 a ostatní databázové servery na trhu mohly ukládat XML dokumenty. Úložná metoda použitá v DB2 verze 9 však vylepšila výkon a flexibilitu. S technologií pureXML obsažené v DB2 „devítkových“ verzích jsou XML dokumenty ukládány interně v parsovaném hierarchickém formátu, jako strom; proto je tedy práce s dokumenty XML opravdu vylepšena. Nové vydání DB2 - DB2 9.5 a DB2 9.7 má více vylepšení v podpoře pureXML. Kapitola 15, DB2 pureXML se věnuje tomuto předmětu detailně.
14.5 Webové služby Pokud definici velice zjednodušíme, představte si Webovou službu jako funkci, kterou můžete vyvolat přes síť. Nepotřebujete znát programovací jazyk pro jejich použití a vývoj, nepotřebujete znát operační systém, kde se funkce spouští a nepotřebujete znát ani lokaci, kde se spouští. Webové služby povolují jedné aplikaci vyměňovat data s jinou aplikací
246
Začínáme s DB2 Express-C
použitím rozšiřitelného standardního protokolu založeného na XML. To je ilustrováno na Obrázku 14.8.
Obrázek 14.8 – Příklad práce webových služeb Řekněme, že levá strana obrázku reprezentuje systém fiktivní letecké společnosti, Air Atlantis, která používá DB2 na Linuxu, a ukládá své informace o letech do XML formátu v DB2 databázi. Na pravé straně máme systém z další fiktivní letecké společnosti, Air Discovery, která používá SQL Server, který je spouštěn na Windows. Řekněme, že Air Atlantis a Air Discovery podepsaly partnerskou smlouvu o tom, že obě společnosti chtějí sdílet plánovací a cenové informace, aby díky tomu mohly koordinovat své lety. Sdílení těchto informací může být výzvou, protože společnosti používají rozdílné operační systémy (Linux, Windows) a rozdílné databázové servery (DB2, SQL Server). Pokud Air Atlantis změní svůj letový rozvrh pro cestu z Toronta do Pekingu, jak může Air Discovery automaticky přizpůsobit svůj vlastní letový rozvrh pro let z Pekingu do Šanghaje? Odpovědí jsou webové služby. Air Atlantis může zobrazit některé z letových informací vytvořením Datové Web služby, která vrátí výstup uložené procedury (getFlightInfo uložená procedura) s letovými infromacemi z DB2 databáze. Datové Web služby jsou webové služby založené na databázových informacích. Pokud je tato Data Web služba nasazena na aplikační server, například WebSphere Application Server, pak může klient nebo partner, jako například Air Discovery, použít webový browser pro přístup do k odletovým informacím Air Atlantis velice jednoduše. V tomto příkladu se Air Atlantis chová jako poskytovatel Web služby a zpřístupňuje Web službu, zatímco Air Discovery se chová jako zákazník Webové služby, protože službu využívá.
Kapitola 14 – Úvod do vývoje aplikací v DB2
247
Air Discovery také může vyvolat Web službu z jejich vlastní JDBC aplikace, což umožňuje provádět kalkulace, které využívají data z jejich databázového SQL Serveru. Například, pokud let z Toronta do Pekingu zabere zhruba 12 hodin, Air Discovery může spočítat navazující let z Pekingu do Šanghaje přidáním času odletu Air Atlantis z Toronta, připočítáním doby letu a rezervy několika málo hodin. Množství hodin použitých pro rezervu může být uloženo v databázi SQL Serveru v systému Air Discovery. Jednoduchá rovnice, která se dá použít v aplikaci JDBC, by mohla vypadat takto:
Pokud Air Atlantis změní svůj čas odletu, vyvolá se Web služba a tato informace bude automaticky přenesena do systému Air Discovery.
14.6 Administrativní API DB2 poskytuje velké množství administrativních API, které vývojář může použít pro vytvoření svých vlastních utilit nebo nástrojů. Například k vytvoření databáze můžete vyvolat sqlecrea API; pro spuštění instance pak použijete db2InstanceStart API; nebo pro naimportování dat do tabulky použijete db2Import API. Kompletní seznam je dostupný z Informačního centra DB2. Podívejte se na sekci Resources z adresy Informačního centra.
14.7 Další vývoj Někteří uživatelé DB2 Express-C také pracují s produkty třetích stran, jako například MS Excel a MS Access, aby vytvořili jednoduché formuláře, které se připojí do DB2. V této sekci vysvětlíme, jak pracovat s těmito produkty a DB2 Express-C. DB2 Express-C je k dispozici také na Mac OS X, takže můžete DB2 nativně využít pro vývoj databázových aplikací na Macu. To může být obzvláště přitažlivé pro komunitu RoR, která vychází z Mac platformy.
14.7.1 Pracování s Microsoft Access a Microsoft Excel Microsoft Excel a Microsoft Access jsou populární nástroje pro generování reportů, vytváření formulářů a vyvíjení jednoduchých aplikací, které poskytují určitou business intelligence pro vaše data. DB2 pracuje s těmito nástroji velice jednoduše. DBA může ukládat data firmy na zabezpečený DB2 server a běžní uživatelé pracující s Accessem a Excelem mohou k těmto datům přistupovat a generovat z nich reporty. Více na Obrázek 14.9
248
Začínáme s DB2 Express-C
Obrázek 14.9 - Práce s Excelem, Accessem a DB2 Na obrázku vidíte, že Excel a Access mohou být využity pro vývoj front-end aplikace, DB2 se bude starat o datovou bezpečnost, spolehlivost a výkon jako back-end aplikace. Pokud máme všechna data uložena centralizovaně v DB2, vzniká zjednodušený úložný datový model. V případě Excelu je nejjednodušší cestou k získání přístupu k DB2 datům použití OLE DB ovladače, jako například IBM OLE DB Provider for DB2. Je obsažen v instalaci IBM Data Server Client, který je zdarma a může být stažen z webu DB2 Express-C na www.ibm.com/db2/express. Po instalovaci je třeba vybrat vaše zdrojová data s příslušným OLE DB providerem pro použití z menu MS Excel. Vyberte Data → Importovat externí data → Importovat Data. Další kroky jsou zdokumentovány v článku IBM® DB2® Universal Database™ and the Microsoft® Excel Application Developer… for Beginners [1]. Pro více informací se podívejte na sekci Zdroje. V případě Microsoft Access byste měli také mít nainstalován: IBM Data Server client nebo IBM Data Server Driver for ODBC, CLI and .Net nebo IBM Data Server Driver for ODBC and CLI IBM Data Server Driver for ODBC, CLI and .Net a IBM Data Server Driver for ODBC and CLI je také znám jako IBM DB2 ODBC Driver, což je totéž co DB2 CLI ovladač. Jedná se o ovladač, který se používá pro přpojení z Accessu do DB2. Po instalaci ovladače vytvořte projekt Access 2007 a vyberte možnost ODBC Databáze dostupnou ze záložky Externí data v menu Nástroje tabulky. Další kroky jsou zdokumentovány v článku DB2 9 and Microsoft Access 2007 Part 1: Getting the Data...[2]. Pokud používáte vázané tabulky v Microsoft Accessu, data jsou k dispozici pro uživatele Access 2007, ale zůstávají umístěny na databázovém serveru DB2. Pro verze před Access 2007 je nastavení trochu jiné, ale stále se můžete podívat na článek Use Microsoft Access to interact with your DB2 data [3]. Pro více informací viz sekci Zdroje.
Kapitola 14 – Úvod do vývoje aplikací v DB2
249
14.8 Vývojové nástroje Microsoft Visual Studio a Eclipse jsou dvě nejpopulárnější integrovaná vývojová prostředí (IDE) používaná v dnešní době vývojáři. Obě prostředí bez problémů spolupracují s DB2. Pro Microsoft Visual Studio poskytuje DB2 Visual Studio Add-in, takže po nainstalování se do menu Visual Studia přidá položka IBM nástrojů. Takto se vývojář nepotřebuje přepínat pro práci s DB2 databázemi do ostatních nástrojů. Zmíněný Visual Studio Add-in si můžete stáhnout z webové stránky DB2 Express-C na www.ibm.com/db2/express. Pokud jde o Eclipse, IBM vydalo IBM Data Studio, nástroj založený na Eclipse, který je zdarma a dovoluje vývojáři psát SQL a XQuery skripty, uložené procedury, UDF a Webové služby. Protože se jedná o nástroj založený na platformě Eclipse, mnoho vývojářů může při práci s tímto produktem uplatnit své dřívější zkušenosti.
14.9 Jednoduché programy Pro pomoc, jak programovat v různých jazycích a přitom používat DB2 jako databázový server, se můžete podívat na vzorové aplikace, které se během instalace DB2 uloží do adresáře SQLLIB\samples. Níže uvedený Obrázek 14.10 ukazuje některé vzorové programy dodávané s DB2 na platformě Windows.
Obrázek 14.10 - Vzorové programy dodávané s DB2
250
Začínáme s DB2 Express-C
14.10 Shrnutí V této kapitole jsme prozkoumali flexibilitu poskytovanou DB2 pro programování databázových aplikací, ať už na straně serveru, uvnitř databáze, nebo na straně klienta připojeného vzdáleně k databázovému serveru DB2. Aplikace na straně serveru zahrnují uložené procedury, uživatelsky definované funkce a triggery. Na klientské straně jsme probrali nesčetně programovacích prostředí a metod povolených pro vývoj aplikací s DB2. Opět se ukázalo, že databázový server DB2 má pozoruhodnou flexibilitu a schopnosti.
15 Kapitola 15 – DB2 pureXML V této kapitole probereme pureXML, novou technologii představenou v DB2 verze 9, která podporuje nativní ukládání XML. Mnoho příkladů a konceptů uvedených v této kapitole bylo převzato z IBM Redbook: DB2 9: pureXML overview and fast start. Pro více informací o tomto titulu se podívejte na sekci Zdroje. Obrázek 15.1 znázorňuje, kterou částí DB2 se budeme zabývat.
Obrázek 15.1 – Celkový přehled DB2: DB2 příkazy, SQL/XML a XQuery
Poznámka: Pro více informací o pureXML se podívejte na toto video: http://www.channeldb2.com/video/video/show?id=807741:Video:4382
252
Začínáme s DB2 Express-C
15.1 Použití XML v databázích XML dokumenty mohou být uloženy v textových souborech, XML repozitářích nebo databázích. Existují dva hlavní důvody, proč si mnoho společností volí jejich ukládání do databází: Správa velmi objemných XML dat je problémem databázovým. XML jsou data jako jakákoliv jiná data, jen v rozdílném formátu. Stejné důvody pro uložení relačních dat v databázi se můžou použít i na XML data: Databáze poskytují efektivní vyhledávání a získávání dat, robustní podporu pro konzistenci dat, podporují zálohu a obnovení, transakce, výkon a rozšiřitelnost. Integrace: Společným uložením relačních a XML dokumentů můžete integrovat nová XML data do existujících relačních dat a kombinovat SQL s XPath nebo XQuery v jednom dotazu. A co více, relační data mohou mít výstup jako XML, atd. Díky integraci databáze mohou lépe podporovat Web aplikace, SOA a Web služby.
15.2 XML databáze Existují dva typy databází pro ukládání XML dat: Databáze s povoleným XML Nativní XML databáze
15.2.1 Databáze s povoleným XML Databáze s povoleným XML používá relační model jako jádro úložného modelu při uložení XML. Vyžaduje to buď mapování mezi XML (hierarchickým) datovým modelem a relačním datovým modelem, a nebo ukládání XML dat formou velkého objektu. I když tento způsob může být chápán jako zastaralá technologie, stále se některými výrobci databází používá. Obrázek 15.2 detailněji vysvětluje více dvě varianty databází, které mají povoleno XML.
Kapitola 15 – DB2 pureXML
253
Obrázek 15.2 – Dvě možnosti, jak ukládat XML v databázích s povoleným XML Levá strana Obrázku 15.2 ukazuje CLOB a varchar metodu ukládání XML dokumentů v databázi. Použitím této metody je XML dokument uložen jako nerozparsovaný řetězec, ať už v CLOB nebo varchar sloupci v databázi. Pokud je XML dokument uložen jako řetězec a chcete získat část XML dokumentu, váš program musí získat celý řetězec a parsovat ho, aby našel hledaná data. Parsování je stavění struktury XML dokumentu do stromovité struktury v paměti, takže se můžete pohybovat ve stromu. Tato metoda je náročná na paměť a není příiliš flexibilní. Další možnost pro databáze s povoleným XML se nazývá trhání nebo dekompozice, jak je ukázáno na pravé straně Obrázku 15.2. Při používání této metody je celý XML dokument „roztrhán“ na menší části, které jsou uloženy v tabulkách. Touto metodou doslova nutíte XML dokument, který je založen na hierarchickém modelu, aby změnil svou strukturu na relační. Tato metoda není flexibilní, protože pokud se změní dokument XML, tato změna se nepromítne lehce do odpovídajících tabulek a bude muset být vytvořeno mnoho dalších tabulek. Tato metoda není také vhodná z hlediska výkonu: pokud potřebujete získat původní dokument XML zpět, potřebujete provést operaci SQL JOIN, která je velice náročná, zejména pokud je ovlivněno více tabulek.
15.2.2 Nativní XML databáze Nativní XML databáze používají pro interní uložení XML hierarchický XML datový model. Úložný formát je stejný jako zpracovávací formát: neexistuje mapování na relační model a XML dokumenty nejsou uloženy jako nerozparsované řetězce (CLOBy nebo varchary). Pokud jsou použity příkazy XPath nebo XQuery, jsou zpracovávány nativně, enginem, a nejsou konvertovány do SQL. To je důvodem, proč jsou tyto databáze známe jako „nativní“ XML databáze. DB2 je v současnosti jediným komerčním databázovým serverem, který tuto možnost podporuje.
254
Začínáme s DB2 Express-C
15.3 XML v DB2 Obrázek 15.3 níže naznačuje, jak jsou relační a hierarchická data (XML dokumenty) uložena v DB2 hybridní databázi. Obrázek také ukazuje příkaz CREATE TABLE, který byl použit při tvorbě tabulky dept.
Obrázek 15.3 – XML v DB2 Povšiměte si, že definice tabulky používá pro sloupec deptdoc nový datový typ, XML,. Levá šipka na obrázku ukazuje relační sloupec deptID uložený v relačním formátu (tabulka), zatímco XML sloupec deptdoc je uložen v parsovaném hierarchickém formátu. Obrázek 15.4 ilustruje čtyři cesty přístupu k datům v DB2 verze 9: Použití SQL pro přístup k relačním datům Použití SQL s rozšířením XML (SQL/XML) pro přístup k XML datům Použití XQuery pro přístup k XML datům Použití XQuery pro přístup k relačním datům
Obrázek 15.4 – Čtyři cesty přístupu k datům v DB2 Tedy, v závislosti na vašich zkušenostech, pokud jste příznivcem SQL, můžete používat DB2 jako špičkový relační databázový systém, který také podporuje XML. Pokud jste
Kapitola 15 – DB2 pureXML
255
příznivcem XML, můžete DB2 vidět jako špičkový XML repozitář, který také podporuje SQL. Povšimněte si, že k popisu této technologie IBM používá termín pureXML místo nativní XML. Přestože ostatní výrobci stále používají pro ukládání XML dokumentů staré technologie CLOB/varchar nebo trhání, nazývají tyto staré technologie „nativním XML“. Aby se předešlo nedorozumění, IBM se rozhodlo používat nový termín pureXML a opatřit tento název ochrannou známkou, takže žádní jiní databázoví nebo XML výrobci nesmí používat stejný termín pro lišící se technologie. Podpora pureXML je poskytována pro databáze vytvořené v Unicode, ale i jiném kódování.
15.3.1 Výhody technologie pureXML Pro technologii pureXML hovoří velké množství výhod. 1. Můžete bezproblémově zužitkovat vaše investice do relačního systému a ukládat XML dokumenty používající XML datový typ do sloupců tabulek. 2. Můžete redukovat složitost kódu. Například Obrázek 15.5 ilustruje PHP skript napsaný bez a s pureXML. Použitím pureXML (menší zelený box vlevo) se počet řádků kódu redukuje. To neznamená jen to, že kód je méně složitý, ale že je také vylepšen celkový výkon, jelikož se zde nachází méně řádků na parsování a udržování kódu.
Obrázek 15.5 – Komplexita kódu s a bez pureXML 3. Změny vašeho schématu jsou použitím XML a technologie pureXML jednodušší. Obrázek 15.6 ilustruje příklad této zvýšené flexibility. Představte si, že máte
256
Začínáme s DB2 Express-C databázi, která obsahuje tabulky Employee a Department. Pokud byste používali ne-XML databázi a váš manažer by vás požádal o uložení nejen jednoho čísla na zaměstnance (telefonní číslo domů), ale i druhého čísla (číslo mobilního telefonu), potom byste mohli přidat další sloupec do tabulky Employee a uložit číslo mobilního telefonu do tohoto sloupce. Každopádně tato metoda by byla proti normalizačním pravidlům relačních databází. Pokud chcete dodržovat normalizační pravidla, měli byste místo toho vytvořit novou tabulku Phone a přesunout do ní všechny informace o telefonech. Mohli byste sem tedy také dodat čísla mobilních telefonů. Vytvoření nové tabulky Phone je náročné, nejen z pohledu režie pro přesun všech telefonních čísel, ale také proto, že se všechna SQL ve vaší aplikaci musí odkazovat také na nově vytvořenou tabulku. Místo toho v levé části vidíte, jak může být příklad proveden použitím XML. Pokud uživatel Christine má také číslo mobilního telefonu, přidá se nový tag s touto informací. Pokud zaměstnanec Michael nemá mobilní telefon, necháme záznam beze změn.
Obrázek 15.6 – Zvýšená flexibilita dat použitím XML 4. Můžete vylepšit výkon vaší XML aplikace. Testy provedené při používání pureXML ukázaly obrovský vylepšení v oblasti výkonu XML aplikací. Tabulka 15.1 ukazuje výsledky testů pro společnost, která přešla na pureXML technologii ze starších technologií. Druhý sloupec ukazuje výsledky jiných relačních databází (použití starších metod v práci s XML) a třetí sloupec ukazuje výsledky použití DB2 s pureXML. Ostatní relační DB
Úloha Vývoj
vyhledávacích
a
CLOB: 8 hodin
DB2 s pureXML 30 minut
Kapitola 15 – DB2 pureXML
257
získávacích business procesů
Shred: 2 hodin
Příbuzné řádky I/O kódu
100
35 (65% úspora)
Přidání pole do schématu
1 týden
5 minut
Dotazy
24 - 36 hodin
20 sekund - 10 minut
Tabulka 15.1 – Zvýšený výkon použitím technologie pureXML
15.3.2 Základy XPath XPath je jazykem, který se používá pro dotazování XML dokumentů. Kód 15.1 ukazuje XML dokument a Obrázek 15.7 ilustruje stejný dokument reprezentovaný parsovaným hierarchickým formátem (také nazývaný jako "uzel" nebo "list"). K vysvětlení toho, jak XPath pracuje, použijeme parsovaný hierarchický formát. <dept bldg=“101”> <employee id=“901”> John Doe 408 555 1212 344 <employee id=“902”> Peter Pan 408 555 9918 216
Kód 15.1 – XML dokument
dept
employee
id=901
name
John Doe
phone
408-555-1212
employee
office
344
id=902
name
Peter Pan
phone
408-555-9918
Obrázek 15.7 – Parsovaná hierarchická reprezentace XML dokumentu v Kódu 15.1
office
216
258
Začínáme s DB2 Express-C
Rychlou cestou, jak se naučit XPath, je porovnat jej s příkazem change directory (cd) v MS-DOS nebo Linuxu/UNIXu. Použitím příkazu cd překročíte "větve" stromu takto: cd /adresar1/adresar2/…
Podobně pro přechod mezi prvky v rámci jednoho XML dokumentu v XPath používáte lomítka. Například pokud použijeme dokument z Kódu 15.1, jména všech zaměstnanců můžete v XPath získat použitím tohoto dotazu: /dept/employee/name
15.3.2.1 Výrazy XPath Výrazy XPath používají pro specifikaci elementů a atributů celé cesty. Pro specifikaci atributu je použit znak “@”. Pro získání hodnoty (textového uzlu) z elementu použijte funkci text(). Tabulka 15.2 ukazuje dotazy XPath a příslušné výsledky, používá se stále XML dokument z Kódu 15.1. XPath
Výsledek
/dept/@bldg
101
/dept/employee/@id
901 902
/dept/employee/name
Peter Pan John Doe
/dept/employee/name/text()
Peter Pan John Doe
Tabulka 15.2 – Příklady výrazů XPath
15.3.2.2 Zástupné znaky XPath V XPath existují dva hlavní zástupné znaky: “*” odpovídá jakémukoliv názvu tagu “//” je zástupným znakem “potomek-nebo-já-sám” Tabulka 15.3 poskytuje více příkladů použitím XML dokumentů z Kódu 15.1 XPath /dept/employee/*/text()
Result John Doe 408 555 1212 344 Peter Pan 408 555 9918
Kapitola 15 – DB2 pureXML
259
216
/dept/*/@id
901 902
//name/text()
Peter Pan John Doe
/dept//phone
408 555 1212 408 555 9918
Tabulka 15.3 – Příklady zástupných znaků XPath
15.3.2.3 Predikáty XPath Predikáty jsou uzavřené v hranatých závorkách [ ]. Analogicky je můžete považovat za ekvivalentní ke klauzuli „WHERE“ v SQL. Například [@id=”902”] může být čteno jako: “WHERE atribut id = 902”. V jednom výrazu XPath může existovat více predikátů. Pro určení polohy predikátu použijte [n], který znamená, že bude vybrán n-tý potomek. Například employee[2] znamená, že bude vybrán druhý zaměstnanec. Tabulka 15.4 ukazuje více příkladů. XPath
Výsledek
/dept/employee[@id=“902”]/name
Peter Pan
/dept[@bldg=“101”]/employee[office >“300”]/name
John Doe
//employee[office=“344” office=“216”]/@id
OR
/dept/employee[2]/@id
901 902 902
Tabulka 15.4 – Příklady predikátu XPath 15.3.2.4 Určení rodiče Podobně jako v MS-DOSu nebo Linuxu/UNIXu můžete použít “.” (tečku) pro indikaci, že ve výrazu se odkazujete na aktuální obsah a “..” (dvě tečky) pro odkazování na souvislost s rodičovským obsahem. Tabulka 15.5 ukazuje více příkladů. XPath
Výsledek
/dept/employee/name[../@id=“902”]
Peter Pan
/dept/employee/office[.>“300”]
344
/dept/employee[office > “300”]/office
344
260
Začínáme s DB2 Express-C
/dept/employee[name=“John Doe”]/../@bldg
101
/dept/employee/name[.=“John Doe”]/../../@bldg
101
Tabulka 15.5 – XPath a "rodičovský" kontext
15.3.3 Základy XQuery XQuery je dotazovacím jazykem vytvořeným pro XML. XQuery podporuje výrazy cesty pro navigaci v hierarchické struktuře XML. XPath je v podstatě podmnožinou XQuery; proto cokoliv jsme se naučili o XPath, můžeme aplikovat i v XQuery. XQuery podporuje typová i netypová data. XQuery postrádá hodnoty null, protože XML dokumenty vynechávají chybějící nebo neznámá data. Výrazy XQuery a XPath rozlišují malá a velká písmena a XQuery vrací sekvenci XML dat. XQuery podporuje výraz FLWOR. Pokud bychom pro analogii použili opět SQL, FLWOR znamená SELECT-FROM-WHERE. Následující sekce popíše FLWOR více detailněji.
15.3.3.1 XQuery: výraz FLWOR FLWOR znamená: FOR:
opakovaně prochází sekvencí, váže proměnnou k položkám
LET:
váže proměnnou k sekvenci
WHERE:
odstraňuje položky z iterace
ORDER:
přeskupuje položky iterace
RETURN:
tvoří výsledek dotazu
Je to výraz pro manipulaci s XML dokumenty, který vám umožňuje vrátit další výraz. Například předpokládejme, že máte takto definovanou tabulku: CREATE TABLE dept(deptID CHAR(8),deptdoc XML);
XML dokument uvedený v Kódu 15.2 je vložen do sloupce deptdoc <dept bldg=”101”> <employee id=”901”> John Doe 408 555 1212 344 <employee id=”902”> Peter Pan 408 555 9918 216
Kapitola 15 – DB2 pureXML
261
Kód 15.2 - Vzorový XML dokument Pak příkaz XQuery v Kódu 15.3 užívající výraz FLWOR může být spuštěn: xquery for $d in db2-fn:xmlcolumn('dept.deptdoc')/dept let $emp := $d//employee/name where $d/@bldg > 95 order by $d/@bldg return <EmpList> {$d/@bldg, $emp}
Kód 15.3 - Vzorový příkaz XQuery s výrazem FLWOR Měl by vrátit výstup ukázaný v Kódu 15.4 <EmpList bldg="101"> John Doe Peter Pan
Kód 15.4 - Výstup po spuštění příkazu XQuery v Kódu 15.3
15.3.4 Vkládání XML dokumentů Vložení XML dokumentů do databáze DB2 může být provedeno pomocí příkazu SQL INSERT nebo pomocí utility IMPORT. XQuery pro tyto účely nemůže být použit, protože ve standardech tato možnost ještě nebyla definována. Prozkoumejme skript table_creation.txt ukázáný v Kódu 15.5 níže, který může být spouštěn z Příkazového okna DB2 nebo shellu v Linuxu použitím příkazu: db2 –tvf table_creation.txt -- (1) drop database mydb ; -- (2) create database mydb using codeset UTF-8 territory US ; -- (3) connect to mydb
262
Začínáme s DB2 Express-C
; -- (4) create table items ( id int primary key not null, brandname varchar(30), itemname varchar(30), sku int, srp decimal(7,2), comments xml ); -- (5) create table clients( id int primary key not null, name varchar(50), status varchar(10), contact xml ); -- (6) insert into clients values (77, 'John Smith', 'Gold', '111 Main St., Dallas, TX, 00112') ; -- (7) IMPORT FROM "D:\Raul\clients.del" of del xml from "D:\Raul" INSERT INTO CLIENTS (ID, NAME, STATUS, CONTACT) ; -- (8) IMPORT FROM "D:\Raul\items.del" of del xml from "D:\Raul" INSERT INTO ITEMS (ID, BRANDNAME, ITEMNAME, SKU, SRP, COMMENTS) ;
Kód 15.5 - Obsah souboru table_creation.txt Mějte na paměti, že tento skriptový soubor a soubory související jsou k dispozici v komprimovaném souboru Expressc_book_exercises_9.7.zip, který doprovází tuto knihu. Sledujte očíslované řádky skriptu v Kódu 15.5 tak, jak je budeme popisovat, řádek po řádku. 1. Smažte databázi mydb. Tato čistící akce je běžně provedena skriptovým souborem. Pokud mydb předtím neexistovala, obdržíte chybovou hlášku, ale to je v pořádku. 2. Vytvořte databázi mydb použitím znakové sady UTF-8. Vytvoří se Unicode databáze. PureXML je podporován v Unicode i jiných, než Unicode databázích.
Kapitola 15 – DB2 pureXML
263
3. Připojte se do nově vytvořené databáze mydb. Je to nezbytné pro vytvoření objektů v databázi. 4. Vytvořte tabulku items. Povšimněte si, že poslední sloupec v tabulce (sloupec comments) je definován jako XML sloupec použitím nového datového typu pro XML. 5. Vytvoříme tabulku clients. Všimněte si, že nový sloupec v tabulce (sloupec contact) je také definovaný s novým datovým typem XML. 6. Použitím tohoto příkazu SQL INSERT můžete vložit XML dokument do XML sloupce. V příkazu INSERT předáte XML dokument jako řetězec uvozený do jednoduchých uvozovek. 7. Použitím příkazu IMPORT můžete vložit nebo naimportovat různé XML dokumenty spolu s relačními daty do databáze. V (7) importujete data ze souboru clients.del (delimitovaný ascii soubor) a také ukazujete, kde jsou soubory XML dat, odkazované z clients.del (pro tento příkaz v D:\Raul). Pozorněji se podíváme na soubor clients.del, ale nejprve se podívejme na obsah adresáře D:\Raul. Obrázek 15.8 nám ho ukazuje.
Obrázek 15.8 - Obsah adresáře D:\Raul s XML dokumenty
Kód 15.6 ukazuje obsah textového souboru clients.del. 3227,Ella Kimpton,Gold,<XDS FIL='Client3227.xml' />, 8877,Chris Bontempo,Gold,<XDS FIL='Client8877.xml'/>, 9077,Lisa Hansen,Silver,<XDS FIL='Client9077.xml' /> 9177,Rita Gomez,Standard,<XDS FIL='Client9177.xml'/>, 5681,Paula Lipenski,Standard,<XDS FIL='Client5681.xml' />, 4309,Tina Wang,Standard,<XDS FIL='Client4309.xml'/>
Kód 15.6 - Obsah souboru clients.del
264
Začínáme s DB2 Express-C
V souboru clients.del je použito “XDS FIL=” pro nasměrování na specifický XML dokument. Obrázek 15.9 ukazuje Řídicí centrum po spuštění skriptu zmíněného výše.
Obrázek 15.9 – Řídicí centrum po spuštění skriptu table_creation.txt Všimněte si na obrázku, že ukazujeme obsah celé tabulky CLIENTS. Poslední sloupec contact je sloupcem XML. Po kliknutí na tlačítko označené třemi tečkami se otevře další okno, které ukazuje obsah dokumentu XML. To je znázorněno v pravé spodní části na Obrázku 15.9.
15.3.5 Dotazování XML dat Existují dva způsoby, jak se v DB2 dotazovat na XML data: Použít SQL s rozšířením XML (SQL/XML) Použít XQuery V obou případech DB2 dodržuje mezinárodní standardy XML.
15.3.5.1 Dotazování XML dat pomocí SQL/XML
Kapitola 15 – DB2 pureXML
265
Používání standardních SQL příkazů vám umožní pracovat s řádky a sloupci. SQL příkaz může být využit pro práci s celými XML dokumenty, ovšem to nám nepomůže, pokud budeme chtít získat jen část dokumentu. V těchto případech je nutné použít SQL s rozšířením XML (SQL/XML). Tabulka 15.6 popisuje některé SQL/XML funkce dostupné v standardu SQL 2006 Název funkce
Popis
XMLPARSE
Parsuje znak nebo data velkého binárního objektu, produkuje hodnotu XML
XMLSERIALIZE
Konvertuje hodnotu XML do znaku nebo velkého binárního objektu
XMLVALIDATE
Ověřuje XML hodnotu oproti XML schématu a typověkomentuje XML hodnotu
XMLEXISTS
Rozhoduje, jestli XQuery vrátí výsledky (např. sekvenci jedné nebo více položek)
XMLQUERY
Spouští XQuery a vrací výslednou sekvenci
XMLTABLE
Spouští XQuery, vrací výslednou sekvenci jako relační tabulku (pokud je to možné)
XMLCAST
Castuje do nebo z XML typu
Tabulka 15.6 – SQL/XML funkce Následující příklady mohou být testovány pomocí dříve vytvořené databáze mydb .
Příklad 1 Představte si, že potřebujete lokalizovat jména všech klientů, kteří mají specifický zip kód. Tabulka clients uchovává adresy zákazníků, včetně zip kódu, v XML sloupci. Pomocí XMLEXISTS můžete hledat v XML sloupci potřebný zip kód a potom omezit vrácení výsledkové sady na patřičné záznamy. Požadovaný dotaz ukazuje Kód 15.7: SELECT name FROM clients WHERE xmlexists( '$c/Client/Address[zip="95116"]' passing clients.contact as "c" )
Kód 15.7 - Příklad použití XMLEXISTS V Kódu 15.7 je první řádek klauzulí SQL, která říká, že chceme získat informace ve sloupci name z tabulky clients.
266
Začínáme s DB2 Express-C
Klauzule WHERE spouští funkci XMLEXISTS, která specifikuje výraz XPath, který nabádá DB2 k navigaci na element zip a kontrolu hodnoty 95116. Část řádku $c/Client/Address označuje cestu uvnitř hierarchie XML dokumentu, kde může DB2 nalézt element zip. Znak dolaru ($) je použit pro určení proměnné; takže “c” je proměnnou. Tato proměnná je následně definována tímto řádkem: passing clients.contact as "c". Zde je clients názvem tabulky a contact názvem sloupce s datovým typem XML. Jinými slovy předáváme XML dokument proměnné “c”. DB2 prohlédne XML data obsažená ve sloupci contact, naviguje z kořenového uzlu Client níže do uzlu Address, pak do uzlu zip a nakonec určí, jestli zákazník má cílený zip kód. Funkce XMLEXISTS vyhodnocuje “pravdu” a DB2 vrací jméno klienta na příslušném řádku. Počínaje DB2 verze 9.5 může být dotaz výše zjednodušený, jak je ukázáno níže v Kódu 15.8. SELECT name FROM clients WHERE xmlexists( '$CONTACT/Client/Address[zip="95116"]' )
Kód 15.8 - Zjednodušená verze dotazu ukázaného v Kódu 15.7 V DB2 je automaticky vytvořena proměnná se stejným názvem, jako je sloupec XML. Na příkazu výše je proměnná CONTACT vytvořena automaticky systémem DB2. Její jméno je shodné s názvem XML sloupce CONTACT.
Příklad 2 Nyní se zamysleme, jak vyřešit problém vytvoření reportu se seznamem emailových adres zákazníků, kteří mají ve statusu hodnotu "Gold". Našemu účelu by mohl posloužit dotaz v Kódu 15.9 níže. SELECT xmlquery('$c/Client/email' passing contact as "c") FROM clients WHERE status = 'Gold'
Kód 15.9 - Příklad použití XMLQUERY První řádek určuje, že chceme vrátit emailovou adresu, která je elementem XML dokumentu (nerelační sloupec). Stejně, jako v minulém příkladu, je “$c” proměnnou, která obsahuje XML dokument. V tomto příkladu použijeme funkci XMLQUERY, která může být použita po SELECTu, zatímco po klauzuli WHERE je možné využít funkci XMLEXISTS .
Příklad 3
Kapitola 15 – DB2 pureXML
267
Mohou nastat situace, kdy byste rádi prezentovali data XML jako tabulky. To je možné s funkcí XMLTABLE, jak je ukázáno níže v Kódu 15.10. SELECT t.comment#, i.itemname, t.customerID, Message FROM items i, xmltable('$c/Comments/Comment' passing i.comments as "c" columns Comment# integer path 'CommentID', CustomerID integer path 'CustomerID', Message varchar(100) path 'Message') AS t
Kód 15.10 - Příklad použití XMLTABLE První řádek specifikuje sloupce, které mají být obsaženy ve výsledné sadě. Sloupce s prefixem proměnné “t” jsou založeny na hodnotách XML elementů. Třetí řádek vyvolává funkci XMLTABLE k určení DB2 XML sloupce obsahujícího cílová data (i.comments) a cesty uvnitř XML dokumentů, kde jsou prvky našeho zájmu umístěny. Oddíl začínající slovem columns, který se nachází mezi 4. a 6. řádkem, identifikuje konkrétní XML prvky, které budou mapovány na výstupní sloupce ve výsledné sadě SQL uvedené na řádku 1. Část tohoto mapování obsahuje určení datových typů, na které budou konvertovány hodnoty XML prvků. V tomto příkladu jsou všechna XML data konvertována do tradičních datových typů SQL. Příklad 4 Nyní se podívejme na jednoduchý příklad, v němž použijete výraz XQuery FLWOR uvnitř funkce SQL/XML XMLQUERY. Tato situace je znázorněna v Kódu 15.11. SELECT name, xmlquery( ‘for $e in $c/Client/email[1] return $e’ passing contact as “c” ) FROM clients WHERE status = ‘Gold’
Kód 15.11 - Příklad použití XMLQUERY a FLWOR První řádek určuje, že ve výsledné sadě bude obsaženo jméno zákazníka a výstup z funkce XMLQUERY. Druhý řádek uvádí, že má být vrácen první podprvek email prvku Client. Třetí řádek identifikuje zdroj XML dat (sloupec contact). Čtvrtý řádek oznamuje, že tento sloupec pochází z tabulky clients; a pátý řádek upřesňuje, že nás zajímají jen zákaznící Gold.
Příklad 5
268
Začínáme s DB2 Express-C
Příklad z Kódu 15.12 ukazuje znovu funkci XMLQUERY, která bere výraz XQuery FLWOR; nicméně všimněte si, že tentokrát vracíme nejen XML, ale také HTML. SELECT xmlquery('for $e in $c/Client/email[1]/text() return {$e}
' passing contact as "c") FROM clients WHERE status = 'Gold'
Kód 15.12 - Příklad vrácení XML a HTML Návratová klauzule „return” v XQuery vám umožňuje dle potřeby transformovat výstup XML. Použití funkce text()na prvním řádku udává, že nás zajímá pouze textová reprezentace první emailové adresy vyhovujících zákazníků. Druhý řádek specifikuje, že tato informace bude obklopena HTML tagy.
Příklad 6 Následující příklad používá funkci XMLELEMENT pro vytvoření několika prvků z tabulky položek, přičemž každý z prvků bude obsahovat podprvek ID, název značky a uchovávací skladovou jednotku (SKU), tedy hodnoty obdržené z odpovídajících sloupců tabulky items. V podstatě můžete použít funkci XMLELEMENT pro konverzi relačních dat do XML. To je ilustrováno v Kódu 15.13. SELECT xmlelement (name xmlelement (name xmlelement (name xmlelement (name FROM items WHERE srp < 100
"item", itemname), "id", id), "brand", brandname), "sku", sku)
Kód 15.13 - Příklad použití XMLELEMENT Dotaz v Kódu 15.13 vrátí výstup zobrazený v Kódu 15.14 - 4272 Classy <sku>981140
… - 1193 Natural557813
Kód 15.14 - Výstup dotazu z Kódu 15.13
Kapitola 15 – DB2 pureXML
269
15.3.5.2 Dotazování XML dat pomocí XQuery V předchozí sekci jsme se podívali na to, jak se dotazují XML data pomocí SQL s rozšířením XML. Jazyk SQL byl vždy primární dotazovací metodou a Xpath nebo Xquery byly vnořeny do SQL. V této sekci budeme probírat, jak dotazovat XML data pomocí XQuery. Tentokrát bude XQuery primární dotazovací metodou a v některých případech použijeme SQL vložené do XQuery (použití funkce db2-fn:sqlquery). Z XQuery zavoláme několik funkcí a také použijeme výraz FLWOR. Příklad 1 Máme zde jednoduchý XQuery pro vracení kontaktních dat zákazníka. V příkladu je CONTACT názvem XML sloupce a CLIENTS názvem tabulky. xquery db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)
Aby DB2 věděla, že má použít parser XQuery, je nutné před jakýmkoliv výrazem XQuery uvést příkaz xquery, jinak se bude DB2 snažit spustit výraz jazyka SQL. Funkce db2fn:xmlcolumn je funkcí, která získává XML dokument ze sloupce uvedeného jako parametr. Je to ekvivalent k SQL příkazu pro navrácení obsahu celého sloupce: SELECT contact FROM clients Příklad 2 V tomto příkladu ukázaném v Kódu 15.15 použijeme výraz FLWOR pro získání dat o klientských faxech. Xquery for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/fax return $y
Kód 15.15 - XQuery a výraz FLWOR První řádek vyvolává parser XQuery. Druhý řádek dává pokyn DB2, aby iterovala přes podprvek fax, obsažený ve sloupci CLIENTS.CONTACT. Každý prvek fax je svázán s proměnnou $y. Třetí řádek indikuje, že pro každou iteraci je vrácena hodnota “$y”. Výstup tohoto dotazu je ilustrovaný v Kódu 15.16 (Pro usnadnění čtení opomíjíme jmenný prostor ve výstupu, který může obsahovat více řádků): 4081112222 5559998888
Kód 15.16 – Výstup dotazu v Kódu 15.15 Příklad 3 Příklad v Kódu 15.17 dotazuje XML data a vrací výsledek jako HTML. xquery {
270
Začínáme s DB2 Express-C for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/Address order by $y/zip return - {$y}
}
Kód 15.17 – Příkaz XQuery s výrazem FLWOR, který vrací HTML Příklad vráceného HTML může vypadat tak, jak je ukázáno v Kódu 15.18. - <street>9407 Los Gatos Blvd. Los Gatos <state>ca 95302
<street>4209 El Camino Real Mountain View <state>CA 95302 ...
Kód 15.18 – Výsledek dotazu spuštěného v Kódu 15.17 Příklad 4 Následující příklad ukazuje, jak vložit SQL do XQuery pomocí funkce db2-fn:sqlquery. Funkce db2-fn:sqlquery spouští SQL dotaz a vrací jen vybraná XML data. SQL dotazy předané do db2-fn:sqlquery musí vracet pouze XML data. Tato XML data mohou být dále zpracována XQuery. Situaci znázorňuje Kód 15.19. xquery for $y in db2-fn:sqlquery( ‘select comments from items where srp > 100’ )/Comments/Comment where $y/ResponseRequested=‘Yes’ return (
Kapitola 15 – DB2 pureXML
271
{$y/ProductID $y/CustomerID $y/Message} )
Kód 15.19 – Příklad funkce db2-fn:sqlquery vkládající SQL do XQuery Dotaz SQL uvedený v příkladu filtruje řádky na základě podmínky, že sloupec srp má větší hodnotu než 100. Z těchto filtrovaných řádků vybere sloupec comments, což je XML sloupec. Dále je použit XQuery (nebo XPath) pro průchod do podprvků. Poznámka: SQL nerozlišuje velká a malá písmena a DB2 ukládá všechny tabulky a sloupce defaultně s velkými písmeny. Na druhou stranu, XQuery malá a velká písmena rozlišuje. Funkce uvedené výše jsou funkce prostředí XQuery, takže všechny názvy tabulek a sloupců by měly být napsány velkými písmeny. Procházení objektů malých písmen může mít za následek chybu (nedefinovaný objekt).
15.3.6 Spojení v SQL/XML Tato sekce popisuje, jak se provádí operace JOIN mezi XML sloupci v jiných tabulkách nebo mezi XML sloupcem a relačním sloupcem. Předpokládejme, že máte vytvořeny dvě tabulky s využitím příkazů, které jsou uvedeny v Kódu 15.20 CREATE TABLE dept (unitID CHAR(8), deptdoc XML) CREATE TABLE unit (unitID CHAR(8) primary key not null, name CHAR(20), manager VARCHAR(20), ... )
Kód 15.20 - DDL tabulek použitých na příkladu JOIN Operaci JOIN můžete provést dvěma způsoby. První metoda je ukázána v Kódu 15.21. SELECT u.unitID FROM dept d, unit u WHERE XMLEXISTS ( ‘$e//employee[name = $m]’ passing d.deptdoc as “e”, u.manager as “m”)
Kód 15.21 – První metoda pro provedení JOIN s SQL/XML Čtvrtý řádek výše zmíněného příkazu ukazuje, že operace JOIN vzniká mezi prvkem name, což je podprvek XML sloupce deptdoc v tabulce dept, a relačním sloupcem manager v tabulce unit. Kód 15.22 ukazuje druhou metodu provedení operace JOIN. SELECT u.unitID FROM dept d, unit u
272
Začínáme s DB2 Express-C
WHERE u.manager = XMLCAST( XMLQUERY(‘$e//employee/name ‘ passing d.deptdoc as “e”) AS char(20))
Kód 15.22 – Druhá metoda pro provedení operace JOIN s SQL/XML V této druhé metodě je relační sloupec na levé straně operace JOIN. Pokud je relační sloupec na levé straně rovnice, musí být použit relační index místo XML indexu.
15.3.7 Spojení s XQuery Předpokládejme, že byly vytvořeny následující tabulky: CREATE TABLE dept(unitID CHAR(8), deptdoc XML) CREATE TABLE project(projectDoc XML)
Pokud použijeme SQL/XML, bude operace JOIN vypadat tak, jak je uvedeno v Kódu 15.23. SELECT XMLQUERY ( ‘$d/dept/employee’ passing d.deptdoc as “d”) FROM dept d, project p WHERE XMLEXISTS ( ‘$e/dept[@deptID=$p/project/deptID]‘ passing d.deptdoc as “e”, p.projectDoc as “p”)
Kód 15.23 – JOIN operace s SQL/XML Ekvivalentní operace JOIN použitím XQuery je ukázána v Kódu 15.24. Xquery for $dept in db2-fn:xmlcolumn(“DEPT.DEPTDOC”)/dept for $proj in db2-fn:xmlcolumn(“PROJECT.PROJECTDOC”)/project where $dept/@deptID = $proj/deptID return $dept/employee
Kód 15.24 – JOIN operace s XQuery Tato druhá metoda je jednodušší pro interpretování – proměnná $dept váže XML dokument XML sloupce deptdoc v tabulce dept. Proměnná $proj váže XML dokument sloupce XML projectdoc v tabulce project. Řádek 4 pak provádí operaci JOIN mezi atributem prvního XML dokumentu a prvkem druhého XML dokumentu.
15.3.8 Operace UPDATE a DELETE Operace pro aktualizaci a mazání dat XML mohou být provedeny jedním ze dvou způsobů: Použitím SQL příkazů UPDATE a DELETE Použitím výrazu TRANSFORM V prvním případě použití SQL příkazů UPDATE a DELETE se aktualizace a mazání projeví na úrovni dokumentu; to znamená, že celý dokument XML je nahrazen aktualizovaným.
Kapitola 15 – DB2 pureXML
273
Například pokud budete chtít změnit jen prvek <state> v příkazu UPDATE uvedeným v Kódu 15.25 níže, musí být nahrazen celý XML dokument. UPDATE clients SET contact=( xmlparse(document ‘ <street>5401 Julio ave. San Jose <state>CA 95116 <work>4084633000 4081111111 4082222222 | 4087776666 <email>[email protected] ') ) WHERE id = 3227
Kód 15.25 - Příklad SQL UPDATE Nyní provedeme aktualizaci druhým způsobem – použitím výrazu TRANSFORM, což je daleko efektivnější. Umožní vám to nahrazovat, vkládat, mazat nebo přejmenovávat samotné uzly v XML dokumentu. Můžete také změnit hodnotu uzlu bez nahrazování uzlu samotného, obvykle za účelem změny hodnoty prvku nebo atributu, což je velice častý typ aktualizace. Tato podpora byla přidána v DB2 verze 9.5. Výraz TRANSFORM je součástí jazyka XQuery, můžete ho použít kdekoliv, kde obvykle používáte XQuery. Například ve výrazu FLWOR nebo ve funkci XMLQUERY v příkazu SQL/XML. Nejtypičtější použití je v SQL příkazu UPDATE pro modifikaci XML dokumentu v XML sloupci. Kód 15.26 ukazuje syntaxi výrazu TRANSFORM. >>-transform--| copy clause |--| modify clause |--| return clause |->< copy clause .-,---------------------------------------. V | |--copy----$VariableName--:=--CopySourceExpression-+------------| modify clause |--modify--ModifyExpression-------------------------------------|
Začínáme s DB2 Express-C
274
return clause |--return--ReturnExpression-------------------------------------|
Kód 15.26 – Syntaxe výrazu TRANSFORM Klauzule copy je použita pro přiřazení k proměnné XML dokumentu, který chcete zpracovat. V klauzuli modify můžete vyvolat výrazy insert, delete, rename, nebo replace. Tyto výrazy vám umožní provádět aktualizace vašeho XML dokumentu. Například: •
Pokud chcete přidat nové uzly do dokumentu, použijete výraz insert
•
Pro mazání uzlů z XML dokumentu použijte výraz delete
•
Pro přejmenování prvku nebo atributu v XML dokumentu použijte výraz rename
•
Pro nahrazení existujícího uzlu nebo sekvenci uzlů použijte výraz replace. Přepisovaná hodnota výrazu může být použita jen pro změnu hodnoty prvku nebo atributu.
Klauzule return vrací výsledek změněného výrazu. Kód 15.27 ukazuje příklad příkazu UPDATE pomocí výrazu TRANSFORM. (1)-- UPDATE customers (2)-- SET contactinfo = xmlquery( 'declare default element namespace (3)-"http://posample.org"; (4)-transform (5)-copy $newinfo := $c (6)-modify do insert <email2>my2email.gm.com (7)-as last into $newinfo/customerinfo (8)-return $newinfo' passing contactinfo as "c") (9)-- WHERE id = 100
Kód 15.27 - UPDATE pomocí výrazu TRANSFORM Ve výše uvedeném příkladu jsou řádky (1), (2) a (9) součástí syntaxe SQL UPDATE. Na řádku (2) je vyvolána funkce XMLQUERY, která volá transformační výraz na řádku (4). Blok transformačního výrazu probíhá od řádku (4) do řádku (8) a je využit pro vložení nového uzlu do XML dokumentu, který obsahuje prvek email2. Zapamatujte si, že aktualizace prvku v XML dokumentu přes pohled není podporována. Smazání celého XML dokumentu z tabulky je stejně přímočaré jako při použití příkazu SELECT v SQL/XML. Využijte příkaz SQL DELETE a specifikujte potřebnou WHERE podmínku.
Kapitola 15 – DB2 pureXML
275
15.3.9 XML indexování V XML dokumentu mohou být indexy vytvořeny pro prvky, atributy nebo pro hodnoty (textové uzly). Níže je několik příkladů. Předpokládejme, že byla vytvořena tabulka: CREATE TABLE customer(info XML)
Dále předpokládejme, že XML dokument v Kódu 15.28 je jedním z dokumentů uložených v tabulce. <customerinfo Cid="1004"> Matt Foreman <street>1596 Baseline Toronto <state>Ontario M3Z-5H9 905-555-4789 416-555-3376 Peter Smith 416-555-3426
Kód 15.28 – Použitý XML dokument v příkladech spojených s XML indexy Příkaz ukázaný v Kódu 15.29 vytváří index na atributu Cid CREATE UNIQUE INDEX idx1 ON customer(info) GENERATE KEY USING xmlpattern '/customerinfo/@Cid' AS sql DOUBLE
Kód 15.29 – Index na atributu Cid Příkaz ukázaný v Kódu 15.30 vytváří index na prvku name CREATE INDEX idx2 ON customer(info) GENERATE KEY USING xmlpattern '/customerinfo/name' AS sql VARCHAR(40)
Kód 15.30 – Index na prvku name Příkaz v Kódu 15.31 vytváří index na všech prvcích name CREATE INDEX idx3 ON customer(info) GENERATE KEY USING xmlpattern '//name' AS sql VARCHAR(40);
Kód 15.31 – Index na všech prvcích name
276
Začínáme s DB2 Express-C
Příkaz v Kódu 15.32 vytváří index na všech textových uzlech (všech hodnotách). Není to doporučováno, protože by mohlo být příliš náročné udržovat index pro aktualizační, odstraňovací a vkládací operace, a index by byl příliš velký. CREATE INDEX idx4 ON customer(info) GENERATE KEY USING xmlpattern '//text()' AS sql VARCHAR(40);
Kód 15.32 – Index na všech textových uzlech (nedoporučujeme)
15.4 Práce s XML schématy Pokud je XML dokument ve vhodné formě, DB2 vám jej umožňuje vložit do databáze. Pokud v takové formě není, obdržíte chybovou hlášku při vkládání. Na druhou stranu DB2 vás nenutí kontrolovat XML dokument. Pokud chcete mít XML dokument validní, máte několik alternativ, jak si povíme v této části.
15.4.1 Registrování vašich XML schémat XML schémata jsou uložena v DB2 databázích v takzvaném repozitáři XML schémat. Pro přidání schématu do repozitáře použijte příkaz REGISTER XMLSCHEMA. Například řekněme, že máte XML dokument uložen v souboru order.xml, jak je ukázáno na Obrázku 15.10
Kapitola 15 – DB2 pureXML
277
Obrázek 15.10 - Soubor order.xml obsahující XML dokument Nyní řekněme, že máte dokument XML schématu uložen v souboru order.xsd, jak je ukázáno na Obrázku 15.11
Obrázek 15.11 - Soubor order.xsd obsahující XML schéma V tomto XML schématu dokumentu jsme elipsou zvýraznili následující: <xsd:schema ….>: Naznačuje, že jde o XML dokument schématu. <xsd:import …>: Importujeme další xsd soubory (ostatní XML schémata), které mohou být částí větších XML schémat. minOccurs=“1”: Příklad „pravidla“ XML schématu, kde pro prvek Item platí, že se může objevit nejméně jednou nebo jinak řečeno, měl by existovat nejméně jeden prvek Item. Dále k zaregistrování XML schéma do databáze by mohl být použit skript podobný tomu, který je znázorněn v Kódu 15.33 níže. Skript obsahuje komentáře vysvětlující jednotlivé kroky. -- PŘIPOJENÍ K DATABÁZI CONNECT TO SAMPLE;
278
Začínáme s DB2 Express-C
-- REGISTROVÁNÍ HLAVNÍHO XML SCHÉMATU REGISTER XMLSCHEMA http://www.test.com/order FROM D:\example3\order.xsd AS order; -- PŘIDÁNÍ XML SCHÉMATU DO HLAVNÍHO SCHÉMATU ADD XMLSCHEMA DOCUMENT TO order ADD http://www.test.com/header D:\example3\header.xsd;
FROM
-- PŘIDÁNÍ XML SCHÉMATU DO HLAVNÍHO SCHÉMATU ADD XMLSCHEMA DOCUMENT TO order ADD http://www.test.com/product D:\example3\product.xsd;
FROM
-- PŘIDÁNÍ XML SCHÉMATU DO HLAVNÍHO SCHÉMATU ADD XMLSCHEMA DOCUMENT TO order ADD http://www.test.com/customer D:\example3\customer.xsd;
FROM
-- UKONČENÍ REGISTRACE SCHÉMATU COMPLETE XMLSCHEMA order;
Kód 15.33 – Ukázkový skript znázorňuje kroky při registraci XML schématu Pro pozdější zkontrolování těchto informací můžete použít příkazu SELECT z katalogových tabulek, jak je ukázáno níže v Kódu 15.34. SELECT CAST(OBJECTSCHEMA AS VARCHAR(15)), CAST(OBJECTNAME AS VARCHAR(15)) FROM syscat.xsrobjects WHERE OBJECTNAME='ORDER‘;
Kód 15.34 – Získání informací o XML schématu z katalogových tabulek DB2
15.4.2 Validace XML schématu Jakmile je vaše XML schéma zaregistrováno v DB2, můžete dokumenty XML kontrolovat dvěma způsoby: Použijte funkci XMLVALIDATE během INSERT Použijte trigger BEFORE Obrázek 15.12 ukazuje příklad, kde XML dokument, jehož obsah byl uveden v Kódu 15.10, je validní podle XML schématu znázorněného v Kódu 15.11.
Kapitola 15 – DB2 pureXML
279
Obrázek 15.12 – Validace XML schématu použitím XMLVALIDATE Pro otestování, zda je XML dokument validní, můžete použít “IS VALIDATED” v omezení CHECK. Použitím rozdílných XML schémat můžete ověřovat XML dokumenty ve sloupci. Je to důležité pro snadnou migraci XML schémat z verze 1 na verzi 2. Ve stejném XML sloupci můžete také najít XML dokumenty bez jakékoliv validace. Je to užitečné v případě, že pro dokumenty, které obdržíte z důvěryhodných a nedůvěryhodných zdrojů, je později vyžadována validace schématu.
15.4.3 Další podpora XML Malé XML dokumenty nyní mohou být přímo v základní tabulce. To znamená, že XML data jsou uložena na stejném místě jako relační data a můžou tak čerpat výhody ze stejných komprimačních mechanismů jako relační data. Větší XML dokumenty jsou uloženy v oddělených interních objektech, které mohou být také komprimovány. DB2 také podporuje evoluci XML schématu. To znamená, že pokud se vaše XML schéma změní, můžete aktualizovat XML schéma jednoduše pomocí příkazu UPDATE
280
Začínáme s DB2 Express-C
XMLSCHEMA. Pokud jsou změny v XML schématu významnější, obdržíte zřejmě nějaké chyby. V DB2 je také podporovaná dekompozice XML nebo “trhání”. Jedná se o „starou“ metodu, jak uložit XML v databázi, která je používána ostatními výrobci databází pro ukládání XML. DB2 tuto metodu stále podporuje, pokud ji chcete používat; ale doporučujeme pureXML. DB2 také podporuje XML Extender, který také používá starou metodu pro ukládání XML, ale toto rozšíření již nebude dále vyvíjeno. S DB2 verze 9.7 byly všechny výhody pureXML rozšířeny na databázové partitiony, často používané v datových skladech. Database Partitioning Feature (DPF) je nabízena v DB2 Enterprise Edition.
15.6 Shrnutí Tato kapitola vám představila XML a pureXML technologii. Používání XML dokumentů roste exponenciálně díky nástrojům Web 2.0 a technikám, jako je např. SOA. Ukládáním XML dokumentů do DB2 databáze můžete využívat výhod bezpečnosti, výkonu a kódovací flexibility použitím pureXML. PureXML je technologií, která vám umožňuje ukládat XML dokumenty v parsovaném, hierarchickém formátu, jako strom, a toto vše je prováděno v čase ukládání do databáze. V čase dotazování pak není potřeba parsovat XML dokument, aby se vytvořila stromová struktura před zpracováním. Strom pro XML dokument již byl vytvořen v čase ukládání do databáze. Navíc technologie pureXML používá nativní XML engine, který rozumí XQuery; proto neexistuje potřeba mapovat XQuery na SQL, což je prováděno jinými databázovými produkty. V kapitole jsme se také bavili o vkládání, mazání a aktualizaci XML dokumentů použitím SQL/XML a XQuery. Také se probíraly XML indexy, XML schémata a ostatní funkcionality, jako například komprimace a evoluce XML schématu.
15.7 Příklady Během této kapitoly jste viděli několik příkladů syntaxe SQL/XML a XQuery a uvedli jsme použití Příkazového editoru DB2 a IBM Data Studia. V tomto příkladu si otestujete vaše znalosti SQL/XML a XQuery a prohloubíte si zkušenosti využíváním těchto nástrojů. Budeme používat databázi mydb vytvořenou za pomoci skriptu table_creation.txt, který byl vysvětlen dříve v této kapitole (Kód 15.5). Postup 1. Vytvořte databázi mydb a nahrajte XML data, jak jsme již v kapitole rozebírali dříve. Soubor table_creation.txt je součástí doprovodného souboru Expressc_book_exercises_9.7.zip pod adresářem Kapitola 2. Spusťte soubor skriptu table_creation.txt z Příkazového okna DB2 nebo shellu Linuxu: db2 –tvf table_creation.txt
Kapitola 15 – DB2 pureXML
281
2. Pokud skript zhavaruje v jakémkoliv kroku, snažte se zjistit problém tím, že si prohlédnete chybové hlášení. Typickým problémem, když takto spouštíte skript, může být nutnost změnit cestu souborů, protože se mohou nacházet v rozdílných adresářích. Vždy můžete smazat databázi a začít znovu po spuštění tohot příkazu z Příkazového okna DB2 nebo shellu Linuxu: db2 drop database mydb
3. Pokud obdržíte chybovou hlášku při pokusu odebrat databázi, protože existují aktivní připojení, spusťte nejprve tento příkaz: db2 force applications all
4. Po úspěšném spuštění skriptu použijte Řídicí centrum nebo IBM Data Studio pro kontrolu, že se tabulky items a clients vytvořily a že obsahují 4, resp. 7 řádků. 5. S vytvořenou databází mydb a se dvěma naplněnými tabulkami se nyní můžete připojit a provést dotazy zmíněné od Kódu 15.7 do 15.19
A Příloha A – Řešení problémů Tato příloha se zabývá řešením problémů, které mohou nastat při práci s DB2. Obrázek A.1 poskytuje stručný přehled činností, které by měly následovat, pokud vyvstane problém.
Obrázek A.1 – Přehled řešení problémů
Poznámka: Pro více informací o řešení problémů se podívejte na toto video: http://www.channeldb2.com/video/video/show?id=807741:Video:4462
Začínáme s DB2 Express-C
284
A.1 Zjišťování více informací o chybových kódech Pro získání více informací o obdrženém chybovém kódu odešlete kód s prefixem otazníku ve vkládacím okně Příkazového editoru a klikněte na tlačítko Execute. Je to ukázáno na Obrázku A.2.
Obrázek A.2 – Zjišťování více informací o chybových kódech DB2 Znak otazníku (?) vyvolá příkaz nápovědy DB2. Níže je několik příkladů, jak vyvolat nápovědu, pokud například obdržíte SQL chybovou hlášku “-104”. Všechny příklady uvedené níže jsou ekvivalentní. db2 db2 db2 db2 db2
? ? ? ? ?
SQL0104N SQL104N SQL-0104 SQL-104 SQL-104N
A.2 SQLCODE a SQLSTATE SQLCODE je kód obdržený po každém spuštění SQL příkazu. Význam jednotlivých hodnot je shrnut níže: SQLCODE = 0; příkaz byl úspěšný SQLCODE > 0; příkaz byl úspěšný, vrátil ale upozornění SQLCODE < 0; příkaz nebyl úspěšný a vrátil chybu SQLSTATE je pětiznakový řetězec, který se přizpůsobuje ISO/ANSI SQL92 standardům. První dva znaky jsou známé jako kód třídy: Kód třídy 00 znamená, že příkaz byl úspěšný. Kód třídy 01 znamená upozornění.
Příloha A – Řešení problémů 285 Kód třídy 02 znamená nenalezenou podmínku. Ostatní kódy tříd se považují za chyby.
A.3 Administrační notifikační log Administrační notifikační log poskytuje diagnostickou informaci o chybách v době selhání. Na platformách Linux a UNIX je administračním notifikačním logem textový soubor nazvaný <jméno_instance>.nfy (např. “db2inst.nfy”). Ve Windows se všechny zprávy administrační notifikace zapisují do logu událostí systému Windows. Konfigurační parametr DBM notifylevel umožňuje administrátorům specifikovat úroveň informací, která se má zaznamenávat: 0 – Nezachytávat žádné notifikační zprávy (nedoporučuje se) 1 – Fatální nebo neopravitelné chyby 2 – Vyžaduje okamžitou akci 3 – Důležitá informace, není vyžadována okamžitá akce (defaultní hodnota) 4 – Informativní zprávy
A.4 db2diag.log Log db2diag.log poskytuje detailnější informace než Administrační notifikační log DB2. Je běžně používán jen technickou podporou IBM DB2 nebo zkušenými DBA. Informace v db2diag.log obsahují: DB2 kódovou lokaci, která reportuje chybu. Aplikační identifikátory, které vám umožní uspořádat záznamy příslušející aplikaci v db2diag.logs serverů a klientů. Diagnostickou zprávu (začínající na "DIA"), vysvětlující důvod chyby. Všechna dostupná podpůrná data, jako SQLCA datové struktury a ukazatele na lokaci se soubory výpisů a léček. Ve Windows (kromě Vista) je db2diag.log umístěný defaultně v adresáři:
C:\Documents and Settings\All Users\Application Data\IBM\DB2\DB2COPY1\ Ve Windows Vista je db2diag.log umístěn defaultně v adresáři: C:\ProgramData\IBM\DB2\DB2COPY1\ V Linuxu/UNIXu je db2diag.log umístěn defaultně v adresáři: /home//sqllib/db2dump
286
Začínáme s DB2 Express-C
Rozsah výpisu diagnostického textu je určen konfiguračním parametrem dbm cfg DIAGLEVEL. Rozsah je od 0 do 4, kde 0 je režim nejméně „upovídaný“ a 4 nejvíce. Defaultní úroveň je 3.
A.5 CLI trasy Pro CLI, Java, PHP a Ruby on Rails aplikace můžete pro řešení problémů vašich aplikací zapnout trasování CLI. To může být provedeno úpravami v souboru db2cli.ini na serveru, kde aplikace běží. Typické hodnoty souboru db2cli.ini jsou ukázány v Kódu A.1. [common] trace=0 tracerefreshinterval=300 tracepathname=/path/to/writeable/directory traceflush=1
Kód A.1 – soubor db2cli.ini file entries to turn on CLI Tracing Nízkoúrovňové trasování (db2trc) je také k dispozici, ale je obvykle užitečné jen pro technickou podporu DB2.
A.6 Nedostatky a opravy DB2 Někdy může problém, kterému čelíte, vzniknout chybou DB2. IBM pravidelně uvolňuje opravné balíčky, které obsahují kód pro opravení chyb (APAR). Dokumentace opravného balíčku obsahuje seznam oprav, které se v balíčku vyskytují. Při vývoji nových aplikací vždy doporučujeme použít poslední opravný balíček, aby se opravilo co nejvíce problémů. Pro zjištění vaší verze a úrovně opravných balíčků vyberte z Řídicího centra možnost O programu z menu Nápověda; nebo napište z příkazového okna db2level. Mějte na paměti, že opravné balíčky a IBM DB2 technická podpora nejsou s DB2 Express-C nabízeny. V DB2 Express-C se opravné balíčky neaplikují samostatně, ale jsou včleněny do instalačního image.
B Příloha B – Odkazy a zdroje B.1 Odkazy [1] ZIKOPOULOS, P. IBM® DB2® Universal Database™ and the Microsoft® Excel Application Developer… for Beginners, dbazine.com article, Duben 2005 http://www.dbazine.com/db2/db2-disarticles/zikopoulos15 [2] ZIKOPOULOS, P. DB2 9 and Microsoft Access 2007 Part 1: Getting the Data..., Database Journal article, Květen 2008 http://www.databasejournal.com/features/db2/article.php/3741221 [3] BHOGAL, K. Use Microsoft Access to interact with your DB2 data, developerWorks article, květen 2006. http://www.ibm.com/developerworks/db2/library/techarticle/dm0605bhogal/ [4] SARACCO, C. et all. IBM Redbook DB2 9: pureXML overview and fast start Červenec 2006. http://www.redbooks.ibm.com/abstracts/sg247298.html
B.2 Webové stránky: 1. DB2 Express-C webová stránka: www.ibm.com/db2/express Tuto webovou stránku použijte pro stažení image DB2 Express-C serverů, DB2 klientů, DB2 ovladačů, manuálů, přístupu do týmového blogu, zaregistrování do mailové skupiny, atd.
2. DB2 Express fórum: www.ibm.com/developerworks/forums/dw_forum.jsp?forum=805&cat=19 Pokud nemůžete přijít na odpovědi sami nebo s pomocí manuálu, použijte fórum pro posílání technických otázek.
3. DB2 Informační Centrum
288
Začínáme s DB2 Express-C Informační centrum poskytuje přístup k online manuálům. Je to zdroj, který obsahuje nejnovější informace. Pro každou verzi DB2 existuje odpovídající DB2 Informační centrum: DB2 9.1: http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp DB2 9.5: http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp DB2 9.7: http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp
4. developerWorks: http://www.ibm.com/developerworks/db2 Tato webová stránka je skvělým zdrojem pro vývojáře a DBA, poskytuje zdarma přístup k aktuálním článkům, návodům, atd..
5. alphaWorks: http://www.alphaworks.ibm.com/ Tato webová stránka poskytuje přímý přístup k přicházejícím technologoiím. Je to místo, kde můžete najít nejnovější technologie výzkumu IBM.
6. planetDB2: www.planetDB2.com Jedná se o agregovaný blog, kde bloguje mnoho autorů o DB2.
7. Technická podpora DB2: http://www.ibm.com/software/data/db2/support/db2_9/ Můžete se sem podívat na reporty závad a problémů (APAR) a další technické informace.
8. ChannelDB2: http://www.ChannelDB2.com/ ChannelDB2 je sociální síť pro DB2 komunitu. Nachází se zde obsah spojený s DB2 – videa, dema, podcasty, blogy, diskuze, atd. Pro Linux, Windows, z/OS a i5/OS.
B.3 Knihy 1. Free Redbook: DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET Whei-Jen Chen, John Chun, Naomi Ngan, Rakesh Ranjan, Manoj K. Sardana, Srpen 2006 - SG24-7301-00 http://www.redbooks.ibm.com/abstracts/sg247301.html?Open
Příloha B – Odkazy a zdroje 289 2. Free Redbook: DB2 pureXML Guide Whei-Jen Chen, Art Sammartino, Dobromir Goutev, Felicity Hendricks, Ippei Komi, Ming-Pang Wei, Rav Ahuja, Matthias Nicola. Srpen 2007 http://www.redbooks.ibm.com/abstracts/sg247315.html?Open 3. Free Redbook: Developing PHP Applications for IBM Data Servers. Whei-Jen Chen, Holger Kirstein, Daniel Krook, Kiran H Nair, Piotr Pietrzak Květen 2006 - SG24-7218-00 http://www.redbooks.ibm.com/abstracts/sg247218.html?Open 4. Understanding DB2 – Learning Visually with Examples V9.5 Raul F. Chong, et all. Leden 2008 ISBN-10: 0131580183 5. DB2® SQL PL: Essential Guide for DB2® UDB on Linux™, UNIX®, Windows™, i5/OS™, and z/OS®, 2.vydání Zamil Janmohamed, Clara Liu, Drew Bradstock, Raul Chong, Michael Gao, Fraser McArthur, Paul Yip ISBN: 0-13-100772-6 6. DB2 9: pureXML overview and fast start Cynthia M. Saracco, Don Chamberlin, Rav Ahuja Červen 2006 SG24-7298 http://www.redbooks.ibm.com/abstracts/sg247298.html?Open 7. Information on Demand - Introduction to DB2 9 New Features Paul Zikopoulos, George Baklarz, Chris Eaton, Leon Katsnelson ISBN-10: 0071487832 ISBN-13: 978-0071487832
B.4 Kontaktní emaily DB2 Express-C mailbox (Pro administrativní typy otázek): [email protected] Mailbox DB2 on Campus program: [email protected]
Začínáme s DB2 9.7 nemůže být jednodušší. Přečtěte si tuto knihu a: Objevíte DB2 používáním free edice Express-C Porozumíte DB2 architektuře, nástrojům, bezpečnosti Naučíte se, jak administrovat DB2 databáze Budete psát SQL, XQuery a uložené procedury Budete vyvíjet databázové aplikace pro DB2 Procvičíte si příklady
DB2 Express-C od IBM je bezplatná edice DB2 databázového serveru pro snadnou správu relačních a XML dat. Bezplatná znamená, že DB2 Express-C je zdarma ke stažení, zdarma k vyvíjení aplikací, zdarma pro nasazení v produkčním prostředí a také zdarma pro vkládání a distribuci vašich řešení. V DB2 nenajdete další limity, jako např. velikosti databází, počet databází nebo počet uživatelů. DB2 Express-C je spustitelná na Windows a Linuxových systémech a poskytuje aplikacím ovladače pro množství jazyků, včetně C/C++, Javy, .NET, PHP, Perlu a Ruby. K dispozici je nepovinné (a cenově dostupné) předplatné, zahrnující podporu dodatečných funkcionalit. Pokud vyžadujete ještě větší škálovatelnost nebo pokročilejší funkcionality, můžete bezproblémově vyvíjet aplikace pod DB2 Express-C a následně přejít na další DB2 edice, jako např. Workgroup a Enterprise. Tato bezplatná edice DB2 je ideální pro vývojáře, konzultanty, vendory, DBA, studenty nebo kohokoliv, kdo chce vyvíjet, testovat, nasazovat nebo distribuovat databázové aplikace. Přidejte se do rostoucí komunity uživatelů DB2 Express-C ještě dnes a otestujte si DB2 Express-C. Začněte objevovat, jak můžete vytvořit moderní aplikace a přinášet inovativní řešení. Pro více informací nebo stažení DB2 Express-C navštivte: ibm.com/db2/express Pro kontakt s komunitou DB2 a sledování video prezentací a blogů, navštivte: Channeldb2.com
Cena: 24.99 USD