티스토리 뷰

먼저 리스너를 닫는다.
오라클 계정으로 로그인

[oracle@BOARDDB ~]$ lsnrctl stop

일반적인 경우엔 리스너가 한개 떠있지만 특별한 경우를 위해 여러개를 띄우는 경우가 있다.

다음은 확인 방법 이다.

[oracle@BOARDDB admin]$ ps -ef | grep lsnr
oracle   25193     1  0 May17 ?        00:00:00 /oracle/product/9.2.0/bin/tnslsnr SLISTENE2 -inherit
oracle   29304     1  1 May17 ?        09:40:51 /oracle/product/9.2.0/bin/tnslsnr LISTENER -inherit
oracle   30993     1  0 May17 ?        00:00:00 /oracle/product/9.2.0/bin/tnslsnr SLISTENE1 -inherit
oracle   23368  9412  0 13:27 pts/0    00:00:00 grep lsnr
[oracle@BOARDDB admin]$

여러개가 떠있을 경우
$lsnrctl stop SLISTENE1
$lsnrctl stop SLISTENE2

모든 리스너 프로세스를 닫는다.

그리고 나서 오라클에 접속한 모든 클라이언트(여기엔 웹서버도 포함이다.)
ex)
만약 게시판 DB에 접근 하는것이라면 miboard2,miboard10,miboard11,miboard13,...etc 등의 아파치 서버를 모두 내린다.


[oracle@BOARDDB admin]$ sqlplus /nolog

SQL*Plus: Release 9.2.0.8.0 - Production on Thu Jun 7 13:30:15 2007

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SQL> conn as sysdba
Enter user-name: sys
Enter password:
Connected.
SQL> desc v$session;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
SADDR                                              RAW(4)
SID                                                NUMBER
SERIAL#                                            NUMBER
AUDSID                                             NUMBER
PADDR                                              RAW(4)
USER#                                              NUMBER
USERNAME                                           VARCHAR2(30)
COMMAND                                            NUMBER
OWNERID                                            NUMBER
TADDR                                              VARCHAR2(8)
LOCKWAIT                                           VARCHAR2(8)
STATUS                                             VARCHAR2(8)
SERVER                                             VARCHAR2(9)
SCHEMA#                                            NUMBER
SCHEMANAME                                         VARCHAR2(30)
OSUSER                                             VARCHAR2(30)
PROCESS                                            VARCHAR2(12)
MACHINE                                            VARCHAR2(64)
TERMINAL                                           VARCHAR2(30)
PROGRAM                                            VARCHAR2(48)
TYPE                                               VARCHAR2(10)
SQL_ADDRESS                                        RAW(4)
SQL_HASH_VALUE                                     NUMBER
PREV_SQL_ADDR                                      RAW(4)
PREV_HASH_VALUE                                    NUMBER
MODULE                                             VARCHAR2(48)
MODULE_HASH                                        NUMBER
ACTION                                             VARCHAR2(32)
ACTION_HASH                                        NUMBER
CLIENT_INFO                                        VARCHAR2(64)
FIXED_TABLE_SEQUENCE                               NUMBER
ROW_WAIT_OBJ#                                      NUMBER
ROW_WAIT_FILE#                                     NUMBER
ROW_WAIT_BLOCK#                                    NUMBER
ROW_WAIT_ROW#                                      NUMBER
LOGON_TIME                                         DATE
LAST_CALL_ET                                       NUMBER
PDML_ENABLED                                       VARCHAR2(3)
FAILOVER_TYPE                                      VARCHAR2(13)
FAILOVER_METHOD                                    VARCHAR2(10)
FAILED_OVER                                        VARCHAR2(3)
RESOURCE_CONSUMER_GROUP                            VARCHAR2(32)
PDML_STATUS                                        VARCHAR2(8)
PDDL_STATUS                                        VARCHAR2(8)
PQ_STATUS                                          VARCHAR2(8)
CURRENT_QUEUE_DURATION                             NUMBER
CLIENT_IDENTIFIER                                  VARCHAR2(64)

SQL> select MACHINE from v$session;

MACHINE
----------------------------------------------------------------
miboard11
miboard12
miboard11
miboard12
miboard13
miboard10
miboard10
miboard13
miboard2
miboard13
miboard11
miboard11
miboard10

24 rows selected.

만약 오라클 세션에 아직도 붙어 있는 호스트가 있는지 확인한다.

만약 없다면 shutdown immediate 로 오라클 인스턴스를 닫는다.

SQL>shutdown immediate

oracle$ps -ef | grep ora
명령어로 오라클 관련 프로세스가 살아 있는지 확인한다.

없다면 제대로 오라클 서버를 내린것이다.

그리고 절대 개발자나 SE가 DB를 내려서는 안된다. 위의 경우와 같이 모든 환경이 닫힌 상태에서 오라클 서버를 내려야지 그렇지 않은 경우에서
오라클 서버만 내릴경우 트랜잭션 처리가 제대로 이루어 지지 않을수도 있다.

정말 하늘이 두쪽나는 급한일이 아니라면 오라클에 대한 이해를 제대로 가지고 있는지 생각해보고 내리길 바란다.

만약 DBA가 있다면 DBA에게 작업요청을 하는것이 욕을 적게 먹는 길이라 생각한다.