SQL - Oracle

Transkript

SQL - Oracle
Obsah
Předpoklady
Software
• ORACLE client verze 10g.
• SQL*Plus a textový editor nebo TOAD
• ORACLE utilities – exp, imp, loader
Databáze
• Samostatné schema pro každého školence (lab01-labxx) v databázi 10.1 či 10.2 s právy:
o role CONNECT
o role RESOURCE
o privilegium SELECT ANY DICTIONARY
Cvičné schéma
Jako cvičné schéma se používá cvičné schéma HR (Human Resources) firmy ORACLE.
Popis
The Human Resources division tracks information on company employees and
facilities.
In the human resource records, each employee has an identification number, email
address, job identification code, salary, and manager. Some employees earn a
commission in addition to their salary.
The company also tracks information about jobs within the organization. Each job
has an identification code, job title, and a minimum and maximum salary range for
the job. Some employees have been with the company for a long time and have held
different positions within the company. When an employee switches jobs, the
company records the start date and end date of the former job, the job identification
number, and the department.
The sample company is regionally diverse, so it tracks the locations of not only its
warehouses but also of its departments. Each company employee is assigned to a
department. Each department is identified by a unique department number and a
short name. Each department is associated with one location. Each location has a
full address that includes the street address, postal code, city, state or province, and
country code.
For each location where it has facilities, the company records the country name,
currency symbol, currency name, and the region where the county resides
geographically.
Seznam objektů
INDEX
COUNTRY_C_ID_PK
DEPT_ID_PK
DEPT_LOCATION_IX
EMP_DEPARTMENT_IX
EMP_EMAIL_UK
EMP_EMP_ID_PK
EMP_JOB_IX
EMP_MANAGER_IX
EMP_NAME_IX
JHIST_DEPARTMENT_IX
JHIST_EMPLOYEE_IX
JHIST_EMP_ID_ST_DATE_PK
JHIST_JOB_IX
JOB_ID_PK
LOC_CITY_IX
LOC_COUNTRY_IX
LOC_ID_PK
LOC_STATE_PROVINCE_IX
REG_ID_PK
PROCEDURE
ADD_JOB_HISTORY
SECURE_DML
SEQUENCE
DEPARTMENTS_SEQ
EMPLOYEES_SEQ
LOCATIONS_SEQ
TABLE
COUNTRIES
DEPARTMENTS
EMPLOYEES
JOBS
JOB_HISTORY
LOCATIONS
REGIONS
TRIGGER
SECURE_EMPLOYEES
UPDATE_JOB_HISTORY
VIEW
EMP_DETAILS_VIEW
Popisy tabulek
Table COUNTRIES
Name Null? Type
----------------------------------------- -------- ---------------------------COUNTRY_ID NOT NULL CHAR(2)
COUNTRY_NAME VARCHAR2(40)
REGION_ID NUMBER
Table DEPARTMENTS
Name Null? Type
----------------------------------------- -------- ---------------------------DEPARTMENT_ID NOT NULL NUMBER(4)
DEPARTMENT_NAME NOT NULL VARCHAR2(30)
MANAGER_ID NUMBER(6)
LOCATION_ID NUMBER(4)
Table EMPLOYEES
Name Null? Type
----------------------------------------- -------- ---------------------------EMPLOYEE_ID NOT NULL NUMBER(6)
FIRST_NAME VARCHAR2(20)
LAST_NAME NOT NULL VARCHAR2(25)
EMAIL NOT NULL VARCHAR2(25)
PHONE_NUMBER VARCHAR2(20)
HIRE_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
SALARY NUMBER(8,2)
COMMISSION_PCT NUMBER(2,2)
MANAGER_ID NUMBER(6)
DEPARTMENT_ID NUMBER(4)
Table JOBS
Name Null? Type
----------------------------------------- -------- ---------------------------JOB_ID NOT NULL VARCHAR2(10)
JOB_TITLE NOT NULL VARCHAR2(35)
MIN_SALARY NUMBER(6)
MAX_SALARY NUMBER(6)
Table JOB_HISTORY
Name Null? Type
----------------------------------------- -------- ---------------------------EMPLOYEE_ID NOT NULL NUMBER(6)
START_DATE NOT NULL DATE
END_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
DEPARTMENT_ID NUMBER(4)
Table LOCATIONS
Name Null? Type
----------------------------------------- -------- ---------------------------LOCATION_ID NOT NULL NUMBER(4)
STREET_ADDRESS VARCHAR2(40)
POSTAL_CODE VARCHAR2(12)
CITY NOT NULL VARCHAR2(30)
STATE_PROVINCE VARCHAR2(25)
COUNTRY_ID CHAR(2)
Table REGIONS
Name Null? Type
----------------------------------------- -------- ---------------------------REGION_ID NOT NULL NUMBER
REGION_NAME VARCHAR2(25)
Cvičení
Cvičení 1. Založení tabulky se specifikací fyzického uložení
Úkol 1.1
Založte tabulku PROJECTS se sloupci PROJ_ID not null number, PROJ_DESC not null
varchar2(60).
Tabulku založte v tablespace USERS s velikostí prvního i dalšího extentu 32kB. Velikost
extentů je stále stejná (extenty nenarůstají)
Úkol 1.2
Přeneste tabulku do tablespace PROJECTS s velikostí extentů 100kB.
Poznámka:
Pokud má tabulka indexy, je třeba je po přestěhování obnovit (rebuild).
Tabulka je nepřístupná v průběhu stěhování.
Cvičení 2. Partitionované tabulky
Úkol 2.1
Založte partitionovanou tabulku PROJECT_HISTORY se sloupci ITEM_ID not null, number,
ITEM_DESC varchar2(60), ITEM_DATE not null date, PROJ_ID not null number .
Tabulka má partitionovací klíč sloupce ITEM_DATE, je partitionovaná po měsících, jména
partitions jsou vzoru PH_PART_yymm .
Založte partitions na tři měsíce dopředu. Všechny partitions založte v tablespace USERS.
Přesun záznamů mezi partitions v důsledku změny updatovacího klíče nebude povolen.
Úkol 2.2
Vložte do PROJECT_HISTORY libovolný záznam s akutálním datem v položce ITEM_DATE.
Pokuste se datum ITEM_DATE vloženého záznamu posunout (updateovat) dopředu o měsíc.
Úkol 2.3
Povolte přesun záznamů mezi partitions pro tabulku PROJECT_HISTORY (příkaz ALTER
TABLE).
Pokuste se datum ITEM_DATE vloženého záznamu posunout (updateovat) dopředu o měsíc.
Pokuste se datum ITEM_DATE vloženého záznamu posunout (updateovat) dopředu o rok.
Cvičení 3. Vnořené tabulky
Úkol 3.1
Založte typ TEAM_MEMBERS_TYPE jako tabulku z VARCHAR2(30).
Úkol 3.2
Přidejte do tabulky PROJECTS sloupec TEAM_MEMBERS typu TEAM_MEMBERS_TYPE.
Vnořenou tabulku uložte jako tabulku NESTED_TEAM_MEMBERS v tablespace USERS.
Úkol 3.3
Založte nový projekt s id 100, názvem „Školení”. Do TEAM_MEMBERS vložte účastníky školení
podle své volby.
Úkol 3.4
Změňte a vymažte jednoho účastníka v tabulce.
Vyberte seznam účastníku v tabulce podle abecedy.
Úkol 3.5
Založte nový projekt s id 101 a názvem “All_staff”. Do TEAM_MEMBERS vložte příjmení všech
zaměstnanců v tabulce EMPLOYEES.
Spočítejte, kolik je v TEAM_MEMBERS záznamů, kteří začínají na písmeno ‘K’.
Cvičení 4. Indexy (unikátní index, compozitní index, bitmapový index,
funkční index)
Úkol 4.1
Založte unikátní (globální) index PH_PK na partitionované tabulce PROJECT_HISTORY
obsahující sloupec ITEM_ID. Použijte tablespace USERS, konstantní velikosti extentů 32kB.
Úkol 4.2
Založte lokální index PH_PROJ_FK_IND index na partitionované tabulce PROJECT_HISTORY
obsahující sloupec PROJ_ID. Použijte defaultní tablespace a defaultní velikosti extentů.
Nápověda: Tipy a syntaxe pro zřízení lokálního indexu
Úkol 4.3
Založte funkční index PROJ_DESC_UP_IND na tabulce PROJECTS na sloupci PROJ_DESC
pro výběry bez ohledu na velikost písmen – funkce UPPER(PROJ_DESC).
Cvičení 5. Indexově organizovaná tabulka
Úkol 5.1
Založte IOT tabulku PROJECT_FILES se sloupci (PROJ_ID not null number, FILE_NAME not
null varchar2(30), FILE_DESC varchar2(200)).
Primární klíč tabulky PF_PK bude kombinace sloupců PROJ_ID a FILE_NAME.
Sloupec FILE_DESC uložte do overflow oblasti.
Tabulku založte v tablespace USERS.
Úkol 5.2
Kompresujte klíče na úrovni 1 (sloupec PROJ_ID).
Cvičení 6. Synonyma a sekvence
Úkol 6.1
Založte synonymum PRJ pro tabulku PROJECTS, PRH pro tabulku PROJECT_HISTORY.
Úkol 6.2
Založte sekvenci PRH_SEQ začínající na hodnotě 1000 s krokem 1 pro plnění sloupce
ITEM_ID tabulky PROJECT_HISTORY.
Vložte do tabulky záznam s využitím sekvence a synonyma PRH.
Cvičení 7. Data dictionary
Úkol 7.1
Vyberte jména všech tabulek (nikoli view!!), ve kterých se vyskytuje sloupec EMP_NO
Úkol 7.2
Napište select pro vygenerování scriptu pro dropnutí všech schema objektů (tabulek, view,
packages, sekvencí, synonym).
(Jména tabulek nesmějí začínat na ‘BIN$’ ani na ‘SYS_IOT’. )
Cvičení 8. Výrazy (podmíněný výraz, seznamy výrazů)
Úkol 8.1
Vyberte z tabulky EMPLOYEES zaměstnance z oddělení 50, 60, 70 a 80 (DEPARTMENT_ID),
kteří byly najati (HIRE_DATE) před 1.1.1999.
Zobrazte pro vybrané zaměstnace příjmení (LAST_NAME), datum nástupu do zaměstnání
(HIRE_DATE), identifikaci pracovní pozice (JOB_ID) a kontaktní informaci. Kontaktní informací
je pro pracovníky na pozici SA_REP, ST_CLERK a SH_CLERK (JOB_ID) telefoní číslo
(PHONE_NUMBER), u manažerů (pozice SA_MAN a ST_MAN) žádnou kontaktní informaci –
10 křížků, pro ostatní emailová adresa (EMAIL).
Cvičení 9. Regulární výrazy
Úkol 9.1
Vyberte z tabulky LOCATIONS záznamy, kde se v poštovním směrovacím čísle
(POSTAL_CODE) vyskytují znaky než jen číslice a písmena.
Úkol 9.2
Vyberte z tabulky LOCATIONS záznamy, které mají směrovací číslo ze čtyř až šesti číslic.
Cvičení 10.
Dotazy (poddotazy, hierarchické dotazy, vytknutý dotaz)
Úkol 10.1
Vyberte příjmení (LAST_NAME), číslo oddělení (DEPARTMENT_ID) z tabulky EMPLOYEES
všechny zaměstnance pracující v regionu Europe (REGION_ID=1).
Úkol 10.2
Vyberte příjmení zaměstnance (LAST_NAME) a název oddělení (DEPARTMENT_NAME) a kód
země (COUNTRY_ID) pro všechny zaměstnance, kteří pracují v odděleních, která mají nejvýše
6 zaměstnanců.
Úkol 10.3
Vyberte města, kde pracuje alespoň 5 zaměstnanců, a z těchto měst vypište ta, v nichž mají
zaměstnanci plat větší než průměr (počítán ze zaměstnanců pracujících v těchto městech).
Použijte vytknutý dotaz.
Úkol 10.4
Vypište seznam oddělení (DEPARTMENTS). U každého oddělení vypište název oddělení
(DEPARTMENT_NAME), jméno manažera z tabulky EMPLOYEES (LAST_NAME) a město, ve
kterém se oddělení nachází.
Vezměte v úvahu, že oddělení nemusejí mít vyplněno manager_id nebo location_id. V tom
případě vyplňte místo příslušné hodnoty slovo “Neznámé”.
Úkol 10.5
Vypište hierarchii zaměstnanců pracující v regionu Americas (REGION_ID=2). Pro každého
zaměstnance vypište jméno (FIRST_NAME), příjmení (LAST_NAME), a číslo oddělení
DEPARTMENT_ID.
Seznam podřízených vypište pod každým manažerem setříděný podle příjmení.
Úroveň vnoření naznačte příslušným počtem znaků = v prvním sloupci dotazu:
Cvičení 11.
Úkol 11.1
Constrainty
Přidejte tabulce PROJECTS primární klíč PROJ_ID_PK (sloupec PROJ_ID).
Specifikujte tablespace USERS, velikost prvního i dalšího extentu 32 kB. Velikost extentů je
stále stejná (extenty nenarůstají)
Nápověda: Syntaxe pro zřízení primárního klíče s indexem
Úkol 11.2
Přidejte tabulce PROJECT_HISTORY cizí klíč PH_PROJ_FK přes sloupec PROJ_ID odkazující
na tabulku PROJECTS, sloupec PROJ_ID.
(Založte příslušný záznam do PROJECTS, aby bylo možné klíč zřídit).
Cvičení 12.
Úkol 12.1
Triggery
Založte trigger PH_BI_TRG na tabulce PROJECT_HISTORY, který při vkládání záznamu,
naplní do položky ITEM_DATE aktuální datum a čas (SYSDATE) a do položky ITEM_ID další
číslo ze sekvence PRH_SEQ.
Jakého typu trigger bude?
Ověřte, že se hodnoty sloupců naplňovaných triggerem správně inicializují, i když je nepředáte
v insertu.
Úkol 12.2
Založte trigger PJ_AU_TRG na tabulce PROJECTS, který po změně záznamu, vloží informaci o
update tabulky do historie PROJECT_HISTORY:
ITEM_DESC := ‘Změna projektového záznamu ’ || proj_desc.
Ověřte, že se změna proj_desc zaznamená v historii.
Úkol 12.3
Prostudujte si triggery na tabulce EMPLOYEES.
Cvičení 13. XML (založení a úpravy dokumentů, registrace schematu,
indexování)
Úkol 13.1
Založte tabulku XML_ORDERS se sloupci ORDER_ID number not null, XO xmlType –
nestrukturovaný.
Použijte XML dokument uložený ve formě ORACLE řetězce v souboru jacks_order_string.txt.
Vložte do tabulky záznam kde ORDER_ID = 1 a XO bude xml dokument obsahující objednávku
jacks_order_string.txt (obsah souboru přeneste copy&paste jako string do konstruktoru
XMLType).
Úkol 13.2
Vyberte z dokumentu uloženého v XML_ORDERS položky:
město doručení ‘//shipTo/city’
hodnotu atributu partNum první objednané položky (item)
xml fragment odpovídající účtovací adrese (billTo).
(Příslušné schema, podle kterého je XML dokument sestaven je purchaseOrder.xsd.)
Úkol 13.3
Nahraďte v doručovací adrese (shipTo) směrovací číslo (zip) hodnotou 1111
Úkol 13.4
Zaregistrujte v databázi schema purchaseOrder.
Použijte (copy&paste) obsah souboru purchaseOrder_schema_string.txt .
Zkontrolujte v data dictionary, že je schema zavedeno v XML Repozitory.
Úkol 13.5
Zvalidujte dokument uložený v tabulce XML_ORDERS podle uloženého schematu.
Úkol 13.6
Vytvořte nad tabulkou XML_ORDERS funkční index XO_ZIP_IND podle hodnot elementu
shipTo/zip .
Napište select vybírající z tabulky záznamy podle hodnoty tohoto elementu.
(Ověřte, zda se index při dotazu použil.
Před provedením dotazu smažte statistiky na tabulce XML_ORDERS příkazem:
BEGIN DBMS_STATS.delete_table_stats (USER, 'XML_ORDERS'); END;
)
Cvičení 14.
Export, Import
Úkol 14.1
Exportujte všechny objekty vašeho uživatele do souboru exp_labxx_schema.dmp včetně všech
dat, constraintů a grantů, s komprimací extentů, logový soubor exp_labxx_schema.log .
Zkontrolujte úspěšnost proběhnutí exportu z logového souboru.
Úkol 14.2
Dropněte tabulku EMPLOYEES a importujte ji zpět včetně dat, constraintů a grantů (pouze tuto
tabulku) z exportu vytvořeného v předchozím úkolu.
Cvičení 15.
Úkol 15.1
SQL*Loader
Založte tabulku EMPLOYEES_IT_PROG se sloupci EMP_ID number not null, EMP_NAME
varchar2(60) not null a HIRE_DATE date.
Úkol 15.2
Použijte zdrojový soubor employees_source_text.txt pro naplnění tabulky
EMPLOYEES_IT_PROG.
Záznamy v souboru mají proměnnou délkou, pole jsou oddělena středníkem (;), některá mohou
být uzavřena v uvozovkách (“).
První řádek v souboru obsahuje hlavičku s názvy polí v souboru, při načítání ho vynechte.
Napište řídící soubor employees_it_prog.ctl pro SQL*Loader takový, který ze souboru
employees_source_text.txt vybere záznamy, které mají job_id=’IT_PROG’.
Naplňte sloupce v tabulce z polí souboru takto:
EMP_ID <- employee_id
EMP_NAME <- name
HIRE_DATE <- hire_date.
Datum hire_date je ve formátu dd.mm.yyyy .
Cvičení 16.
Zámky
Úkol 16.1
Otevřete si dvě spojení (sessions) ve dvou oknech SQL*Plus do databáze.
V jedné session vložte do databáze záznam do tabulky PROJECTS s hodnotami PROJ_ID=200
a PROJ_DESC = ‘Locks’. Záznam nepotvrzujte (commit).
a) V druhé session se pokuste vložit stejný záznam. Co se stane?
b) V první session změny odvolejte (rollback). Co se stane?
c) V první session opakujte insert záznamu. Potvrďte změny (commit) v druhé session. Co se
stane?
Úkol 16.2
Opakujte vložení stejného záznamu ze dvou různých session, aby došlo k čekání na zámek.
Vypište z data dictionary (V$LOCK) záznamy, které svědčí o čekání.
Cvičení 17.
Prováděcí plány (zobrazení)
Úkol 17.1
Založte plánovací tabulku scriptem utlxplan.sql.
Použijte select z řešení úkolu Úkol 10.2 .
Vytvořte jeho prováděcí plán, (EXPLAIN PLAN) a vypište ho scriptem utlxpls.sql.
Úkol 17.2
Vysvětlete sled operací, které provádí ORACLE v rámci tohoto plánu.
Cvičení 18.
Hinty
V rámci tohoto cvičení pracujte s dotazem zobrazujícím příjmení zaměstnance, název oddělení a název
země pro všechny zaměstnance v databázi.
SELECT
FROM
WHERE
AND
AND
/*+ */ e.last_name, d.department_name, c.country_name
employees e, departments d, locations l, countries c
e.department_id = d.department_id
d.location_id = l.location_id
l.country_id = c.country_id
Pro zobrazování plánu dotazu používejte utlxpls.sql .
Úkol 18.1
Zobrazte plán dotazu.
Ve které operaci získá ORACLE hodnotu položky country_name ?
Úkol 18.2
Pomocí hintu optimalizujte dotaz pro rychlé zobrazení prvních několika záznamů.
Které typy operací vymizely z prováděcího plánu?
Které operace jsou preferované?
Úkol 18.3
Pomocí hintů se v původním dotazu vyhněte operaci MERGE JOIN.
Pokuste se tak dosáhnout snížení nákladů (podle čísel zobrazovaných ORACLE) na provádění
dotazu.
Úkol 18.4
Smažte databázové statistiky a porovnejte prováděcí plány původního dotazu.
(Databázové statistiky smažete příkazem:
begin dbms_stats.delete_schema_stats(user); end;
)
Nápovědy:
Úkol 4.2 - Tipy a syntaxe pro zřízení lokálního indexu
CREATE INDEX <index_name> ON <table_name> ( <column_list> ) LOCAL
Úkol 11.1 - Syntaxe pro zřízení primárního klíče s indexem
ALTER TABLE <table> add (
CONSTRAINT <constraint_name> PRIMARY KEY ( <column_list> )
USING INDEX
TABLESPACE <tablespace_name>
STORAGE (INITIAL <initial_extent_size>
NEXT <next_extent_size>
PCTINCREASE <extent_size_increase> ))
ALTER TABLE <table> add (
CONSTRAINT <constraint_name> PRIMARY KEY ( <column_list> )
USING INDEX <existing_index_name>

Podobné dokumenty

Kořenova subjektivní baskytarová příručka

Kořenova subjektivní baskytarová příručka rozhodneme koupit použitou, doporučuji kupovat jen výrobky osvědčených značek. Jednak jsou po použití určitě v lepším stavu, než podomácku vyrobené a za druhé jsou to standardní výrobky, se kterými...

Více

Ingress guide v2.0

Ingress guide v2.0 Hasičské stanice, nemocnice, policejní stanice

Více

Pronájem presentační, audiovizuální a konferenční techniky

Pronájem presentační, audiovizuální a konferenční techniky Data- Video- Media s.r.o. Autorizovaný distributor EPSON, SANYO,PANASONIC,TOSHIBA, CASIO, MITSUBISHI, 3M,MW- prodej- pronájem- leasing- presentační místnosti na klíč- servis Presentační technika C...

Více

Manuál - Fluke Networks

Manuál - Fluke Networks Poznámka Pokud kontaktujete Fluke Networks kvůli vašemu testeru, mějte, pokud je to možné, připraveno číslo verze softwaru a hardwaru. www.flukenetworks.com

Více

Otevírání černých skříněk

Otevírání černých skříněk (Service Level Agreement) na výkon a spolehlivost. Při tom všem je až k podivu, že na rozdíl od výroby nebo účetnictví, si IT jen výjimečně vypomáhají nějakým svým „IT ERP“ systémem, který by speci...

Více

databázový server firebird instalace,konfigurace

databázový server firebird instalace,konfigurace V rámci FB je použit způsob zabezpečení na úrovni databázového serveru – jednotlivé databáze neobsahují žádné dodatečné informace o uživatelských účtech, z čehož vyplývá požadavek na zabezpečení fy...

Více

UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE Datové modelování

UNICORN COLLEGE BAKALÁŘSKÁ PRÁCE Datové modelování Data jsou nedílnou součástí každé činnosti počítače. Pokaždé, když provedeme s počítačem nějakou akci, data se posílají skrze zařízení, pomocí jedniček a nul. Dokonce i vývojáři mnohdy své zdrojové...

Více

Vizualizéry - zpětné projektory - diaprojektory - Data-video

Vizualizéry - zpětné projektory - diaprojektory - Data-video v úhlu 270°, různé režimy, RS232, možnost snímání a následného uložení do interní paměti vizualizéru ( 240 snímků ! ) , zachycení obrazu a přenos pomocí USB portu do PC- výstup USB ! s dálkovým ovl...

Více

databázové technologie (db) – příprava na szz

databázové technologie (db) – příprava na szz Tzn. do každého pole lze dosadit pouze jednoduchý datový typ. Podmínka 1. NF není splněna například u tabulky, kde je jméno a příjmení (nebo datum a čas) v jednom sloupci a přitom aplikace pracuje ...

Více