database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 1047 게시물 읽기
No. 1047
Re: [질문] 대량 데이타 update 문제
작성자
아마도
작성일
2000-06-23 09:36
조회수
18,572

> 아래 어떤분이 비슷한 질문 하셨던데...

> 만일 여러개의 data를 UPDATE하려고 합니다.

> 그런데 그 수가 너무 많아 UPDATE를 하다 ROLLBACK SEGMENT full이 일어날것 같거든요?

> 그래서 rownum을 이용하여 조금씩 잘라서 해주려고 합니다.

>

> UPDATE table_name SET attr='value' where rownum > 0 and rownum <= 100;

> commit;

> UPDATE table_name SET attr='value' where rownum > 101 and rownum <= 200;

> commit;

> ...

>

> 이런 식으로요...

> 만일 10000건이면 1~100, 101~200...이런식으로 해주려고 하거든요? ㅠ_ㅠ

> 다른 방법이 생각이 안 나요.

> 그래서 질문!!!!!!!

> rollback segment에 최대 몇개나 rollback을 해둘수 있는지 알 수는 없나요?

> 1~100 이 아니라, 1~(rollback할수 있는 최대갯수) 로 작업 할려구요.

>

> 정말 초짜이니 많은 도움 부탁드립니다. 그럼 미리 감사드려요!

 

 

먼저 상황을 분석하면 대량의 데이타를 한번에 변경할때는 항상 롤백세그먼트가

before data를 저장할 만한 충분한 크기로 확장될 수 있어야 합니다.

그러나 현재 님의 롤백세그먼트 중에서 그런 큰 롤백세그먼트가 없는 것 같군요.

 

방법은 여러가지가 있습니다.

1. 현재의 롤백세그먼트를 충분히 커질수 있게 환경을 변경시켜주는 것입니다.

롤백세그먼트의 extent 사이크는 변경이 불가능하므로 maxextents를 충분히

크게 잡고 롤백세그먼트가 속한 테이블스페이스를 늘려주는 방법입니다.

2. RBS를 늘리고, 롤백세그먼트를 모두 drop 시킨 후 적절한

extent,optimal size를 지정한 님의 환경에 적당한 롤백세그먼트를 만드는

것이 1번보다 더 좋습니다.

OLTP 에서 일반적인 트랜잭션을 위해서 저는 extent 10MB, Optimal 40MB,

롤백세그먼트 8개, 테이블스페이스 RBS는 500MB를 만듭니다.

( 평균 세션수 500 일때 기준 )

3. 제일 좋은 방법은 별도의 롤백세그먼트를 만듭니다.

보통 대량의 batch 작업을 위한 롤백세그먼트는 따로 잡아주어야 합니다.

저는 일반적인 중급 규모의 DB를 위한 batch성 롤백세그먼트 extent size를

100MB 크기로 하고, 별도의 테이블스페이스 RBS2에 만듭니다.

 

1,2,3의 방법은 다른 사람들이 전혀 사용하지 않는 상황에서 DBA가 조심스럽게

작업을 진행하셔야 합니다. 오라클 매뉴얼 administrator's guide,

SQL Reference, 튜닝 guide를 참조하세요.

 

 

그리고 님께서 만약 100건씩 짤라서 update하고 싶다면

위의 SQL은 원하는대로 작동하지 않습니다.

아래 문장을 계속 실행을 시키셔야 합니다.

이는 rownum 이라는 Pseudo columns의 특성 때문에 그렇습니다.

 

UPDATE table_name SET attr='value' where rownum < 101 ;

[Top]
No.
제목
작성자
작성일
조회
1049방명록 테이블 작성 질문임다
줄루
2000-06-23
18466
1053┕>Re: 방명록 테이블 작성 질문임다 [1]
정재익
2000-06-23 13:24:58
18651
1040oracle-8.1.6.1, php4, apache-1.3.12 설치에러
김대중
2000-06-22
18160
1041┕>Re: apachectl start 하면
아마도
2000-06-22 19:57:59
18499
1043 ┕>Re: Re: apachectl start 하면
김대중
2000-06-22 20:10:09
18292
1044  ┕>Re: Re: Re: apachectl start 하면
아마도
2000-06-22 21:01:48
16720
1045   ┕>다음은 root 상태에서 apachectl start 하기전 env 일부입니다.
김대중
2000-06-22 21:57:48
18454
1046    ┕>Re: 다음은 root 상태에서 apachectl start 하기전 env 일부입니다.
아마도
2000-06-23 09:14:27
18804
1039Oracle8.1 &amp; PHP4 &amp; apache1.3.12
Paddy
2000-06-22
15838
1042┕>Re: Oracle8.1 &amp; PHP4 &amp; apache1.3.12
아마도
2000-06-22 19:54:05
17213
1037[질문] 초보자입니다. 도와주세요! ㅠ_ㅠ
윤영식
2000-06-22
15864
1047┕>Re: [질문] 대량 데이타 update 문제
아마도
2000-06-23 09:36:00
18572
1036오라클 8.05 설치 질문
최병관
2000-06-22
15493
1048┕>Re: 오라클 8.05 설치 질문
아마도
2000-06-23 09:41:40
16393
1034Oracle8i 에서 계정을 줄때 기본 디렉토리가 어떻게 되는지요?
jegure
2000-06-21
14890
1038┕>Re: Oracle8i 에서 계정을 줄때... 유저 쿼터 얘기인가요?
아마도
2000-06-22 13:22:44
16292
1052 ┕>Re: Re: 감사합니다. ^^
질문자
2000-06-23 12:47:57
16783
1032서로다른 DB 에서 데이타를 교환하는데...
고추장
2000-06-21
14511
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.032초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다