Oracle SQL Developer – mobilny warsztat programisty

Bohdan Szymczak

Współczesny rynek informatyczny przedstawia sobą dość złożony obraz. Podział na firmy komercyjne, sprzedające swoje produkty za ciężkie pieniądze i świat wolnego oprogramowania nie jest absolutnie sztywny. Istniejące na rynku produkty dostępne są w różnej formule licencyjnej oraz w różnej odpłatności, niezależnie od źródła pochodzenia. Tak więc, można zarówno zapłacić za dystrybucję Linuxa oraz jego dalsze wsparcie eksploatacyjne jak i NIE zapłacić za narzędzie deweloperskie wyprodukowane przez firmę komercyjną.

Jednym z takich darmowych narzędzi jest SQL Developer – produkt wytworzony przez firmę Oracle, którego użycie zarówno komercyjne jak i niekomercyjne jest dozwolone bez ponoszenia przez użytkownika opłat licencyjnych. I choć, jak mówi przysłowie: „darowanemu koniowi nie zagląda się w zęby”, to jednak nie oznacza to, że nie można go sobie dyskretnie obejrzeć. W tym krótkim opracowaniu spróbujemy przyjrzeć się tej darmowej aplikacji Oracle i opisać jej główne cechy.

Najnowsza wersja aplikacji pochodzi z grudnia 2008 roku i jest sygnowana numerem 1.5.3. Można ją pobrać ze strony http://www.oracle.com/technology/products/database/sql_developer/index.html

Oracle SQL Developer nie wymaga instalacji. Pobrane ze strony Oracle archiwum zip wystarczy rozpakować na dysku i narzędzie jest już gotowe do uruchomienia. W czasach powszechnie używanych „ciężkich” instalatorów jest to wyjątek, który może okazać swoją nieocenioną wartość w szczególnych okolicznościach. Po rozpakowaniu, całość zajmuje około 160 MB, zatem może być bez problemu umieszczone na nośniku zewnętrznym, na przykład pendrive i z niego uruchamiane.

Powszechnie stosowanym obecnie standardem jest dostęp zdalny do baz danych, dodatkowo administratorzy i deweloperzy używają wyrafinowanych narzędzi zainstalowanych na sprzęcie przenośnym. Zdarzają się jednak sytuacje wyjątkowe i nietypowe, które wykluczają możliwość takiego komfortowego dostępu do bazy. Często, zdefiniowana w danej firmie polityka bezpieczeństwa stanowi, że wykorzystanie SQL Developera umieszczonego na pendrive może okazać się jedynym sposobem na użycie graficznego narzędzia dostępu do bazy. Również w przypadku konieczności pracy na „zastanym” sprzęcie i braku uprawnień administratora, wymaganych do instalacji, ta cecha okaże się niezwykle użyteczna.

Dodatkowym atutem jest fakt, iż SQL Developer może pracować zarówno pod kontrolą systemu operacyjnego Microsoft Windows, jak i LINUX a nawet Mac OSX. Wieloplatformowość uzyskano, jak łatwo się domyślić, dzięki zastosowaniu Javy jako platformy uruchomieniowej. To rozwiązanie dodatkowo pozwala na łatwe pisanie własnych rozszerzeń.

SQL Developer przeznaczony jest pracy z bazą Oracle w wersji 9.2.0.1 oraz późniejszych. Tym, co mogłoby zdziwić to możliwość podłączenia tego Oracle’owego narzędzia do innych, nie-Oracle’owych baz danych. Należą do niech następujące, popularne i często używane bazy: Microsoft Access, MySql, Microsoft SQL Server oraz Sybase. Wyjaśnienie wbudowania tej funkcjonalności jest jednak banalnie proste – służy to umożliwieniu łatwego przeprowadzenia migracji wymienionych wcześniej baz danych do bazy Oracle. Operacja migracji jest opcją na poziomie głównego menu programu i może być zrealizowana przy użyciu wizarda, który metodą „krok po kroku” przeprowadzi użytkownika przez ten proces. Cała procedura jest bardzo zautomatyzowana i sprowadza się do wskazania przez użytkownika bazy źródłowej i docelowej, oraz najważniejszych parametrów migracji. Migracja może obejmować tylko obiekty bazodanowe, lub również obiekty wraz z danymi.

Aby jeszcze bardziej zachęcić do rezygnacji z obcych baz i przejścia na tę „jedyną słuszną”, twórcy SQL Developera dostarczają dokumentację (pozycje 2,3,4 bibliografii), opisującą w szczegółach różnice pomiędzy bazami migrowanymi a Oracle. Opisywana aplikacja jest mocno zorientowania na proces migracji z obcych baz danych i posiada wbudowane wsparcie również w innych obszarach. Podsumowanie wykonanych migracji wraz z ich szczegółami jest łatwo dostępne poprzez trzy dedykowane raporty.

Po uruchomieniu SQL Developera (Rys. 1), oczom użytkownika ukazuje się typowy dla graficznych narzędzi programisty ekran, składający się z wielu okien, których układ w sposób dowolny może być aranżowany. Możliwość dowolnej lokalizacji, zwijania i dokowania okienek ułatwia zapanowanie nad ogromem dostępnej informacji. Użytkownicy, korzystający wcześniej z innych podobnych narzędzi, nie będą mieli problemów z przyzwyczajeniem się do kolejnego – sposób organizacji interfejsu stał się w ostatnich czasach niepisanym standardem i w tym zakresie nie powinno być zaskoczenia.

Edytor programisty wyposażony jest we wsparcie pisania kodu, polegające zarówno na kontekstowej podpowiedzi nazw obiektów, kolumn tabel itp., jak i na możliwości automatycznego wklejania szablonów struktur programowych, takich jak pętle, kursory itp. Wszystkie te pomocne informacje są zgrupowane w osobnym oknie, o nazwie snippets, zawierającym sporo danych przygotowanych przez producenta. Oprócz wymienionych wcześniej, przydatne mogą być podpowiedzi optymalizatora (hints), standardowe funkcje, bądź formaty dat lub konwersji. Ważną i przydatną opcją jest możliwość dodawania własnych snippetów, co umożliwia z czasem zbudowanie przez każdego programistę, swojego własnego środowiska pracy.

SQL Developer umożliwia jednoczesne podłączenie do wielu baz danych i równoległą pracę na ich strukturach i jednostkach programowych. Każdy edytor umieszczony jest w tym przypadku w osobnej zakładce. Umieszczając okno połączeń do baz (connections) w widocznym miejscu można mieć podgląd na strukturę wybranej bazy danych i łatwy dostęp do jednostki, edytowanej w danej chwili. Obiekty w schemacie użytkownika znajdują się na górze drzewa, obiekty innych użytkowników w osobnej gałęzi oznaczonej jako „other users„.


Rys. 1. Główny ekran SQL Developera.

Twórcy aplikacji mieli wyraźnie ambicję wyprodukowania narzędzia nadającego się do zastosowań profesjonalnych. Jednym z elementów umożliwiających takie zastosowanie jest funkcjonalność zarządzania wersjami kodu, poprzez wbudowanie podłączenia do prawdopodobnie najpopularniejszego systemu zarządzania wersjami – cvs. W menu Versioning można znaleźć wszystkie niezbędne opcje ułatwiające zarządzanie kolejnymi wersjami kodu źródłowego oraz eliminujące konflikty w dostępie do źródeł podczas pracy grupowej.

Podczas tworzenia oprogramowania, lub innej pracy z bazą danych, notoryczną potrzebą jest sięganie do szeregu źródeł informacji. Często, posiadana dokumentacja okazuje się niewystarczająca i konieczne jest posiłkowanie się nieograniczonymi wręcz zasobami internetowymi. Ułatwieniem dla tej opcji jest wbudowane okno poszukiwania informacji w kilku najpopularniejszych źródłach internetowych. Wystarczy wybrać miejsce, wpisać szukaną frazę i SQL Developer automatycznie wywoła w przeglądarce internetowej jedno z predefiniowanych łączy url: OTN Oracle, Metalink, lub po prostu Google. Tę pożyteczną funkcję pokazuje Rys. 2.


Rys. 2. Okno poszukiwacza informacji.

To, co jest niezbędne w pracy programisty, to oczywiście potrzeba łatwego poszukiwania błędów w kodzie, a więc oczywiście debugger. Programista nie rozczaruje się i w tym przypadku, w menu Run znajdują się wszystkie potrzebne opcje, by móc krokowo uruchamiać program, zastawiać pułapki, a w trakcie debuggowania podglądać i ewentualnie zmieniać wartości zmiennych.

Typowe dla edytora programisty zaznaczanie miejsca w kodzie zakładkami oraz zaawansowana nawigacja po kodzie źródłowym dodaje funkcjonalność, standardowo oczekiwaną w narzędziu tego typu. Ostatnim składnikiem, który uzupełnia klasyczny zestaw funkcji jest nawigator po systemie plików, umożliwiający dodatkowo podgląd i edycję plików tekstowych.

W trakcie strojenia zapytań SQL nie można obejść się bez analizy planów lub śladu wykonań poleceń. Ta funkcjonalność znalazła swoje miejsce w SQL Developerze i została wbudowana do narzędzia o nazwie SQL Worksheet, który analogicznie jak SQL*Plus, przeznaczony jest do uruchamiania poleceń SQL.

SQL Worksheet posiada sześć zakładek w oknie wyników; szczegóły realizacji przez serwer bazy danych polecenia SQL jest uwidocznione w zakładce Autotrace, w postaci graficznej reprezentacji planu wykonania, wraz ze statystykami sesji. Ilustruje to Rys. 3.


Rys. 3. Ślad wykonania polecenia SQL.

Interesującą opcją jest wydzielenie osobnego okna – DBMS Output – do prezentowania komunikatów wysyłanych przez polecenie DBMS_OUTPUT.PUT_LINE.

Czas, w których programista bazy Oracle znał na pamięć składnię i wszystkie opcje poleceń SQL z grupy ddl, należy już do przeszłości. Dlatego do wydajnej i efektywnej pracy potrzebne jest wsparcie odpowiedniego narzędzia. I w tym przypadku twórcy SQL Developera nie zapomnieli o tej potrzebie. W menu kontekstowym, uruchamianym prawym klawiszem myszy na wskazanym obiekcie w oknie Connections, można znaleźć wszystkie potrzebne opcje. Przykładowo, dla tabeli pojawią się polecenia działające na poziomie całej tabeli, kolumn, więzów, indeksów, przywilejów, statystyk, składu i wyzwalaczy. Na kolejnym poziomie znaleźć można szczegółowe opcje realizujące zamierzenia użytkownika. Dla tak wybranych opcji można zawsze odczytać w dodatkowej zakładce składnię polecenia, które realizuje potrzebną akcję.

Pewna refleksja przychodzi na widok opcji sprowadzającej się do wykonania polecenia: „select count(1) from tabela„. Czyżby wiara w umiejętności współczesnego programisty była już tak nadwyrężona w firmie Oracle? Mam nadzieję, że jednak jest to prędzej efekt dążenia do uzyskania spójnego i pełnego kompletu opcji, niż wątpliwości dotyczących zdolności policzenia wierszy w tabeli. Dostęp do konstrukcji poleceń ilustruje Rys. 4.

Wsparcie dla tworzenia, bądź modyfikacji nowych obiektów bazodanowych, jest równie mocne i umożliwia zdefiniowanie wszystkich dopuszczalnych parametrów. Efektem, podobnie jak w innych tego typu narzędziach, jest gotowa do wykonania i poprawna semantycznie instrukcja SQL.

Bardzo pomysłowo zrealizowano okno podglądu właściwości obiektu, które w szeregu zakładkach pokazuje liczne szczegóły. Co niezwykle ważne, jedna z zakładek zawiera informacje o statystykach obiektu, pobrane ze słownika systemowego. W razie ich braku, lub gdy stan statystyk jest nieaktualny, można z tego poziomu wydać polecenie naliczenia, lub walidacji statystyk.


Rys. 4. Komponowanie poleceń ddl z menu kontekstowego.

Podczas tworzenia własnej aplikacji, bardzo często występuje potrzeba utworzenia nowego, bądź dodatkowego środowiska developerskiego, na które składa się kolejna baza danych ze strukturami i kodem pochodzącym z bazy wzorcowej. Również przekazanie aplikacji do testów wymaga dostarczenia takiej bazy. SQL Developer wspiera taką potrzebę umożliwiając nie tylko wykonanie klasycznego eksportu bazy, ale również skopiowanie całości, lub wskazanej części bazy źródłowej do innej lokalizacji. Bardzo przydatna będzie również opcja porównania dwóch baz danych, której wynikiem jest nie tylko raport różnic, ale gotowy skrypt „dopasowujący” bazę docelową do źródłowej.

Przeglądając funkcjonalność SQL Developera w części nie związanej wprost z tworzeniem kodu składowanego w bazie, nasuwa się spostrzeżenie, że twórcy aplikacji postawili sobie za cel dostarczenie narzędzia, które uzupełniłoby dość siermiężny interfejs SQL*Plusa i dało dostęp do często używanych danych przez administratora bazy danych lub ogólnie mówiąc osoby odpowiedzialnej za utrzymanie i strojenie bazy.

Alternatywą dla SQL*Plusa jest wspomniana wcześniej funkcjonalność nazwana SQL Worksheet. Interpretuje ona pewną liczbę komend przeznaczonych dla SQL*Plusa, co na przykład umożliwia wykorzystanie skryptów przygotowanych wcześniej dla tego tradycyjnego już narzędzia. Wyjątkowo wygodną formą jest rozdzielenie na osobne zakładki okna wyjściowego wyświetlania wyników zapytania, planów wykonań poleceń SQL, oraz śladu (trace). Zapytania SQL można uruchamiać zarówno w postaci pojedynczych poleceń, jak i całego skryptu wpisanego w oknie wejściowym.

Bardzo interesująco przedstawia się funkcjonalność wbudowanych raportów. Dość częstą praktyką administratorów baz danych było tworzenie szeregu skryptów, zawierających zapytania do słownika bazy danych i uruchamianych w razie potrzeby z poziomu SQL*Plusa. SQL Developer oferuje taką funkcjonalność już gotową – posiada wbudowane raporty operujące na słowniku systemowym bazy danych, a co najważniejsze większość z nich umożliwia podanie wartości dla parametrów zapytania, ograniczających zakres wyniku, lub służących doprecyzowaniu poszukiwanej informacji.

Wszystkie raporty zgrupowane są w trzech grupach:

  • Raporty dotyczące słownika bazy danych, przeznaczone głównie dla administratora bazy danych;
  • Raporty z migracji baz danych do bazy Oracle;
  • Raporty definiowane przez użytkownika.

W pierwszej grupie raportów znajduje się również wydzielona sekcja dedykowana dla Oracle Application Express, która powinna być pomocna dla programistów używających tego narzędzia.

Każdy raport jest faktycznie odpowiednio zbudowanym zapytaniem SQL, typu select, lub w bardziej skomplikowanych przypadkach blokiem języka PL/SQL i może być również uruchomiony w oknie SQL Worksheet. Dzięki temu widoczne i dostępne jest źródło raportu, co z jednej strony umożliwia zweryfikowanie sposobu jego konstrukcji, ujawnienie perspektyw, z których korzysta, zaś z drugiej strony pozwala na łatwą modyfikację lub stworzenie własnego raportu bazującego na oryginale.

Forma wyjściowa własnego raportu może mieć kilka postaci. Do wyboru jest zarówno forma skryptowa, identyczna jak wynik zapytania w SQL*Plusie, jak i tabelaryczna, umożliwiająca wygodny przegląd wyników. Interesującą możliwością jest zbudowanie raportu w postaci graficznej – wykresu słupkowego lub formy licznika. Ilustruje to Rys. 5.


Rys. 5. Raport w postaci wykresu typu „licznik”.

Definicja własnego raportu pozwala na używanie zmiennych bindowanych, których wartości należy wprowadzić przy każdym uruchomieniu raportu.

Z dostępnych, predefiniowanych raportów na uwagę zasługują dwa, stanowiące podstawowe narzędzia administratora bazy danych – ASH i AWR. Pewnym ograniczeniem jest to, że standardowy raport AWR zdefiniowano tylko dla ostatniej migawki, należy więc sądzić, że administrator korzystający z SQL Developera, dla swoich potrzeb zdefiniuje własny raport, dla którego parametrami uruchomienia będą na przykład identyfikatory migawek.

Sporo informacji prezentowanych w aplikacji, a także niektóre funkcjonalności należą do tego typu, które zwykle udostępnia się w dedykowanych administratorom narzędziach – takich, jak chociażby Oracle Enterprise Manager. Może to oznaczać, że zamiary twórców SQL Developera były szersze, niż wskazywałaby na to nazwa narzędzia, z uwagi na fakt, że typowe potrzeby programisty bazy danych ograniczają się do informacji wymaganej do napisania poprawnego funkcjonalnie kodu. Z drugiej strony inne, komercyjne aplikacje służące do tworzenia programów użytkowych, również wyposaża się w takie opcje. Wynika to niewątpliwie z faktu, iż aplikacje bazodanowe wymagają podczas ich opracowania a później utrzymania, rozwiązywania problemów szerszych, niż wyłącznie implementacja wymagań funkcjonalnych. Konieczność rozwiązywania konfliktów pomiędzy równolegle pracującymi sesjami, blokady wspólnych zasobów, optymalność planów wykonania poleceń SQL, to tylko niektóre z licznych problemów, które są „chlebem codziennym” deweloperów Oracle.

Podsumowując opisywane narzędzie, można wskazać dwie główne grupy potencjalnych użytkowników – są to programiści i administratorzy bazy Oracle. Szczególnie ta druga grupa klasycznych twardzieli, piszących skrypty przy pomocy vi i nie tolerujących niczego bardziej skomplikowanego od SQL*Plusa, powinna zainteresować się tym narzędziem, które dając wyższy komfort pracy, jednocześnie poprzez swoją prostotę i zgodność z SQL*Plusem powinno spełniać ich oczekiwania.

Brak opłat licencyjnych za użytkowanie SQL Developera powinno zachęcić wszystkich zainteresowanych tworzeniem aplikacji dla bazy Oracle do jego użycia. Narzędzie doskonale nadaje się do celów edukacyjnych, zarówno dla indywidualnych osób, chcących poznać tajniki programowania bazy Oracle, jak dla wszelkiego rodzaju szkół i uczelni. Wielkim ułatwieniem będzie również obfitość materiału dokumentacyjnego na stronach internetowych Oracle, w tym również dobrze opracowany, komunikatywny i interaktywny tutorial.

Łatwość instalacji, uruchomienia i przenośność pozwala stwierdzić, iż określenie tej aplikacji mianem mobilnego warsztatu programisty jest w pełni uzasadnione.

Darmowy SQL Developer może być bez problemu porównywany z podobnymi narzędziami komercyjnymi i stanowi to jego niewątpliwą zaletę. Tam, gdzie koszt zakupu narzędzia stanowi problem, można go zastosować bez wahania, w pozostałych przypadkach powinno się rozważyć realne potrzeby użytkowników w kontekście funkcjonalności i ceny. W przypadku planowanych migracji popularnych baz danych do Oracle, narzędzie producenta bazy może być bardzo przydatne, szczególnie w połączeniu z dostarczoną dokumentacją.

Rozważając wdrożenie SQL Developera w firmie, nasuwa się naturalne podejrzenie, że darmowe narzędzie nie będzie posiadać wystarczającego wsparcia producenta. Warto zatem wiedzieć, że:

  • Posiada on wsparcie analogiczne jak produkty komercyjne dla użytkowników mających wykupiony support na bazę. Można zatem zgłaszać błędy poprzez Oracle Metalink.
  • Może być używany do pracy z bazą Oracle 10g Express Edition (XE) i jest wspierany zgodnie z jej zasadami poprzez XE OTN Discussion Forum.
  • Producent zapowiada jego dalszy rozwój, jako osobnego narzędzia przeznaczonego dla programistów bazy danych.
  • Jest dystrybuowany od wersji Oracle 11gR1, wraz z bazą.
  • Współpracuje z bazą Times Ten.

Pierwsza wersja SQL Developera została udostępniona w marcu 2006 roku w postaci prostego narzędzia służącego przede wszystkim do uruchamiania zapytań i skryptów SQL, a także tworzenia kodu w języku PL/SQL. Kolejna znacząca wersja została rozbudowana o funkcjonalność migracji baz danych do bazy Oracle, oraz wspierała Oracle Application Express. Obecna, opisywana w artykule wersja, stanowi znacząco rozbudowane narzędzie programisty, wyposażone w szereg nowych funkcjonalności, w tym kontrolę wersji, nawigator po systemie plików, formatowanie zapytań SQL, opcje kopiowania, porównywania, eksportu bazy danych i szereg innych możliwości, o których wspomniano w niniejszym artykule.

Wersja 1.5.3 osiągnęła dojrzałość funkcjonalną wystarczającą do zastosowań profesjonalnych, co w połączeniu z interesującą implementacją było inspiracją do podzielenia się opinią na jego temat z czytelnikami.

W tym krótkim opracowaniu starałem się zaprezentować Oracle SQL Developera w wersji 1.5.3, opisując jego najciekawsze cechy. Decyzja, co do jego stosowania jest jak zwykle domeną indywidualnego osądu czytelnika. Widoczny w ostatnim czasie, intensywny rozwój narzędzia prowadzony przez firmę Oracle, uwolnienie go od opłat licencyjnych powoduje, że moim zdaniem, produkt wart jest zainteresowania już obecnie, zaś śledzenie nowości w kolejnych wydaniach może okazać się niezwykle pożyteczne.

Bibliografia:

  1. Oracle® Database SQL Developer User’s Guide Release 1.5 E12152-05
  2. Oracle® Database SQL Developer Supplementary Information for Microsoft Access Migrations Release 1.5 E12154-01
  3. Oracle® Database SQL Developer Supplementary Information for MySQL Migrations Release 1.5 E12155-01
  4. Oracle® Database SQL Developer Supplementary Information for Microsoft SQL Server and Sybase Adaptive Server Migrations Release 1.5 E12156-01
  5. http://www.oracle.com/technology/products/database/sql_developer/index.html