by 신정동개발자 [Oracle 기초] oracle partition ora-00054 [2023.06.12 15:23:30]
alter table table_name split partition LOG_20250628 at ('20230603000000') into (partition LOG_20230602, partition LOG_20250628);
-> partition 생성시 High Value 를 너무 넓게 잡아서 일자별로 split 시도
하지만 24시간 계속 Data 가 Insert 되는 Table 이라서 ORA-00054 오류 발생함
-> 검색해 보면 Table 을 잡고 있는 Lock session 을 Kill 한후에 수행 하라고 하는데 상시 Insert 하고 있는
Table 이라서 전체 Lock 을 Kill 할수가 없음
설명을 한다고는 했는데 ... 결론은 Lock 걸려있는 Table 에 Partition 을 Split 하는 방법을 질문 드립니다.
변경없는 과거데이터 범위부터 partition exchange 기능을 사용하시는 건 어떨지요.
아니면 새 테이블에 과거데이터부터 서서히 이관하시거나..?
답변 감사합니다.
지금 백업테이블 하나 만들어서 일자별로 데이터를 넣고 있는데 데이터가 많아서 너무 오래 걸리네요. ㅠㅠ
백업테이블에 데이터 넣고, rename 을 해볼까 하고 있습니다.
그리고 partition exchange 기능을 잘 몰라서, 혹시 참고할수 있는 URL 하나만 남겨 주실수 있는지요.
파티션 단위가 어떻게 되는지 모르겠지만 pajama 님 말씀하신 방법도 좋을 것으로 보이고
다음 파티션이 언제인지 모르겠지만 현재 쌓이고 있는 파티션 이후의 파티션을 미리 작게 나눠놓고 이후 시간이 지나 그 파티션을 사용하게 될 때 이전 파티션에 대한 작업을 하시는 것은 어떨까요
답변 감사합니다.
단위가 1일 단위인데, 20250628 잡아놔서 말씀하신 방법으로는 불가능 할거 같습니다.
최후에 방법은 서비스를 다 내리고 split 을 하는 방법 뿐이 없는거 같은데... 이게 꽤 부담스러운 상황이네요
새로 파티션 테이블 만들고 rename 하셔야 할것 같네요
시스템 중단시간도 있긴해야할것 같네요
rename시 index명도 rename 하셔야합니다
글로발 인덱스 쓰는곳은 파티션 날리려면 rename 작업하기도 합니다.
실수하면 큰일이라 사전테스트는 테스트서버에서 충분이 검토하시고 하세요
전 할때마다 손떨려서 ㅎㅎ
답변 감사합니다.
그냥 서비스중지후 lock kill 하고
split 을 해야 할까봐요
개발자라서 두렵기도 하네요
로그테이블 과거데이터가 크게 중요한것이 아니라면.....새로운마음으로.....truncate 후 스플릿을...