如何在脚本中备份多个数据库

时间:2018-01-10 00:37:53

标签: database powershell azure

我需要备份Azure中同一服务器上的几个PowerShell数据库。

我目前有一个脚本可以帮助我进行备份但是单独进行 另外,我必须不断更改备份的名称

这是我的代码:

Import-Module $PSScriptRoot\..\util\utilConnection.ps1;
Import-Module $PSScriptRoot\..\util\utilDate.ps1;
#Import-Module $PSScriptRoot\..\logging\Logging_Functions.ps1;
Import-Module AzureRM.sql

$TIMESTAMP = getTimeStamp;

#$LogPath = getPathLog;
#$logFileName = "prueba_jobDatabaseBackup.log";

#Log-Start -LogPath $LogPath -LogName $logFileName -ScriptVersion "1.5"

#return;

#Login-AzureRmAccount
loginRMAccount;

#Set subscription Azure
prueba;

Write-Output "";

#Create credential Source DB Server (QA)
#$myPasswordDB = ConvertTo-SecureString $SQL_ACCOUNT_PASSWORD_QA -AsPlainText -Force;
#$myCredentialDB = New-Object System.Management.Automation.PSCredential ($SQL_ACCOUNT_NAME_QA, $myPasswordDB);
#$sqlCredential = Get-Credential -Credential $myCredentialDB;

#Create credential Source DB Server (Prod)
$myPasswordDB = ConvertTo-SecureString $SQL_ACCOUNT_PASSWORD_QA -AsPlainText -Force;
$myCredentialDB = New-Object System.Management.Automation.PSCredential ($SQL_ACCOUNT_NAME_QA, $myPasswordDB);
$sqlCredential = Get-Credential -Credential $myCredentialDB;

$resourceGroup = "resGroupDB";
$serverName = "domserverqa";
$database = "prueba";  **// here I have to change the name of the backup file**



$primarykey = $STORAGE_ACCOUNT_BACKUP_KEY; #strdatabasebackup




$StorageUri = ("https://strdatabasebackup.blob.core.windows.net/strdatabasebackupblob/(2018-01-09-07:00)dbdom_buin.bacpac"); // here I also have to change the final name individually for each database




#$sqlCredential = getCredentialSQLServerQA; #SQL Server target

$SQL_SERVER_FULLNAME_QA = getSQLServerFullNameAzureQA;
$TIMEOUT = 300;

$importRequest = New-AzureRmSqlDatabaseImport –ResourceGroupName $resourceGroup –ServerName $serverName –DatabaseName $database –StorageKeytype StorageAccessKey –StorageKey $primarykey -StorageUri $StorageUri -AdministratorLogin $sqlCredential.UserName –AdministratorLoginPassword $sqlCredential.Password –Edition Basic –ServiceObjectiveName basic -DatabaseMaxSizeBytes 2147483648 # 2GB -> 2 * 1024 MB -> 2 * 1024 * 1024 KB -> 2 * 1024 * 1024 * 1024 Bytes

$importStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink;

while ($importStatus.Status -eq "InProgress")
{
    $importStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink;        
    Write-Output ".";
    [System.Threading.Thread]::Sleep(2000);            
}

[System.Threading.Thread]::Sleep(4000); 

如何实现foreach或数组以将所有数据库放在一起并逐个备份,而无需手动执行?

如果有人有任何想法,请帮助我谢谢

1 个答案:

答案 0 :(得分:1)

将DBNames作为列表传递给ForLoop或函数

只需传入ForLoop中的数据库名称列表,将变量中的dbname传递给您的代码。

$AzureDBNames = 'AzureDB01','AzureDB01','AzureDB01'
ForEach ($AzureDBName in $AzureDBNames)
{
       # Code begins here 
       "Backing up $AzureDBName"
}

将代码转换为具有接受一个或多个数据库名称的参数的函数。

Function New-AzureDBBackup
{
    [CmdletBinding()]
    [Alias('NABB')]

    Param
    (
        [string[]]$AzureDBNames
    )

    # Code begins here

}

New-AzureDBBackup -AzureDBNames 'AzureDB01','AzureDB01','AzureDB01'

阅读在线帮助:

About_Functions
About_For
About_Loops
About_Variables