Skip to content

Commit c1702c6

Browse files
authored
Merge pull request #202 from rubrikinc/cl-dev
Cl dev
2 parents d2f50f3 + 67f9dcc commit c1702c6

File tree

9 files changed

+61
-19
lines changed

9 files changed

+61
-19
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@
33
Export-RubrikDatabasesJobFile - DN Test.json
44
.idea
55
.DS_Store
6+
.devcontainer/Dockerfile
7+
.devcontainer/devcontainer.json
8+
.devcontainer/library-scripts/common-debian.sh
69
vcenter_cred*.xml
710
settings.json
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
am1-chrilumn-w1\sql2019
2-
am1-chrilumn-w1\sql2017
3-
am1-sql16-1
1+
am1-chrilumn-w1\sql2019
2+
am1-chrilumn-w1\sql2017
3+
am1-sql16-1
44
am1-sql17-1
File renamed without changes.

MSSQL/Invoke-RubrikDatabaseAGSeed.ps1

Lines changed: 55 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ if ( $AutoSeed.seeding_mode_desc -eq "AUTOMATIC"){
103103
#endregion
104104

105105
#region Rubrik Connection
106-
Write-Host "Connecting to Rubrik:$RubrikServer"
106+
Write-Host "- Connecting to Rubrik:$RubrikServer"
107107
switch($true){
108108
{$RubrikCredentialFile} {$RubrikCredential = Import-CliXml -Path $RubrikCredentialFile
109109
$ConnectRubrik = @{
@@ -129,8 +129,9 @@ Connect-Rubrik @ConnectRubrik
129129
#endregion
130130

131131
#Get information about the database we will add to an availaility group
132-
Write-Host "Getting information about $DatabaseName on $PrimarySQLServerInstance from $RubrikServer"
132+
Write-Host "- Getting information about $DatabaseName on $PrimarySQLServerInstance from $RubrikServer"
133133
$RubrikDatabase = Get-RubrikDatabase -Name $DatabaseName -ServerInstance $PrimarySQLServerInstance -DetailedObject | Where-Object {$_.isRelic -eq $false}
134+
Write-Debug -Message ($RubrikDatabase | Out-String)
134135
if ([bool]($RubrikDatabase.PSobject.Properties.name -match "id") -eq $false){
135136
Write-Error -Message "Database $DatabaseName on $PrimarySQLServerInstance not found on $RubrikServer"
136137
break
@@ -144,21 +145,23 @@ if ([bool]($RubrikDatabase.latestRecoveryPoint) -eq $false){
144145

145146
#Go to the primary replica and get the other replica servers
146147
$SourceSQLInstance = Get-RubrikSQLInstance -ServerInstance $PrimarySQLServerInstance
148+
Write-Debug -Message ($SourceSQLInstance | Out-String)
147149

148150
#Is the database already in an availability group?
149-
Write-Host "Checking to see if database is not already in an Availability Group"
151+
Write-Host "- Checking to see if database is not already in an Availability Group"
150152
$Query = "SELECT top 1 database_id
151153
FROM sys.dm_hadr_database_replica_states
152154
WHERE database_id = DB_ID('$($DatabaseName)')"
153155
$Groups = Invoke-Sqlcmd -ServerInstance $PrimarySQLServerInstance -Query $Query
156+
Write-Debug -Message ($Groups | Out-String)
154157

155158
if ([bool]($Groups.PSobject.Properties.name -match "database_id") -eq $true){
156159
Write-Error "Database is already a member of an Availability Group"
157160
break
158161
}
159162

160163
#What replicas are involved in the availbility group?
161-
Write-Host "Getting replica servers involved in $AvailabilityGroupName from $PrimarySQLServerInstance"
164+
Write-Host "- Getting replica servers involved in $AvailabilityGroupName from $PrimarySQLServerInstance"
162165
If ($($SourceSQLInstance.Version).substring(0,$SourceSQLInstance.Version.indexOf(".")) -ge 13){
163166
$Query = "SELECT replica_server_name
164167
FROM [sys].[availability_groups] groups
@@ -174,33 +177,38 @@ else{
174177
WHERE name = '$($AvailabilityGroupName)' "
175178
}
176179
$Replicas = Invoke-Sqlcmd -ServerInstance $PrimarySQLServerInstance -Query $Query
177-
180+
Write-Debug -Message ($Replicas | Out-String)
178181
[System.Collections.ArrayList] $ReplicasInAG=@()
179182
foreach ($Replica in $Replicas){
180183
$db = New-Object PSObject
181-
$db | Add-Member -type NoteProperty -Name ReplicaServerName -Value $Replica.replica_server_name
182184
if ($Replica.replica_server_name.IndexOf("\") -gt 0){
183-
Write-Host "Getting information about $($Replica.replica_server_name) from $($RubrikServer)"
185+
# Write-Host "- Getting information about $($Replica.replica_server_name) from $($RubrikServer)"
184186
$HostName = $Replica.replica_server_name.Substring(0,$Replica.replica_server_name.IndexOf("\"))
185187
$Instance = $Replica.replica_server_name.Substring($Replica.replica_server_name.IndexOf("\")+1,($Replica.replica_server_name.Length - $Replica.replica_server_name.IndexOf("\")) -1 )
186188
$TargetInstance = Get-RubrikSQLInstance -ServerInstance $Replica.replica_server_name
187189
if ([bool]($TargetInstance.PSobject.Properties.name -match "id") -eq $false){
188190
$FQDN = ([System.Net.Dns]::GetHostByName(($HostName))).hostname
191+
Write-Debug -Message "- FQDN: [$($FQDN)]"
189192
$TargetInstance = Get-RubrikSQLInstance -ServerInstance "$($FQDN)\$($Instance)"
190193
$Replica.replica_server_name = "$($FQDN)\$($Instance)"
191194
}
192195
}
193196
else{
194-
Write-Host "Getting information about $($Replica.replica_server_name) from $($RubrikServer)"
197+
# Write-Host "- Getting information about $($Replica.replica_server_name) from $($RubrikServer)"
195198
$HostName = $Replica.replica_server_name
196199
$Instance = "DEFAULT"
197200
$TargetInstance = Get-RubrikSQLInstance -ServerInstance $Replica.replica_server_name
198201
if ([bool]($TargetInstance.PSobject.Properties.name -match "id") -eq $false){
199202
$FQDN = ([System.Net.Dns]::GetHostByName(($HostName))).hostname
203+
Write-Debug -Message "FQDN: [$($FQDN)]"
200204
$TargetInstance = Get-RubrikSQLInstance -ServerInstance $FQDN
205+
$Replica.replica_server_name = $FQDN
201206
}
202207
}
203-
208+
Write-Debug -Message ($TargetInstance | Out-String)
209+
210+
$db | Add-Member -type NoteProperty -Name ReplicaServerName -Value $Replica.replica_server_name
211+
$db | Add-Member -Type NoteProperty -Name RubrikDatabaseId -Value $RubrikDatabase.id
204212

205213
if ([bool]($TargetInstance.PSobject.Properties.name -match "id") -eq $false){
206214
Write-Error -Message "$($Replica.replica_server_name) was not found on $RubrikServer"
@@ -211,13 +219,15 @@ foreach ($Replica in $Replicas){
211219
$db | Add-Member -type NoteProperty -name Instance -Value $Instance
212220
$db | Add-Member -type NoteProperty -name DatabaseName -Value $DatabaseName
213221

214-
222+
215223
if ($Replica.replica_server_name -ne $PrimarySQLServerInstance){
216224
$Query = "SELECT state_desc FROM sys.databases WHERE name = '" + $DatabaseName + "'"
225+
Write-Debug -Message "replica_server_name: [$($Replica.replica_server_name)]"
226+
Write-Debug -Message "Query: [$($Query)]"
217227
$Results = Invoke-Sqlcmd -ServerInstance $Replica.replica_server_name -Query $Query
218228

219229
if ([bool]($Results.PSobject.Properties.name -match "state_desc") -eq $true){
220-
Write-Host "$($DatabaseName) already exists on $($Replica.replica_server_name). Unable to setup log shipping when database already exists"
230+
Write-Error -Message "[$($DatabaseName)] already exists on $($Replica.replica_server_name). Unable to setup log shipping when database already exists."
221231
$db | Add-Member -type NoteProperty -name RubrikRequest -Value "FAILED"
222232
$db | Add-Member -type NoteProperty -name Primary -Value $false
223233
break
@@ -226,14 +236,15 @@ foreach ($Replica in $Replicas){
226236
$TargetFilePaths = Get-RubrikDatabaseFiles -Id $RubrikDatabase.id `
227237
-RecoveryDateTime $RubrikDatabase.latestRecoveryPoint | Select-Object LogicalName,@{n='exportPath';e={$_.OriginalPath}},@{n='newFilename';e={$_.OriginalName}}
228238

229-
Write-Host "Setting up log shipping between $PrimarySQLServerInstance and $($Replica.replica_server_name)"
239+
Write-Host "- Setting up log shipping between $PrimarySQLServerInstance and $($Replica.replica_server_name)"
230240
$RubrikRequest = New-RubrikLogShipping -id $RubrikDatabase.id `
231241
-targetInstanceId $TargetInstance.id `
232242
-targetDatabaseName $DatabaseName `
233243
-state "RESTORING" `
234244
-TargetFilePaths $TargetFilePaths
235245
$db | Add-Member -type NoteProperty -name RubrikRequest -Value $RubrikRequest
236246
$db | Add-Member -type NoteProperty -name Primary -Value $false
247+
# $db | Add-Member -Type NoteProperty -Name RubrikDatabaseId -Value $RubrikDatabase.id
237248
}
238249
}
239250
else{
@@ -242,25 +253,53 @@ foreach ($Replica in $Replicas){
242253
$ReplicasInAG += $db
243254
}
244255

256+
Write-Debug -Message ($ReplicasInAG | Out-String)
257+
245258
#Wait for log shipping requests to complete for all replicas
259+
Write-Host "- Wait for all of the logs to be applied" -ForegroundColor Green
246260
foreach($Replica in $ReplicasinAG | Where-Object Primary -eq $false)
247261
{
262+
Write-Host "- Initializing Log Shipping of $($PrimarySQLServerInstance).$($Replica.DatabaseName) to $($Replica.ReplicaServerName)"
248263
Get-RubrikRequest -id $Replica.RubrikRequest.id -WaitForCompletion -Type mssql
249-
# Get-RubrikRequestInfo -RubrikRequest $Replica.RubrikRequest
264+
265+
do{
266+
#region Last Applied Point
267+
$GetRubrikLogShipping = @{
268+
PrimaryDatabaseId = $Replica.RubrikDatabaseId
269+
location = $Replica.ReplicaServerName
270+
}
271+
$CheckRubrikLogShipping = Get-RubrikLogShipping @GetRubrikLogShipping
272+
Write-Debug -Message ($CheckRubrikLogShipping | Out-String)
273+
$lastAppliedPoint = ($CheckRubrikLogShipping.lastAppliedPoint)
274+
Write-Debug -Message "LastAppliedPoint: [$($lastAppliedPoint)]"
275+
#endregion
276+
277+
#region Lastest Recovery Point
278+
$GetRubrikDatabase = @{
279+
id = $Replica.RubrikDatabaseId
280+
DetailedObject = $true
281+
}
282+
$CheckRubrikLogShipping = Get-RubrikDatabase @GetRubrikDatabase
283+
$latestRecoveryPoint = $CheckRubrikLogShipping.latestRecoveryPoint
284+
Write-Debug -Message "latestRecoveryPoint: [$($latestRecoveryPoint)]"
285+
#endregion
286+
Start-Sleep -Seconds 1
287+
} until ($latestRecoveryPoint -eq $lastAppliedPoint)
250288
}
251289

290+
252291
#Add all replicas to the availability group and then remove log shipping.
253292
foreach($Replica in $ReplicasinAG | Sort-Object Primary -Descending )
254293
{
255294
if ([bool]($Replica.Primary) -eq $true){
256-
Write-Host "Adding $($DatabaseName) to $($AvailabilityGroupName) on $($Replica.ReplicaServerName)"
295+
Write-Host "- Adding $($DatabaseName) to $($AvailabilityGroupName) on $($Replica.ReplicaServerName)"
257296
$Query = "ALTER AVAILABILITY GROUP [$($AvailabilityGroupName)] ADD DATABASE [$($DatabaseName)];"
258297
}
259298
else {
260-
Write-Host "Joining $($DatabaseName) to $($AvailabilityGroupName) on $($Replica.ReplicaServerName)"
299+
Write-Host "- Joining $($DatabaseName) to $($AvailabilityGroupName) on $($Replica.ReplicaServerName)"
261300
$Query = "ALTER DATABASE [$($DatabaseName)] SET HADR AVAILABILITY GROUP = [$($AvailabilityGroupName)]; "
262301
}
263302
Invoke-Sqlcmd -ServerInstance $Replica.ReplicaServerName -Query $Query -Verbose
264303
}
265-
Write-Host "Removing Log Shipping for $DatabaseName"
304+
Write-Host "- Removing Log Shipping for $DatabaseName"
266305
Get-RubrikLogShipping -PrimaryDatabaseName $DatabaseName -SecondaryDatabaseName $DatabaseName | Remove-RubrikLogShipping

0 commit comments

Comments
 (0)