17 września 2010

Kariera dla informatyka – od Programisty do Czekoladnika

Każdy z nas zastanawia się czasem nad kierunkiem w którym zmierza – odwieczne pytanie – kim chcę być w przyszłości?

Ja swoją karierę zawodową zaczynałem, razem z dwoma kolegami z uniwersyteckiej ławy, jako Konsultant IT ds. PeopleSoft CRM (IBM który nas zatrudnił wysłał nas właśnie w takim charakterze do TP S.A.). Teraz jestem Architektem SOA w AGORZE i zastanawiam się co dalej. Jeden ze wspomnianych kolegów – Tomasz Sienkiewicz – wybrał błyskotliwą karierę Czekoladnika (!).




Jeszcze kilkanaście miesięcy temu Tomek był dobrze zapowiadającym się Architektem IT. Teraz, do spółki z kolegą (także informatykiem), prowadzi Manufakturę Czekolady – maleńki zakład produkcyjny, gdzie zgodnie z tradycyjną recepturą wytwarzają najprawdziwszą i najpyszniejszą czekoladę jaką tylko ludzkość nauczyła się wytwarzać. Bez wypełniaczy w stylu masło kakaowe czy lecytyna i bez sztucznych dodatków. Wszystko robi się na miejscu, począwszy od prażenia i miażdżenia ziarna kakaowca, aż do ręcznego zawijania w złote papierki.



Manufaktura Czekolady ma w swojej ofercie 6 smaków. Najbardziej wyjątkowy z nich to Czekolada Deserowa z Kwiatem Soli Morskiej. Jak smakuje? Trzeba spróbować samemu! Ja mogę pokazać jedynie jak wygląda.





15 września 2010

Zadania cykliczne w bazie Oracle - pakiet DBMS_JOB

Ilekroć pada stwierdzenie, że jakiś proces powinien być uruchamiany cyklicznie, pada też stwierdzenie, że należy napisać skrypt uruchamiany przez Unixowego demona CRON. Pewnie nie jest to podejście złe, ale jeśli jedyne co trzeba robić, to wykonywać operacje na bazie danych Oracle, to można to zrobić prościej, w ramach samego Oracla, przy użyciu pakietu DBMS_JOB.

Aby zdefiniować i uruchomić cyklicznie zadanie operujące na danych w bazie danych Oracle wystarczy napisać procedurę składowaną PL/SQL i uruchomić funkcję SUBMIT(…) z pakietu DBMS_JOB, przekazując jako argumenty wywołania nazwę procedury PL/SQL, czas pierwszego uruchomienia oraz wyrażenie określające interwał.

Przykładowo, jeśli chcemy aby procedura składowana o nazwie DO_CLEAN uruchamiana była co dzień o godzinie 1:00 w nocy, to wystarczy wykonać blok:
VARIABLE v_jobno NUMBER;
BEGIN
dbms_job.submit(:v_jobno,'DO_CLEAN;',trunc(sysdate)+1+1/24,'trunc(sysdate)+1+1/24');
END;
Definicje zadań uruchomionych w powyższy sposób są umieszczane w tabeli systemowej USER_JOBS. Możemy tam wyszukać nasze zadania i zobaczyć jaki jest ich status. Dobra dokumentacja pakietu DBMS_JOB jest na stronie http://psoug.org/reference/dbms_job.html.

Jeśliby nam chodziło o cykliczne kasowanie starych (starszych niż 5 dni) danych z tabeli LOGS to procedura DO_CLEAN mogłaby wyglądać następująco:
CREATE PROCEDURE DO_CLEAN IS
ts_max TIMESTAMP := trunc(current_timestamp - 5);
BEGIN
DELETE FROM logs WHERE logs.ts < ts_max;

COMMIT;
END DO_DELETE;
W najnowszych wersjach bazy danych Oracle powinno się zamiast pakietu DMBS_JOB używać pakietu DBMS_SCHEDULER, aczkolwiek wersja z którą ja pracuję jeszcze na tyle nowa nie jest.