|
Oracle
|
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. |
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?
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;
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;
|
|
|
|
|
|
|
|
DBconsole
|
|
Upgrade &
patches
|
|
|