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 41336 게시물 읽기
No. 41336
대량 delete 질문드립니다ㅠ
작성자
이름
작성일
2017-02-17 15:30
조회수
2,846

 안녕하세요.

오라클 DB 관련하여 궁금한 점이 생겨 찾아왔습니다.

우선 상황 설명을 드리자면..

 

현재 서비스 중인 시스템의 오라클 DB 중 성능향상을 목표로 특정 테이블의 데이터를 정리하고 싶은데요.

대략 2천만건 정도가 있는 테이블이고 그 중에 1900만건 정도를 별도 테이블에 백업 후 삭제할 예정입니다.

CREATE TABLE AAA_BACKUP_날짜

AS SELECT * FROM AAA WHERE 조건

으로 삭제할 데이터 백업은 간단하게 해결했는데요..

 

문제는 이제 AAA 테이블에서 1900만건 삭제 시

DELETE FROM AAA WHERE 조건

쿼리를 사용할 경우 속도는 물론이거니와 redo 로그? 사이즈 문제 때문에 걱정이 됩니다. (전문 분야가 아니라 자세히 알지는 못합니다ㅠ)

실제로 과거 같은 DB에서 비슷한 작업 (대량의 데이터 delete)을 진행하다가 로그 사이즈 full로 인하여 DB가 아예 뻗어버리는... (실 운영중인 서비스ㅠ)

불상사가 발생하기도 했구요..

 

구글링을 좀 해보았습니다만..

 유지할 데이터 (위 예시의 경우 약 100만건)를 CTAS를 사용하여 임시테이블에 복사한 후 -> 기존 테이블 삭제(truncate) -> 임시테이블명을 기존 테이블명으로 변경

하는 방법이 성능면에서 가장 추천되는 방법이라고 들었는데요.

 

지금같은 경우 서비스 중지가 어려운 상황이라.. 서비스 중인 상태에서 위 작업을 진행해야 하며

undo로그나 redo로그 롤백 세그먼트 등 DBMS 관리 측면의 부분들은 제가 DBA도 아닐뿐더러 권한이 없어 수정 등의 작업이 어려운 상황입니다..

 

혹시 대량 데이터 delete 시 좋은 다른 방법이 없을까요??

 

질문드리다 보니 글이 길어졌는데 읽어주셔서 감사합니다.!

 

이 글에 대한 댓글이 총 1건 있습니다.

한꺼번에 지우시기보다 나눠서 지우시면 됩니다.

날짜또는 채번 필드로 기준을 잡으시면 되겠죠.

운영중에 하셔야하고 LOCK발생으로 인한 경합도 고려해야 하니 가능한 작은 단위 트랜잭션이 좋고,

하루에 하기에 많다면 며칠에 걸쳐서 지울수도 있겠구요.

정상규(pajama)님이 2017-02-17 16:24에 작성한 댓글입니다.
이 댓글은 2017-02-17 16:26에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
41339질문) Linux (CentOS6.6) - Oracle 스크립트 사용하는방법 [2]
우가가
2017-02-21
2271
41338view에 대해서 하나만 물어볼게요. [2]
김정훈
2017-02-20
2329
41337BLOB time select는 어떻게 해야 하나요? [1]
김기훈
2017-02-18
2259
41336대량 delete 질문드립니다ㅠ [1]
이름
2017-02-17
2846
41335힌트 문의사항 입니다.
이민우
2017-02-17
2435
41334컬럼의 결과를 IN으로 조회하는 방법? [3]
작성자
2017-02-14
2625
41333bypass_ujvc 옵션을 대체하는 방법이 무엇인가요? [2]
앙마승재
2017-02-13
2476
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.071초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다