ORACLE ORDBMS
description
Transcript of ORACLE ORDBMS
ORACLE ORDBMSadminisztrációs feladatok
7. rész
dr. Kovács László2004
további csomagok DBMS_PIPE
Kommunikációs csatorna egy instance processzei között
Pipe storesession buffer
CREATE_PIPE csatorna létrehozásaPACK_MESSAGE üzenet létrehozásaSEND_MESSAGE üzenet küldése RECEIVE_MESSAGE üzenet fogadásaUNPACK_MESSAGE üzenet kibontásaRESET_BUFFER buffer törlésePURGE csatorna tisztításaREMOVE_PIPE csatorna megszüntetése
timeout INTEGER DEFAULT MAXWAIT;meret INTEGER DEFAULT 8092;priv BOOLEAN DEFAULT TRUE;
DBMS_PIPE.RESET_BUFFER;proba := DBMS_PIPE.UNIQUE_SESSION_NAME;szoveg := ‘UZEN’;DBMS_PIPE.CREATE_PIPE(proba,merert,priv);DBMS_PIPE.PACK_MESSAGE(szoveg);DBMS_PIPE.SEND_MESSAGE(proba,timeout);
DBMS_PIPE.RECEIVE_MESSAGE(proba, timeout);DBMS_PIPE.UNPACK_MESSAGE(szoveg2);DBMS_PIPE.REMOVE_PIPE(proba);
DBMS_LOCK
felhasználó vezérelt zárolás (user lock <–> oracle lock)
kompatibilitási mátrix
meglévő mód
igényelt mód
NL
SS
SX
S
SSX
X
NL SS SX S SSX X
I
I
I
I
I
I
I I I I I
I I I I
I I
II
I
N N
N
N
N
N
N N N
N
N
N
N N
N
N
DBMS_LOCK
ALLOCATE_UNIQUE id generálása REQUEST zárolás elhelyezés CONVERT zárolás átminősítés RELEASE zárolás felengedés SLEEP session felfüggesztés
zárolási mód kódok:NL 1SS 2SX 3S 4SSX 5X 6
minta
DBMS_RANDOM
INITIALIZE inicializálás SEED generálási érték beállítás RANDOM szám előállítás TERMINATE csomag bezárás
Véletlenszám generálás
CREATE PROCEDURE G1 (DB IN NUMBER, SS IN NUMBER) ASBEGIN DBMS_RANDOM. INITIALIZE(SS); FOR I=1..DB LOOP DBMS_OUTPUT.PUT_LINE(TO_CHAR(DBMS_RANDOM.RANDOM)) END LOOP;END;
SET SERVEROUTPUT ONEXECUTE G1(5,23);
Levélküldés
Jserver, TCP modulokra épül
fő struktúrák:connection (host, port)reply (code, text)
open_connection kapcsolat felvétel helo szinkronizálásmail levél kezdetrcpt cimzett megadásadata üzenet törzsquit kapcsolat zárás
CREATE PROCEDURE LEVELEZ (KULDO IN VARCHAR2, CIMZETT IN VARCHAR2, UZENET IN VARCHAR2) AS MAILHOST VARCHAR2(30) := ‘mail.ab.dom’; MAIL_CONN UTL_SMTP.CONNECTION; VALA UTL_SMTP.REPLAY;BEGIN MAIL_CONN := UTL_SMTP.OPEN_CONNECTION(MAILHOST,25); VALA := UTL_SMTP.HELO(MAIL_CONN, MAILHOST); DBMS_OUTPUT.PUT_LINE(VALA.TEXT); UTL_SMTP.MAIL(MAIL_CONN,KULDO); UTL_SMTP.RCPT(MAIL_CONN,CIMZETT); UTL_SMTP.DATA(MAIL_CONN,UZENET); UTL_SMTP.QUIT(MAIL_CONN);EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUTLINE(SQLERRM);END
execute levelez (‘<[email protected]>’,…);
Particionált táblák
a tábla / index rekordjainak szétbontása csoportokra
típusai:Tartomány alapú (range) :
a rekordokat a kulcs alapján ossza szét. Az egyes kulcs érték tartományok külön partícióba kerülnekHash alapú:
egy egyenletesebb elosztást biztosító hash függvény alapján rendel a különböző kulcs értékekhez egy partíciót Vegyes módszer (composite partitioning) :
előbb tartomány alapú szétválogatás, majd egy hash alapú finomabb szétbontás
A különböző partíciók különböző szegmensekben, tablespace-ben helyezkednek el
Előnyök
hatékonyság:- az egyes partíciók bizonyos esetekben kihagyhatók- párhuzamosítás- gyorsabb hozzáférés
karbantartás- önálló adminisztráció- egyedi tárolási paraméterek
adatvédelem- önálló állományszintű védelmi lehetőség
nem lehet CLUSTER-bennem lehet LONG mező
saját zárolási szint
CREATE TABLE sales ( invoice_no NUMBER, sale_year INT NOT NULL, sale_month INT NOT NULL, sale_day INT NOT NULL )PARTITION BY RANGE (sale_year, sale_month, sale_day)( PARTITION sales_q1 VALUES LESS THAN (1997, 04, 01) TABLESPACE tsa, PARTITION sales_q2 VALUES LESS THAN (1997, 07, 01) TABLESPACE tsb, PARTITION sales_q3 VALUES LESS THAN (1997, 10, 01) TABLESPACE tsc, PARTITION sales_q4 VALUES LESS THAN (1998, 01, 01) TABLESPACE tsd );
CREATE TABLE product( ... )STORAGE (INITIAL 10M)PARTITION BY HASH(column_list)( PARTITION p1 TABLESPACE h1, PARTITION p2 TABLESPACE h2 );
CREATE TABLE orders( ordid NUMBER, orderdate DATE,productid NUMBER, quantity NUMBER)PARTITION BY RANGE(orderdate)SUBPARTITION BY HASH(productid) SUBPARTITIONS 8STORE IN(ts1,ts2,ts3,ts4,ts5,ts6,ts7,ts8)( PARTITION q1 VALUES LESS THAN('01-APR-1998'), PARTITION q2 VALUES LESS THAN('01-JUL-1998'), PARTITION q3 VALUES LESS THAN('01-OCT-1998'), PARTITION q4 VALUES LESS THAN(MAXVALUE) );
ALTER TABLE admin.patient_visits DROP PARTITION pv_dec92; SELECT * FROM sales PARTITION (s_nov97) s WHERE s.amount_of_sale > 1000;
leírók: DBA_TAB_PARTITIONSDBA_TAB_SUBPARTITIONSDBA_IND_PARTITIONSDBA_IND_SUBPARTITIONSDBA_PART_COL_STATISTICS
LOB objektumok kezelése
típusai:- DB-ben tárolt
- táblában- külön TABLESPACE
- külön állományban (BFILE)
egy táblában több LOB mező is lehet
- BLOB- CLOB- NCLOB- LOB locator
LOB kezelő csomag
DBMS_LOB OPEN LOB megnyitása CLOSE LOB lezárása GETLENGTH LOB elem hossza READ LOB elem olvasása WRITE LOB elem irása FILEOPEN BLOB nyitása FILECLOSE BLOB zárás LOADFROMFILE BLOB betöltése SUBSTR LOB részlet INSTR LOB részlet keresése APPEND hozzáfűzés ERASE tartalom törlés
CREATE OR REPLACE PROCEDURE Example_l2f IS lobd BLOB; fils BFILE := BFILENAME('SOME_DIR_OBJ','file specifikáció'); amt INTEGER := 4000; BEGIN SELECT b_lob INTO lobd FROM lob_table WHERE key_value = 42 FOR UPDATE; dbms_lob.fileopen(fils, dbms_lob.file_readonly); dbms_lob.loadfromfile(lobd, fils, amt); COMMIT; dbms_lob.fileclose(fils); END;
CREATE OR REPLACE PROCEDURE Example2a IS lob_1, lob_2 BLOB; retval INTEGER;BEGIN SELECT b_col INTO lob_1 FROM lob_table WHERE key_value = 45; SELECT b_col INTO lob_2 FROM lob_table WHERE key_value = 54; retval := dbms_lob.compare(lob_1, lob_2, 5600, 33482, 128); IF retval = 0 THEN
…. ELSE
… END IF; END;
CREATE OR REPLACE PROCEDURE Example_13a IS src_lob BLOB; buffer RAW(32767); amt BINARY_INTEGER := 32767; pos INTEGER := 2147483647;BEGIN SELECT b_col INTO src_lob FROM lob_table WHERE key_value = 21; LOOP dbms_lob.read (src_lob, amt, pos, buffer); … pos := pos + amt; END LOOP;EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('End of data'); END;
Hibakezelő csomag
DBMS_DEBUG
DBMS_DEBUG.INITIALIZE regisztrálás DBMS_DEBUG.DEBUG_ON elindítás DBMS_DEBUG.DEBUG_OFF leállítás
debug session <---> target session
ALTER SESSION SET PLSQL_DEBUG = true;ALTER [PROCEDURE | FUNCTION | PACKAGE | TRIGGER | TYPE] <name> COMPILE DEBUG;
debug információk beépítése:
Target session
Debug session
DBMS_DEBUG.ATTACH_SESSION kapcsolódás DBMS_DEBUG.DETACH_SESSION leválás
DBMS_DEBUG.SET_BREAKPOINT töréspont DBMS_DEBUG.DELETE_BREAKPOINT DBMS_DEBUG.SHOW_BREAKPOINTS
DBMS_DEBUG.SYNCHRONIZE első esemény DBMS_DEBUG.CONTINUE folytatás
DBMS_DEBUG.GET_VALUE változó kezelés DBMS_DEBUG.SET_VALUE DBMS_DEBUG.SHOW_SOURCE DBMS_DEBUG.EXECUTE végrehajtás a targetben
minta