Na początek opiszę proces instalacji pełnej wersji bazy danych Oracle 11g Release 2 w systemie Ubuntu Linux 9.04 32-bit. Instalacja nie jest bardzo złożona, ale pewne fragmenty mogą być problematyczne dla osób, które nie miały nigdy do czynienia z tą bazą danych.
Proces instalacji został zaplanowany tak, aby poznać jak najwięcej narzędzi konfiguracyjnych i dokładnie prześledzić co się dzieje w systemie.
Uwaga:
Użytkowników, którzy nie chcą instalować pełnej wersji bazy Oracle może zainteresować jej okrojona wersja: Oracle Database 10g Express Edition. Nie dość, że istnieje dedykowany instalator dla Debiana/Ubuntu, to dodatkowo może być ona używana do zastosowań komercyjnych.
Podczas przygotowania tego wpisu szczególnie przydatne okazały się następujące strony:
- Installing Oracle 11gR1 on Ubuntu 9.04 Jaunty Jackalope | The Pythian Blog
- Oracle’s Blog » Blog Archive » Install Oracle 11g on Ubuntu 9.0.4
- Install Oracle 11g on Ubuntu Jaunty - Please Don't Rush
Przygotowanie systemu do instalacji bazy
Instalator Oracle niestety nie jest przystosowany dla Ubuntu, dlatego niektóre kroki będą miały na celu upodobnienie tego systemu do RedHata.
Poniższe kroki wykonujemy na koncie administratora.
- Instalacja niezbędnych pakietów:
Instalator może wymagać dodatkowych pakietów do zainstalowania:apt-get update && sudo apt-get dist-upgrade
apt-get install gcc make binutils lesstif2 rpm libmotif3 libaio1 gawk alien ksh - Utworzenie linków symbolicznych:
Instalator Oracle używa pełnych ścieżek niektórych programów systemowych, dlatego należy upewnić się, że znajdują się one w odpowiednim miejscu:ln -s /usr/bin/awk /bin/awk
ln -s /usr/bin/rpm /bin/rpm
ln -s /usr/bin/basename /bin/basenamemkdir /etc/rc.d
for i in 0 1 2 3 4 5 6 S ; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d ; done - Ustawienie powłoki skryptowej:
Instalator Oracle zdecydowanie bardziej preferuje bash'a aniżeli dash'a:cd /bin
ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2009-04-23 14:05 /bin/sh -> dash
ln -sf /bin/bash /bin/sh
ls -l /bin/sh
lrwxrwxrwx 1 root root 9 2009-12-15 19:12 /bin/sh -> /bin/bash - Utworzenie odpowiednich użytkowników i grup:
Aby Ubuntu z punktu widzenia instalatora przypominał RedHata dodajemy odpowiednie grupy i użytkownika oracle:addgroup oinstall
addgroup dba
addgroup nobody
usermod -g nobody nobody
useradd -g oinstall -G dba -p password -d /home/oracle -s /bin/bash oraclemkdir /home/oracle
chown -R oracle:dba /home/oracle - Przygotowanie katalogów:
mkdir -p /u01/app/oracle
chown -R oracle:dba /u01 - Modyfikujemy ustawienia /etc/security/limits.conf:
cd /etc/security/
cp limits.conf limits.conf.original
nano limits.conf
Dodajemy poniższe linie na końcu pliku:oracle soft nproc 2047
oracle hard nproc 16383
oracle soft nofile 1023
oracle hard nofile 65535 - Modyfikujemy ustawienia /etc/sysctl.conf
cd /etc
cp sysctl.conf sysctl.conf.original
nano sysctl.conf
Dodajemy poniższe linie na końcu pliku:fs.file-max = 65535
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
Przeładowanie pliku konfiguracyjnego:sysctl -p
- Restart komputera
Aby mieć pewność, że wszystkie ustawienia zostały poprawnie zatwierdzone w systemie restartujemy komputer (tak przynajmniej zalecały wszystkie poradniki instalacji, z których korzystałem).
Pobranie i instalacja oprogramowania
Pobranie i rozpakowanie instalatora
Te czynności możemy wykonywać jako zwyczajny użytkownik, na którym pracujemy na co dzień
- Pobieramy pełną wersję bazy ze strony: http://www.oracle.com/technology/software/products/database/index.html. Wybieramy wersję dla Linux x86.
- Rozpakowujemy:
unzip linux_11gR2_database_1of2.zip
unzip linux_11gR2_database_2of2.zip
chown -R oracle:dba database - Zmieniamy katalog:
cd database
Uruchomienie instalatora
- Instalację należy przeprowadzić jako użytkownik oracle z prawami administratora:
xhost +
sudo -s
su - oracle - Będzie nam potrzebny tryb graficzny:
DISPLAY=:0.0; export DISPLAY
xhost local:oracle - Przejście do katalogu z rozpakowanym instalatorem:
cd /sciezka/do/instalatora/database/
- Uruchomienie instalatora:
./runInstaller
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 80 MB. Actual 11002 MB Passed
Checking swap space: must be greater than 150 MB. Actual 4024 MB Passed
Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2009-12-15_12-36-28PM. Please wait ...
Opcje instalacji
Poniżej zostały wyróżnione niestandardowe opcje, które polecam zaznaczyć. Pozostałe opcje należy zostawić tak jak zaproponuje instalator.
- step2: Install database software only
- step5: Enterprise Edition (3,95BG)
- step8: Zaznaczamy opcję „Ignore All”
Czynności po instalacji
W ostatnim etapie instalacji jesteśmy proszeni o wykonanie podanego skryptu jako użytkownik root:
/u01/app/oracle/product/11.2.0/dbhome_1/root.sh
Powinniśmy dostać mniej więcej taki komunikat:
Running Oracle 11g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/11.2.0/dbhome_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.
Instalacja listenera
Poniższe czynności wykonujemy jako użytkownik oracle.
- Ustawiamy zmienne systemowe:
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin - Uruchamiamy program:
netca
Instalacja bazy danych
Uruchamiamy program:
dbca
i na poszczególnych etapach instalacji wybieramy następujące opcje:
- step4: Odznaczamy „Configure Enterprise Manager”
- step4: Odznaczamy „Enable automatic maintenance tasks”
- step5: Zaznaczamy „Use the Same Administrative Password for All Accounts”
- step7: Wyłączamy „Specify Flash Recovery Area”
- step8: „Sample schemas”
- step9 - Memory: Pamięć ustawiamy na 250MB, Wyłączamy opcję „Use Automatic Memory Management”
- step9 - Sizing: Processes: 30
- step9 - Character Sets: „Use Unicode”
Komentarz: Powyższe opcje to tylko propozycja - można zostawić domyślne lub wybrać własne. Te opcje zostały ustawione według zaleceń na stronie: Installing Oracle 11gR1 on Ubuntu 9.04 Jaunty Jackalope | The Pythian Blog.
Manualny start bazy danych
Po zrestartowaniu komputera wszelkie próby połączenia się z bazą okażą się daremne - baza nie jest uruchomiona. Aby ją włączyć wykonujemy następujące czynności:
- Logujemy się jako sysdba:
sqlplus '/as sysdba'
SQL*Plus: Release 11.2.0.1.0 Production on Tue Dec 22 20:41:21 2009
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance. - Uruchamiamy instancję bez montowania bazy:
startup nomount;
ORACLE instance started.
Total System Global Area 196681728 bytes
Fixed Size 1335444 bytes
Variable Size 71307116 bytes
Database Buffers 117440512 bytes
Redo Buffers 6598656 bytes
Sprawdzamy stan:select status from v$instance;
STATUS
------------
STARTED - Montujemy bazę:
alter database mount;
Baza danych zostala zmieniona.
Sprawdzamy stan:select status from v$instance;
STATUS
------------
MOUNTED - Otwieramy bazę:
alter database open;
Baza danych zostala zmieniona.
Sprawdzamy stan:select status from v$instance;
STATUS
------------
OPEN
Aby wyłączyć instancję wraz z bazą danych wpisujemy:
shutdown immediate;
Baza danych zostala zamknieta.
Baza danych zostala zdemontowana.
Instancja ORACLE zostala zamknieta.
Automatyczny start bazy danych przy starcie systemu
Wygodniejszym od każdorazowego ręcznego włączania bazy może być takie jej skonfigurowanie, aby startowała razem z systemem. W tym celu
- Logujemy się na konto administratora:
sudo -s
- Edytujemy ostatnią linijkę w pliku /etc/oratab, zamieniając literkę N na Y:
nano /etc/oratab
ORCL:/u01/app/oracle/product/11.2.0/dbhome_1:Y
- Tworzymy następujący plik i zapisujemy do niego poniższą zawartość:
nano /etc/init.d/oracledb
#!/bin/bash
#
# /etc/init.d/oracledb
#
# Run-level Startup script for the Oracle Listener and Instances
# It relies on the information on /etc/oratab
# these are the paths for our base installation
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_OWNR=oracle
export PATH=$PATH:$ORACLE_HOME/bin
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
echo "Oracle startup: cannot start"
exit 1
fi
case "$1" in
start)
# Oracle listener and instance startup
echo -n "Starting Oracle: "
su $ORACLE_OWNR -c "$ORACLE_HOME/bin/lsnrctl start"
su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
touch /var/lock/oracle
echo "OK"
;;
stop)
# Oracle listener and instance shutdown
echo -n "Shutdown Oracle: "
su $ORACLE_OWNR -c "$ORACLE_HOME/bin/lsnrctl stop"
su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
rm -f /var/lock/oracle
echo "OK"
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: `basename $0` start|stop|restart|reload"
exit 1
esac
exit 0 - Przydzielamy prawa do wykonywania dla tego pliku:
chmod a+x /etc/init.d/oracledb
- Uaktualniamy skrypty startowe:
update-rc.d oracledb defaults
- Restartujemy komputer. Baza powinna uruchomić się automatycznie.
Testy
Wszystkie czynności przeprowadzamy na własnym koncie.
Testujemy połączenie z bazą danych
Dodajemy użytkownika, na którym pracujemy do grupy dba:
sudo usermod -G dba -a rafal
Ustawiamy niezbędne zmienne środowiskowe:
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=ORCL
Łączymy się z bazą:
sqlplus '/as sysdba'
i wydajemy polecenie:
SELECT INSTANCE_NAME, VERSION, STATUS FROM V$INSTANCE;
INSTANCE_NAME VERSION STATUS
---------------- ----------------- ------------
ORCL 11.2.0.1.0 OPEN
Odblokowujemy użytkownika Scott
Warto odblokować przykładowego użytkownika Scott i na nim wykonać kilka testów:
sqlplus '/as sysdba'
ALTER USER scott ACCOUNT UNLOCK;
sqlplus scott/tiger
select * from emp;
Enterprise Manager
Enterprise Manager jest narzędziem służącym do diagnozowania i administracji bazą danych Oracle. Można go skonfigurować na dwa sposoby: 1) w kreatorze instalacji bazy danych lub 2) manualnie.
Manualna konfiguracja:
Ustawiamy zmienne systemowe ORACLE_SID i ORACLE_HOME, a następnie uruchamiamy polecenie tworzące repozytorium EM:
cd $ORACLE_HOME/binJeśli wszystko przebiegnie bez problemów możemy przejść na stronę: https://[host]:1158/em/ (np. https://laptop:1158/em/). Ja niestety dostałem błąd:
emca -config dbcontrol db -repos create
INFO: Creating the EM repository (this may take a while) ...
2009-12-17 16:55:07 oracle.sysman.emcp.EMReposConfig invoke
SEVERE: Error creating the repository
Jak sobie poradzić z błędami? Ja musiałem wykonać kilka czynności:
- Najpierw należało odblokować użytkowników DBSNMP i SYSMAN:
sqlplus '/as sysdba'
ALTER USER DBSNMP ACCOUNT UNLOCK;
ALTER USER SYSMAN ACCOUNT UNLOCK; - Usunąć użytkownika MGMT_VIEW:
drop user MGMT_VIEW;
- Zwiększyć liczbę procesów dla Oracle:
show parameter processes
alter system set processes=100 scope=spfile;
Po tej operacji niezbędny jest restart bazy danych:shutdown immediate
startup - Oraz ponownie utworzyć repozytorium:
emca -config dbcontrol db -repos recreate
Po tych czynnościach konfiguracja zakończyła się poprawnie. Problemy prawdopodobnie wynikały z przyjętych ustawień w trakcie tworzenia bazy danych (zablokowani użytkownicy, za mała liczba procesów).
Uruchomienie Managera:
Po restarcie komputera Enterprise Manager jest wyłączony. Aby go uruchomić logujemy się na konto oracle ustawiamy zmienne środowiskowe jak powyżej i wydajemy polecenie:
emctl start dbconsole
Manualnie Managera wyłączamy poleceniem:
emctl stop dbconsole
Komentarz:
- Z niewiadomych mi powodów Enterprise Manager nie chce u mnie działać w Firefoksie - wyświetlana jest biała strona.
- Działa za to bez problemu w Google Chrome.
Oracle SQL Develpoer
Do codziennej pracy warto również zainstalować edytor SQL. Do najbardziej zalecanych dla Ubuntu można zaliczyć TOra (niestety miałem problemy z instalacją) oraz Oracle SQL Develpoer, którego instalacja zostanie opisana.
- Pobieramy wersję instalacyjną ze strony: http://www.oracle.com/technology/products/database/sql_developer/index.html.
- Jest to wersja RPM dlatego będziemy musieli przekonwertować ją do formatu DEB zrozumiałego dla Ubuntu. Instalujemy w tym celu narzędzie alien:
sudo apt-get install alien
- Konwertujemy pakiet RPM na DEB:
sudo alien -k --scripts sqldeveloper*.rpm
- i instalujemy go w systemie:
sudo dpkg -i sqldeveloper*.deb
- Jeśli dostaniemy komunikat:
Oracle SQL Developer
Copyright (c) 1997, 2009, Oracle and/or its affiliates.All rights reserved.
Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ~/.sqldeveloper/jdk - Wykonujemy następujące polecenia:
mkdir -p ~/.sqldeveloper
touch ~/.sqldeveloper/jdk
echo "/usr/lib/jvm/java-6-sun" >> ~/.sqldeveloper/jdk