billing dla bazy danych oracle IU2SDADJDTZD5Q32NUMWMCQROUJ4XRJJRDQVKPI

background image

"Billing" dla bazy danych Oracle

-DURVáDZàDJRZVNL

iRM Polska

e–mail: jarek.lagowski@irm.at

Abstrakt.

%UDPD]DNáDGXSUDF\6HWNLSUDFRZQLNyZSU]HFKRG]W G\FRG]LHQQLHZRE\GZLHVWURQ\-DNVSUDZG]LüF]\

.RZDOVNL VS G]D Z SUDF\  JRG]LQ G]LHQQLH" 3URV]  - RWR OLVWD ZHMü L Z\Mü Z\ND] F]DVX SUDF\ GOD

GRZROQHJR SUDFRZQLND .D*G\ ] QLFK PD RERZL]HN ]DUHMHVWURZDü VZRMH SU]HMFLH SU]H] EUDP  SRSU]H]

SURVWHXU]G]HQLHSRPLDUXF]DVX

)DNWXUD]DWHOHIRQ:\VRNRüNZRW\]QDF]QLHSU]HNUDF]DQDV]HQDMPLHOV]HRF]HNLZDQLD-DNVSUDZG]LüNWR

]DZLQLá*RQDF]\P*G]ZRQLFGR]QDMRP\FKF]\VXUIXMFSRLQWHUQHFLH´"3URV] -RWRZ\ND]SRáF]H

ND*GDUR]PRZD]QDV]HJRDSDUDWXMHVWUHMHVWURZDQDZFHQWUDOLLPR*HE\üVSUDZG]RQD

$GPLQLVWUDWRUED]\GDQ\FKPR*HVWDQüSU]HGNRQLHF]QRFLRGSRZLHG]LQDSRGREQHS\WDQLD,OHF]DVXGDQ\

X*\WNRZQLN SUDFRZDá ] ED] GDQ\FK" : MDNLFK JRG]LQDFK" &R URELá" &]\ L Z MDNL VSRVyE PRG\ILNRZDá

LVWRWQH GDQH" 2GSRZLHG]L V W\P EDUG]LHM ZD*QH MH*HOL PDP\ GR F]\QLHQLD ] GRVW SHP SU]H] ,QWHUnet lub
coraz popularniejszym "outsourcing'iem" aplikacji.

5HIHUDWSRND*HMDNSU]\Z\NRU]\VWDQLXVWDQGDUGRZ\FK GDUPRZ\FK PHFKDQL]PyZSU]\JRWRZDüELOOLQJ

GODED]\GDQ\FK2UDFOH:\NRU]\VWDQHE GWUDG\F\MQHURGNLSROHFHQLH$8',7RUD]Z\]ZDODF]HG]LDáDMFH

QD SROHFHQLDFK '0/ MDN UyZQLH* ZáDFLZRFL 2UDFOH i Ä/RJ 0LQHU´ L Z\]ZDODF]H G]LDáDMFH QD
zdarzeniach bazodanowych.

1. Rejestracja czasu pracy

=DF]QLMP\ RG U]HF]\ VWRVXQNRZR QDMSURVWV]HM UHMHVWUX SRGáF]H GR QDV]HM ED]\ GDQ\FK

&KFLHOLE\P\ZLHG]LHüNWRNLHG\LMDNGáXJRSUDFRZDáZQDV]\PV\VWHPLH%LH*FHVHVMHPR*QD

OHG]LüNRU]\VWDMF]WDEOLF96(66,21 WDWDEOLFDSU]\GDVL QDP]UHV]WWURFK Sy(QLHM $OHMDN

]DSDPL WDüFDáKLVWRUL SRáF]H"-DNXFKZ\FLüPRPHQW]DNRF]HQLDVHVML"

1.1. Polecenie AUDIT

7UDG\F\MQ\PVSRVREHPUHMHVWUDFMLF]DVXSUDF\ZED]LHGDQ\FK2UDFOHG]LDáDMF\PGREU]HMX*Z

ZHUVMLMHVWSROHFHQLH$8',7']L NLQLHPXPR*HP\UHMHVWURZDüDQDVW SQLHUDSRUWRZDüUy*QH

URG]DMHDNW\ZQRFLX*\WNRZQLNyZED]\GDQ\FK

1.1.1. Zakresy obserwacji wykonywanej poleceniem AUDIT

Obserwacja polecenia (statement auditing) –

]ELHUDLQIRUPDFMHRZ\EUDQ\FKW\SDFKSROHFH

QSPRG\ILNXMF\FKGDQH QLH]DOH*QLHRGRELHNWXQDNWyU\PSROHFHQLHG]LDáDáRREVHUZDFM 

PR*QDSURZDG]LüGODZV]\VWNLFKEG(GODZ\EUDQ\FKX*\WNRZQLNyZED]\GDQ\FK

Obserwacja przywileju (privilege auditing) – zbiera informacje o wykorzystaniu wybranych

SU]\ZLOHMyZ QSSU]\ZLOHMXGRWZRU]HQLDQRZ\FKWDEOLF QLH]DOH*QLHRGRELHNWXQDNWyU\P

SROHFHQLH G]LDáDáR REVHUZDFM  PR*QD SURZDG]Lü GOD ZV]\VWNLFK EG( GOD Z\EUDQ\FK

X*\WNRZQLNyZED]\GDQ\FK

background image

Obserwacja obiektu (schema object auditing) – zbiera informacje o wykonaniu konkretnego
polecenia na konkretnym obiekcie (np. zapytania na wskazanej tablicy), obserwacja jest
prowad

]RQDGODZV]\VWNLFKX*\WNRZQLNyZED]\GDQ\FK

5HMHVWUDFMD SRáF]H ] ED] GDQ\FK PLHFL VL  ]DUyZQR Z ]DNUHVLH REVHUZDFML SROHFHQLD MDN L
przywileju.

1.1.2. Poziom obserwacji wykonywanej poleceniem AUDIT

2EVHUZDFMDED]\GDQ\FKPR*HJURPDG]LüLQIRUPDFMHPQLHMOXEEDUG]LHMV]F]HJyáRZR

ELRUFSRGXZDJ 

SROHFHQLDZ\NRQDQHW\ONRSUDZLGáRZREG(W\ONRQLHSUDZLGáRZREG(ZV]\VWNLH

W\ONR SLHUZV]H Z\VWSLHQLH SROHFHQLD EG( W\ONR SLHUZV]H Z\VWSLHQLH SROHFHQLD Z VHVML

X*\WNRZQLNDEG(ZV]\VWNLHZ\VWSLHQLDpolecenia

SROHFHQLD Z\NRQDQH W\ONR SU]H] Z\EUDQ\FK X*\WNRZQLNyZ EG( ZV]\VWNLH Z\NRQDQH
polecenia

5HMHVWUDFMDSRáF]HSRZLQQDREHMPRZDüZV]\VWNLHSUyE\ UyZQLH*WHQLHXGDQH Z\NRQ\ZDQH

SU]H]ZV]\VWNLFKX*\WNRZQLNyZ

1.1.3. Aktywacja obserwacji wykonywanej poleceniem AUDIT

Aktywacja obserwacji wykonywanej poleceniem AUDIT wymaga:

ustawienia odpowiedniego parametru pliku startowego bazy danych,

ustawienia zakresu i poziomu obserwacji poleceniem AUDIT

3DUDPHWUSOLNXVWDUWRZHJRNWyU\PXVLP\XVWDZLüWR$8',7_TRAIL.

'RSXV]F]DOQHZDUWRFL

parametru to:

NONE –

REVHUZDFMDZ\áF]RQD ZDUWRüGRP\OQD 

TRUE – zapis obserwacji do bazy danych,

OS – zapis obserwacji do pliku (tylko na wybranych platformach)

3DUDPHWUQLHPR*HE\ü]PLHQLDQ\G\QDPLF]QLHWR]QDF]\*HQRZDZDUWRüSDUDPHWUX]DG]LDáD

dopiero po kolejnym stracie bazy danych. Ustawienie zapisu obserwacji do bazy danych jest

QDMZ\JRGQLHMV]H ]H Z]JO GX QD PR*OLZRü Sy(QLHMV]HJR UDSRUWRZDQLD ]D SRPRF SROHFHQLD
SELECT. Zatem, wybrana linijka z pliku initX.or

DSRZLQQDZ\JOGDüQDVW SXMFR

3U]\NáDG$NW\ZDFMDREVHUZDFML

audit_trail = true

'H]DNW\ZDFMD REVHUZDFML Z\PDJD XVWDZLHQLD SDUDPHWUX QD ZDUWRü )$/6( L SRQRZQHJR VWDUWX

ED]\ GDQ\FK 3R UHVWDUFLH ED]\ GDQ\FK ] SDUDPHWUHP XVWDZLRQ\P MDN Z\*HM SR]RVWDáR nam

ZáF]\ü*GDQRSFM REVHUZDFML3ROHFHQLH$8',7ZSRVWDFLSRWU]HEQHMGRUHMHVWUDFMLZV]\VWNLFK

SRGáF]HMHVWQDSUDZG SURVWH

3U]\NáDG8VWDZLHQLHRSFMLREVHUZDFML

SQL> audit session;

2EVHUZRZDQLH]RVWDáRZáF]RQH

, MX* – RG WHJR PRPHQWX ND*GH SU]HMFLH UyZQLH* QLHXGDQH  SU]H] QDV] ÄEUDP  GR ED]\

GDQ\FK´E G]LHUHMHVWURZDQH:\áF]HQLHREVHUZDFMLRGE\ZDVL ]DSRPRFSROHFHQLD12$8',7

background image

1.1.4. Raportowanie

2SFMHREVHUZDFMLSDPL WDQHVZWDEOLF\6<6$8',7:\QLNLREVHUZDFMLJURPDG]RQHVZ

tab

OLF\6<6$8' SUREOHP\]ZL]DQH]SLHO JQDFMWHMWDEOLF\E GRPyZLRQHZSXQNFLH 

&L NWyU]\ OXEL ÄWHNVW\ (UyGáRZH´ PRJ F]Xü VL  XV]F] OLZLHQL PR*OLZRFL Z\NRQ\ZDQLD

]DS\WD EH]SRUHGQLR QD W\FK WDEOLFDFK 0QLHM GRFLHNOLZL PRJ ]DGRZROLü VL  zestawem

SHUVSHNW\Z'%$BNWyUHSUH]HQWXMGDQH]ZZWDEOLFZVSRVyEEDUG]LHMSU]\VW SQ\

8VWDZLRQHRSFMHREVHUZDFMLPR*QDRGF]\WDüZWDEOLFDFKVáRZQLNRZ\FK

DBA_ STMT _AUDIT_OPTS – opcje obserwacji polecenia

DBA_PRIV_AUDIT_OPTS – opcje obserwacji przywileju

DBA_OBJ_AUDIT_OPTS – opcje obserwacji obiektu

6SUDZG(P\HIHNWSROHFHQLD]SU]\NáDGX

3U]\NáDG6SUDZG]HQLHRSFMLREVHUZDFML

SQL> select *

2 from DBA_STMT_AUDIT_OPTS;

USER_NAME PROXY_NAME AUDIT_OPTION SUCCESS FAILURE

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

CREATE SESSION BY ACCESS BY ACCESS

Ko

PHQWDU]GRSU]\NáDGX.ROXPQ\86(5B1$0(L352;<B1$0(ZLDGF]RW\P*HPR*QD]DZ ]Lü

REVHUZDFM SRáF]H)DNW*HZNROXPQLH$8',7B237,21ZLG]LP\W\ONRÄ&5($7(6(66,21´QLH
SU]HV]NDG]DZUHMHVWUDFML]DUyZQRSRáF]HMDNLRGáF]H:DUWRFLÄ%<$&&(66´ZQDVW SQ\FKGZyFK
NROXPQDFKPyZLRW\P*HUHMHVWURZDQHE G]LHND*GH]GDU]HQLH'ODUHMHVWUDFMLSRGáF]H $8',7
6(66,21 MHVWWRMHG\QDPR*OLZRü'ODLQQ\FKRSFMLREVHUZDFMLPR*QDZ\EUDüUHMHVWUDFM Ä%<6(66,21´

W\ONRSLHUZV]H]GDU]HQLHZVHVMLE G]LH

notowane.

:\QLNLREVHUZDFMLPR*QDRGQDOH(üZQDVW SXMF\FKWDEOLFDFKVáRZQLNRZ\FK

DBA_AUDIT_TRAIL -

SHáQDLQIRUPDFMDEH]SRG]LDáXQDRSFMHREVHUZDFML

DBA_AUDIT_SESSION –

UHMHVWUSRGáF]H

DBA_AUDIT_STATEMENT –

 UHMHVWU X*\FLD SROHFH *5$17 5(92.( $8'IT,

NOAUDIT oraz ALTER SYSTEM

DBA_AUDIT_OBJECT –

 UHMHVWU X*\FLD RELHNWyZ L SU]\ZLOHMyZ ]JRGQLH ] XVWDZLRQ\PL

opcjami obserwacji

,RWR]DSRPRFSROHFHQLD6(/(&7]'%$B$8',7B6(66,21X]\VNXMHP\UHMHVWUF]DVXSUDF\
w naszej bazie danych.

3U]\NáDG:\QLNREVHUZDFMLSRGáF]H

SQL> select sessionid,
2 to_char(timestamp,'YYYY.MM.DD HH24:MI:SS') logon_time,
3 to_char(logoff_time,'YYYY.MM.DD HH24:MI:SS') logoff_time,
4 os_username,
5 username,
6 returncode
7 from dba_audit_session

8

order by timestamp;

9

SESSIONID LOGON_TIME LOGOFF_TIME OS_USERNAME USERNAME RETURNCODE
---------- ------------------- ------------------- -------------------- -------------------- ----------
2134 2000.07.25 21:01:04 2000.07.25 21:01:15 JALA IOPT 0
2135 2000.07.25 21:01:15 2000.07.25 21:03:35 JALA ALFA 0
2136 2000.07.25 21:03:35 2000.07.25 21:19:51 JALA ALFA 0
2137 2000.07.26 09:57:00 2000.07.26 14:48:51 JALA IOPT 0
2138 2000.07.26 10:21:31 2000.07.26 15:30:17 JALA IOPT 0
2139 2000.07.26 10:21:47 2000.07.26 11:24:54 JALA IOPT 0
2162 2000.07.26 15:49:09 JALA IOPT 0
2163 2000.07.26 16:07:37 2000.07.26 16:07:41 JALA IOPT 0
2164 2000.07.26 16:07:41 JALA BETA 1017
2165 2000.07.26 16:07:46 2000.07.26 16:23:56 JALA BETA 0
2166 2000.07.26 16:23:56 JALA GAMMA 0

background image

Ko

PHQWDU]GRSU]\NáDGX6(66,21,'MHVWXQLNDOQ\PLGHQW\ILNDWRUHPVHVML%LH*FDVHVMDPR*HVSUDZG]Lü

VZyMLGHQW\ILNDWRU]DSRPRFIXQNFMLVWDQGDUGRZHM86(5(19 µ6(66,21,'¶ ']L NLWHPXLGHQW\ILNDWRURZL
E G]LHP\PRJOLQDVW SQLHáF]\üSURVW\UHMHVWUSRGáF]H]UDSRUWHPV]F]HJyáRZ\PRW\PFRGDQDVHVMD
URELáD,GHQW\ILNDWRUSR]RVWDMHXQLNDOQ\ZUDPDFKMHGQHMED]\GDQ\FK-H*HOLNROXPQD/2*2))B7,0(MHVW
SXVWDWR]QDF]\*HVHVMDMHV]F]HG]LDáDOXESRGáF]HQLHE\áRQLHXGDQH6HVMHSU]HUZDQHSU]H]DGPLQLVWUDWRUD
OXE]SRZRGX]DPNQL FLDED]\GDQ\FKX]\VNXMZ/2*2))B7,0(F]DV]GDU]HQLDNWyUHZ\PXVLáRSU]HUZDQLH
VHVML3RP\OQHSRGáF]HQLHLEUDNSUREOHPyZZWUDNFLHG]LDáDQLDVHVMLV\JQDOL]XMHZDUWRüZNROXPQLH
5(7851&2'(,QQDZDUWRüWRNRGEá GX25$

- sygnaliz

XMF\SUREOHP:SU]\NáDG]LHGODVHVML

Z\VWSLáGRV\üSRSXODUQ\EáGÄ25$

-

QLHSUDZLGáRZDQD]ZDX*\WNRZQLNDKDVáRRGPRZDUHMHVWUDFML´

.ROXPQ\X*\WHZSU]\NáDG]LHQLHVZV]\VWNLPLGRVW SQ\PLZ'%$B$8',7B6(66,21

:DUWR ZLHG]LHü *H LVWQLHMH Sewna, bardzo ciekawa kolumna w tablicy DBA_AUDIT_TRAIL

]DPDVNRZDQDSRGQLH]QDF]FQD]Z&200(17B7(;72Wy*]DZDUWHZQLHMLQIRUPDFMHQLHV

GRVW SQHZ'%$B$8',7B6(66,21DPRJRND]DüVL SR*\WHF]QH'RW\F]RQHVSRVREXLDGUHVX

]NWyUHJRáF]RQRVL GRED]\GDQ\FK6SUDZG(P\NOLNDVHVML]SU]\NáDGX

3U]\NáDG'RGDWNRZHLQIRUPDFMHRVHVMDFK

SQL> select sessionid,
2 comment_text
3 from dba_audit_trail
4 where sessionid in ( 2138, 2164, 2134);

SESSIONID COMMENT_TEXT
---------- ---------------------------------------------------------------------------------------------------
2134 Authenticated by: DATABASE
2138 Authenticated by: DATABASE; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.4.81)(PORT=2615))
2164 Authenticated by: DATABASE

Ko

PHQWDU]GRSU]\NáDGX6HVMDE\áDSRP\OQLH]DNRF]RQVHVMORNDOQ6HVMDáF]\áDVL 

Z\NRU]\VWXMFSURWRNyá7&3,3 1HWOXE64/ 1HW 6HVMDE\áDVHVMORNDOQNWyUDQLHGRV]áDGR
VNXWNX]SRZRGXEá GX25$

-01017.

3LHO JQDFMDWDEO

icy SYS.AUD$

7DEOLFD$8'WZRU]RQDMHVWSRGREQLHMDNWDEOLFHVáRZQLNRZHZSU]HVWU]HQLWDEOLF6<67(0Z

VFKHPDFLH6<67\PVDP\P]QDMGXMHVL ZJUXSLHWDEOLFNWyU\FKÄGRW\NDQLH´LQDF]HMMDNW\ONR

SRSU]H] 6(/(&7 MHVW ]DEURQLRQH 1D V]F] FLH VWDQRZL RQD MHGQDN Z\MWHN – PR*QD L QDOH*\ 

XVXZDü]QLHMUHNRUG\$GPLQLVWUDWRUSRZLQLHQ]DSHZQLü

.RQWURO UR]PLDUXWDEOLF\$8'

Backup tablicy AUD$

3RQLHZD*$8']QDMGXMHVL ZSU]HVWU]HQLWDEOLF6<67(0 DGRNXPHQWDFMDVWDQRZF]RRGUDG]D

przenoszenie tej tablicy w

LQQHPLHMVFH QLHZROQRGRSXFLüDE\ZVSRVyEQLHNRQWURORZDQ\URVáD

]DS\FKDMF F]\WH*UR]S\FKDMF W QDMZD*QLHMV]SU]HVWU]HZED]LHGDQ\FK2UDFOH=DWHPQDOH*\

RNUHVRZRF]\FLüW WDEOLF ]HVWDU\FKUHNRUGyZ$OHFR]URELüMH*HOLE G]LHP\FKFLHOLVL JQüGR

KLVWRULL QDV]HJR G]LHQQLND ÄZHMü L Z\Mü´" 2Wy* MH*HOL ZF]HQLHM QLH ]DSHZQLP\ PHFKDQL]PX
archiwizacji tablicy AUD$ -

 QLH E G]LHP\ PLHOL GRVW SX GR XVXQL W\FK ] QLHM UHNRUGyZ QDZHW

MH*HOLG\VSRQXMHP\HNVSRUWHPED]\GDQ\FKVSU]HGPRPHQWXXVXQL cia starych rekordów. Eksport

ED]\GDQ\FKQLHREHMPXMH*DGQ\FKWDEOLFX*\WNRZQLND6<6=]DáR*HQLDWHQ*HX*\WNRZQLNSRVLDGD

W\ONR WDEOLFH VáRZQLNRZH D WH ] NROHL DXWRPDW\F]QLH ]DSHáQLDM VL  Z SU]\SDGNX LPSRUWX

SR]RVWDá\FKRELHNWyZED]\GDQ\FK

Skuteczny

P SURVW\P L QDMF] FLHM VWRVRZDQ\P UR]ZL]DQLHP MHVW VSRU]G]HQLH NRSLL WDEOLF\

$8' SRG LQQ\P X*\WNRZQLNLHP Z LQQHM SU]HVWU]HQL WDEOLF 2GZLH*DQLH WDNLHM NRSLL PR*H

RGE\ZDüVL QSUD]QDGRE ]DSRPRFSURVWHMS WOL

background image

3U]\NáDG3LHO JQDFMDWDEOLF\$

UD$

begin
for i in (select sessionid
from sys.aud$
where timestamp# < trunc(sysdate)
and sessionid not in
( select audsid
from v$session ) )
loop
insert into AUDIT_ARCH
select *
from sys.aud$
where sessionid = i.sessionid;
delete from sys.aud$
where sessionid = i.sessionid;
commit;
end loop;
end;
/

Ko

PHQWDU]GRSU]\NáDGX6L JQL FLHGRWDEOLF\96(66,21SR]ZDODQDPXQLNQüXVXQL FLDUHNRUGXGOD

G]LDáDMFHMVHVML=DSURSRQRZDQ\ZDUXQHNZ\ELHUDUHNRUG\ZF]RUDMV]HLVWDUV]H$GPLQLVWUDWRUSRZLQLHQ
RNUHOLüMDNGáXJKLVWRUL PR*HSU]HFKRZ\ZDüZWDEOLF\RU\JLQDOQHM3XVWNRSL WDEOLF\$8' ZW\P
SU]\SDGNXQD]ZDQ$8',7B$5&+ PR*QDSU]\JRWRZDü]DSRPRFÄFUHDWHWDEOH$8',7B$5&+
RSFMHBVNáDGRZDQLDDVVHOHFW IURP6<6$8'ZKHUH ´3RWZLHUG]DQLHWUDQVDNFMLSRND*G\P

przeniesionym wierszu pozwala nam unikn

üSUREOHPyZ]VHJPHQWDPLZ\FRIDQLD

7DNSU]\JRWRZDQDNRSLDWDEOLF\$8' QDNRQFLHX*\WNRZQLNDLQQHJRQL*6<6 MHVWFKURQLRQD

SU]H]HNVSRUWED]\GDQ\FKLW\PVDP\PPR*HE\üF]\V]F]RQD]PR*OLZRFLSRZURWXGRZHUVML

]DFKRZDQHMZF]DVLHHNVSRUWX3U]HJOGDQLHLQIRUPDFML]DZDUWHMZWDEOLF\DUFKLZDOQHMMHVWPR*OLZH
na dwa sposoby:

• F]\WDQLHZSURVW]WHMWDEOLF\ PR*HE\üZVSRPDJDQHSHUVSHNW\ZDPLSU]\JRWRZDQ\PL

na wzór DBA%AUDIT%)

• F]\WDQLH]6<6$8'XSU]HGQLR]DáDGRZDQHMGDQ\PL]WDEOLF\– kopii

1.2. Zdarzenia bazodanowe

,QQ\P VSRVREHP QD UHMHVWUDFM  SRGáF]H GR ED]\ GDQ\FK MHVW SU]\JRWRZDQLH Z\]ZDODF]\

G]LDáDMF\FKQD]GDU]HQLDFKED]RGDQRZ\FK-HVWWRQRZDPR*OLZRüGRVW SQDSRF]ZV]\RGZHUVML
Oracle Server 8.1. Zdarzenia na poziomie bazy danych, które mog

E\üSRZRGHPGRXUXFKRPLHQLD

Z\]ZDODF]DVQDVW SXMFH

SERVERERROR –

Z\VWSLáEáGUHMHVWURZDQ\QDSR]LRPLHED]\GDQ\FK QLHNWyUHEá G\QLH

SRZRGXMXUXFKRPLHQLDZ\]ZDODF]DQSÄ25$-01034: Oracle not available” - )

LOGON, LOGOFF –

SRáF]HQLHLUR]áF]HQLH]ED]GDQ\FK

STARTUP, SHUTDOWN –

VWDUWL]DPNQL FLHED]\GDQ\FK

2F]\ZLFLHDE\UHMHVWURZDüF]DVSUDF\QDOH*\Z\NRU]\VWDü]GDU]HQLD/2*21L/2*2))

1.2.1. Porównanie z poleceniem AUDIT

3RGVWDZRZ ]DOHW ]DVWRVRZDQLD Z\]ZDODF]\ Z SRUyZQDQLX ] SROHFHQLem AUDIT jest

RF]\ZLFLHPR*OLZRüRSURJUDPRZDQLD]GDU]HQLD']L NLWHPXPR*QDDNW\ZQLHNRQWURORZDüQDV]

ÄEUDP  ]DNáDGRZ´ D QLH W\ONR ELHUQLH UHMHVWURZDü ZHMFLD L Z\MFLD 2WR SU]\NáDG\ PR*OLZRFL

Z\]ZDODF]\QLHGRVW SQHGODSROHFHQLD$8',7

zebranie do

GDWNRZHMLQIRUPDFML]WDEOLFVáRZQLNRZ\FK2UDFOH¶D

background image

UHMHVWUDFMD SRGáF]H ZHGáXJ GRZROQ\FK ZDUXQNyZ ORJLF]Q\FK QS W\ONR Z RNUHORQH GQL
tygodnia),

RGU]XFDQLH SRGáF]H QLH VSHáQLDMF\FK RNUHORQ\FK ZDUXQNyZ QS SRáF]HQLH ] PDV]\Q\

QLHE GFHMQDOLFLH autoryzowanych)

SU]HV\áDQLH LQIRUPDFML RVWU]H*H  ]D SRPRF VWUXPLHQL '%06B3,3(  OXE NROHMHN
(Advanced Queueing Option)

3RGVWDZRZ ZDG ]DVWRVRZDQLD Z\]ZDODF]\ Z SRUyZQDQLX ] SROHFHQLHP $8',7 MHVW

RF]\ZLFLHNRQLHF]QRüRSURJUDPRZDQLD]GDU]HQLD$GPLQLVWUDWRUF]\SURJUDPLVWDSU]\JRWRZXMF\

Z\]ZDODF]G]LDáDMF\QD]GDU]HQLDFKED]RGDQRZ\FKPXVLUR]ZL]DüSRGVWDZRZHSUREOHP\

MDNQDSLVDüSURJUDPDE\QLHZ\ZRáDüVNXWNyZXERF]Q\FK

JG]LHSU]HV\áDüLQIRUPDFM R]GDU]HQLX

MDNQLHGRSXFLüGR]DIDáV]RZDQLDLQIRrmacji

'RGDWNRZZDGUHMHVWUDFMLF]DVXSUDF\]DSRPRFZ\]ZDODF]\MHVWG]LDáDQLHZ\]ZDODF]DW\ONR

Ä$)7(5/2*21´7\PVDP\PQLHPR*QDZ\FKZ\FLüSUyEQLHXGDQ\FKSRGáF]H

1.2.2. Przygotowanie do zbierania informacji

:\]ZDODF]H G]LDáDMFH QD ]GDU]HQLDFK ED]RGDQRZ\FK PRJ NRU]\VWDü ]H VSHFMDOQ\FK IXQNFML

]ZUDFDMF\FK DWU\EXW\ ]GDU]HQLD , WDN ]GDU]HQLH $)7(5 /2*21 XGRVW SQLD QDVW SXMFH
atrybuty:

ora_sysevent -

GRNáDGQLHµ/2*21¶

ora_login_user –

QD]ZDX*\WNRZQLNDED]\GDQ\FK

ora_instance_num – numer in

VWDQFMLSU]H]NWyUX*\WNRZQLNáF]\VL ]ED]GDQ\FK

ora_database_name – nazwa bazy danych,

ora_client_ip_address –

DGUHV]NWyUHJRPDPPLHMVFHSRáF]HQLHMH*HOLZ\NRU]\VW\ZDQ\MHVW

SURWRNyá7&3,3

Zdarzenie BEFORE LOGOFF oferuje o jeden atrybut mniej –

 QLH XGRVW SQLD

ÄRUDBFOLHQWBLSBDGGUHVV´ -DN ZLGDü LQIRUPDFMD GRVWDUF]DQD SU]H] DWU\EXW\ ]GDU]HQLD QLH MHVW ]E\W

REILWD0XVLP\]DWHP]DGEDüDE\Z\]ZDODF]PyJá]DUHMHVWURZDüQLHFRZL FHMGDQ\FK

%DUG]RERJDW\P(UyGáHPZLHG]\RZáDFLZRFLDFKVHVML SRáF]enia) jest tablica V$SESSION.

&y*NLHG\MHVWRQDGRVW SQDW\ONRGODDGPLQLVWUDWRUyZ$SU]HFLH*SDPL WDüQDOH*\*HZ\]ZDODF]

Z\NRQ\ZDQ\ MHVW ] SUDZDPL VHVML SRZRGXMFHM ]GDU]HQLH 'RGDWNRZD WUXGQRü QDZHW GOD

DGPLQLVWUDWRUDPR*HSROHJDüQDXVWDOHQLXNWyUD]VHVMLZLG]LDQ\FKZ96(66,21MHVWPRMVHVM"

3RQL*V]\SU]\NáDGMHVWMHGQ]PR*OLZRFLUR]ZL]DQLDWHJRSUREOHPX

3U]\NáDG8GRVW SQLHQLHLQIRUPDFMLRZáDVQHMVHVML

SQL> connect sys
3RGDMKDVáR

3RáF]RQ\
SQL> create or replace view session_info
2 as
3 select *
4 from v$session
5 where sid = (select distinct
6 sid
7 from sys.v$mystat);
3HUVSHNW\ZD]RVWDáDXWZRU]RQD
SQL> create public synonym session_info for session_info;
6\QRQLP]RVWDáutworzony.
SQL> grant select on session_info to public;
3U]\]QDQLHXSUDZQLH]DNRF]RQHSRZRG]HQLHP

.RPHQWDU]GRSU]\NáDGX3HUVSHNW\ZD9P\VWDWSRND]XMHVWDW\VW\NLGODELH*FHMVHVML1LHVWHW\VWDQGDUGRZR
GRVW SQDMHVWW\ONRGODX*\WNRZQLND6<6'ODWHJRWH*SRZ\*V]HSROHFHQLDZ\NRQ\ZDQHVMDNR6<6
.RU]\VWDMF]FXG]HJRRELHNWXVNáDGRZDQHJR QSSHUVSHNW\ZDOXESDNLHW X*\WNRZQLNSRWU]HEXMHXSUDZQLHQLD
W\ONRQDWHQ*HRELHNW:V]HONLHZHZQ WU]QHRGZRáDQLDUHDOL]RZDQHVGRP\OQLH]SUDZDPLZáDFLFLHOD

background image

RELHNWXVNáDGRZDQHJR ZZHUVMLSRMDZLáDVL PR*OLZRüXUXFKDPLDQLDRELHNWyZVNáDGRZDQ\FK]SUDZDPL
ZRáDMFHJR 'ODWHJRWH*Z\VWDUF]\QDGDüXSUDZQLHQLDQDSHUVSHNW\Z NRFRZ

– SESSION_INFO.

.RU]\VWDMF]SHUVSHNW\Z\6(66,21B,1)2SU]\JRWRZDQHMZSU]\NáDG]LHND*GDVHVMDPR*H

Ä]REDF]\ü´VZRMHLW\ONRVZRMHSDUDPHWU\WDNMDNVSRND]DQHZ96(66,21.ROHMQ\PNURNLHP

E G]LHSU]\JRWRZDQLHPLHMVFDVNáDGRZDQLDLQIRUPDFML

3U]\NáDG3U]\JRWRZDQLHWDEOLF\JURPDG]FHMKLVWRUL SRáF]H

SQL> connect system
P

RGDMKDVáR

3RáF]RQ\
SQL> create table session_hist
2 ( sid number,
3 serial# number,
4 audsid number,
5 username varchar2(30),
6 osuser varchar2(30),
7 machine varchar2(64),
8 terminal varchar2(16),
9 program varchar2(64),
10 logon_time date,
11 logoff_time date,
12 ip_address varchar2(64) )
13 tablespace tools;
7DEHOD]RVWDáDXWZRU]RQD
SQL> create public synonym session_hist for session_hist;
6\QRQLP]RVWDáXWZRU]RQ\
SQL> grant select,insert,update(logoff_time) on session_hist to public;
3U]\]QDQLHXSUDZQLH]DNRF]RQHSRZRG]HQLHP

.RPHQWDU]GRSU]\NáDGX7ZRU]FWDEOLFHQLHSRZLQQLP\NRU]\VWDü]NRQWD6<6 SRUyZQDMSXQNW 

Tworzenie t

DEOLF\QDNRQFLH6<67(0WH*QLHMHVWZVND]DQHDOHSU]\NáDGMHVWUHDOL]RZDQ\QDWHVWRZHMED]LH

danych

--DN]DEH]SLHF]\ü6(66,21B+,67SU]HGIDáV]RZDQLHP"=RVWDZP\WRMDNRSUDF GRPRZGOD

bardziej dociekliwych.

A oto i zestaw dwóch, prostych wyzwalaczy re

MHVWUXMF\FK SRGáF]HQLD L UR]áF]HQLD ] ED]

danych:

3U]\NáDG:\]ZDODF]HUHMHVWUXMFHÄZHMFLDLZ\MFLD´

SQL> create or replace trigger after_logon
2 after logon on database
3 declare
4 ip_ varchar2(30);
5 begin
6 ip_ := ORA_CLIENT_IP_ADDRESS;
7 insert into session_hist
8 ( SID, SERIAL#,
9 AUDSID, USERNAME, OSUSER,
10 MACHINE, TERMINAL, PROGRAM,
11 LOGON_TIME, LOGOFF_TIME, IP_ADDRESS )
12 select SID,
13 SERIAL#,
14 AUDSID,
15 USERNAME,
16 OSUSER,
17 MACHINE,
18 TERMINAL,
19 PROGRAM,
20 LOGON_TIME,
21 NULL,
22 ip_
23 from session_info;
24 if user = 'ALFA'
25 then
26 raise_application_error( -20001, 'Ciebie nie lubimy!');
27 end if;
28 end;
29 /
:\]ZDODF]]RVWDáXWZRU]RQ\
SQL>
SQL> create or replace trigger before_logoff
2 before logoff on database
3 begin
4 update session_hist
5 set logoff_time = sysdate
6 where (sid, serial#, audsid) =
7 (select sid, serial#, audsid
8 from session_info );
9 end;
10 /
:\]ZDODF]]RVWDáXWZRU]RQ\

.RPHQWDU]GRSU]\NáDGX

Atrybut ORA_CLIENT_IP_ADDRE

66X*\W\EH]SRUHGQLRZSROHFHQLX,16(57

]ZUDFD18//:\]ZDODF]$)7(5B/2*21ÄQLHZSXFL´GRED]\GDQ\FKX*\WNRZQLND$/)$6HVMDRWZRU]RQD

z „AS SYSDBA” (lub „INTERNAL”) otrzymuje AUDSID = 0 (i nie jest rejestrowana przez AUDIT).

background image

Jednoznaczna identyfikacja

VHVMLMHVW]DWHPPR*OLZDGRSLHURSRX*\FLXWU]HFKNROXPQ6,'6(5,$/L

AUDSID.

Wygenerujmy teraz kilka wpisów do tablicy SESSION_HIST

3U]\NáDG3RáF]HQLDOHG]RQHSU]H]Z\]ZDODF]H

SQL> connect iopt
3RGDMKDVáR

3RáF]RQ\
SQL> connect beta/beta@iopt
3RáF]RQ\
SQL> connect sys as sysdba
3RGDMKDVáR

3RáF]RQ\
SQL> connect alfa/alfa
ERROR:
ORA-

Z\VWSLáEáGQDSR]LRPLHUHNXUHQF\MQHJR64/

ORA-20001: Ciebie nie lubimy!
ORA-06512: przy linia 24
2VWU]H*HQLH1LHPDMX*SRáF]HQLD]25$&/(
SQL> connect gamma/gamma@iopt
3RáF]RQ\

6SUDZG(P\]DSLV\ZWDEOLF\UHMHVWUXMFHM

3U]\NáDG:\QLNUHMHVWUDFMLSURZDG]RQHMSU]H]Z\]ZDODF]H

SQL> select to_char(LOGON_TIME,'YYYY.MM.DD HH24:MI:SS') LOGON_TIME,
2 to_char(LOGOFF_TIME,'YYYY.MM.DD HH24:MI:SS') LOGOFF_TIME,
3 USERNAME,
4 OSUSER,
5 MACHINE,
6 IP_ADDRESS,
7 PROGRAM
8 from session_hist
9 order by logon_time;

LOGON_TIME LOGOFF_TIME USERNAME OSUSER MACHINE IP_ADDRESS PROGRAM
------------------- ------------------- -------- ------ ----------- ------------ -----------
2000.07.28 16:37:28 2000.07.28 16:37:37 IOPT JALA IRM\JAREK1 SQLPLUS.EXE
2000.07.28 16:37:38 2000.07.28 16:37:51 BETA JALA IRM\JAREK1 192.168.4.81 SQLPLUS.EXE
2000.07.28 16:37:51 2000.07.28 16:38:01 SYS JALA IRM\JAREK1 SQLPLUS.EXE
2000.07.28 16:38:12 GAMMA JALA IRM\JAREK1 192.168.4.81 SQLPLUS.EXE

.RPHQWDU]GRSU]\NáDGX

Odrzucona s

HVMDX*\WNRZQLND$/)$QLHSR]RVWDZLáDSRVRELHODGX6HVMH

NRU]\VWDMFH]SRáF]HQLD1HW]DSLVDá\VZyMDGUHV6HVMDX*\WNRZQLND*$00$MHV]F]HWUZDOXEVHVMD
]RVWDáDSU]HUZDQDZVSRVyEJZDáWRZQ\ QS]DPNQL FLHED]\GDQ\FK]RSFM,00(',$7(OXE$%257

).

1.3. Podsumowanie

'ODFHOyZUHMHVWUDFMLLW\ONRUHMHVWUDFMLSRGáF]HGRQDV]HMED]\GDQ\FK]GHF\GRZDQLHSROHFDP

SROHFHQLH $8',7 -HVW SURVWV]H Z X*\FLX L GRVWDUF]D SHáQHM LQIRUPDFML UyZQLH* R SRáF]HQLDFK

QLHXGDQ\FK :\]ZDODF]H G]LDáDMFH QD ]GDU]HQLDFK ED]RGDQRZ\FK QDOH*\ WUDNWRZDü UDF]HM MDNR

HOHPHQW ZVSRPDJDMF\ QS GR ILOWURZDQLD SRGáF]H 1LH]DOH*QLH RG ]DVWRVRZDQHJR VSRVREX

SDPL WDüWU]HEDRREVáXG]HELH*FHMLEDFNXSLHWDEOLF]KLVWRULSRáF]H-HVWWRSU]HFLH*ÄELOOLQJ´
naszej bazy danych

 1LH EH] ]QDF]HQLD SR]RVWDMH UyZQLH* IDNW SU]\JRWRZDQLD RGSRZLHGQLFK

LQGHNVyZGODQDV]\FKWDEOLFKLVWRU\F]Q\FK%H]QLFKQLHE G]LHPR*OLZHHIHNW\ZQHUDSRUWRZDQLH]

WDEOLF NWyUH SRWHQFMDOQLH PRJ SU]HFKRZ\ZDü ZLHOH W\VL F\ UHNRUGyZ DOH WR MX* WHPDW QD inny
referat).

2. Rejestracja zmian danych

5HMHVWUDFMD ]PLDQ Z ED]LH GDQ\FK 2UDFOH MHVW ]DZV]H ZáF]RQD .D*GD SRWZLHUG]RQD ]PLDQD

PXVL]QDOH(üVL ZSOLNDFKG]LHQQLNDSRZWyU]H Z\MWNLHPVRSHUDFMH]RSFM12/2**,1*–

NWR X*\ZD WHM RSFML MHVW VDP VRELH ZLQLHQ Z SU]\SDGNX DZDULL  $* GR ZHUVML  2UDFOH QLH

XGRVW SQLDá *DGQHJR QDU] G]LD GR RJOGDQLD ]DZDUWRFL G]LHQQLNyZ Z IRUPLH ]UR]XPLDáHM GOD

F]áRZLHND3RF]ZV]\RGWHMZHUVMLDGPLQLVWUDWRUPDGRG\VSR]\FMLQDU] G]LHRQD]ZLH/RJ0LQHU

=D SRPRF WHJ R* QDU] G]LD ]DZDUWRü G]LHQQLNyZ SRZWyU]H ]DUyZQR ÄRQ-line” jak i

DUFKLZDOQ\FK  MHVW GRVW SQD GR UDSRUWRZDQLD ]D SRPRF 6(/(&7 =DWHP F]\ SRWU]HED F]HJR
jeszcze? Tak. Potrzeba selektywnej rejestracji zmian. Selektywna rejestracja zmian pozwala

background image

QDVW SQLH áDWZLHM L V]\EFLHM UDSRUWRZDü =GDU]D VL  *H Z DSOLNDFM  ZEXGRZDQH V PHFKDQL]P\

Z\SHáQLDMFH SU]\JRWRZDQH WDEOLFH ]PLDQ -DN QDWRPLDVW ]RUJDQL]RZDü VHOHNW\ZQ UHMHVWUDFM 

]PLDQ Z VSRVyE ]DXWRPDW\]RZDQ\ QLH]DOH*Q\ RG DSOLNDFML" 7UDG\F\MQ\P VSRVREHP GRVW SQ\P

RGZHUVML MHVWX*\FLHZ\]ZDODF]\G]LDáDMF\FKQDSROHFHQLDFK'0/QDZ\EUDQ\FKWDEOLFDFK

:\PDJDWRWURFK SUDF\DOHMDNE G VWDUDáVL SRND]DüQLHMHVWWDNLHWUXGQH

2.1. Polecenie AUDIT

: UHMHVWUDFML ]PLDQ PR*H QDP SRPyF ]QDQH MX* SROHFHQLH $8',7 3R]ZDOD RQ XVWDZLü

OHG]HQLH SROHFH QD Z\EUDQ\P RELHNFLH =DWHP PR*QD VRELH ]D*\F]\ü UHMHVWUDFML ND*GHJR
INSERT, UPDATE lub DELETE na wybranych tablicach. Niestety, informacja zebrana w ten

VSRVyERJUDQLF]DVL GRVWZLHUG]HQLD*HRZV]HPGDQ\X*\WNRZQLNQDGDQHMWDEOLF\GRNRQDá]PLDQ

GDQ\FK1LHZLDGRPRQDWRPLDVWMDNLHGDQH]RVWDá\ZVWDZLRQHXVXQL WHOXE]PLHQLRQH-H*HOLWHQ

SR]LRP LQIRUPDFML MHVW Z\VWDUF]DMF\ WR ]DFK FDP GR ]Já ELHQLD VNáDGQL SROHFHQLD $8',7 L
wybrania odpowiednich opcji.

$NW\ZDFMDVWDUWLUDSRUWRZDQLHOHG]HQLDSR]RVWDMHWDNLHVDPRMDNZ

SU]\SDGNXOHG]HQLDSRGáF]H:V]\VF\]DLQWHUHVRZDQLUHMHVWUDFMZDUWRFL]PLHQLDQ\FKGDQ\FK

PXV]X*\üLQQ\FKVSRVREyZ

2.2. Wyzwalacze na poleceniach DML

1DWXUD Z\]ZDODF]D ]RVWDáD SU]HGVWDZLRQD SU]\ RND]ML OHG]HQLD SRGáF]H GR ED]\ GDQ\FK

-H*HOLFKFHP\UHMHVWURZDüZDUWRü]PLHQLDQ\FKGDQ\FKPR*HP\X*\üZ\]ZDODF]\G]LDáDMF\FKQD
poleceniach DML (Data Manipulation Language

 : WUHFL SURJUDPLVWD PR*H X*\ü VSHF\ILNDFML

:NEW.nazwa_kolumny i :OLD.nazwa_kolumny

 , WR ZáDQLH F]\QL X*\FLH Z\]ZDODF]\ '0/

QLH]DVWSLRQ\PLZUHMHVWUDFML]PLDQGDQ\FK&RPXVLP\Z\VSHF\ILNRZDü

WDEOLF NWyUFKFHP\OHG]Lü

RSHUDFM NWyUFKFHP\OHG]Lü– INSERT, UPDATE, DELETE

NLHG\FKFHP\XUXFKDPLDüZ\]Zalacz – BEFORE lub AFTER

F]\Z\]ZDODF]PDG]LDáDüRJyOQLHQDSR]LRPLHRSHUDFMLF]\WH*GODND*GHJR]PLHQLDQHJR
wiersza z osobna (FOR EACH ROW)

'RGDWNRZR RF]\ZLFLH QDOH*\ SU]\JRWRZDü WDEOLF  UHMHVWUXMF ]PLDQ\ 7DN QDSUDZG  WR

SRZLQQ\ E\ü WR SU]\QDMPQLHM GZLH WDEOLFH 3LHUZV]D UHMHVWUXMFD RJyOQH ZáDVQRFL VHVML

PRG\ILNXMFHM GDQH L GUXJD SDPL WDMFD ZDUWRFL ]PLHQLDQ\FK NROXPQ 3RQL*HM ]QDMG]LHP\

SU]\NáDGWDNLFKWDEOLF

3U]\NáDG7DEOLFHGRUHMHVWUDFML]PLDQGDQ\FK

SQL> create table data_hist
2 ( entry_id number,
3 timestamp date,
4 sid number,
5 serial# number,
6 audsid number,
7 username varchar2(30),
8 osuser varchar2(30),
9 machine varchar2(64),
10 terminal varchar2(16),
11 program varchar2(64),
12 table_owner varchar2(30),
13 table_name varchar2(30),
14 action varchar2(1) )
15 tablespace tools;
7DEHOD]RVWDáDXWZRU]RQD
SQL> create table data_hist_det
2 ( entry_id number,
3 column_name varchar2(30),
4 old_value varchar2(2000),
5 new_value varchar2(2000) )
6 tablespace tools;
7DEHOD]RVWDáDXWZRU]RQD
SQL> create sequence data_hist_seq;
6HNZHQFMD]RVWDáDXWZRU]RQD

.RPHQWDU]GRSU]\NáDGX=HVWDZSRF]WNRZ\FKNROXPQWDEOLF\'$7$B+,67MHVWWDNLVDPMDNZWDEOLF\
6(66,21B+,678GRVW SQLWRSHáQLQIRUPDFM RVHVMLPRG\ILNXMFHMGDQHDWDN*HSR]ZROLZUD]LHSRWU]HE

y,

background image

SRáF]\üWDEOLFHUHMHVWUXMFHVHVMHL]PLDQ\.ROXPQD$&7,21E G]LHSU]HFKRZ\ZDüNRGDNFML,

– INSERT, U

– UPDATE, D –

'(/(7(6HNZHQFMD'$7$B+,67B6(4E G]LHJHQHURZDüXQLNDOQ\NOXF]GODWDEOLF

UHMHVWUXMF\FK]PLDQ\2F]\ZLFLHQDOH*\SDPL WDüRQDGDQLXRGSRZLHGQLFKXSUDZQLHSU]\JRWRZDQLX
V\QRQLPyZL]DEH]SLHF]HQLXSU]HGIDáV]RZDQLHP

6WZRU]HQLH Z\]ZDODF]D OHG]FHJR ]PLDQ\ PR*H E\ü Z ]QDF]Q\P VWRSQLX ]DXWRPDW\]RZDQH

0R*H RGE\ZDü VL  WR QD SR]LRPLH DSOLNDFML NWyUD Z\JHQHUXMH RGSRZLHGQL VNU\SW GR WZRrzenia

Z\]ZDODF]D']L NLQRZHMZáDFLZRFL2UDFOH– wbudowanego, dynamicznego SQL (polecenie

(;(&87( ,00(',$7(  MHVW WR QDZHW SURVWV]H 3RQL*HM SUH]HQWRZDQ\ MHVW SU]\NáDG

UHMHVWURZDQLDSROHFHQLD83'$7(GODGREU]H]QDQHMWDEOLF\X*\WNRZQLND6&277'(3T.

3U]\NáDG:\]ZDODF]UHMHVWUXMF\83'$7(QDWDEOLF\6&277'(37

SQL> create or replace trigger SCOTT_DEPT_U
2 before UPDATE on SCOTT.DEPT for each row
3 declare
4 info_ session_info%rowtype;
5 entry_id_ number;
6 begin
7 select *
8 into info_
9 from session_info;
10 select data_hist_seq.nextval
11 into entry_id_
12 from dual;
13
14 insert into data_hist
15 ( ENTRY_ID, TIMESTAMP,
16 SID, SERIAL#, AUDSID,
17 USERNAME, OSUSER,
18 MACHINE, TERMINAL, PROGRAM,
19 TABLE_NAME, TABLE_OWNER, ACTION )
20 values
21 ( entry_id_, sysdate,
22 info_.sid, info_.serial#, info_.audsid,
23 info_.username, info_.osuser,
24 info_.machine, info_.terminal, info_.program,
25 'DEPT', 'SCOTT', 'U');
26
27 insert into data_hist_det
28 ( ENTRY_ID, COLUMN_NAME,
29 OLD_VALUE, NEW_VALUE )
30 values
31 ( entry_id_, 'DEPTNO',
32 substr(to_char(:old.DEPTNO),1,2000),
33 substr(to_char(:new.DEPTNO),1,2000) );
34
35 insert into data_hist_det
36 ( ENTRY_ID, COLUMN_NAME,
37 OLD_VALUE, NEW_VALUE )
38 values
39 ( entry_id_, 'DNAME',
40 substr(:old.DNAME,1,2000),
41 substr(:new.DNAME,1,2000) );
42
43 insert into data_hist_det
44 ( ENTRY_ID, COLUMN_NAME,
45 OLD_VALUE, NEW_VALUE )
46 values
47 ( entry_id_, 'LOC',
48 substr(:old.LOC,1,2000),
49 substr(:new.LOC,1,2000) );
50
51 end;
52 /

:\]ZDODF]]RVWDáXWZRU]RQ\.

.RPHQWDU]GRSU]\NáDGX3R]RVWDáH]GDU]HQLDPRJE\üUHMHVWURZDQHSU]H]DQDORJLF]QHZ\]ZDODF]H

BEFORE INSERT i BEFORE DELETE. Wykorzystywana jest perspektywa SESSION_INFO przygotowana w

SU]\NáDG]LH:VWDZLDMFQRZHLVWDUHZDUWRFLNROXPQGRWDEOLF\UHMHVWUXMFHMQDOH*\SDPL WDüRNRQZHUVML
GDQ\FKQDWHNVWRUD]RJUDQLF]HQLXQDGáXJRüWHJRWHNVWX

7HUD]SR]RVWDáRVSUDZG]LüG]LDáDQLHUHMHVWUDWRUD

3U]\NáDG=PLDQ\GDQ\FK

SQL> connect gamma/gamma@iopt
3RáF]RQ\
SQL> update dept
2 set loc = 'WARSZAWA'
3 where deptno = 10;
ZLHUV]]RVWDá]PRG\ILNRZDQ\
SQL> commit;
=DWZLHUG]DQLH]RVWDáRXNRF]RQH
SQL> connect beta/beta
3RáF]RQ\

background image

SQL> insert into dept
2 values ( 50, 'NEW', 'ZAKOPANE');
ZLHUV]]RVWDáXWZRU]RQ\
SQL> commit;
Zatwierdzanie

]RVWDáRXNRF]RQH

SQL> connect scott/tiger@iopt
3RáF]RQ\
SQL> delete from dept
2 where deptno = 50;
ZLHUV]]RVWDáXVXQL W\
SQL> commit;
=DWZLHUG]DQLH]RVWDáRXNRF]RQH

3U]\NáDG5DSRUW]H]PLDQGDQ\FK

SQL> select to_char(A.TIMESTAMP,'YYYY.MM.DD HH24:MI:DD') TIMESTAMP,
2 A.USERNAME,
3 decode(A.ACTION,'I','INSERT','D','DELETE','U','UPDATE') ACTION,
4 A.TABLE_OWNER||'.'||A.TABLE_NAME CHANGED_TABLE,
5 B.COLUMN_NAME,
6 B.OLD_VALUE,
7 B.NEW_VALUE
8 from data_hist A,
9 data_hist_det B
10 where A.entry_id = B.entry_id
11 order by
12 A.timestamp;

TIMESTAMP USERNAME ACTION CHANGED_TABLE COLUMN_NAME OLD_VALUE NEW_VALUE
------------------- ---------- ------ ------------- -------------------- -------------------- ------------
2000.07.28 19:23:28 GAMMA UPDATE SCOTT.DEPT DEPTNO 10 10
DNAME ACCOUNTING ACCOUNTING
LOC NEW YORK WARSZAWA
2000.07.28 19:24:28 BETA INSERT SCOTT.DEPT DEPTNO 50
DNAME NEW
LOC ZAKOPANE
2000.07.28 19:25:28 SCOTT DELETE SCOTT.DEPT DEPTNO 50
DNAME NEW
LOC ZAKOPANE

2.2.1 Kilka uwag

Nie

]PLHUQLH ZD*Q VSUDZ MHVW RJUDQLF]HQLH UHMHVWURZDQ\FK ]PLDQ *URPDG]HQLH ]E\W GX*HM

LORFLLQIRUPDFMLSRZRGXMHRGF]XZDOQHREFL*HQLHV\VWHPXLGDOV]HSUREOHP\]UDSRUWRZDQLHP2WR

NLONDZVND]yZHNMDNRJUDQLF]\üLORüGDQ\FKZWDEOLFDFKUHMHVWUXMF\FK]PLDny.

*URPDG]HQLH LQIRUPDFML R ]PLDQDFK GDQ\FK SRZLQQR E\ü RJUDQLF]RQH W\ONR GR

QDMZD*QLHMV]\FKWDEOLF

: SU]\SDGNX UHMHVWUDFML SROHFHQLD 83'$7( QLH ZDUWR SDPL WDü ZDUWRFL NROXPQ QLH
zmienionych.

:SU]\SDGNXUHMHVWUDFMLSROHFH,16(57L'(/(7(QLHZDUWRSDPL WDüNROXPQ]ZDUWRFL
NULL.

:\]ZDODF] QD SROHFHQLX 83'$7( PR*H E\ü XUXFKDPLDQ\ W\ONR SU]\ ]PLDQDFK

Z\]QDF]RQ\FKNROXPQ SDWU]VNáDGDQLD&5($7(75,**(5

.D*G\Z\]ZDODF]PR*HPLHü]GHILQLRZDQ\ZDUXQHNORJLF]Q\NWyUHJRVSHáQLHQLHZDUXQNXMH
uruchomienie

Z\]ZDODF]D SDWU]VNáDGDQLD&5($7(75,**(5

=GDQLH SRZWyU]RQH ] SXQNWX  1LH EH] ]QDF]HQLD SR]RVWDMH UyZQLH* IDNW SU]\JRWRZDQLD

RGSRZLHGQLFKLQGHNVyZGODQDV]\FKWDEOLFKLVWRU\F]Q\FK%H]QLFKQLHE G]LHPR*OLZHHIHNW\ZQH
raportowanie z tablic, które p

RWHQFMDOQLHPRJSU]HFKRZ\ZDüZLHOHW\VL F\UHNRUGyZ DOHWRMX*

temat na inny referat).

2.3. Log Miner

-DN MX* WR E\áR SRZLHG]LDQH /RJ 0LQHU MHVW WR VWRVXQNRZR QRZH QDU] G]LH SR]ZDODMFH

RJOGDü]DZDUWRüSOLNyZG]LHQQLNDSRZWyU]H]DSRPRFSROHFHQLD6ELECT. Dotyczy to zarówno

G]LHQQLNyZ ELH*F\FK ÄRQ-OLQH´  MDN L DUFKLZDOQ\FK MH*HOL ED]D GDQ\FK G]LDáD Z WU\ELH

DUFKLZL]DFML , WX GRFKRG]LP\ GR EDUG]R ZD*QHJR VSRVWU]H*HQLD /RJ 0LQHU MDNR QDU] G]LH GR

OHG]HQLD]PLDQGDQ\FKMHVWEH]X*\WHF]Q\MH*HOLED]DGDQ\FKQLHG]LDáDZWU\ELHDUFKLZL]DFML$WR

GODWHJR*HELH*FHG]LHQQLNL]DSLV\ZDQHVZF\NOXFLJOHQDQRZR=DWHPRSLHUDMFVL W\ONRQD

background image

G]LHQQLNDFKELH*F\FKQLHMHVWHP\ZVWDQLHZRJyOQ\PSU]\SDGNX]DSHZQLüUDSRUWRZDQLD]PLDQ

NWyUHPLDá\PLHMVFHQDZHWQLHGDOHMMDNQSJRG]LQ WHPX

=NROHLG\VSRQXMFG]LHQQLNDPLDUFKLZDOQ\PLPR*HP\SRWU]HERZDüGX*RF]DVXDE\GRWU]Hü

GR LQIRUPDFML R LQWHUHVXMF\FK QDV ]PLDQDFK ']LHMH VL  WDN GODWHJR *H PLPR X*\FLD SROHFHQLD

6(/(&7 WDN QDSUDZG  G]LDáDP\ QD SOLNDFK VHNZHQF\MQ\FK 3RQLHZD* G]LHQQLNL JURPDG]

ZV]\VWNLH]PLDQ\ZED]LHGDQ\FKPR*HWRR]QDF]DüSRWU]HE ÄSU]HNRSDQLD´NLONXVHWPHJDEDMWyZ

DE\RGQDOH(üMHGQWUDQVDNFM =UHJXá\QLHZLHP\NLHG\GRNáDGQLHWUDQVDNFMDPLDáDPLHMVFHDQS
podejrzewa

P\*HZF]RUDM–/RJ0LQHUPXVLSU]HMU]HüZV]\VWNLHZF]RUDMV]HSOLNLG]LHQQLND

1DOH*\WUDNWRZDü]DWHP/RJ0LQHU¶DMDNRQDU] G]LHZVSRPDJDMFHDQLHSRGVWDZRZHZ]DGDQLX

UDSRUWRZDQLD ]PLDQ GDQ\FK /RJ 0LQHU MHVW ] NROHL QLH]DVWSLRQ\ MH*HOL FKFHP\ X]\VNDü

LQIRUPDFMH R ]PLDQDFK NWyUH QLH E\á\ OHG]RQH Z\]ZDODF]DPL : SRSU]HGQLFK ZHUVMDFK 2UDFOH

DGPLQLVWUDWRU E\á ÄEH] V]DQV´ ZREHF WDNLHJR ]DGDQLD 7HUD] NRU]\VWDMF ] ZHUVML  PR*H

SRZLHG]LHüÄ7RSRWUZDDOHGDVL ]URELü´/RJ0LQHUQLHMHVWQDU] G]iem typu SQL*Plus, które
uruchamiamy i „jest”. Tutaj, mamy do czynienia z zestawem pakietów i perspektyw, które

RGSRZLHGQLRX*\WHVSHáQLQDV]HRF]HNLZDQLD1LHE G SU]HGVWDZLDáVSHF\ILNDFMLW\FK*HSDNLHWyZL
perspektyw -

 FLHNDZ\FK RGV\áDP GR GRNXPHQWDFML &KFLDáE\P QDWRPLDVW SRND]Dü Z  NROHMQ\FK

SXQNWDFKNURNSRNURNXSU]\JRWRZDQLHLX*\FLH/RJ0LQHUD

2.3.1 Parametr pliku startowego

$E\ Z SHáQL NRU]\VWDü ] XVáXJ /RJ 0LQHUD SRZLQQLP\ SU]\JRWRZDü VSHFMDOQ\ SOLN

VáRZQLNRZ\ &R WR WDNLHJR – R W\P Z QDVW Snym punkcie. Plik ten powstaje w katalogu
wskazywanym parametrem utl_file_dir

 SOLNX LQLWRUD -H*HOL WHQ SDUDPWHU QLH MHVW XVWDZLRQ\ GOD

QDV]HMED]\GDQ\FKQDOH*\F]\PSU G]HMSRSUDZLüWRQLHGRSDWU]HQLHLSRQRZQLHZ\VWDUWRZDüED] 
danych:

3U]\NáDG3DU

ametr init.ora

utl_file_dir = d:\OraDir\iOPT

3U]\JRWRZDQLHVáRZQLND

Specjalny plik –

VáRZQLNSRZLQLHQE\üSU]\JRWRZDQ\SU]HGZáDFLZ\PVNRU]\VWDQLHP]XVáXJ

/RJ 0LQHUD 6áRZQLN WHQ EXGRZDQ\ MHVW QD SRGVWDZLH DNWXDOQHJR 6áRZQLND 'anych w bazie

GDQ\FK 2UDFOH %H] WHJR ZVSRPDJDMFHJR SOLNX /RJ 0LQHU E G]LH QDP SUH]HQWRZDá QS QD]Z\

NROXPQZSRVWDFLKHNVDGHF\PDOQHMDQLHMHVWWRVSRVyEV]F]HJyOQLHPLá\GODRND6áRZQLNSRZLQLHQ

E\üRGZLH*DQ\SRND*GHM]PLDQLHZVWUXNWXU]HGDQ\FK'ODSURGXNF\MQ\FKED]GDQ\FKPR*HWR

R]QDF]DüMHGQRNURWQJHQHUDFM SOLNXVáRZQLND
%XGRZDVáRZQLNDMHVWUHDOL]RZDQDSU]H]SURFHGXU %8,/'SDNLHWX'%06B/2*015B' SDWU]

SU]\NáDG 

3U]\JRWRZDQLHOLVW\SOLNyZG]LHQQLNDGRSU]HJOGDQLD

'RNG QLH SU]\JRWXMHP\ OLVW\ SOLNyZ G]LHQQLND NWyUH FKFHP\ SU]HJOGDü Z\QLNL VL JDQLD GR

WDEOLF\/RJ0LQHUDE GSXVWH3LHUZV]\HOHPHQWOLVW\MHVWMHGQRF]HQLHSRF]WNLHPQRZHMOLVW\L

MHVW GRGDZDQ\ SURFHGXU $''B/2*),/( ] SDNLHWX '%06B/2*015 ] SDUDPHWUHP 1(:
Kole

MQH SOLNL GRGDMHP\ Z\NRU]\VWXMF W  VDP SURFHGXU  W\P UD]HP ] SDUDPHWUHP $''),/(

SDWU]SU]\NáDG 

2.3.4 Aktywacja

7HUD] MHVWHP\ JRWRZL GR DNW\ZDFML  VHVML /RJ 0LQHUD 2GE\ZD VL  WR ]D SRPRF SURFHGXU\

67$57B/2*015 ] SDNLHWX '%06B/2*015 3R*\WHF]Q\P DOH QLHRERZL]NRZ\P 

SDUDPHWUHP SURFHGXU\ MHVW SHáQD QD]ZD áF]QLH ] NDWDORJLHP  SOLNX VáRZQLNRZHJR = LQQ\FK

SDUDPHWUyZZDUWRZVSRPQLHüRÄVWDUW7LPH´LÄHQG7LPH´,FKZDUWRFLGRP\OQHVSU]\JRWRZDQH

SU]H]XURF]\FK$PHU\NDQyZMDNQDVW SXMH

background image

startTime

IN DATE default TO_DATE('01-jan-1988','DD-MON-YYYY'),

endTime

IN DATE default TO_DATE('01-jan-2988','DD-MON-YYYY'),

=DWHPDOERQDOH*\Z\VSHF\ILNRZDüMHGRNáDGQLHDOERSU]HGZ\ZRáDQLHPSURFHGXU\]PLHQLüM ]\N
sesji na AMERICAN.

Pon

L*HM ]DSUH]HQWRZDQ\ MHVW NRPSOHWQ\ SU]\NáDG SU]\JRWRZXMF\ /RJ 0LQHUD GR SU]HOHG]HQLD

ELH*F\FKG]LHQQLNyZ

3U]\NáDG3U]\JRWRZDQLH/RJ0LQHU¶DGRSU]HJOGDQLDG]LHQQLNyZELH*F\FK

SQL> declare
2
3 logmnr_dir_ varchar2(200);
4 logmnr_file_ varchar2(30);
5 redo_log_ varchar2(200);
6 start_date_ date;
7 stop_date_ date;
8 new_list_ boolean := TRUE;
9
10 begin
11
12 -- Prepare new LogMiner Dictionary file
13 select value
14 into logmnr_dir_
15 from v$parameter
16 where name = 'utl_file_dir';
17
18 logmnr_file_ := 'lm'||to_char(sysdate,'MMDD')||'.dic';
19
20 sys.dbms_logmnr_d.build(logmnr_file_, logmnr_dir_);
21
22 -- Prepare on line redo log list
23 for i in (select group#
24 from v$log )
25 loop
26
27 select member
28 into redo_log_
29 from v$logfile
30 where nvl(status,'OK') != 'INVALID'
31 and group# = i.group#
32 and rownum = 1;
33
34 if new_list_
35 then
36 sys.dbms_logmnr.add_logfile( redo_log_, sys.dbms_logmnr.new);
37 new_list_ := FALSE;
38 else
39 sys.dbms_logmnr.add_logfile( redo_log_, sys.dbms_logmnr.addfile);
40 end if;
41
42 end loop;
43
44 -- Start LogMiner
45
46 sys.dbms_logmnr.start_logmnr(DictFileName =>
47 logmnr_dir_||'\'||logmnr_file_);
48
49 end;
50
51 /
PL/SQL procedure successfully completed.

.RPHQWDU]GRSU]\NáDGX3U]\JRWRZDQLHVáRZQLND]DMPXMHVWRVXQNRZRQDMZL FHMF]DVX]DWHPMH*HOLVWUXNWXUD
GDQ\FKQLH]PLHQLáDVL 

QLHZDUWRJHQHURZDüQRZHJRVáRZQLND]DND*G\PUD]HP'ODFK WQ\FKSURSRQXM 

SU]HNV]WDáFHQLHSRZ\*V]HJRSU]\NáDGXWDNDE\SU]\JRWRZDü/RJ0LQHUDGROHG]HQLDZF]RUDM

szych

G]LHQQLNyZDUFKLZDOQ\FK3RGSRZLHG(QDOH*\VNRU]\VWDü]WDEOLF\9$5&+,9('B/2*

2.3.4 Raportowanie

7DEOLFD SHUVSHNW\ZD NWyUDSRZ\*HM]DSUH]HQWRZDQ\FKNURNDFKMHVWJRWRZDGRX*\FLDZFHOX

UDSRUWRZDQLD ]DZDUWRFL G]LHQQLNyZ QD]\ZD VL  9/2*015B&217(176 3HáQ VSHF\ILNDFM 

PR*QDRGQDOH(üZGRNXPHQWDFMLMD]DFK FDPGRSU]HOHG]HQLDNROHMQHJRSU]\NáDGX

3U]\NáDG5DSRUWRZDQLH]DSRPRF/RJ0LQHU¶D

SQL> select to_char(timestamp,'YYYY.MM.DD HH24:MI:SS') TimeStamp,
2 seg_owner,

background image

3 seg_name,
4 seg_type,
5 table_space,
6 operation,
7 username,
8 session_info,
9 sql_redo,
10 sql_undo
11 from v$logmnr_contents
12 where operation != 'INTERNAL'
13 and seg_owner = 'SCOTT'
14 and seg_name = 'DEPT'
15 order by
timestamp;



TIMESTAMP SEG_OWNER SEG_NAME SEG_TYPE TABLE_SPACE
------------------- -------------------------------- -------------------------------- ---------- ---------------------
OPERATION USERNAME
-------------------------------- ----------
SESSION_INFO
---------------------------------------------------------------------------------------------------------------------

SQL_REDO
----------------------------------------------------------------------------------------------------------------------

SQL_UNDO
----------------------------------------------------------------------------------------------------------------------

2000.07.28 18:26:15 SCOTT DEPT 2 USERS
INSERT SCOTT
LoginUserName = SCOTT, ClientInfo = , OsUserName = JALA, MachineName = IRM\JAREK1
insert into SCOTT.DEPT(DEPTNO,DNAME,LOC) values (10,'ACCOUNTING','NEW YORK');
delete from SCOTT.DEPT where DEPTNO = 10 and DNAME = 'ACCOUNTING' and LOC = 'NEW YORK' and ROWID =
'AAADnoAACAAAAAIAAD';

2000.07.28 18:26:21 SCOTT DEPT 2 USERS
INSERT SCOTT
LoginUserName = SCOTT, ClientInfo = , OsUserName = JALA, MachineName = IRM\JAREK1
insert into SCOTT.DEPT(DEPTNO,DNAME,LOC) values (20,'RESEARCH','DALLAS');
delete from SCOTT.DEPT where DEPTNO = 20 and DNAME = 'RESEARCH' and LOC = 'DALLAS' and ROWID = 'AAADnoAACAAAAAIAAA';

2000.07.28 18:26:27 SCOTT DEPT 2 USERS
INSERT SCOTT
LoginUserName = SCOTT, ClientInfo = , OsUserName = JALA, MachineName = IRM\JAREK1
insert into SCOTT.DEPT(DEPTNO,DNAME,LOC) values (30,'SALES','CHICAGO');
delete from SCOTT.DEPT where DEPTNO = 30 and DNAME = 'SALES' and LOC = 'CHICAGO' and ROWID = 'AAADnoAACAAAAAIAAB';

2000.07.28 18:26:32 SCOTT DEPT 2 USERS
INSERT SCOTT
LoginUserName = SCOTT, ClientInfo = , OsUserName = JALA, MachineName = IRM\JAREK1
insert into SCOTT.DEPT(DEPTNO,DNAME,LOC) values (40,'OPERATIONS','BOSTON');
delete from SCOTT.DEPT where DEPTNO = 40 and DNAME = 'OPERATIONS' and LOC = 'BOSTON' and ROWID = 'AAADnoAACAAAAAIAAC';

2000.07.28 19:23:25 SCOTT DEPT 2 USERS
UPDATE GAMMA
LoginUserName = GAMMA, ClientInfo = , OsUserName = JALA, MachineName = IRM\JAREK1
update SCOTT.DEPT set LOC = 'WARSZAWA' where ROWID = 'AAADnoAACAAAAAIAAD';
update SCOTT.DEPT set LOC = 'NEW YORK' where ROWID = 'AAADnoAACAAAAAIAAD';

2000.07.28 19:24:36 SCOTT DEPT 2 USERS
INSERT SYSTEM
LoginUserName = BETA, ClientInfo = , OsUserName = JALA, MachineName = IRM\JAREK1
insert into SCOTT.DEPT(DEPTNO,DNAME,LOC) values (50,'NEW','ZAKOPANE');
delete from SCOTT.DEPT where DEPTNO = 50 and DNAME = 'NEW' and LOC = 'ZAKOPANE' and ROWID = 'AAADnoAACAAAAAIAAE';

2000.07.28 19:25:03 SCOTT DEPT 2 USERS
DELETE SYSTEM
LoginUserName = SCOTT, ClientInfo = , OsUserName = JALA, MachineName = IRM\JAREK1
delete from SCOTT.DEPT where DEPTNO = 50 and DNAME = 'NEW' and LOC = 'ZAKOPANE' and ROWID = 'AAADnoAACAAAAAIAAE';
insert into SCOTT.DEPT(DEPTNO,DNAME,LOC) values (50,'NEW','ZAKOPANE');

Koment

DU]GRSU]\NáDGX:\QLNLHPVZV]\VWNLHRSHUDFMHQDWDEOLF\'(37]DSDPL WDQHZG]LHQQLNDFK

ELH*F\FK5yZQLH*F]WHU\,16(57¶\Z\NRQDQHSU]HGZáF]HQLHPOHG]HQLD]DSRPRFZ\]ZDODF]\
3R]RVWDáHRSHUDFMHPR*QDSRUyZQDü]Z\QLNLHPZSU]\NáDG]LH&]DVUHDOL]DFMLSROHFHQLDZ\QLyVáQLHFR
SRQDGGZLHPLQXW\SU]\SL FLXG]LHQQLNDFKRUR]PLDU]H0END*G\

background image

2.4. Podsumowanie

2ND]XMHVL *HSRGREQLHMDNSU]\UHMHVWUDFMLSRáF]HWUDG\F\MQHPHWRG\]ELHUDQLDLQIRUPDFMLR

]PLDQDFKGDQ\FKQDGDOVZDUWHX*\FLD1RZLQNDZSRVWDFL/RJ0LQHU¶DVWDQRZLEDUG]RLVWRWQ

SRPRFDOHQLHPR*HE\üWUDNWRZDQDMDNRáDWZHUR]ZL]DQLHSUREOHPXOHG]HQLD]PLDQ

Bibliografia

1. Oracle8i Administrator’s Guide, December 1999, Part No. A76956-01

2. Oracle8i Reference, December 1999, Part No. A76961-01

3. Oracle8i SQL Reference, December 1999, Part No. A76989-01

4. Oracle8i Application Developer’s Guide - Fundamentals, December 1999, Part No. A76939-01

5. Oracle8i Supplied PL/SQL Packages Reference, December 1999, Part No. A76936-01

6. Oracle8i Concepts, December 1999, Part No. A76965-01


Wyszukiwarka

Podobne podstrony:
Billing dla bazy danych Oracle
Bazy danych Oracle, Oracle, Oracle - materiały różne
Projekt bazy danych dla Przycho Nieznany
plytoteka, Zadania dla uczniów, Bazy danych, płytoteka 3 VI 2014
Zadanie Wypadki dodatkowe, Zadania dla uczniów, Bazy danych, zadanie dodatkowe 1
Oracle Database 10g Administracja bazy danych w Linuksie oradab
PHP MySQL SQL CGI bazy danych w internecie, Oracle, Oracle - materiały różne
zadanie szkoła, Zadania dla uczniów, Bazy danych, szkoła 10 II 2014
Informatyka dla Gimnazjum Zeszyt Ćwiczeń Prosty serwis Wiki nie wymagający bazy danych
zadanie tablice, Zadania dla uczniów, Bazy danych, tablice 17 II 2014
zadanie noworodki, Zadania dla uczniów, Bazy danych, noworodki 28X2013
zadanie rekrutacja, Zadania dla uczniów, Bazy danych, rekrutacja 2 XII 2013
9 Bazy danych Przegląd Wprowadzenie do Oracle wykład
mieszkania, Zadania dla uczniów, Bazy danych, mieszkania 8 V 2014
znajomi i zainteresowania, Zadania dla uczniów, Bazy danych, zainteresowania 21X2013

więcej podobnych podstron