Använda PowerShell för att kopiera en databas till en ny logisk server

gäller för:Azure SQL Database

Det här Azure PowerShell-skriptexemplet skapar en kopia av en befintlig databas i Azure SQL Database på en ny logisk server.

Om du inte har en Azure-prenumerationskapar du ett kostnadsfritt Azure-konto innan du börjar.

Not

Den här artikeln använder Azure Az PowerShell-modulen, som är den rekommenderade PowerShell-modulen för interaktion med Azure. Information om hur du kommer igång med Az PowerShell-modulen finns i Installera Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i Migrera Azure PowerShell från AzureRM till Az.

Använda Azure Cloud Shell

Azure är värd för Azure Cloud Shell, en interaktiv gränssnittsmiljö som du kan använda via webbläsaren. Du kan använda antingen Bash eller PowerShell med Cloud Shell för att arbeta med Azure-tjänster. Du kan använda förinstallerade Cloud Shell-kommandon för att köra koden i den här artikeln, utan att behöva installera något i din lokala miljö.

Så här startar du Azure Cloud Shell:

Alternativ Exempel/länk
Välj Prova i det övre högra hörnet i ett kodblock. Om du väljer Prova kopieras inte koden automatiskt till Cloud Shell. Skärmbild som visar ett exempel på Try It for Azure Cloud Shell.
Gå till https://shell.azure.comeller välj knappen Starta Cloud Shell för att öppna Cloud Shell i webbläsaren. Skärmbild som visar hur du startar Cloud Shell i ett nytt fönster.
Välj knappen Cloud Shell i menyraden längst upp till höger i Azure-portalen. Skärmbild som visar Cloud Shell-knappen i Azure-portalen

Så här kör du koden i den här artikeln i Azure Cloud Shell:

  1. Starta Cloud Shell.

  2. Välj knappen Kopiera i ett kodblock för att kopiera koden.

  3. Klistra in koden i Cloud Shell-sessionen genom att välja Ctrl+Skift+V i Windows och Linux, eller genom att välja Cmd+Skift+V på macOS.

  4. Välj Ange för att köra koden.

Om du väljer att installera och använda PowerShell lokalt kräver den här guiden Az PowerShell 1.4.0 eller senare. Om du behöver uppgradera kan du läsa Installera Azure PowerShell-modulen. Om du kör PowerShell lokalt måste du också köra Connect-AzAccount för att skapa en anslutning till Azure.

Kopiera en databas till en ny logisk server

# Connect-AzAccount
# The SubscriptionId in which to create these objects
$subscriptionId = "<Subscription-ID>"
# Set the resource group name and location for your source server
$sourceResourceGroupName = "mySourceResourceGroup-$(Get-Random)"
$sourceResourceGroupLocation = "westus2"
# Set the resource group name and location for your target server
$targetResourceGroupName = "myTargetResourceGroup-$(Get-Random)"
$targetResourceGroupLocation = "eastus"
# Set an admin login and password for your server
$adminSqlLogin = "<admin>"
$password = "<password>"
# The logical server names have to be unique in the system
$sourceServerName = "source-server-$(Get-Random)"
$targetServerName = "target-server-$(Get-Random)"
# The sample database name
$sourceDatabaseName = "mySampleDatabase"
$targetDatabaseName = "CopyOfMySampleDatabase"
# The IP address range that you want to allow to access your servers
$sourceStartIp = "0.0.0.0"
$sourceEndIp = "0.0.0.0"
$targetStartIp = "0.0.0.0"
$targetEndIp = "0.0.0.0"

# Set subscription
Set-AzContext -SubscriptionId $subscriptionId

# Create two new resource groups
$sourceResourceGroup = New-AzResourceGroup -Name $sourceResourceGroupName -Location $sourceResourceGroupLocation
$targetResourceGroup = New-AzResourceGroup -Name $targetResourceGroupName -Location $targetResourceGroupLocation

# Build the SQL administrator credential reused for both servers
$adminCredential = New-Object -TypeName System.Management.Automation.PSCredential `
    -ArgumentList $adminSqlLogin, (ConvertTo-SecureString -String $password -AsPlainText -Force)

# Create a server with a system-wide unique server name
$sourceServerParams = @{
    ResourceGroupName           = $sourceResourceGroupName
    ServerName                  = $sourceServerName
    Location                    = $sourceResourceGroupLocation
    SqlAdministratorCredentials = $adminCredential
}
$sourceResourceGroup = New-AzSqlServer @sourceServerParams
$targetServerParams = @{
    ResourceGroupName           = $targetResourceGroupName
    ServerName                  = $targetServerName
    Location                    = $targetResourceGroupLocation
    SqlAdministratorCredentials = $adminCredential
}
$targetResourceGroup = New-AzSqlServer @targetServerParams

# Create a server firewall rule that allows access from the specified IP range
$sourceFirewallParams = @{
    ResourceGroupName = $sourceResourceGroupName
    ServerName        = $sourceServerName
    FirewallRuleName  = "AllowedIPs"
    StartIpAddress    = $sourceStartIp
    EndIpAddress      = $sourceEndIp
}
$sourceServerFirewallRule = New-AzSqlServerFirewallRule @sourceFirewallParams
$targetFirewallParams = @{
    ResourceGroupName = $targetResourceGroupName
    ServerName        = $targetServerName
    FirewallRuleName  = "AllowedIPs"
    StartIpAddress    = $targetStartIp
    EndIpAddress      = $targetEndIp
}
$targetServerFirewallRule = New-AzSqlServerFirewallRule @targetFirewallParams

# Create a blank database in the source-server with an S0 performance level
$sourceDatabaseParams = @{
    ResourceGroupName             = $sourceResourceGroupName
    ServerName                    = $sourceServerName
    DatabaseName                  = $sourceDatabaseName
    RequestedServiceObjectiveName = "S0"
}
$sourceDatabase = New-AzSqlDatabase @sourceDatabaseParams

# Copy source database to the target server
$databaseCopyParams = @{
    ResourceGroupName     = $sourceResourceGroupName
    ServerName            = $sourceServerName
    DatabaseName          = $sourceDatabaseName
    CopyResourceGroupName = $targetResourceGroupName
    CopyServerName        = $targetServerName
    CopyDatabaseName      = $targetDatabaseName
}
$databaseCopy = New-AzSqlDatabaseCopy @databaseCopyParams

# Clean up deployment
# Remove-AzResourceGroup -ResourceGroupName $sourceResourceGroupName
# Remove-AzResourceGroup -ResourceGroupName $targetResourceGroupName

Rensa distribution

Använd följande kommando för att ta bort resursgruppen och alla resurser som är associerade med den.

Remove-AzResourceGroup -ResourceGroupName $sourceresourcegroupname
Remove-AzResourceGroup -ResourceGroupName $targetresourcegroupname

Förklaring av skript

Det här skriptet använder följande kommandon. Varje kommando i tabellen länkar till kommandospecifik dokumentation.

Befallning Anteckningar
New-AzResourceGroup Skapar en resursgrupp där alla resurser lagras.
New-AzSqlServer Skapar en ny logisk server som är värd för databaser och elastiska pooler.
New-AzSqlDatabase Skapar en databas eller elastisk pool.
New-AzSqlDatabaseCopy Skapar en kopia av en databas som använder ögonblicksbilden vid den aktuella tidpunkten.
Remove-AzResourceGroup Tar bort en resursgrupp med alla kapslade resurser.