(Ошибки) Установка Oracle 10g на Ubuntu 12.04

Установка 32х битной версии на 64х битный хост

Лучше этого не делать, так как во время установки возникает множество неразрешимых ошибок, поэтому лучше найдите 64х битную версию инсталятора.

Не выполнять проверку операционной системы

Для этого запустим скрипт инсталятора так:

./runInstaller -ignoreSysPrereqs

Ошибка в файле $ORACLE_HOME/sqlplus/lib/ins_sqlplus.mk

Для того чтобы обойти ошибку установки базы нужно в файле $ORACLE_HOME/sqlplus/lib/env_sqlplus.mk добавить строку:

EXPDLIBS=-lclntsh

Ошибка в файле $ORACLE_HOME/network/lib/ins_net_server.mk

Необходимо в файле $ORACLE_HOME/network/lib/env_network.mk заменить строку

LINK=$(PURECMDS) gcc $(LDFLAGS) $(COMPSOBJS)

на

LINK=$(PURECMDS) gcc -Wl,--no-as-needed $(LDFLAGS) $(COMPSOBJS)

Ошибка в файле $ORACLE_HOME/rdbms/lib/ins_rdbms.mk

sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.5 /usr/lib64/

Убедимся что в /lib64 так же имеется необходимая либа для сборки:

~$ ls -l /lib64/libgcc_s.so.1
lrwxrwxrwx 1 root root 35 Apr 25 16:17 /lib64/libgcc_s.so.1 -> /lib/x86_64-linux-gnu/libgcc_s.so.1
~$ 

Затем выполним команды:

sed -i 's/^(s*$(MK_EMAGENT_NMECTL))s*$/1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk

sed -i 's/^($LD $LD_RUNTIME) ($LD_OPT)/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/bin/genorasdksh

sed -i 's/^(s*)($(OCRLIBS_DEFAULT))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/srvm/lib/ins_srvm.mk

sed -i 's/^(TNSLSNR_LINKLINE.*$(TNSLSNR_OFILES)) ($(LINKTTLIBS))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/network/lib/env_network.mk

sed -i 's/^(ORACLE_LINKLINE.*$(ORACLE_LINKER)) ($(PL_FLAGS))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk

sed -i 's/^(KFED_LINKLINE.*$(S0MAIN)) ($(SSKFEDED))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk

sed -i 's/^(KFOD_LINKLINE.*$(S0MAIN)) ($(SSKFODED))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk

sed -i 's/^(KFNDG_LINKLINE.*$(S0MAIN)) ($(SSKFNDGED))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk

sed -i 's/^(AMDU_LINKLINE.*$(S0MAIN)) ($(SSKFMUED))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk

Затем в любом текстовом редакторе нужно выполнить правки файла $ORACLE_HOME/rdbms/lib/env_rdbms.mk

строку:

ORACLE_KERNEL_LIBS=$(LLIBSKGTR) $(LLIBPERFSRV) $(NAETTOBJS) $(CONFIG)
$(SPOBJS) $(LLIBSERVER) $(LLIBODM) $(LLIBSAGE)

заменить на:
ORACLE_KERNEL_LIBS=$(LLIBSKGTR) $(LLIBPERFSRV) $(NAETTOBJS) $(CONFIG)

$(SPOBJS) -Wl,--no-as-needed $(LLIBSERVER) $(LLIBODM) $(LLIBSAGE)

Ошибка в файле $ORACLE_HOME/sysman/lib/ins_emdb.mk

Error in invoking target 'collector' of makefile '/opt/oracle/product/10g/dbname_1/sysman/lib/ins_emdb.mk'

Игнорируем данную ошибку, так как функция, которая компилится судя по всему нигде и не используется.

Ошибка при первом запуске "Oracle Database Configuration Assistant" (shared memory)

Для того чтобы разрешить группе dba, в которую входит наш пользователь oracle иметь возможность писать в расширенные участки памяти достаточно узнать UID группы dba из файла /etc/group после чего добавить в файл /etc/sysctl.conf следующего вида строку:

vm.hugetlb_shm_group = тут_UID_группы

Затем нужно принудительно применить новые правила:

sysctl -p 

ORA-00371: not enough shared pool memory, should be atleast 143364812 bytes 

При запуске база пишет такое вот сообщение и не запускается. Исправить это можно отредактировав файл $ORACLE_HOME/dbs/init<тут_SID_базы>.ora, допишем строку если её нет:

*.shared_pool_size=293601280