NMM에서 명령줄 복구를 사용하여 SQL 데이터베이스를 복구하는 방법
This article applies to
This article does not apply to
This article is not tied to any specific product.
Not all product versions are identified in this article.
Instructions
이 문서에서는 VDI
를 사용하여 NMM으로 백업된 SQL 데이터베이스를 성공적으로 복원하기 위해 따라야 할 절차에 대해 설명합니다. GUI(SQL Server GUI용 Networker 사용자 또는 SSMS 플러그인)에서 복원하는 데 문제가 있는 경우 명령줄을 사용하여 백업에서 SQL 데이터베이스를 복원해야 할 수 있습니다. GUI에서의 탐색 작업이 느리거나 복원에 필요한 데이터베이스가 GUI에 표시되지 않습니다.
일반적으로 단일 DB를 백업할 때 다음과 같은 세이브 세트가 생성됩니다.
단일 DB의 전체 백업에는 다음과 같은 세이브 세트가 있습니다.
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 1:26:41 119MB 3209027663 cb full MSSQL$FINANCE:testdb ==> 전체 백업 세이브 세트
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 1:29:16 5KB 3192250597 cb incr MSSQL$FINANCE: testdb ==> 메타데이터 세이브 세트.
단일 DB의 증분 백업에는 다음과 같은 세이브 세트가 있습니다.
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 1:34:14 1320MB 3141919250 cb incr MSSQL$FINANCE:testdb ==> 로그 백업 세이브 세트
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 1:40:31 5KB 3125142409 cb incr MSSQL$FINANCE:testdb ==> metadata saveset
각 백업에는 항상 'incr' 레벨로 생성되며 일반적으로 매우 작은 메타데이터 세이브 세트가 있습니다. 이 세이브 세트에는 "Networker User for SQL Server" GUI에서 DB 목록을 볼 수 있는 정보가 포함되어 있습니다. 이 세이브 세트는 각 SQL VDI 백업과 함께 생성됩니다. 그러나 수동 클론 생성 프로세스에서 클론 생성을 위해 이 세이브 세트가 잘못 포함되거나 원래 세이브 세트가 더는 존재하지 않는 경우 이 세이브 세트가 존재하지 않을 수 있습니다. 이 경우 명령줄 복원이 유일한 옵션입니다.
복구할 백업을 확인한 후에는 명령줄을 구성할 수 있습니다. 다음은 복원 명령의 예입니다.
nsrsqlrc -s nsr-server -c sql12srv1 -t "5/25/2016 1:34:14 PM" -d "MSSQL$FINANCE:testdb-recovered" -C " 'testdb' = 'c:\recover\testdb.mdf', 'testdb_log' = 'c:\recover\testdb_log.ldf', 'testdb_log1' = 'c:\recover\testdb_log1.ldf'" "MSSQL$FINANCE:testdb"
위의 명령
에서 s 옵션은 Networker 서버 이름을 지정하는 것입니다.
-c 옵션은 소스 클라이언트를 지정하는 데 사용되며(소스 클라이언트가 아닌 다른 호스트에서 복구가 수행되는 경우)
-d 복원할 대상 DB를 지정합니다. 이 DB는 존재하지 않습니다. 복원 프로세스는 대상 인스턴스에 DB를 생성합니다.
-C는 복제 복원을 지정합니다. -C 뒤의 매개변수는 데이터베이스에 있는 파일의 논리적 이름을 지정합니다. 이러한 이름은 복원 중인 데이터베이스의 논리적 이름과 정확히 일치해야 합니다. 데이터베이스가 있는 경우 SSMS GUI에서 DB 이름에 대한 속성을 수행하고 '파일'을 확인합니다.
클러스터링된 SQL Server로 복원을 수행하는 경우 복원 명령에 "-A "virtual-Server name""을 추가합니다.
명령의 마지막 구성 요소는 복원 중인 DB의 이름입니다(예: MSSQL$
FINANCE:testdb
). 데이터베이스 파일의 논리적 이름이 확실하지 않은 경우 아래와 같이 불완전한 명령을 제공할 수 있습니다.
nsrsqlrc -s nsr-server -c sql12srv1 -t "5/25/2016 1:34:14 PM" -d "MSSQL$FINANCE:testdb-recovered" -C " 'mydb' = 'c:\ recover\testdb.mdf'" "MSSQL$FINANCE:testdb"43708
:(pid 2144):시작 시간: 2016
년 5 월 25 일 수요일 15:37:42 43621 : (pid 2144) : 컴퓨터 이름 : SQL12SRV1 사용자 이름: administrator
NSR_CLIENT: sql12srv1.jets.local;
NSR_SERVER: nsr-server;
37725:(pid 2144):'testdb' 데이터베이스를 'testdb-recovered'로 복구하는 중...
142468 : (pid 2144) : [2292] nsr / db_apps / bsmsql / rcstripes.c (222) : 세이브 세트 MSSQL$FINANCE:/testdb
에 대한 백업 찾기37945:(pid 2144):논리 파일 testdb에 대한 재배치가 누락되었습니다.
37945:(pid 2144):논리 파일 testdb_log에 대한 재배치가 누락되었습니다.
37945:(pid 2144):논리 파일 testdb_log1에 대한 재배치가 누락되었습니다.
37946:(pid 2144):원래 데이터베이스에
mydb라는 논리 파일이 없습니다. 29401:(pid 2144):D atabase 파일 재배치 목록 오류입니다. 실제 파일 목록 :
37947 : (pid 2144) : testdb = C:\Program Files\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\
testdb.mdf 37947:(PID 2144): testdb_log = C:\Program Files\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\testdb_log.ldf
37947:(PID 2144): testdb_log1 = C:\Program Files\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\testdb_log1.ldf
142468:(PID 2144):[2292]nsr/db_apps/bsmsql/rcstripes.c(222): 세이브 세트 MSSQL$FINANCE:/testdb
에 대한 백업 찾기37945:(pid 2144):논리 파일 testdb에 대한 재배치가 누락되었습니다.
37945:(pid 2144):논리 파일 testdb_log에 대한 재배치가 누락되었습니다.
37945:(pid 2144):논리 파일 testdb_log1에 대한 재배치가 누락되었습니다.
37946:(pid 2144):원래 데이터베이스에
mydb라는 논리 파일이 없습니다. 29401:(pid 2144):D atabase 파일 재배치 목록 오류입니다. 실제 파일 목록 :
37947 : (pid 2144) : testdb = C:\Program Files\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\
testdb.mdf 37947:(PID 2144): testdb_log = C:\Program Files\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\testdb_log.ldf
37947:(PID 2144): testdb_log1 = C:\Program Files\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\testdb_log1.ldf
복원 작업이 오류와 함께 완료되었습니다. 자세한 내용은 모듈 백업 로그 파일을 참조하십시오. 알 수 없는 XBSA 오류 1169(0x491) nsr/db_apps/bsmsql/rcovmain.cpp(442): cleanUp()을 입력합니다. nsr/db_apps/bsmsql/rcovmain.cpp(500): cleanUp()을 종료합니다.
43709:(pid 2144):중지 시간: 2016
년 5 월 25 일 수요일 15:37:49***********************
위의 명령에서 임의의 논리적 이름 'mydb'를 지정하고 명령은 DB 파일의 실제 논리적 이름과 원래 위치를 뱉어냅니다. 이 정보를 사용하여 복원 명령을 작성할 수 있습니다. 데이터를 복원할 다른 경로를 제공해야 합니다. 기존 데이터를 덮어쓰는 위험을 방지하기 위해 복원 명령에 원래 소스 경로를 제공할 수 없으며 제공해서도 안 됩니다.
복원을 위한 백업 시간은 mminfo 명령으로 가져올 수 있습니다. 출력에 표시된 savetime을 사용하거나 nsavetime에 대해 보고하고 이 시간을 대신 사용할 수 있습니다.
예:
mminfo -avot -s nsr-server -q "client=sql12srv1,savetime >= yesterday"
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 1:26:41 119MB 3209027663 cb full MSSQL$FINANCE:testdb
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 1:29:16 5KB 3192250597 cb incr MSSQL$FINANCE:testdb
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 1:34:14 1320MB 3141919250 cb incr MSSQL$FINANCE:testdb
SQLbackups.001 Data Domain sql12srv1
2016-05-25 오후 1:40:31 5KB 3125142409 cb incr MSSQL$FINANCE:testdb
mminfo -avot -s nsr-server -q "client=sql12srv1,savetime >= yesterday" -r volume,client,sumflags,sumsize,level,savetime(25),nsavetime,name
SQLbackups.001 sql12srv1 cb 119MB full 5/25/2016 1:26:41 PM 1464197201 MSSQL$FINANCE:testdb
SQLbackups.001 sql12srv1 cb 5 KB incr 2016-05-25 오후 1:29:16 1464197356 MSSQL$FINANCE:testdb
SQLbackups.001 sql12srv1 cb 1320MB incr 2016-05-25 오후 1:34:14 1464197654 MSSQL$FINANCE:testdb
SQLbackups.001 sql12srv1 cb 5 KB incr 2016-05-25 오후 1:40:31 1464198031 MSSQL$FINANCE:testdb
참고로 메타데이터 세이브 세트 또는 실제 데이터 세이브 세트의 nsavetime/savetime을 지정할 수 있습니다. 둘 중 하나가 작동합니다.
시나리오 2:
백업이 DB 이름 없이 미디어 db에 등록된 경우 필요한 백업 시간이 명확하지 않습니다. 예를 들어 모든 DB 백업의 세이브 세트 이름은 아래와 같습니다.
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 4:43:15 151KB 2672168543 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 4:45:26 151KB 2655391455 cb incr MSSQL$FINANCE:
위의 내용에서는 어떤 세이브 세트에 필요한 백업이 있는지 알 수 없습니다.
medata 데이터 세이브 세트가 있는 경우 GUI에서 백업을 탐색할 수 있으며 GUI에서 DB 이름과 백업 시간을 찾을 수 있습니다. 예를 들어 DB24가 필요한 경우 GUI는 백업 시간을 "5/25/2016 4:49 PM"으로 표시합니다.
메타데이터 세이브 세트가 없는 경우 nsrinfo 명령을 실행하여 복원을 위한 세이브 타임을 찾아야 합니다. 예를 들어 mminfo에 아래와 같이 저장 세트가 표시되는 경우:
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 4:43:15 151KB 2672168543 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 4:45:26 151KB 2655391455 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 4:47:34 151 KB 2638614367 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 4:49:42 PM 151KB 2621837279 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 4:51:50 151 KB 2605060191 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 2016-05-25 오후 4:53:58 151KB 2588283103 cb incr MSSQL$FINANCE:
아래와 같이 저장 시간에 nsrinfo를 실행하여 저장 세트의 일부인 DB에 대한 정보를 가져옵니다.
nsrinfo -n mssql -t "5/25/2016 4:43:15 PM" sql12srv1
savetime 1464208995(5/25/2016 4:43:15 PM)을 위해 클라이언트 'sql12srv1'을 스캔합니다. mssql 네임스페이스
MSSQL$FINANCE:/ DB21
MSSQL$FINANCE:/DB21%/files.1464208995.1464209044
2개의 오브젝트 발견
nsrinfo -n mssql -t "5/25/2016 4:49:42 PM" sql12srv1
mssql 네임스페이스
MSSQL$FINANCE:/DB24 MSSQL$FINANCE:/DB24
MSSQL$FINANCE:/DB24%/files.1464209382.1464209437
에서 세이브타임 1464209382(5/25/2016 4:49:42 PM)에 대한 sql12srv1 스캐닝 클라이언트 '
sql12srv1'세이브 세트에 DB 이름이 표시되지 않으므로 메타데이터 세이브 세트가 없는 시나리오에서는 위의 작업이 약간의 시행착오를 거쳐야 할 수 있습니다. 대략적인 DB 크기를 단서로 사용하여 nsrinfo 쿼리의 범위를 몇 개의 세이브 세트로 좁힙니다.
Article Properties
Article Number: 000022417
Article Type: How To
Last Modified: 09 Aug 2022
Version: 4
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.