RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'RAC'에 해당되는 글 4

RAC 에서의 노드간 parallel process 제어

2014-07-14 수정됨

 

Serivce name : TESTDB

SID  :  TESTDB1  /  TESTDB2

 



10gR2
2개 파라미터만 설정 한다(SERVICE 등록 X)


Alter system set INSTANCE_GROUPS='
testdb1srv ' sid='TESTDB1';
Alter system set INSTANCE_GROUPS='
testdb2srv ' sid='TESTDB2';

Alter system set parallel_instance_group = '
testdb1srv ' sid='TESTDB1';
Alter system set parallel_instance_group = '
testdb1srv ' sid='TESTDB2';





11gR1 (11gR2는 아래쪽에 기술되어있음)

 

instance_groups 이라는 parameter 11gR1 에서는 더 이상 사용되지 않고,
기본적으로 service 단위로 parallel query 가 수행되게 됩니다.

정리 : 11gR1 에서는
INSTANCE_GROUPS 를 사용하지 않는다
parallel_instance_group 와 서비스로 설정한다.


서비스 등록 및 parallel_instance_group 파라미터를 이용하여 parallel 쿼리 수행 시

다른 노드에slave process 를 뜨지 않도록 설정 하는 것입니다.

 


먼저 진행하는 상태는 아무것도 설정하지 않은 상태 입니다(설치 후 초기 상태)

 

 

1. 테스트 테이블 생성

create table tb_test

( no number )

tablespace users;

 

 

2. 테스트 테이블에 10만건 데이터 입력

declare

    i number;

begin

    for i in 1..100000 loop

        insert into tb_test values(i);

    end loop;

    commit;

end;

/

 

 

 

3. 스크립트 준비

 

3-1. mon.sql

 

SET linesize 200

COLUMN machine format a30

COLUMN program format a60

SELECT inst_id, machine,  program

FROM gv$session

WHERE sql_id in (

                  SELECT sql_id

                  FROM gv$sqlarea

                  WHERE sql_text ='SELECT /*+ PARALLEL(P 4) */ * FROM TB_TEST P ORDER BY NO DESC'

                )

/

 

 

3-2. parallel.sql

 

SELECT /*+ PARALLEL(P 4) */ * FROM TB_TEST P ORDER BY NO DESC

/

 

 

 

 

4. 스크립트 실행

세션을 2개 접속 후 각각 쿼리를 실행하여 병렬프로세스가 모든 노드에서 구동되는지를 확인 한다.

 

parallel.sql 을 실행 후 다른 세션에서 mon.sql 을 실행해서 확인 해보면 아래와 같이

모든 노드에서 parallel slave process 가 구동되고 있음을 확인 할 수 있습니다.

 

 

 

5. 서비스 생성 및 파라미터 적용

 

srvctl add service -d TESTDB -s testdb1srv -r TESTDB1

srvctl add service -d TESTDB -s testdb2srv -r TESTDB2

 

 =>  데이터베이스 명과 instance 명은 대소문자를 구별한다.

     -d 데이터베이스명   -s 서비스명   -r 인스턴스명

 

 

6. 서비스 구동

srvctl start service -d TESTDB -s testdb1srv

srvctl start service -d TESTDB -s testdb2srv

 

 

7. 서비스 생성 확인.

crs_stat -t 로 서비스가 등록 되었는지 확인한다

 

 

8. 파라미터 설정

위에서 서비스2개를 생성 되었다면 PARALLEL_INSTANCE_GROUP  설정한다. (sid 별로 설정)

ALTER SYSTEM SET PARALLEL_INSTANCE_GROUP=testdb1srv sid='TESTDB1';

ALTER SYSTEM SET PARALLEL_INSTANCE_GROUP=testdb2srv sid='TESTDB2';

 

 

instance service 간의 연결정보는 아래의 query 를 이용한다.

 

set lines 400

col service_name for a30
select s.inst_id, instance_number, instance_name, name service_name, host_name
from gv$services s, gv$instance i
where s.inst_id=i.inst_id;

 

 

9. 테스트

설정이 완료 되었으며, 스크립트를 다시 실행하여 parallel slave process 구동을 살펴 본다.

테스트 방법은 4번 항목과 동일하다.

 

 

 

11gR2 에서는 PARALLEL_FORCE_LOCAL 파라미터 만 이용한다

PARALLEL_FORCE_LOCAL 파라미터의 default 값은 FALSE 

모든 노드에서 parallel slave process 가 구동됨으로 이전과 같이 인스턴스내에서

수행되게 하려면 아래와 같은 커맨드로 가능하게 된다.

 

ALTER SYSTEM SET PARALLEL_FORCE_LOCAL=TRUE sid='*';




페도라 한국 사용자 모임

페도라 한국 사용자 모임 태랑의 포스팅글입니다
  파이어폭스에 최적화 되어있습니다
2012/08/19 02:10 2012/08/19 02:10

이 포스트가 유용하셨다면 구독하세요

http://www.commit.co.kr/trackback/119

11gR2 RAC 11.2.0.2 에서 11.2.0.3 으로 Out-Of-Place 방식으로 Upgrade 진행 하는 내용의 문서 입니다.




페도라 한국 사용자 모임

페도라 한국 사용자 모임 태랑의 포스팅글입니다
  파이어폭스에 최적화 되어있습니다
2012/01/11 03:35 2012/01/11 03:35

이 포스트가 유용하셨다면 구독하세요

http://www.commit.co.kr/trackback/111


Oracle Single Instance를 RAC 로 변경 하는 내용 입니다.







페도라 한국 사용자 모임

페도라 한국 사용자 모임 태랑의 포스팅글입니다
  파이어폭스에 최적화 되어있습니다
2011/12/09 06:28 2011/12/09 06:28

이 포스트가 유용하셨다면 구독하세요

http://www.commit.co.kr/trackback/101
 RAC to clonedb(single)

 

 

1. TEST Information

Items

Description

Test Date

2011 / 12 / 04

CPU

VirtualBox VCPUx4

Main Memory

2GB

O/S version

RHEL 5.5

Host Name

test1, test2

ORACLE_SID

testdb1, testdb2

Oracle version

10.2.0.5

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Scenario

 

1) 현재 testdb1 , testdb2 SID RAC(10.2.0.5) 에서 HOT Backup을 이용하여 clonedb를 생성

2) 복제 되는 instance SID copydb 로 할 것이며, single 로 복구를 시도 할 것이다.

3) RAC /oradata/testdb ,  single /oradata3/copydb 로 복구 할 것이다.

 

 

 

3. HOT BACKUP

 

■ 테스트를 간편하게 하기 위해 alter database begin backup; 으로 백업 진행한다.

 

SQL> alter database begin backup;

 

Redo Temp Tablespace 파일을 제외한 모든 datafile 을 복사 한다.

$ cp system01.dbf /oradata3/copydb/

$ cp sysaux01.dbf /oradata3/copydb/

$ cp undotbs01.dbf /oradata3/copydb/

$ cp undotbs02.dbf /oradata3/copydb/

$ cp users01.dbf /oradata3/copydb/

 

 

■ 복사 후 end backup  을 실행한다.

 

SQL> alter database end backup;

 

END Backup 을 실행한 시간을 확인한다.

SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') "Time" from dual;

 

Time

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

2011-12-04:12:10:09

 

 

 

 

 

4. TEST Table Creation

 

■ 복사 후 복구 테스트를 위해서 테이블과 데이터를 입력한다.

 

■ 테이블 생성

SQL> create table test01 (no number) tablespace users;

 

데이터 입력

 

BEGIN

for i in 1..1000 loop

insert into test01 values(i);

end loop;

commit;

END;

/

 

 

log switch  checkpoint 발생

SQL> alter system switch logfile;   -- 수회 실행

 

 

test table삭제

SQL> drop table test01 purge;

 

 

■ 삭제 시간 확인

SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') "Time" from dual;

 

Time

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

2011-12-04:12:26:00

 

 

 

 

 

5. Ready to clonedb

 

spfile pfile을 생성

SQL> create pfile='$ORACLE_HOME/dbs/initCOPYDB.ora' from spfile;

 

controlfile 재생성을 위해 trace 파일 생성

SQL> alter database backup controlfile to trace as '/oradata3/copydb/recon.sql';

 

pfile 수정

아래 파라미터를 clonedb 환경에 맞게 수정 한다, 물론 디렉토리도 생성을 해야 한다.

*.audit_file_dest=

*.background_dump_dest=

*.control_files='

*.user_dump_dest='

*.db_name='testdb'

 

RAC 파라미터 변경, 아래와 같이 변경

*.instance_number=1

*.cluster_database=false

*.thread=1

*.undo_tablespace='UNDOTBS1'

 

 

pfile 수정

create controlfile 절을 수정한다.

CREATE CONTROLFILE SET DATABASE "COPYDB" RESETLOGS  NOARCHIVELOG

   REUSE => SET

  NORESETLOGS => RESETLOGS

  

그 외 경로를 clonedb에 맞게 수정한다.

 

복구 하고 open temp tablespace를 생성 함으로 temp tablespace 생성 절을 별도로 백업 해둔다

ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata3/copydb/temp01.dbf'

SIZE 524288000  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

 

아래와 같이 CHARACTER SET KO16MSWIN949;   까지 유지해서 파일을 작성한다.

 

 

STARTUP NOMOUNT

CREATE CONTROLFILE SET DATABASE "COPYDB" RESETLOGS  NOARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 (

    '/oradata3/copydb/redo01a.log',

    '/oradata3/copydb/redo01b.log'

  ) SIZE 300M,

  GROUP 2 (

    '/oradata3/copydb/redo02a.log',

    '/oradata3/copydb/redo02b.log'

  ) SIZE 300M,

  GROUP 3 (

    '/oradata3/copydb/redo03a.log',

    '/oradata3/copydb/redo03b.log'

  ) SIZE 300M,

  GROUP 4 (

    '/oradata3/copydb/redo04a.log',

    '/oradata3/copydb/redo04b.log'

  ) SIZE 300M

-- STANDBY LOGFILE

DATAFILE

  '/oradata3/copydb/system01.dbf',

  '/oradata3/copydb/undotbs01.dbf',

  '/oradata3/copydb/sysaux01.dbf',

  '/oradata3/copydb/undotbs02.dbf',

  '/oradata3/copydb/users01.dbf'

CHARACTER SET KO16MSWIN949;

 

 

 

 

6. Creation clonedb

 

sid를 변경하고 컨트롤 파일을 재생성 한다.

$ export ORACLE_SID=COPYDB

 

SQL*Plus: Release 10.2.0.5.0 - Production on Sun Dec 4 12:48:19 2011

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

Connected to an idle instance

SQL> @recon.sql

 

 

■ 시간 기반으로 복구 한다.

 

복구를 진행할 세션에서 복구하기 편한 방식으로 시간 설정을 한다.

SQL> alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS';

 

 

삭제한 시간이 2011-12-04:12:26:00 이기 때문에 24 분으로 복구 하겠다.

 

SQL> recover database until time '2011-12-04:12:24:00' using backup controlfile;

 

복구를 실시하면 아래와 같이 아카이브 파일을 필요로 한다.

ORA-00279: change 565796 generated at 12/04/2011 12:01:54 needed for thread 2

ORA-00289: suggestion : /oracle/product/102/db/dbs/arch2_14_768267462.dbf

ORA-00280: change 565796 for thread 2 is in sequence #14

 

위에서 알 수 있는 것은 thread 2(RAC에서 2번째 노드) 의 시퀀스 14번 을 가진 아카이브를 원하는

것이다 .

테스트 환경에서는 파일명이 arc_2_14_768267462.arc  이며, 경로 및 파일을 입력한다.

 

 

파일명 입력

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/oradata/arch_testdb/arc_2_14_768267462.arc

 

 

이번에는 thread 1 change 565796 을 포함 한 아카이브 파일을 입력 해야 한다.

ORA-00279: change 565796 generated at  needed for thread 1

 

 

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

 

 

RAC 로 접속해서 쿼리를 수행하여 THREAD1565796 변경본이 포함된 아카이브 파일을 찾는다.

SQL> set lines 500

SQL> col name for a50

SQL> SELECT THREAD# ,SEQUENCE# , FIRST_CHANGE#, NEXT_CHANGE#, NAME,

TO_CHAR(FIRST_TIME,'YYYY-MM-DD:HH24:MI:SS') FIRST_TIME  FROM V$ARCHIVED_LOG;

 

 

 

THREAD#  SEQUENCE  # FIRST_CHANGE   # NEXT_CHANGE#      NAME                                   FIRST_TIME

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

  2          14       553454              567190      /oradata/arch_testdb/arc_2_14_768267462.arc    2011-12-04:05:52:04

  2          15       567190              567247      /oradata/arch_testdb/arc_2_15_768267462.arc    2011-12-04:12:20:05

  2          16        567247             567249      /oradata/arch_testdb/arc_2_16_768267462.arc    2011-12-04:12:20:09

  1          11       553456              567252    /oradata/arch_testdb/arc_1_11_768267462.arc   2011-12-04:05:52:05

  2          17       567249              567254      /oradata/arch_testdb/arc_2_17_768267462.arc    2011-12-04:12:20:12

  2          18       567254              567274      /oradata/arch_testdb/arc_2_18_768267462.arc    2011-12-04:12:20:15

  2          19       567274              567279      /oradata/arch_testdb/arc_2_19_768267462.arc    2011-12-04:12:21:12

  1          12       567252              567293      /oradata/arch_testdb/arc_1_12_768267462.arc    2011-12-04:12:20:14

 

확인 해 보면 arc_1_11_768267462.arc 파일인 것을 알 수 있다. 아래와 같이 경로와 파일명을 입력한다.

 

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/oradata/arch_testdb/arc_1_11_768267462.arc

 

 

 

 

 

ORA-00279: change 567190 generated at 12/04/2011 12:20:05 needed for thread 2

ORA-00289: suggestion : /oracle/product/102/db/dbs/arch2_15_768267462.dbf

ORA-00280: change 567190 for thread 2 is in sequence #15

ORA-00278: log file '/oradata/arch_testdb/arc_2_14_768267462.arc' no longer

needed for this recovery

 

change 567190 for thread 2 is in sequence #15 메세지를 보면 THREAD215 시퀀스 아카이브 파일을

필요로 한다는 것을 알 수 있다. 경로 및 파일명을 입력한다.

 

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/oradata/arch_testdb/arc_2_15_768267462.arc

 

 

위와 같은 패턴으로 요청하는 아카이브 파일을 계속 적용해준다.

 

운영중인 RAC에 생성 된 아카이브 보다 더 높은 시퀀스를 요구 한다면 로그 스위치를 발생하여

생성한 아카이브를 적용 시켜준다.

 

계속 적용 시키면 아래와 같이 recovery가 되었다는 메세지를 볼 수 있다.

 

Log applied.

Media recovery complete.

 

resetlogsinstanceopen한다

SQL> alter database open resetlogs;

 

Temp Tablespace 를 추가한다.

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata3/copydb/temp01.dbf'

SIZE 524288000  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;


 

■ 예외 처리

아래와 같이 ORA-38856 가 나오게 되면 Unpulbished Bug-4355382 로써

오라클 문서ID: 334899.1 를 참조한다.

ERROR at line 1:

ORA-38856: cannot mark instance UNNAMED_INSTANCE_2 (redo thread 2) as enabled

 

pfile_no_recovery_through_resetlogs=TRUE  를 추가한 후 다시 resetlogsopen한다.

 

open test01 테이블이 복구 되었는지 조회해 본다.

 

select count(*) from test01;

  COUNT(*)

----------

      1000




페도라 한국 사용자 모임

페도라 한국 사용자 모임 태랑의 포스팅글입니다
  파이어폭스에 최적화 되어있습니다
2011/12/04 15:03 2011/12/04 15:03

이 포스트가 유용하셨다면 구독하세요

http://www.commit.co.kr/trackback/100
태랑:Extreme Performance DBA 를 꿈꾼다
admin@commit.co.kr / 
purityboy83@gmail.com
Extreme Performance DBA 를 꿈꾼다 admin@commit.co.kr / purityboy83@gmail.com
전체보기 (112)
Solaris (14)
Linux (45)
DATABASE (32)
Enterprise Manager (4)
Virtualization (0)
JAVA / C / 그외 개발언어 (3)
넓은 세상의 이야기들 (14)

Tag List