Atomic Habits

ORACLE 테이블 복사 (PK, INDEX 까지 복사하는 방법) 본문

IT/DB

ORACLE 테이블 복사 (PK, INDEX 까지 복사하는 방법)

체계성 2021. 12. 11. 09:01

출처: https://this1.tistory.com/entry/ORACLE-테이블-복사-PK나-INDEX도-다-복사하는-방법 

 

이전에 올린 테이블 복사 방법은 PK나 INDEX등의 내용은 없이 테이블 구조와 데이터만 복사하는 방법이었다.
그래서 A계정 테이블의 스크립트를 불러와서 B계정에 테이블을 생성하는 방법을 고안해봤다.(이걸 자동으로 하기 위해서 프로시져로 만들었다)

하지만 이 방법은 SYS계정에서만 가능하다.
SYS계정과 같은 권한이 없는 계정에서 아래의 프로시져를 돌리면 권한이 불충분하다는 오류가 나온다.

일일히 스크립트를 복사+붙여넣기+실행하는게 싫어서 아래와 같은 프로시져를 만들었는데, 필요에 따라 활용하시기 바랍니다.

_________________________________________________________
CREATE OR REPLACE PROCEDURE SYS.프로시저명 
IS
    v_script       VARCHAR2(2000);
    
    CURSOR V_T_NAME IS
        select
            replace(dbms_metadata.get_ddl('TABLE','A계정의테이블명','A계정'),'"A계정명".','"B계정명".')script
        from all_users
        WHERE USERNAME='A계정명'
    ;

BEGIN
         FOR TN IN V_T_NAME LOOP
            BEGIN
            
                v_script := TN.script;
       
                EXECUTE IMMEDIATE v_script;
                
            EXCEPTION
                WHEN OTHERS THEN
                
                DBMS_OUTPUT.PUT_LINE(' QUERY '|| v_script);
                DBMS_OUTPUT.PUT_LINE(' error '|| TN.script||'  :  '||sqlerrm);
            END;
        END LOOP;
   
end;
_________________________________________________________


P.S : 이 프로시져를 활용하면 특정 계정의 전체 테이블 구조를 쉽게 복사 할 수 있습니다.


Comments