행위

"오라클 rac 시작 종료"의 두 판 사이의 차이

DB CAFE

2번째 줄: 2번째 줄:
  
 
   
 
   
1.GRID & DB 기동 및 종료
+
= 1.GRID & DB 시작 및 종료 =
  
① 기동
+
== 시작 ==
 
- 데이터베이스 시작 절차
 
- 데이터베이스 시작 절차
  
12번째 줄: 12번째 줄:
 
:4. DB 인스턴스 시작 : 한 노드에서 명령어 실행(수동실행시)
 
:4. DB 인스턴스 시작 : 한 노드에서 명령어 실행(수동실행시)
  
# CRS는 RAC를 구성하는 각 노드 및 각종 리소스를제어하는 프로세스이다.  
+
=== ① CRS 시작 ===
# CRS의 기동은 root권한으로 되어야 한다.  
+
# CRS는 RAC를 구성하는 각 노드 및 각종 리소스를 제어하는 프로세스.  
# 서버 재부팅 시 자동 기동된다.  
+
# CRS의 시작은 '''root권한''' 으로 되어야 한다.  
 +
# 서버 재부팅 시 자동 시작된다.
 +
 
 +
수동 시작 방법.  
  
아래 내용은 수동으로 기동하는 방법이다. 
 
 
*DB 서버 각각의 노드에서 "root" 유저로 실행한다.
 
*DB 서버 각각의 노드에서 "root" 유저로 실행한다.
  
=>노드#1
+
==== CRS 시작 ====
 +
: crsctl start crs -- 각각 노드에서
 +
 
 +
<> RAC노드#1
 
<source lang=shell>
 
<source lang=shell>
 
# cd /gridhome/grid/bin
 
# cd /gridhome/grid/bin
</source>
 
<source lang=shell>
 
 
# ./crsctl start crs
 
# ./crsctl start crs
 
</source>
 
</source>
 
    
 
    
  
=>노드#2
+
<> RAC노드#2
 
<source lang=shell>
 
<source lang=shell>
 
# cd /gridhome/grid/bin
 
# cd /gridhome/grid/bin
</source>
 
 
<source lang=shell>
 
 
# ./crsctl start crs
 
# ./crsctl start crs
 
</source>
 
</source>
 
    
 
    
 
+
==== CRS 상태확인 ====
CRS의 주요 프로세스는 아래와 같으며, CRS 상태확인은 crsctl check crs 으로 가능하다.
+
crsctl check crs  
  
 
<source lang=shell>
 
<source lang=shell>
 
$ps -ef | grep "d\.bin" | grep -v grep
 
$ps -ef | grep "d\.bin" | grep -v grep
 
</source>
 
</source>
 
+
 
 
<source lang=shell>
 
<source lang=shell>
 
$crsctl check crs
 
$crsctl check crs
 
CRS-4638: Oracle High Availability Services is online
 
CRS-4537: Cluster Ready Services is online
 
CRS-4529: Cluster Synchronization Services is online
 
CRS-4533: Event Manager is online
 
 
</source>
 
</source>
 
    
 
    
  
② CRS Application 기동
+
=== ② CRS Application(nodeapp) 시작 ===
 
+
- CRS시작 시 자동 시작.  
- 위의 2.1.1에서 CRS기동 시 자동 기동된다. 아래내용은 수동으로 기동하는 방법이다.
 
- CRS를 구성하는 어플리케이션은 아래 명령어로 기동한다.  
 
 
 
  
 +
수동 시작 방법.
 +
==== nodeapps1,2 실행 ====
 
* DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
 
* DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
 
<source lang=sql>
 
<source lang=sql>
$srvctl start nodeapps -n HOSTNAME
+
$srvctl start nodeapps -n HOSTNAME1
 
</source>
 
</source>
 
<source lang=sql>
 
<source lang=sql>
$srvctl start nodeapps -n HOSTNAME
+
$srvctl start nodeapps -n HOSTNAME2
 
</source>
 
</source>
 
    
 
    
  
③ Listener 기동
+
=== ③ Listener 시작 ===
  
- 위의 2.1.1에서 CRS기동 시 자동 기동된다. 아래내용은 수동으로 기동하는 방법이다.
+
- CRS시작 시 자동 시작.  
- LISTENER는 아래 명령어로 기동한다. 
+
 
 +
수동 시작 방법.
 +
 
 +
==== LISTENER 시작 명령 ====
 +
: srvctl start listener -n HOSTNAME1
  
 
* DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
 
* DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
 
<source lang=shell>
 
<source lang=shell>
$srvctl start listener -n HOSTNAME
+
$srvctl start listener -n HOSTNAME1
 
</source>
 
</source>
  
 
<source lang=shell>
 
<source lang=shell>
$srvctl start listener -n HOSTNAME
+
$srvctl start listener -n HOSTNAME2
 
</source>
 
</source>
 
    
 
    
④ DB Instance 기동
+
=== ④ DB Instance 시작 ===
  
- 위의 2.1.1에서 CRS기동 시 자동 기동된다. 아래내용은 수동으로 기동하는 방법이다.
+
- CRS시작 시 자동 시작.  
- DB인스턴스는 아래 명령어로 기동한다. 
+
 
 +
수동 시작 방법.
 +
 
 +
==== DB인스턴스 실행 명령어 ====
 +
: srvctl start database -d 디비명
  
 
*DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
 
*DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
94번째 줄: 96번째 줄:
 
</source>
 
</source>
 
    
 
    
⑤ CRS Application/Listener/DB Instance확인
+
=== ⑤ CRS Application/Listener/DB Instance확인 ===
 +
 
 +
==== Application/Listener/DB Instance확인 명령어 ====
 +
: crsctl status res -t
  
 
<source lang=shell>
 
<source lang=shell>
100번째 줄: 105번째 줄:
 
</source>
 
</source>
  
--------------------------------------------------------------------------------
+
- 중요 resource
 
 
NAME TARGET STATE SERVER STATE_DETAILS
 
 
 
--------------------------------------------------------------------------------
 
 
 
Local Resources
 
 
 
--------------------------------------------------------------------------------
 
 
 
ora.TEST_ELSE.lsnr
 
 
 
ONLINE ONLINE hostname
 
 
 
ONLINE ONLINE hostname
 
 
 
ora.TEST_GIGA.lsnr
 
 
 
ONLINE ONLINE hostname
 
 
 
ONLINE ONLINE hostname
 
 
 
ora.TEST_1_ELSE.lsnr
 
 
 
ONLINE ONLINE hostname
 
 
 
ONLINE ONLINE hostname
 
 
 
ora. TEST_1_GIGA.lsnr
 
 
 
ONLINE ONLINE hostname
 
 
 
ONLINE ONLINE hostname
 
 
 
ora.gsd
 
 
 
OFFLINE OFFLINE hostname
 
 
 
OFFLINE OFFLINE hostname
 
 
 
ora.net1.network
 
 
 
ONLINE ONLINE hostname
 
 
 
ONLINE ONLINE hostname
 
 
 
ora.ons
 
 
 
ONLINE ONLINE hostname
 
 
 
ONLINE ONLINE hostname
 
 
 
ora.registry.acfs
 
 
 
OFFLINE OFFLINE hostname
 
 
 
OFFLINE OFFLINE hostname
 
 
 
--------------------------------------------------------------------------------
 
 
 
Cluster Resources
 
 
 
--------------------------------------------------------------------------------
 
 
 
ora.test.db
 
 
 
1 ONLINE ONLINE hostname Open
 
 
 
2 ONLINE ONLINE hostname Open
 
 
 
ora.cvu
 
 
 
1 ONLINE ONLINE hostname
 
 
 
ora.test_1.db
 
 
 
1 ONLINE ONLINE hostname Open
 
 
 
2 ONLINE ONLINE hostname Open
 
 
 
ora.oc4j
 
 
 
1 ONLINE ONLINE hostname
 
 
 
ora.hostname.vip
 
 
 
1 ONLINE ONLINE hostname
 
ora. hostname.vip
 
 
 
1 ONLINE ONLINE hostname
 
 
 
  - 중요 resource
 
 
- ora.[listener_name].lsnr -> listener의 상태를나타냄
 
- ora.[listener_name].lsnr -> listener의 상태를나타냄
 
- ora.net1.network -> public network 상태를 나타냄
 
- ora.net1.network -> public network 상태를 나타냄
198번째 줄: 112번째 줄:
  
 
    
 
    
 +
== 종료 ==
  
⑥ 종료
+
=== 데이터베이스 종료 절차 ===
  
- 데이터베이스 종료와 관련된 절차는 다음과 같다.
+
- 데이터베이스 종료 절차.
  
순서
+
:1. CRS 어플리케이션(nodeapp) 종료
작업
+
한 노드에서 명령어 실행(oracle 유저로)
비고
 
  
1. CRS 어플리케이션 종료
+
:2.LISTENER 종료
  한 노드에서 명령어 실행(오라클유저로)
+
  한 노드에서 명령어 실행(oracle 유저로)
  
2.LISTENER 종료
+
:3.DB 인스턴스종료
한 노드에서 명령어 실행(오라클유저로)
+
한 노드에서 명령어 실행(oracle 유저로)
  
3.DB 인스턴스종료
+
:4.CRS 종료
 
+
양쪽 노드에서 명령어 실행(root유저로)
노드에서 명령어 실행(오라클유저로)
 
  
4.CRS 종료
 
  
양쪽 노드에서 명령어 실행(root유저로)
 
  
5.서버 종료
+
=== ⑦ CRS Application 종료 ===
  
양쪽 노드에서 명령어 실행(root유저로)
+
==== CRS 어플리케이션 종료 명령어 ====
 +
:srvctl stop nodeapps –n HOSTNAME
  
⑦ CRS Application 종료
+
* DB노드#1 서버 "oracle" 유저로 실행.
  
- CRS를 구성하는 어플리케이션은 아래 명령어로 종료한다.
+
노드#1
 
 
* DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
 
 
<source lang=shell>
 
<source lang=shell>
 
$srvctl stop nodeapps –n HOSTNAME
 
$srvctl stop nodeapps –n HOSTNAME
</source>
 
 
<source lang=shell>
 
$srvctl stop nodeapps -n HOSTNAME
 
 
</source>
 
</source>
 
    
 
    
  
⑧ LISTENER 종료
+
=== ⑧ LISTENER 종료 ===
 
+
* DB노드#1에서 "oracle" 유저로 실행한다.
- LISTENER는 아래 명령어로 종료한다.
 
 
 
 
 
 
 
* DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
 
<source lang=shell>
 
$srvctl stop listener -n HOSTNAME
 
</source>
 
 
 
 
<source lang=shell>
 
<source lang=shell>
 
$srvctl stop listener -n HOSTNAME
 
$srvctl stop listener -n HOSTNAME
255번째 줄: 152번째 줄:
 
    
 
    
  
⑨ DB Instance 종료
+
=== ⑨ DB Instance 종료 ===
 +
==== DB인스턴스 종료 명령어 ====
 +
srvctl stop database -d DB명
  
- DB인스턴스는 아래 명령어로 종료한다.
+
*DB노드#1 에서 "oracle" 유저로 실행.
 
 
*DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
 
  
 
<source lang=shell>
 
<source lang=shell>
265번째 줄: 162번째 줄:
 
</source>
 
</source>
  
------------------
+
== RAC 관리 ==
 
 
 
 
이번  장에서는  RAC 설치가  완료  된  후  관리해야  하는  부분들과  주요  명령어들을  살펴보겠습니다.
 
 
 
 
   
 
   
 +
==== 1.현재  상태  확인하기 ====
  
1.  현재  상태  확인하기
+
상태확인 명령 : crs_stat , srvctl
  
현재  RAC  관련된  주요  상태를  확인하는  명령어는  crs_stat  입니다.
 
 
주요  문법은  아래와  같습니다.
 
 
<source lang=shell>
 
<source lang=shell>
[oracle@rac1 ~]$ crs_stat -h
+
[oracle@rac1 ~]$ crs_stat -t
 
</source>
 
</source>
 +
 
<source lang=shell>
 
<source lang=shell>
 
Usage:  crs_stat [resource_name [...]] [-v] [-l] [-q] [-c cluster_member]
 
Usage:  crs_stat [resource_name [...]] [-v] [-l] [-q] [-c cluster_member]
288번째 줄: 180번째 줄:
 
  crs_stat -f [resource_name [...]] [-q] [-c cluster_member]
 
  crs_stat -f [resource_name [...]] [-q] [-c cluster_member]
 
  crs_stat -ls [resource_name [...]] [-q]
 
  crs_stat -ls [resource_name [...]] [-q]
</source>
 
 
위 옵션 중 현재 상태를 확인할 때 쓰는 옵션은 -t
 
<source lang=shell>
 
$ crs_stat -t
 
 
</source>
 
</source>
 
   
 
   
300번째 줄: 187번째 줄:
 
* Host :  작동  노드
 
* Host :  작동  노드
 
   
 
   
Target  와  State  가  모두  Online 상태가  되면  정상적으로  작동하고  있는  것입니다.  
+
Target  와  State  가  모두  Online 상태가  되면  정상적으로  작동 중.  
  
실시간으로  위와  같은  상황을  조회하려면  리눅스에서는  watch  명령을  아래와  같이  사용하면  1초에  1번씩  refresh  하여  실시간  상황을  보여줍니다.
+
*.실시간으로  위와  같은  상황을  조회하려면  리눅스에서는  watch  명령(1초마다 반복 실행)
 
<source lang=shell>
 
<source lang=shell>
 
$ watch -n 1 'crs_stat -t'
 
$ watch -n 1 'crs_stat -t'
 
</source>
 
</source>
  
위  명령에서  -n  은  시간을  지정하며  1  은  1  초마다  '명령어'  를  반복해서  수행하라는  의미입니다
+
srvctl 명령 : 보다 세부적인 내용 확인 가능
위의  방법  말고  srvctl 이라는  명령어를  사용해서  보다  세부적으로  상태를  조회할  수도  있습니다.
+
$srvctl status database[/instance/service/nodeapps/asm] -d [DB명]
  
<source lang=shell>
+
<source lang=sql>
$ srvctl
+
# DB 상태
</source>
 
 
주요  문법은  아래와  같습니다.
 
<source lang=shell>
 
 
$srvctl status database -d <database-name> [-f][-v][-S <level>]  
 
$srvctl status database -d <database-name> [-f][-v][-S <level>]  
</source>
+
예) $ srvctl status database -d DB명 -v
<source lang=shell>
+
 
 +
# 인스턴스 상태
 
$srvctl status instance -d <database-name> -i <instance-name>  
 
$srvctl status instance -d <database-name> -i <instance-name>  
 +
# [<instancename-list>][-f][-v]-S <level>]
 +
예) $ srvctl status instance -d DB명 -i rac1번인스턴스명, rac2번 인스턴스명
  
[<instancename-list>][-f][-v]-S <level>]
+
# 서비스명 상태
</source>
 
<source lang=shell>
 
 
$srvctl status service -d <database-name> -s <service_name>  
 
$srvctl status service -d <database-name> -s <service_name>  
 +
# [<service-namelist>][-f][-v][-S <level>]
  
[<service-namelist>][-f][-v][-S <level>]
+
# 노드APP 별 상태
</source>
 
 
 
<source lang=shell>
 
 
$srvctl status nodeapps [-n <node-name>]  
 
$srvctl status nodeapps [-n <node-name>]  
</source>
+
예) $ srvctl status nodeapps -n rac1번 노드명
  
<source lang=shell>
+
# ASM 상태
 
$srcvtl status asm -n <node_name>  
 
$srcvtl status asm -n <node_name>  
 
</source>
 
</source>
 
  
위  명령어들을  사용하여  몇  가지  조회를  해  보겠습니다
 
  
1.  데이터베이스의  상태,  모든 인스턴스와 모든  서비스의  상태  확인
 
  
<source lang=shell>
 
$ srvctl status database -d rac -v
 
</source>
 
 
   
 
   
 +
2. RAC 중단하기
  
2. 특정  인스턴스의 상태와  현재  서비스의  상태  확인
+
RAC는 중단 순서가 중요.
<source lang=shell>
 
$ srvctl status instance -d rac -i rac1, rac2
 
</source>
 
 
  
3. 모든 node의 상태를 확인합니다
+
srvctl  명령을  사용하며 중단을 시키는 순서는  
<source lang=shell>
 
$ srvctl status nodeapps -n rac1
 
</source>
 
  
<source lang=shell>
+
인스턴스  --> ASM(ASM 구성시)  --> application 순서   
$ srvctl status nodeapps -n rac2
 
</source>
 
   
 
2. RAC 중단하기
 
  
RAC  를  설치하면  여러  가지  관련  서비스들과  Application,  Instance  가  복합적으로  동작을  하게 됩니다.
 
그래서  RAC  를  중단  할  때는  순서가  아주  중요합니다.
 
srvctl  명령을  사용하며  중단을  시키는  순서는 
 
Instance  -->  asm  (asm  으로  구성되었을  경우)  --> application  순서입니다. 
 
  
주요  명령어를  먼저  살펴보겠습니다.
+
* 정지 명령어 : srvctl
  
 
<source lang=shell>
 
<source lang=shell>
 +
# 데이터베이스 정지
 
$srvctl  stop  database -d <database-name> [-o <stop-options>]
 
$srvctl  stop  database -d <database-name> [-o <stop-options>]
 
 
[-c <connect-string> | -q]  
 
[-c <connect-string> | -q]  
</source>
 
  
<source lang=shell>
+
# 인스턴스 정지
 
$srvctl  stop  instance -d <database-name> -i <instance-name>  
 
$srvctl  stop  instance -d <database-name> -i <instance-name>  
 
 
[,<instance-namelist>][-o <stop-option>][-c <connect -string> | -q]  
 
[,<instance-namelist>][-o <stop-option>][-c <connect -string> | -q]  
</source>
+
예) $ srvctl  stop instance -d DB명 -i rac1번인스턴스명
 
+
(1번 인스턴스만 정지, 2번 인스턴스는 작동중..)
<source lang=shell>
+
#서비스 정지
 
$srvctl  stop    service -d <database-name> [-s <service-name> [, <service-namelist>]]
 
$srvctl  stop    service -d <database-name> [-s <service-name> [, <service-namelist>]]
 
 
[-i <instance-name][-c <connect -string> | -q][-f]  
 
[-i <instance-name][-c <connect -string> | -q][-f]  
</source>
 
  
 +
#노드 정지
 +
$srvctl    stop    nodeapps -n <node-name>
  
<source lang=shell>
+
#ASM 정지
$srvctl    stop    nodeapps -n <node-name>  
+
$srvctl    stop    asm -n <node_name> [-i ][-o <start_option>
 
</source>
 
</source>
 +
  
 +
* 정지 확인 명령어 : crs_stat -t 
 
<source lang=shell>
 
<source lang=shell>
$srvctl    stop    asm -n <node_name> [-i ][-o <start_option>
+
crs_stat -
 
</source>
 
</source>
   
+
인스턴스1이 종료 확인.
명령을 사용하여 아래와 같이  종료하면  됩니다.
+
그러나 Database는 아직 중단이 되지 않음.
 +
인스턴스2번 운영 중임.
  
 +
* 인스턴스2번 정지
 
<source lang=shell>
 
<source lang=shell>
[oracle@rac2 ~]$ srvctl  stop instance -d RAC -i rac1
+
[oracle@rac2 ~]$ srvctl  stop instance -d RAC -i rac2
 
</source>
 
</source>
 
   
 
   
  
명령어에서 -d 옵션은 DB  이름을  지정하는  것이고  -i  는  instance  이름을  지정하는  것입니다.
+
모든 Instance Database 가 OFFLINE 확인.   
 
 
이  명령  수행
 
 
<source lang=shell>
 
<source lang=shell>
 
  crs_stat -t   
 
  crs_stat -t   
 
</source>
 
</source>
로  확인해  보겠습니다
 
  
 
+
이후 노드APP 종료
Instance1  이  종료된  것이 확인됩니다.
 
그러나  Database  는  아직 중단이  되지  않고  있습니다.
 
Instance2  가  운영  중이기 때문입니다.
 
 
 
나머지  Instance 2  도  종료하고  다시  확인  해  보겠습니다
 
 
 
<source lang=shell>
 
[oracle@rac2 ~]$ srvctl  stop instance -d RAC -i rac2
 
</source>
 
 
모든  Instance  와  Database 가  OFFLINE  된  것이  확인됩니다.  이제  나머지  구성 요소들을  종료하면  됩니다.
 
  
 
<source lang=shell>
 
<source lang=shell>

2019년 12월 8일 (일) 16:06 판

thumb_up 추천메뉴 바로가기


Oracle RAC 12C Management


1 1.GRID & DB 시작 및 종료[편집]

1.1 시작[편집]

- 데이터베이스 시작 절차

1. CRS 시작(CRS가 down된경우에만 실행) : root 권한으로 실행
2. CRS 어플리케이션(nodeapps) 시작 : 한 노드에서 명령어 실행(수동실행시)
3. LISTENER 시작 : 한 노드에서 명령어 실행(수동실행시)
4. DB 인스턴스 시작 : 한 노드에서 명령어 실행(수동실행시)

1.1.1 ① CRS 시작[편집]

  1. CRS는 RAC를 구성하는 각 노드 및 각종 리소스를 제어하는 프로세스.
  2. CRS의 시작은 root권한 으로 되어야 한다.
  3. 서버 재부팅 시 자동 시작된다.

수동 시작 방법.

  • DB 서버 각각의 노드에서 "root" 유저로 실행한다.

1.1.1.1 CRS 시작[편집]

: crsctl start crs -- 각각 노드에서 

<> RAC노드#1

# cd /gridhome/grid/bin
# ./crsctl start crs


<> RAC노드#2

# cd /gridhome/grid/bin
# ./crsctl start crs

1.1.1.2 CRS 상태확인[편집]

:  crsctl check crs 
$ps -ef | grep "d\.bin" | grep -v grep
$crsctl check crs


1.1.2 ② CRS Application(nodeapp) 시작[편집]

- CRS시작 시 자동 시작.

수동 시작 방법.

1.1.2.1 nodeapps1,2 실행[편집]

  • DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
$srvctl start nodeapps -n HOSTNAME1
$srvctl start nodeapps -n HOSTNAME2


1.1.3 ③ Listener 시작[편집]

- CRS시작 시 자동 시작.

수동 시작 방법.

1.1.3.1 LISTENER 시작 명령[편집]

srvctl start listener -n HOSTNAME1
  • DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
$srvctl start listener -n HOSTNAME1
$srvctl start listener -n HOSTNAME2

1.1.4 ④ DB Instance 시작[편집]

- CRS시작 시 자동 시작.

수동 시작 방법.

1.1.4.1 DB인스턴스 실행 명령어[편집]

srvctl start database -d 디비명
  • DB 서버{노드#1}에서 "oracle" 유저로 실행한다.
$srvctl start database -d 디비명

1.1.5 ⑤ CRS Application/Listener/DB Instance확인[편집]

1.1.5.1 Application/Listener/DB Instance확인 명령어[편집]

crsctl status res -t
$ crsctl status res -t

- 중요 resource - ora.[listener_name].lsnr -> listener의 상태를나타냄 - ora.net1.network -> public network 상태를 나타냄 - ora.[DB_name].db -> Database 상태를 나타냄 - ora.[hostname].vip -> VIP 상태를 나타냄(장애인경우 failover 상태가 됨)


1.2 종료[편집]

1.2.1 ⑥ 데이터베이스 종료 절차[편집]

- 데이터베이스 종료 절차.

1. CRS 어플리케이션(nodeapp) 종료
한 노드에서 명령어 실행(oracle 유저로)
2.LISTENER 종료
한 노드에서 명령어 실행(oracle 유저로)
3.DB 인스턴스종료

한 노드에서 명령어 실행(oracle 유저로)

4.CRS 종료

양쪽 노드에서 명령어 실행(root유저로)


1.2.2 ⑦ CRS Application 종료[편집]

1.2.2.1 CRS 어플리케이션 종료 명령어[편집]

srvctl stop nodeapps –n HOSTNAME
  • DB노드#1 서버 "oracle" 유저로 실행.

노드#1

$srvctl stop nodeapps –n HOSTNAME


1.2.3 ⑧ LISTENER 종료[편집]

  • DB노드#1에서 "oracle" 유저로 실행한다.
$srvctl stop listener -n HOSTNAME


1.2.4 ⑨ DB Instance 종료[편집]

1.2.4.1 DB인스턴스 종료 명령어[편집]

srvctl stop database -d DB명

  • DB노드#1 에서 "oracle" 유저로 실행.
$srvctl stop database -d DB명

1.3 RAC 관리[편집]

1.3.1 1.현재 상태 확인하기[편집]

상태확인 명령 : crs_stat , srvctl

[oracle@rac1 ~]$ crs_stat -t
Usage:   crs_stat [resource_name [...]] [-v] [-l] [-q] [-c cluster_member]
 crs_stat [resource_name [...]] -t [-v] [-q] [-c cluster_member]
 crs_stat -p [resource_name [...]] [-q]
 crs_stat [-a] application -g
 crs_stat [-a] application -r [-c cluster_member]
 crs_stat -f [resource_name [...]] [-q] [-c cluster_member]
 crs_stat -ls [resource_name [...]] [-q]


  • Target  : 목표 상태
  • State : 현재 상태
  • Host : 작동 노드

Target 와 State 가 모두 Online 상태가 되면 정상적으로 작동 중.

  • .실시간으로 위와 같은 상황을 조회하려면 리눅스에서는 watch 명령(1초마다 반복 실행)
$ watch -n 1 'crs_stat -t'

srvctl 명령 : 보다 세부적인 내용 확인 가능 $srvctl status database[/instance/service/nodeapps/asm] -d [DB명]

# DB 상태 
$srvctl status database -d <database-name> [-f][-v][-S <level>] 
예) $ srvctl status database -d DB명 -v 

# 인스턴스 상태 
$srvctl status instance -d <database-name> -i <instance-name> 
# [<instancename-list>][-f][-v]-S <level>] 
예) $ srvctl status instance -d DB명 -i rac1번인스턴스명, rac2번 인스턴스명 

# 서비스명 상태 
$srvctl status service -d <database-name> -s <service_name> 
# [<service-namelist>][-f][-v][-S <level>] 

# 노드APP 별 상태 
$srvctl status nodeapps [-n <node-name>] 
예) $ srvctl status nodeapps -n rac1번 노드명 

# ASM 상태 
$srcvtl status asm -n <node_name>



2. RAC 중단하기

RAC는 중단 순서가 중요.

srvctl 명령을 사용하며 중단을 시키는 순서는

인스턴스 --> ASM(ASM 구성시) --> application 순서


  • 정지 명령어 : srvctl
# 데이터베이스 정지 
$srvctl   stop   database -d <database-name> [-o <stop-options>]
[-c <connect-string> | -q] 

# 인스턴스 정지 
$srvctl   stop   instance -d <database-name> -i <instance-name> 
[,<instance-namelist>][-o <stop-option>][-c <connect -string> | -q] 
예) $ srvctl   stop instance -d DB명 -i rac1번인스턴스명 
(1번 인스턴스만 정지, 2번 인스턴스는 작동중..)
#서비스 정지 
$srvctl   stop    service -d <database-name> [-s <service-name> [, <service-namelist>]]
[-i <instance-name][-c <connect -string> | -q][-f] 

#노드 정지 
$srvctl    stop    nodeapps -n <node-name> 

#ASM 정지 
$srvctl    stop    asm -n <node_name> [-i ][-o <start_option>


  • 정지 확인 명령어 : crs_stat -t
crs_stat -t

인스턴스1이 종료 확인. 그러나 Database는 아직 중단이 되지 않음. 인스턴스2번 운영 중임.

  • 인스턴스2번 정지
[oracle@rac2 ~]$ srvctl   stop instance -d RAC -i rac2


모든 Instance 와 Database 가 OFFLINE 확인.

crs_stat -t

이후 노드APP 종료

[oracle@rac2 ~]$ srvctl   stop nodeapps -n   rac1
[oracle@rac2 ~]$ srvctl   stop nodeapps -n   rac2

모두 정상적으로 OFFLINE 된 것이 확인됩니다.

위 작업을 한번에 해 주는 명령어가 crs_stop -all 입니다. 위와 같이 한 단계씩 수동으로 종료할 수도 있고 crs_stop -all 명령을 이용해서 한꺼번에 자동으로 종료시킬 수도 있습니다.


3. RAC 시작하기

앞에서 잠시 언급한 대로 시작하는 순서는 중단 순서와 반대입니다. 즉 application --> ASM (ASM 일경우) --> Instance 순서로 시작하면 됩니다. 종료할 때와 마찬가지로 srvctl 명령으로 시작합니다. 주요 명령어를 먼저 살펴 보겠습니다.

$srvctl start database -d <database-name> [-o <start-options>][-c <connect-string> | -q]
$srvctl start instance -d <database-name> -i <instance-name> [,<instance-name-list>]

[-o <start-option>][-c <connect -string> | -q]
$srvctl start service -d <database-name> [-s <service-name> [, <service-namelist>]]

[-i <instance-name>][-o <start-option>][-c <connect -string> | -q]
$srvctl start nodeapps -n <node-name> 

<source lang=shell>
$srvctl start asm -n <node_name> [-i ][-o <start_options>]
$ crs_stat -t

현재 상태는 모두 offline 입니다.


먼저 node application 부터 시작합니다.

[oracle@rac2 ~]$ srvctl   start    nodeapps    -n   rac1

rac1 에서 application 이 실행 된 것을 확인 할 수 있습니다.

여기서 중요한 것은 vip 와 listener 입니다. 나머지 rac2 에서도 application 을 시작합니다.

[oracle@rac2 ~]$ srvctl   start nodeapps -n   rac2
rac1  과  rac2  에서  node application  이  모두  정상적으로  시작  된  것이  확인됩니다.

만약 ASM 으로 구성되었을 경우는 양쪽 노드 모두에서 아래와 같이 ASM 을 시작하면 됩니다.

[oracle@rac2 ~]$ srvctl   start asm   -n   rac1
[oracle@rac2 ~]$ srvctl   start asm   -n   rac2
이제  Instance  를  시작하면  됩니다
[oracle@rac2 ~]$ srvctl   start  instance   -d   rac   -i   rac1

위 화면에서 볼 수 있듯이 Instance 가 1 개라도 시작이 되면 Database 가 시작됨을 알 수 있습니다. 나머지 Instance 도 시작하겠습니다

[oracle@rac2 ~]$ srvctl   start  instance  -d   rac   -i   rac2

Instance 가 모두 시작 되어도 서비스가 시작이 안 될 경우 아래와 같이 특정 서비스를 실행하면 됩니다. 다만 db 를 생성할 때 함께 만들어진 내부 서비스는 아래와 같은 에러가 발생합니다.

$ srvctl start service -d rac -s rac -i rac1

이럴 경우는 crs_start -all 명령어를 수행해서 시작하면 되며 crs_start -all 명령은 위 단계들을 모두 한꺼번에 모아서 실행하는 스크립트입니다.

모두가 정상적으로 시작되었습니다


4. RAC 에 자원 추가 및 제거하기

자원의 시작과 종료 외에도 srvctl 명령을 사용하여 운영 중인 RAC 에서 여러 가지 자원을 추가할 수 있습니다. 아래에서 주요 문법을 살펴보겠습니다.

$srvctl add database -d <name> -o <oracle_home> [-m <domain_name>][-p <spfile>]

[-A <name|ip>/netmask][-r{PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY}]
[-s <start_options>][-n <db_name>]
$srvctl add instance -d <name> -i <inst_name> -n <node_name>
$srvctl add service -d <name> -s <service_name> -r <preferred_list> [-a ]

[-P <TAF_policy>][-u]
$srvctl add noeapps -n <node_name> -o <oracle_home> [-A <name|ip>/netmask[/if1[|if2|….]]]
$srvctl add asm -n <node_name> i  -o <oracle_home>


위 예 중에서 새로운 서비스를 추가 해 보겠습니다.

인사 관리작업을 위한 insa 서비스를 추가하되 rac2 에서 서비스 하고 rac1 에서는 대기 상태로 생성하겠습니다.

$ srvctl add service -d rac -s insa -r rac2 -a rac1

위와 같이 서비스를 생성 한 후 crs_stat -t 로 확인합니다.

insa 서비스가 생성은 되었으나 실행은 되지 않습니다. 명령어로 실행을 시켜야 합니다.

아래와 같이 해당 서비스를 명령어로 실행 시킵니다.

$ srvctl start service -d rac -s insa

정상적으로 잘 실행 되는 것을 확인 할 수 있습니다.

srvctl 명령어를 이용해서 기존에 존재하는 자원을 제거 할 수도 있습니다.


주요 명령어는 아래와 같습니다

$ srvctl remove database -d <database-name>
$ srvctl remove database -d <database-name> [-i <instance-name>]
$ srvctl remove database -d <database-name> -s <service-name> 

[-i <instance-name>]


위에서 생성했던 insa 서비스를 제거해 보겠습니다.

$ srvctl remove service -d rac -s insa
$ srvctl stop service -d rac -s insa
$ srvctl remove service -d rac -s insa

위 화면을 보면 실행 중인 서비스는 먼저 중지를 하고 제거해야 됨을 알 수 있습니다. 만약 여러 개의 인스턴스에서 실행 중인 서비스인 경우 특정 인스턴스에서만 제거를 해야 할 경우에는 아래와 같이 -i 옵션을 함께 사용하면 됩니다.

$ srvctl remove service -d rac -s insa -i rac1

5. srvctl 명령을 사용하여 rac service 관련 설정 변경하기

srvctl modify 라는 명령을 사용하여 현재 설정되어 있는 값을 변경할 수 있습니다. srvctl modify database Database 와 관련된 설정을 변경할 수 있습니다. srvctl modify instance Instance 와 관련된 설정을 변경할 수 있습니다. srvctl modify service Service 와 관련된 설정을 변경할 수 있습니다. srvctl modify nodeapps node application 과 관련된 설정을 변경할 수 있습니다.

1) srvctl modify database

srvctl modify database -d db_unique_name [-n db_name] [-o oracle_home] [-m domain_name] 

[-p spfile] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY}] [-s start_options] 
[-y {AUTOMATIC | MANUAL}]

위 명령의 주요 옵션의 의미는 아래와 같습니다

-d db_unique_name 유일한(Unique) DB 이름을 지정합니다. -n db_name DB 이름을 지정합니다. -o oracle_home Cluster database 용 Oracle home 을 지정합니다. -m domain_name Cluster database 용 domain 명을 지정합니다. -p spfile Cluster database 용 spfile 을 지정합니다. -r role [PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY] Database의 역할을 지정합니다. (primary , physical standby , logical standby) -s start_options database 가 Startup 될 때 option 을 지정합니다 -y Database 관리정책을 지정합니다. 값으로는 automatic 과 manual 을 사용합니다 -h 도움말을 출력합니다.

2) srvctl    modify    instance
srvctl    modify    instance    -d    db_unique_name    -i    inst_name 

{-n node_name | -s asm_instance_name | -r}

위 명령의 주요 옵션의 의미는 아래와 같습니다.

d db_unique_name database Unique name 을 설정합니다. -i inst_name Database instance name 을 설정합니다. -n node_name Node name 을 지정합니다. -s asm_instance_name Database instance 에서 사용하는 ASM instance name 을 지정합니다 -r Database instance 에서 사용하는 ASM instance name 을 제거합니다


3) srvctl modify service

이 명령을 사용하여 서비스 중인 노드들의 설정을 변경할 수 있습니다. 그러나 이 명령은 아래와 같이 몇 가지 주의 사항이 있습니다. - 새로운 변경 사항이 생길 때 기존 운영중인 서비스에는 반영이 되지 않습니다. 즉 변경사항을 운영중인 서비스에 적용하려면 기존 서비스를 중단 한 후 새로 시작해야 합니다. 또한 운영중인 서비스의 설정 값은 사용량이 많을 때는 변경하지 않을 것을 권장합니다. 변경 명령은 아래와 같습니다.

srvctl    modify    service    -d    db_unique_name    -s    service_name    -i    old_inst_name

-t    new_inst_name [-f]


위 명령어의 주요 옵션은 아래와 같습니다 -d db_unique_name Unique database name 을 설정합니다. -s service_name Service name 을 지정합니다. -i old_inst_name 현재 동작중인 Instance name 을 지정합니다. -t new_inst_name 새롭게 서비스 할 Instance name 을 지정합니다. -f 서비스를 중단하고 재 위치 시킬 때 현재 접속을 모두 강제로 종료합니다


4) srvctl modify nodeapps

이 명령은 Oracle home 이 변경되었거나 vip 가 변경되었을 경우 사용합니다.

srvctl modify nodeapps -n node_name [-o oracle_home] [-A new_vip_address]


이 명령의 주요 옵션은 아래와 같습니다.

-n node_name Node name 을 지정합니다. -o oracle_home 새롭게 변경 될 Oracle home 을 지정합니다. -A new_vip_address 새롭게 변경 될 VIP address (name|ip/netmask[/if1[|if2|...]])를 지정합니다.


6. Service 재배치 하기

SERVICE: RAC 안에서 제공해주는 업무

이 명령을 사용하여 현재 운영중인 서비스들의 인스턴스를 변경할 수 있습니다.

예를 들어 인사관리를 위한 insa 서비스가 기존에 rac1 에서 서비스 중이었는데

rac1 을 패치하기 위해서 서비스를 rac2 로 이동해야 할 경우 등에 사용하는 명령입니다.

srvctl    relocate    service    -d db_unique_name    -s    service_name    -i old_inst_name

-t new_inst_name [-f]


위 명령의 주요 옵션은 아래와 같습니다.

-d db_unique_name Unique database name 을 지정합니다. -s service_name Service name 을 지정합니다. -i old_inst_name 현재 서비스 중인 instance name 을 지정합니다. -t new_inst_name 새로 변경할 instance name 을 지정합니다. -f 서비스 재배치를 할 때 현재 접속 중인 세션을 모두 강제 종료 시킵니다.


사용 예)

인사관리를 위한 insa 서비스를 rac1 instance 에 생성한 후 이 명령을 사용해서 rac2 instance 로 변경합니다.

[oracle@rac2 ~]$ srvctl add service -d rac -s insa -r rac1 -a rac2
[oracle@rac2 ~]$ srvctl start service -d rac -s insa
insa  서비스가  rac1  에서  작동하는 것이  확인됩니다.

위에서 확인한 rac1 에서 동작 중인 insa 서비스를 rac2 로 이동하겠습니다.

$ srvctl relocate service -d rac -s insa -i rac1 -t rac2


기존 rac1 -> rac2 로 변경된 것이 보입니다. 클라이언트(PC) 에서 tnsnames.ora 파일을 수정해서 insa 서비스에 접속한 후 instance name 을 확인해 보겠습니다. tnsnames.ora 파일에 아래와 같은 내용을 추가합니다.

pc  에서  서버로  접속하여  확인합니다.

다시 rac1 으로 변경 후 확인 해 보겠습니다

$ srvctl relocate service -d rac -s insa -i rac2 -t rac1

7. CRS 자원의 일시적인 활성화 / 비활성화 설정하기 주요 명령은 아래와 같습니다. - 활성화 하기

$ srvctl enable database -d <database-name>
$ srvctl enable instance -d <database-name> -i <instance-name> [,<instnacnename-list>]
$ srvctl enable service -d <database-name> -s <service-name>][,<servicename-list>]

[-i <instance-name>]
-  비활성화  하기
$ srvctl disable database -d <database-name>
$ srvctl disable instance -d <database-name> -i <instnace-name> [,<instancename-list>]
$ srvctl disable service -d <database-name> -s <service-name>][,<service-name-list>]

[-i <instance-name>]

위 명령을 사용하여 insa 서비스를 비활성화 시킨 후 접속 테스트를 해 보겠습니다.

$ srv disable service -d rac -s insa
$ srvctl stop service -d rac -s insa
$ srvctl disable service -d rac -s insa

위와 같이 실행중인 서비스는 사용 안 함으로 변경할 수 없어서 중단 후 사용 안 함으로 변경합니다. 이제 client 에서 insa 서비스로 접속해 있던 사용자 창에서 조회를 해 보고 새로 접속을 시도 해보겠습니다. 먼저 서비스가 중단되기 전에 접속해 있던 세션부터 확인합니다.

이번에는 새로 접속을 시도합니다. 당연히 에러가 발생합니다. 이번에는 insa service 를 활성화 한 후 접속 테스트를 합니다.

$ srvctl enable service -d rac -s insa

여전히 접속이 안됨을 알 수 있습니다.

crs_stat -t

로 현재 상태를 조회합니다. 위 화면을 보면 service 를 enable 해도 여전히 service 는 offline 상태임을 알 수 있습니다. 즉 해당 서비스를 다시 사용하려면 service 를 start 해야 합니다.

$ srvctl start service -d rac -s insa

이상으로 srvctl 로 RAC 서비스와 자원을 관리하는 방법을 살펴보았습니다.

8. rac 관련 로그 경로 및 내용 확인하기 - $ORA_CRS_HOME/crs/log : CRS resources 와 관련된 주요 내용이 저장됩니다. - $ORA_CRS_HOME/crs/init : CRS daemon 이 시작될 때부터 관련 내용을 기록합니다.

CRS 시작 관련된 장애 내용 등을 확인 할 경우 유용합니다. - $ORA_CRS_HOME/css/log  : Cluster Synchronization (CSS) 데몬이 수행 하는 reconfigurations, missed check-ins,

connects, disconnects 관련된 내용을 기록합니다.

만약 CSS 데몬에 문제가 발생해서 재부팅을 할 경우 이 파일의 내용을 확인하여 시간과 내역을 찾아볼 수 있습니다. - $ORA_CRS_HOME/css/init : Oracle Cluster Synchronization Service daemon (OCSSd) 데몬이 장애가 발생했을 경우

Core Dump 관련 내용을 저장하고 있습니다.

- $ORA_CRS_HOME/evm/log  : Event Volume Manager (EVM) 데몬과 evmlogger 데몬 관련 로그파일입니다. - $ORA_CRS_HOME/evm/init  : EVM 데몬과 관련된 PID 와 lock file 입니다.

이 파일에 EVM 관련된 문제가 발생 될 경우 Core Dump 도 기록됩니다.

- $ORA_CRS_HOME/srvm/log : Oracle Cluster Registry (OCR) 과 관련된 log file 입니다. - $ORA_CRS_HOME/log : Oracle Clusterware 관련된 일반적 내용이 저장되는 log file 입니다.

 가장 일반적으로  많이  모니터링  됩니다.