SQL - Oracle
Transkript
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
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...
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...
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
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...
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...
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é...
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...
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 ...