DB/ORACLE

ORACLE 테이블 복사하기

devmean 2026. 3. 24. 16:08

전체 테이블 복사

CREATE TABLE NewTable
AS
SELECT *
FROM OldTable;
  • PK, FK, INDEX, TRIGGER는 복사되지 않음
  • DEFAULT 값 일부 누락 가능

조건부 데이터만 복사

CREATE TABLE NewUsers
AS
SELECT *
FROM Users
WHERE Age >= 20;
  • 조건에 따라 데이터 누락 가능
  • 통계/인덱스 정보는 복사되지 않음

구조만 복사 (데이터 제외)

CREATE TABLE EmptyTable
AS
SELECT *
FROM Users
WHERE 1 = 0;
  • 제약조건, 인덱스 모두 생성되지 않음
  • 컬럼 구조만 동일

기존 테이블에 데이터 추가

INSERT INTO NewTable
SELECT *
FROM OldTable;
  • 컬럼 순서 및 타입 반드시 일치해야 함
  • PK/UK 존재 시 중복 데이터 오류 발생 가능

특정 컬럼만 복사

CREATE TABLE UserNames
AS
SELECT UserID, UserName
FROM Users;
  • 선택하지 않은 컬럼은 완전히 제외됨
  • NOT NULL 제약이 유지되지 않을 수 있음

다른 스키마로 복사

CREATE TABLE 다른스키마.NewTable
AS
SELECT *
FROM 원본스키마.Users;
  • 대상 스키마에 CREATE TABLE 권한 필요
  • 원본 테이블에 대한 SELECT 권한 필요
  • TABLESPACE 권한이 없으면 생성 실패 가능
  • PK, FK, INDEX, TRIGGER, SEQUENCE 연결 정보는 복사되지 않음
  • 다른 스키마의 시퀀스/트리거 참조 시 오류 발생 가능
  • SYNONYM, VIEW, DB LINK 사용 시 동일하게 복사되지 않을 수 있음

DDL 추출 (완전 복제용)

SELECT DBMS_METADATA.GET_DDL('TABLE', 'OLDTABLE')
FROM DUAL;
  • 추출된 DDL 실행 시 스키마명 수정 필요
  • INDEX, CONSTRAINT는 별도 확인 필요
  • 권한 부족 시 일부 정보 조회 안 될 수 있음
반응형