SQL 데이터베이스를 네트워크 공유로 백업하는 방법
SQL 데이터베이스를 정기적으로 백업해야합니다. 우리는 이미 모든 SQL 서버 데이터베이스를 로컬 하드 드라이브에 쉽게 백업 할 수있는 방법을 다루었지만 드라이브 및 / 또는 시스템 장애로부터 보호하지는 못합니다. 이러한 유형의 재해로부터 보호하기위한 추가 계층으로 네트워크 공유에 백업을 복사하거나 직접 만들 수 있습니다.
로컬로 백업 한 다음 네트워크 공유로 복사
이 작업을 수행하는 가장 직접적이고 가장 직접적인 방법은 단순히 데이터베이스의 로컬 백업을 만든 다음 해당 백업 파일을 네트워크 공유에 복사하는 것입니다. 다음과 같이 배치 스크립트를 작성하면됩니다.
SET LocalFolder = C : 프로그램 파일 Microsoft SQL ServerMSSQL.1MSSQLBackup
SqlCmd -E -Q "데이터베이스에 백업 데이터베이스 MyDB ="% LocalFolder % MyDB.bak ""
XCopy "% LocalFolder % MyDB.bak" ""\ 192.168.16.55BackupDatabases "/ Z / V
DEL "% LocalFolder % MyDB.bak"
이 스크립트는 다음을 (줄 단위로) 수행합니다.
- 변수를 로컬 SQL 백업 디렉토리로 설정합니다..
- 로컬 SQL 백업 디렉토리에 Windows 인증을 사용하여 MyDB의 SQL 백업을 작성합니다..
- 로컬 백업 파일을 네트워크 공유에 복사합니다..
- 로컬 백업 파일을 삭제합니다..
다시 말하지만이 방법이 기본으로 작동하므로 백업이 로컬 디스크에 생성되므로 백업 실패 가능성이 적습니다. 그러나 백업 파일의 로컬 복사본을 저장할 디스크 공간이 충분하지 않은 경우이 작업은 실패합니다. 이 경우 디스크 공간을 추가하거나 네트워크 공유에 직접 백업해야합니다..
네트워크 공유에 직접 백업
일반적으로 다음과 같은 명령을 사용하여 네트워크 공유에 직접 백업을 만들려고 할 때 :
SqlCmd -E -Q "데이터베이스에 백업 데이터베이스 MyDB ="\ 192.168.16.55BackupDatabasesMyDB.bak ""
대개 다음 행을 따라 오류가 발생합니다.
메시지 3201, 수준 16, 상태 1, 서버 JF, 줄 1
백업 장치 '\ 192.168.16.55BackupDatabasesMyDB.bak'을 열 수 없습니다. 운영 체제 오류 5 (액세스가 거부되었습니다.).
메시지 3013, 수준 16, 상태 1, 서버 JF, 줄 1
BACKUP DATABASE가 비정상적으로 종료되고 있습니다..
이 오류는 Windows 인증 (-E 스위치)을 사용하여 SQL 백업 명령을 실행하고 Windows 탐색기를 통해 공유에 파일을 액세스하고 복사하는 기능으로 Windows 계정을 실행 했음에도 불구하고이 오류가 발생합니다.
이 작업이 실패하는 이유는 SQL 명령이 SQL Server 서비스가 실행되는 계정 범위 내에서 실행되기 때문입니다. 컴퓨터에서 서비스 목록을 볼 때 SQL Server 서비스가 네트워크 액세스 권한이없는 시스템 계정 인 로컬 시스템 또는 네트워크 서비스 (Log On As 열)로 실행되는 것을 볼 수 있습니다.
우리 시스템에서는 로컬 시스템으로 실행되는 SQL Server 서비스가 있기 때문에 네트워크 공유 명령에 대한 백업이 실패합니다.이 서비스는 다시 네트워크 리소스에 연결할 수 없습니다..
SQL을 네트워크 공유에 직접 백업하려면 SQL Server 서비스를 네트워크 리소스에 액세스 할 수있는 로컬 계정으로 실행해야합니다.
SQL Server 서비스의 속성을 편집하고 로그온 탭에서 서비스가 네트워크 액세스 권한이있는 대체 계정으로 실행되도록 구성합니다..
확인을 클릭하면 서비스가 다시 시작될 때까지 설정이 적용되지 않는다는 메시지가 나타납니다..
서비스 다시 시작.
이제 서비스 목록에 SQL Server 서비스가 구성한 계정으로 실행 중임이 표시됩니다..
이제 명령을 실행하여 네트워크 공유에 직접 백업 할 수 있습니다.
SqlCmd -E -Q "데이터베이스에 백업 데이터베이스 MyDB ="\ 192.168.16.55BackupDatabasesMyDB.bak ""
성공 메시지가 나타납니다.
데이터베이스 'MyDB'152 페이지, 파일 1 'MyDB'파일 처리.
데이터베이스 'MyDB'에 대해 2 페이지 처리, 파일 1에 'MyDB_log'파일 처리.
BACKUP DATABASE는 154 페이지를 0.503 초 (2.493MB / 초)로 성공적으로 처리했습니다..
네트워크 공유 디렉토리에있는 백업 파일을 사용하여 다음을 수행하십시오.
네트워크 공유 고려 사항
backup 명령은 자격 증명을 묻지 않고 네트워크 공유에 직접 연결할 수 있어야합니다. SQL Server 서비스를 실행하도록 구성한 계정에는 해당 자격 증명이 액세스 할 수있는 네트워크 공유와의 트러스트 된 연결이 있어야합니다. 그렇지 않으면 다음과 같은 오류가 발생할 수 있습니다.
메시지 3201, 수준 16, 상태 1, 서버 JF, 줄 1
백업 장치 '\ 192.168.16.55BackupDatabasesMyDB.bak'을 열 수 없습니다. 운영 체제 오류 1326 (로그온 실패 : 알 수없는 사용자 이름 또는 잘못된 암호입니다.).
메시지 3013, 수준 16, 상태 1, 서버 JF, 줄 1
BACKUP DATABASE가 비정상적으로 종료되고 있습니다..
이 오류는 계정의 사용자 이름과 암호가 네트워크 공유에 의해 승인되지 않았고 명령이 실패했음을 나타냅니다..
또 다른 문제는 백업이 네트워크 리소스에 직접 수행되므로 네트워크 연결의 모든 딸꾹질로 인해 백업이 실패 할 수 있다는 것입니다. 이러한 이유로 안정적인 네트워크 위치 (예 : VPN이 아닐 수도 있음)에만 백업해야합니다..
보안 관련
앞에서 설명한 것처럼 로컬 시스템 액세스 권한이있는 계정으로 SQL 서비스를 실행할 수 있으므로 로컬로 백업 한 다음 네트워크 공유로 복사하는 방법을 사용하는 것이 좋습니다.
이 서비스를 대체 계정으로 실행하면 잠재적 인 보안 문제를 해결할 수 있습니다. 예를 들어, 악성 SQL 스크립트가 대체 계정으로 실행되어 네트워크 리소스를 공격 할 수 있습니다. 또한 계정 변경 (암호 변경 / 만료 또는 계정 삭제 / 비활성화)으로 인해 SQL Server 서비스가 시작되지 않을 수 있습니다.
대체 계정을 사용하여 SQL Server 인스턴스를 실행하는 경우 이러한 점을 염두에 두는 것이 중요합니다. 적절한 예방 조치가 취해진다면 이것들은 마개를 보여주지는 않지만 하드 드라이브 공간을 추가 한 다음 로컬 백업과 복사를 구현하여 로컬 계정을 사용하여 SQL 서비스를 실행할 수 있도록해야합니다.