Od czasu gdy zdawałem ten egzamin minął już kwartał ale może warto aby podzielić się wrażeniami w sposób przejrzysty i otwarty.
Egzamin 1Z0-007 rozpoczynający ściężkę certyfikacyjną pod Oracle 9i jest z całą pewnością najprostrzy. To co czyni go szczególnie trywialnym jest to duży stopień pokrycia pytań egzaminacyjnych przez wydawnictwo TestKing. Ewidentnie Oracle przygotował bardzo małą pulę pytań - pulę od dłuższego czasu nie poszerzaną. Zdecydowanie zdanie 1Z0-007 nie jest powodem do większej dumy ani znaczącą rekomendacją dla potencjalnego pracodawcy.
Oczywiście wszystko zależy od danej osoby i prezentowanego podejścia. Można wykuć testkinga i z odrobiną pojęcia o sql zdać "byle tylko zdać". A można przy okazji lepiej poznać pl/sql. Tym którzy mają trochę ambitniejsze podejście do tematu polecam podręcznik firmy Sybex - dostępny na przykład w eMule (plik pdf około 4Mb).
Jak znaleźć lock i ubić sesję ?
Perspektywy Oracle dostarczają tak różnych informacji o instancji, że poniższe zapytanie można traktować jedynie przykładowo. Jeżeli informacje przez nie dostarczone nie są wystarczające dla zidentyfikowania kłopotliwej (lockującej) sesji najlepiej podejrzeć pełną zawaerość użytych widoków i dodać brakujące kolumny do zapytania.
Przykład zwraca nazwę obieku na którym jest lock, SID sesji oraz numer seryjny sesji.
select dba_obj.object_name, sess.sid, sess.serial# from v$locked_object lo, v$session sess,dba_objects dba_obj where lo.object_id = dba_obj.object_id and sess.sid = lo.session_id;
Mając już potrzebne informacje możemy bezpośrednio z poziomu np. sqlplus ubić sesję podając SID i SERIAL zwrócone z powyższego zapytania.
ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;
Poniższe zapytanie generuje polecenie zmiany definicji kolumn tak aby długość pól tekstowych mierzona była w znakach a nie bajtach.
SELECT 'ALTER TABLE '||TABLE_NAME||' MODIFY '||COLUMN_NAME||' '||DATA_TYPE||'('||DATA_LENGTH||' CHAR);'
FROM user_tab_cols
where (CHAR_USED = 'B'
or CHAR_USED IS NULL)
and DATA_TYPE IN ('CHAR','VARCHAR2');
Można wykonać pod aplikacjami typu Toad, jOra, SQLDeveloper albo ubrać w spool i pod sqlplus.
Parametr NLS_LENGTH_SEMANTICS określa domyślną metodę dla liczenia rozmiaru kolumn tekstowych. Jeżeli parametr ten jest pominięty lub ustawiony na BYTE wtedy kolumna VARCHAR2(1) może zmieścić 1 znak ale nie zawsze. Wystarczy, że utworzymy taką kolumnę na bazie z kodowaniem w którym jeden znak zajmuje więcej niż 1 bajt (np. UTF-8)... i kolumna okaże się za mała nawet na pojedynczą literę.
Jeżeli więc pracujemy w "wielobajtowym" kodowaniu najlepiej ustawić ten parametr na "CHAR" i zapomnieć o problemie jakim byłoby każdorazowe deklarowanie rozmiaru kolumny jako VARCHAR2(1 CHAR), tak na środowisku deweloperskim jak i później na produkcyjnym.
Jeżeli się zagapiliśmy i utworzyliśmy obiekty bazujące na BYTE możemy łatwo wygenerować skrypty które zmodyfikują definicję kolumn.
Przykładowo:
http://sql.imaginacja.org/blog1.php/2008/09/25/masowa-zmiana-definicji-kolumn-tekstowyc
Problem pojawia się najczęściej gdy updatujemy kolumnę decydującą o podziale tabeli na partycje. Jako, że każda partycja stanowi osobny segment to zmiana wartości, oznaczająca zmianę partycji, powoduje konieczność fizycznego przeniesienia rekordu do innego segmentu.
Domyślnie Oracle nie ma na to naszej zgody. Możemy to zmienić:
alter table TABELA enable row movement;
Pamiętajmy, że również i ten alter spowoduje rozkompilowanie powiązanych z tabelą obiektów.
Analogicznie przywracamy domyślne zachowanie (disable).
Oto pierwszy post w nowym blogu poświęconym głównie bazom danych Oracle, językom sql i pl/sql oraz narzędziom wspierającym prace z wcześniej wymienionymi.
Na co to komuś ? Zdecydowałem się wystartować ten projekt gdyż odnoszę wrażenie, że polski internet w porównaniu z angielskojęzycznym jest bardzo ubogi w mniejsze publikacje traktujące bezpośrednio o nagłych i niespodziewanych trudnościach programisty/administratora bazy danych. Polacy nie gęsi i fakt, że jedyną deską ratunku są obcojęzyczne serwisy niejako drażni nacjonalistyczny pierwiastek mej duszy.
Czemu na b2evo ? Z przekory. Nie jest to engine szeroko rozpropagowany w Polsce a mam nadzieję, że kiedyś polska flaga pojawi się na stronie projektu wśród linków do ciekawych blogów ![]()
A dlaczego "małe otwarcie" ? Z braku czasu i pod impulsem chwili. Z czasem, jeżeli mi się nie znudzi, przyjdzie odpowiednia szata graficzna a może i większa funkcjonalność (np. forum).
Życzę sobie powodzenia i dużo googlebotów a Wam znalezienia tutaj czegoś przydatnego.