MSSQL 테이블 백업하는 방법 (SELECT * INTO)
- Database
- 2023. 8. 28.
테이블에서 임의로 데이터를 삭제해야 하는 상황이 있습니다. 특정 행이 문제가 되서 서비스 전체에 영향을 준다거나, 불필요한 정보를 삭제하고 싶다거나 하는 때 등에 그럴 수 있습니다. 그럴 때 그냥 데이터를 날리기는 꺼림직하기 때문에 백업을 만들어두는 게 좋습니다. 이때 수정하는 테이블을 통째로 백업하는 방법을 쓸 수 있습니다. SQL Server에선 SELECT * INTO ~ 구문을 이용합니다.
SQL Server 테이블 백업
구문
SELECT * INTO [백업테이블명] FROM [원본테이블명];
예시)
예시로 보겠습니다. org_table 이라는 이름으로 테이블을 만들고 임의의 값을 넣겠습니다.
org_table을 backup_table 이름으로 백업하려면 아래와 같이 사용합니다.
SELECT * INTO backup_table
FROM org_table;
백업이 정상적으로 완료된 걸 볼 수 있습니다.
백업을 하는 이유는 복원을 해야 하는 상황을 대비하는 것입니다. 테이블 백업 후 org_table에서 임의의 행 5개를 delete하고 다시 백업한 테이블을 이용해서 복원해보겠습니다.
먼저 org_table에서 id가 1~5 사이인 행을 삭제합니다.
DELETE FROM org_table
WHERE id IN (1, 2, 3, 4, 5);
복원할 땐 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 값을 찾을 수 있습니다.
비교해서 나온 값을 다시 복원하려면 아래의 쿼리를 이용합니다. 백업 테이블과 비교하여 원본 테이블(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;
반응형
'Database' 카테고리의 다른 글
MSSQL GO 명령어 사용 방법 (배치 구분자) (0) | 2023.08.29 |
---|---|
PostgreSQL 최대 사용 메모리 수정하는 방법 (0) | 2023.08.29 |
MSSQL SHRINK 작업이란? DB 용량 줄이기 (0) | 2023.08.28 |
MYSQL 리눅스에서 .sql 파일 일괄 실행하는 방법 (0) | 2023.08.25 |
오라클 SID란? Service Name과 차이 (0) | 2023.08.08 |