IBM DB2 cechy warte odnotowania



Podobne dokumenty
Ćwiczenia 2 IBM DB2 Data Studio

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

SQL 4 Structured Query Lenguage

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Paweł Rajba

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Składowane procedury i funkcje

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Oracle PL/SQL. Paweł Rajba.

PL/SQL. Zaawansowane tematy PL/SQL

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

PODSTAWY BAZ DANYCH 13. PL/SQL

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Systemowe aspekty baz

Microsoft SQL Server Podstawy T-SQL

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

15. Funkcje i procedury składowane PL/SQL

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Oracle PL/SQL. Paweł Rajba.

W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).

Ile rekordów będzie zawierała tabela przy założeniu, że na początku była pusta?

Zaawansowane bazy danych i hurtownie danych semestr I

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Wykład 8. SQL praca z tabelami 5

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Systemowe aspekty baz danych

Bloki anonimowe w PL/SQL

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

Bazy danych 7. SQL podstawy

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

Cele. Definiowanie wyzwalaczy

Oracle PL/SQL. Paweł Rajba.

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Uprawnienia, role, synonimy

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH

Wykład 2. SQL 1 Structured Query Lenguage

Pakiety podprogramów Dynamiczny SQL

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Aspekty aktywne baz danych

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

Bazy danych 10. SQL Widoki

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

Relacyjne bazy danych. Podstawy SQL

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

Obiekty bazy danych DB2

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań,

Język PL/SQL Procedury i funkcje składowane

Wykład 5. SQL praca z tabelami 2

Zarządzanie obiektami bazy danych Oracle11g

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

BAZA DANYCH SIECI HOTELI

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Oracle11g: Wprowadzenie do SQL

Język SQL, zajęcia nr 1

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Wyzwalacze TWORZENIE WYZWALACZY

Wykład 6. SQL praca z tabelami 3

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

1. Wyzwalacze BD (ang. triggers)

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Programowanie po stronie serwera w SZBD. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Bazy danych 8. Procedury składowane i kursory. P. F. Góra

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

ORACLE. System Zarządzania Bazą Danych Oracle. Oracle Advanced SQL

Administracja i programowanie pod Microsoft SQL Server 2000

Ref. 7 - Język SQL - polecenia DDL i DML

SQL (ang. Structured Query Language)

SQL :: Data Definition Language

Bloki anonimowe w PL/SQL

Plan wykładu BAZY DANYCH II WYKŁAD 3. Zasięg zmiennych. Zasięg zmiennych

Zarządzanie bazą danych. Bazy Danych i Systemy informacyjne Wykład 4. Piotr Syga

Wyzwalacze (triggery) Przykład

Hurtownia Świętego Mikołaja projekt bazy danych

Transkrypt:

IBM DB2 cechy warte odnotowania v v v v v v Różne typy tabel w tym MDC - wielowymiarowe Podział jednej bazy danych na niezależne partycje nie tylko pojedynczej tabeli Łączenie pokrewnych instrukcji w jedną w celu zwiększenia wydajności Nadtabela i jej podtabele - oprócz typów i podtypów Możliwość przekazywania z procedury zbiorów wynikowych wierszy poprzez otwarte kursory również do aplikacji Autoryzacja przyznanym poziomem dostępu do tabel, kolumn i wierszy Label Based Access Control (LBAC) 1/125

Bibliografia Przygotowane w oparciu o: materiały szkoleniowe używane przez Artura Wrońskiego (IBM) i E. Mrówkę-Matejewską; Graeme Birchall, DB@ UDB V8.2 SQL Cookbook - dostępna w Internecie i w katalogu z prezentacją; materiały edukacyjne firmy IBM: DB2 v9 Fundamentals, DB2 SQL Workshop, DB2 SQLWorkshop for Experienced Users, DB2 v9 Admin Workshop for Windows, DB2 v8 Stored Procedures Programming Workshop dostępne w katalogu z prezentacją Dokumentacja: http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp Raul F.Chong,.. Zrozumieć DB2, IBM Press, Mikom, PWN 2006. 2/125

DB2 Editions M assively P arallel P rocessor (M PP ) DB2 C luster E nterprise S erver E dition w ith D ata P artitioning Feature E nterprise S erver E dition W orkgroup S erver E dition E xpress E dition Express: wersja darmowa wsparcie techniczne na Forum internetowym. 3/125

Instancja (database manager) - niezależne środowisko do pracy z bazami danych - dwie instancje na tym samym komputerze nie współużytkują żadnych zasobów (parametrów, plików). Serwer administracyjny udostępnia usługi zdalnej administracji i harmonogramowania zleceń (np. wykonanie skryptu SQL o określonej godzinie). Serwer administracyjny ma własną konfigurację i własną narzędziową bazę danych (tools database). 4/125

Control Center Object Tree Pane Contents Pane Object Detail Pane 5/125

Hierarchia obiektów DB2 Instance=Database Manager Instance 1 dbm configuration file SYSCATSPACE SYSCATSPACE Catalog Catalog Log DB configuration file Database 1 View1 View2 Log DB configuration file Database 2 View1 TSSMS1 TSDMSLRG1 USERSPACE1 Table1 Table2 Table3 Table1 Index1 TSDMSLRG3 BLOBs TSDMSREG2 Index1 Index2 Przy tworzeniu bazy danych domyślnie są tworzone trzy przestrzenie tabel: SYSCATSPACE, TEMPSPACE1, USERSPACE1 6/125

Struktura przestrzeni tabel Kontener miejsce, gdzie przechowywane są dane np. katalog, plik, dysk (raw device). 7/125

Przestrzeń tabel zarządzana przez system operacyjny (SMS) CREATE TABLESPACE nazwa MANAGED BY SYSTEM USING ('path') Dodatkowe miejsce na dysku jest alokowane w miarę potrzeb dane mogą być rozrzucone po całym dysku (większa fragmentacja). Wymagają mniejszego zaangażowania DBA w zarządzanie. 8/125

Przestrzeń tabel zarządzana przez DBA (DMS) CREATE TABLESPACE nazwa MANAGED BY DATABASE USING (FILE 'path' size) Składa się z kontenerów, które mogą być: plikami o z góry ustalonym rozmiarze, założonych przez DBA w momencie tworzenia przestrzeni tabel, jest dla nich od razu alokowana przestrzeń na dysku, co oznacza, że zwykle znajdują się w spójnym obszarze na dysku. Oznacza to mniej operacji R/W. dyskami (RAW devices) - system ma do dyspozycji spójny obszar całego dysku. Aby powiększyć rozmiar przestrzeni tabel, administrator musi dołożyć kolejny kontener albo rozszerzyć istniejący. Dane LOB mogą być składowane w osobnej przestrzeni tabel. 9/125

Typy przestrzeni tabel v v v Regular - do przechowywania tabel, indeksów i tabel katalogu systemowego. Temporary - używane przez operacje, które wymagają dodatkowego miejsca na dysku: sortowanie, złączenia tabel, reorganizacja tabel. Long - do przechowywania danych typu LOB. 10/125

Strony danych i ekstenty Domyślnie strona danych w bazie DB2 ma wielkość 4 KB (można ustawić też wielkość 8, 16 i 32 KB podczas tworzenia bazy danych). Każda strona (niezależnie od wielkości) zawiera nagłówek o stałej wielkości 76 bajtów. Wiersz danych nie może być dzielony między różne strony danych. Rozmiar ekstentu może mieć różną wielkość (ustawioną przez DBA podczas tworzenia przestrzeni tabel) - równy wielokrotności rozmiaru strony danych. Dane typu Long Field (long varchar i long vargraphic) przechowywane są w segmentach po 32 KB a dane LOB w segmentach po 64 MB. 11/125

Wstawianie danych Miejsce na nowe dane jest alokowane we wszystkich kontenerach przestrzeni tabel wg algorytmu round-robin - dane w każdej przestrzeni tabel są równo rozłożone między kontenery. W momencie dołożenia kontenera do przestrzeni tabel jest wykonywana reorganizacja danych tak, aby uzyskać równomiernie rozłożenie danych w kontenerach. Kontenery powinny mieć jednakowy rozmiar, aby były równomiernie zapełniane i żeby miejsce w jednym z nich nie skończyło się szybciej niż w innych. 12/125

Przypisanie puli buforów danych do przestrzeni tabel Domyślna pula buforów: ibmdefaultbp ALTER BUFFERPOOL ibmdefaultbp IMMEDIATE SIZE 1000; CREATE BUFFERPOOL databp IMMEDIATE SIZE 10000 PAGESIZE 8K; ALTER TABLESPACE userspace1 BUFFERPOOL databp; 13/125

Struktura bazy danych 14/125

Partycja bazy danych Partycja bazy danych (węzeł bazodanowy, database partition) - część bazy danych składającą się z własnych danych, indeksów, plików konfiguracyjnych i dzienników transakcji. Oprócz tego są partycje tabeli jak w Oracle i MS SQL Server. 15/125

Tabela na poziomie fizycznym Obiekt tabeli składa się z osobnych podobiektów: Obiekt danych - zawierający zwykłe dane tabeli. Obiekt indeksów zawierający wszystkie indeksy założone na tabeli. Obiekt dla pól typu LONG zawierający zawartość wszystkich pól typu LONG. - Pierwszy obiekt dla pól typu LOB zawierający wszystkie dane LOB. - Drugi obiekt dla pól typu LOB zawierający metadane dla wszystkich danych LOB. 16/125

Bitmapy ekstentów Bitmapy: 1. alokowanych/wolnych ekstentów w pliku, 2. opisujące ekstenty używane przez daną tabelę. 17/125

Typy tabel 1. Regular implementowane jako sterta (heap). 2. Append typ regular zoptymalizowany dla operacji INSERT i wyszukiwania (z typu regular zmiana przez ALTER TABLE). 3. Multidimensional clustering (MDC) grupowane według kilku kluczy (nazywanych wymiarami) dla zastosowań OLAP. 4. Range-clustered (RCT) grupowane liniowo względem wartości jednoznacznego klucza (wartość klucza określa adres) z określonego przedziału wartości, z góry alokowany obszar dla rekordów. Możliwy obszar nadmiarowy dla kluczy spoza określonego przedziału. Oprócz tego niezależnie są indeksy pogrupowane. 5. Partycjonowane 18/125

Składowanie tabeli MDC jako zbioru komórek z dostępem przez indeksy blokowe Komórka (pojęcie logiczne) zbiór rekordów z tym samym układem wartości wymiarów. Indeks blokowy osobno dla każdego wymiaru. Alternatywa dla indeksów bitmapowych. 19/125

Zbiór komórek - każda składająca się ze zbioru bloków Komórka składa się z bloków stron rekordów (rozmiaru ekstentów) zapisywanych obok siebie na dysku. 20/125

Złożony indeks blokowy Umożliwiający znajdowanie bloków dla kombinacji wartości wymiarów. Uporządkowanie leksykograficzne 21/125

Tabela zorganizowana według wymiarów (MDC table) CREATE TABLE Sales ( sales_person VARCHAR(30) NOT NULL, region CHAR(5) NOT NULL, number_of_sales INT NOT NULL, year INT) ORGANIZE BY DIMENSIONS (sales_person, year); 22/125

SQL 23/125

Schemat Instancja serwera składa się z baz danych. Każda baza danych składa się ze schematów, w tym jeden schemat tworzony automatycznie o nazwie identycznej z identyfikatorem autoryzacji właściciela bazy danych. Jest to domyślny (bieżący) schemat w bazie danych. CREATE SCHEMA MySchema; Nazwa kwalifikowana obiektu w bazie danych: schemat.obiekt CREATE TABLE Tab1 (kol int); Tworzona w schemacie userid czyli userid.tab1 CREATE TABLE MySchema.Tab1 (kol int); Tworzona w schemacie MySchema czyli MySchema.Tab1 24/125

Usunięcie schematu DROP SCHEMA nazwa RESTRICT; Możliwe tylko wtedy, gdy schemat jest pusty nie zawiera obiektów (słowo RESTRICT wymagane). 25/125

Zmiana bieżącego schematu VALUES CURRENT SCHEMA; SET CURRENT SCHEMA db2admin; CREATE TABLE tab1 ( ); -- bieżący sch. CREATE TABLE schema1.tab1 ( ); -- jawny schem. SET CURRENT SCHEMA USER; 26/125

VALUES Wynikiem tabela o wartościach określonych przez wartości wyrażeń. Przykłady: VALUES (1, 2, 3) - 1 wiersz o 3 kolumnach VALUES (1,21),(2,22),(3,23) - 3 wiersze każdy o 2 kolumnach VALUES CURRENT DATE 1 wiersz z jedną kolumną 27/125

28/125

EMPLOYEE (lub STAFF) CREATE TABLE EMPLOYEE (EMPNO CHARACTER(6) PRIMARY KEY,FIRSTNME VARCHAR(12) NOT NULL,MIDINIT CHARACTER(1),LASTNAME VARCHAR(15) NOT NULL,WORKDEPT CHARACTER(3),PHONENO CHARACTER(4),HIREDATE DATE,JOB CHARACTER(8),EDLEVEL SMALLINT NOT NULL,SEX CHARACTER(1),BIRTHDATE DATE,SALARY DECIMAL(9,2),BONUS DECIMAL(9,2),COMM DECIMAL(9,2)) IN USERSPACE1; 29/125

DEPARTMENT (lub DEPT) CREATE TABLE DEPARTMENT (DEPTNUMB SMALLINT NOT NULL,DEPTNAME VARCHAR(14),MANAGER SMALLINT,DIVISION VARCHAR(10),LOCATION VARCHAR(13)) IN USERSPACE1; 30/125

Tabele CREATE TABLE tab1 (id INT); CREATE TABLE tab2 LIKE tab1; CREATE TABLE tab3 AS (SELECT * FROM tab1) ; DESCRIBE TABLE tab1; 31/125

Typy danych SMALLINT, INT, BIGINT REAL, DOUBLE, DECIMAL(n,m) CHAR(n), VARCHAR(n), LONG VARCHAR, CLOB(n) GRAPHIC,VARGRAPHIC,LONG VARGRAPHIC, DBCLOB(n) BLOB(n) DATE, TIME, TIMESTAMP DATALINK obiekt zawierający link (URL) do zewnętrznego obiektu (atrybuty: link type, data location, comment) XML 32/125

Konwersje typów Operacje na niekompatybilnych typach danych wymagają jawnej konwersji, np: CHAR <-> NUMERIC - Przykład jawnej konwersji CAST(col1 as DECIMAL(4,2)) DECIMAL(col1,4,2) - Metoda na sprawdzenie typów zapytania DESCRIBE OUTPUT (SELECT SUM(col1) FROM tab2); 33/125

Kolumna IDENTITY CREATE TABLE invoice_data (invoice# INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,. PRIMARY KEY (invoice#)); GENERATED ALWAYS zawsze generowany przez System (opcja domyślna), GENERATED BY DEFAULT generowane przez System gdy użytkownik nie załączy wartości. Ostatnio wygenerowana wartość: IDENTITY_VAL_LOCAL() Generowane przed wyzwalaczem BEFORE. Możliwe parametry: AS IDENTITY (START WITH 100 INCREMENT BY 10) 34/125

Wstawianie do tabeli z IDENTITY INSERT INTO customers(name, address) VALUES ( FRED, xxx ); -- lub INSERT INTO customers VALUES (DEFAULT, FRED, xxx ); Jedna operacja: Wstaw i wyświetl SELECT MIN(cust#) AS minc, WYNIK MAX(cust#) AS maxc, ============== COUNT(*) AS rows MINC MAXC ROWS FROM FINAL TABLE ----------------- ---- ---- (INSERT INTO customers 3 5 3 VALUES (DEFAULT,'FRED','xxx'), (DEFAULT,'DAVE','yyy'), (DEFAULT,'JOHN','zzz')); Połączenie dwóch instrukcji w jedną zwiększenie wydajności. 35/125

Sekwencje CREATE SEQUENCE seq1 AS BIGINT [START WITH 1 INCREMENT BY 1 NO MAXVALUE NO CYCLE CACHE 24]; CACHE czy generować wartości sekwencji blokami VALUES NEXTVAL FOR seq1 ; VALUES PREVVAL FOR seq1 ; VALUES PREVVAL FOR seq1 INTO :host-var; ALTER SEQUENCE seq1 RESTART WITH 100; 36/125

Przykład CREATE SEQUENCE fred; SEQ# -------- 1 WITH temp1 (n1) AS 2 VALUES ( a ),( b ),( c ),( d ),( e ) 3 SELECT NEXTVAL FOR fred AS seq# 4 FROM temp1; 5 37/125

Globalna stała za pomocą sekwencji CREATE SEQUENCE biggest_sale_to_date AS INTEGER START WITH 345678 INCREMENT BY 0; Przechowywana w katalogu systemowym. 38/125

Tymczasowa globalna tabela DECLARE GLOBAL TEMPORARY TABLE fred (dept SMALLINT NOT NULL, avg_salary DEC(7,2) NOT NULL, num_emps SMALLINT NOT NULL) ON COMMIT PRESERVE ROWS; -- lub ON COMMIT DELETE ROWS -- DECLARE, bo jej schemat nie jest zapisywany w katalogu systemowym i istnieje tylko na czas sesji (domyślny kwalifikator schematu tabeli session tj. session.fred). Objęte mechanizmem wycofywania ale nie odtwarzania po awarii! INSERT INTO fred SELECT dept, AVG(salary), COUNT(*) FROM staff WHERE id > 200 GROUP BY dept; SELECT COUNT(*) AS cnt FROM fred; DELETE FROM fred WHERE dept > 80; 39/125

Odróżnialny typ Aby uniemożliwić wspólne operacje np. na dwóch różnych walutach. CREATE DISTINCT TYPE Jap_Yen AS DECIMAL(15,2) WITH COMPARISONS; Wartości typu JAP_YEN nie mogą być porównywane z wartościami typu DECIMAL(15,2) 40/125

Indeksy CREATE INDEX idx1 ON tab1(col1) ; CREATE INDEX idx1 ON tab1(col1) CLUSTER ; -- indeks pogrupowany na tabeli tab1, może być niejednoznaczny. Gdy indeks na kluczu głównym ma być pogrupowany, to jest istotna kolejność: CREATE TABLE bez definiowania klucza głównego, CREATE INDEX CLUSTER ALTER TABLE PRIMARY KEY 41/125

Partycjonowana tabela 1. Każda partycja tabeli w innej przestrzeni tabel CREATE TABLE Customer (shipdate DATE, name CHAR(30)) IN ts1, ts2, ts3, ts4, ts5 PARTITION BY RANGE(shipdate) (STARTING FROM ('01/01/2009') ENDING AT ('12/31/2009') EVERY (3 MONTHS)) 2. Każda partycja tabeli w innej partycji bazy danych CREATE TABLE Sales (CUSTOMER VARCHAR(80), REGION CHAR(5), YEAR INTEGER) DISTRIBUTE BY HASH (YEAR) ORGANIZE BY DIMENSIONS (REGION, YEAR) 42/125

Perspektywy CREATE VIEW employee_view AS SELECT a.empno, a.firstnme, a.salary, a.workdept FROM employee a WHERE a.salary >= (SELECT AVG(b.salary) FROM employee b WHERE a.workdept = b.workdept); 43/125

Perspektywy CREATE TABLE p1(id INT CHECK (id < 100)); CREATE TABLE p2(id INT CHECK (id >= 100)); CREATE VIEW pv AS SELECT id FROM p1 UNION ALL SELECT id FROM p2 WITH CHECK OPTION WITH ROW MOVEMENT; WITH ROW MOVEMENT przy aktualizacji wiersz naruszający warunek CHECK zmienia tabelę. 44/125

Perspektywy lokalne WITH temp1(id,name) AS ( VALUES (1,'abc'), (2,'bcd'), (3,'cde')) SELECT id+100, UCASE(name) FROM temp1 ORDER BY name DESC; WITH temp1(col1) AS ( VALUES 0 UNION ALL SELECT col1 + 1 FROM temp1 WHERE col1 + 1 < 100 ) SELECT * FROM temp1; -- rekurencyjna 45/125

Terminologia SELECTów WITH get_matching_rows AS -- perspektywa lokalna (SELECT id, name, salary -- podzapytanie FROM staff WHERE id < 50 UNION ALL -- pełne zapytanie SELECT id, name, salary -- podzapytanie FROM staff WHERE id = 100 ) SELECT * -- podzapytanie FROM get_matching_rows ORDER BY id FETCH FIRST 10 ROWS ONLY FOR FETCH ONLY; 46/125

Tabela zmaterializowanego zapytania - materialized query table (perspektywa zmaterializowana) CREATE TABLE staff_summary AS (SELECT dept, COUNT(*) AS count_rows, SUM(id) AS sum_id FROM staff GROUP BY dept) DATA INITIALLY DEFERRED REFRESH IMMEDIATE; - Tabela utworzona z klauzulami określającymi źródło AS oraz parametry odświeżania REFRESH: IMMEDIATE budowa przy użyciu instrukcji REFRESH TABLE, następnie przy każdej zmianie źródłowych tabel, lub DEFERRED tylko za pomocą instrukcji REFRESH TABLE. - Fraza DATA INITIALLY DEFERRED wymagana. - Można tworzyć indeks (ale nie PRIMARY KEY ani UNIQUE). - Można tworzyć indeks pogrupowany (CLUSTER). 47/125

Instrukcja REFRESH TABLE REFRESH TABLE staff_summary; Dwa tryby odświeżania: INCREMENTAL (przyrostowy) w oparciu o dziennik zmian, NOT INCREMENTAL wyliczane od nowa całe zapytanie. Dziennik zmian (staging table) wymagany do odświeżania typu INCREMENTAL. Tworzony tak jak tabela, np: CREATE TABLE emp_sumry_s ( ) FOR staff_summary PROPAGATE IMMEDIATE; 48/125

Alias tabeli, perspektywy CREATE ALIAS employee_al1 FOR employee; 49/125

Nickname Nazwa dla odległej tabeli lub nie-relacyjnego obiektu, przy użyciu którego w zapytaniach można ich używać tak jakby były zwykłymi tabelami. CREATE NICKNAME emp FOR unixserver.production.employee; 50/125

Katalog systemowy w schemacie SYSCAT SELECT CAST(colname AS CHAR(18)) AS Name, CAST(typename AS CHAR(18)) AS Type, length AS Length, scale AS Scale, nulls AS Nulls FROM syscat.columns WHERE tabname = 'MASTER' AND tabschema = 'PL38219' ORDER BY colno; 51/125

Więzy spójności ALTER TABLE detail ADD CONSTRAINT detail_fk FOREIGN KEY (fk) REFERENCES master(id) ON DELETE CASCADE; ALTER TABLE tab1 ADD CONSTRAINT const1 CHECK (ABS(c1) > 100 OR c2 < 1000) ; 52/125

Wyszukiwanie danych Jak w Standardzie: v v v v v v Kolumny wyliczane Select count Select distinct Klauzule WHERE, ORDER BY Klauzula GROUP BY HAVING Predykaty LIKE, BETWEEN, IN 53/125

Zmienne systemowe CURRENT ISOLATION CURRENT DATE CURRENT LOCK TIMEOUT CURRENT PATH CURRENT SCHEMA CURRENT TIME CURRENT TIMESTAMP USER VALUES CURRENT DATE; -- lub SELECT CURRENT DATE FROM sysibm.sysdummy1; -- jak DUAL w Oracle 54/125

Operacje na czasie CURRENT TIMESTAMP + 1 DAY CURRENT DATE 3 MONTHS CURRENT TIME 1 HOUR - 80 MINUTES + 2 SECONDS DATE('2004-10-30') + 1 MONTH MONTHNAME(CURRENT DATE) DAYOFYEAR(CURRENT TIMESTAMP) TO_CHAR(CURRENT TIMESTAMP,'YYYY-MM-DD HH24:MI:SS') CHAR(CURRENT DATE, ISO) CHAR(CURRENT DATE, EUR) 55/125

Operacje na ciągach znaków 'String1' CONCAT ' String2 ' LENGTH(RTRIM('String1 ' )) LTRIM(' String1' ) LCASE('String1' ) UCASE('String1' ) SUBSTR('abcdef',2,3) REPLACE ( 'DINING', 'N', '--' ) SELECT SUBSTR(PROJNO,1, 2) AS PROJ_CLASS, PROJNAME FROM PROJECT WHERE PROJNO LIKE 'IF%'; SELECT LASTNAME CONCAT ', ' CONCAT FIRSTNAME FROM EMPLOYEE WHERE WORKDEPT = 'A00' ORDER BY NAME; 56/125

Podzapytania SELECT CAST(t.nr AS INT), t.empno, t.lastname, (SELECT deptname FROM department WHERE t.workdept = deptno) deptname FROM (SELECT empno, lastname, workdept, ROW_NUMBER() OVER() AS nr FROM employee) AS t WHERE t.nr <= 10 57/125

Numerowanie rekordów (funkcje analityczne) WITH temp AS ( SELECT id, name, dept, years, salary, RANK() OVER(ORDER BY salary DESC) AS row FROM staff ) SELECT * FROM temp WHERE row > 5 and row <= 10 ORDER BY row; Rank = 1+ liczba rekordów mniejszych od niego w danym porządku (mogą więc być przerwy w numeracji, jeśli dwa lub więcej rekordów ma ten sam rank w danym porządku). Rownumber, row_number = kolejny numer (bez przerw). 58/125

CASE SELECT FIRSTNME, LASTNAME, CASE WHEN salary < 40000 THEN 'Należy sie podwyżka' WHEN salary > 40000 and salary < 90000 THEN 'OK' ELSE 'Przeplacamy' END AS comment FROM EMPLOYEE; 59/125

Złączenia *) INNER JOIN ON *) LEFT OUTER JOIN ON *) RIGHT OUTER JOIN ON *) FULL OUTER JOIN ON 60/125

Klauzule FETCH FIRST i OPTIMIZE FOR SELECT years, name, id FROM staff ORDER BY years DESC FETCH FIRST 10 ROWS ONLY; Zamiast FETCH FIRST n ROWS ONLY można użyć OPTIMIZE FOR n ROWS wtedy zwracane są wszystkie wiersze, ze wskazówką dla optymalizatora, że przekazywanie wierszy do klienta będzie się odbywać blokami n wierszy. Może być używana też bez ORDER BY. 61/125

Funkcja TABLE SELECT a.id, a.dept, a.salary, b.deptsal FROM staff a, TABLE (SELECT b.dept, SUM(b.salary) AS deptsal FROM staff b WHERE b.dept = a.dept GROUP BY b.dept ) AS b WHERE a.id < 40 ORDER BY a.id; Wymagana gdy podzapytanie odwołuje się do wierszy zewnętrznych tabel. Ale można było zastosować tu operator INNER JOIN bez korzystania z TABLE. 62/125

Przykład z funkcją TABLE SELECT id, salary AS sal, comm AS com, w, typ FROM staff, TABLE(VALUES (salary,'sal'), (comm, 'COM') ) AS tab(w, typ) WHERE id < 40 ORDER BY id, typ; 63/125

INSERT v v v v Create table A(liczba int, napis varchar(10)); Insert into A values (1,'aaa'); Insert into A (liczba) values(2); Insert into A values (3,'ccc'),(4,'ddd'),(5,'eee'); v Select * from A; v Create table B(liczba int, napis varchar(10)); v Insert into B (select * from A) ; 64/125

Wstawianie do dwóch tabel CREATE TABLE Us_customer (Cust# INTEGER NOT NULL, Cname CHAR(10) NOT NULL, Country CHAR(3) NOT NULL, CHECK (Country = 'USA'), PRIMARY KEY (Cust#)); CREATE TABLE Intl_customer (Cust# INTEGER NOT NULL, Cname CHAR(10) NOT NULL, Country CHAR(3) NOT NULL, CHECK (Country <> 'USA'), PRIMARY KEY (Cust#)); INSERT INTO (SELECT * FROM Us_customer UNION ALL (SELECT * FROM Intl_customer) VALUES (111,'Fred','USA'), (222,'Dave','USA'),(333,'Juan','MEX')); Połączenie dwóch instrukcji w jedną w celu zwiększenia wydajności. 65/125

Modyfikowanie danych - UPDATE v v Update B set liczba = liczba+10 where liczba<4; Update B set liczba = liczba+10, napis = 'cccc' where liczba = 12; v Update A set (liczba,napis) = (select liczba, napis from B where liczba = 22) where liczba = 2; 66/125

Usuwanie danych - DELETE v Delete from C where v Delete from (select rownumber() over(order by liczba) as rowid from A) where rowid>4; 67/125

Wyświetlanie modyfikowanych wierszy OLD TABLE, NEW TABLE, FINAL TABLE v v v Select from OLD TABLE (Delete from Select * from [NEW FINAL] TABLE (Insert into A values(10,'kkk'),(11,'mmm'),(12,'ooo')); Select from [NEW FINAL] TABLE (Update. NEW stan po wykonaniu instrukcji a przed wykonaniem wyzwalaczy AFTER i akcji referencyjnych FINAL stan na sam koniec po wykonaniu wyzwalaczy AFTER i akcji referencyjnych Połączenie dwóch instrukcji w jedną w celu zwiększenia wydajności. 68/125

MERGE Włóż wiersze tabeli u do tabeli g stosując UPDATE gdy wiersz z datą istnieje w g, wpp stosując INSERT. MERGE INTO main g USING (SELECT data,swieto FROM upd_main) u ON (g.data = u.data) WHEN MATCHED THEN UPDATE SET swieto = u.swieto WHEN NOT MATCHED THEN tylko INSERT lub SIGNAL INSERT (data,swieto) VALUES (u.data, u.swieto) [NOT] MATCHED [AND warunek_wyszukiwania] Połączenie INSERT, UPDATE, DELETE na jednej tabeli. Zwiększenie wydajności. 69/125

UNION, INTERSECT, EXCEPT v v v UNION i UNION ALL INTERSECT i INTERSECT ALL EXCEPT i EXCEPT ALL 70/125

TRANSAKCJE * Transakcje rozpoczynają się niejawnie. * Każda baza danych w DB2 jest transakcyjna. * Można wyłączyć tworzenie pozycji transakcji w dzienniku transakcji na poziomie tabeli na czas trwania transakcji (do jej końca). ALTER TABLE tabela ACTIVATE NOT LOGGED INITIALLY; 71/125

Poziomy izolacji Odejście od nazw w Standardzie. * UR : brak blokad, chyba, że dany rekord jest zmieniany (UNCOMMITTED READ) * CS : blokada na wierszu tylko przy odczycie rekordu (COMMITTED READ) * RS : blokada do odczytu utrzymywana do końca transakcji (REPEATABLE READ) * RR : niezmienny wynik każdego zapytania w trakcie trwania transakcji (SERIALIZABLE) 72/125

Blokowane obiekty 73/125

Blokady na tabeli Dla transakcji realizowanej w trybie READ UNCOMMITTED IN IS IX SIX S U X Z Intent None Intention Share Intention exclusive Share with Intention exclusive Share Update exclusive superexclusive Obejmuje też blokady wierszy Tylko blokada tabeli Z do wykonania ALTER i DROP na tabeli oraz CREATE i DROP na indeksie tabeli. 74/125

Blokady na wierszu Blokada wiersza Minimalna wspomagająca blokada na tabeli S U X W NS NW Share Update exclusive Weak exclusive Next key Share Next key Weak exclusive IS IX IX IX IS IX Aplikacja nie uzyskuje jeśli założyła blokadę na tabeli: blokady wierszy S, U, X lub Z 75/125

Dodatkowe rodzaje wierszowych blokad v v v Weak Exclusive W zakładana na wiersz wstawiany do tabeli (na tabeli IX) słabsza niż X na tym wierszu. Next Key Weak Exclusive NW gdy do indeksu jest dodawana nowa pozycja (na tabeli IX) słabsza niż X na tym wierszu. Next Key Share NS zakładana na wiersz podczas pełnego odczytu tabeli w trybie READ COMMITTED i REPEATABLE READ (na tabeli IS) słabsza niż S na tym wierszu. 76/125

77/125 Kompatybilność trybów blokad U YES NO NO NO YES NO NS YES YES NO NO YES YES W NO NO NO NO NO YES B A IN IS S IX SIX U X Z Tabelowe B A S U X W NS NW Wierszowe IS YES YES YES YES YES YES NO NO S YES YES YES NO NO YES NO NO IX YES YES NO YES NO NO NO NO IN YES YES YES YES YES YES YES NO X NO NO NO NO NO NO S YES YES NO NO YES NO NW NO NO NO YES YES NO SIX YES YES NO NO NO NO NO NO U YES YES YES NO NO NO NO NO X YES NO NO NO NO NO NO NO Z NO NO NO NO NO NO NO NO

Blokady explicite -- Zapytanie tylko do odczytu SELECT * FROM tab1 FOR READ ONLY; -- Zapytanie może uaktualniać rekordy w trakcie przemieszczania się kursora po zbiorze wynikowym SELECT * FROM tab1 FOR UPDATE; -- Do instrukcji SELECT, SELECT INTO, DELETE, UPDATE można dołączyć poziom izolacji: WITH RR, WITH RS, WITH CS, WITH UR. 78/125

Konwersja blokady v Gdy aplikacja posiadając już pewną blokadę na obiekcie, chce zamienić tę blokadę na silniejszą (np. U na X, IS na S, IX na X) Silniejsza blokada może być przyznana lub nie. v Przykład Aplikacja wybiera wiersz w tabeli używając klauzuli FOR UPDATE u Na wiersz jest zakładana blokada U (Update) Aplikacja dokonuje modyfikacji wiersza używając klauzuli WHERE CURRENT OF u Zachodzi konwersja blokady U na X 79/125

Parametry inicjalizacyjne bazy danych dotyczące blokad Locklist ilość miejsca pamięci do użycia przez blokady. Maxlocks maksymalny procent miejsca pamięci z Locklist przeznaczony do użycia przez pojedynczą transakcję. Gdy transakcja przekroczy Maxlocks, system zamienia blokady na wierszach na blokady na tabelach (eskalacja blokad). 80/125

Blokada tabeli ALTER TABLE tabela LOCKSIZE TABLE; -- (blokowanie tabeli zamiast domyślnie wierszy) Wskazane, gdy DML dotyczy większości wierszy dużej tabeli. Z powrotem do blokowania wierszy (które jest domyślne): ALTER TABLE tabela LOCKSIZE ROW; LOCK TABLE tabela IN [SHARE EXCLUSIVE] MODE (blokada zwalniana na koniec transakcji) 81/125

Blokada bazy danych/przestrzeni tabel (explicite) CONNECT TO database IN [EXCLUSIVE SHARE] MODE Blokada bazy danych: CONNECT TO database IN EXCLUSIVE MODE Blokada przestrzeni tabel: QUIESCE table-spaces FOR TABLE table-name INTENT FOR UPDATE; 82/125

Tworzenie typów obiektowych CREATE TYPE DEPT AS ( DEPT NAME VARCHAR(20), MAX_EMPS INT) REF USING INT MODE DB2SQL -- MODE DB2SQL wymagany CREATE TYPE EMP AS ( NAME VARCHAR(32), SERIALNUM INT, DEPT REF(DEPT), SALARY DECIMAL(10,2)) MODE DB2SQL CREATE TYPE MGR UNDER EMP AS ( BONUS DECIMAL(10,2)) MODE DB2SQL Ewentualna specyfikacja metody po słowie kluczowym METHOD. Niezależnie, implementacja metody: CREATE METHOD BONUS (RATE DOUBLE) FOR EMP RETURN SELF..SALARY * RATE 83/125

Przykład tabeli z podtabelami Hierarchia typów obiektowych: Typy obiektowe: BusinessUnit_t, Person_t Podtypy: Student_t UNDER Person_t, Employee_t UNDER Person_t, Manager_t UNDER Employee_t, Architect_t UNDER Employee_t 84/125

Tworzenie hierarchii tabel odpowiadającej hierarchii typów CREATE TABLE BUnit OF BusinessUnit_t (REF IS Oid USER GENERATED); CREATE TABLE Person OF Person_t (REF IS Oid USER GENERATED); CREATE TABLE Employee OF Employee_t UNDER Person INHERIT SELECT PRIVILEGES -- wymagana klauzula dla podtabel (SerialNum WITH OPTIONS NOT NULL, Dept WITH OPTIONS SCOPE BUnit ); CREATE TABLE Student OF Student_t UNDER Person INHERIT SELECT PRIVILEGES; CREATE TABLE Manager OF Manager_t UNDER Employee INHERIT SELECT PRIVILEGES; CREATE TABLE Architect OF Architect_t UNDER Employee INHERIT SELECT PRIVILEGES; 85/125

Instrukcje SQL na nadtabeli i jej podtabelach Instrukcje SELECT, UPDATE, DELETE operujące na nadtabeli, domyślnie działają również na wszystkich wierszach jej podtabel. Np. UPDATE na tabeli Employee dotyczy wierszy tabel Employee, Manager i Architect, ale UPDATE na tabeli Manager dotyczy tylko wierszy tabeli Manager. Aby ograniczyć działanie instrukcji wyłącznie do danej tabeli należy użyć opcji ONLY (np. ONLY Employee). 86/125

Jak zaszyfrować kluczowe dane? SET ENCRYPTION PASSWORD = 'Ben123'; INSERT INTO EMP(SSN) VALUES ENCRYPT ('289-46-8832'); INSERT INTO EMP(SSN) VALUES ENCRYPT ('289-46-8832', 'Ben123'); SELECT DECRYPT_CHAR (SSN,'Ben123') FROM EMP; 87/125

LBAC (Label Based Access Control) Poziom dostępu definiowany dla tabel i wierszy tabel. SELECT * FROM EMP WHERE SALARY >= 50000 & Poziom dostępu użytkownika = 100 Użytkownicy na poziomie 100 mają dostęp do wierszy: ID <= 100 i salary >= 50000 (na zielono) No LBAC LBAC ID 255 100 50 50 60 250 SALARY 60000 50000 70000 45000 30000 56000 Gdy opcja LBAC nie jest włączona, użytkownicy za pomocą powyższego zapytania mają dostęp do wierszy: salary >= 50000 (na czerwono) 102 100 75 253 82000 54000 33000 46000 Ułatwienie zarządzania uprawnieniami dostępu użytkowników do danych 90 200 105 83000 78000 45000 88/125

Język procedur składowanych SQL Procedural Language (SQL PL) 89/125

Przypisanie wartości zmiennym Instrukcje w kodzie: SET zmienna = wyrażenie VALUES wyrażenie, INTO zmienna, 90/125

Instrukcja złożona (blok), zmienne BEGIN DECLARE v_var1 CHAR(20); DECLARE v_var2 INTEGER; DECLARE v_var3 TIMESTAMP; DECLARE v_var4 SMALLINT DEFAULT 99; SELECT name INTO v_var1 FROM staff FETCH FIRST 1 ROW ONLY; SET v_var2 = 100; VALUES CURRENT TIMESTAMP INTO v_var3; VALUES (p_par1,99) INTO v_var4,v_var2; END 91/125

ATOMIC, NOT ATOMIC BEGIN ATOMIC -- SQL e traktowane są jak jedno polecenie END -- nieobsłużony błąd -> zatrzymanie wykonywania -> -- wszystkie zmiany zostają wycofane BEGIN ATOMIC nie może być zagnieżdżony w BEGIN ATOMIC --------------------------------------------- BEGIN NOT ATOMIC -- to jest domyślna opcja END -- nieobsłużony błąd -> zatrzymanie wykonywania -> -- Zmiany pozostają. Konieczne ręczne wycofanie. 92/125

Etykiety instrukcji złożonej lab1: BEGIN DECLARE v_id INT; lab2: BEGIN DECLARE v_id INT; SET lab1.v_id = 1; SET lab2.v_id = 10; SET v_id = 100; END lab2; END lab1 93/125

Instrukcje warunkowe IF v_var = 1 THEN UPDATE ELSE INSERT END IF; --------------------------------------------- CASE WHEN v_var > 0 THEN WHEN v_var > 10 THEN ELSE END CASE; 94/125

Iteracje WHILE (var1 = 1) DO END WHILE; --------------------------------------------- REPEAT UNTIL (var1 < 100) END REPEAT; --------------------------------------------- label:loop LEAVE label; ITERATE label; END LOOP; --------------------------------------------- GOTO label; 95/125

Instrukcja złożona i WHILE BEGIN ATOMIC DECLARE cnt INT DEFAULT 0; WHILE (cnt < 1000) DO INSERT INTO Tab1 VALUES (cnt, ceiling(rand()*1000) ); SET cnt=cnt+1; END WHILE; END Średniki oddzielają składowe instrukcje w instrukcji złożonej. Średnik nie może kończyć zewnętrznej instrukcji złożonej ani też końca instrukcji CREATE PROCEDURE. W skryptach można określić terminator przy użyciu -- #SET DELIMITER 96/125

Instrukcja FOR FOR loop_name AS SELECT col1, FROM DO SET var1 = loop_name.col1; END FOR; 97/125

Przykład BEGIN ATOMIC DECLARE cntr SMALLINT DEFAULT 1; FOR V AS SELECT id AS idval FROM staff WHERE id < 80 ORDER BY id DO UPDATE staff SET comm = cntr WHERE id = V.idval; SET cntr = cntr + 1; END FOR; END 98/125

Instrukcja złożona BEGIN ATOMIC DECLARE v_var2 INTEGER; CREATE TABLE mytab(id INT); CREATE INDEX mytab_idx ON mytab(id); BEGIN DECLARE v_var4 INTEGER DEFAULT 100; INSERT INTO mytab(id) VALUES (99),(v_var4); GET DIAGNOSTICS v_var2 = ROW_COUNT; SET p_result = 'L.wierszy: ' char(v_var2); END; END GET DIAGNOSTICS wymagane, aby uzyskać ROW_COUNT! 99/125

ITERATE, LEAVE BEGIN ATOMIC DECLARE cntr INT DEFAULT 0; whileloop: WHILE cntr < 60 DO SET cntr = cntr + 10; UPDATE staff SET salary = cntr WHERE id = cntr; IF RAND() < 0.5 THEN LEAVE whileloop; ELSEIF RAND() < 0.2 THEN ITERATE whileloop; ELSE UPDATE staff SET comm = cntr + 1 WHERE id = cntr; END IF; END WHILE; END 100/125