원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어

Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어

 

출처 : http://blog.naver.com/kohosh/100024437620

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

보통 데이터베이스를 운영하다 보면 온라인용으로 조그만 롤백 세그먼트 수십 개
(예를 들어 하나의 테이블스페이스 내에 여러 개의 조그만 롤백 세그먼트를
할당합니다.)와 커다란 DML용 롤백 1~2개를 만들어 놓고, 배치성 작업은
"set transaction use rollback segment 커다란_롤백세그먼트명;" 명령을 통해
해결한 후, OLTP(Online Transaction Processing)성 작업은 나머지 조그만 롤백
세그먼트를 번갈아 가면서 사용하면 됩니다.

그런데 이런 경우 혹시 배치작업 담당자가 커다란 DML 작업을 수행하기 전에
커다란 롤백 세그먼트를 할당하는 것을 잊어 버리면 그 작업은 대부분 에러가
발생합니다. 게다가 같은 롤백 세그먼트를 서로 다른 커다란 작업이 동시에
할당받아 사용하다가도 서로 간에 롤백 세그먼트 부족 에러가 빈번히 발생합니다.
더욱 황당한 것은 커다란 배치 작업은 주로 일일 야간에 수행을 하는 경우가 많은데,
몇 개의 작업들이 서로 같은 롤백 세그먼트를 할당받아 작업을 수행하다가
익스텐트 에러가 발생할 때가 있습니다. 이런 경우에는 롤백 세그먼트 장애가
발생한 프로그램에서 "set transaction use rollback segment
커다란_롤백세그먼트명;"의 롤백 세그먼트의 위치를 바꾸어야 작업이 정상적으로
수행되는데, 밤에 담당자와의 연락이 잘 안 되어 최종 소스가 어디 있는지 몰라서
롤백 세그먼트 위치 수정을 못하면 결국 아침에 온라인 장애로 이어지는 경우가
허다합니다. 오라클은 작업이 큰 트랜잭션이 실패하면 롤백하는 데 매우 많은
시간이 필요하므로 한 번 롤백 에러가 난 롤백 세그먼트는 위치를 바꾸어
수행하여야 에러가 발생하지 않습니다.
시스템이 대형화되고 작업이 다양해 질 수록 롤백 세그먼트 부족 에러가 빈번히
발생합니다.
그렇다면 이것을 해결할 수 있는 좋은 좋은 방법은 무엇일까요?

제가 운영하는 데이터베이스도 예상치 않게 야간 작업 중 롤백 세그먼트 부족
에러가 발생하여 밤잠을 설친 적이 한두 번이 아니었습니다.
이런 경우를 해결하기 위해 저는 이렇게 접근했습니다.

일단 조그만 롤백 세그먼트는 모두 없애고 커다란 RBS용 테이블스페이스를
여러 개를 만듭니다.제가 담당하는 데이터베이스는 1.5TB 크기인데 2GB
테이블스페이스를 15개 만들었습니다. 과거에는 조그만 롤백 45개와 커다란
롤백 5개로 운영을 하였으나 모든 RBS 테이블스페이스를 2GB로 동일하게
만들고 각 테이블스페이스당 롤백 세그먼트를 커다랗게 하나씩만 할당한
것입니다.
배치 프로그램에 설정되어 있는 "set transaction use rollback segment
RBS명"을 모두 빼어 모든 배치작업이 커다란 롤백 세그먼트를 돌아가면서
사용하게 하고, 만약에 장애가 나더라도 작업을 재수행하면 다른 롤백
세그먼트를 잡도록 하였습니다. 보통 15개 정도의 롤백 세그먼트가 있으면,
배치작업이 돌아가면서 롤백세그먼트를 사용하도록(Round-Robin)
시스템이 할당을 합니다.
온라인 트랜잭션이 혹시 동시에 몰릴 것을 고려하여 init<SID>.ora 파일의
transactions_per_rollback_segment = 30 파라미터를 설정하여 각 롤백
세그먼트당 30개의 트랜잭션을 허용하도록 하여, 동시에 최고 450개
(15개 * 30)의 트랜잭션이 허용되도록 하였습니다.

이렇게 바꾸고 난 후에는 한번도 롤백세그먼트 부족 에러로 밤에 전화를 받지
않게 되었습니다. 
번호 제목 글쓴이 날짜 조회 수
75 10g ORA-32004 : obsolete and/or deprecated parameter(s) specified 조인상 2010.05.12 10750
74 centOS 5.2 에 오라클 10g 설치 조인상 2010.05.12 109933
73 히든 파라미터 확인하는 쿼리 조인상 2010.05.12 62462
72 오라클 복구 시나리오 조인상 2010.05.12 16668
71 골든 5.7 버전 데모 file 조인상 2010.05.12 7864
70 오라클 온라인백업 스크립트 (ksh 용) [1] file 조인상 2010.05.12 100773
69 [9i feature] DB_CACHE_ADVICE / V$DB_CACHE_ADVICE 에 대해서 조인상 2010.05.12 8091
68 exp error - ORA-19206: Invalid value for query or REF CURSOR parameter 조인상 2010.05.12 156647
67 exp실행시 에러. ORA-06512 SYS.DBMS_METADATA_INT 조인상 2010.05.12 32658
66 OPN 가입시의 장점 file 조인상 2010.05.12 6721
65 오라클에 접속하는 최대 인스턴스개수(세션개수)를 늘리는 방법 조인상 2010.05.12 24667
64 Red Hat Enterprise Linux AS release 3 (Taroon) 기반에서 오라클 9.2.0 설치하기 조인상 2010.05.12 8084
63 Unix 에서 Raw Device 사용법 조인상 2010.05.12 14117
62 오라클 10g OCP 라이센스 업그레이드 정보 조인상 2010.05.12 7519
61 .net 과 오라클 연동에 대하여 조인상 2010.05.12 10334
60 [장애처리] 메모리 풀로 인한 OS hang-up 조인상 2010.05.12 9769
59 [설치장애기] 64비트 windows 2003에 오라클 10.2.0.1 32비트 설치시 ORA-12564에러 조인상 2010.05.12 16520
58 Redhat Linux 8.0 에 Oracle 9i install 조인상 2010.05.12 7616
57 레드햇리눅스9에 오라클9i설치중 hang 조인상 2010.05.12 8788
56 OS의 파일사이즈가 2GB로 제한될때 split으로 나누기 조인상 2010.05.12 6189
서버에 요청 중입니다. 잠시만 기다려 주십시오...