IT기술/Oracle

04 RAC 운영하기 (1/2)

dobbby 2021. 6. 18. 17:36
반응형

앞에서 RAC 설치와 기본 개념들을 살펴보았습니다.
이번 장에서는 RAC 설치가 완료 된 후 관리해야 하는 부분들과 주요 명령어들을 살펴보겠습니다.

1. 현재 상태 확인하기
현재 RAC 관련된 주요 상태를 확인하는 명령어는 crs_stat 입니다.
주요 문법은 아래와 같습니다.
[oracle@rac1 ~]$ crs_stat -h
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]

위 옵션 중 현재 상태를 확인할 때 쓰는 옵션은 -t
$ crs_stat -t

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

Target 와 State 가 모두 Online 상태가 되면 정상적으로 작동하고 있는 것입니다. 

실시간으로 위와 같은 상황을 조회하려면 리눅스에서는 watch 명령을 아래와 같이 사용하면 1초에 1번씩 refresh 하여 실시간 상황을 보여줍니다.


$ watch -n 1 'crs_stat -t'


위 명령에서 -n 은 시간을 지정하며 1 은 1 초마다 '명령어'  를 반복해서 수행하라는 의미입니다
위의 방법 말고 srvctl 이라는 명령어를 사용해서 보다 세부적으로 상태를 조회할 수도 있습니다.

srvctl

주요 문법은 아래와 같습니다.


$srvctl status database -d <database-name> [-f][-v][-S <level>] 
$srvctl status instance -d <database-name> -i <instance-name> 
[<instancename-list>][-f][-v]-S <level>] 
$srvctl status service -d <database-name> -s <service_name> 
[<service-namelist>][-f][-v][-S <level>] 
$srvctl status nodeapps [-n <node-name>] 
$srcvtl status asm -n <node_name> 

위 명령어들을 사용하여 몇 가지 조회를 해 보겠습니다 
1) 데이터베이스의 상태, 모든 인스턴스와 모든 서비스의 상태 확인
$ srvctl status database -d rac -v

2) 특정 인스턴스의 상태와 현재 서비스의 상태 확인
$ srvctl status instance -d rac -i rac1, rac2

3) 모든 node의 상태를 확인합니다
$ srvctl status nodeapps -n rac1
$ srvctl status nodeapps -n rac2

 

 

2. RAC 중단하기

RAC 를 설치하면 여러 가지 관련 서비스들과 Application, Instance 가 복합적으로 동작을 하게 됩니다.
그래서 RAC 를 중단 할 때는 순서가 아주 중요합니다.
srvctl 명령을 사용하며 중단을 시키는 순서는 
Instance --> asm (asm 으로 구성되었을 경우) --> application 순서입니다.  
주요 명령어를 먼저 살펴보겠습니다.

$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  service -d <database-name> [-s <service-name> [, <service-namelist>]]
[-i <instance-name][-c <connect -string> | -q][-f] 
$srvctl  stop  nodeapps -n <node-name> 
$srvctl  stop  asm -n <node_name> [-i <asm_inst_name>][-o <start_option>

위 명령을 사용하여 아래와 같이 종료하면 됩니다.
[oracle@rac2 ~]$ srvctl  stop instance -d RAC -i rac1

위 명령어에서 -d 옵션은 DB 이름을 지정하는 것이고 -i 는 instance 이름을 지정하는 것입니다.
이 명령 수행 후 crs_stat -t 로 확인해 보겠습니다

Instance1 이 종료된 것이 확인됩니다. 그러나 Database 는 아직 중단이 되지 않고 있습니다. 
Instance2 가 운영 중이기 때문입니다.

나머지 Instance 2 도 종료하고 다시 확인 해 보겠습니다
[oracle@rac2 ~]$ srvctl  stop instance -d RAC -i rac2

모든 Instance 와 Database 가 OFFLINE 된 것이 확인됩니다. 이제 나머지 구성 요소들을 종료하면 됩니다.

[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> 
$srvctl start asm -n <node_name> [-i <asm_inst_name>][-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 <available_list>]
[-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 <asm_inst_name> -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|...]])를 지정합니다.

반응형