Startrundb2cmd Wyświetlić dostępne instancje db2ilist



Pobieranie 64.26 Kb.
Data07.05.2016
Rozmiar64.26 Kb.
Uruchomić okno komend
startrundb2cmd
Wyświetlić dostępne instancje

db2ilist
Wyświetlić instancję aktywną

db2 get instance
Utworzyć nową instancję o nazwie zawierającej nr studenta Sxxxx

db2icrt s6190
Ponownie wyświetlić dostępne instancje, ktora jest aktywna?

db2 get instance
Ustawić Sxxxx jako aktywną ( ustawić zmienną środowiskową db2instance, zatrzymać starą instancję wraz ze wszystkimi działającymi procesami i zastartować nową instancję)

set db2instance=S6190
db2 get instance
db2stop
db2start
db2get instance

Utworzyć bazę TEST połączyć się z nią i sprawdzić ile zawiera tabel systemowych.


db2 select count(*) from syscat.tables
db2 CREATE DATABASE TEST

db2 connect to TEST

db2 select count(*) from syscat.tables (396)
Odłączyć się od bazy danych Test

db2 TERMINATE

db2 DISCONNECT CURRENT

Utworzyć bazę SAMPLE (db2sampl)


Zobaczyć, z jakimi bazami możesz się połączyć i jakie aplikacje są podłączone do bazy danych
db2sampl

db2 list db directory  powinny być dwie bazy TEST & SAMPLE
Zapoznać się z opcjami okna komend:

db2 list command options
Podłączyć się do bazy danych SAMPLE

db2 connect to SAMPLE
Przejść w tryb interaktywny db2 ( wyjście quit)

db2 quit
Wykonać proste zapytanie SQL
SELECT * FROM Staff
Jak na szybko zobaczyć przybliżoną składnię komendy?
db2 ? create databasedblevel
Zobaczyć z jaką wersją DB2 pracujmy?

db2level
Jaką licencję DB2 posiadam?

db2licm –l
CENTRUM STEROWANIA

db2cc
Zapoznać się z zawartością bazy danych SAMPLE

  • Zobaczyć przestrzenie tablicowe utworzone domyślnie podczas tworzenia bazy danych

  • Odnaleźć plik konfiguracyjny menedżera bazy danych

[prawy myszy ]AllSystem / Virtual… / Instances / S6190
Odnaleźć plik konfiguracyjny bazy danych SAMPLE i TEST

[Prawy myszy] SAMPLE / Configure Parametres

  • Odnaleźć rejestr profilu DB2

Przeanalizować działanie Edytora Komend wykonując zapytania do bazy danych SAMPLE


Ikonka z kółeczkiem
wybieram ADD (bazę np. SAMPLE)


SELECT * FROM staff
Ponownie obejrzeć Pliki przeznaczone dla DB2

  • Gdzie znajdują się informacje dotyczące instancji

C:\Documents and Settings\All Users\Application Data\IBM\DB2\DB2COPY1

  • Gdzie znajdują się katalogi zawierające bazy danych instancji DB2 i Sxxxx? C:\S6253 i C:\DB2

  • Gdzie są zapisywane bazy danych TEST i SAMPLE?

C:\S6253\NODE0000

  • Odnaleźć położenie pliku konfiguracyjnego menedżera bazy danych instancji C:\Documents and Settings\All Users\ApplicationData\IBM\DB2\DB2COPY1\

  • Odnaleźć położenie pliku konfiguracyjnego bazy danych SAMPLE i TEST C:\S6253\NODE0000

  • Odnaleźć położenie rejestru profilu DB2

Nie ma i nie ma do niego dostępu bo należy do środowiska. Można wylistować w linii komend.


  • Zobacz format wyniku zapytania:

DESCRIBE OUTPUT (SELECT sum(salary)FROM EMPLOYEE); -

Opis kolumn I typów

SELECT sum(salary)FROM.EMPLOYEE –



bez kropki zwraca wartosc jako double

W ramach własnej bazy danych, w której DB2 zarządza pamięcią masowa (pamięć automatyczna) utworzyć



    1. dwie różne pule buforów np. 4k i 32k

db2cc, buffer pools, create

    1. 3 przestrzenie tablicowe, użyć utworzonych wcześniej pul buforów

      1. Regularną zarządzana przez SMS

db2cc, table spaces, create (type regular, automatic storage)

      1. Dużą zarządzana przez DMS

create (type large, manual storage) -> container -> new

      1. Dużą wykorzystująca pamięć automatyczną

    1. Utworzyć tabelę posiadającą kolumnę typu id , która będzie kluczem, kolumnę zwykłą tekstową i kolumnę typu BLOB ( np. zdjęcie). W jakiej przestrzeni tabel jej dane mogą być przechowywane? ( wybrać odpowiednie przestrzenie z poprzednio utworzonych)


Table->create->tworzyć kolumny i klucz-> duza przestrzen bo blob może być auto
CONNECT TO TEST;

CREATE TABLE ADMINISTRATOR.BLOB ( ID BIGINT NOT NULL , IMIE VARCHAR (20) NOT NULL , ZDJECIE BLOB (1 M ) NOT NULL LOGGED NOT COMPACT , CONSTRAINT CC1306151605548 PRIMARY KEY ( ID) ) IN DUZAAUTOMAT ;

CONNECT RESET;


    1. Zmodyfikować utworzoną wcześniej tabelę ( alter table) Czy można zmniejszyć rozmiar zwykłej kolumny tekstowej?


Tables->alter UWAGA. To dropuje tabele i tworzy ja na nowo

Jakich obszarów tabel używa baza danych TEST a jakich baza SEMPLE?



Porównać table spacer
Utwórz bazę danych CWICZ i dodaj do niej dowolną tabelę

CONNECT TO CWICZ;

CREATE TABLE ADMINISTRATOR.OSOSBA ( ID BIGINT NOT NULL , IMIE VARCHAR (10) NOT NULL , CONSTRAINT CC1306152600486 PRIMARY KEY ( ID) ) ;

CONNECT RESET;
Jakie schematy wykorzystuje się w Twojej bazie danych?
VALUES CURRENT SCHEMA

Administrator
Zmień aktywny schemat na xxxx ( SET CURRENT SCHEMA xxxx)

SET CURRENT SCHEMA „6054” – ciapki bo były cyfry w nazwie
Dodaj tabelę TAB1(cena DECIMAL(8,2)) w schemacie xxxx
dodaj wiersz i wyświetl zawartość

CREATE TABLE xxxx.tab1 (id INT); chyba ze już jesteśmy w schemacie jak wyżej
Jaki schemat zostanie wybrany po użyciu komendy:
SET CURRENT SCHEMA USER

Administrator

Zastanów się a potem sprawdź, które instrukcje wykonają się poprawnie i dlaczego

CREATE TABLE tab2 (id INT); TAK

CREATE TABLE TaB2("iD" int); NIE

CREATE TABLE "TaB2"("iD" int); NIE

INSERT INTO "TaB2" ("iD") VALUES (10); NIE

SELECT "iD" FROM "TaB2" TAK
SELECT * FROM "TaB2" WHERE id = 10 NIE

INSERT INTO tab2 (id) VALUES (20); NIE

SELECT id FROM tab2; TAK

CREATE TABLE tab3 LIKE tab2; NIE - dane i inne obiekty powiązane nie są kopiowane

SELECT * FROM TAB3;TAK

CREATE TABLE tab4 AS (SELECT * FROM tab2) DEFINITION ONLY; NIE

SELECT * FROM TAB4; TAK
CREATE INDEX idx3 ON tab3(numer); NIE

DESCRIBE INDEXES FOR TABLE tab3; NIE

utwórz tabelę
Create Table FIRMA(

id INTEGER,

nazwa Varchar(30),

miasto Varchar(20) DEFAULT 'WARSZAWA')

dodaj rekordy
INSERT INTO FIRMA(id,nazwa,miasto)

VALUES(111, 'MojaFirma', DEFAULT)


INSERT INTO FIRMA(id,nazwa)

VALUES(111, 'MojaFirma')

Sprawdź

select * from FIRMA


Wstawiła się warszawa gdzie podano default



  • Kolumny identyfikujące-

create table osoba(

id_osoby bigint not null primary key,

imie varchar(50) not null,

nazwisko varchar(50) not null,

zyciorys CLOB)


alter table osoba alter column id_osoby

set generated always as identity (start with 100 increment by 1);


describe table osoba

insert into osoba values (Default,'JAN', 'KOWALSKI',null)

insert into osoba values (Default,'Adam', 'Adamski',null)

insert into osoba values (103,'Rafal','Rafalski',null) – błąd bo autogenerowana

insert into osoba (Imie,nazwisko) values ( 'Pawel','Pawlowski')

delete from osoba where imie='Pawel'

insert into osoba (Imie,nazwisko) values ( 'Rafal','Rafalski')

select * from osoba


--Jakie są numery osób w tabeli? 100,101,103
create table osoba1(

id_osoby bigint not null primary key,

imie varchar(50) not null,

nazwisko varchar(50) not null,

zyciorys CLOB);

alter table osoba1 alter column id_osoby

set generated by DEFAULT as identity (start with 200);
describe table osoba1

insert into osoba1 values (Default,'JAN', 'KOWALSKI',null)

insert into osoba1 values (Default,'Adam', 'Adamski',null)

insert into osoba1 values (203,'Rafal','Rafalski',null)

insert into osoba1 (Imie,nazwisko) values ( 'pawel','Pawlowski')

delete from osoba1 where imie='Adam'

insert into osoba1 (Imie,nazwisko) values ( 'Adam', 'Adamski') – błąd autogenerowania

select * from osoba1

Jakie są numery osób w tabeli? 200,203,202
connect to sample

describe table EMPLOYEE

create table pracownicy (EMPNO CHAR(6), Nazwisko Varchar(12), SALARY Decimal(9,2),podwyzka Decimal(9,2) GENERATED always as(SALARY*0.1));

describe table pracownicy


insert into pracownicy (EMPNO,Nazwisko,Salary) (select EMPNO,Firstnme,Salary from EMPLOYEE)

select * from pracownicy

insert into pracownicy values ('200500','Kowalski',5000.00,DEFAULT )

insert into pracownicy values ('200501','Nowak',3000.00,10.00) - błąd


błąd---create table prac (EMPNO CHAR(6), Nazwisko Varchar(12), SALARY ---Decimal(9,2),podwyzka Decimal(9,2) GENERATED by DEFAULT

---as(SALARY*0.1));




  • Przeanalizować działanie reguł informacyjnych.

  1. Do tabeli dodać ograniczenia z klauzulą
    NOT ENFORCED oraz
    ENABLE QUER OPTYMIZATION

do zapytania uwzględnia to ograniczenia ale możemy wstawiać wartości niepoprawne przez co mamy smietnik w bazie. Sprawdzanie poprawności jest przezucone na klienta

  1. Dodać rekord naruszający ograniczenie

  2. Wyświetlić go

  3. Uzasadnić zaistniałą sytuację

Sa dwie osoby z wiekiem 100 i 150
Constraint wiek<=120 jest ustawiony na ENABLE QUER OPTYMIZATION i wylaczony ENFORCED
select * from ososba where wiek>130
dane sa w tabeli bo enforced wyłączony, ale select się nie wykonuje bo ENABLE QUER OPTYMIZATION zatrzymuje kwerende


  • Utworzyć tabelę posiadająca kolumnę identyfikacyjną

Dodać kilka danych używając sekwencji

Wykonać restart komputera

Dodać kilka kolejnych danych - jak zmienią się wartości sekwencji?

sekwencje:

CREATE SEQUENCE seq1 AS BIGINT

START WITH 1

INCREMENT BY 1

NO MAXVALUE

NO CYCLE

CACHE 24;


VALUES NEXTVAL FOR seq1 ;

VALUES PREVVAL FOR seq1 ;

ALTER SEQUENCE seq1 RESTART WITH 100 ;
Po uruchomieniu po restarcie sekwencja zacznie sie od wartości 24 co wynika z cache’a – gdyby padł system przed wykonaniem to nie wyświetli wartości poprzedzających 24 choć nigdy nie były wyświetlone

Rozszerzenia Języka SQL w DB2

select * from staff
Ile różnych zawodów pojawia się w tabeli STAFF

SELECT COUNT( DISTINCT job) from staff

SELECT COUNT( DISTINCT staff.job) from staff
W ilu działach pracują pracownicy z tabeli STAFF

SELECT COUNT( DISTINCT dept) from staff
Wyświetl dzień tygodnia dla daty dzisiejszej oraz ilość dni do sylwestra

values DAYNAME(current date)

Zakładając uporządkowanie alfabetyczne po nazwisku wypisać z tabeli STAFF 5 pierwszych osób , począwszy od tych, których nazwisko zaczyna się na M


select * from staff where name > 'M%' order by staff.name fetch first 5 rows Orly
lub
select name from staff where name > 'M'

order by name

limit 5


  • W bazie test utwórz tabele do zapisywania książek i ich autorów

Db2_ksiazka.dll

create table A_K (


ID_A INTEGER not null,
ID INT not null, constraint A_K_PK primary key (ID, ID_A) );

create table KSIAZKA (


ID INT not null,
TYTUL CHARACTER(30) not null, constraint KSIAZKA_PK
primary key (ID) );

create table AUTOR (


ID_A INTEGER not null,
IMIE VARCHAR(20),
NAZWISKO VARCHAR(20) not null, constraint AUTOR_PK
primary key (ID_A) );

alter table A_K


add constraint AUTOR_A_K_FK1 foreign key (ID_A)
references AUTOR (ID_A) ON DELETE CASCADE ;

alter table A_K


add constraint KSIAZKA_A_K_FK1 foreign key (ID)
references KSIAZKA (ID) ON DELETE CASCADE ;

---------------------------



  • Dodaj w jednej instrukcji 4 autorów; Dodaj 6 ksiażek; Określ autorstwo:

insert into autor values (1,'Mickiewicz','Adam'), (2,'Asnyk','Adam'),(3,'Tolkien','JRR'), (4,'Sapkowski','Andrzej');

insert into ksiazka values (1,'Liryki lozańskie'), (2,'Nad głębiami'), (3,'Hobbit'), (4,'Władca Pierścieni'), (5,'Wiedźmin'), (6,'Narrenturm');

insert into A_K values (1,1), (2,2), (3,3), (3,4), (4,5), (4,6);

  • Utwórz tabelę zamowienia dla książek

Create table zam
(
ID INT not null,
TYTUL CHARACTER(30) not null,
ilosc int,
constraint zamowienie_PK
primary key (ID) );

wpisz do niej książki dodając zamówienie na pojedńcze egzemplarze (przy użyciu select)



insert into zam ((select id,tytul,1 from ksiazka))
Do tabeli KSIAZKA dodaj jeszcze jedną książkę

insert into ksiazka values (7,'Boży Bojownicy');
Popraw tabelę zamówienia tak by zwiększyć zamówienie o 2 książki dla każdego tytułu

MERGE INTO zam G

USING (SELECT id, tytul FROM ksiazka) U

ON (g.tytul = u.tytul)

WHEN MATCHED THEN

UPDATE SET

ilosc = ilosc+2

WHEN NOT MATCHED THEN

INSERT (id,tytul,ilosc)

VALUES (u.id, u.tytul, 1)
Lub
MERGE INTO zam skrot_zam

USING (SELECT ID,TYTUL FROM KSIAZKA) skrot_k

ON (skrot_zam.id = skrot_k.id)

WHEN MATCHED THEN

UPDATE SET ILOSC = ILOSC +2

WHEN NOT MATCHED THEN

INSERT (skrot_zam.ID, skrot_zam.TYTUL, skrot_zam.ILOSC)

VALUES (skrot_k.ID, skrot_k.TYTUL,2)

select * from zam



  • Utworzyć tabelę drzewo_gen (z wykładu) dodać dane ( odpowiednio dużo by było coś widać)

- użyć insert do wstawiania wielu wierszy w jednej instrukcji ( 3 rekodry np. id= 1,2,3, id rodzica = null, 1, 2)

- Wypisując jednocześnie wstawiane i zmieniane wiersze na ekran

- użyć insert do wstawiania wierszy z innej ( tu tej samej ) tabeli ( - powtórzyć 3 wiersze zwiększając id np. id=id+10)

- użyć update do zmian kolumny id_rodzica tak by rekordy 4gi i 5-ty miały takiego samego rodzica jak 2 (update na postawie selekt) a 6ty takiego jak trzeci itd………….

Do czwartego pokolenia.

- wypisać strukturę pokrewieństwa do 4 pokolenia



Czarne to rodzica
CREATE TABLE drzewo_gen(id INTEGER, nazwisko_Imie VARCHAR(50), plec

CHAR(1), id_rodzica INTEGER)‏;

INSERT INTO drzewo_gen VALUES (1,’Skowera_Rafal’,1,null)

INSERT INTO drzewo_gen VALUES (2,’Skowera01_Joanna’,0,1)

INSERT INTO drzewo_gen VALUES (3,’Skowera1_Rafal11’,1,2)

INSERT INTO drzewo_gen VALUES (4,’Skowera11_Rafal111’,1,3)

INSERT INTO drzewo_gen VALUES (5,’Skowera111_Rafal11’,1,4)

INSERT INTO drzewo_gen VALUES (6,’Tomekiewicz_Zuza’,0,5)

INSERT INTO drzewo_gen VALUES (7,’Jeznach_Walcek’,1,6)


WITH temptab ( id, nazwisko_Imie , id_rodzica, poziom) AS

( SELECT id, nazwisko_Imie , id_rodzica,1

FROM drzewo_gen

WHERE nazwisko_Imie='tu wpisz imie najstarszego’

UNION ALL

SELECT P1.id, P1.nazwisko_Imie , P1.id_rodzica, P2.poziom+1

FROM drzewo_gen P1, temptab P2

where P2.id = P1.id_rodzica

AND poziom <5

) SELECT * FROM temptab



  • Wygenerować kolejne numery począwszy od 10 co 10 do 200 wypisując je na ekran

WITH temp1 (col1) AS (

VALUES 0

UNION ALL

SELECT col1 + 1

FROM temp1

WHERE col1 + 1 < 100

) SELECT * FROM temp1


  • Bazując na tabeli EMPLOYEE utworzyć listę pracowników podając imię, nazwisko, datę zatrudnienia oraz tworząc kolumnę komentarz z uwagami „doświadczony pracownik” przy osobach z co najmniej dziesięcioletnim stażem, i „ostatnio zatrudnieni” przy osobach, które pracują mniej niż 3 lata (?)

SELECT FIRSTNME, LASTNAME,

CASE

when (CURRENT DATE - hiredate) < 100000 then 'doświadczony pracownik'

else 'Ostatnio zatrudnieni'

End as comment

FROM EMPLOYEE



  • Bazując na tabeli EMPLOYEE wypisać stanowiska występujące w każdym dziale . Dla stanowisk z działów A00 i D11 zastosować klauzule UNION i UNION ALL INTERSECT i INTERSECT ALL EXCEPT i EXCEPT ALL


select job from employee where workdept='A00'

UNION ALL

select job from employee where workdept='D11'
select job from employee where workdept='A00'

INTERSECT ALL

select job from employee where workdept='D11'
select job from employee where workdept='A00'

EXCEPT ALL

select job from employee where workdept='D11'


  • Dokonaj podwyżki pensji pracowników z działu D11 o 10000 jednoczesnie wypisując o jaki procent dokonano podwyżki u każdego pracownika.


SELECT salary as new_salary, old_salary,(10000/old_salary)*100

FROM NEW TABLE (UPDATE employee INCLUDE (old_salary DECIMAL(9,2))

SET salary = salary+10000,

old_salary = salary

WHERE workdept = 'D11')


©absta.pl 2016
wyślij wiadomość

    Strona główna