2017-08-18 20 views
4

私はデータベース$CurrentDBを持っており、$CurrentDBのバックアップを$NewDBに復元したいと考えています。 T-SQLコマンドは次のようになります。Powershellは新しいデータベースにSQL Serverデータベースを復元します

USE [master] 

ALTER DATABASE [NewDB] 
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

RESTORE DATABASE [NewDB] 
FROM DISK = N'D:\Backups\CurrentDB.bak' 
WITH FILE = 1, 
    MOVE N'CurrentDB' TO N'D:\Databases\NewDB.mdf', 
    MOVE N'CurrentDB_log' TO N'D:\Logs\NewDB_log.ldf', 
    NOUNLOAD, REPLACE, STATS = 5 

ALTER DATABASE [NewDB] 
    SET MULTI_USER 
GO 

私は、ユーザーRestore-SqlDatabaseしようとしていますが、私はきちんと-RelocateFile

$CurrentDB = "CurrentDB" 
$NewDB = "NewDB" 
$NewDBmdf = "NewDB.mdf" 
$CurrentDBlog = "CurrentDB_log" 
$NewDBldf = "NewDB_log.ldf" 
$backupfile = $CurrentDB + "ToNewDB.bak" 

$RelocateData = New-Object 
Microsoft.SqlServer.Management.Smo.RelocateFile($CurrentDB, $NewDBmdf) 

$RelocateLog = New-Object 
Microsoft.SqlServer.Management.Smo.RelocateFile($CurrentDBlog, $NewDBldf) 

Restore-SqlDatabase -ServerInstance $SQLServer -Database $NewDB -BackupFile 
$backupfile -ReplaceDatabase -NoRecovery -RelocateFile @($RelocateData, 
$RelocateLog) 

私は何の例を見つけることができないようにする方法がわかりません私はしようとしています。私は同じ名前で異なるファイルを復元する例をたくさん見てきました。別の名前とファイル名が必要です。私は提案に開放されています。

答えて

2

あなたはPowerShellにいるからSMOを使う必要はありません。

import-module sqlps 

$database = "NewDb" 
$backupLocation = "D:\Backups\CurrentDB.bak" 
$dataFileLocation = "D:\Databases\NewDB.mdf" 
$logFileLocation = "D:\Logs\NewDB_log.ldf" 

$sql = @" 

USE [master] 

ALTER DATABASE [$database] 
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

RESTORE DATABASE [$database] 
FROM DISK = N'$backupLocation' 
WITH FILE = 1, 
    MOVE N'CurrentDB' TO N'$dataFileLocation', 
    MOVE N'CurrentDB_log' TO N'$logFileLocation', 
    NOUNLOAD, REPLACE, STATS = 5 

ALTER DATABASE [$database] 
    SET MULTI_USER 
"@ 

invoke-sqlcmd $sql 

そして、あなたはSQLPSがインストールされていない場合は、TSQLを実行するためのPowershellからSystem.Data.SqlClientのを使用することができます。

関連する問題