Oracle에서 기존 테이블을 백업 테이블로 만들 때, CREATE TABLE과 AS SELECT 문을 사용하여 테이블의 구조와 데이터를 쉽게 복사할 수 있다. 본 글에서는 테이블 백업을 위한 여러 가지 방법을 소개하고, 각 방법을 상황에 맞게 선택할 수 있도록 설명한다.
1. A 테이블을 그대로 백업 테이블로 복사하기
- 테이블o, 데이터o, 인덱스x, 제약조건x
CREATE TABLE A_backup AS
SELECT *
FROM A;
이 방법은 A 테이블의 모든 데이터와 구조를 그대로 A_backup 테이블에 복사한다.
테이블의 모든 컬럼과 데이터가 포함되며, 인덱스나 제약 조건은 복사되지 않는다.
2. A 테이블의 구조만 백업하고 데이터는 복사하지 않기
- 테이블o, 데이터x, 인덱스x, 제약조건x
CREATE TABLE A_backup AS
SELECT *
FROM A
WHERE 1 = 0;
위 조건은 항상 FALSE이기 때문에, 결과적으로 데이터는 복사되지 않고 인덱스와 제약조건 역시 복사 되지 않는다.
3. 특정 조건에 맞는 데이터만 백업하기
- 테이블o, 특정 데이터만, 인덱스x, 제약조건x
CREATE TABLE A_backup AS
SELECT *
FROM A
WHERE status = 'ACTIVE';
A 테이블에서 조건에 맞는 데이터만 백업하고자 할 때는 WHERE 절을 사용하여 원하는 데이터를 선택적으로 복사할 수 있다. 예를 들어, status 컬럼이 'ACTIVE'인 데이터만 백업하려면 다음과 같이 작성한다.
4. 테이블 구조 및 데이터 외에 인덱스와 제약 조건도 함께 복사하기
위에서 소개한 방법들은 테이블의 데이터와 구조만 복사하며 인덱스나 제약 조건은 복사되지 않는다.
만약 인덱스와 제약 조건도 함께 복사하고 싶다면 별도로 인덱스를 재생성하거나 제약 조건을 복사해야 한다.
먼저, 테이블 구조만 복사한 후 인덱스를 다시 생성하는 방법은 다음과 같다.
CREATE TABLE A_backup AS
SELECT *
FROM A
WHERE 1 = 0;
그 후, A 테이블의 인덱스를 A_backup 테이블에 다시 생성하는 쿼리를 사용한다.
아래 쿼리는 인덱스를 복사하는 예시이다.
DECLARE
v_sql VARCHAR2(4000);
BEGIN
FOR idx IN (
SELECT dbms_metadata.get_ddl('INDEX', index_name) AS ddl
FROM user_indexes
WHERE table_name = 'A'
)
LOOP
v_sql := REPLACE(idx.ddl, 'A', 'A_backup');
EXECUTE IMMEDIATE v_sql;
END LOOP;
END;
/
이 방법은 A 테이블에 있는 인덱스를 A_backup 테이블로 복사하는 데 사용된다. 동일한 방식으로 제약 조건도 복사할 수 있다.
결론
Oracle에서 테이블 백업을 만드는 방법은 다양하다.
기본적으로 CREATE TABLE AS SELECT 문을 사용하면 손쉽게 테이블의 데이터를 백업할 수 있다.
또한, 구조만 복사하거나 조건에 맞는 데이터만 복사할 수 있는 방법도 제공된다.
만약 인덱스나 제약 조건까지 함께 복사하고자 한다면, 추가적인 작업이 필요하다. 필요에 맞는 방법을 선택하여 효율적으로 테이블 백업을 진행할 수 있다.
'Dev > DB' 카테고리의 다른 글
[DB] Oracle DB에 HTML 엔티티로 데이터 입력하기 (3) | 2024.11.20 |
---|---|
[DB] Character set 'utf8mb3' is not supported by .Net Framework. (2) | 2024.11.18 |
[DB] ORA-12505 에러 원인 및 해결 방법 (3) | 2024.11.10 |
[DB] 오라클 DBA_TAB_PRIVS 테이블 계정 권한 조회하기 (0) | 2024.11.07 |
[ORACLE] Function과 Procedure의 효율적인 사용 방법 (4) | 2024.09.08 |