백업 및 복원으로 데이터베이스 복사

SQL Server 2008 R2에서 SQL Server 2000, SQL Server 2005, SQL Server 2008 또는 SQL Server 2008 R2를 사용하여 생성된 데이터베이스 백업을 복원하여 새 데이터베이스를 만들 수 있습니다. 그러나 SQL Server 2000 또는 SQL Server 2005를 사용하여 만든 master, modelmsdb의 백업은 SQL Server 2008 R2로 복원할 수 없습니다. 또한 SQL Server 2008 R2 백업은 이전 버전의 SQL Server로 복원할 수 없습니다.

SQL Server 7.0 또는 이전 버전으로 만든 데이터베이스 백업이 호환되는 형식이 아닌 경우 SQL Server 2008 R2에서 복원할 수 없습니다. SQL Server 6.5 이전 버전으로 만든 데이터베이스를 SQL Server 2005로 마이그레이션하는 방법은 SQL Server 7.0 또는 이전 버전에서 데이터베이스 복사를 참조하십시오.

중요 정보중요

SQL Server 2008 및 SQL Server 2008 R2는 이전 버전과는 다른 기본 경로를 사용합니다. 그러므로 백업에서 SQL Server 2000 또는 SQL Server 2005의 기본 위치에 만든 데이터베이스를 복원하려면 MOVE 옵션을 사용해야 합니다. 새 기본 경로에 대한 자세한 내용은 SQL Server 기본 인스턴스 및 명명된 인스턴스의 파일 위치를 참조하십시오. 데이터베이스 파일을 이동하는 방법은 이 항목의 뒷부분에 나오는 "데이터베이스 파일 이동"을 참조하십시오.

백업과 복원을 사용하여 데이터베이스를 복사하는 일반적인 단계

백업과 복원을 사용하여 SQL Server의 다른 인스턴스로 데이터베이스를 복사할 때는 SQL Server가 실행되는 모든 플랫폼이 원본 컴퓨터 및 대상 컴퓨터가 될 수 있습니다.

일반적인 단계는 다음과 같습니다.

  1. SQL Server 2000, SQL Server 2005, SQL Server 2008 또는 SQL Server 2008 R2의 인스턴스가 있는 원본 데이터베이스를 백업합니다. 이 SQL Server 인스턴스가 실행 중인 컴퓨터가 원본 컴퓨터입니다.

  2. 데이터베이스를 복사하려는 컴퓨터(대상 컴퓨터)에서 복원할 데이터베이스가 있는 SQL Server 인스턴스에 연결합니다. 필요한 경우 대상 서버 인스턴스에 원본 데이터베이스의 백업에 사용된 것과 같은 백업 장치를 만듭니다.

  3. 대상 컴퓨터에서 원본 데이터베이스의 백업을 복원합니다. 데이터베이스를 복원하면 자동으로 모든 데이터베이스 파일이 생성됩니다.

다음 항목에서는 이 프로세스에 영향을 줄 수 있는 추가 고려 사항에 대해 설명합니다.

데이터베이스 파일을 복원하기 전 고려 사항

데이터베이스를 복원하면 복원 중인 데이터베이스에 필요한 파일이 자동으로 생성됩니다. 기본적으로 복원 프로세스 중에 SQL Server에서 만든 파일은 원본 컴퓨터에 있는 원본 데이터베이스의 백업 파일과 같은 이름과 경로를 사용합니다. 오류 및 의도하지 않은 결과를 피하려면 복원 작업을 하기 전에 복원 작업을 통해 자동으로 생성되는 파일이 어떤 파일인지 알고 있어야 합니다. 이유는 다음과 같습니다.

  • 이미 파일 이름이 컴퓨터에 존재하여 오류를 일으킬 수 있습니다.

  • 대상 위치의 공간이 부족할 수 있습니다.

  • 디렉터리 구조나 드라이브 매핑이 컴퓨터에 존재하지 않을 수 있습니다.

    예를 들어 백업에 포함된 파일을 드라이브 E에 복원해야 하는데 대상 컴퓨터에는 드라이브 E가 없는 경우가 있습니다.

  • 데이터베이스 파일을 대체할 수 있는 경우 해당 파일이 다른 데이터베이스에 속해 있지 않는 한 백업에 있는 것과 같은 이름을 가진 기존의 데이터베이스와 파일을 덮어씁니다.

주의 사항주의

기존 데이터베이스의 이름과 위치를 다시 사용하고 데이터베이스의 파일을 덮어쓸 수 있는 경우 백업에 있는 같은 이름의 기존 파일을 모두 덮어씁니다.

필요한 경우 데이터베이스를 복원할 때 장치 매핑, 파일 이름 또는 데이터베이스 복원 경로를 지정할 수 있습니다.

데이터베이스 파일 이동

위에서 설명한 이유 때문에 데이터베이스 백업 내의 파일을 대상 컴퓨터에 복원할 수 없으면 복원 도중에 이 파일을 새 위치로 이동해야 합니다. 예를 들면 다음과 같습니다.

  • SQL Server 2000이나 SQL Server 2005에서 기본 위치에 만든 백업으로부터 데이터베이스를 복원하려는 경우

  • 용량을 고려해야 하기 때문에 백업의 데이터베이스 파일 일부를 다른 드라이브로 복원해야 할 경우. 이는 조직 내에 있는 대부분의 컴퓨터가 디스크 드라이브의 크기 및 번호가 다르고 소프트웨어 구성이 같지 않기 때문에 흔히 있는 일입니다.

  • 테스트용으로 같은 컴퓨터에 기존 데이터베이스의 복사본을 만들 경우. 이 경우 원래 데이터베이스에 대한 데이터베이스 파일이 이미 존재하므로 복사 작업 중에 데이터베이스 복사본을 만들 때 파일 이름을 다르게 지정해야 합니다.

자세한 내용은 이 항목의 뒷부분에 나오는 "파일과 파일 그룹을 새 위치로 복원"을 참조하십시오.

데이터베이스 이름 변경

데이터베이스를 대상 컴퓨터에 복원할 때 데이터베이스를 먼저 복원한 다음 이름을 수동으로 변경하지 않고도 데이터베이스 이름을 변경할 수 있습니다. 예를 들어 데이터베이스 이름을 Sales에서 SalesCopy로 변경하면 이것이 데이터베이스의 복사본임을 나타낼 수 있습니다.

데이터베이스를 복원할 때 명시적으로 제공한 데이터베이스 이름은 자동으로 새 데이터베이스의 이름으로 사용됩니다. 데이터베이스 이름이 기존에 존재하지 않기 때문에 백업에 있는 파일을 사용하여 새 이름을 만듭니다.

복원을 사용하여 데이터베이스를 업그레이드하는 경우

SQL Server 2000 또는 SQL Server 2005에서 백업을 복원할 때는 백업에 있는 각각의 전체 텍스트 카탈로그의 경로(드라이브 및 디렉터리)가 대상 컴퓨터에 존재하는지 미리 알아 두면 도움이 됩니다. 카탈로그 파일을 비롯하여 백업에 있는 모든 파일의 논리적 이름, 물리적 이름, 경로 및 파일 이름을 나열하려면 RESTORE FILELISTONLY FROM <backup_device> 문을 사용합니다. 자세한 내용은 RESTORE FILELISTONLY(Transact-SQL)를 참조하십시오.

대상 컴퓨터에 같은 경로가 존재하지 않을 경우 다음 두 가지 대체 방법이 있습니다.

  • 대상 컴퓨터에 원본과 동일한 드라이브/디렉터리 매핑을 만듭니다.

  • RESTORE DATABASE 문 안에 WITH MOVE 절을 사용하여 복원 작업을 하는 중에 카탈로그 파일을 새 위치로 이동합니다. 자세한 내용은 RESTORE(Transact-SQL)를 참조하십시오.

다른 전체 텍스트 인덱스 업그레이드 옵션에 대한 자세한 내용은 전체 텍스트 검색 업그레이드를 참조하십시오.

데이터베이스 소유권

데이터베이스를 다른 컴퓨터에서 복원할 때 SQL Server 로그인 또는 복원 작업을 시작하는 Microsoft Windows 사용자가 자동으로 새 데이터베이스 소유자가 됩니다. 데이터베이스를 복원할 때 시스템 관리자나 새 데이터베이스 소유자는 데이터베이스 소유권을 변경할 수 있습니다. 데이터베이스가 무단으로 복원되는 것을 방지하려면 미디어 또는 백업 세트에 암호를 사용하십시오. 자세한 내용은 백업 및 복원에 대한 보안 고려 사항를 참조하십시오.

다른 서버 인스턴스로 복원 시 메타데이터 관리

데이터베이스를 다른 서버 인스턴스로 복원하는 경우 사용자와 응용 프로그램에 일관된 환경을 제공하려면 로그인, 작업 등 데이터베이스의 일부 또는 모든 메타데이터를 다른 서버 인스턴스에서 다시 만들어야 할 수도 있습니다. 자세한 내용은 다른 서버 인스턴스에서 데이터베이스를 사용할 수 있도록 할 때 메타데이터 관리를 참조하십시오.

백업 세트의 데이터와 로그 파일을 보려면

파일과 파일 그룹을 새 위치로 복원하려면

기존 파일에서 파일과 파일 그룹을 복원하려면

파일과 파일 그룹을 새 위치로 복원하려면

새 이름으로 데이터베이스를 복원하려면

중단된 복원 작업을 다시 시작하려면

데이터베이스의 소유자를 변경하려면

SMO(SQL Server Management Objects)를 사용하여 데이터베이스를 복사하려면