Archive for category Bazy danych

Instalacja Oracle 11g na RedHacie 5

Krótki opis instalacji Oracle 11g w systemie RHEL 5. Punkt po punkcie tak jak to wyglądało w mojej sytuacji.

  1. Wyłączenie SELinuksa.

    SELinux jakoś do końca nie chciał mi działać z Oraclem. Uparcie nie pozwalał na otwarcie niektórych plików i na uruchomienie bazy danych. Ponieważ moja maszyna nie jest narażona za bardzo na kontakt ze światem zewnętrznym, to po prostu go wyłączyłem na stałe. Najłatwiej to zrobić poprzez edycję pliku /etc/sysconfig/selinux i zmianę wartości parametru SELINUX:

    6
    SELINUX=disabled

    Teraz pozostaje restart maszyny i i SELinux powinien już być wyłączony.

  2. Dodanie nazwy serwera do /etc/hosts.

    Należy się upewnić, że można prawidłowo rozwiązać nazwę serwera, najprościej poprzez umieszczenie odpowiedniego wpisu w pliku /etc/hosts. W moim przypadku wyglądała ona tak:

    4
    192.168.122.50  oracle
  3. Konfiguracja parametrów jądra (wg dokumentacji)

    Można także skonfigurować odpowiednie parametry jądra systemu. Ja pominąłem tek krok, ale dokumentacja go zaleca, więc można do pliku /etc/sysctl.conf dodać takie linie:

    kernel.shmall = 2097152
    kernel.shmmax = 2147483648
    kernel.shmmni = 4096
    # semaphores: semmsl, semmns, semopm, semmni
    kernel.sem = 250 32000 100 128
    net.ipv4.ip_local_port_range = 1024 65000
    net.core.rmem_default = 4194304
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 262144

    Należy pamiętać o tym, aby parametr kernel.shmmax nie był większy niż połowa dostępnej ilości pamięci RAM.

  4. Instalacja dodatkowych bibliotek.

    W przypadku Oracla należy doinstalować kilka dodatkowych pakietów:

    yum install binutils elfutils-libelf glibc glibc-common libgcc \
        libstdc++ make elfutils-libelf-devel glibc-devel gcc gcc-c++ \
        libstdc++-devel unixODBC libaio libaio-devel unixODBC-devel \
        'sysstat*' 'compat-libstdc++*'
  5. Konfiguracja użytkownika dla Oracla.

    Dobrze jest uruchomić serwer na koncie oddzielnego użytkownika, którego należy utworzyć i odpowiednio skonfigurować.

    Dodanie nowego konta wraz z odpowiednimi grupami:

    groupadd oinstall
    groupadd dba
    groupadd oper
    groupadd asmadmin

    useradd -g oinstall -G dba,oper,asmadmin oracle
    passwd oracle

    Ustawienie odpowiednich ograniczeń dla użytkownika oracle, w pliku /etc/security/limits.conf należy umieścić takie linie:

    50
    51
    52
    53
    oracle    soft    nproc   2047
    oracle    hard    nproc   16384
    oracle    soft    nofile  1024
    oracle    hard    nofile  65536

    Należy się jeszcze upewnić, że w pliku /etc/pam.d/system-auth znajduje się taka linia:

    18
    session     required      pam_limits.so

    Ostatnim krokiem będzie zdefiniowanie odpowiednich zmiennych środowiskowych dla użytkownika oracle w pliku /home/oracle/.bash_profile:

    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    export ORACLE_HOSTNAME=oracle
    export ORACLE_BASE=/opt/oracle/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1
    export ORACLE_SID=baza
    export ORACLE_TERM=xterm
    export PATH=/usr/sbin:$PATH
    export PATH=$ORACLE_HOME/bin:$PATH
    export ORA_OWNR="oracle"

    export JAVA_HOME="/etc/alternatives/java_sdk"

    export PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
    export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin

    export LD_LIBRARY_PATH=$ORACLE_HOME/lib
    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib

    export CLASSPATH=$ORACLE_HOME/JRE
    export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
    export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
    export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib

    export THREADS_FLAG=native

    Należy zwrócić w szczególności uwagę na miejsce, gdzie ma zostać umieszczona baza danych Oracle, nazwę serwera czy też użytkownika i odpowiednio je dostosować do własnych potrzeb.

  6. Utworzenie katalogu do instalacja.

    Teraz jeszcze należy utworzyć odpowiedni katalog, w którym zostanie zainstalowana baza danych:

    mkdir -p /opt/oracle
    chown -R oracle:oinstall /opt/oracle
    chmod -R 770 /opt/oracle
  7. Instalacja bazy danych Oracle

    Instalację bazy danych należy wykonać, będąc użytkownikiem oracle. Należy pamiętać, że w czasie instalacji będzie potrzebny dostęp do serwera X Window (jeżeli nie zadziała to przy użyciu komendy su lub sudo zawsze można zalogować się na serwer przy użyciu polecenia ssh -X oracle@localhost).

    Jako użytkownik oracle należy uruchomić skrypt runInstaller. Sprawdzi on środowisko i następnie uruchomi właściwy instalator graficzny. Podczas niego należy odpowiedzieć na szereg pytań, poniżej zrzuty ekranu z mojej instalacji:

    Jednym z ostatnich kroków instalacji jest konieczność uruchomienia dwóch skryptów: orainstRoot.sh oraz root.sh.

    Należy pamiętać, że skrypty te należy uruchomić na uprawnieniach użytkownika root:

    # /opt/oracle/oraInventory/orainstRoot.sh
    Changing permissions of /opt/oracle/oraInventory to 770.
    Changing groupname of /opt/oracle/oraInventory to oinstall.
    The execution of the script is complete
    # /opt/oracle/oracle/product/11.1.0/db_1/root.sh
    Running Oracle 11g root.sh script...

    The following environment variables are set as:
        ORACLE_OWNER= oracle
        ORACLE_HOME=  /opt/oracle/oracle/product/11.1.0/db_1

    Enter the full pathname of the local bin directory: [/usr/local/bin]:
       Copying dbhome to /usr/local/bin ...
       Copying oraenv to /usr/local/bin ...
       Copying coraenv to /usr/local/bin ...


    Creating /etc/oratab file...
    Entries will be added to the /etc/oratab file as needed by
    Database Configuration Assistant when a database is created
    Finished running generic part of root.sh script.
    Now product-specific root actions will be performed.
    Finished product-specific root actions.
  8. Automatyczny start instancji bazy danych

    W pliku /etc/oratab należy zdefiniować, jakie instancje bazy danych będą automatycznie uruchamiane podczas startu bazy danych. W ostatniej kolumnie należy zmienić N na Y:

    1
    baza:/opt/oracle/oracle/product/11.1.0/db_1:Y

    Teraz czas na utworzenie odpowiednich plików startowych:

    • /etc/sysconfig/oracle – definicja zmiennych środowiskowych, używanych w skryptach startowych
      1
      2
      3
      ORACLE_BASE=/opt/oracle/oracle
      ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1
      ORACLE_OWER="oracle"
    • /etc/init.d/oracle – skrypt, który umożliwia uruchomienie i zatrzymanie bazy danych
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      #!/bin/bash
      #
      #       /etc/rc.d/init.d/oracle
      #
      # chkconfig: 345 98 02
      # description: Uruchomienie bazy danych Oracle

      # Source function library.
      . /etc/init.d/functions


      if [ -f /etc/sysconfig/oracle ] ; then
              . /etc/sysconfig/oracle
      fi

      start() {
              echo "Starting Listener: "
              su - $ORACLE_OWER -c "$ORACLE_HOME/bin/lsnrctl start"

              echo "Starting Oracle Database: "
              su - $ORACLE_OWER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"

              return 0
      }

      stop() {
              echo "Shutting down Oracle Database: "
              su - $ORACLE_OWER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"

              echo "Starting Listener: "
              su - $ORACLE_OWER -c "$ORACLE_HOME/bin/lsnrctl stop"

              return 0
      }

      case "$1" in
          start)
              start
              ;;
          stop)
              stop
              ;;
          restart)
              stop
              start
              ;;
          *)
              echo "Usage: oracle {start|stop|restart}"
              exit 1
              ;;
      esac
      exit $?
    • /etc/init.d/em – skrypt, który pozwala na uruchomienie Enterprise Managera
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      #!/bin/bash
      #
      #       /etc/rc.d/init.d/em
      #
      # chkconfig: 345 99 01
      # description: Uruchomienie Enterprise Managera

      # Source function library.
      . /etc/init.d/functions

      if [ -f /etc/sysconfig/oracle ] ; then
              . /etc/sysconfig/oracle
      fi

      start() {
              echo "Starting Enterprise Manager: "
              su - $ORACLE_OWER -c "$ORACLE_HOME/bin/emctl start dbconsole"

              return 0
      }

      stop() {


              echo "Shutting down Enterprise Manager: "
              su - $ORACLE_OWER -c "$ORACLE_HOME/bin/emctl stop dbconsole"

              return 0
      }


      case "$1" in
          start)
              start
              ;;
          stop)
              stop
              ;;
          restart)
              stop
              start
              ;;
          *)
              echo "Usage: oracle {start|stop|restart}"
              exit 1
              ;;
      esac
      exit $?

    Teraz trzeba skonfigurować system, aby uruchamiał skrypty podczas startu:

    chmod +x /etc/init.d/oracle /etc/init.d/em
    chkconfig --add oracle
    chkconfig --add em

    Po tych krokach baza danych oraz EM będą uruchamiane podczas startu serwera. Oczywiście można także uruchomić te aplikacje od razu:

    1
    service oracle start; service em start

Źródła

Tags: ,

Instalacja bazy danych Oracle XE 10g w 64 bitowym systemie Debian lub Ubuntu

Oracle udostępnia darmową wersję swojej bazy danych o nazwie Oracle XE 10g. Posiada ona szereg ograniczeń w stosunku do wersji komercyjnej, ale można jej zarówno używać w małych systemach oraz pozwala na zapoznanie się z samą bazą danych. Oracle udostępnia pakiety instalacyjne swojej bazy danych zarówno dla środowiska Red Hat jak i wywodzących się z Debiana. Niestety, są dostępne wersje tych pakietów tylko dla architektury 32 bitowej, co uniemożliwia przeprowadzenie prostej instalacji w środowisku 64 bitowym.

Na szczęście, nie będzie bardzo źle, wystarczy kilka dodatkowych kroków i powinno się udać.

Krok 1: Pobranie bazy danych

Bazę danych Oracle XE 10g można pobrać ze stron firmy Oracle: Oracle Database Software Downloads: Oracle Database 10g Release 2 (10.2.0.1). Należy zgodzić się tam na warunki licencji (należałoby także się z nią zapoznać) a następnie można pobrać odpowiednie pakiety z bazą danych.

Można także pobrać odpowiedni plik od razu z udostępnianego przez Oracle repozytorium dla Debiana: oracle-xe-universal_10.2.0.1-1.1_i386.deb.

$ wget http://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/oracle-xe-universal_10.2.0.1-1.1_i386.deb

Próba instalacji tego pakietu w środowisku 64 bitowy skończy się takim komunikatem błędu:

# dpkg -i oracle-xe-universal_10.2.0.1-1.1_i386.deb
dpkg: błąd przetwarzania oracle-xe-universal_10.2.0.1-1.1_i386.deb (--install):
 architektura pakietu (i386) nie zgadza się z architekturą systemu (amd64)
Wystąpiły błędy podczas przetwarzania:
 oracle-xe-universal_10.2.0.1-1.1_i386.deb

Krok 2: Instalacja dodatkowych pakietów

Należy zainstalować w systemie także obsługę bibliotek 32 bitowych:

# aptitude install libc6-i386

Pakiet ten może już być zainstalowany.

Dodatkowo należy zainstalować pakiet bc (także może już znajdować się w systemie):

# aptitude install bc

Należy także zainstalować 32 bitową wersję pakietu libaio.

Dla Ubuntu Lucid najnowszą wersję pakietu można pobrać ze strony Download Page for libaio1_0.3.107-3ubuntu2_i386.deb on Intel x86 machines.

Dla Debiana Lenny najnowszą wersję pakietu można pobrać ze strony Download Page for libaio1_0.3.107-3_i386.deb on Intel x86 machines.

Instalacja tego pakietu jest możliwa przy użyciu takiej komendy (powoduje instalację pakietu i ignorowanie architektury):

# dpkg -i --force-architecture libaio1_*_i386.deb

Podczas instalacji zostanie wyświetlone ostrzeżenie o niezgodności architektury, ale nie powinny wystąpić inne problemy.

Krok 3: Instalacja Oracle XE 10g

Po niezbędnych krokach przygotowawczych czas na instalację samej bazy danych:

# sudo dpkg -i --force-architecture oracle-xe-universal_10.2.0.1-1.1_i386.deb

Po zainstalowaniu pakietu pozostaje go jeszcze skonfigurować przy użyciu polecenia:

# /etc/init.d/oracle-xe configure

Najpierw zostaniemy poproszeni o wskazanie portu HTTP, poprzez który będziemy mogli połączyć się z interfejsem do zarządzania bazą danych, domyślnie jest przyjmowany port 8080. W moim przypadku port ten często jest zajęty przez inne aplikacji, więc zmieniłem go na 8081:

Specify the HTTP port that will be used for Oracle Application Express [8080]:8081

Teraz należy podać domyślny port na którym będzie nasłuchiwała baza danych na przy chodzące połączenia z aplikacji, w przypadku Oracle jest to port 1521:

Specify a port that will be used for the database listener [1521]:

Należy podać hasła do konta administracyjnego:

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration:
Confirm the password:

Ostatnie pytanie pozwoli na podjęcie decyzji, czy Oracle ma startować podczas uruchamiania komputera.

Z tego co widzę w skryptach startowych, jeżeli wyłączymy tę opcję, to pozbędziemy się możliwości korzystania ze skryptu /etc/init.d/oracle-xe w celu zatrzymywania i startowania bazy danych (ręcznego, nie podczas uruchamiania systemu). Dlatego też proponuję tutaj zostawić odpowiedź y nawet w sytuacji, gdy nie chcemy aby baza danych startowała za każdym razem i po instalacji przeczytać punkt o 6.

Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:y

Nastąpi teraz konfiguracja bazy danych, po której powinna już działać. Pozostaje tylko połączyć się ze wskazanym adresem i zalogować do bazy danych.

Krok 4: Konfiguracja zmiennych środowiskowych

Można jeszcze dodać do ścieżki poleceń katalog z plikami wykonywalnymi Oracla.

Jeżeli jesteśmy jedynym użytkownikiem komputera, można je zdefiniować w pliku ~/.bashrc danego użytkownika. W przypadku gdy użytkowników jest kilku, warto utworzyć plik /etc/profile.d/oracle.sh. Plik ten będzie wczytywany przy logowaniu każdego użytkownika. Oczywiście, należy zwrócić uwagę odpowiednie uprawnienia do tego pliku:

# chmod 644 /etc/profile.d/oracle.sh

Zawartość pliku oracle.shlub też parametry, które należy dopisać w profilu danego użytkownika:

1
2
3
4
5
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export ORACLE_SID=XE
export PATH

Pozostaje się teraz zalogować ponownie (lub wykonać plik w ramach sesji) aby zmienne zaczęły działać.

Krok 6: Zatrzymywanie i uruchamianie bazy danych Oracle XE 10g

Jeżeli baza danych ma nie być uruchamiana podczas startu systemu, najlepiej jest usunąć odpowiednie linki z katalogów rc?.d:

# rm /etc/rc?.d/S??oracle-xe

Uruchomienie serwera jest możliwe poprzez wydanie komendy:

# /etc/init.d/oracle-xe start

Zatrzymanie serwera natomiast następuje po użyciu polecenia:

# /etc/init.d/oracle-xe stop

Pozostałe opcje można zobaczyć po użyciu polecenie:

# /etc/init.d/oracle-xe
Usage: /etc/init.d/oracle-xe {start|stop|restart|force-reload|configure|status|enable|disable}

Po tych operacjach powinniśmy dysponować działającą bazą Oracle XE 10g w środowisku 64 bitowym.

Źródła

Tags: , ,

Wielkość liter w nazwach tabel w MySQL

Baza danych MySQL na Linuksach jest wrażliwa na wielkość znaków w nazwach tabel. Czyli dwa takie zapytania:

1
2
3
SELECT FROM tabela;

SELECT FROM TABELA;

Może się okazać, że wykonanie jednego z nich spowoduje wyrzucenie komunikatu, mówiącego że podana tabela nie istnieje.

Co można zrobić w takiej sytuacji:

  1. Zmodyfikować aplikację, tak aby odwoływała się do tabel tak, jak są nazywane w bazie danych.
    Fajne, ale raz dużo pracy, dwa nie zawsze mamy kody źródłowe, trzy nie chcemy nikomu za to płacić.
  2. Zmodyfikować konfigurację serwera bazy danych oraz bazę danych
    Łatwiejsze niż modyfikacja kodu źródłowego, ale dotyczyć będzie wszystkich baz danych oraz aplikacji z niej korzystających.

Jak zmodyfikować konfigurację serwera aby nie było problemów z wielkością znaków w tabelach?

  1. Zmiana wielkości znaków w tabelach
    Pierwszym krokiem jest zmiana wielkości znaków nazw tabel we wszystkich bazach danych na małe litery. Pomocny może być ten skrypt, produkujący odpowiednie zapytania, które należy następnie wykonać (autor Anders Eriksson):

    SELECT CONCAT('rename table ', TABLE_NAME, ' to ' , LOWER(TABLE_NAME) , ';')
    FROM information_schema.`tables`
    WHERE table_schema = 'nazwa_bazy_danych';

    Wynik zapytania należy wykonać na bazie danych, spowoduje to zmianę nazw tabel na pisane tylko małymi znakami.

    Małe ostrzeżenie: Jeżeli w bazie danych istnieją dwie tak samo nazywające się tabele ale zapisane różną wielkością znaków, to MySQL zgłosi błąd podczas wykonywania powyższej operacji.

  2. Modyfikacja pliku konfiguracyjnego /etc/mysql/my.cnf
    Ostatnim krokiem jest odpowiednia konfiguracji bazy danych, tak aby zawsze już były używane małe litery do oznaczania tabel. Należy do pliku /etc/mysql/my.cnf, w sekcji mysqld dodać linię z parametrem lower_case_table_names

    31
    32
    [mysqld]
    lower_case_table_names=1

Od tej pory nie powinno już być problemów z różną wielkością znaków na nazwach tabel. Więcej informacji na temat tej opcji konfiguracyjnej można znaleźć na stronach MySQL.

Źródła

Tags: ,