<!doctype linuxdoc system> <article> <title> Oracle Database HOWTO <author>Paul Haigh, <url url="mailto:paul@nailed.demon.co.uk" name="paul@nailed.demon.co.uk"> <trans> (번역:조홍래 <url url="mailto:chorr@uriel.net" name="chorr@uriel.net">) <tdate> v1.1, 20 June 1998 <abstract> 리눅스 시스템에서 오라클 데이터베이스 서버 설치/설정 가이드 </abstract> <toc> <sect> 개요 <sect1> 문서버전<p> <verb> v0.1 - 21 Feb 1998 - Paul Haigh - 오리지날 문서 버젼. v0.2 - 01 Mar 1998 - Paul Haigh - 문서교정. v1.0 - 10 Mar 1998 - Paul Haigh - LDP 등록. v1.1 - 20 Jun 1998 - Paul Haigh - 문제점해결 부분추가. </verb> </p> <sect1> 저작권 <p> 리눅스 HOWTO 문서들의 저작권은 각 문서의 저자들에게 있다. 리눅스 HOWTO는 이 저작권이 유지되는 한 모든 물리적 매체나 전자 매체를 통해 문서 전체 혹은 부분으로서 재생산 및 배포될 수 있다. 상업적인 재배포도 허용되며 장려된다. 하지만 이런 경우에는 저자에게 알려주기 바란다. 모든 번역이나 파생적인 작업들, 리눅스 HOWTO 문서들을 결합하는 작업들은 이 저작권 안내에 따라야 한다. 이는 여러분이 HOWTO를 이용한 작업을 하고 나서 그 배포에 부가적인 제한조건을 달아서는 안된다는 뜻이다. 어떤 경우에는 이 규칙에 대한 예외도 허용될 수 있으므로, 아래 주소를 통해서 리눅스 HOWTO 조정자와 접촉하기 바란다. 간단히 말해서 우리는 이 정보를 가능한 한 많은 경로를 통해서 보급하기를 바란다. 하지만 우리는 HOWTO 문서에 대한 저작권이 유지되기를 바라며, HOWTO를 재배포하는 모든 계획을 통보받기를 바란다. </p> <sect1> 책임에 대한 포기 <p> 필자는 될수 있는 한 올바른 정보를 제공하기 위하여 노력하였지만, 부족한 정보의 결과로서 일어나는 일에 대해서는 책임을 질 수 없다. 필자는 HOWTO 문서의 정보에 대해서 보증할 수없으며, HOWTO문서의 정보를 가지고 수행하는 일련의 작업에 대해서도 책임질 수 없다. </p> <sect1> HowTo의 목적<p> 이 Howto문서에서는 리눅스 머신에서 동작하는 오라클데이베이스의 기본적인설치와 기본적인 관리부분을 다룰 것이다. 특별히 오라클서버/SQL*Net 설치및 SQL*Net 클라이언트 설정부분을 다룬다. 이 문서는 오라클 베이스의 세부관리 또는 사용에 대한 깊이있는 부분을 다루지 않으며, 이와 같은 내용을 찾 으려고 한다면 O'Reilly또는 다른 출판사에서 나온 책들을 살펴보기 바란다. 이문서에서는 Unix에서 동작하는 오라클프로그램의 개발에 대해서도 언급하지 않는다. 이부분에 대해 필요하다면 SCO로 부터 SCO개발시스템 (OpenServer 5.X)를 구입할 것을 권장한다. SCO 개발시스템은 <url url="http://www.sco.com" name="www.sco.com">에서 $19라는 저렴한 가격으로 구입할 수 있다. HOWTO 문서를 따라하기 위해 필요한 몇가지 항목에 대해 언급한다. ?Oracle Server CD for SCO OpenServer (version 7.3.3.0.0) 이것은 합법적인 복사본이어야한다. 기억할 것은 오라클은 영리를 추구하기위한 회사이며 이 제품에 대한 책임있다. 만약 SQL 기반의 다른 데이터베이스를 사용하기 원한다면 PostgresSQL또는 그와 유사한 데이터베이스를 사용하면 된다. Oracle Web Site로부터 60일 평가판을 통해 설치 해 볼수도 있다. 필자 개인적으로 이런 방법으로 설치해보진 않았으며 이것은 완전히 검증된 방법은 아니다. <bf> Linux Server</bf> 이것마저 설치되어있지 않다면 문서를 읽지도 않았을것이다. <bf>Kernel 2.0.30+ </bf> 다른 Kernel에 대해서는 보장할 수가 없다. <bf>iBCS </bf> iBCS가 설치되어하는 것은 매우중요한 부분이고 가능한한 가장최근의 버전을 사용할 것을 추천한다. (필자는 레드햇의 iBCS-2.0-10.i386.rpm을 사용하고 있다.) <bf>대용량디스크 </bf> 600메가바이트이상이 적당한 디스크 용량일 것이다. 이 용량을 모두를 사용할 필요가 없다고 생각한다면 더 적은 양을 사용해도 가능하다. 하지만 개인적으로 추천하고 싶지는 않다. <bf>32Mb + Ram </bf> Ram을 많이 사용한다고 느끼겠지만 오라클 데이타베이스는 복잡한 종류의 소프트웨어라는 것을 기억해야한다. 그렇다고 해서 오라클이나 필자가 더 적 은 램에서 오라클 데이타베이스 작동을 하지않는다는 것은 아니다. 단지, 추천할 만한 램의 용량이 32메가 바이트라는것이다. </p> <sect1> 앞으로의 개선사항<p> 이 HOWTO 문서에서는 오라클 데이타베이스 서버 자체에 대해서는 다루지 않는다. 그러나, 시간이 허락된다면 다음 HOWTO 버전에서 아래의 항목들을 포함시킬것이다. <itemize> <item>Oracle 라이브러리를 사용한 Oracle Pro* 프로그램의 개발 <item>다른 오라클서버버전 설치 <item>오라클 웹서버의 설치 <item>Oracle Kernel Relink </itemize> </p> <sect> 오라클 소프트웨어 설치 <sect1> 서버준비사항 <sect2>오라클사용자 등록<p> 오라클데이터베이스를 사용하기 위해서는 오라클데이터베이스를 유지/관리 할수 있는 사용자가 있어야만한다. 우리가 오라클커널(추후에 자세한 설명)를재설정하려는 의도는 없기 때문에 우리는 사용자이름과 그룹이름을 위한 오라클에서 제공하는 설정을 받아들여야한다. 이 부분은 사용자 ORACLE과 그룹 DBA로 지정되어 있다. <enum> <item> Root로써 로그인 <item> oracle 유저와 dba 그룹 생성 <code> $ groupadd dba $ useradd oracle </code> <item> 유저 oracle을 위한 home 디렉토리 생성 <code> $ mkdir /home/oracle $ mkdir /home/oracle/7.3.3.0.0 (Version of Oracle) $ chown -R oracle.dba /home/oracle </code> </enum> </p> <sect1> CDROM으로 설치<p> 아쉽게도 SCO계열의 디스크에서의 Oracle Installer는 제대로 동작하지 않을 것이다. Core Dump부터 시스템 정지까지 다양한 문제를 경험하였다. 결과적으 로 우리는 CDROM에서 파일들을 복사하여 압축을 풀 필요가 있다. (CDROM이 시스템에 마운트되었는지 확인) <enum> <item> Oracle로 로그인 <item> /home/oracle/7.3.3.0.0디렉토리로 이동 <item> CDROM에서 설치파일을 복사 <code> $ cp -a /mnt/cdrom/* . </code> <item> CDROM에 있는 Oracle관련파일의 압축을 풀기 <code> $ find . -name *_ -exec ~/7.3.3.0.0/orainst/oiuncomp {} \; </code> </enum> </p> <sect1> 설치작업 <sect2> Root를 위한 작업<p> Oracle을 사용할 각 사용자를 위한 /etc/profile나 .profile에 다음줄을 추가한다. <code> # Oracle Specific ORACLE_HOME=/home/oracle/7.3.3.0.0 ORACLE_SID=orcl ORACLE_TERM=vt100 export ORACLE_HOME ORACLE_SID ORACLE_TERM # Alter path for Oracle PATH="$PATH:$ORACLE_HOME/bin" </code> 우리는 또한 소유권한자를 바꿀 필요가 있고 Oracle의 권한을 편리하게 사용할 수 있도록 추가한다. <code> $ chown root.root $ORACLE_HOME/bin/osh $ chmod u+s $ORACLE_HOME/bin/osh </code> </p> <sect2> Oracle을 위한 작업 <p> 정확한 동작을 확인하기 위한 Oracle관련 파일의 권한을 변경한다. <code> $ chmod +x $ORACLE_HOME/bin/* $ chmod u+s $ORACLE_HOME/bin/oracle </code> Oracle관련 툴들은 $ORACLE_HOME/tool_name/mesg 디렉토리에 있는 메시지들을 요구한다. 그래서 msg_ship디렉토리에서 mseg디렉토리로 msb관련파일들을 옮긴다. <code> $ mv $ORACLE_HOME/plsql/mesg/mesg_ship/* $ORACLE_HOME/plsql/mesg/. $ mv $ORACLE_HOME/rdbms/mesg/mesg_ship/* $ORACLE_HOME/rdbms/mesg/. $ mv $ORACLE_HOME/svrmgr/mesg/mesg_ship/* $ORACLE_HOME/svrmgr/mesg/. </code> 만약 다음 디렉토리가 존재하지 않으면 생성한다. <code> $ mkdir $ORACLE_HOME/rdbms/log $ mkdir $ORACLE_HOME/rdbms/audit $ mkdir $ORACLE_HOME/network/log </code> </p> <sect2>당신이 삭제할 수 있는 부분들 <p> 다음 디렉토리는 안전하게 삭제될수 있는 것들이다. <verb> $ORACLE_HOME/guicommon2/ $ORACLE_HOME/ctx/ $ORACLE_HOME/md/ $ORACLE_HOME/mlx/ $ORACLE_HOME/precomp/ $ORACLE_HOME/slax/ </verb> </p> <sect>데이터베이스 생성 <p>Oracle서버를 설치한 지금부터 설치를 시험할 데이터베이스를 설치할 필요가 있다. 만약 Oracle 7.2.x나 이전 버전을 사용한다면, 아래부분에 있는 문제해결지침을 읽기바란다. </p> <sect1>설치관련 파일 설치<p> $ORACLE_HOME/dbs/init.ora를 $ORACLE_HOME/dbs/initorcl.ora로 복사한다. <code> $ cd $ORACLE_HOME/dbs $ cp init.ora initorcl.ora </code> 다음줄을 생성한 파일에 추가한다. <code> db_name = orcl COMPATIBLE=7.3.3.0.0 </code> </p> <sect1> 데이터베이스 설치 스크립트를 생성<p> $ORACLE_HOME/dbs디렉토리에 makedb.sql의 이름으로 파일을 생성한다. <code> connect internal startup nomount set echo on spool makedb.log create database orcl maxinstances 1 maxlogfiles 8 datafile '$ORACLE_HOME/dbs/orcl_syst_01.dbf' size 40M reuse logfile '$ORACLE_HOME/dbs/orcl_redo_01.dbf' size 1M reuse, '$ORACLE_HOME/dbs/orcl_redo_02.dbf' size 1M reuse, '$ORACLE_HOME/dbs/orcl_redo_03.dbf' size 1M reuse; @$ORACLE_HOME/rdbms/admin/catalog.sql create tablespace rollback datafile '$ORACLE_HOME/dbs/orcl_roll_01.dbf' size 8.5M reuse; create tablespace temp datafile '$ORACLE_HOME/dbs/orcl_temp_01.dbf' size 5M reuse temporary; create tablespace users datafile '$ORACLE_HOME/dbs/orcl_user_01.dbf' size 10M reuse; create rollback segment r1 tablespace rollback storage ( optimal 5M ); alter rollback segment r1 online; connect system/manager @$ORACLE_HOME/rdbms/admin/catdbsyn.sql connect internal @$ORACLE_HOME/rdbms/admin/catproc.sql connect system/manager @$ORACLE_HOME/sqlplus/admin/pupbld.sql spool off exit </code> </p> <sect1> 데이터베이스 설치 스크립트를 실행<p> svrmgrl명령을 수행한 후 스크립트를 실행한다. <code> $ cd $ORACLE_HOME/dbs $ svrmgrl Oracle Server Manager Release 2.3.3.0.0 - Production Copyright (c) Oracle Corporation 1994, 1995. All rights reserved. Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production SVRMGR> connect internal Connected. SVRMGR> startup nomount ORACLE instance started. Total System Global Area 4313312 bytes Fixed Size 41876 bytes Variable Size 4140364 bytes Database Buffers 122880 bytes Redo Buffers 8192 bytes SVRMGR> @makedb <loads of messages> SVRMGR> exit Server Manager complete. </code> </p> <sect1> 데이터베이스 구동시키기<p> 우선은 수동으로(이후에는 자동으로 구동될 것이다.)데이터베이스를 구동시킬필요가 있다. Oracle 데이터베이스를 시작하기위해서는 "connect internal"을 한후에 "startup"이라는 command를 실행해야 한다. <code> $ svrmgrl Oracle Server Manager Release 2.3.3.0.0 - Production Copyright (c) Oracle Corporation 1994, 1995. All rights reserved. Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production SVRMGR> connect internal Connected. SVRMGR> startup ORACLE instance started. Total System Global Area 4313316 bytes Fixed Size 41876 bytes Variable Size 4140368 bytes Database Buffers 122880 bytes Redo Buffers 8192 bytes Database mounted. Database opened. SVRMGR> exit Server Manager complete. </code> </p> <sect1> 데이터베이스 중지시키기 <p> Oracle데이터베이스를 중지시키기않고 Linux서버를 재실행시키는 것은 데이터베이스를 파괴시킬 수 있는 큰 위험이 있다는 것을 명심해야 한다. 그러므로,Linux shutdown명령을 사용하기전에 데이터베이스를 중지시키는 것이 바람직한것이다. <code> $ svrmgrl Oracle Server Manager Release 2.3.3.0.0 - Production Copyright (c) Oracle Corporation 1994, 1995. All rights reserved. Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production SVRMGR> connect internal Connected. SVRMGR> shutdown Database closed. Database dismounted. ORACLE instance shut down. SVRMGR> exit Server Manager complete. </code> </p> <sect1> 기본사용자 생성<p> 데이터베이스가 생성되면서 자동적으로 두 개의 특별한 사용자계정이 생성된다. 다음에 그 부분을 명시한다. <code> Username Password SYSTEM MANAGER SYS change_on_install </code> 이러한 사용자계정은 전형적으로 데이터베이스를 위한 기본적인 데이터딕셔너리정보를 유지하기 위한 것이다. 가능한한 빠른시간내에 기본적인으로 지정된 암호를 바꾸는 것이 좋다. 이러한 부분을 다음과 같은 과정으로 변경된다. <code> sqlplus system/manager SQL*Plus: Release 3.3.3.0.0 - Production on Sat Feb 21 12:43:33 1998 Copyright (c) Oracle Corporation 1979, 1996. All rights reserved. Connected to: Oracle7 Server Release 7.3.3.0.0 - Production Release SQL> alter user system identified by <newpassword>; User altered. SQL> alter user sys identified by <newpassword>; User altered. SQL> exit; Disconnected from Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production </code> system/manager라는 Oracle 사용자 계정은 UNIX시스템에서의 root를 사용하는 것과 유사하기 때문에 우리는 문제를 발생시키는 것을 최소화하기 위해 되도록 적은 권한을 갖는 사용자를 생성할 필요가 있다. (사용자를 생성하기 전에 데이터베이스를 실행시키는 것을 기억하라) SQL*PLUS에 연결하고 사용자를 생성한다. <code> $ sqlplus system/manager SQL*Plus: Release 3.3.3.0.0 - Production on Sat Feb 21 12:43:33 1998 Copyright (c) Oracle Corporation 1979, 1996. All rights reserved. Connected to: Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production SQL> create user <user> identified by <psw> 2 default tablespace users 3 temporary tablespace temp; User created. SQL> grant connect, resource to <user> Grant succeeded. SQL> exit Disconnected from Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production </code> 시스템에 새로운 사용자계정을 생성하였기 때문에 새로운 계정을 가지고 시스템에 로그인 할수 있다. Oracle데이터베이스에 로그인하기 위해서는 다음과 같다. <code> $ sqlplus <user>/<password> </code> 이부분이 에러메세지없이 수행된다면, 성공적으로 오라클 데이타베이스를 설치한것이다. 이 서버가 아닌 다른 호스트에서 이 오라클 데이타베이스에 접근 하지 않는다면 모든 작업은 완료된것이다. 그러나, 대부분 사람들은 네트워크를 이용하여 원격으로 데이타베이스 서버에 접속하길 원할것이다. 그렇게 하기 위해서는 다음과 같은 과정을 수행해야한다. </p> <sect>서버에 SQL*Net을 설정하기 <p> 모든 이러한 부류의 파일들은 Oracle 네트워크에 관련된 소프트웨어(SQL*Net,aka Net8 for Oracle8)를 설정한다. 이러한 파일들은 $ORACLE_HOME/network/admin디렉토리안에 서버로써 생성되어져야 한다. </p> <sect1>tnsnames.ora <p> TNSNAMES.ORA파일은 연결 가능한 데이타베이스 인스턴스들을 기술하여 준다. 새로이 생성된 데이터베이스 인스턴스를 위해 아래부분과 같이 추가한다. <code> orcl.world = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = tcp.world) (PROTOCOL = TCP) (Host = <INSERT HOST NAME OF SERVER HERE> ) (Port = 1521) ) (ADDRESS = (COMMUNITY = tcp.world) (PROTOCOL = TCP) (Host = <INSERT HOST NAME OF SERVER HERE> ) (Port = 1526) ) ) (CONNECT_DATA = (SID = ORCL) ) ) </code> </p> <sect1> listener.ora <p> LISTENER.ORA파일은 다른 시스템에 연결하는 것에 관련된 부분을 기술하고 서버 listener을 위해 요구되는 다른 설정을 포함한다. listener이름, listener주소, listener에 의해 제공되는 데이터베이스, 설정매개변수등을 또한 포함한다. 다음에 한 예가 있다. <code> # Name of listener and addresses to listen on LISTENER = ( ADDRESS_LIST = (ADDRESS = (PROTOCOL=tcp) (HOST=<INSERT HOST>) (PORT=1521) (COMMUNITY=UK_SUP_TCPIP) ) (ADDRESS = (PROTOCOL=ipc) (KEY=700) (COMMUNITY=UK_SUP_TCPIP) ) ) # List of services served by this listener SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=orcl) (ORACLE_HOME=/home/oracle/7.3.3.0.0) ) ) # Start of configuration parameters. TRACE_LEVEL_LISTENER=OFF TRACE_FILE_LISTENER = "listener" LOG_FILE_LISTENER = "listener" CONNECT_TIMEOUT_LISTENER = 10 STOP_LISTENER = YES DBA_GROUP = dba </code> </p> <sect1> sqlnet.ora <p> SQLNET.ORA파일은 네트워크의 특별한 연결지점(node)에 대한 설정을 포함한다. 이것은 데이터베이스와 listener의 수와는 상관이 없다. 이 파일에서 가장 중요한 부분은 Dead Connection Timeout 설정변수이다.Dead Connection Timeout은 데이터베이스 인스턴스에 접수되는 각각의 프로세스를 체크하고, 계속적인 응답에 관련된 클라이언트를 확인한다. 클라이언트(어떠한 형태의)가 응답이 되지 않는다면 Oracle 서버의 실행중인 프로세스는 중지된다. 이것은 많은 수의 클라이언트가 데이터베이스에 접근하려할 때 매우 유용한다. 특히, Oracle데이터베이스로부터 정확히 빠져나가는데 실패하는 클라이언트들이 많이 존재할 가능성이 있는 개발기간에 적용이 된다고 볼 수 있다. 아래부분에 당신이 사용할 sqlnet.ora파일의 예가 있다. <code> TRACE_LEVEL_CLIENT = OFF sqlnet.expire_time = 30 # The number of seconds between client checks. names.default_domain = world name.default_zone = world </code> </p> <sect1>Listener을 실행시키고 종료하기 <p> listener와 SQL*Net의 설정을 끝마쳤으므로, 네트워크 소프트웨어를 사용하여 데이터베이스에 접근할 수 있다.(데이터베이스에 직접 연결을 하기전에, 우리는 원격 클라이언트 시스템에서 접근하는 것을 시험할 것이다.) 위의 설정을 사용하여 listener을 실행시킨다. <code> $ lsnrctl LSNRCTL for SCO System V/386: Version 2.3.3.0.0 - Production on 23-FEB-98 20:38:25 Copyright (c) Oracle Corporation 1994. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> start Starting /home/oracle/7.3.3.0.0/bin/tnslsnr: please wait... TNSLSNR for SCO System V/386: Version 2.3.3.0.0 - Production System parameter file is /home/oracle/7.3.3.0.0/network/admin/listener.ora Log messages written to /home/oracle/7.3.3.0.0/network/log/listener.log Listening on: (ADDRESS=(PROTOCOL=tcp)(DEV=6)(HOST=192.168.1.1)(PORT=1521)) Listening on: (ADDRESS=(PROTOCOL=ipc)(DEV=10)(KEY=700)) Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=magic.com)(PORT=1521) (COMMUNITY=UK_SUP_TCPIP)) STATUS of the LISTENER </code> <code> Alias LISTENER Version TNSLSNR for SCO System V/386: Version 2.3.3.0.0 - Production Start Date 23-FEB-98 20:38:50 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security OFF SNMP ON Listener Parameter File /home/oracle/7.3.3.0.0/network/admin/listener.ora Listener Log File /home/oracle/7.3.3.0.0/network/log/listener.log Services Summary... orcl has 1 service handler(s) The command completed successfully LSNRCTL> exit </code> listener을 중지시키기 위해서는 다음과 같다. <code> $ lsnrctl LSNRCTL for SCO System V/386: Version 2.3.3.0.0 - Production on 23-FEB-98 20:43:20 Copyright (c) Oracle Corporation 1994. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> stop Connecting to (ADDRESS=(PROTOCOL=tcp) (HOST=magic.com) (PORT=1521) (COMMUNITY=UK_SUP_TCPIP) ) The command completed successfully LSNRCTL> exit </code> 명시된 hostname를 위한 IP주소를 반환하지 않는 DNS설정을 갖는다면, listener을 실행시키고, 중지시킬 때에 약간의 시간이 소요된다.(2-3분, DNS timeout 변수에 관련되어) 이러한 경우에는 걱정하지 말고, 인내하라. 기다리라. </p> <sect>클라이언트 환경 설정 <sect1> 윈도우환경 클라이언트 <p> 최근 버젼의 Oracle Client Software을 사용하는 PC에서의 SQL*Net 설정은 매우 쉽다. 모든 부분이 동작하는 클라이언트 설치를 수행하는 가장 좋은(쉬운) 방법은 Oracle에서 제공하는 SQL*Net Easy Configuration 툴을 이용하는 것이다. 이 툴은 tnsnames.ora와 sqlnet.ora파일의 설정을 변경 할 수 있는 위저드 형태의 인터페이스를 갖는다. "Add Database Alias"를 선택하고, 커서가 위치한 곳에 "Database alias"에 대한 이름을 입력한다. 이 alias는 데이터베이스 인스터스를 참조할 이름이고, 인스턴스 이름(이러한 경우에는 orcl)과 같은 이름이어야 한다. 프로토콜로써 TCP/IP를 선택하고, 데이터베이스 시스템의 hostname와 데이터베이스의 인스턴스 이름을 입력한다. 완료되었다. 그러나, SQL*Net Easy Configuration Tool이 없다고 걱정하지 말라. 서버에 존재하는 곳과 같은 클라이언트 시스템에서 $ORACLE_HOME/network/admin디렉토리에 tnsnames.ora와 sqlnet.ora파일을 생성한다. 이것은 서버에서(어떤 의미에서는 항상 좋은 생각인)와 같은 alias를 지원할 것이다. </p> <sect1> Unix 클라이언트 <p> UNIX 클라이언트는 윈도우 클라이언트와 매우 다르지 않다. Oracle에서 제공하는 Network Manager이 있다면, 위에서 언급한 내용과 같은 방법으로 하면 된다. 만약 그렇게 할 수 없다면, 서버에 존재하는 $ORACLE_HOME/network/admin디렉토리에 있는 파일들의 설정과 같은 것을 이용하면 된다. </p> <sect>자동 시작과 중지 <sect1> dbstart & dbstop <p> Oracle 데이터베이스의 자동 시작과 중지는 Oracle에서 제공하는 파일인 dbstart와 dbstop를 이용하여 설정(버전 7.3.3.0.0)할 수 있다. 이러한 파일들은 동작(비록 dbstart와 dbshut파일을 바꿀수 있지만, 옮겨질 수 있다.)할 수 있는 etc/oratab 파일의 존재여부에 의존한다. /etc/oratab 파일의 형식은 다음과 같다. <code> SID:ORACLE_HOME:AUTO </code> 예) <code> orcl:/home/oracle/7.3.3.0.0:Y leaveup:/home/oracle/7.3.2.1.0:N </code> </p> <sect1> init.d & rc.d <p> 리눅스 시스템의 시작과정이나 종료과정을 변형하여 데이타베이스를 시작시키고 종료시킬수 있다. 이것은 매우쉽지만, 어떠한 Linux(slackware, debian, redhat, etc)시스템을 사용하느냐에 따라 변경될수 있다는 것을 필자는 지적한다. 이 문서에서는 Redhat Linux 5.0에서 동작하는 예를 보여줄 것이다. 자신의 Linux 시스템에 따라 수정하기위해서는 자신의 Linux 시스템 문서 자료를 참고한다. (비록 그러한 것이 Unix 시스템의 Sys V 계열을 위한 것에 적용되더라도) 우선, 우리는 /etc/rc.d/init.d 디렉토리에 있는 dbshut와 dbstart를 실행할 스크립트를 생성할 필요가 있다. <code> #!/bin/sh # # /etc/rc.d/init.d/oracle # Description: Starts and stops the Oracle database and listeners # See how we were called. case "$1" in start) echo -n "Starting Oracle Databases: " echo "----------------------------------------------------" >> /var/log/oracle date +"! %T %a %D : Starting Oracle Databases as part of system up." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log/oracle su - oracle -c dbstart >> /var/log/oracle echo "Done." echo -n "Starting Oracle Listeners: " su - oracle -c "lsnrctl start" >> /var/log/oracle echo "Done." echo "" echo "----------------------------------------------------" >> /var/log/oracle date +"! %T %a %D : Finished." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log/oracle touch /var/lock/subsys/oracle ;; stop) echo -n "Shutting Down Oracle Listeners: " echo "----------------------------------------------------" >> /var/log/oracle date +"! %T %a %D : ShutDown Oracle Databases as part of system down." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log/oracle su - oracle -c "lsnrctl stop" >> /var/log/oracle echo "Done." rm -f /var/lock/subsys/oracle echo -n "Shutting Down Oracle Databases: " su - oracle -c dbshut >> /var/log/oracle echo "Done." echo "" echo "----------------------------------------------------" >> /var/log/oracle date +"! %T %a %D : Finished." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log/oracle ;; restart) echo -n "Restarting Oracle Databases: " echo "----------------------------------------------------" >> /var/log/oracle date +"! %T %a %D : Restarting Oracle Databases as part of system up." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log/oracle su - oracle -c dbstop >> /var/log/oracle su - oracle -c dbstart >> /var/log/oracle echo "Done." echo -n "Restarting Oracle Listeners: " su - oracle -c "lsnrctl stop" >> /var/log/oracle su - oracle -c "lsnrctl start" >> /var/log/oracle echo "Done." echo "" echo "----------------------------------------------------" >> /var/log/oracle date +"! %T %a %D : Finished." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log/oracle touch /var/lock/subsys/oracle ;; *) echo "Usage: oracle {start|stop|restart}" exit 1 esac </code> 이 파일이 실제적으로 정확히 당신의 시스템에서 데이터베이스를 중지하고 실행시키는지를 확인해야 한다. 에러메세지를 위한 /var/log/oracle인 log 파일을 확인하라. 다음 명령들은 실행수준 2,3,4에 해당하는 데이테베이스를 실행시는는 것을 확인 시켜줄 것이다. <code> $ ln -s ../init.d/oracle /etc/rc.d/rc2.d/S99oracle $ ln -s ../init.d/oracle /etc/rc.d/rc3.d/S99oracle $ ln -s ../init.d/oracle /etc/rc.d/rc4.d/S99oracle </code> 시스템을 재 부팅하거나, 재 실행시킬때에 데이터베이스를 중지시키기위해서 우리는 다음과 같은 연결(link)이 필요한다. <code> $ ln -s ../init.d/oracle /etc/rc.d/rc0.d/K01oracle # Halting $ ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle # Rebooting </code> </p> <sect>다른 부분들 <sect1>지능형 에이전트 <p> Oracle Intelligent Agent을 필요로 한다면, 환경설정의 변화없이 가능하다. IA를 실행하기 위해서는 다음과 같다. <code> $ lsnrctl dbsnmp_start </code> IA를 중지시키기 위해서는 다음과 같다. <code> $ lsnrctl dbsnmp_stop </code> 성공을 나타내거나 Intelligent Agent를 실행하거나, 중지하는 어떠한 메시지도 출력하지 않는다. 인텔리전트 메니저는 오라클데이타베이스 관리 클라이언트 소프트웨어인 Enterprise Manager와 연결하기위한 것이다. 확인하는 방법은 오라클 Enterprise Manager에서 할 수 있다. </p> <sect>문제해결 <p> 여러 가지 다양한 문제해결 실마리(hints)들은 다음과 같다. </p> <sect1> Oracle 7.2.x를 사용할 때, 나는 데이터베이스를 생성할 수 없다.<p> 7.2.x 제품중에서 Oracle에서 제공되는 이러한 파일들은 병렬서버환경을 구축하려는 것을 시도하려는 것은 정확하지 않다. 제공되는 init.ora파일은 다음과 같은 줄의 내용을 포함한다. <code> # define parallel server (multi-instance) parameters ifile = ora_system:initps.ora </code> 문제를 해결하기 위해서는 단순히 주석처리를 하면된다. <code> # define parallel server (multi-instance) parameters #ifile = ora_system:initps.ora </code> </p> <sect1> 3.4.x.버전에서 svrmgrl실행중 segmentation 오류를 얻었다.<p> 이러한 문제들은 많은 사람들에게서 알려졌다. Gerald Weber <url url="mailto:gerald_weber@master.co.at" name="gerald_weber@master.co.at">가 해결하였다. <code> 안녕 Paul, 당신의 도움에 우선 감사한다. 문제는 iBCS-emulator 자체이다. Oracle시스템이 iBCS의 현재 버전에서 지원하지 않는 sysconf-calls을 수행하는 것 같다. <7>[22]615 sysconf(34) <7>iBCS2 unsupported sysconf call 34 <7>[22]615 sysconf error return linux=-22 -> ibcs=22 <Invalid argument> <7>[24]615 sysconf(34) <7>iBCS2 unsupported sysconf call 34 <7>[24]615 sysconf error return linux=-22 -> ibcs=22 <Invalid argument> 문제해결 : 다음과 같은 diff-pach를 iBCS-source.apply에 적용한다 --- sysconf.c Sun Apr 19 19:19:15 1998 +++ sysconf.c.ori Sun Apr 19 19:28:45 1998 @@ -60,7 +60,6 @@ #define _SC_JOB_CONTROL 5 #define _SC_SAVED_IDS 6 #define _SC_VERSION 7 -#define _SC_HACK_FOR_ORACLE 34 #define _SC_PAGESIZE 11 @@ -97,11 +96,6 @@ case _SC_SAVED_IDS: { return (1); } - - case _SC_HACK_FOR_ORACLE: { - return (1); - } - case _SC_PAGESIZE: { return PAGE_SIZE; </code> </p> <sect>도와주신 분들 <p>이문서는 Bob Withers( <url url="mailto:bwit@pobox.com" name="bwit@pobox.com">)가 작성한 문서를 기본으로 하였고, Georg Rehfeld(<url url="mailto:rehfeld@wmd.de" name="rehfeld@wmd.de">)와 David Mansfield( <url url="mailto:david@claremont.com" name="david@claremont.com">)가 제공한 정보를 추가하였습니다. Bob Withers, Mark Watling( <url url="mailto:mwatling@mjw-ltd.demon.co.uk" name="mwatling@mjw-ltd.demon.co.uk">), Peter Sodhi(<url url="mailto:petersodhi@unn.unisys.com" name="petersodhi@unn.unisys.com">)과 Greg Hankins(<url url="mailto:greg.hankins@cc.gatech.edu" name="greg.hankins@cc.gatech.edu">)가 문서를 검증하였습니다. 함께 조사하고 문서작업을 해준 모든 사람들에게 감사합니다. 추가 주석과 조언을 해준 Bob Withers 과 Mark Watling 에게 특별히 감사합니다. </p> </article>