Transcript Document

ORACLE ORDBMS
adminisztrációs feladatok
7. rész
2004
dr. Kovács László
további csomagok DBMS_PIPE
Kommunikációs csatorna egy instance processzei között
session
CREATE_PIPE
PACK_MESSAGE
SEND_MESSAGE
RECEIVE_MESSAGE
UNPACK_MESSAGE
RESET_BUFFER
PURGE
REMOVE_PIPE
buffer
Pipe store
csatorna létrehozása
üzenet létrehozása
üzenet küldése
üzenet fogadása
üzenet kibontása
buffer törlése
csatorna tisztítása
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
I
I
I
I
I
I
SS
I
I
I
I
I
N
SX
I
I
I
N
N
N
S
I
I
N
I
N
N
SSX
I
I
N
N
N
N
X
I
N
N
N
N
N
DBMS_LOCK
ALLOCATE_UNIQUE
REQUEST
CONVERT
RELEASE
SLEEP
id generálása
zárolás elhelyezés
zárolás átminősítés
zárolás felengedés
session felfüggesztés
zárolási mód kódok:
NL
SS
SX
S
SSX
X
1
2
3
4
5
6
minta
Véletlenszám generálás
DBMS_RANDOM
INITIALIZE
SEED
RANDOM
TERMINATE
inicializálás
generálási érték beállítás
szám előállítás
csomag bezárás
CREATE PROCEDURE G1 (DB IN NUMBER, SS IN NUMBER) AS
BEGIN
DBMS_RANDOM. INITIALIZE(SS);
FOR I=1..DB LOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(DBMS_RANDOM.RANDOM))
END LOOP;
END;
SET SERVEROUTPUT ON
EXECUTE G1(5,23);
Levélküldés
Jserver, TCP modulokra épül
fő struktúrák:
connection
reply
(host, port)
(code, text)
open_connection
helo
mail
rcpt
data
quit
kapcsolat felvétel
szinkronizálás
levél kezdet
cimzett megadása
üzenet törzs
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ülnek
Hash 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-ben
nem 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 8
STORE 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_PARTITIONS
DBA_TAB_SUBPARTITIONS
DBA_IND_PARTITIONS
DBA_IND_SUBPARTITIONS
DBA_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
CLOSE
GETLENGTH
READ
WRITE
FILEOPEN
FILECLOSE
LOADFROMFILE
SUBSTR
INSTR
APPEND
ERASE
LOB megnyitása
LOB lezárása
LOB elem hossza
LOB elem olvasása
LOB elem irása
BLOB nyitása
BLOB zárás
BLOB betöltése
LOB részlet
LOB részlet keresése
hozzáfűzés
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
debug session
<---> target session
debug információk beépítése:
ALTER SESSION SET PLSQL_DEBUG = true;
ALTER [PROCEDURE | FUNCTION | PACKAGE |
TRIGGER | TYPE] <name> COMPILE DEBUG;
Target session
DBMS_DEBUG
DBMS_DEBUG.INITIALIZE
DBMS_DEBUG.DEBUG_ON
DBMS_DEBUG.DEBUG_OFF
regisztrálás
elindítás
leállítás
Debug session
DBMS_DEBUG.ATTACH_SESSION
DBMS_DEBUG.DETACH_SESSION
kapcsolódás
leválás
DBMS_DEBUG.SET_BREAKPOINT
töréspont
DBMS_DEBUG.DELETE_BREAKPOINT
DBMS_DEBUG.SHOW_BREAKPOINTS
DBMS_DEBUG.SYNCHRONIZE
DBMS_DEBUG.CONTINUE
első esemény
folytatás
DBMS_DEBUG.GET_VALUE
DBMS_DEBUG.SET_VALUE
változó kezelés
DBMS_DEBUG.SHOW_SOURCE
DBMS_DEBUG.EXECUTE
végrehajtás a targetben
minta