MSSQL 테이블 백업하는 방법 (SELECT * INTO)

테이블에서 임의로 데이터를 삭제해야 하는 상황이 있습니다. 특정 행이 문제가 되서 서비스 전체에 영향을 준다거나, 불필요한 정보를 삭제하고 싶다거나 하는 때 등에 그럴 수 있습니다. 그럴 때 그냥 데이터를 날리기는 꺼림직하기 때문에 백업을 만들어두는 게 좋습니다. 이때 수정하는 테이블을 통째로 백업하는 방법을 쓸 수 있습니다. SQL Server에선 SELECT * INTO ~ 구문을 이용합니다.

SQL Server 테이블 백업

구문

SELECT * INTO [백업테이블명] FROM [원본테이블명];

 

예시)

예시로 보겠습니다. org_table 이라는 이름으로 테이블을 만들고 임의의 값을 넣겠습니다.

 

org_table

 

org_table을 backup_table 이름으로 백업하려면 아래와 같이 사용합니다.

SELECT * INTO backup_table
FROM org_table;

 

백업이 정상적으로 완료된 걸 볼 수 있습니다.

 

backup_table 생성

 

백업을 하는 이유는 복원을 해야 하는 상황을 대비하는 것입니다. 테이블 백업 후 org_table에서 임의의 행 5개를 delete하고 다시 백업한 테이블을 이용해서 복원해보겠습니다.

 

먼저 org_table에서 id가 1~5 사이인 행을 삭제합니다.

DELETE FROM org_table
WHERE id IN (1, 2, 3, 4, 5);

 

org_table 행 삭제

 

복원할 땐 backup_table과 org_table을 비교해서 bakup_table에는 있는데 org_table에는 없는 값을 insert 해주면 됩니다. join을 통해 비교할 수 있습니다.

select b.*, o.* from backup_table b left join org_table o ON b.id=o.id;

 

아래와 같이 NULL 값을 찾을 수 있습니다.

 

NULL 확인

 

비교해서 나온 값을 다시 복원하려면 아래의 쿼리를 이용합니다. 백업 테이블과 비교하여 원본 테이블(org_table)은 NULL 값인 행을 org_table에 복원합니다.

INSERT INTO org_table
SELECT b.*
FROM backup_table b
LEFT JOIN org_table o ON b.id = o.id
WHERE o.id IS NULL;
반응형

댓글

Designed by JB FACTORY