ORACLE 테이블 복사 (PK, INDEX 까지 복사하는 방법)
출처: 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 : 이 프로시져를 활용하면 특정 계정의 전체 테이블 구조를 쉽게 복사 할 수 있습니다.