MSSQL 백업 - Back Up/Restore 과 Export/Import Data 의 차이

개요

서비스 중인 데이터베이스의 테이블 값을 변경하려 할 때의 작업은 매우 조심스럽다.
사내 데이터베이스 구조는 스테이징 서버가 따로 없고, 개발 서버 > 운영 서버를 거치는 구조인데,
개발 서버 또한 사내에서 관련 작업을 하는 부서가 따로 있기 때문에...
트랜잭션으로 안전하게 하려고 테이블 락을 걸수도 없을 뿐더러,
테이블의 데이터를 마음대로 바꾸어서는 안된다.
때문에 나는 주로 임시로 사용할 temp 테이블을 복사할 때 Export Data / Import Data를 사용하여
서비스 중인 데이터베이스의 테이블을 복사하여 복사된 테이블에서 데이터를 가공한 후,
이상이 없는지 검증 후에 본 서버의 데이터베이스 테이블과 가공된 부분만 업데이트하는 작업을 추가로 한다.
 
어느 날,
특정 데이터베이스의 데이터를 다른 RDBMS 시스템으로 마이그레이션 해야 하는 작업이 있었는데
복사된 데이터베이스의 테이블들의 PK, FK, 인덱스 등의 정보가 전부 누락되어 있었다.
원인을 알고 나니 결국은 Export Data / Import Data를 사용한 것 때문인데,
다행인지 불행인지... 덕분에 몰랐던 사실을 알게되어 해당 내용을 공유하고자 글을 남긴다.


테이블 구조에 대한 Backup과 Export Data

Export Data를 사용하면 테이블 관련 정보(구조, 외래 키, 인덱스 등)를 포함하지 않고 오직 데이터만 포함하여 저장한다.
그래서 데이터 가공 및 검증용 클론 테이블이 원본 테이블에 소규모 업데이트를 하는 작업은 여태 문제가 되지 않았던 것이다.
 
[ Back Up / Restore ]

  • 테이블 구조를 포함하여 백업한다.
  • 데이터를 복원하면 당연히 테이블의 구조도 함께 복원된다.
  • MSSQL 백업 파일은 .bak 확장자를 사용하여 저장된다.

 
[ Export Data / Import Data ]

  • 테이블의 구조를 포함하지 않고 데이터만 포함된다.
  • 다양한 외부 파일 형식으로 저장될 수 있으며 일반적으로 CSV, Excel, JSON, XML 등이 있다.

성능에 따른 Backup과 Export Data

함께 알아두면 좋을 것 같아 내용 추가해보았다.
백업(Backup)과 데이터 내보내기(Export Data) 기능은 서로 다른 목적을 가지고 있다.
애초에 나는 Export Data 기능으로 백업의 기능까지 같이하려 했던 것 같다.
이번 기회에 데이터베이스에 대해 조금 더 알아가는 기회가 된 것 같다.
 
[ Back Up / Restore ]

  • 주로 데이터 손실로부터 보호/복구와 새로운 개발 환경을 구축할 때 사용한다. 
  • 데이터베이스 전체 내용을 백업하고 복원할 수 있는 상태를 저장하기 위해 구조를 포함한다.
  • 전체 데이터베이스를 백업하기 때문에 백업 시간이 다소 오래 걸릴 수 있다.
  • 백업은 주로 백그라운드에서 실행된다. 이는 사용자의 작업에 큰 영향을 미치지 않는 장점이 있다.

 
[ Export Data / Import Data ]

  • 주로 데이터 마이그레이션이나 데이터를 공유할 때 사용한다.
  • 특정 테이블이나 쿼리 결과, 뷰를 파일로 내보낸다.
  • 데이터베이스의 일부분만을 대상으로 하기 때문에 작업 시간이 짧다.
  • 단, 대량의 데이터를 다룰 경우에는 백업과 마찬가지로 시간이 오래 걸릴 수 있다.
  • 데이터 내보내기는 주로 포그라운드에서 실행된다. 따라서 사용자는 프로세스가 완료될 때까지 대기해야 할 수 있다.