<!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=&quot;$PATH:$ORACLE_HOME/bin&quot;
</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&gt; connect internal
  	Connected.
  	SVRMGR&gt; 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&gt; @makedb
  	&lt;loads of messages&gt;
  	SVRMGR&gt; exit
  	Server Manager complete.
</code>
</p>
   
<sect1> 데이터베이스 구동시키기<p>
	우선은 수동으로(이후에는 자동으로 구동될 것이다.)데이터베이스를 구동시킬필요가 있다. 
	Oracle 데이터베이스를 시작하기위해서는 &quot;connect internal&quot;을 한후에 &quot;startup&quot;이라는 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&gt; connect internal
       Connected.
       SVRMGR&gt; 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&gt; 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&gt; connect internal
       Connected.
       SVRMGR&gt; shutdown
       Database closed.
       Database dismounted.
       ORACLE instance shut down.
       SVRMGR&gt; 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&gt; alter user system identified by &lt;newpassword&gt;;
 	User altered.
 	SQL&gt; alter user sys identified by &lt;newpassword&gt;;
 	User altered.
 	SQL&gt; 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&gt; create user &lt;user&gt; identified by &lt;psw&gt;
         2  default tablespace users
         3  temporary tablespace temp;
      User created.
      SQL&gt; grant connect, resource to &lt;user&gt;
      Grant succeeded.
      SQL&gt; 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 &lt;user&gt;/&lt;password&gt;
</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 = &lt;INSERT HOST NAME OF SERVER HERE&gt; )
                 (Port = 1521)
               )
               (ADDRESS =
                 (COMMUNITY = tcp.world)
                 (PROTOCOL = TCP)
                 (Host = &lt;INSERT HOST NAME OF SERVER HERE&gt; )
                 (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=&lt;INSERT HOST&gt;)
                               (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 = &quot;listener&quot;
       LOG_FILE_LISTENER = &quot;listener&quot;
       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 &quot;help&quot; for information.
      	LSNRCTL&gt; 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&gt; 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 &quot;help&quot; for information.
 	LSNRCTL&gt; stop
  	Connecting to
	(ADDRESS=(PROTOCOL=tcp)
		 (HOST=magic.com)
	         (PORT=1521)
		 (COMMUNITY=UK_SUP_TCPIP)
	)
  	The command completed successfully
  	LSNRCTL&gt; 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파일의 설정을 변경 할 수 있는 위저드
	형태의 인터페이스를 갖는다.
	&quot;Add Database Alias&quot;를 선택하고, 커서가 위치한 곳에 &quot;Database alias&quot;에
	대한 이름을 입력한다. 
	이 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 &amp; 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 &amp; 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 &quot;$1&quot; in
    start)
          echo -n &quot;Starting Oracle Databases: &quot;
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          date +&quot;! %T %a %D : Starting Oracle Databases as part of system up.&quot; 
	  &gt;&gt; /var/log/oracle
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          su - oracle -c dbstart &gt;&gt; /var/log/oracle
          echo &quot;Done.&quot;
          echo -n &quot;Starting Oracle Listeners: &quot;
          su - oracle -c &quot;lsnrctl start&quot; &gt;&gt; /var/log/oracle
          echo &quot;Done.&quot;
          echo &quot;&quot;
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          date +&quot;! %T %a %D : Finished.&quot; &gt;&gt; /var/log/oracle
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          touch /var/lock/subsys/oracle
          ;;
    stop)
          echo -n &quot;Shutting Down Oracle Listeners: &quot;
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          date +&quot;! %T %a %D : ShutDown Oracle Databases as part of system down.&quot; 	  &gt;&gt; /var/log/oracle
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          su - oracle -c &quot;lsnrctl stop&quot; &gt;&gt; /var/log/oracle
          echo &quot;Done.&quot;
          rm -f /var/lock/subsys/oracle
          echo -n &quot;Shutting Down Oracle Databases: &quot;
          su - oracle -c dbshut &gt;&gt; /var/log/oracle
          echo &quot;Done.&quot;
          echo &quot;&quot;
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          date +&quot;! %T %a %D : Finished.&quot; &gt;&gt; /var/log/oracle
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          ;;
    restart)
          echo -n &quot;Restarting Oracle Databases: &quot;
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          date +&quot;! %T %a %D : Restarting Oracle Databases as part of system up.&quot; 	  &gt;&gt; /var/log/oracle
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          su - oracle -c dbstop &gt;&gt; /var/log/oracle
          su - oracle -c dbstart &gt;&gt; /var/log/oracle
          echo &quot;Done.&quot;
          echo -n &quot;Restarting Oracle Listeners: &quot;
          su - oracle -c &quot;lsnrctl stop&quot; &gt;&gt; /var/log/oracle
          su - oracle -c &quot;lsnrctl start&quot; &gt;&gt; /var/log/oracle
          echo &quot;Done.&quot;
          echo &quot;&quot;
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          date +&quot;! %T %a %D : Finished.&quot; &gt;&gt; /var/log/oracle
          echo &quot;----------------------------------------------------&quot;
	  &gt;&gt; /var/log/oracle
          touch /var/lock/subsys/oracle
          ;;
    *)
          echo &quot;Usage: oracle {start|stop|restart}&quot;
          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을
	수행하는 것 같다.
  	&lt;7&gt;[22]615 sysconf(34)
  	&lt;7&gt;iBCS2 unsupported sysconf call 34
  	&lt;7&gt;[22]615 sysconf error return linux=-22 -&gt; ibcs=22 &lt;Invalid argument&gt;
  	&lt;7&gt;[24]615 sysconf(34)
  	&lt;7&gt;iBCS2 unsupported sysconf call 34
  	&lt;7&gt;[24]615 sysconf error return linux=-22 -&gt; ibcs=22 &lt;Invalid argument&gt;
 문제해결 : 다음과 같은 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>