Advertisement
Guest User

Untitled

a guest
Mar 29th, 2016
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.24 KB | None | 0 0
  1. enter code here
  2. Param(
  3. [parameter(Mandatory=$True)]
  4. [string] $SqlServer,
  5.  
  6. [parameter(Mandatory=$False)]
  7. [int] $SqlServerPort = 1433,
  8.  
  9.  
  10.  
  11. [Parameter(Mandatory=$True,Position=1)]
  12. [string]$Sourcedatabase,
  13.  
  14.  
  15. [Parameter(Mandatory=$True,Position=2)]
  16. [string]$backupType,
  17.  
  18. [Parameter(Mandatory=$True,Position=3)]
  19. [string]$SqlUsername,
  20.  
  21.  
  22. [Parameter(Mandatory=$True,Position=4)]
  23. [string]$SqlPass
  24. )
  25.  
  26. [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
  27. [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SmoExtended') | out-null
  28.  
  29. #input paramters
  30. $Logfile = "D:PwerShell ScriptlogBackupRestoreLog.log"
  31. $Today=Get-Date -format s
  32. $Today = $Today.ToString()
  33.  
  34. $Messagetext = 'Input source database is ' + $Sourcedatabase
  35. $message = $today + ' ' + $Messagetext
  36. add-content $logfile -value $message
  37.  
  38. $backupservername = "cp01gpsqlbackup"
  39. $destinationservername = "cp01gpsqlbackup"
  40. #Set variables
  41. $backupserver = new-object ('Microsoft.SqlServer.Management.Smo.Server') $backupservername
  42.  
  43. ##$backupserver.ConnectionContext.StatementTimeout = 0
  44.  
  45. $destinationserver = new-object ('Microsoft.SqlServer.Management.Smo.Server') $destinationservername
  46.  
  47. ##$destinationserver.ConnectionContext.StatementTimeout = 0
  48.  
  49.  
  50.  
  51.  
  52. ##$Sourcedatabase = Read-Host -Prompt 'Enter source database Name :'
  53.  
  54. $Destinationdatabase = "LVSSPSandBox"
  55.  
  56.  
  57.  
  58. ##$backupType= Read-Host -Prompt 'Enter Backup Type (Take new or use previous day):'
  59.  
  60. $bkdir = "D:Backup"
  61.  
  62.  
  63. $UserName = "chempointop-myadav"
  64. $File = "\cp01gpsqlbackupPwerShell ScriptPassword.txt"
  65. $MyCredential=New-Object -TypeName System.Management.Automation.PSCredential `
  66. -ArgumentList $UserName, (Get-Content $File | ConvertTo-SecureString)
  67.  
  68.  
  69.  
  70. #SqlUsername = $SqlCredential.UserName
  71. #$SqlPass = $SqlCredential.GetNetworkCredential().Password
  72.  
  73.  
  74. Function Restore
  75. {
  76. Param([parameter(Mandatory=$true)] $paramdatabases,$parampath,$paramdestinationserver)
  77.  
  78.  
  79. $dbRestore = new-object("Microsoft.SqlServer.Management.Smo.Restore")
  80. $dbRestore.Server=tcp:$using:SqlServer
  81. $dbRestore.$using:SqlServerPort
  82. $dbRestore.Database=$paramdatabases
  83. $dbRestore.Action = "Database"
  84. $dbRestore.UserID=$using:SqlUsername;
  85. $dbRestore.Password=$using:SqlPass;
  86. $dbRestore.NoRecovery = $false;
  87. $dbRestore.ReplaceDatabase = $true;
  88. $dbRestorePercentCompleteNotification = 5;
  89. $dbRestore.Devices.AddDevice($parampath, [Microsoft.SqlServer.Management.Smo.DeviceType]::File)
  90.  
  91. #execute the restore!
  92. $dbRestore.SqlRestore($paramdestinationserver)
  93. }
  94.  
  95.  
  96.  
  97. IF ($backupType -eq 'Take new')
  98. {
  99. IF ($backupservername -eq $destinationservername -and $Sourcedatabase -eq $Destinationdatabase)
  100. {
  101. Write-Host 'Both Source and destiantion servers and databases are same. Cannot proceed further'
  102.  
  103. }
  104. Else
  105. {
  106.  
  107. $dbbk = new-object ('Microsoft.SqlServer.Management.Smo.Backup')
  108. $dbbk.Action = 'Database'
  109. $dbbk.BackupSetDescription = "FULL - " + $Sourcedatabase
  110. $dbbk.BackupSetName = $Sourcedatabase + " FULL Backup"
  111. $dbbk.Database = $Sourcedatabase
  112. $dbbk.MediaDescription = "Disk"
  113. $dbbk.Devices.AddDevice($bkdir + "" + $Sourcedatabase + "_Current" + ".bak", 'File')
  114. $dbbk.SqlBackup($backupserver)
  115. $path = $bkdir + "" + $Sourcedatabase + "_Current" + ".bak"
  116.  
  117.  
  118.  
  119. Restore -paramdatabases $Destinationdatabase -parampath $path -paramdestinationserver $destinationserver
  120.  
  121. #Remove the current backup file
  122. Remove-Item $path
  123. }
  124. }
  125.  
  126. ELSEIF($backupType -eq 'use previous day')
  127. {
  128.  
  129. #Need to add latest of file
  130. #settings for the restore
  131. $SQLQuery= $("select top 1 max(backup_finish_date),bs.database_name,[bmf].[physical_device_name] from msdb..backupset bs INNER JOIN msdb..backupmediafamily bmf ON [bs].[media_set_id] = [bmf].[media_set_id] where database_name='"+ $Sourcedatabase +"' and bs.type='D' and [bmf].[physical_device_name] not like '%_current%' group by bs.database_name,[bmf].[physical_device_name] order by max(backup_finish_date) desc")
  132. $Connection = New-Object System.Data.SQLClient.SQLConnection
  133. $Connection.ConnectionString = "server='$backupservername';database=msdb;trusted_connection=true;"
  134. $Connection.Open()
  135. $Command = New-Object System.Data.SQLClient.SQLCommand
  136. $Command.Connection = $Connection
  137. $Command.CommandText = $SQLQuery
  138. $Reader = $Command.ExecuteReader()
  139. while ($Reader.Read()) {
  140. $path=$Reader.GetValue(2)
  141. }
  142. $Connection.Close()
  143.  
  144. Restore -paramdatabases $Destinationdatabase -parampath $path -paramdestinationserver $destinationserver
  145.  
  146. }
  147. enter code here
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement