31. 10. 2016

Oracle - RMAN backup hlási čakanie na enqueue

Ak RMAN skript pri zalohovani zakaždým hlási:

waiting for snapshot control file enqueue
waiting for snapshot control file enqueue
waiting for snapshot control file enqueue

Treba killnúť v databáze proces pod SYSom s modulom RMAN, všetko sa rozbehne (bude pár dní starý).

select 'alter system kill session '''||a.sid||','||a.serial#||''';'||'       '|| a.module  KILL_CMD
from v$session a, v$process p
where p.addr=a.paddr and a.status <> 'KILLED' and type <>'BACKGROUND' and a.module like 'rman%'
order by module;


Ak pokillujete všetko krížom krážom a stále to hlási v novom backupe, dá sa pozrieť selectom ktorý proces robí tento lock:

SELECT s.SID, USERNAME AS "User", PROGRAM, MODULE, ACTION, LOGON_TIME "Logon", l.*
 FROM V$SESSION s, V$ENQUEUE_LOCK l
WHERE l.SID = s.SID AND l.TYPE = 'CF'  AND l.ID1 = 0 AND l.ID2 = 2;

U mňa bol v stave killed, takže riešenie je reštartnúť databázu, dovtedy to bude hlásiť.

Oracle - vyhľadanie súborov DB

Ak sme na neznámom (unix?) serveri, kde potrebujeme dohľadať v Oracle či už umiestnenie súborov, alebo logov, hodia sa takéto selecty z databázy.

Štandardné (oracle štýl) nahranie enviromentu danej databázy (cesty do oracle home, klient, TNS atď) skriptom oraenv, následne vyhľadanie cesty k logom (aj alert) na serveri:
oracle@serv:~$ . oraenv
ORACLE_SID = [] ? DB1
The Oracle base remains unchanged with value /u01/app/oracle

oracle@serv:~$ sqlplus / as sysdba

-- najdi trace
SQL> select value from v$diag_info where name = 'Diag Trace';

VALUE
----------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/db1/DB1/trace

-- aj ine cesty SELECT * FROM V$DIAG_INFO;

19. 10. 2016

Zmena windows témy jedným dvojklikom

Často vo firemnom prostredí dochádza k preplácaniu pozadia plochy firemnou reklamou. Je to otravné a zriaďuje to akúsi jednotvárnosť do prostredia v ktorom sa podvedome chceme cítiť príjemne.
Vytvoril a uložil som si vlastnú tému "brano", teda aj vlastný obrázok na pozadí. Do vlastného súboru (c:\brano\tema.cmd) som si vložil nasledujúci kód:

rundll32.exe %SystemRoot%\system32\shell32.dll,Control_RunDLL %SystemRoot%\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:"C:\Users\Brano2\AppData\Local\Microsoft\Windows\Themes\brano.theme"

Na tento súbor som si spravil odkaz na ploche. Malá nevýhoda je, že po spustení zmeny ostane vyskočené okno s voľbou tém.

13. 10. 2016

Oracle - pridanie miesta v tablespace

Jedna z klasických úloh DB admina je pridávanie miesta pre databázové objekty. V oracle sa jedná o zväčšenie tablespace, ten sa môže skladať z viacerých súborov. Tieto možno pridávať alebo meniť im veľkosť aj za behu databázy.

Prikladám príkazy na monitoring a zväčšovanie priestoru v tablespacoch.

Oracle - vyhľadanie chyby v kóde procedúry

Čo spraviť ak sa v databáze nachádza invalidný objekt a máme k dispozícií iba klienta sqlplus? Nasledujú kroky kompilácie a v prípade neúspechu debug.

SQL> select * from dba_objects where status='INVALID';

Ak select vráti objekty, je možné najskôr skúsiť kompiláciu.

8. 10. 2016

Oracle - presunutie datafile

Občas je potrebné presunúť dátový súbor oracle databázy na iný filesystém. Zvyčajne kôli kapacitným dôvodom. Ďalšia možnosť je v prípade omylu pri zakladaní, či konsolidácie formátu názvov potrebné premenovanie.

1.metóda (DB offline) - alter database
sqlplus / as sysdba
shutdown immediate
startup mount
alter database rename file '/d1/ora/DB1/data01.dbf' to '/d2/ora/DB1/data01.dbf';
alter database open

2.metóda (DB online) - alter tablespace
sql> alter tablespace DATA offline;
> mv /d1/oracle/DB1/data01.dbf /d2/oracle/DB1/data01.dbf
sql> alter tablespace DATA rename datafile '/d1/ora/DB1/data01.dbf' to '/d2/ora/DB1/data01.dbf';
sql> alter tablespace DATA online;

3.metóda Oracle Enterprise Manager (podobná ako 2., sql kroky sú klikateľné)

Oracle - procesy na pozadí

Zoznam rôznych typov procesov bežiacich pre každú inštanciu databázy oracle (isté zmeny sú od v12 u pluggable databáz) je medzi úvodnou teóriou v školeniach a knihách. Prečo si to nespísať.

7. 10. 2016

Oracle - pomalé triedenie, with

Stalo sa mi pri vyberaní riadkov z oracle databázy, že z komplikovaného view sa mi vrátil nezotriedený výstup okamžite, ale dátumovo triedenému trval výpis 5-6 sekúnd.
Možno by pomohlo použiť hinty, či upraviť definíciu view napr do iného poradia.

Nakoniec som však použil klauzulu "with" (oracle 9.2 a vyššie), ktorá vytvorí inline view, alebo dočasnú tabuľku podľa viacnásobnosti použitia.

with aa as (
select meno, datum, chyba
from tabulka_chyb)
select * from aa
order by datum desc, meno, chyba

Vznikne view "aa" ktoré obsahuje rýchlo vybrané nezotriedené dáta, z tohto sa následne selectom dáta vyberú a zotriedia. Po ukončení query sa view zahodí.
V prípade prepadu výkonu sa dá Oracle "donútiť" vytvoriť dočasnú tabuľku cez hint "materialize". Prvý select doplníme "select /*+ materialize */ meno,..."

Ako alternatíva sú globálne dočasné tabuľky (GTT).

3. 10. 2016

Oracle - locky a zaseknutá kompilácia

Ak sa v oracle databáze daný objekt používa (mení), kôli konzistencií dát sa používajú rôzne typy uzamknutia pred povolením ďalších zmien iným používateľom.

Napríklad ak aplikácia používa tabuľku na úpravu záznamu práve keď sa snaží záznam upraviť vývojár ručne, jeho úprava čaká na uzatvorenie transakcie aplikáciou.