[DB] 파티션테이블 자동화 스크립트

SSuyn·2023년 5월 18일
0

DataBase

목록 보기
2/10

회사에서 파티션 생성을 2년치를 해야하는데 이걸 엑셀에다 옮겨서 날짜를 자동으로 증가시키고 어쩌구,, 하는게 너무 귀찮은 일이다.
쿼리로 자동화 스크립트 만들면 좋겠다 싶어서 한번 짜봤다.

월별 파티션 스크립트

해당 스크립트는 월별 파티션 생성 스크립트이다. 내가 하는건 월별도 있고 일별도 있어서 매우 귀찮은 반복 작업이다!
아래 처럼 명령어를 하나씩 입력해야한다...

ALTER TABLE SYS.EMP ADD PARTITION PR_202401 VALUES LESS THAN ('20240201') TABLESPACE TS_EMP_01; 

이걸 2024년 파티션 생성 스크립트를 만들어봤다!

select /*+ FIRST_ROWS */
  'alter table '||TABLE_OWNER||'.'||TABLE_NAME||' add partition '||'PR_'||DT||' values less than ('''||to_char(add_months(to_date(DT,'yyyymm'),1),'yyyymm') || '01'') tablespace '||TABLESPACE_NAME||';' as query
from (
          Select DT
          From (
                     Select to_char(add_months(to_date(to_char(sysdate,'yyyy')+1||'01','yyyymm'), LEVEL -1),'yyyymm') as DT from DUAL connect by LEVEL <= 24
               )
         ), DBA_TAB_PARTITIONS P
where TABLE_OWNER = '<계정이름>'
         and PARTITION_NAME like '%'||(to_char(sysdate,'yyyymm'))||''
         and TABLE_NAME='<테이블이름>order by P.TABLE_OWNER, P.TABLE_NAME, DT, PARTITION_NAME; 

이대로 하시면 2024년, 2025년 파티션 테이블 추가할 수 있는 스크립트가 생성됩니당! 만약 2024년만 하고 싶다면 level <= 12로 하시면 됩니다. 저 쿼리에서 어느정도 변경하면 입맛에 맞게 쿼리를 만드실 수 있습니다.

일별 파티션 스크립트

일별 파티션도 위와 마친가지로 하는 건데, 이건 일별이니까 만약 쿼리로 안짠다면 (절레절레) 나는 못짠다..

ALTER TABLE SYS.EMP ADD PARTITION PR_20240101 VALUES LESS THAN ('20240102') TABLESPACE TS_EMP_01; 

위와 같은 쿼리를 2024년 366개(2월 29일), 2025년 365개 만들어주면 된다!

select /*+ FIRST_ROWS */
  'alter table '||TABLE_OWNER||'.'||TABLE_NAME||' add partition '||'PR_'||DT||' values less than ('''||to_char(add_months(to_date(DT,'yyyymmdd'),1),'yyyymmdd') || ''') tablespace '||TABLESPACE_NAME||';' as query
from (
          Select TO_CHAR(DT,'yyyymmdd') DT
          From (
                     Select to_date(to_char(sysdate,'yyyy')+1||'01','yyyymm')+ LEVEL -1 as DT 
                     from DUAL connect by LEVEL <= LAST_DAY(to_date(to_char(sysdate,'yyyy')+2||'12','yyyymm')) - to_date(to_char(sysdate,'yyyy')+1||'01','yyyymm')+1
               )
          Order by DT
  ), DBA_TAB_PARTITIONS P
where TABLE_OWNER = '<계정이름>'
         and PARTITION_NAME like '%'||(to_char(sysdate,'yyyymmdd'))||''
         and TABLE_NAME='<테이블이름>order by P.TABLE_OWNER, P.TABLE_NAME, DT, PARTITION_NAME; 

쿼리를 다 만들어놓고 sqlplus에서 돌리는 방법은

파일이 sql 파일이라면 
SQL> @2024.sql

파일이 sh 파일이라면 
파일이 있는 디렉토리 위치에서 
[oracle@hawkfa01 DBA]$ ./2024.sh

이런식으로 돌리면 된다.

혹시 질문이 있거나 잘못된 내용이 있다면 댓글로 달아주세요 :)

profile
한량 DBA

0개의 댓글