0

私は自分の問題に少し混乱しています。リモート サーバーにバックアップ ファイルがあり、ローカルに復元する必要があります。問題なくファイルを復元できますが、何らかの理由でパスの変数をパスに追加すると、デフォルトのバックアップ場所になります。パスを直接配置する場合は機能するため、共有が問題であるとは思いません。エラーとパス変数の出力結果を含めました。印刷されたパスをコピーして変数に置き換えたところ、問題なく動作しました。パスが追加されているため、もちろんファイルを見つけることができません。

私のスクリプト

 --Declare the Network Drive
 Exec XP_CMDSHELL 'net use Y: \\ProdServer\Backups'

--Declare the Filepath
declare @Backupfilename as nvarchar(500)
declare @filename as nvarchar(40)
Set @filename = ( Select Top(1) CONVERT(VARCHAR(36),name)+'.bak' from ProdServer.msdb.dbo.backupset WITH (nolock)
        where database_name='ProdDB'
            order by backup_set_id desc)

Set @Backupfilename = ''''+'Y:\' + @filename + ''''
Print @backupfilename

--Start the Actual Restore
RESTORE DATABASE [TESTRestore] FROM  
DISK = @BackupFileName WITH  FILE = 1,  
MOVE N'ProdDB' TO N'D:\Data\ProdDB_Test.mdf',  
MOVE N'ProdDB_Log' TO N'D:\ProdDB_Test.ldf', 
NOUNLOAD,  REPLACE, STATS = 10
GO


--Clear the Defined Network Path
EXEC XP_CMDSHELL 'net use Y: /delete'

結果

'Y:\ProdDB_backup_201206220600.bak'

メッセージ 3201、レベル 16、状態 2、行 15
バックアップ デバイス 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\'Y:\ProdDB_backup_201206220600.bak'' を開けません。
オペレーティング システム エラー 123 (ファイル名、ディレクトリ名、またはボリューム ラベルの構文が正しくありません。)
メッセージ 3013、レベル 16、状態 1、行 15
RESTORE DATABASE が異常終了しています。

ありがとう

4

1 に答える 1

1

パスを一時テーブルに渡し、必要なときに呼び出すことで問題を解決できました。

于 2012-08-01T22:37:48.587 に答える