Home Oracle Projekty Šport Private Download Howto Linky Kontakt  
Oracle

logo
Mnohé spoločnosti uprednostňujú databázu Oracle pre jej výkon, škálovateľnosť a bezpečnosť. Keďže je Oracle určený pre všetky typy podnikov, ponúka aj malým a stredným podnikateľom rýchlu a jednoduchú inštaláciu a rozsiahle nástroje na jej manažment. Veľkým spoločnostiam ponúka rozšírené možnosti, ako napríklad clustering. Jedine Oracle je nasaditeľný na všetkých významných platformách ako sú UNIX, Windows a Linux.

Č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ť.
Oracle verzie :
1978:  Oracle 1.0
1980:  Oracle 2.0
1983:  Oracle 3.0
1984:  Oracle 4.0
1985:  Oracle 5.0
1988:  Oracle 6.0 (6.2)
1993:  Oracle 7.0
1997:  Oracle 8.0
2000:  Oracle 9i
2003:  Oracle 10g
2007:  Oracle 11g
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:
Linux x86
Linux x86-64
Microsoft Windows (32-Bit)
Microsoft Windows (64-Bit) on Intel Itanium
Microsoft Windows (x64)

AIX 5L Based Systems (64-Bit)
Apple Mac OS X (Intel)
hp OpenVMS
hp Tru64 UNIX
HP-UX Itanium
HP-UX PA-RISC

IBM z/OS (OS/390)
IBM zSeries Based Linux
Linux Itanium
Linux on POWER
Solaris Operating System
Solaris Operating System (x86)
Solaris Operating System (x86-64)
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
Administrator mini-howto Oracle 10g
Alert log
Archívny mód
ASM
Audit
Controlfiles
Datafiles
DB links
DBconsole
Encryption
Export/import
Indexes
Init parametre
Inštalácia
Invalidné objekty
Locks
Objects
Performance
PGA
Redologs
RMAN
Sessions
SGA
Tables
Tablespaces
Temporary tablespace
Triggers
Undo tablespaces
Upgrades & patches
Users
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;
archive_log_list.GIF

č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;
constraints.gif

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;
hit_ratio.gif

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;
log_buffer.gif

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;
user_I_O.gif

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;
usage_CPU.gif

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));
user_hit_ratio.gif
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;
redolog_progress.GIF

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;
sga_components.GIF

aktuálny stav voľnej pamäte v pooloch
select * from V$SGASTAT where name='free memory';
pools.GIF

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;
sga_components2.GIF

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;
sga_target_advisor.GIF

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');
buffer_cache_advisor.gif

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
/
shared_pool_advisor.gif

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;
library_cache.gif
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;
pga.gif
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
/

temp_tablespace.GIF

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;
tablespace.GIF

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;
tablespace2.GIF

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;
shrink.gif

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;
undo_extents1.gif

select tablespace_name,status,count(status) from dba_undo_extents group by status,tablespace_name;
undo_extents2.gif

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';
undo_retention1.gif

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';
undo_retention2.gif
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;
datafile.GIF

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;
instalacia.gif

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;
objekty.gif
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;
locks.gif

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
asmcmd.gif
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%';
sessions.gif

ako zmením parametre mojej sessiony?
SET FEEDBACK OFF vypne výstupné informácie ako napr. "table created" alebo "PL/SQL procedure successfully completed"
SET ESCAPE & 
odignoruje znak "&"
SET ECHO OFF
oracle príkazy nebudú zobrazované ak spúšťam script
SET TIMING ON
na konci každého príkazu zobrazi dĺžku jeho trvania
SET PAGESIZE 8000
nastaví veľkosť stránky na 8000 riadkov
SET NULL <some_string>
nastaví ako sa bude zobrazovať prázdna hodnota NULL
SET LONG 9999
nastaví dľžku znakov zobrazovaných pre clob, long, nclob a XMLType hodnoty.
SET LINESIZE 300
nastaví dľžku riadku na 300 znakov
SET HEADING OFF
vypne zobrazovanie názvov stľpcov vo výstupe
SET DEFINE <znak>
nastavi znak ako prefix pre premennu. Default=&
SET AUTOTRACE ON
zobrazí execution plan a štatistiky
SET AUTOTRACE ON EXPLAIN
zobrazí execution plan
SET AUTOTRACE ON STATISTICS
zobrazí štatistiky
SET AUTOTRACE ON TRACEONLY
zobrazí execution plan a štatistiky,ale nezobrazí výstup príkazu
SET TIME ON
vloži do promptu aktuálny čas

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
OPEN CURSORS
ako si zobrazím počet otvorených kurzorov pre jednotlivých userov?
select a.value, s.username, s.sid, s.serial# from v$sesstat a, v$statname b, v$session s where a.statistic#=b.statistic# and s.sid=a.sid and b.name = 'opened cursors current' order by a.value desc;
open_cursors.gif
ako zistím momentálne najväčšiu a maximálnu hodnotu pre open cursory?
set pages 8000
set lines 300
set numwidth 10
col max_open_cur for a20
select max(a.value) as highest_open_cur, p.value as max_open_cur from v$sesstat a, v$statname b, v$parameter p where a.statistic#=b.statistic# and b.name='opened cursors current' and p.name= 'open_cursors' group by p.value;
NLS PARAMETERS
ako si pozriem NLS parametre?
set pages 8000
set lines 300
select * from nls_database_parameters;
NLS.gif






DBconsole

Upgrade & patches
Oracle  database upgrade path Reference List [ID 730365.1] This article provides an upgrade reference list for most available Oracle Database versions, including download information, patch numbers, and links to Metalink articles with detailed information