Oracle, Rails i Mac OS X

Opublikowane przez Jarosław Zabiełło Thu, 01 Nov 2007 15:26:00 GMT

Dziś postanowiłem zainstalować na swoim maczku (śmigającym na nowym Leopardzie) obsługę bazy Oracle dla Ruby on Rails. Niestety aby to było możliwe trzeba wpierw zainstalować sobie klienta do Oracle. Ściąganie grubo ponad 300MB tylko po to, aby można było skompilować driver… Nic to. Drobnostka.

To niby ma być instalacja dla OSX… Oracle nic się nie nauczył na temat tego, jak powinni być instalowane programy na Mac OS X. Udostępnił jakiś obskurny skrypt. Nic to. Odpalam go (profilaktycznie robię to na prawach root’a) i co otrzymuję?

sh-3.2# ./runInstaller 
./runInstaller: line 59: /Users/ja/Desktop/Oracle: No such file or directory

Hmm, brakuje mu katalogu? No to tworzymy. Próba druga:

sh-3.2# mkdir /Users/ja/Desktop/Oracle
sh-3.2# ./runInstaller 
./runInstaller: line 59: /Users/ja/Desktop/Oracle: is a directory

No proszę, gdyby nie skrypt Oracle’a to bym nigdy się nie domyślił, że stworzylem przed chwilą katalog… OK. Kasuję i tworzę pusty plik. Próba trzecia:

sh-3.2# touch  /Users/ja/Desktop/Oracle
sh-3.2# ./runInstaller 
./runInstaller: line 59: /Users/ja/Desktop/Oracle: Permission denied

No teraz, to ręce mi opadły. Będąc skrypt krzyczy że nie mam dostępu mimo, że mam wszelkie możliwe dostępy jako root. Czy ten skrypt przygotowywał jakiś idiota? Wpierw marudzi że nie ma pliku lub katalogu. Jak stworzę katalog to mu nie pasuje że to katalog. A jak stworzę plik to nie mam do niego dostępu mimo, że jestem na prawach root’a.

Na razie daję sobie spokój. Chyba odpalę VMware i Linuksa, może tam zadziała.

Jak już jestem przy temacie Oracle’a, to podobno to jest całkiem dobra baza pod warunkiem, żektoś poświęci miesiąc czasu na odpowiednią jej konfigurację. :) Ale poważniej. Nie mogę zrozumieć dlaczego Oracle puste teksty w polu traktuje tak jak NULL. Jeśli mam pole typu tekstowego i zawiera pusty napis to kwerenda SELECT * FROM tab WHERE pole='' nic nie znajdzie. Trzeba użyć składni SELECT * FROM tab WHERE *pole IS NULL*. Jakiś idiotyzm. Żeby było śmieszniej, w manualu do MySQL 5 napisali, że tylko osoby początkujące w SQL mylą puste stringi z wartościami NULL. Ubaw po pachy.

The concept of the NULL value is a common source of confusion for newcomers to SQL, who often think that NULL is the same thing as an empty string ’’.

Nie rozumiem również dlaczego Oracle nie potrafi zrobić GROUP BY dla aliasu pola? Ale nic, to. To pewnie dopiero początek zabawy z Oraclem na którego migrujemy z “zabawkowego” MySQL. Już teraz widzę że czeka nas ciężkie przepisywanie kwerend SQL.

Update: Jak już nic nie pomaga, to zagląda się do helpu, he he. No to zajrzałem. A tam wielostronicowa, durna instrukcja obsługi jak zainstalować klienta Oracle’a. Trzeba potworzyć jakieś grupy, userów. Tylko się utwierdziłem w tym co napisałem. Instalację do Oracle przygotowała jakaś grupa idiotów. Co za problem, aby to zautomatyzować? Pod windozą instalacja Oracle (i to całej bazy a nie tylko klienta) jest kwestią paru kliknięć.

Tagi , , , ,  | 24 comments

Comments

  1. Avatar Piotr Usewicz powiedział about 1 hour later:

    Chyba zapominasz, ze w Windows uzytkownik ma pelne uprawnienia moj drogi ;]

  2. Avatar shaman powiedział about 2 hours later:

    to fakt, że tylko osoby początkujące w SQL mylą puste stringi z wartościami NULL. Nie widzę w tym nic śmiesznego. Każdemu, kto obcuje z różnymi silnikami baz danych fakt rozróżniania pustych ciągów i NULLi jest dobrze znany i wcale nie dziwi :)

  3. Avatar Jarosław Zabiełło powiedział about 5 hours later:

    shaman: powiedz to inżynierom Oracle’a ktorzy utożsamiają je ze sobą :-D

  4. Avatar Husio powiedział about 19 hours later:

    “Instrukcja została napisana tylko dla systemu Windows, bo użytkownicy linuksa sami sobie poradzą, a użytkownicy Mac’ów przyzwyczajeni są, że ich wszyscy olewają.” I niech ktos powie ze to nie jest prawda.

  5. Avatar Jarosław Zabiełło powiedział about 20 hours later:

    Nie, no co ty gadasz. Windows nie potrzebuje żadnej instrukcji. Parę kliknięć i wszystko działa. Ta instrukcja (notabene 10 stron) została napisana dla Mac OS X. I jest kompletnie kretyńsko napisana. Rozpisują się tam jak dodać usera czy grupę do systemu zamiast skupić na tym, co ważne. Inna sprawa, że ta instrukcja jest z grudnia 2004, dosyć stara, i po prostu nie działa na OSX.

  6. Avatar Mordek powiedział 1 day later:

    Wklej otocze 59 linii skryptu może coś da poradzić, to musi być jakiś drobiazg.

  7. Avatar Mordek powiedział 1 day later:

    A w ogóle to czemu nie pracujesz pod linuxem? I tak większość produkcyjnych serwerów dla railsów stoi pod linuxem, więc lepiej cały czas na nim siedzieć :) Ja od dwóch lat już jadę na linuxie i muszę powiedzieć, że niczego mi nie brakuje. Polecam Sabayon distro :) Generalnie to moim zdaniem linux to raj dla programistów :)

  8. Avatar Jarosław Zabiełło powiedział 1 day later:

    Nie używam Linuksa bo wole uniksowego Leoparda. Poza tym instalacja Oracle tylko na windozie jest prosta. Na Linuksie podobno też są problemy. Oni to chyba celowo robią, aby wzywać ich support z każdą pierdołą.

    Cały skrypt instalacyjny jest tu http://pastie.caboo.se/113518 Linijka 59 jest ostatnia.

  9. Avatar Mordek powiedział 1 day later:

    eee ten skrypt nic ciekawego nie robi, tylko ustawia zmienne środowiskowe, za wszystko jest odpowiedzialny runInstaller, ciekawe czy to też jakiś skrypt czy exec, jak exec to ciężko będzie coś z tym zrobić wstaw przed 59 linię: echo “CMDDIR: $CMDDIR” echo “params: $” $ powinno być puste a $CMDDIR powinien wskazywać na katalog z jakiego go wywołujesz. Może ten skrypt wymaga jakiś parametr? bo po co by było $* ? Znalazłem na necie coś o instalacji http://www.orablogs.com/sergio/archives/000781.html Wymaga żeby był utworzony użytkownik oracle z tego co widzę. Dziwne, że skrypt tego nie może zrobić za użytkownika.

  10. Avatar Mordek powiedział 1 day later:

    widzę także, że kolega lubi stare punkowe klimaty :) tylko te zaciągi mszalne jakoś nie pasują do całości :) programista, punk i … kler … zupełnie nie pasuje :) Lektura dawkinsa obowiązkowa na weekend :)

  11. Avatar Jarosław Zabiełło powiedział 1 day later:

    Zapomniałem dodać, że nawet odpaliłem instalator ale wysypał się wyjątkami w Javie. Dokładnie: stworzylem 2 grupy (dba i oinstall)i usera ‘oracle’ (niestety dla inżynierów Oracle zautomatyzowanie takiej “wyrafinowej” operacji jest najwyraźniej za trudne). Ustawiałem jakieś zmienne i musiałem wystartować skrypt jako ten user ‘oracle’ należący do grupy ‘oinstall’. Pokazało się nawet okienko ale potem wszystko się wysypało jakmiś wyjątkami z JVM. Chyba sobie to daruję. W sumie to chciałem zainstalować klienta po to, aby móc zainstalować driver dla Railsów. Chyba przełączę się na JRuby, bo podobno wtedy nie muszę się instalować tego klienta.

  12. Avatar Mordek powiedział 1 day later:

    ooo JRuby może być, a potem proszę podzielić się wrażeniami na blogu :)

  13. Avatar pietia powiedział 1 day later:

    uzywam servera oracle (express ed.) pod debianem i nie zakladalem zadnych userow itd… jedyny problem to oszukac instalator, ze sie posiada redhata lub zgodnego z nim linuxa. a zeby tego dokonac nalezy pobawic sie plikami /etc/issues

  14. Avatar Radarek powiedział 1 day later:

    “Tylko się utwierdziłem w tym co napisałem. Instalację do Oracle przygotowała jakaś grupa idiotów.”

    A co Ty byś chciał “click clik” i po sprawie?:D Licencja Oracle kosztuje niemałe pieniądze, więc musisz poczuć za co płacisz ;).

  15. Avatar Jarosław Zabiełło powiedział 1 day later:

    Mordek, Dawkins odwala głupią propagandę.

  16. Avatar Mordek powiedział 1 day later:

    Tak samo jak kler :)

  17. Avatar Jarosław Zabiełło powiedział 1 day later:

    Możliwe, nie obchodzi mnie żaden kler.

  18. Avatar Oracle i NULL powiedział about 1 month later:

    Mała nota:

    Oracle nie obsługuje znaku pustego!!!

    Zawsze wstawia NULL a do NULL aby go złapać trzeba używać składni ..WHERE IS NULL lub IS NOT NULL lub funkcji NVL.

    Soft, który działał na wielu bazach zawsze wstawiał 1 spację do każdej bazy i to traktował jako znak pusty. Proste i skuteczne.

    Wiem, że tak naprawdę do pracy z klientem potrzeba Ci niewiele plików. Może jak zainstalujesz klienta to wepnij się do bazy i nie zamykaj połączenia i odpal lsof . w katalogu gdzie zainstaloweś oracle-a.

  19. Avatar carbon powiedział 2 months later:

    To prawda, ze pod linuxem/unixem nie jest lekko z oraclem ale tez bez przesady. Ja jestem uzytkownikiem windowsa, sporadycznie uzywam linuksa. Musialem zainstalowac oracla na solarisie i po paru godzinkach zaczal ladnie pracowac :) PS W instrukcji oracla sa bledy ;) ale jakos sie udalo. Pod linuksem tez instalowalem i tez zadzialalo.

  20. Avatar Sergio powiedział 5 months later:

    “Nie mogę zrozumieć dlaczego Oracle puste teksty w polu traktuje tak jak NULL. Jeśli mam pole typu tekstowego i zawiera pusty napis to kwerenda SELECT * FROM tab WHERE pole=’’ nic nie znajdzie. “

    Obawiam się, że nie zrozumiałeś jak działa Oracle – w Oracle pusty string ’’ i NULL to dwie zupełnie wartości czyli jest zupełnie odwrotnie niż piszesz w swoim tekście i dokładnie tak jak jest napisane w manualu do MySQL. Proste rozwiązanie Twojego problemu jest następujące:

    SELECT * FROM tab WHERE NVL=’‘

    Funkcja NVL działa następująco: Jeżeli pole zawiera wartość niepustą (czyli różną od NULL) to zwraca tę wartość, jeżeli zawiera wartość pustą to zwraca wartość podaną jako drugi argument.

    Wysoka cena jaką płacisz za Oracle wynika z jego niezliczonych możliwości, na przykład: - mechanizm wersjowania danych, który powoduje, że operacje typu READ nie muszą zakładać locków przy odczycie danych dzięki czemu nie muszą czekać na zdjęcie locków typu exclusive zakładanych przez operację typu WRITE - obsługa wszystkich poziomów izolacji zdefiniowanych przez ANSI - Virtual Private Databases – czyli możliwość modyfikowania zapytań SQL na poziomie SZBS dzięki czemu można precyzyjnie ograniczać dostęp do pojedynczych wierszy w tabelach - skalowalność - wydajność - wiele innych, których nie sposób wymienić w jednym tekście

    Oczywiście nie każde zastosowanie wymaga Oracle – jest bardzo dużo nieskomplikowanych systemów, które nie wymagają równoległego dostępu wielu użytkowników do tych samych danych, nie muszą bezproblemowo skalować się na przestrzeni setek lub nawet tysięcy użytkowników itd. W przypadku takich systemów wybór MySQL jest często lepszym wyborem.

    Pozdrawiam,

    Sergio

  21. Avatar Sergio powiedział 5 months later:

    Sorry – wystąpił jakiś problem i do zapytania z funkcją NVL wkradł się błąd. Powinno być:

    SELECT * FROM tab WHERE NVL=’‘

  22. Avatar Sergio powiedział 5 months later:

    Widzę, że jest tutaj jakiś problem z oprogramowaniem, które obsługuje ten blog i następuje usunięcie części zapytania (ochrona przed SQL Injection???). Klauzula WHERE powinna być następująca:

    WHERE NVL = ’’

  23. Avatar Sergio powiedział 5 months later:

    To jeszcze raz:

    WHERE NVL i argumenty (pole, ’’) = (równa się) ’’ (łańcuch pusty)

  24. Avatar Jarosław Zabiełło powiedział 5 months later:

    Poczytałbyś sobie o składni Textile zamiast tak walczyć. Poza tym na dole, po lewej stronie przycisku “submit” masz “Preview comment” więc można podejrzeć wygląd postu przed wysłaniem.

    Znalazłem w necie opis funkcji NVL. Chodziło ci pewnie o zapis
    SELECT * FROM tabl WHERE NVL(field,'') = ''

    A do wstawek kodu można użyć <typo:code> kod</typo:code>

(leave url/email »)

   Pomoc języka formatowania Obejrzyj komentarz