From: Dmitry A. Koptev <dimez@nm.ru>
Newsgroups: email
Date: Mon, 3 Oct 2003 14:31:37 +0000 (UTC)
Subject: Установка Oracle9i на Slackware-9.1
Оригинал: http://dimez.forexpf.ru/docs/oracle/
Есть рабочий сервер с установленным Slackware-9.1 (можно и на
Slackware-9.0 - разницы практически нет) Переустанавливать linux на
сервере на тот, который сертифицирован Oracle, нет ни возможности, ни
желания :-)
По умолчанию, та версия Oracle(9.2.0.1), которую можно утянуть с
офсайта (http://www.oracle.com/) поставить не получается - при
установке возникают 3 ошибки линкования и СУБД после этого нормально
не работает. После вдумчивого искания на всяческих поисковиках, во
всяческих группах, "курения" документации и общения с
друзьями-ораклистами (и не только с друзьями - просто с ораклистами
:-), примерно нащупал решение - решил проверить на рабочей машине
Итак, начнём...
Скачиваем с сайта Oracle (http://www.oracle.com/) собственно сам oracle (три
файла солидного размера). Для скачки требуется бесплатная регистрация на сайте.
Скачиваем (если есть доступ на металинк, если нет - берём у друзей)
файл p3095277_9204_LINUX.zip (тоже солидного размера).
Если используете OLAP - надо достать(с металинка или у друзей) файл
p3084634_9204_LINUX.zip - исправляет ошибки, допущенные в 9.2.0.4
патчсете(я не пользую{пока} - не ставил)
Сам процесс установки описывать не буду - он описан на множестве
сайтов, к примеру
http://tutorial.ru/tutorials/13.html
http://www.puschitz.com/InstallingOracle9i.html
Скажу лишь, что применительно для Slackware я проделал:
2) в стартовые скрипты(rc.local например) прописал:
if [ -f /etc/sysctl.conf ]; then
/sbin/sysctl -p /etc/sysctl.conf
fi
3) в домашний каталог пользователя oracle положил следующие файлы
.bashrc(с точкой в начале :-)
---cut-.bashrc---
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/9.2.0
ORACLE_SID=some_sid ### поправить на нужный
ORACLE_TERM=xterm
NLS_LANG=AMERICAN
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
PATH=$PATH:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/network/lib
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
DISPLAY=localhost:0.0
export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH ORACLE_TERM NLS_
LANG ORA_NLS33 DISPLAY
---end-of-.bashrc---
и сделал симлинки
ln -s .bashrc .bash_login
ln -s .bashrc .bash_profile
После почти успешной - с 3-мя ошибками, которые мы игнорируем(то есть,
нажимаем "Ignore" :-) выходим из инсталлера.
Дополнение
Одну ошибку, связанную с линкованием, можно вылечить в момент
установки.
"Когда появится окно с ошибкой линкования, нужно отредактировать файл
$ORACLE_HOME/ctx/lib/env_ctx.mk:
добавить в строке начинающийся с INSO_LINK= новое значение $(LDLIBFLAG)dl
т.е.
INSO_LINK = -L$(CTXLIB) $(LDLIBFLAG)m $(LDLIBFLAG)dl $(LDLIBFLAG)sc_ca
$(LDLIBFLAG)sc_fa $(LDLIBFLAG)sc_ex $(LDLIBFLAG)sc_da
$(LDLIBFLAG)sc_ut $(LDLIBFLAG)sc_ch $(LDLIBFLAG)sc_fi $(LLIBCTXHX)
$(LDLIBFLAG)c -Wl,-rpath,$(CTXHOME)lib $(CORELIBS) $(COMPEOBJS)
нажать кнопку повторить в модальном окне."
За дополнение большое спасибо Askhat A. Nadjibev.
Разархивируем куда-нибудь первый патчсет(3095277), после чтения
README.html из патчсета делаем следующие вещи
root@db # su - oracle
oracle@db % cd $ORACLE_BASE/oui/bin/linux
oracle@db % ln -s libclntsh.so.9.0 libclntsh.so
oracle@db % cd $ORACLE_HOME/bin
oracle@db % ./runInstaller
выбираем путь в разархивированному патчсету(конкретно к products.jar
из него)
Сначала патчим сам инсталлер до версии 2.2.0.18.0(что в патчсете),
дожидаемся окончания установки инсталлера, выходим из него, запускаем
заново, проверяем на всякий случай версию(а вдруг не обновилась :-)
Затем выбираем установку самого патчсета(в меню он называется
"Oracle9iR2 Patch Set 3 9.2.0.4.0") и устанавливаем его
После установки по идее надо запустить Oracle Database Assistant, но
мы его сначала подправим :-)
Открываем в любимом редакторе файл $ORACLE_HOME/bin/dbca, и в самом
конце приводим к такому виду
#if [ -f /etc/rac_on ]; then
# Run DBCA
$JRE_DIR/bin/jre -native -DORACLE_HOME=$OH...
#else
# Run DBCA
#$JRE_DIR/bin/jre -DORACLE_HOME=$OH...
#fi
То есть, комментируем "лишнее" :-)
Можно и сделать проще - создать файл /etc/rac_on, т.е.
# touch /etc/rac_on
После этого можно смело запускать dbca и создавать базу
Да, при создании базы желательно залочить пользователя SCOTT :-))
После создания базы заходим(из-под пользователя oracle) в каталог
$ORACLE_HOME/dbs
Вот и всё
Дополнение
После накатывания 9.2.0.4-патчсета ломается экспорт
Лечится это следующими действиями:
1) Оракл переводится в startup migrate мод
2) @?/rdbms/admin/catpatch.sql
3) Делается shutdown и startup в normal моде
4) connect / as sysdba 5) alter system set "_system_trig_enabled"=false;
6) @?/rdbms/admin/catnools.sql (если у Вас в системе нет этого скрипта,
возьмите его тут (file://localhost/usr/local/home/mc/file/docs/BASE/done/0/catnools.sql)
7) @?/rdbms/admin/utlrp.sql 8) @?/rdbms/admin/prvtxdb.plb После этого
экспорт будет работать. P.S. Не надо меня просить выслать вам патчи -
у меня у самого нет доступа на металинк
Rem
Rem $Header: catnools.sql 02-may-2001.15:36:35 srtata Exp $
Rem
Rem catnools.sql
Rem
Rem Copyright (c) Oracle Corporation 2001. All Rights Reserved.
Rem
Rem NAME
Rem catnools.sql -
Rem
Rem DESCRIPTION
Rem This script drops the OLS product and all of its LBACSYS
Rem objects from a database instance. All OLS policies will
Rem also be dropped but user tables will not have their OLS
Rem policy columns automatically dropped.
Rem
Rem NOTES
Rem Must be run as SYSDBA.
Rem
Rem MODIFIED (MM/DD/YY)
Rem srtata 05/02/01 - Add error handling.
WHENEVER SQLERROR EXIT;
BEGIN
-- Check the user who is executing this script.
if sys_context('userenv','session_user') != 'SYS' then
RAISE_APPLICATION_ERROR(-20000,
'Execute the script as user SYS as SYSDBA');
end if;
END;
/
WHENEVER SQLERROR CONTINUE;
-- drop OLS database triggers.
DROP TRIGGER LBACSYS.lbac$after_drop;
DROP TRIGGER LBACSYS.lbac$startup;
DROP TRIGGER LBACSYS.lbac$logon;
DROP TRIGGER LBACSYS.lbac$after_create;
DROP TRIGGER LBACSYS.lbac$before_alter;
-- copy system.aud$ back to sys.aud$.
DROP SYNONYM aud$;
CREATE TABLE SYS.aud$ AS SELECT * FROM SYSTEM.aud$;
CREATE INDEX SYS.i_aud1 ON SYS.aud$(sessionid, ses$tid);
DROP table SYSTEM.aud$;
-- cleanup OLS by removing any roles, contexts,or synonyms
-- owned by LBACSYS.
DECLARE
CURSOR lbacroles IS
SELECT granted_role
FROM dba_role_privs
WHERE grantee = 'LBACSYS'
AND granted_role like '%_DBA'
AND admin_option = 'YES';
CURSOR lbaccontexts IS
SELECT namespace
FROM dba_context
WHERE schema = 'LBACSYS';
CURSOR lbacsynonyms IS
SELECT synonym_name
FROM dba_synonyms
WHERE table_owner = 'LBACSYS';
rolename VARCHAR2(30);
BEGIN
-- drop roles
FOR r IN lbacroles LOOP
dbms_output.put_line('Dropping role ' || r.granted_role );
BEGIN
EXECUTE IMMEDIATE 'DROP ROLE ' || r.granted_role;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Unable to drop role ' || r.granted_role);
END;
END LOOP;
-- drop contexts
FOR c IN lbaccontexts LOOP
dbms_output.put_line('Dropping context ' || c.namespace);
BEGIN
EXECUTE IMMEDIATE 'DROP CONTEXT ' || c.namespace;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Unable to drop context ' || c.namespace);
END;
END LOOP;
-- drop synonyms
FOR s IN lbacsynonyms LOOP
dbms_output.put_line('Dropping public synonym ' || s.synonym_name);
BEGIN
EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM ' || s.synonym_name;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Unable to drop synonym ' || s.synonym_name);
END;
END LOOP;
END;
/
-- now remove lbacsys account and it's content
DROP USER LBACSYS CASCADE;
DELETE FROM exppkgact$ WHERE PACKAGE = 'LBAC_UTL';
COMMIT;