Čo
je to oracle? Oracle databáza (tiež označovaná ako Oracle RDBMS alebo jednoducho Oracle) je relačný databázový systém produkovaný a predávaný spoločnosťou Oracle. V roku 1977 založili Lawrence J. Ellison, Robert N. Miner a Edward Oates firmu SDL (Software Development Laboratory). Firma pracovala na vývoji relačnej databázi podľa teórie doktora E.F.Codda. Oracle bol kódový názov projektu, ktorý spoločnosť SDL vytvárala na zákazku pre CIA. Táto organizácia vtedy potrebovala zhromažďovať veľke množstvo dát a rýchlo v nich podľa potreby vyhľadávať. |
|
|
|
Ako
sa dostať k Oraclu a ako ho nainštalovať? Oracle software je voľne dostupný k stiahnutiu z domovskej stránky spoločnosti Oracle . Na domáce a testovacie použitie je voľne k dispozícií. Pre komerčne použitie potrebujete mať zakúpenú patričnú licenciu. Mimochodom, licenčné podmienky sú dosť komplikovaná zaležitosť a je dobré sa poradiť s odborníkom kedže ceny sú vysoké. Oracle je komerčný produkt a jeho dokumentácia je na špičkovej úrovni. Toto je zoznam podporovaných platforiem: |
|
|
|
Inštalačný manuál sa líši v závislosti od platformy a verzie. Kompletnú dokumentáciu nájdete na tejto stránke. |
Dokumentácia |
Verzia |
Dokumentácia |
Popis |
11g1 |
administrator's
guide |
dokumentácia popisuje ako vytvoriť a administrovať Oracle Databázu |
11g1 |
SQL
reference |
dokumentácia obsahuje kompletný popis SQL jazyka použivaneho na správu Oracle Databázi |
11g1 |
2 day DBA | dokumentácia je rýchlym sprievodcom ako vykonávať administrátorske úlohy na dennej báze. Jej cieľom je pomôcť vám pochopiť koncept oracle databázi. Nauči vás ako vykonávať všetky administrátorske úlohy potrebné k udržaniu databázi v chode a tiež aj ako vykonať základnu analýzu problému a monitorovanie výkonnosti |
10g2 | administrator's guide | dokumentácia popisuje ako vytvoriť a administrovať Oracle Databázu |
10g2 |
SQL
reference |
dokumentácia obsahuje kompletný popis SQL jazyka použivaneho na správu Oracle Databázi |
10g2 |
2
day DBA |
dokumentácia je
rýchlym sprievodcom ako vykonávať administrátorske
úlohy na dennej báze. Jej cieľom je pomôcť
vám pochopiť koncept oracle databázi.
Nauči vás ako vykonávať všetky administrátorske
úlohy potrebné k udržaniu databázi
v chode a tiež aj ako vykonať základnu analýzu
problému a monitorovanie výkonnosti |
Jazyk_PLSQL |
PL/SQL - procedurálny
jazyk |
Alert log |
ako
vložím komentár do alert logu? execute sys.dbms_system.ksdwrt(2,to_char(sysdate, 'Dy Mon DD HH24:MI:SS YYYY')||' Hello! ' ); ako zistim cestu k alert logu? show parameter background_dump_dest |
||||||||||||||||||||||||||||||
Archívny
mód |
zapnutie
archívného módu shutdown immediate; startup mount exclusive; alter database archivelog; archive log start; alter database open; vypnutie archívného módu shutdown immediate; startup mount exclusive; alter database noarchivelog; alter database open; ak má archívny mód stopnutý automatický archiving, dá sa manuálne prepísať redolog do archívneho logu alter system archive log all; ako zapnúť automatický archiving? alter system archive log start; alter system set log_archive_start=true scope=spfile; informácie o archívnom móde archive log list; čo robiť ak zmažem archive logy a nejde mi spraviť backup, ktorý ich nevie nájsť RMAN> Change Archivelog All Validate; RMAN> Change Archivelog All Crosscheck; RMAN> crosscheck archivelog all; história archívnych logov alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss'; select RECID,FIRST_TIME from v$log_history; zmeniť archive logs destination alter system set log_archive_dest ='<new_destination>'; ako restornuť archívne logy z pásky od sekvencie X po sekvenciu Y ? RMAN> run { allocate channel t1 type 'sbt_tape'; restore archivelog from logseq <X> until logseq <Y>; } ako restornuť jeden archívny log sekvencie X z pásky ? RMAN> run { allocate channel t1 type 'sbt_tape'; restore archivelog sequence <X>; } ako ručne prepíšem obsah redologu do archivelogu? alter system switch logfile; dôležité 1. Take a backup right after enabling archivelog mode. Without it, one would not be able to recover 2. Implement an archivelog backup to prevent the archive log directory from filling-up 3. When running Oracle Real Application Server (RAC), you need to shut down all nodes before changing the database to ARCHIVELOG mode |
||||||||||||||||||||||||||||||
Audit |
ako zariadiť,
aby sa pravidelne čistila tabuľka SYS.AUD$ od záznamov starších ako
<n> dní ? 1.) vytvor proceduru "purge_audit_trail" create
or replace procedure sys.purge_audit_trail (days in number) as
purge_date date;
begin purge_date := trunc(sysdate-days); dbms_system.ksdwrt(2,'AUDIT: Purging Audit Trail until ' || purge_date || ' started'); delete from aud$ where ntimestamp# < purge_date; commit; dbms_system.ksdwrt(2,'AUDIT: Purging Audit Trail until ' || purge_date || ' has completed'); end; / 2.) vytvor scheduled job "audit_purge", ktorý bude denne spúšťať horevytvorenú procedúru. Uprav počet dni označených červene v zmysle koľko dni staré záznami chceš ponechať. begin
dbms_scheduler.create_job( job_name => 'AUDIT_PURGE' ,job_type => 'PLSQL_BLOCK' ,job_action => 'begin purge_audit_trail(1); end; ' ,start_date => '02-MAR-10 10.00.00.000000 AM' ,repeat_interval => 'FREQ=DAILY' ,enabled => TRUE ,comments => 'Audit Trail Purge'); end; / |
||||||||||||||||||||||||||||||
Indexes |
ako
rebuildnuť indexi alter index <owner>.<indexname> rebuild nologging; ako zistím príkaz ktorým bol index vytvorený? set pages 8000 set lines 300 set long 9999 select dbms_metadata.get_ddl('INDEX','&INDEX_NAME','&OWNER') from dual; |
||||||||||||||||||||||||||||||
Tables |
ako
zmením parameter MAXEXTENTS ? alter table <owner>.<table_name> storage (MAXEXTENTS unlimited); ako vytvorim tabuľku ako kopiu inej tabuľky? create table <table_name> as select * from <table2_name>; ako vytvorím novú tabuľku? create table <table_name> ( <column1> <type>, <column2> <type>); ako zistím kedy boli naposledy zozbierané štatistiky pre danú tabuľku? select table_name,last_analyzed from dba_tables where table_name='<table_name>'; ako zozbieram štatistiky pre všetky tabuľky v databáze? exec DBMS_STATS.GATHER_DATABASE_STATS(estimate_percent => 100, granularity => 'ALL', method_opt => 'FOR ALL COLUMNS SIZE 1',degree => NULL , options => 'GATHER', cascade => TRUE ); ako zozbieram štatistiku pre jednu konkrétnu tabuľku? BEGIN DBMS_STATS.GATHER_TABLE_STATS( ownname => '<owner>', tabname => '<table_name>', method_opt => 'FOR COLUMNS BLNSENTTOTF SIZE SKEWONLY', cascade => TRUE ); END; / ako zozbieram štatistiky pre jednu konkrétnu schému? set lines 200 set pages 8000 spool analyze.sql select 'EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>''<owner>'',TABNAME=>'''||TABLE_NAME||''', estimate_percent => 100, granularity => ''ALL'', method_opt => ''FOR ALL COLUMNS SIZE 1'' , degree => NULL, CASCADE=>TRUE);' from dba_tables where owner='<owner>' order by num_rows; spool off @analyze.sql; ako zmažem tabuľku? drop table <table_name>; ako vymažem obsah tabuľky tak, aby tabuľka ostala? Týmto sa len posunie High Water Mark na začiatok truncate table <table_name>; ako zmením hodnotu v danom stĺpci tabuľky? update <table_name> set <column_name> = '<hodnota>'; ako vložím údaje do tabuľky? insert into <table_name> (<column1>,<column2>) values ('<hodnota1>','<hodnota2>'); ako vymažem jednu hodnotu? delete from <table_name> where <column_name> = '<hodnota>' ako zistim constrainty na tabuľke? set pages 8000 set lines 300 col column_name for a50 select a.table_name,a.constraint_name,b.column_name,a.constraint_type from all_constraints a,all_cons_columns b where a.table_name='<table_name>' and a.owner='<owner>' and a.table_name=b.table_name and a.owner=b.owner and a.constraint_name = b.constraint_name; ako zistím príkaz ktorým bola tabuľka vytvorená? set pages 8000 set lines 300 set long 9999 select dbms_metadata.get_ddl('TABLE','&TABLE_NAME','&OWNER') from dual; |
||||||||||||||||||||||||||||||
Triggers |
logon
trigger, ktory spusti tracovanie CREATE OR REPLACE TRIGGER START_TRACING AFTER LOGON ON DATABASE BEGIN IF sys_context('USERENV', 'SESSION_USER') = '<tu daj meno usera>' THEN EXECUTE IMMEDIATE ('ALTER SESSION SET SQL_TRACE = TRUE'); END IF; END; / logon trigger, ktory nedovoli uživateľom používať program SQLDeveloper CREATE OR REPLACE TRIGGER logoff_plsqldev_users AFTER LOGON ON DATABASE DECLARE v_prog sys.v_$session.program%TYPE; BEGIN SELECT program INTO v_prog FROM sys.v_$session WHERE audsid = USERENV('SESSIONID') AND audsid != 0 -- Don't Check SYS Connections AND ROWNUM = 1; -- Parallel processes will have the same AUDSID's IF UPPER(v_prog) LIKE '%PLSQLDEV%' -- PLSQL Developer THEN RAISE_APPLICATION_ERROR(-20000, 'Development tools are not allowed here.'); END IF; END; / |
||||||||||||||||||||||||||||||
Users |
ako
zmením heslo určitému užívateľovi? alter user <user> identified by <password>; ako zmením heslo určitému užívatľovi ak viem jeho #hash? alter user <user> identified by values '<hash>'; ako locknem a unlocknem usera? alter user &user account lock; alter user &user account unlock; ako zistím príkaz ktorým bol user vytvorený? set pages 8000 set lines 300 set long 99999 select DBMS_METADATA.GET_DDL('USER','&&USER') ddl from dual union all select DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','&&USER') ddl from dual union all select DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','&&USER') ddl from dual union all select DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT','&&USER') ddl from dual; |
||||||||||||||||||||||||||||||
DB
links |
|||||||||||||||||||||||||||||||
Encryption |
ako otvorím
wallet ? alter system set wallet open identified by "<password>"; ako zavriem wallet ? alter system set wallet close; ako vytvorím a otvorím wallet ? alter system set encryption key authenticated by "<password>"; |
||||||||||||||||||||||||||||||
Performance |
AWR report @?/rdbms/admin/awrrpt.sql ADDM report @?/rdbms/admin/addmrpt.sql ako zistím buffer cache hit ratio? Ideálna hodnota je 1.00 select name,physical_reads,db_block_gets,consistent_gets,1 - (physical_reads / (db_block_gets + consistent_gets)) "Hit Ratio" from v$buffer_pool_statistics; ako zistím log buffer ratio? select 'Log buffer ratio' RATIO,round(sum(decode(name,'redo log space requests',abs(value),0))/( sum(decode(name,'redo entries',abs(value),0))) * 5000,2) VALUE,'less than 1.0' IDEAL from v$sysstat; ako zistím ktorá session najviac zaťažuje user I/O? Zoradené podľa physical reads col username for A20 col os_user for A20 select nvl(ses.USERNAME,'ORACLE PROC') username, OSUSER os_user, ses.SID sid, PHYSICAL_READS, BLOCK_GETS, CONSISTENT_GETS, BLOCK_CHANGES, CONSISTENT_CHANGES from v$session ses, v$sess_io sio where ses.SID = sio.SID order by PHYSICAL_READS, ses.USERNAME; ako zistím ktorá session najviac zaťažuje CPU? Hodnota je v centisekundách. Pre údaj v sekundách treba podeliť 100 select nvl(ss.USERNAME,'ORACLE PROC') username, se.SID, VALUE cpu_usage from v$session ss, v$sesstat se, v$statname sn where se.STATISTIC# = sn.STATISTIC# and NAME like '%CPU used by this session%' and se.SID = ss.SID order by VALUE desc; ako zistím user hit ratio ( ideál > 0.9? set pages 8000 set lines 300 select username,consistent_gets,block_gets,physical_reads,((consistent_gets+block_gets-physical_reads) / (consistent_gets+block_gets)) Ratio from v$session,v$sess_io where v$session.SID=v$sess_io.SID and (consistent_gets+block_gets) > 0 and username is not null order by ((consistent_gets+block_gets-physical_reads) / (consistent_gets+block_gets)); |
||||||||||||||||||||||||||||||
Controlfiles |
ako
odzálohujem controlfile do trace filu? alter database backup controlfile to trace as '</path_to_trace_file.sql>'; ako pridať dalši controlfile v ASM? 1.) shutdown database 2.) startup nomount 3.) RMAN> restore controlfile to 'path_to_new_controlfile>' from <path_to_old_controlfile>'; 4.) shutdown database 5.) create pfile='path_to_pfile' from spfile; 6.) edit pfile (add new controlfile) 7.) create spfile from pfile='path_to_pfile' 8.) startup database |
||||||||||||||||||||||||||||||
Redologs |
Ako spravím
switch online redologov ? alter system switch logfile; Ako zistím veľkosť a status online redologov ? set pages 8000 set lines 300 col member for a60 select a.group#,a.member,b.bytes/1024/1024,b.status from v$logfile a,v$log b where a.group#=b.group#; Ako zistím veľkosť a status standby redologov ? set pages 8000 set lines 300 col member for a60 select a.group#,a.member,b.bytes/1024/1024,b.status from v$logfile a,v$standby_log b where a.group#=b.group#; Ako zistím redolog progres ? select le.leseq "Current log sequence No",100*cp.cpodr_bno/le.lesiz "Percent Full", cp.cpodr_bno "Current Block No",le.lesiz "Size of Log in Blocks" from x$kcccp cp, x$kccle le where LE.leseq=CP.cpodr_seq and bitand(le.leflg,24)=8; Ako zmením veľkosť redologov na standby databáze ? 1.) vypni aplikovanie logov alter database recover managed standby database cancel; 2.) zapni manuálny "standby_file_management" alter system set standby_file_management=manual; 3.) find group with status "clearing" select * from v$log; alter database clear logfile group <n>; drop group you have just cleared alter database drop logfile group <n>; 5.) create new group of new size alter database add logfile group <n> ('<path_to_member1>','<path_to_member2>'....) size <size>M reuse; ... ... repeat until you have all redolog groups of the size you want. 6.) zapni automatický "standby_file_management" alter system set standby_file_management=auto; 7.) zapnúť aplikovanie logov alter database recover managed standby database disconnect from session; |
||||||||||||||||||||||||||||||
SGA |
SGA komponenty,
ktorých veľkosť je automaticky ovládana ak použivame ASMM Buffer cache (DB_CACHE_SIZE) Shared pool (SHARED_POOL_SIZE) Large pool (LARGE_POOL_SIZE) Java pool (JAVA_POOL_SIZE) Streams pool (STREAMS_POOL_SIZE) história zmien veľkosti SGA komponentov pri ASMM SET PAGES 30000 SET LINES 130 COL component FOR A24 COL oper FOR A12 COL parameter FOR A21 COL init FOR 99990 hea "INIT(MB)" COL target FOR 99990 hea "TRGT(MB)" COL final FOR 99990 hea "FINAL(MB)" ALTER SESSION SET NLS_DATE_FORMAT='DD-MON HH24:MI'; SELECT component , DECODE( oper_type , 'INITIALIZING', 'INIT.' , oper_type ) || ' ' || DECODE( oper_mode , 'DEFERRED', 'DEFER' , 'IMMEDIATE', 'IMMED' , oper_mode ) oper , parameter , initial_size / 1024 / 1024 init , target_size / 1024 / 1024 target , final_size / 1024 / 1024 final , status , start_time FROM v$sga_resize_ops WHERE initial_size != final_size OR initial_size != target_size ORDER BY start_time; aktuálny stav voľnej pamäte v pooloch select * from V$SGASTAT where name='free memory'; aktuálna a minimálna veľkosť SGA komponentov pri zapnutej ASMM select component,current_size/1024/1024 "CURRENT_SIZE",min_size/1024/1024 "MIN_SIZE", user_specified_size/1024/1024 "USER_SPECIFIED_SIZE",last_oper_type "TYPE" from v$sga_dynamic_components; ako zmenim hodnotu SGA_TARGET (online) ? Nastavenim tohto parametra zároveň zapínam ASMM alter system set sga_target = <size>M scope=both; ako nastavim veľkosti jednotlivých SGA komponentov? Pri zapnutej ASMM týmto nastavim minimálne veľkosti alter system set large_pool_size = <size>M scope=spfile; alter system set java_pool_size = <size>M scope=spfile; alter system reset large_pool_size scope=spfile; alter system set shared_pool_size = <size>M scope=spfile; alter system set db_cache_size=0; ako určim optimálnu veľkosť SGA_TARGET parametra? select sga_size, sga_size_factor, estd_db_time, estd_db_time_factor, estd_physical_reads from v$sga_target_advice order by sga_size_factor; ako zistím optimálnu veľkosť buffer cache? select size_for_estimate,buffers_for_estimate,estd_physical_read_factor,estd_physical_reads from v$db_cache_advice where name = 'DEFAULT' and advice_status = 'ON' and block_size = (select value from v$parameter where name = 'db_block_size'); ako zistím optimálnu veľkosť shared poolu? select shared_pool_size_for_estimate est_size, shared_pool_size_factor factor, estd_lc_size, estd_lc_time_saved, estd_lc_memory_object_hits hits from v$shared_pool_advice / ako zistím library cache štatistiky? column namespace heading "Library Object" column gets format 9,999,999,999 heading "Gets" column gethitratio format 999.99 heading "Get Hit%" column pins format 9,999,999,999 heading "Pins" column pinhitratio format 999.99 heading "Pin Hit%" column reloads format 9,999,999 heading "Reloads" column invalidations format 9,999,999 heading "Invalid" column db format a10 set pages 58 lines 100 ttitle "Library Caches Report" select namespace,gets,gethitratio*100 gethitratio,pins,pinhitratio*100 pinhitratio,reloads,invalidations from v$librarycache; |
||||||||||||||||||||||||||||||
PGA |
ako
určím optimálnu veľkosť PGA? set pages 8000 set lines 300 select round(pga_target_for_estimate/1024/1024) target_mb,estd_pga_cache_hit_percentage cache_hit_perc, estd_overalloc_count from v$pga_target_advice; |
||||||||||||||||||||||||||||||
Temporary
tablespaces |
ako
zväčšim temporárny tablespace TEMP? create temporary tablespace "NEWTEMP" tempfile '<path_to_temp_file>' size <size>M; alter database default temporary tablespace "NEWTEMP"; drop tablespace temp including contents and datafiles; create temporary tablespace "TEMP" tempfile '<path_to_temp_file>' size <size>M; alter database default temporary tablespace "TEMP"; drop tablespace newtemp including contents and datafiles; ako pridám nový tempfile do existujúceho temporárneho tablespacu? alter tablespace <tablespace_name> add tempfile 'path_to_temp_file' size <size>M; ako zmením veľkosť temfilu? alter database tempfile '/path_to_temp_file' resize <size>M; ako nastavím autoextend pre tempfile? alter database tempfile '/path_to_temp_file' autoextend on maxsize <size>M; informácie o temporárnom(nych) tablespace(och) col size_temp_files format 999999 Heading "Size|Temp|Files" col free_space_in_temp_files format 999999 Heading "Free|Space|In|Temp|Files" col free_space_in_sort_segment format 999999 Heading "Free|Space|In|Sort|Segment" col used_space_in_sort_segment format 999999 Heading "Used|Space|In|Sort|Segment" col total_free format 999999 Heading "Total|Free" select tsh.tablespace_name , dtf.omvang size_temp_files , tsh.free_space_space_header free_space_in_temp_files , nvl(ss.free_space_sort_segment,tsh.used_space_space_header) free_space_in_sort_segment , nvl(ss.used_space_sort_segment,0) used_space_in_sort_segment, tsh.free_space_space_header+nvl(ss.free_space_sort_segment,tsh.used_space_space_header) TOTAL_FREE from ( select tablespace_name, sum(bytes)/1024/1024 omvang from dba_temp_files group by tablespace_name ) dtf ,( select tablespace_name,sum(BYTES_USED)/1024/1024 USED_SPACE_SPACE_HEADER ,sum(BYTES_FREE)/1024/1024 FREE_SPACE_SPACE_HEADER from v$temp_space_header group by tablespace_name ) tsh, ( select tablespace_name ,sum(USED_BLOCKS)/1024/1024 USED_SPACE_SORT_SEGMENT ,sum(FREE_BLOCKS)*par.value/1024/1024 FREE_SPACE_SORT_SEGMENT from v$sort_segment ss , v$parameter par where par.name = 'db_block_size' group by tablespace_name, value ) ss where dtf.tablespace_name = tsh.tablespace_name and ss.tablespace_name (+) = dtf.tablespace_name / |
||||||||||||||||||||||||||||||
Tablespaces |
informácie
o veľkosti a voľnom mieste v tablespacoch select a.TABLESPACE_NAME,a.BYTES/1024/1024 MB_used,b.BYTES/1024/1024 MB_free,b.largest, round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) percent_used from ( select TABLESPACE_NAME, sum(BYTES) BYTES from dba_data_files group by TABLESPACE_NAME ) a, ( select TABLESPACE_NAME, sum(BYTES) BYTES,max(BYTES) largest from dba_free_space group by TABLESPACE_NAME ) b where a.TABLESPACE_NAME=b.TABLESPACE_NAME order by percent_used; informácie o datafiloch v danom tablespace col file_name form a70 col "MB" form 999,999,999 col "Max MB" form 999,999,999 col "Free" form 999,999,999 set lines 300 select a.file_name, a.bytes/1024/1024 "MB", sum(b.bytes/1024/1024) "Free", a.maxbytes/1024/1024 "Max MB", a.autoextensible from dba_data_files a, dba_free_space b where a.tablespace_name = '&TBS_NAME' and a.file_id = b.file_id (+) group by a.file_name, a.bytes, a.maxbytes, a.autoextensible; ako premenujem tablespace? alter tablespace <tablespace_name> rename to <new_tablespace_name>; ako dám tablespace do offline módu? alter tablespace <tablespace_name> offline; ako pridám nový datafile do tablespace? alter tablespace <tablespace_name> add datafile ‘path_to_datafile’ size <size>M; ako zistím, či sa dá tablespace shrinknúť ? set pages 8000 set lines 300 col FILE_NAME for a60 select file_name,(hwm*&&blocksize)/1024/1024,(blocks*&&blocksize)/1024/1024 total_size,((blocks-hwm+1)*&&blocksize)/1024/1024 shrinkage_possible from dba_data_files a,(select file_id, max(block_id+blocks) hwm from dba_extents group by file_id ) b where a.file_id = b.file_id; ako zistím príkaz ktorým bol tablespace vytvorený? set pages 8000 set lines 300 set long 9999 select dbms_metadata.get_ddl('TABLESPACE','&TABLESPACE') from dual; |
||||||||||||||||||||||||||||||
Undo
tablespaces |
ako
zistím status undo extentov? select status, sum(blocks) blocks, round((sum(blocks) / ((select sum(blocks) from dba_undo_extents)/100)),2) "%" from dba_undo_extents group by status; select tablespace_name,status,count(status) from dba_undo_extents group by status,tablespace_name; ako zistím optimálnu hodnotu UNDO_RETENTION alebo veľkosť undo tablespacu? select d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]",SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]",ROUND((d.undo_size/(to_number(f.value) * g.undo_block_per_sec))) "OPTIMAL UNDO RETENTION [Sec]" from (select SUM(a.bytes) undo_size from v$datafile a,v$tablespace b,dba_tablespaces c where c.contents='UNDO' and c.status='ONLINE' and b.name=c.tablespace_name and a.ts# = b.ts#) d,v$parameter e,v$parameter f, (select MAX(undoblks/((end_time-begin_time)*3600*24)) undo_block_per_sec from v$undostat) g where e.name = 'undo_retention' and f.name = 'db_block_size'; select d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]",SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]",(TO_NUMBER(e.value) * TO_NUMBER(f.value) * g.undo_block_per_sec)/(1024*1024) "NEEDED UNDO SIZE [MByte]" from (select SUM(a.bytes) undo_size from v$datafile a,v$tablespace b,dba_tablespaces c where c.contents='UNDO' and c.status='ONLINE' and b.name=c.tablespace_name and a.ts#=b.ts#) d,v$parameter e,v$parameter f, (select MAX(undoblks/((end_time-begin_time)*3600*24)) undo_block_per_sec from v$undostat) g where e.name = 'undo_retention' and f.name = 'db_block_size'; |
||||||||||||||||||||||||||||||
Datafiles |
informácie
o všetkých datafiloch v tablespacoch col file_name form a70 col "MB" form 999,999,999 col "Max MB" form 999,999,999 col "Free" form 999,999,999 set lines 300 select a.file_name, a.bytes/1024/1024 "MB", sum(b.bytes/1024/1024) "Free", a.maxbytes/1024/1024 "Max MB", a.autoextensible from dba_data_files a, dba_free_space b where a.tablespace_name in (select tablespace_name from dba_tablespaces) and a.file_id = b.file_id (+) group by a.file_name, a.bytes, a.maxbytes, a.autoextensible order by a.file_name; ako zmením veľkosť datafilu? alter database datafile '/path_to_datafile' resize <size>M; ako nastavim autoextend pre datafile? alter database datafile 'path_to_datafile' autoextend on maxsize <size>M; ako recovernem určitý datafile? startup mount; alter datafile '<path_to_datafile>' offline; alter database open; alter tablespace users offline; recover datafile '<path_to_datafile>'; alter tablespace <tablespace_name> online; |
||||||||||||||||||||||||||||||
Invalidné
objekty |
ako si pozriem
invalidné objekty? select owner,object_type,object_name,status from dba_objects where status = 'INVALID' order by owner, object_type, object_name; ako skompilujem invalidne objekty? alter package <owner>.<package_name> compile; alter package <owner>.<package_name> compile body; alter procedure <owner>.<procedure_name> compile; alter function <owner>.<function_name> compile; alter trigger <owner>.<trigger_name> compile; alter view <owner>.<view_name> compile; ako skompilujem všetky invalidné objekty v jednej schéme? exec dbms_utility.compile_schema(schema => '*&&schema'); ako skompilujem všetky invalidné objekty v celej databáze? @?/rdbms/admin/utlprp.sql |
||||||||||||||||||||||||||||||
Inštalácia |
ako si pozriem
nainštalované komponenty? set pages 99 set line 150 col comp_name for a40 select comp_name,version,status from dba_registry; ako zistím či mám 32bit alebo 64bit verziu oraclu? select Length(addr)*4 || '-bits' word_length from v$process where rownum =1; ako zistím na akej platfome mi beží oracle? select platform_name from v$database; ako zistím aktuálny čas v databáze? select to_char(sysdate, 'Dy DD-Mon-YYYY HH24:MI:SS') as "Current Time" from dual; ako nainštalujem Oracle Software z príkazového riadku? Predtým však treba nakonfigurovať súbor custom.rsp runInstaller -silent -responseFile response/custom.rsp ako upgradnem Oracle Software z príkazového riadku? Predtým však treba nakonfigurovať súbor patchset.rsp runInstaller -silent -responseFile response/patchset.rsp ako upgradnuť databázu z príkazového riadku? $ORACLE_HOME/bin/dbua -silent -dbname <SID> -oracleHome <path_to_ORACLE_HOME> -sysDBAUserName sys -sysDBAPassword <sys_password> -recompile_invalid_objects true ako vytvorím novú databázu z príkazového riadku? create database <database_name> user SYS identified by <password> user system identified by <password> logfile group 1 ('<path_to_redologs>/redo01.log') size 100M,group2 ('<path_to_redologs>/redo02.log') size 100M,group 3 ('<path_to_redologs>/redo03.log') size 100M MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXLOGHISTORY 1 MAXDATAFILES 100 MAXINSTANCES 1 CHARACTER SET US7ASCII NATIONAL CHARACTER SET AL16UTF16 datafile '<path_to_datafiles>/system01.dbf' size 325M extent management local default temporary tablespace temp tempfile '<path_to_tempfile>/temp01.dbf' size 20M sysaux datafile '<path_to_sysaux>/sysaux.dbf' size 20M undo tablespace undotbs1 datafile '<path_to_undofile>/undotbs01.dbf' size 200M; @?/rdbms/admin/catalog.sql @?/rdbms/admin/catproc.sql ako zistím veľkosť celej databázy (všetkých datafilov) ? select sum(bytes)/1024/1024 "MB" from dba_data_files; |
||||||||||||||||||||||||||||||
Objects |
ako
zistím aké a koľko objektov jednotlivý
užívatelia vlastnia? set pages 8000 set lines 300 select username,count(decode(o.TYPE#, 2,o.OBJ#,'')) Tabs,count(decode(o.TYPE#, 1,o.OBJ#,'')) Inds, count(decode(o.TYPE#, 5,o.OBJ#,'')) Syns,count(decode(o.TYPE#, 4,o.OBJ#,'')) Views, count(decode(o.TYPE#, 6,o.OBJ#,'')) Seqs,count(decode(o.TYPE#, 7,o.OBJ#,'')) Procs, count(decode(o.TYPE#, 8,o.OBJ#,'')) Funcs,count(decode(o.TYPE#, 9,o.OBJ#,'')) Pkgs, count(decode(o.TYPE#,12,o.OBJ#,'')) Trigs,count(decode(o.TYPE#,10,o.OBJ#,'')) Deps from obj$ o, dba_users u where u.USER_ID = o.OWNER# (+) group by USERNAME order by USERNAME; |
||||||||||||||||||||||||||||||
Locks |
ako
zistím objekty locknuté viac ako 2 minúty? select SUBSTR(TO_CHAR(w.session_id),1,5) WSID, p1.spid WPID,SUBSTR(s1.username,1,12) "WAITING User", SUBSTR(s1.osuser,1,8) "OS User",SUBSTR(s1.program,1,20) "WAITING Program", s1.client_info "WAITING Client", SUBSTR(TO_CHAR(h.session_id),1,5) HSID, p2.spid HPID, SUBSTR(s2.username,1,12) "HOLDING User", SUBSTR(s2.osuser,1,8) "OS User",SUBSTR(s2.program,1,20) "HOLDING Program",s2.client_info "HOLDING Client", o.object_name "HOLDING Object" FROM gv$process p1, gv$process p2, gv$session s1,gv$session s2, dba_locks w, dba_locks h, dba_objects o where w.last_convert > 120 and h.mode_held != 'None' and h.mode_held != 'Null' and w.mode_requested != 'None' and s1.row_wait_obj# = o.object_id and w.lock_type(+) = h.lock_type and w.lock_id1(+) = h.lock_id1 and w.lock_id2 (+) = h.lock_id2 and w.session_id = s1.sid (+) and h.session_id = s2.sid (+) and s1.paddr = p1.addr (+) and s2.paddr = p2.addr (+) order by w.last_convert desc; ako zobrazím všetky locky na objektoch? set pages 8000 set lines 300 col os_user for a15 col oracle_user for a12 col lock_type for a10 col lock_held for a15 col lock_requested for a15 col status for a15 col owner for a12 col object_name for a15 select OS_USER_NAME os_user,ORACLE_USERNAME oracle_user,l.SID SID,decode(TYPE, 'MR', 'Media Recovery','RT', 'Redo Thread','UN', 'User Name','TX', 'Transaction', 'TM', 'DML','UL', 'PL/SQL User Lock','DX', 'Distributed Xaction','CF', 'Control File', 'IS', 'Instance State','FS', 'File Set','IR', 'Instance Recovery','ST', 'Disk Space Transaction', 'TS', 'Temp Segment','IV', 'Library Cache Invalidation','LS', 'Log Start or Switch', 'RW', 'Row Wait','SQ', 'Sequence Number','TE', 'Extend Table','TT', 'Temp Table', type) lock_type, decode(LMODE,0, 'None',1, 'Null',2, 'Row-S (SS)',3, 'Row-X (SX)',4, 'Share',5, 'S/Row-X (SSX)', 6, 'Exclusive', lmode) lock_held,decode(REQUEST,0, 'None',1, 'Null',2, 'Row-S (SS)',3, 'Row-X (SX)', 4, 'Share',5, 'S/Row-X (SSX)',6, 'Exclusive', request) lock_requested,decode(BLOCK,0, 'Not Blocking', 1, 'Blocking',2, 'Global', block) status,owner,object_name from v$locked_object lo,dba_objects do, v$lock l where lo.OBJECT_ID = do.OBJECT_ID and l.SID = lo.SESSION_ID order by status; |
||||||||||||||||||||||||||||||
ASM |
ako
zistím voľné miesto v jednotlivých
diskgrupách? select name, total_mb, free_mb, usable_file_mb from v$asm_diskgroup; ako zväčším disgrupu potom ako som zväčšil disk alebo disky (online) ? alter diskgroup <diskgroup_name> resize all; kedže obsah ASM je z pohľadu operačného systému neviditeľný, akým nastrojom s nim môžem pracovať? na windowse: set ORACLE_HOME=<path_to ASM_home> set ORACLE_SID=+ASM asmcmd na unixe: export ORACLE_HOME=<path_to ASM_home> export ORACLE_SID=+ASM asmcmd |
||||||||||||||||||||||||||||||
Export/import |
|||||||||||||||||||||||||||||||
Sessions |
ako zistim
otvorené sessiony okrem systémových a
backroundových? set pages 8000 set lines 300 col username for a15 col program for a25 col osuser for a20 col machine for a25 select sid,serial#,username,osuser,program,machine,logon_time from v$session where username is not NULL and username not like 'SYS%'; ako zmením parametre mojej sessiony?
ako zruším určitú session? alter system kill session '<sid>,<serial#>' immediate; ako zistím, či daná session je v stave waiting a ako dlho čaká? select sid,event,wait_time,seconds_in_wait,state from v$session_wait where sid='&SID'; ako zmením aby mi okrem dátumu zobrazovalo aj čas? alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss'; ako si nastavím schému tak, aby som nemusel používať prefix pred object ? alter session set current_schema=<schema>; |
||||||||||||||||||||||||||||||
RMAN |
ako
sa prihlásim do rmana? set ORACLE_SID=<SID> ### on windows export ORACLE_SID=<SID> ### on unix rman target / ako sa prihlasim do rmana s použitím katalógu? rman target / catalog <rman_user>/<password>@<RCAT_database> ako restornem archive logy z pasky do urcitej destinacie od urcitej sekvencie po urcitu sekvenciu? run { set archivelog destination to '<archive_destination>'; allocate auxiliary channel t1 device type 'SBT_TAPE'; allocate auxiliary channel t2 device type 'SBT_TAPE'; restore archivelog from logseq <low_seq_number> until logseq <high_seq_number>; release channel t1; release channel t2; } ako recovernem databázu po určitú archívnu sekvenciu manuálne? ( bude sa to pýtať na potvrdenie každého ďalšieho archive logu kam sa ma recovernuť ) recover database until cancel using backup controlfile; ako spravim online backup na pásku? run { allocate channel 'dev_0' type 'sbt_tape'; backup incremental level <incr_level> format 'XXYYZZ_%s%t%p>.dbf' database; sql 'alter system archive log current'; backup format 'XXYYZZ_%s%t%p>.arc' archivelog all delete input; backup format 'XXYYZZ_%s%t%p>.ctl' current controlfile; backup spfile format 'XXYYZZ_%s%t%p>.spf'; } ako recovernem databázu do určitého času? run { set until time "to_date('2010-02-15:18:00:01','yyyy-mm-dd:hh24:mi:ss')"; recover database; } ako si zobrazim zoznam backupov? RMAN> list backup; ### zobrazi všetky backupy RMAN> list backup of database; ### zobrazi backupy datafilov RMAN> list backup of controlfile; ### zobrazi backupy controlfilov RMAN> list backup of spfile; ### zobrazi backupy spfilov RMAN> list backup of archivelog all; ### zobrazi backupy archive logov |
||||||||||||||||||||||||||||||
Init parametre |
|
||||||||||||||||||||||||||||||
DBconsole |
|||||||||||||||||||||||||||||||
Upgrade &
patches |
|