Creare e gestire processi elastici del database SQL con PowerShell (anteprima)Create and manage SQL Database elastic jobs using PowerShell (preview)

Importante

Questo articolo riguarda la versione ospitata dal cliente dei processi di database elastico.This article is for the customer-hosted version of Elastic Database jobs. I processi di database elastico verranno deprecati e sostituiti con nuovi processi di database elastico ospitati in Azure.Elastic Database jobs are being deprecated and replaced with new Azure-hosted Elastic Database jobs. Per i nuovi processi, usare la versione più recente dei processi di database elastico.For new jobs, use the latest Elastic Database jobs. Se attualmente si usano i precedenti processi ospitati dal cliente, vedere Eseguire la migrazione ai nuovi processi di database elastico per ottenere indicazioni e script di migrazione per un rapido aggiornamento alla versione più recente.If you currently use the older customer-hosted jobs, see Migrate to the new Elastic Database jobs for directions and migration scripts to quickly upgrade to the latest version.

Le API di PowerShell per i processi di database elastici , in anteprima, consentono di definire il gruppo di database sul quale verranno eseguiti gli script.The PowerShell APIs for Elastic Database jobs (in preview), let you define a group of databases against which scripts will execute. Questo articolo illustra come creare e gestire processi di database elastici con i cmdlet di PowerShell.This article shows how to create and manage Elastic Database jobs using PowerShell cmdlets. Vedere Panoramica dei processi di database elastici.See Elastic jobs overview.

PrerequisitiPrerequisites

Selezionare la sottoscrizione ad AzureSelect your Azure subscription

Per selezionare la sottoscrizione, è necessario l'ID sottoscrizione (-SubscriptionId) o il nome della sottoscrizione (-SubscriptionName).To select the subscription you need your subscription Id (-SubscriptionId) or subscription name (-SubscriptionName). Se sono disponibili più sottoscrizioni, è possibile eseguire il cmdlet Get-AzureRmSubscription e copiare le informazioni sulla sottoscrizione desiderata dal set di risultati.If you have multiple subscriptions you can run the Get-AzureRmSubscription cmdlet and copy the desired subscription information from the result set. Dopo aver ottenuto le informazioni della sottoscrizione, eseguire il commandlet seguente per impostare tale sottoscrizione come predefinita, vale a dire la destinazione per la creazione e la gestione dei processi:Once you have your subscription information, run the following commandlet to set this subscription as the default, namely the target for creating and managing jobs:

Select-AzureRmSubscription -SubscriptionId {SubscriptionID}

L'utilizzo di PowerShell ISE è consigliato per sviluppare ed eseguire gli script di PowerShell sui processi di database elastici.The PowerShell ISE is recommended for usage to develop and execute PowerShell scripts against the Elastic Database jobs.

Oggetti dei processi di database elasticiElastic Database jobs objects

La tabella seguente include l'elenco di tutti i tipi di oggetto dei processi di database elastici con la relativa descrizione e le API di PowerShell rilevanti.The following table lists out all the object types of Elastic Database jobs along with its description and relevant PowerShell APIs.

Tipo di oggettoObject Type DESCRIZIONEDescription API correlate di PowerShellRelated PowerShell APIs
CredenzialiCredential Nome utente e password da utilizzare per la connessione ai database per l'esecuzione di script o l'applicazione di DACPAC.Username and password to use when connecting to databases for execution of scripts or application of DACPACs.

La password viene crittografata prima dell’invio e archiviata nel database dei processi di database elastici.The password is encrypted before sending to and storing in the Elastic Database Jobs database. La password viene decrittografata dal servizio dai processi di database elastici tramite la credenziale creata e caricata dallo script di installazione.The password is decrypted by the Elastic Database Jobs service via the credential created and uploaded from the installation script.

Get-AzureSqlJobCredentialGet-AzureSqlJobCredential

New-AzureSqlJobCredentialNew-AzureSqlJobCredential

Set-AzureSqlJobCredentialSet-AzureSqlJobCredential

ScriptScript Script Transact-SQL da utilizzare per l'esecuzione nei database.Transact-SQL script to be used for execution across databases. Lo script deve essere creato per essere idempotente, poiché il servizio ritenterà l'esecuzione dello script quando si verificheranno degli errori.The script should be authored to be idempotent since the service will retry execution of the script upon failures.

Get-AzureSqlJobContentGet-AzureSqlJobContent

Get-AzureSqlJobContentDefinitionGet-AzureSqlJobContentDefinition

New-AzureSqlJobContentNew-AzureSqlJobContent

Set-AzureSqlJobContentDefinitionSet-AzureSqlJobContentDefinition

DACPACDACPAC Pacchetto dell'applicazione livello dati da applicare tra i database.Data-tier application package to be applied across databases.

Get-AzureSqlJobContentGet-AzureSqlJobContent

New-AzureSqlJobContentNew-AzureSqlJobContent

Set-AzureSqlJobContentDefinitionSet-AzureSqlJobContentDefinition

Destinazione del databaseDatabase Target Nome del database e del server che si riferisce a un Database SQL di Azure.Database and server name pointing to an Azure SQL Database.

Get-AzureSqlJobTargetGet-AzureSqlJobTarget

New-AzureSqlJobTargetNew-AzureSqlJobTarget

Destinazione di partizionamento della mappaShard Map Target Combinazione di una destinazione di database e una credenziale da utilizzare per determinare le informazioni archiviate all'interno di una mappa di partizionamento di un database elastico.Combination of a database target and a credential to be used to determine information stored within an Elastic Database shard map.

Get-AzureSqlJobTargetGet-AzureSqlJobTarget

New-AzureSqlJobTargetNew-AzureSqlJobTarget

Set-AzureSqlJobTargetSet-AzureSqlJobTarget

Destinazione di una raccolta personalizzataCustom Collection Target Gruppo definito di database da utilizzare collettivamente per l'esecuzione.Defined group of databases to collectively use for execution.

Get-AzureSqlJobTargetGet-AzureSqlJobTarget

New-AzureSqlJobTargetNew-AzureSqlJobTarget

Destinazione figlio di una raccolta personalizzataCustom Collection Child Target Destinazione di database a cui fa riferimento una raccolta personalizzata.Database target that is referenced from a custom collection.

Add-AzureSqlJobChildTargetAdd-AzureSqlJobChildTarget

Remove-AzureSqlJobChildTargetRemove-AzureSqlJobChildTarget

ProcessoJob

Definizione dei parametri per un processo che possono essere utilizzati per attivare l'esecuzione o per soddisfare una pianificazione.Definition of parameters for a job that can be used to trigger execution or to fulfill a schedule.

Get-AzureSqlJobGet-AzureSqlJob

New-AzureSqlJobNew-AzureSqlJob

Set-AzureSqlJobSet-AzureSqlJob

Esecuzione del processoJob Execution

Contenitore di attività necessarie per soddisfare l'esecuzione di uno script o l’applicazione di un DACPAC a una destinazione utilizzando le credenziali per le connessioni di database con gestione degli errori gestiti in base ai criteri di esecuzione.Container of tasks necessary to fulfill either executing a script or applying a DACPAC to a target using credentials for database connections with failures handled in accordance to an execution policy.

Get-AzureSqlJobExecutionGet-AzureSqlJobExecution

Start-AzureSqlJobExecutionStart-AzureSqlJobExecution

Stop-AzureSqlJobExecutionStop-AzureSqlJobExecution

Wait-AzureSqlJobExecutionWait-AzureSqlJobExecution

Esecuzione dell'attività di processoJob Task Execution

Singola unità di lavoro per soddisfare un processo.Single unit of work to fulfill a job.

Se un'attività di processo non è in grado di essere eseguita con successo, verrà registrato il messaggio di eccezione risultante e una nuova attività di processo corrispondente verrà creata ed eseguita in base al criterio di esecuzione specificato.If a job task is not able to successfully execute, the resulting exception message will be logged and a new matching job task will be created and executed in accordance to the specified execution policy.

Get-AzureSqlJobExecutionGet-AzureSqlJobExecution

Start-AzureSqlJobExecutionStart-AzureSqlJobExecution

Stop-AzureSqlJobExecutionStop-AzureSqlJobExecution

Wait-AzureSqlJobExecutionWait-AzureSqlJobExecution

Criterio di esecuzione del processoJob Execution Policy

Controlla le sospensioni dell’esecuzione dei processi, gli intervalli tra i tentativi, e i limiti dei tentativi.Controls job execution timeouts, retry limits and intervals between retries.

I Processi di database elastici includono un criterio di esecuzione di processo predefinito che provoca essenzialmente infiniti tentativi quando si verificano errori di attività di processo con backoff esponenziale di intervalli tra ogni tentativo.Elastic Database jobs includes a default job execution policy which cause essentially infinite retries of job task failures with exponential backoff of intervals between each retry.

Get-AzureSqlJobExecutionPolicyGet-AzureSqlJobExecutionPolicy

New-AzureSqlJobExecutionPolicyNew-AzureSqlJobExecutionPolicy

Set-AzureSqlJobExecutionPolicySet-AzureSqlJobExecutionPolicy

PianificazioneSchedule

Specifiche relative al tempo utilizzate affinché l'esecuzione avvenga ad intervalli ricorrenti o una sola volta.Time based specification for execution to take place either on a reoccurring interval or at a single time.

Get-AzureSqlJobScheduleGet-AzureSqlJobSchedule

New-AzureSqlJobScheduleNew-AzureSqlJobSchedule

Set-AzureSqlJobScheduleSet-AzureSqlJobSchedule

Trigger del processoJob Triggers

Un mapping tra un processo e una pianificazione per l'avvio dell’esecuzione del processo in base alla pianificazione.A mapping between a job and a schedule to trigger job execution according to the schedule.

New-AzureSqlJobTriggerNew-AzureSqlJobTrigger

Remove-AzureSqlJobTriggerRemove-AzureSqlJobTrigger

Tipi di gruppo di processi di database elastici supportatiSupported Elastic Database jobs group types

Il processo esegue script Transact-SQL (T-SQL) o applica DACPAC in un gruppo di database.The job executes Transact-SQL (T-SQL) scripts or application of DACPACs across a group of databases. Quando viene inviato un processo da eseguire in un gruppo di database, il processo si "espande" in processi figlio e ognuno completa l'esecuzione richiesta in un database singolo del gruppo.When a job is submitted to be executed across a group of databases, the job “expands” the into child jobs where each performs the requested execution against a single database in the group.

Si possono creare due tipi di gruppi:There are two types of groups that you can create:

  • Mappa partizioni : quando viene inviato un processo destinato a una mappa partizioni, il processo esegue query sulla mappa partizioni per determinare il set di partizioni corrente e quindi crea processi figlio per ogni partizione nella mappa partizioni.Shard Map group: When a job is submitted to target a shard map, the job queries the shard map to determine its current set of shards, and then creates child jobs for each shard in the shard map.
  • Gruppo Raccolta personalizzata: set di database personalizzato.Custom Collection group: A custom defined set of databases. Quando un processo è destinato a una raccolta personalizzata, crea processi figlio per ogni database attualmente nella raccolta personalizzata.When a job targets a custom collection, it creates child jobs for each database currently in the custom collection.

Per impostare la connessione dei processi di database elasticiTo set the Elastic Database jobs connection

È necessario impostare una connessione al database di controllo dei processi prima di usare le API dei processi.A connection needs to be set to the jobs control database prior to using the jobs APIs. L'esecuzione di questo cmdlet attiva la visualizzazione di una finestra delle credenziali che richiede il nome utente e la password creati durante l'installazione dei processi di database elastici.Running this cmdlet triggers a credential window to pop up requesting the user name and password created when installing Elastic Database jobs. Tutti gli esempi forniti in questo argomento presuppongono che il primo passaggio sia già stato eseguito.All examples provided within this topic assume that this first step has already been performed.

Aprire una connessione ai processi di database elastici:Open a connection to the Elastic Database jobs:

Use-AzureSqlJobConnection -CurrentAzureSubscription 

Credenziali crittografate all'interno dei processi di database elasticiEncrypted credentials within the Elastic Database jobs

Le credenziali del database possono essere inserite nel database di controllo dei processi con la relativa password crittografata.Database credentials can be inserted into the jobs control database with its password encrypted. È necessario archiviare le credenziali per abilitare l'esecuzione dei processi in un secondo momento tramite pianificazioni dei processi.It is necessary to store credentials to enable jobs to be executed at a later time, (using job schedules).

La crittografia funziona tramite un certificato creato come parte dello script di installazione.Encryption works through a certificate created as part of the installation script. Lo script di installazione crea e carica il certificato nel servizio Cloud di Azure per la decrittografia delle password crittografate archiviate.The installation script creates and uploads the certificate into the Azure Cloud Service for decryption of the stored encrypted passwords. In seguito, il servizio cloud di Azure archivia la chiave pubblica nel database di controllo dei processi che consente all'API di PowerShell o all'interfaccia del portale di Azure di crittografare una password fornita, senza richiedere l'installazione locale del certificato.The Azure Cloud Service later stores the public key within the jobs control database which enables the PowerShell API or Azure portal interface to encrypt a provided password without requiring the certificate to be locally installed.

Le password delle credenziali vengono crittografate e protette dagli utenti con accesso in sola lettura agli oggetti dei processi di database elastici.The credential passwords are encrypted and secure from users with read-only access to Elastic Database jobs objects. È tuttavia possibile che un utente malintenzionato con accesso in lettura e scrittura agli oggetti dei processi di database elastici possa estrarre una password.But it is possible for a malicious user with read-write access to Elastic Database Jobs objects to extract a password. Le credenziali sono progettate per essere riutilizzate sulle esecuzioni del processo.Credentials are designed to be reused across job executions. Le credenziali vengono passate al database di destinazione quando si stabiliscono connessioni.Credentials are passed to target databases when establishing connections. Attualmente non sono previste restrizioni per i database di destinazione usati per le singole credenziali, quindi un utente malintenzionato potrebbe aggiungere una destinazione di database per un database sotto il suo controllo.There are currently no restrictions on the target databases used for each credential, malicious user could add a database target for a database under the malicious user's control. L'utente potrebbe quindi avviare un processo destinato a questo database per ottenere la password delle credenziali.The user could subsequently start a job targeting this database to gain the credential's password.

Le procedure consigliate per i processi di database elastici includono:Security best practices for Elastic Database jobs include:

  • Limitare l'utilizzo delle API a utenti attendibili.Limit usage of the APIs to trusted individuals.
  • Le credenziali devono disporre dei privilegi minimi necessari per eseguire l'attività di processo.Credentials should have the least privileges necessary to perform the job task. Per altre informazioni, vedere l'articolo Autorizzazioni in SQL Server di MSDN.More information can be seen within this Authorization and Permissions SQL Server MSDN article.

Per creare credenziali crittografate per l'esecuzione di processi nei databaseTo create an encrypted credential for job execution across databases

Per creare nuove credenziali crittografate, il cmdlet Get-Credential richiede un nome utente e una password che possono essere passati al cmdlet New-AzureSqlJobCredential.To create a new encrypted credential, the Get-Credential cmdlet prompts for a user name and password that can be passed to the New-AzureSqlJobCredential cmdlet.

$credentialName = "{Credential Name}"
$databaseCredential = Get-Credential
$credential = New-AzureSqlJobCredential -Credential $databaseCredential -CredentialName $credentialName
Write-Output $credential

Per aggiornare le credenzialiTo update credentials

Quando la password cambia, usare il cmdlet Set-AzureSqlJobCredential e impostare il parametro CredentialName.When passwords change, use the Set-AzureSqlJobCredential cmdlet and set the CredentialName parameter.

$credentialName = "{Credential Name}"
Set-AzureSqlJobCredential -CredentialName $credentialName -Credential $credential 

Per definire la destinazione di una mappa partizioni del database elasticoTo define an Elastic Database shard map target

Per eseguire un processo su tutti i database in un set di partizioni, creato con la libreria client dei database elastici, usare una mappa partizioni come destinazione del database.To execute a job against all databases in a shard set (created using Elastic Database client library), use a shard map as the database target. Questo esempio richiede un'applicazione partizionata creata con la libreria client dei database elastici.This example requires a sharded application created using the Elastic Database client library. Vedere l'esempio in Iniziare a usare gli strumenti di database elastici.See Getting started with Elastic Database tools sample.

Il database di gestione delle mappe partizioni deve essere impostato come destinazione di database e quindi si dovrà impostare la mappa partizioni specifica come destinazione.The shard map manager database must be set as a database target and then the specific shard map must be specified as a target.

$shardMapCredentialName = "{Credential Name}"
$shardMapDatabaseName = "{ShardMapDatabaseName}" #example: ElasticScaleStarterKit_ShardMapManagerDb
$shardMapDatabaseServerName = "{ShardMapServerName}"
$shardMapName = "{MyShardMap}" #example: CustomerIDShardMap
$shardMapDatabaseTarget = New-AzureSqlJobTarget -DatabaseName $shardMapDatabaseName -ServerName $shardMapDatabaseServerName
$shardMapTarget = New-AzureSqlJobTarget -ShardMapManagerCredentialName $shardMapCredentialName -ShardMapManagerDatabaseName $shardMapDatabaseName -ShardMapManagerServerName $shardMapDatabaseServerName -ShardMapName $shardMapName
Write-Output $shardMapTarget

Creare uno Script T-SQL per l'esecuzione tra databaseCreate a T-SQL Script for execution across databases

Quando si creano script T-SQL per l'esecuzione, è consigliabile compilarli in modo che siano idempotenti e resilienti in caso di errori.When creating T-SQL scripts for execution, it is highly recommended to build them to be idempotent and resilient against failures. I processi di database elastici ritenterà l'esecuzione di uno script ogni volta che l'esecuzione rileva un errore, indipendentemente dalla classificazione dell'errore.Elastic Database jobs will retry execution of a script whenever execution encounters a failure, regardless of the classification of the failure.

Usare il cmdlet New-AzureSqlJobContent per creare e salvare uno script per l'esecuzione e impostare i parametri -ContentName e -CommandText.Use the New-AzureSqlJobContent cmdlet to create and save a script for execution and set the -ContentName and -CommandText parameters.

$scriptName = "Create a TestTable"

$scriptCommandText = "
IF NOT EXISTS (SELECT name FROM sys.tables WHERE name = 'TestTable')
BEGIN
    CREATE TABLE TestTable(
        TestTableId INT PRIMARY KEY IDENTITY,
        InsertionTime DATETIME2
    );
END
GO
INSERT INTO TestTable(InsertionTime) VALUES (sysutcdatetime());
GO"

$script = New-AzureSqlJobContent -ContentName $scriptName -CommandText $scriptCommandText
Write-Output $script

Creare un nuovo script da un fileCreate a new script from a file

Se lo script T-SQL è definito all'interno di un file, usare il codice seguente per importarlo:If the T-SQL script is defined within a file, use this to import the script:

$scriptName = "My Script Imported from a File"
$scriptPath = "{Path to SQL File}"
$scriptCommandText = Get-Content -Path $scriptPath
$script = New-AzureSqlJobContent -ContentName $scriptName -CommandText $scriptCommandText
Write-Output $script

Per aggiornare uno script T-SQL per l'esecuzione nei databaseTo update a T-SQL script for execution across databases

Questo script di PowerShell aggiorna il testo del comando T-SQL per uno script esistente.This PowerShell script updates the T-SQL command text for an existing script.

Impostare le seguenti variabili in modo da riflettere la definizione dello script desiderata da impostare:Set the following variables to reflect the desired script definition to be set:

$scriptName = "Create a TestTable"
$scriptUpdateComment = "Adding AdditionalInformation column to TestTable"
$scriptCommandText = "
IF NOT EXISTS (SELECT name FROM sys.tables WHERE name = 'TestTable')
BEGIN
CREATE TABLE TestTable(
    TestTableId INT PRIMARY KEY IDENTITY,
    InsertionTime DATETIME2
);
END
GO

IF NOT EXISTS (SELECT columns.name FROM sys.columns INNER JOIN sys.tables on columns.object_id = tables.object_id WHERE tables.name = 'TestTable' AND columns.name = 'AdditionalInformation')
BEGIN
ALTER TABLE TestTable
ADD AdditionalInformation NVARCHAR(400);
END
GO

INSERT INTO TestTable(InsertionTime, AdditionalInformation) VALUES (sysutcdatetime(), 'test');
GO"

Per aggiornare la definizione di uno script esistenteTo update the definition to an existing script

Set-AzureSqlJobContentDefinition -ContentName $scriptName -CommandText $scriptCommandText -Comment $scriptUpdateComment 

Creare un processo che esegua uno script in una mappa partizioniTo create a job to execute a script across a shard map

Questo script di PowerShell avvia un processo per l'esecuzione di uno script in ogni partizione di una mappa partizioni di scalabilità elastica.This PowerShell script starts a job for execution of a script across each shard in an Elastic Scale shard map.

Impostare le seguenti variabili in modo da riflettere lo script e la destinazione desiderati:Set the following variables to reflect the desired script and target:

$jobName = "{Job Name}"
$scriptName = "{Script Name}"
$shardMapServerName = "{Shard Map Server Name}"
$shardMapDatabaseName = "{Shard Map Database Name}"
$shardMapName = "{Shard Map Name}"
$credentialName = "{Credential Name}"
$shardMapTarget = Get-AzureSqlJobTarget -ShardMapManagerDatabaseName $shardMapDatabaseName -ShardMapManagerServerName $shardMapServerName -ShardMapName $shardMapName 
$job = New-AzureSqlJob -ContentName $scriptName -CredentialName $credentialName -JobName $jobName -TargetId $shardMapTarget.TargetId
Write-Output $job

Per eseguire un processoTo execute a job

Questo script di PowerShell esegue un processo esistente:This PowerShell script executes an existing job:

Aggiornare la variabile seguente per riflettere il nome del processo desiderato da eseguire:Update the following variable to reflect the desired job name to have executed:

$jobName = "{Job Name}"
$jobExecution = Start-AzureSqlJobExecution -JobName $jobName 
Write-Output $jobExecution

Per recuperare lo stato di esecuzione di un singolo processoTo retrieve the state of a single job execution

Usare il cmdlet Get-AzureSqlJobExecution e impostare il parametro JobExecutionId per visualizzare lo stato di esecuzione del processo.Use the Get-AzureSqlJobExecution cmdlet and set the JobExecutionId parameter to view the state of job execution.

$jobExecutionId = "{Job Execution Id}"
$jobExecution = Get-AzureSqlJobExecution -JobExecutionId $jobExecutionId
Write-Output $jobExecution

Usare lo stesso cmdlet Get-AzureSqlJobExecution con il parametro IncludeChildren per visualizzare lo stato delle esecuzioni del processo figlio, ovvero lo stato specifico per ogni esecuzione del processo in ogni database di destinazione del processo.Use the same Get-AzureSqlJobExecution cmdlet with the IncludeChildren parameter to view the state of child job executions, namely the specific state for each job execution against each database targeted by the job.

$jobExecutionId = "{Job Execution Id}"
$jobExecutions = Get-AzureSqlJobExecution -JobExecutionId $jobExecutionId -IncludeChildren
Write-Output $jobExecutions 

Per visualizzare lo stato di più esecuzioni del processoTo view the state across multiple job executions

Il cmdlet Get-AzureSqlJobExecution ha più parametri facoltativi che possono essere usati per visualizzare più esecuzioni di processo, filtrate tramite i parametri forniti.The Get-AzureSqlJobExecution cmdlet has multiple optional parameters that can be used to display multiple job executions, filtered through the provided parameters. Di seguito vengono illustrati alcuni dei possibili modi per utilizzare Get-AzureSqlJobExecution:The following demonstrates some of the possible ways to use Get-AzureSqlJobExecution:

Recuperare tutte le esecuzioni attive di processo di primo livello:Retrieve all active top level job executions:

Get-AzureSqlJobExecution

Recuperare tutte le esecuzioni di processo di primo livello, incluse le esecuzioni di processo inattive:Retrieve all top level job executions, including inactive job executions:

Get-AzureSqlJobExecution -IncludeInactive

Recuperare tutte le esecuzioni di processo figlio di un ID di esecuzione processo fornito, incluse le esecuzioni di processo inattive:Retrieve all child job executions of a provided job execution ID, including inactive job executions:

$parentJobExecutionId = "{Job Execution Id}"
Get-AzureSqlJobExecution -AzureSqlJobExecution -JobExecutionId $parentJobExecutionId -IncludeInactive -IncludeChildren

Recuperare tutte le esecuzioni di processo create utilizzando una pianificazione / processo di combinazione, inclusi i processi inattivi:Retrieve all job executions created using a schedule / job combination, including inactive jobs:

$jobName = "{Job Name}"
$scheduleName = "{Schedule Name}"
Get-AzureSqlJobExecution -JobName $jobName -ScheduleName $scheduleName -IncludeInactive

Recuperare tutti i processi destinati a una mappa di partizione specificata, inclusi i processi inattivi:Retrieve all jobs targeting a specified shard map, including inactive jobs:

$shardMapServerName = "{Shard Map Server Name}"
$shardMapDatabaseName = "{Shard Map Database Name}"
$shardMapName = "{Shard Map Name}"
$target = Get-AzureSqlJobTarget -ShardMapManagerDatabaseName $shardMapDatabaseName -ShardMapManagerServerName $shardMapServerName -ShardMapName $shardMapName
Get-AzureSqlJobExecution -TargetId $target.TargetId -IncludeInactive

Recuperare tutti i processi destinati a una raccolta personalizzata specificata, inclusi i processi inattivi:Retrieve all jobs targeting a specified custom collection, including inactive jobs:

$customCollectionName = "{Custom Collection Name}"
$target = Get-AzureSqlJobTarget -CustomCollectionName $customCollectionName
Get-AzureSqlJobExecution -TargetId $target.TargetId -IncludeInactive

Recuperare l'elenco delle esecuzioni delle attività di processo in una esecuzione di processo specifica:Retrieve the list of job task executions within a specific job execution:

$jobExecutionId = "{Job Execution Id}"
$jobTaskExecutions = Get-AzureSqlJobTaskExecution -JobExecutionId $jobExecutionId
Write-Output $jobTaskExecutions 

Recuperare i dettagli di esecuzione delle attività di processo:Retrieve job task execution details:

Il seguente script PowerShell può essere utilizzato per visualizzare i dettagli di un'esecuzione delle attività di processo, che è particolarmente utile durante il debug degli errori di esecuzione.The following PowerShell script can be used to view the details of a job task execution, which is particularly useful when debugging execution failures.

$jobTaskExecutionId = "{Job Task Execution Id}"
$jobTaskExecution = Get-AzureSqlJobTaskExecution -JobTaskExecutionId $jobTaskExecutionId
Write-Output $jobTaskExecution

Per recuperare gli errori nelle esecuzioni delle attività di processoTo retrieve failures within job task executions

L'oggetto JobTaskExecution include una proprietà per il ciclo di vita dell'attività insieme a una proprietà del messaggio.The JobTaskExecution object includes a property for the lifecycle of the task along with a message property. Se l'esecuzione di un'attività di processo non riesce, la proprietà del ciclo di vita verrà impostata su Non riuscita e la proprietà del messaggio verrà impostata sul messaggio di eccezione risultante e il relativo stack.If a job task execution failed, the lifecycle property will be set to Failed and the message property will be set to the resulting exception message and its stack. Se un processo ha esito negativo, è importante visualizzare i dettagli delle attività di processo che non sono riuscite per un determinato processo.If a job did not succeed, it is important to view the details of job tasks that did not succeed for a given job.

$jobExecutionId = "{Job Execution Id}"
$jobTaskExecutions = Get-AzureSqlJobTaskExecution -JobExecutionId $jobExecutionId
Foreach($jobTaskExecution in $jobTaskExecutions) 
    {
    if($jobTaskExecution.Lifecycle -ne 'Succeeded')
        {
        Write-Output $jobTaskExecution
        }
    }

Per attendere il completamento dell'esecuzione del processoTo wait for a job execution to complete

Il seguente script PowerShell può essere utilizzato per attendere che un’attività di processo venga completata: The following PowerShell script can be used to wait for a job task to complete:

$jobExecutionId = "{Job Execution Id}"
Wait-AzureSqlJobExecution -JobExecutionId $jobExecutionId 

Creare un criterio di esecuzione personalizzataCreate a custom execution policy

I processi di database elastici supportano la creazione di criteri di esecuzione personalizzati che possono essere applicati all'avvio dei processi.Elastic Database jobs supports creating custom execution policies that can be applied when starting jobs.

Criteri di esecuzione che attualmente consentono la definizione di:Execution policies currently allow for defining:

  • Nome: Identificatore del criterio di esecuzione.Name: Identifier for the execution policy.
  • Timeout del processo: tempo totale prima che un processo venga annullato dai processi di database elastici.Job Timeout: Total time before a job will be canceled by Elastic Database Jobs.
  • Intervallo tra tentativi iniziale: intervallo di attesa prima del primo tentativo.Initial Retry Interval: Interval to wait before first retry.
  • Intervallo massimo di tentativi: estremità degli intervalli tra i tentativi da utilizzare.Maximum Retry Interval: Cap of retry intervals to use.
  • Coefficiente di backoff dell’intervallo tra tentativi: coefficiente utilizzato per calcolare l’intervallo successivo tra i tentativi.Retry Interval Backoff Coefficient: Coefficient used to calculate the next interval between retries. Viene utilizzata la seguente formula: (Intervallo tentativi iniziale) * Math.pow((Coefficiente di backoff dell’intervallo), (Numero di tentativi) - 2).The following formula is used: (Initial Retry Interval) * Math.pow((Interval Backoff Coefficient), (Number of Retries) - 2).
  • Numero massimo di tentativi: Il numero massimo di tentativi all'interno di un processo.Maximum Attempts: The maximum number of retry attempts to perform within a job.

Il criterio di esecuzione predefinito utilizza i valori seguenti:The default execution policy uses the following values:

  • Nome: Criterio di esecuzione predefinitoName: Default execution policy
  • Timeout del processo: 1 settimanaJob Timeout: 1 week
  • Intervallo tra tentativi iniziale: 100 millisecondiInitial Retry Interval: 100 milliseconds
  • Intervallo massimo tra tentativi: 30 minutiMaximum Retry Interval: 30 minutes
  • Coefficiente di intervallo tra tentativi: 2Retry Interval Coefficient: 2
  • Numero massimo di tentativi: 2,147,483,647Maximum Attempts: 2,147,483,647

Creare il criterio di esecuzione desiderato:Create the desired execution policy:

$executionPolicyName = "{Execution Policy Name}"
$initialRetryInterval = New-TimeSpan -Seconds 10
$jobTimeout = New-TimeSpan -Minutes 30
$maximumAttempts = 999999
$maximumRetryInterval = New-TimeSpan -Minutes 1
$retryIntervalBackoffCoefficient = 1.5
$executionPolicy = New-AzureSqlJobExecutionPolicy -ExecutionPolicyName $executionPolicyName -InitialRetryInterval $initialRetryInterval -JobTimeout $jobTimeout -MaximumAttempts $maximumAttempts -MaximumRetryInterval $maximumRetryInterval 
-RetryIntervalBackoffCoefficient $retryIntervalBackoffCoefficient
Write-Output $executionPolicy

Aggiornare il criterio di esecuzione personalizzatoUpdate a custom execution policy

Aggiornare l'aggiornamento del criterio di esecuzione desiderato:Update the desired execution policy to update:

$executionPolicyName = "{Execution Policy Name}"
$initialRetryInterval = New-TimeSpan -Seconds 15
$jobTimeout = New-TimeSpan -Minutes 30
$maximumAttempts = 999999
$maximumRetryInterval = New-TimeSpan -Minutes 1
$retryIntervalBackoffCoefficient = 1.5
$updatedExecutionPolicy = Set-AzureSqlJobExecutionPolicy -ExecutionPolicyName $executionPolicyName -InitialRetryInterval $initialRetryInterval -JobTimeout $jobTimeout -MaximumAttempts $maximumAttempts -MaximumRetryInterval $maximumRetryInterval -RetryIntervalBackoffCoefficient $retryIntervalBackoffCoefficient
Write-Output $updatedExecutionPolicy

Annullare un processoCancel a job

I processi di database elastici supportano le richieste di annullamento dei processi.Elastic Database Jobs supports cancellation requests of jobs. Se i processi di database elastici rilevano una richiesta di annullamento per un processo in fase di esecuzione, verrà effettuato un tentativo di arresto del processo.If Elastic Database Jobs detects a cancellation request for a job currently being executed, it will attempt to stop the job.

E’ possibile cancellare un processo in due modi diversi tramite i processi di database elastici:There are two different ways that Elastic Database Jobs can perform a cancellation:

  1. Annullare le attività attualmente in esecuzione: se viene rilevato un annullamento mentre un'attività è in esecuzione, l'annullamento verrà eseguito nell'aspetto dell'attività attualmente in esecuzione.Cancel currently executing tasks: If a cancellation is detected while a task is currently running, a cancellation will be attempted within the currently executing aspect of the task. Ad esempio: se viene eseguita una query con esecuzione prolungata quando si tenta di eseguire un annullamento, si verificherà un tentativo di annullare la query.For example: If there is a long running query currently being performed when a cancellation is attempted, there will be an attempt to cancel the query.
  2. Annullare i tentativi dell'attività: se viene rilevato un annullamento dal thread di controllo prima che venga avviata un'attività per l'esecuzione, il thread di controllo eviterà di avviare l'attività e dichiarerà annullata la richiesta.Canceling task retries: If a cancellation is detected by the control thread before a task is launched for execution, the control thread will avoid launching the task and declare the request as canceled.

Se viene richiesto un annullamento del processo per un processo padre, tale richiesta verrà rispettata per il processo padre e per tutti i relativi processi figlio.If a job cancellation is requested for a parent job, the cancellation request will be honored for the parent job and for all of its child jobs.

Per inviare una richiesta di annullamento, usare il cmdlet Stop-AzureSqlJobExecution e impostare il parametro JobExecutionId.To submit a cancellation request, use the Stop-AzureSqlJobExecution cmdlet and set the JobExecutionId parameter.

$jobExecutionId = "{Job Execution Id}"
Stop-AzureSqlJobExecution -JobExecutionId $jobExecutionId

Per eliminare un processo e la relativa cronologia in modo asincronoTo delete a job and job history asynchronously

I processi di database elastici supportano l'eliminazione asincrona dei processi.Elastic Database jobs supports asynchronous deletion of jobs. Un processo può essere contrassegnato per l'eliminazione e il sistema lo eliminerà con tutta la relativa cronologia dopo il completamento di tutte le esecuzioni di processo per tale processo.A job can be marked for deletion and the system will delete the job and all its job history after all job executions have completed for the job. Il sistema non annullerà automaticamente le esecuzioni di processo attive.The system will not automatically cancel active job executions.

Richiamare Stop-AzureSqlJobExecution per annullare le esecuzioni di processo attive.Invoke Stop-AzureSqlJobExecution to cancel active job executions.

Per attivare l'eliminazione di processi, usare il cmdlet Remove-AzureSqlJob e impostare il parametro JobName.To trigger job deletion, use the Remove-AzureSqlJob cmdlet and set the JobName parameter.

$jobName = "{Job Name}"
Remove-AzureSqlJob -JobName $jobName

Per creare una destinazione di database personalizzataTo create a custom database target

È possibile definire destinazioni di database personalizzate per l'esecuzione diretta o per l'inclusione in un gruppo di database personalizzato.You can define custom database targets either for direct execution or for inclusion within a custom database group. Ad esempio, poiché i pool elastici non sono ancora supportati direttamente se si usano le API di PowerShell, è possibile creare una destinazione di database personalizzata e una destinazione della raccolta di database personalizzata che comprenda tutti i database nel pool.For example, because elastic pools are not yet directly supported using PowerShell APIs, you can create a custom database target and custom database collection target which encompasses all the databases in the pool.

Impostare le seguenti variabili in modo da riflettere le informazioni desiderate sul database:Set the following variables to reflect the desired database information:

$databaseName = "{Database Name}"
$databaseServerName = "{Server Name}"
New-AzureSqlJobTarget -DatabaseName $databaseName -ServerName $databaseServerName 

Per creare una destinazione per la raccolta di database personalizzataTo create a custom database collection target

Usare il cmdlet New-AzureSqlJobTarget per definire una destinazione per la raccolta di database personalizzata per abilitare l'esecuzione in più destinazioni di database definite.Use the New-AzureSqlJobTarget cmdlet to define a custom database collection target to enable execution across multiple defined database targets. Dopo aver creato un gruppo di database, è possibile associarli alla destinazione della raccolta personalizzata.After creating a database group, databases can be associated with the custom collection target.

Impostare le seguenti variabili in modo da riflettere la configurazione della destinazione della raccolta personalizzata desiderata:Set the following variables to reflect the desired custom collection target configuration:

$customCollectionName = "{Custom Database Collection Name}"
New-AzureSqlJobTarget -CustomCollectionName $customCollectionName 

Per aggiungere database a una destinazione della raccolta di database personalizzataTo add databases to a custom database collection target

Per aggiungere un database a una raccolta personalizzata specifica, usare il cmdlet Add-AzureSqlJobChildTarget.To add a database to a specific custom collection use the Add-AzureSqlJobChildTarget cmdlet.

$databaseServerName = "{Database Server Name}"
$databaseName = "{Database Name}"
$customCollectionName = "{Custom Database Collection Name}"
Add-AzureSqlJobChildTarget -CustomCollectionName $customCollectionName -DatabaseName $databaseName -ServerName $databaseServerName 

Verificare i database in una destinazione per la raccolta dei database personalizzataReview the databases within a custom database collection target

Usare il cmdlet Get-AzureSqlJobTarget per recuperare i database figlio all'interno di una destinazione di una raccolta database personalizzata.Use the Get-AzureSqlJobTarget cmdlet to retrieve the child databases within a custom database collection target.

$customCollectionName = "{Custom Database Collection Name}"
$target = Get-AzureSqlJobTarget -CustomCollectionName $customCollectionName
$childTargets = Get-AzureSqlJobTarget -ParentTargetId $target.TargetId
Write-Output $childTargets

Creare un processo per eseguire uno script in una destinazione di una raccolta database personalizzataCreate a job to execute a script across a custom database collection target

Usare il cmdlet New AzureSqlJob per creare un processo rispetto a un gruppo di database definiti da una destinazione della raccolta di database personalizzata.Use the New-AzureSqlJob cmdlet to create a job against a group of databases defined by a custom database collection target. I processi di database elastici espanderanno il processo in più processi figlio, ognuno corrispondente a un database associato alla destinazione di raccolta database personalizzata e eseguiranno lo script in tutti i database.Elastic Database jobs will expand the job into multiple child jobs each corresponding to a database associated with the custom database collection target and ensure that the script is executed against each database. Anche in questo caso, è importante che gli script siano idempotenti per essere flessibili ai tentativi.Again, it is important that scripts are idempotent to be resilient to retries.

$jobName = "{Job Name}"
$scriptName = "{Script Name}"
$customCollectionName = "{Custom Collection Name}"
$credentialName = "{Credential Name}"
$target = Get-AzureSqlJobTarget -CustomCollectionName $customCollectionName
$job = New-AzureSqlJob -JobName $jobName -CredentialName $credentialName -ContentName $scriptName -TargetId $target.TargetId
Write-Output $job

Raccolta dei dati tra databaseData collection across databases

È possibile usare un processo per eseguire una query su un gruppo di database e inviare i risultati a una tabella specifica.You can use a job to execute a query across a group of databases and send the results to a specific table. E’ possibile eseguire una query sulla tabella dopo aver visualizzato i risultati della query da ciascun database.The table can be queried after the fact to see the query’s results from each database. In questo modo si avrà un metodo asincrono per eseguire una query su molti database.This provides an asynchronous method to execute a query across many databases. I tentativi non riusciti vengono gestiti automaticamente tramite la ripetizione dei tentativi.Failed attempts are handled automatically via retries.

La tabella di destinazione specificata verrà creata automaticamente, se non esiste già.The specified destination table will be automatically created if it does not yet exist. La nuova tabella corrisponde allo schema del set di risultati restituito.The new table matches the schema of the returned result set. Se uno script restituisce più set di risultati, i processi di database elastici invieranno solo il primo set alla tabella di destinazione.If a script returns multiple result sets, Elastic Database jobs will only send the first to the destination table.

Lo script di PowerShell seguente esegue uno script e raccoglie i risultati in una tabella specificata.The following PowerShell script executes a script and collects its results into a specified table. Questo script presuppone che sia stato creato uno script T-SQL che restituisce un singolo set di risultati e che sia stata creata una destinazione della raccolta di database personalizzata.This script assumes that a T-SQL script has been created which outputs a single result set and that a custom database collection target has been created.

Questo script usa il cmdlet Get-AzureSqlJobTarget.This script uses the Get-AzureSqlJobTarget cmdlet. Impostare i parametri per lo script, le credenziali e la destinazione di esecuzione:Set the parameters for script, credentials, and execution target:

$jobName = "{Job Name}"
$scriptName = "{Script Name}"
$executionCredentialName = "{Execution Credential Name}"
$customCollectionName = "{Custom Collection Name}"
$destinationCredentialName = "{Destination Credential Name}"
$destinationServerName = "{Destination Server Name}"
$destinationDatabaseName = "{Destination Database Name}"
$destinationSchemaName = "{Destination Schema Name}"
$destinationTableName = "{Destination Table Name}"
$target = Get-AzureSqlJobTarget -CustomCollectionName $customCollectionName

Per creare e avviare un processo per gli scenari di raccolta datiTo create and start a job for data collection scenarios

Questo script usa il cmdlet Start-AzureSqlJobExecution.This script uses the Start-AzureSqlJobExecution cmdlet.

$job = New-AzureSqlJob -JobName $jobName 
-CredentialName $executionCredentialName 
-ContentName $scriptName 
-ResultSetDestinationServerName $destinationServerName 
-ResultSetDestinationDatabaseName $destinationDatabaseName 
-ResultSetDestinationSchemaName $destinationSchemaName 
-ResultSetDestinationTableName $destinationTableName 
-ResultSetDestinationCredentialName $destinationCredentialName 
-TargetId $target.TargetId
Write-Output $job
$jobExecution = Start-AzureSqlJobExecution -JobName $jobName
Write-Output $jobExecution

Per pianificare un trigger di esecuzione del processoTo schedule a job execution trigger

Lo script di PowerShell seguente può essere usato per creare una pianificazione ricorrente.The following PowerShell script can be used to create a recurring schedule. Questo script usa l'intervallo di minuti, ma New-AzureSqlJobSchedule supporta anche i parametri -DayInterval, -HourInterval, -MonthInterval e -WeekInterval.This script uses a minute interval, but New-AzureSqlJobSchedule also supports -DayInterval, -HourInterval, -MonthInterval, and -WeekInterval parameters. Le pianificazioni che vengono eseguite una sola volta possono essere create specificando -OneTime.Schedules that execute only once can be created by passing -OneTime.

Creare una nuova pianificazione:Create a new schedule:

$scheduleName = "Every one minute"
$minuteInterval = 1
$startTime = (Get-Date).ToUniversalTime()
$schedule = New-AzureSqlJobSchedule 
-MinuteInterval $minuteInterval 
-ScheduleName $scheduleName 
-StartTime $startTime 
Write-Output $schedule

Per attivare l'esecuzione di un processo in una pianificazione temporaleTo trigger a job executed on a time schedule

È possibile definire un trigger di processo per eseguire un processo in base a una pianificazione temporale.A job trigger can be defined to have a job executed according to a time schedule. Il seguente script di PowerShell può essere utilizzato per creare un trigger di processo.The following PowerShell script can be used to create a job trigger.

Usare New-AzureSqlJobTrigger e impostare le variabili seguenti in modo che corrispondano al processo e alla pianificazione desiderati:Use New-AzureSqlJobTrigger and set the following variables to correspond to the desired job and schedule:

$jobName = "{Job Name}"
$scheduleName = "{Schedule Name}"
$jobTrigger = New-AzureSqlJobTrigger
-ScheduleName $scheduleName
-JobName $jobName
Write-Output $jobTrigger

Per rimuovere un'associazione pianificata per arrestare l'esecuzione di un processo in base a una pianificazioneTo remove a scheduled association to stop job from executing on schedule

Per sospendere l'esecuzione del processo ricorrente tramite un trigger di processo, è possibile rimuovere il trigger di processo.To discontinue reoccurring job execution through a job trigger, the job trigger can be removed. Rimuovere un trigger di processo per arrestare l'esecuzione di un processo in base a una pianificazione mediante il cmdlet Remove-AzureSqlJobTrigger.Remove a job trigger to stop a job from being executed according to a schedule using the Remove-AzureSqlJobTrigger cmdlet.

$jobName = "{Job Name}"
$scheduleName = "{Schedule Name}"
Remove-AzureSqlJobTrigger 
-ScheduleName $scheduleName 
-JobName $jobName

Recuperare i trigger di processo associati a una pianificazione temporaleRetrieve job triggers bound to a time schedule

Il seguente script PowerShell è utilizzabile per ottenere e visualizzare i trigger di processo registrati in una particolare pianificazione temporale.The following PowerShell script can be used to obtain and display the job triggers registered to a particular time schedule.

$scheduleName = "{Schedule Name}"
$jobTriggers = Get-AzureSqlJobTrigger -ScheduleName $scheduleName
Write-Output $jobTriggers

Per recuperare i trigger di processo associati a un processoTo retrieve job triggers bound to a job

Usare Get AzureSqlJobTrigger per ottenere e visualizzare le pianificazioni che contengono un processo registrato.Use Get-AzureSqlJobTrigger to obtain and display schedules containing a registered job.

$jobName = "{Job Name}"
$jobTriggers = Get-AzureSqlJobTrigger -JobName $jobName
Write-Output $jobTriggers

Per creare un'applicazione livello dati (DACPAC) per l'esecuzione sui databaseTo create a data-tier application (DACPAC) for execution across databases

Per creare un'applicazione DACPAC, vedere Applicazioni livello dati.To create a DACPAC, see Data-Tier applications. Per distribuire un'applicazione DACPAC, usare il cmdlet New-AzureSqlJobContent.To deploy a DACPAC, use the New-AzureSqlJobContent cmdlet. L'applicazione DACPAC deve essere accessibile al servizio.The DACPAC must be accessible to the service. È consigliabile caricare nell'archiviazione di Azure un'applicazione DACPAC creata e creare una Firma di accesso condiviso per DACPAC.It is recommended to upload a created DACPAC to Azure Storage and create a Shared Access Signature for the DACPAC.

$dacpacUri = "{Uri}"
$dacpacName = "{Dacpac Name}"
$dacpac = New-AzureSqlJobContent -DacpacUri $dacpacUri -ContentName $dacpacName 
Write-Output $dacpac

Per aggiornare un'applicazione livello dati (DACPAC) per l'esecuzione nei databaseTo update a data-tier application (DACPAC) for execution across databases

I DACPAC esistenti registrati all’interno dei processi di database elastici possono essere aggiornati in modo da fare riferimento ai nuovo URI.Existing DACPACs registered within Elastic Database Jobs can be updated to point to new URIs. Usare il cmdlet Set-AzureSqlJobContentDefinition per aggiornare l'URI DACPAC in una DACPAC registrata esistente:Use the Set-AzureSqlJobContentDefinition cmdlet to update the DACPAC URI on an existing registered DACPAC:

$dacpacName = "{Dacpac Name}"
$newDacpacUri = "{Uri}"
$updatedDacpac = Set-AzureSqlJobDacpacDefinition -ContentName $dacpacName -DacpacUri $newDacpacUri
Write-Output $updatedDacpac

Per creare un processo per applicare un'applicazione livello dati (DACPAC) nei databaseTo create a job to apply a data-tier application (DACPAC) across databases

Dopo aver creato un DACPAC all'interno di processi di database elastici, è possibile creare un processo per applicare il DACPAC su un gruppo di database.After a DACPAC has been created within Elastic Database Jobs, a job can be created to apply the DACPAC across a group of databases. Utilizzare il seguente script di PowerShell per creare un processo DACPAC su una raccolta personalizzata di database:The following PowerShell script can be used to create a DACPAC job across a custom collection of databases:

$jobName = "{Job Name}"
$dacpacName = "{Dacpac Name}"
$customCollectionName = "{Custom Collection Name}"
$credentialName = "{Credential Name}"
$target = Get-AzureSqlJobTarget 
-CustomCollectionName $customCollectionName
$job = New-AzureSqlJob 
-JobName $jobName 
-CredentialName $credentialName 
-ContentName $dacpacName -TargetId $target.TargetId
Write-Output $job 

Risorse aggiuntiveAdditional resources

Se non si usano gli strumenti di database elastici,Not using elastic database tools yet? vedere la Guida introduttiva.Check out our Getting Started Guide. Se ci sono domande, è possibile visitare il forum sul database SQL mentre è possibile inserire le richieste di nuove funzionalità nel forum relativo a commenti e suggerimenti sul database SQL.For questions, please reach out to us on the SQL Database forum and for feature requests, please add them to the SQL Database feedback forum.