2012-04-30 2 views
2

SQL Server Management Studio에서 서버를 마우스 오른쪽 단추로 클릭하고 설정하여 DataLog 위치를 F:\moved\으로 설정했습니다.SQL Server 2008 slqcmd 데이터 위치

그러나 sqlcmd을 사용하여 데이터베이스를 복원하면 데이터베이스가 기본 SQL Server 위치 인 것처럼 보이는 E:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA으로 복원됩니다.

RESTORE DATABASE $(database) FROM DISK = '$(root)\$(database).bak' WITH RECOVERY, 
MOVE '$(database)' TO '$(datadir)$(database).mdf', 
MOVE '$(database)_log' TO '$(datadir)$(database).ldf' 
GO 

오류 :

Changed database context to 'master'.
Msg 3234, Level 16, State 2, Server SQL1, Line 3
Logical file 'userdb1' is not part of database 'userdb1'. Use RESTORE FILELISTONLY to list the logical file names.
Msg 3013, Level 16, State 1, Server SQL1, Line 3
RESTORE DATABASE is terminating abnormally.

은 내가 가끔 오류가 발생 데이터베이스가 항상 저장 목적으로 F:\moved\로 복원해야하지만 사용할 때 내 스크립트에 다음과 같은 sqlcmd을 기본값으로 F:\moved\으로 복원 할 수 있습니까? 오류를 피하기 위해 수동으로 지정하지 않아도됩니까?

답변

0

sqlcmd 스크립트에 datadir 변수를 정의 할 수 없습니까? 이 같은

뭔가 : 장소에 그 라인으로

:setvar datadir F:\moved\ 

RESTORE DATABASE $(database) FROM DISK = '$(root)\$(database).bak' WITH RECOVERY, 
MOVE '$(database)' TO '$(datadir)$(database).mdf', 
MOVE '$(database)_log' TO '$(datadir)$(database).ldf' 
GO 

, sqlcmd 항상

(대신 SQL Server 기본으로) 그 디렉토리를 사용해야합니다 아니면도 설정 수있는 아무것도 변수 값 당신 sqlcmd를 호출 명령 줄에서 원하는 :

C:\> sqlcmd -v datadir=F:\moved\ (script name) 
+0

아, 미안 해요, 난 이미이 작업을 수행 : 4 복원 -i -S %를 SQLCMD. sql -v 데이터베이스 = "% 1"-v root = "% 2"-v dbserver = "% 4"-v datadir = "% 6"-U sa -P 테스트 결과 오류. –

+0

이유 I SQL 관리 스튜디오를 통해 수동으로 데이터베이스를 복원하면 복원되기 때문에 기본 설정을 원하십니까? –