오라클 RAC에 두가지 유형의 마스터가 있는데,

하나는 Clusterware 레벨의 마스터고, 하나는 특정 리소스 또는 블록, 객체를 위한 마스터 노드가 있다.



Clusterware 레벨의 마스터 노드를 찾는 방법은 아래와 같은 방법이 있다.

$ cat $ORA_CRS_HOME/log/`hostname`/cssd/ocssd* |grep master

or

$ for x in `ls -tr $ORA_CRS_HOME/log/`hostname`/cssd/ocssd* `; do grep -i "master node" $x ; done | tail -1 


또 다른 방법은 OCR 자동 백업을 이용한 방법이다.

OCR 자동 백업은 마스터 노드에서 수행 되고, 실패시 새로운 마스터 노드에서 백업이 생성된다.

[HOST01]oracle@host01:/home/oracle/DBA/hoon/mon> ocrconfig -showbackup

host02     2017/09/14 12:01:14     /u01/app/12.1.0.2/grid/cdata/cluster-clu1/backup00.ocr     1146027977

host02     2017/09/14 08:01:13     /u01/app/12.1.0.2/grid/cdata/cluster-clu1/backup01.ocr     1146027977

host02     2017/09/14 04:01:12     /u01/app/12.1.0.2/grid/cdata/cluster-clu1/backup02.ocr     1146027977

host02     2017/09/13 04:01:09     /u01/app/12.1.0.2/grid/cdata/cluster-clu1/day.ocr     1146027977

host02     2017/09/04 04:00:34     /u01/app/12.1.0.2/grid/cdata/cluster-clu1/week.ocr     1146027977

host01     2015/06/01 12:17:26     /u01/app/12.1.0.2/grid/cdata/cluster-clu1/backup_20150601_121726.ocr     1146027977

host02     2015/06/01 11:14:17     /u01/app/12.1.0.2/grid/cdata/cluster-clu1/backup_20150601_111417.ocr     0



그럼 리소스에 대한 마스터는 어떻게 찾을까?

select distinct o.owner, o.object_name, DECODE(m.CURRENT_MASTER,0,'host01',1,'host02') AS CURRENT_NODE

from   dba_objects o, v$gcspfmaster_info m

where o.data_object_id = m.data_object_id

and object_name = 'MEMBERS';


OWNER        OBJECT_NAME                    CURRENT_NODE

------------ ------------------------------ --------------------

SCOTT        MEMBERS                        host01


리소스 마스터를 메뉴얼로 변경하는 방법은 아래와 같다.

 oradebug lkdebug -m pkey <objectid>

예) members 의 오브젝트 아이디가 253672 라면 

     oradebug lkdebug -m pkey 253672


리마스터링에 대한 자세한 내용은 다음 사이트를 참조 하자.

http://oracleinaction.com/dynamic-remastering/




분 단위로 수행되는 MVIEW가 서비스 되는 노드와는 반대의 노드에서 수행 하면서

GCS 가 대량으로 발생했고, 이로 인하여 active 세션마저 증가 하였다.

물론 refresh 완료 되고 스스로 풀리기는 했지만 이런 장애 상황을 방지 해 보자


-- 변경 전 JOB 확인

sql> col what for a60

sql> select job, log_user, what, instance

from dba_jobs

order by log_user, job;


       JOB LOG_USER                       WHAT                                                           INSTANCE

---------- ------------------------------ ------------------------------------------------------------ ----------

         2 AAAAAAAA                       dbms_refresh.refresh('"AAAAAAAA"."MST_PROD_INFO_VW"');                0

        21 AAAAAAAA                       dbms_refresh.refresh('"AAAAAAAA"."MST_PROD_VW"');                     0

         3 BBBBBBB                        dbms_refresh.refresh('"BBBBBBB"."PO2_GNR_SONG_CNT_VW"');              0



AAAAAAAA 는 node2 에서 서비스 하고, BBBBBBB 는 node1 에서 서비스 한다.


-- 해당 유저로 로그인

sql> conn AAAAAAAA/AAAAAAAA

Connected.


-- 인스턴스 변경

sql> exec dbms_job.instance(job=>2, instance=>2) ;


PL/SQL procedure successfully completed.


sql> exec dbms_job.instance(job=>21, instance=>2) ;


PL/SQL procedure successfully completed.


sql> commit;


Commit complete.


sql> conn BBBBBBB/BBBBBBB

Connected.


sql> exec dbms_job.instance(job=>3, instance=>1) ;


PL/SQL procedure successfully completed.


-- 변경 후 JOB 확인

sql> select job, log_user, what, instance

from dba_jobs

order by log_user, job;


       JOB LOG_USER                       WHAT                                                           INSTANCE

---------- ------------------------------ ------------------------------------------------------------ ----------

         2 AAAAAAAA                       dbms_refresh.refresh('"AAAAAAAA"."MST_PROD_INFO_VW"');                2

        21 AAAAAAAA                       dbms_refresh.refresh('"AAAAAAAA"."MST_PROD_VW"');                     2

         3 BBBBBBB                        dbms_refresh.refresh('"BBBBBBB"."PO2_GNR_SONG_CNT_VW"');              1


instance 가 '0' 이면 상대적으로 리소스 여유가 있는 node 에서 수행, '0'이 아니면 해당 노드에서 수행 된다.

'OraclE' 카테고리의 다른 글

DATAPUMP 암호화  (0) 2017.01.19
ORACLE 12c UNIFIED AUDIT 사용  (0) 2016.07.13
Auditing Enhancements (aud$ 테이블 관리)  (0) 2016.04.11
dbms_scheduler 변경  (2) 2016.01.04
flashback  (0) 2015.04.27

+ Recent posts