【问题标题】:Overwrite Azure SQL Server Database through PowerShell commands通过 PowerShell 命令覆盖 Azure SQL Server 数据库
【发布时间】:2021-11-06 07:42:22
【问题描述】:

我找不到如何通过 PowerShell 覆盖 Azure SQL Server 中现有数据库的方法。

Microsoft 或遇到此问题的人是否提供了任何选项,如何一次又一次地覆盖数据库...

这是我的代码如何复制它,但没有覆盖数据库的选项...任何帮助将不胜感激。

[String]$tenantId = '' these are filled removed only here
[String]$accountId= ''
[String]$subscriptionId = ''
[String]$databaseServereInstance = ''
[String]$sourceDatabaseName = ''
[String]$azureRg = ''
[String]$sourceServer = ''

Write-Information -MessageData '*** Obtain token and connect to Azure AD ***' 

#Obtain the Access Token
[Microsoft.Azure.Commands.Profile.Models.PSAccessToken]$accessToken = Get-AzAccessToken -ResourceUrl 'https://graph.windows.net/'
[String]$dbAaccessToken = (Get-AzAccessToken -ResourceUrl 'https://database.windows.net/').Token
Write-Output $dbAaccessToken
#Connect to AzureAD
Connect-AzureAD -AadAccessToken $accessToken.Token -TenantId $tenantId -AccountId $accountId

#Get-AzureADGroup
[String]$groupname = 'test' these are filled removed only
[Microsoft.Open.AzureAD.Model.Group]$getGroup = Get-AzureADGroup | Where { $PSItem.DisplayName -eq $groupname }
Write-Output $getGroup.DisplayName

if($getGroup -ne $null)
{
  #Get-AzureADGroupMember
  Get-AzureADGroupMember -ObjectId $getGroup.ObjectId | ForEach-Object -Process `
  {
    [String]$userPrincipalName = $PSItem.UserPrincipalName
    [String]$givenName = $PSItem.GivenName
    [String]$getDbAzSqlAaccessToken = (Get-AzAccessToken -ResourceUrl 'https://database.windows.net/').Token

     if([String]::IsNullOrEmpty($PSItem.GivenName))
     {
        #Copy source database for each user in a group and make the user db_owner
        New-AzSqlDatabaseCopy -ResourceGroupName $azureRg -ServerName $sourceServer -DatabaseName $sourceDatabaseName `
        -CopyResourceGroupName $azureRg -CopyServerName $sourceServer -CopyDatabaseName "$($sourceDatabaseName)-DevDB-$($userPrincipalName)" 
     
        [String]$query = "
         -- Add contained Azure AD user 
        CREATE USER [$($userPrincipalName)] FROM EXTERNAL PROVIDER WITH DEFAULT_SCHEMA = dbo;    
        -- Add user to role(s) in db 
        ALTER ROLE db_owner ADD MEMBER [$($userPrincipalName)]; 
        "
       
        Invoke-Sqlcmd -ServerInstance $databaseServereInstance -Database "$($sourceDatabaseName)-DevDB-$($userPrincipalName)" -AccessToken $getDbAzSqlAaccessToken ` -query $query
     }
     else 
     {
        #Copy source database for each user in a group and make the user db_owner
        New-AzSqlDatabaseCopy -ResourceGroupName $azureRg -ServerName $sourceServer -DatabaseName $sourceDatabaseName `
        -CopyResourceGroupName $azureRg -CopyServerName $sourceServer -CopyDatabaseName "$($sourceDatabaseName)-DevDB-$($givenName)" 
     
        [String]$query = "
         -- Add contained Azure AD user 
        CREATE USER [$($givenName)] FROM EXTERNAL PROVIDER WITH DEFAULT_SCHEMA = dbo;    
        -- Add user to role(s) in db 
        ALTER ROLE db_owner ADD MEMBER [$($givenName)]; 
        "
        
        Invoke-Sqlcmd -ServerInstance $databaseServereInstance -Database "$($sourceDatabaseName)-DevDB-$($givenName)" -AccessToken $getDbAzSqlAaccessToken ` -query $query
     }
   }
} 
else
{
  Write-Verbose -Message "AzureAD Group could not be found..."
}

【问题讨论】:

  • 如果您只想创建一个具有相同 DevDB 名称的新副本,那么您可能应该在复制之前只使用Remove-AzSqlDatabase

标签: c# powershell azure-powershell pester


【解决方案1】:

谢谢Cpt.Whale。发布您的建议作为答案,以帮助其他社区成员。

要创建具有相同数据库名称的数据库的新副本,那么您需要使用相同的名称Remove-AzSqlDatabase,这样创建新的将很容易。

另外, 您甚至可以重命名数据库,这将防止在重命名和恢复数据库时发生潜在的数据/数据库更改。

  1. 重命名要恢复的数据库
  2. 恢复到具有原始名称的新数据库

查看Overwriting Azure SQL databases 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    相关资源
    最近更新 更多