행위

"데이터이행 DDL작업"의 두 판 사이의 차이

DB CAFE

(새 문서: 0. 작업 대상 추출 - Non Partitioned Table 먼저 진행 select b.owner,b.table_name,b.column_name from ( select owner, table_name, max(column_id) column_id from dba_t...)
 
1번째 줄: 1번째 줄:
 +
== 0. 작업 대상 추출 ==
 +
- NON PARTITIONED TABLE 먼저 진행
 +
<source lang=sql>
 +
SELECT B.OWNER,B.TABLE_NAME,B.COLUMN_NAME
 +
  FROM (
 +
        SELECT OWNER, TABLE_NAME, MAX(COLUMN_ID) COLUMN_ID
 +
          FROM DBA_TAB_COLUMNS
 +
        WHERE OWNER IN ('CYKADM')
 +
        GROUP BY OWNER, TABLE_NAME) A, DBA_TAB_COLUMNS B
 +
        WHERE A.OWNER = B.OWNER
 +
          AND A.TABLE_NAME = B.TABLE_NAME
 +
          AND A.COLUMN_ID = B.COLUMN_ID
 +
          AND B.COLUMN_NAME != 'MOD_DT'
 +
          AND NOT EXISTS (SELECT 1
 +
                            FROM DBA_PART_TABLES C
 +
                            WHERE A.TABLE_NAME = C.TABLE_NAME
 +
                          )
 +
      ) 
 +
ORDER BY B.OWNER, B.TABLE_NAME;
 +
</source>
  
0. 작업 대상 추출 - Non Partitioned Table 먼저 진행
+
== 1. ZB TABLE 생성 (FROM ERWIN) ==
  
select b.owner,b.table_name,b.column_name
 
from (
 
    select owner, table_name, max(column_id) column_id
 
    from dba_tab_columns
 
    where owner in ('OOADM')
 
    group by owner, table_name) a, dba_tab_columns b
 
where a.owner = b.owner
 
and a.table_name = b.table_name
 
and a.column_id = b.column_id
 
and b.column_name != 'MOD_DT'
 
and not exists (select 1 from dba_part_tables c where a.table_name = c.table_name)
 
order by b.owner, b.table_name;
 
  
1. ZB Table 생성 (From ERwin)  
+
== 2. OBJECT 확인 ==
 +
<source lang=sql>
 +
SELECT OWNER, 'T'||SUBSTR(TABLE_NAME,2), COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_PRECISION,DATA_SCALE
 +
  FROM DBA_TAB_COLUMNS
 +
WHERE OWNER = 'CYKADM' AND TABLE_NAME IN ('Z_MD_XXX')
 +
MINUS
 +
SELECT OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_PRECISION,DATA_SCALE
 +
  FROM DBA_TAB_COLUMNS
 +
WHERE OWNER = 'CYKADM' AND TABLE_NAME IN ('Z_MD_XXX')
 +
;
 +
</source>
  
 +
<source lang=sql>
 +
SELECT OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_PRECISION,DATA_SCALE
 +
  FROM DBA_TAB_COLUMNS
 +
WHERE OWNER = 'CYKADM' AND TABLE_NAME IN ('Z_MD_XXX')
 +
MINUS
 +
SELECT OWNER, 'T'||SUBSTR(TABLE_NAME,2), COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_PRECISION,DATA_SCALE
 +
  FROM DBA_TAB_COLUMNS
 +
WHERE OWNER = 'CYKADM' AND TABLE_NAME IN ('Z_MD_XXX')
 +
;
 +
</source>
  
2. Object 확인.  -- OYDBA 계정에서 작업
 
  
select owner, 'T'||substr(table_name,2), column_name, data_type, data_length, nullable, data_precision,data_scale
+
== 3. 데이타 COPY ==
from dba_tab_columns
+
<source lang=sql>
where owner = 'OOADM' and table_name in (
+
SELECT 'INSERT /*+ APPEND */ INTO Z_'||MAX(SUBSTR(A.TABLE_NAME,4))||' NOLOGGING'||CHR(10)||
'ZB_MD_GDS_SEL_CHNL_L_H'
+
       '( '||LISTAGG(A.COLUMN_NAME, CHR(10)||',') WITHIN GROUP (ORDER BY A.COLUMN_ID) ||CHR(10)||
)
 
minus
 
select owner, table_name, column_name, data_type, data_length, nullable, data_precision,data_scale
 
from dba_tab_columns
 
where owner = 'OOADM' and table_name in (
 
'TB_MD_GDS_SEL_CHNL_L_H'
 
);
 
 
 
select owner, table_name, column_name, data_type, data_length, nullable, data_precision,data_scale
 
from dba_tab_columns
 
where owner = 'OOADM' and table_name in (
 
'TB_MD_GDS_SEL_CHNL_L_H'
 
)
 
minus
 
select owner, 'T'||substr(table_name,2), column_name, data_type, data_length, nullable, data_precision,data_scale
 
from dba_tab_columns
 
where owner = 'OOADM' and table_name in (
 
'ZB_MD_GDS_SEL_CHNL_L_H'
 
);
 
 
 
 
 
3. 데이타 Copy  -- OOADM 계정에서 작업
 
 
 
SELECT 'INSERT /*+ APPEND */ INTO ZB_'||MAX(SUBSTR(a.table_name,4))||' NOLOGGING'||CHR(10)||
 
       '( '||LISTAGG(a.column_name, CHR(10)||',') WITHIN GROUP (ORDER BY a.column_id) ||CHR(10)||
 
 
       ') '||CHR(10)||
 
       ') '||CHR(10)||
       'SELECT '||CHR(10)||'B.'||LISTAGG(a.column_name, CHR(10)||',B.') WITHIN GROUP (ORDER BY a.column_id)||CHR(10)||
+
       'SELECT '||CHR(10)||'B.'||LISTAGG(A.COLUMN_NAME, CHR(10)||',B.') WITHIN GROUP (ORDER BY A.COLUMN_ID)||CHR(10)||
       'FROM '||MAX(a.table_name)||' B;'||CHR(10)||
+
       ' FROM '||MAX(A.TABLE_NAME)||' B;'||CHR(10)||
 
       'COMMIT;'
 
       'COMMIT;'
FROM all_tab_columns a, all_col_comments b
+
  FROM ALL_TAB_COLUMNS A, ALL_COL_COMMENTS B
WHERE a.table_name = b.table_name
+
WHERE A.TABLE_NAME = B.TABLE_NAME
  AND a.column_name = b.column_name
+
  AND A.COLUMN_NAME = B.COLUMN_NAME
  AND a.table_name in (
+
  AND A.TABLE_NAME IN ('TB_MD_XXX');
'TB_MD_GDS_SEL_CHNL_L_H'   -- TB 테이블
+
</source>
);
 
  
 +
== 3. 인덱스 생성 ==
 +
<source lang=sql>
 +
SELECT 'CREATE '||DECODE(MAX(B.UNIQUENESS),'UNIQUE','UNIQUE')||' INDEX '||A.INDEX_OWNER||'.'||'Z'||SUBSTR(A.INDEX_NAME,2)||CHR(10)||
 +
      ' ON '||INDEX_OWNER||'.'||'Z'||SUBSTR(A.TABLE_NAME,2)||' ('||LISTAGG(A.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY A.COLUMN_POSITION)||')'||CHR(10)||
 +
      (SELECT LOCALITY||CHR(10) FROM DBA_PART_INDEXES C WHERE A.INDEX_NAME = C.INDEX_NAME) ||
 +
      'TABLESPACE '||MAX(B.TABLESPACE_NAME)||(SELECT DEF_TABLESPACE_NAME FROM DBA_PART_INDEXES C WHERE A.INDEX_NAME = C.INDEX_NAME)||CHR(10)||
 +
      'NOLOGGING;'||CHR(10)||
 +
      'ALTER INDEX '||A.INDEX_OWNER||'.'||'Z'||SUBSTR(A.INDEX_NAME,2)||' LOGGING;'
 +
  FROM DBA_IND_COLUMNS A, DBA_INDEXES B
 +
WHERE INDEX_OWNER = 'CYKADM'
 +
  AND A.INDEX_OWNER = B.OWNER
 +
  AND A.INDEX_NAME = B.INDEX_NAME
 +
  AND A.INDEX_NAME NOT LIKE '%_OLD'
 +
  AND B.TABLE_NAME IN ('TB_MD_XXX')
 +
GROUP BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME
  
3. 인덱스 생성
+
UNION ALL  -- PK CONSTRAINT
  
select 'CREATE '||decode(max(b.UNIQUENESS),'UNIQUE','UNIQUE')||' INDEX '||a.index_owner||'.'||'Z'||substr(a.index_name,2)||CHR(10)||
+
SELECT 'ALTER TABLE '||INDEX_OWNER||'.'||'Z'||SUBSTR(A.TABLE_NAME,2)||' ADD CONSTRAINT '||'Z'||SUBSTR(A.INDEX_NAME,2)||' PRIMARY KEY ('||LISTAGG(A.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY A.COLUMN_POSITION)||');'||CHR(10)
      ' ON '||index_owner||'.'||'Z'||substr(a.table_name,2)||' ('||LISTAGG(a.column_name, ',') WITHIN GROUP (ORDER BY a.column_position)||')'||CHR(10)||
+
  FROM DBA_IND_COLUMNS A, DBA_INDEXES B
      (select locality||CHR(10) from dba_part_indexes c where a.index_name = c.index_name) ||
+
WHERE INDEX_OWNER = 'CYKADM'
      'TABLESPACE '||max(b.tablespace_name)||(select def_tablespace_name from dba_part_indexes c where a.index_name = c.index_name)||CHR(10)||
+
  AND A.INDEX_OWNER = B.OWNER
      'NOLOGGING;'||CHR(10)||
+
  AND A.INDEX_NAME = B.INDEX_NAME
      'ALTER INDEX '||a.index_owner||'.'||'Z'||substr(a.index_name,2)||' LOGGING;'
+
  AND (A.INDEX_NAME LIKE 'PK%' AND A.INDEX_NAME NOT LIKE '%_OLD')
from dba_ind_columns a, dba_indexes b
+
  AND B.TABLE_NAME IN ('TB_MD_XXX')
where index_owner = 'OOADM'
+
GROUP BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME
and a.index_owner = b.owner
 
and a.index_name = b.index_name
 
and a.index_name not like '%_OLD'
 
and b.table_name in (
 
'TB_MD_GDS_SEL_CHNL_L_H'
 
)
 
group by a.index_owner,a.table_name,a.index_name
 
UNION ALL  -- PK Constraint
 
select 'ALTER TABLE '||index_owner||'.'||'Z'||substr(a.table_name,2)||' ADD CONSTRAINT '||'Z'||substr(a.index_name,2)||' PRIMARY KEY ('||LISTAGG(a.column_name, ',') WITHIN GROUP (ORDER BY a.column_position)||');'||CHR(10)
 
from dba_ind_columns a, dba_indexes b
 
where index_owner = 'OOADM'
 
and a.index_owner = b.owner
 
and a.index_name = b.index_name
 
and (a.index_name like 'PK%' and a.index_name not like '%_OLD')
 
and b.table_name in (
 
'TB_MD_GDS_SEL_CHNL_L_H'
 
)
 
group by a.index_owner,a.table_name,a.index_name
 
 
;
 
;
 
+
</source>
4. 권한 부여 Script 수행
+
== 4. 권한 부여 SCRIPT 수행 ==
 
+
<source lang=sql>
select 'GRANT '||privilege||' ON '||owner||'.'||table_name||' TO '||grantee||';'
+
SELECT 'GRANT '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' TO '||GRANTEE||';'
from dba_tab_privs
+
FROM DBA_TAB_PRIVS
where owner = 'OOADM'
+
WHERE OWNER = 'CYKADM'
and table_name in (
+
AND TABLE_NAME IN (
'TB_MD_GDS_SEL_CHNL_L_H'
+
'TB_MD_XXX'
 
);
 
);
 +
</source>
  
 +
== 5. 권한 점검 ==
 +
<source lang=sql>
 +
SELECT GRANTEE, OWNER,TABLE_NAME,GRANTOR,PRIVILEGE
 +
  FROM DBA_TAB_PRIVS
 +
WHERE OWNER = 'CYKADM'
 +
  AND TABLE_NAME IN ('TB_MD_XXX')
 +
MINUS
 +
SELECT GRANTEE, OWNER,'T'||SUBSTR(TABLE_NAME,2),GRANTOR,PRIVILEGE
 +
  FROM DBA_TAB_PRIVS
 +
WHERE OWNER = 'CYKADM'
 +
  AND TABLE_NAME IN ('Z_MD_GDS_SEL_CHNL_L_H');
 +
</source>
  
 +
== 6. RENAME 작업 ==
  
5. 권한 점검
+
* T -> XT, Z -> T 전환 (제약사항,테이블명,인덱스 변경 )
 
 
select grantee, owner,table_name,grantor,privilege
 
from dba_tab_privs
 
where owner = 'OOADM'
 
and table_name in (
 
'TB_MD_GDS_SEL_CHNL_L_H'
 
)
 
MINUS
 
select grantee, owner,'T'||SUBSTR(table_name,2),grantor,privilege
 
from dba_tab_privs
 
where owner = 'OOADM'
 
and table_name in (
 
'ZB_MD_GDS_SEL_CHNL_L_H'
 
);
 
 
 
 
 
6. Rename 작업
 
 
 
TB -> YB, ZB -> TB
 
 
 
select STATEMENT from (
 
select 'ALTER TABLE '||owner||'.'||table_name||' RENAME CONSTRAINT '||'PK_'||substr(table_name,4)||' TO '||'YK_'||substr(table_name,4)||';'||CHR(10)||
 
      'ALTER TABLE '||owner||'.'||table_name||' RENAME TO '||'Y'||substr(table_name,2)||';'||CHR(10)||
 
      'ALTER TABLE '||owner||'.'||'Z'||substr(table_name,2)||' RENAME CONSTRAINT '||'ZK_'||substr(table_name,4)||' TO '||'PK_'||substr(table_name,4)||';'||CHR(10)||
 
      'ALTER TABLE '||owner||'.'||'Z'||substr(table_name,2)||' RENAME TO '||table_name||';' AS STATEMENT
 
      ,table_name
 
from dba_tables
 
where owner in ('OOADM')
 
UNION ALL
 
select 'ALTER INDEX '||owner||'.'||index_name||' RENAME TO '||'Y'||substr(index_name,2)||';'||CHR(10)||
 
      'ALTER INDEX '||owner||'.'||'Z'||substr(index_name,2)||' RENAME TO '||index_name||';' AS STATEMENT
 
      ,table_name
 
from dba_indexes
 
where owner in ('OOADM')
 
) A
 
where table_name in (
 
'TB_MD_GDS_SEL_CHNL_L_H'
 
);
 
  
 +
- CONSTRAINT 백업  PK -> XPK로
 +
- TABLE RENAME 백업 T  -> X
 +
- CONSTRAINT 전환  ZPK-> PK
 +
- TABLE RENAME 전환 Z  ->T 
 +
- INDEX RENAME      I  -> X로
 +
- Z_INDEX RENAME    Z  -> IX
  
 +
<source lang=sql>
 +
SELECT STATEMENT
 +
  FROM (
 +
        SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' RENAME CONSTRAINT '||'PK_'||SUBSTR(TABLE_NAME,4)||' TO '||'XPK_'||SUBSTR(TABLE_NAME,4)||';'||CHR(10)||
 +
              'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' RENAME TO '||'X'||SUBSTR(TABLE_NAME,2)||';'||CHR(10)||
 +
              'ALTER TABLE '||OWNER||'.'||'Z'||SUBSTR(TABLE_NAME,2)||' RENAME CONSTRAINT '||'ZPK_'||SUBSTR(TABLE_NAME,4)||' TO '||'PK_'||SUBSTR(TABLE_NAME,4)||';'||CHR(10)||
 +
              'ALTER TABLE '||OWNER||'.'||'Z'||SUBSTR(TABLE_NAME,2)||' RENAME TO '||TABLE_NAME||';' AS STATEMENT
 +
              ,TABLE_NAME
 +
          FROM DBA_TABLES
 +
        WHERE OWNER IN ('CYKADM')
 +
        UNION ALL
 +
        SELECT 'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' RENAME TO '||'X'||SUBSTR(INDEX_NAME,2)||';'||CHR(10)||
 +
              'ALTER INDEX '||OWNER||'.'||'Z'||SUBSTR(INDEX_NAME,2)||' RENAME TO '||INDEX_NAME||';' AS STATEMENT
 +
              ,TABLE_NAME
 +
          FROM DBA_INDEXES
 +
        WHERE OWNER IN ('CYKADM')
 +
        ) A
 +
WHERE TABLE_NAME IN ('TB_MD_XXX');
 +
</source>
 +
----------------
  
 +
*  PK 인덱스 생성 -  UNIQUE 인덱스 생성 하여 PK 생성 작업
  
----------------
+
<source lang=sql>
 
+
SELECT 'CREATE '||DECODE(MAX(B.UNIQUENESS),'UNIQUE','UNIQUE')||' INDEX '||A.INDEX_OWNER||'.'||'Z'||SUBSTR(A.INDEX_NAME,2)||CHR(10)||
select 'CREATE '||decode(max(b.UNIQUENESS),'UNIQUE','UNIQUE')||' INDEX '||a.index_owner||'.'||'Z'||substr(a.index_name,2)||CHR(10)||
+
       ' ON '||INDEX_OWNER||'.'||'Z'||SUBSTR(A.TABLE_NAME,2)||' ('||LISTAGG(A.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY A.COLUMN_POSITION)||')'||CHR(10)||
       ' ON '||index_owner||'.'||'Z'||substr(a.table_name,2)||' ('||LISTAGG(a.column_name, ',') WITHIN GROUP (ORDER BY a.column_position)||')'||CHR(10)||
+
       (SELECT LOCALITY||CHR(10) FROM DBA_PART_INDEXES C WHERE A.INDEX_NAME = C.INDEX_NAME) ||
       (select locality||CHR(10) from dba_part_indexes c where a.index_name = c.index_name) ||
+
       'TABLESPACE '||MAX(B.TABLESPACE_NAME)||(SELECT DEF_TABLESPACE_NAME FROM DBA_PART_INDEXES C WHERE A.INDEX_NAME = C.INDEX_NAME)||CHR(10)||
       'TABLESPACE '||max(b.tablespace_name)||(select def_tablespace_name from dba_part_indexes c where a.index_name = c.index_name)||CHR(10)||
 
 
       'NOLOGGING;'||CHR(10)||
 
       'NOLOGGING;'||CHR(10)||
       'ALTER INDEX '||a.index_owner||'.'||'Z'||substr(a.index_name,2)||' LOGGING;'
+
       'ALTER INDEX '||A.INDEX_OWNER||'.'||'Z'||SUBSTR(A.INDEX_NAME,2)||' LOGGING;'
from dba_ind_columns a, dba_indexes b
+
  FROM DBA_IND_COLUMNS A, DBA_INDEXES B
where index_owner = 'OOADM'
+
WHERE INDEX_OWNER = 'CYKADM'
and a.index_owner = b.owner
+
  AND A.INDEX_OWNER = B.OWNER
and a.index_name = b.index_name
+
  AND A.INDEX_NAME = B.INDEX_NAME
and a.index_name not like '%_OLD'
+
  AND A.INDEX_NAME NOT LIKE '%_OLD'
and b.table_name in (
+
  AND B.TABLE_NAME IN ('TB_MD_XXX'
'TB_MD_GDS_SEL_CHNL_L_H'
 
 
)
 
)
group by a.index_owner,a.table_name,a.index_name
+
GROUP BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME
order by a.index_owner,a.table_name,a.index_name;
+
ORDER BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME;
 +
</source>
 +
*  PK 인덱스 생성
  
-- PK Constraints:
+
-- PK CONSTRAINTS:
 
+
<source lang=sql>
select 'ALTER TABLE '||index_owner||'.'||'Z'||substr(a.table_name,2)||' ADD CONSTRAINT '||'Z'||substr(a.index_name,2)||' PRIMARY KEY ('||LISTAGG(a.column_name, ',') WITHIN GROUP (ORDER BY a.column_position)||');'||CHR(10)
+
SELECT 'ALTER TABLE '||INDEX_OWNER||'.'||'Z'||SUBSTR(A.TABLE_NAME,2)||' ADD CONSTRAINT '||'Z'||SUBSTR(A.INDEX_NAME,2)||' PRIMARY KEY ('||LISTAGG(A.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY A.COLUMN_POSITION)||');'||CHR(10)
from dba_ind_columns a, dba_indexes b
+
  FROM DBA_IND_COLUMNS A
where index_owner = 'OOADM'
+
    , DBA_INDEXES B
and a.index_owner = b.owner
+
WHERE INDEX_OWNER = 'CYKADM'
and a.index_name = b.index_name
+
  AND A.INDEX_OWNER = B.OWNER
and (a.index_name like 'PK%' and a.index_name not like '%_OLD')
+
  AND A.INDEX_NAME = B.INDEX_NAME
and b.table_name in (
+
  AND (A.INDEX_NAME LIKE 'PK%' AND A.INDEX_NAME NOT LIKE '%_OLD')
'TB_LO_CNTR_RNP_GDS_DD_A'
+
  AND B.TABLE_NAME IN ('TB_MD_XXX')
)
+
GROUP BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME
group by a.index_owner,a.table_name,a.index_name
+
ORDER BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME;
order by a.index_owner,a.table_name,a.index_name;
+
</source>

2018년 11월 2일 (금) 17:28 판

thumb_up 추천메뉴 바로가기


1 0. 작업 대상 추출[편집]

- NON PARTITIONED TABLE 먼저 진행

SELECT B.OWNER,B.TABLE_NAME,B.COLUMN_NAME 
  FROM (
        SELECT OWNER, TABLE_NAME, MAX(COLUMN_ID) COLUMN_ID
          FROM DBA_TAB_COLUMNS
         WHERE OWNER IN ('CYKADM')
         GROUP BY OWNER, TABLE_NAME) A, DBA_TAB_COLUMNS B 
         WHERE A.OWNER = B.OWNER 
           AND A.TABLE_NAME = B.TABLE_NAME
           AND A.COLUMN_ID = B.COLUMN_ID
           AND B.COLUMN_NAME != 'MOD_DT'
           AND NOT EXISTS (SELECT 1 
                             FROM DBA_PART_TABLES C 
                            WHERE A.TABLE_NAME = C.TABLE_NAME
                          )
       )   
 ORDER BY B.OWNER, B.TABLE_NAME;

2 1. ZB TABLE 생성 (FROM ERWIN)[편집]

3 2. OBJECT 확인[편집]

SELECT OWNER, 'T'||SUBSTR(TABLE_NAME,2), COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_PRECISION,DATA_SCALE
  FROM DBA_TAB_COLUMNS
 WHERE OWNER = 'CYKADM' AND TABLE_NAME IN ('Z_MD_XXX')
 MINUS
SELECT OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_PRECISION,DATA_SCALE
  FROM DBA_TAB_COLUMNS
 WHERE OWNER = 'CYKADM' AND TABLE_NAME IN ('Z_MD_XXX')
 ;
SELECT OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_PRECISION,DATA_SCALE
  FROM DBA_TAB_COLUMNS
 WHERE OWNER = 'CYKADM' AND TABLE_NAME IN ('Z_MD_XXX')
 MINUS
SELECT OWNER, 'T'||SUBSTR(TABLE_NAME,2), COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_PRECISION,DATA_SCALE
  FROM DBA_TAB_COLUMNS
 WHERE OWNER = 'CYKADM' AND TABLE_NAME IN ('Z_MD_XXX')
 ;


4 3. 데이타 COPY[편집]

SELECT 'INSERT /*+ APPEND */ INTO Z_'||MAX(SUBSTR(A.TABLE_NAME,4))||' NOLOGGING'||CHR(10)||
       '( '||LISTAGG(A.COLUMN_NAME, CHR(10)||',') WITHIN GROUP (ORDER BY A.COLUMN_ID) ||CHR(10)||
       ') '||CHR(10)||
       'SELECT '||CHR(10)||'B.'||LISTAGG(A.COLUMN_NAME, CHR(10)||',B.') WITHIN GROUP (ORDER BY A.COLUMN_ID)||CHR(10)||
       '  FROM '||MAX(A.TABLE_NAME)||' B;'||CHR(10)||
       'COMMIT;'
  FROM ALL_TAB_COLUMNS A, ALL_COL_COMMENTS B
 WHERE A.TABLE_NAME = B.TABLE_NAME
   AND A.COLUMN_NAME = B.COLUMN_NAME
   AND A.TABLE_NAME IN ('TB_MD_XXX');

5 3. 인덱스 생성[편집]

SELECT 'CREATE '||DECODE(MAX(B.UNIQUENESS),'UNIQUE','UNIQUE')||' INDEX '||A.INDEX_OWNER||'.'||'Z'||SUBSTR(A.INDEX_NAME,2)||CHR(10)||
       ' ON '||INDEX_OWNER||'.'||'Z'||SUBSTR(A.TABLE_NAME,2)||' ('||LISTAGG(A.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY A.COLUMN_POSITION)||')'||CHR(10)||
       (SELECT LOCALITY||CHR(10) FROM DBA_PART_INDEXES C WHERE A.INDEX_NAME = C.INDEX_NAME) ||
       'TABLESPACE '||MAX(B.TABLESPACE_NAME)||(SELECT DEF_TABLESPACE_NAME FROM DBA_PART_INDEXES C WHERE A.INDEX_NAME = C.INDEX_NAME)||CHR(10)||
       'NOLOGGING;'||CHR(10)||
       'ALTER INDEX '||A.INDEX_OWNER||'.'||'Z'||SUBSTR(A.INDEX_NAME,2)||' LOGGING;'
  FROM DBA_IND_COLUMNS A, DBA_INDEXES B
 WHERE INDEX_OWNER = 'CYKADM'
   AND A.INDEX_OWNER = B.OWNER
   AND A.INDEX_NAME = B.INDEX_NAME
   AND A.INDEX_NAME NOT LIKE '%_OLD'
   AND B.TABLE_NAME IN ('TB_MD_XXX')
 GROUP BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME

 UNION ALL   -- PK CONSTRAINT

SELECT 'ALTER TABLE '||INDEX_OWNER||'.'||'Z'||SUBSTR(A.TABLE_NAME,2)||' ADD CONSTRAINT '||'Z'||SUBSTR(A.INDEX_NAME,2)||' PRIMARY KEY ('||LISTAGG(A.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY A.COLUMN_POSITION)||');'||CHR(10)
  FROM DBA_IND_COLUMNS A, DBA_INDEXES B
 WHERE INDEX_OWNER = 'CYKADM'
   AND A.INDEX_OWNER = B.OWNER
   AND A.INDEX_NAME = B.INDEX_NAME
   AND (A.INDEX_NAME LIKE 'PK%' AND A.INDEX_NAME NOT LIKE '%_OLD')
   AND B.TABLE_NAME IN ('TB_MD_XXX')
 GROUP BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME
;

6 4. 권한 부여 SCRIPT 수행[편집]

SELECT 'GRANT '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' TO '||GRANTEE||';'
FROM DBA_TAB_PRIVS
WHERE OWNER = 'CYKADM'
AND TABLE_NAME IN (
'TB_MD_XXX'
);

7 5. 권한 점검[편집]

SELECT GRANTEE, OWNER,TABLE_NAME,GRANTOR,PRIVILEGE
  FROM DBA_TAB_PRIVS
 WHERE OWNER = 'CYKADM'
   AND TABLE_NAME IN ('TB_MD_XXX')
 MINUS
SELECT GRANTEE, OWNER,'T'||SUBSTR(TABLE_NAME,2),GRANTOR,PRIVILEGE
  FROM DBA_TAB_PRIVS
 WHERE OWNER = 'CYKADM'
   AND TABLE_NAME IN ('Z_MD_GDS_SEL_CHNL_L_H');

8 6. RENAME 작업[편집]

  • T -> XT, Z -> T 전환 (제약사항,테이블명,인덱스 변경 )

- CONSTRAINT 백업 PK -> XPK로 - TABLE RENAME 백업 T -> X - CONSTRAINT 전환 ZPK-> PK - TABLE RENAME 전환 Z ->T - INDEX RENAME I -> X로 - Z_INDEX RENAME Z -> IX

SELECT STATEMENT 
  FROM (
        SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' RENAME CONSTRAINT '||'PK_'||SUBSTR(TABLE_NAME,4)||' TO '||'XPK_'||SUBSTR(TABLE_NAME,4)||';'||CHR(10)||
               'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' RENAME TO '||'X'||SUBSTR(TABLE_NAME,2)||';'||CHR(10)||
               'ALTER TABLE '||OWNER||'.'||'Z'||SUBSTR(TABLE_NAME,2)||' RENAME CONSTRAINT '||'ZPK_'||SUBSTR(TABLE_NAME,4)||' TO '||'PK_'||SUBSTR(TABLE_NAME,4)||';'||CHR(10)||
               'ALTER TABLE '||OWNER||'.'||'Z'||SUBSTR(TABLE_NAME,2)||' RENAME TO '||TABLE_NAME||';' AS STATEMENT
               ,TABLE_NAME
          FROM DBA_TABLES
         WHERE OWNER IN ('CYKADM')
         UNION ALL
        SELECT 'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' RENAME TO '||'X'||SUBSTR(INDEX_NAME,2)||';'||CHR(10)||
               'ALTER INDEX '||OWNER||'.'||'Z'||SUBSTR(INDEX_NAME,2)||' RENAME TO '||INDEX_NAME||';' AS STATEMENT
               ,TABLE_NAME
          FROM DBA_INDEXES
         WHERE OWNER IN ('CYKADM')
        ) A
 WHERE TABLE_NAME IN ('TB_MD_XXX');

  • PK 인덱스 생성 - UNIQUE 인덱스 생성 하여 PK 생성 작업
SELECT 'CREATE '||DECODE(MAX(B.UNIQUENESS),'UNIQUE','UNIQUE')||' INDEX '||A.INDEX_OWNER||'.'||'Z'||SUBSTR(A.INDEX_NAME,2)||CHR(10)||
       ' ON '||INDEX_OWNER||'.'||'Z'||SUBSTR(A.TABLE_NAME,2)||' ('||LISTAGG(A.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY A.COLUMN_POSITION)||')'||CHR(10)||
       (SELECT LOCALITY||CHR(10) FROM DBA_PART_INDEXES C WHERE A.INDEX_NAME = C.INDEX_NAME) ||
       'TABLESPACE '||MAX(B.TABLESPACE_NAME)||(SELECT DEF_TABLESPACE_NAME FROM DBA_PART_INDEXES C WHERE A.INDEX_NAME = C.INDEX_NAME)||CHR(10)||
       'NOLOGGING;'||CHR(10)||
       'ALTER INDEX '||A.INDEX_OWNER||'.'||'Z'||SUBSTR(A.INDEX_NAME,2)||' LOGGING;'
  FROM DBA_IND_COLUMNS A, DBA_INDEXES B
 WHERE INDEX_OWNER = 'CYKADM'
   AND A.INDEX_OWNER = B.OWNER
   AND A.INDEX_NAME = B.INDEX_NAME
   AND A.INDEX_NAME NOT LIKE '%_OLD'
   AND B.TABLE_NAME IN ('TB_MD_XXX'
)
GROUP BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME
ORDER BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME;
  • PK 인덱스 생성

-- PK CONSTRAINTS:

SELECT 'ALTER TABLE '||INDEX_OWNER||'.'||'Z'||SUBSTR(A.TABLE_NAME,2)||' ADD CONSTRAINT '||'Z'||SUBSTR(A.INDEX_NAME,2)||' PRIMARY KEY ('||LISTAGG(A.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY A.COLUMN_POSITION)||');'||CHR(10)
  FROM DBA_IND_COLUMNS A
     , DBA_INDEXES B
 WHERE INDEX_OWNER = 'CYKADM'
   AND A.INDEX_OWNER = B.OWNER
   AND A.INDEX_NAME = B.INDEX_NAME
   AND (A.INDEX_NAME LIKE 'PK%' AND A.INDEX_NAME NOT LIKE '%_OLD')
  AND B.TABLE_NAME IN ('TB_MD_XXX')
 GROUP BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME
 ORDER BY A.INDEX_OWNER,A.TABLE_NAME,A.INDEX_NAME;