로그테이블 관리에 대한 질문을 드립니다.. 0

by 하이바아아 [DB 기타] [2023.05.11 15:41:29]


현재 저희 회사는 오라클 11g standard 를 사용 중인데요.

다른곳에서는 로그테이블 관리를 어떻게 하는지 궁금해서요.

제가 로그테이블을 현재 용량이 약 300기가 정도 되면 rename  후 create 한다음에 별도로 export 로 내려받아서 아카이브 백업을 진행하고 있습니다. 물론 DB 전체 백업도 진행을 하긴 합니다.

여기서 질문이 있습니다..

 

1. 저와 같은 방법 말고 다른 방법으로 로그테이블을 관리하시는 방식이 있을까요?

2. 다른방법이 있다면 댓글좀 부탁드립니다.

 

그리고 한가지 더 질문이 있는데요,,,
저희가 트랜잭션 로그를 저장하는 로그테이블을 백업을 하고 있는데, 자체 자동화 명목으로 Shell 을 만들어 rename 쿼리를 작성하여 실행 시킨적이 있습니다.

(*기존에 RENAME 작업을 해놨던  A_1 이 있고,  현재 사용중인 A라는 테이블을 A_2로 만들고 A_1을 A로 RENAME 을 시키는 작업 이였습니다.)

근데 다음날 트랜잭션 로그테이블에 FULL scan 작업이 일어나 어마어마 한 로지컬리드가 발생하여 장애가 발생된 적이 있는데요,

확인해 보니 기존과 다르게 PK 를 안타고 있더라구요, 기존에 사용하던 테이블이였는데 통계정보 수집때문인지 왜 갑자기 옵티마이저가 FULL SCAN 을 선택했는지를 모르겠더라구요...

혹시 아시는분 있으시면 댓글 부탁드려요 ㅠㅠ 인덱싱 문제인지 ㅠㅠ

by 포동푸우 [2023.05.12 18:50:02]

테이블 구조를 PK, INdex 포함 동일하게 만드셨는데,, 
옵테마이저가 기존에 PK 사용하던 걸 Full Scan 으로 바뀌었다면, 통계 때문일 가능성이 큰 것 같습니다. 
위와 같은 작업을 진행하실 때는,, 기존 테이들/인덱스 의 통계정보를 백업 받아서 새 테이들 등에 import 하고, 해당 통계 정보가 변경되지 않도록 해당 테이블에 대한 통계정보변경 lock 을 걸어 두는 것이 좋을 것 샅습니다.  


by 포동푸우 [2023.05.12 18:54:22]

Standard Edition 이라 AWR 포함 제약이 많으시겠네요
기존 A 테이블 백업 시에 
-- exp/expdp 할 때 where 조건을 걸어서 선택적으로 받으실 수 있고
-- 백업용 B 테이블에 where 조건으로 insert into select 로 백업하고, 이후 기존 A 테이블을 truncate 하는 방법도 있고 
그렇습니다.    


by 하이바아아 [2023.05.15 09:17:48]

댓글 정말 감사합니다. 이번에 또 rename 작업을 진행하면서 테스트 해보니 궁금한게 하나 더생겼는데요..

rename 을 진행하면 통계정보 LOCK 이 바로 해제 되버리더라구요, 말씀하신것 처럼 exp/imp 가 답인거겠죠?

아니면 rename 을 하지않고 신규 create 를 하면 저런 증상이 안나타나니까 rename 을 하지 않던가 해야겠네요..

사람이 없을때 자동으로 등록하여 사용하려고 했는데, 결국 남아서 몬가 작업을 해줘야 하나봐요 ㅠㅠ

그리고 문제되던 날 db모니터링으로 분석을 해봤는데 정상적으로 PK를 잘 타다가 갑자기 몇시간 뒤에 SQL PLAN HASH 값이 두개가 되더니 FULL SCAN 을 타더라구요.. 어째서 플랜이 두개가 된건지.. 캐쉬메모리에 있던 SQL이 맞다고 판단하지 않아서 새로 생긴건지... 어렵네요.. 이 부분을 좀더 분석해 봐야 될 것 같습니다. 

답변 감사합니다^^


by 포동푸우 [2023.05.15 11:13:04]

PC/노트북 에 IP address 가 있고.. hostname 이 있듯이, Oracle Object 에는 object_id 와 object_name 이 있습니다. 

그리고 oracle 은 object_id 를 기준으로 인식하고, 적용을 합니다. object_name ( 우리가 보는 테이블 이름 ) 은 사람이 쉽게 인식하기 위한 별명 입니다. oracle 은 name 은 주석처럼,, 참고 자료일 뿐입니다. object_id 로 식별 합니다. 

 

이 관점에서, A 테이블 ( object__id = 12345 ) 를 AA 로 변경하고  ( object__id = 12345 ) ,, 새로 A 테이블 ( object__id = 22222 ) 를 생성하면, 

- 사람이 보기에는 동일한 A 테이블 이지만  

- Oracle 이 보기에는 알고 있는 Object 중 하나가 ( object__id = 12345 인 것) 그 속성 중 name 만 A 테이블 ~~> AA 로 바뀌었고,, 나머지 ( index, 통계 등 ) 은 변경이 없는 상태 입니다.  그리고  전혀 새로운 object 가 하나 생겼는데  ( object__id = 22222 ) 그 object 의 속성 중에 name 이 우연히 A 일 뿐입니다. 

- 기존의 통계 정보도 이제는 AA 에 그대로 적용되 있고,, 해당 Table 에 있던 Index, Constraint 도 이제는 AA 를 바라보고 있게 됩니다.  


by 포동푸우 [2023.05.15 11:15:55]

PK를 잘 타다가 갑자기 몇시간 뒤에 SQL PLAN HASH 값이 두개가 되더니 FULL SCAN 을 타더라구요 

~~> 엔진이 그렇게 판단한 이유, 당시에 엔진이 한 일을 알아야 합니다. Standard Edition 에서는 제약들이 있어 번거롭습니다. ㅎㅎ 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입