Implementare Oracle Data Guard su una macchina virtuale Linux di AzureImplement Oracle Data Guard on an Azure Linux virtual machine

L'interfaccia della riga di comando di Azure viene usata per creare e gestire le risorse di Azure dalla riga di comando o negli script.Azure CLI is used to create and manage Azure resources from the command line or in scripts. Questo articolo spiega come usare l'interfaccia della riga di comando di Azure per distribuire un database Oracle 12c da un'immagine di Azure Marketplace.This article describes how to use Azure CLI to deploy an Oracle Database 12c database from the Azure Marketplace image. In questo articolo viene anche illustrata la procedura per installare e configurare Data Guard su una macchina virtuale di Azure (VM).This article then shows you, step by step, how to install and configure Data Guard on an Azure virtual machine (VM).

Prima di iniziare, assicurarsi che l'interfaccia della riga di comando di Azure sia installata.Before you start, make sure that Azure CLI is installed. Per altre informazioni, vedere la guida all'installazione dell'interfaccia della riga di comando di Azure.For more information, see the Azure CLI installation guide.

Preparare l'ambientePrepare the environment

PresuppostiAssumptions

Per installare Oracle Data Guard, è necessario creare due macchine virtuali di Azure nello stesso set di disponibilità:To install Oracle Data Guard, you need to create two Azure VMs on the same availability set:

  • Nella VM primaria (myVM1) è installata un'istanza di Oracle in esecuzione.The primary VM (myVM1) has a running Oracle instance.
  • Nella VM di standby (myVM2) è installato solo il software Oracle.The standby VM (myVM2) has the Oracle software installed only.

L'immagine di Marketplace usata per creare le VM è Oracle:Oracle-Database-Ee:12.1.0.2:latest.The Marketplace image that you use to create the VMs is Oracle:Oracle-Database-Ee:12.1.0.2:latest.

Accedere ad AzureSign in to Azure

Accedere alla sottoscrizione di Azure con il comando az login e seguire le istruzioni visualizzate.Sign in to your Azure subscription by using the az login command and follow the on-screen directions.

az login

Creare un gruppo di risorseCreate a resource group

Creare un gruppo di risorse con il comando az group create.Create a resource group by using the az group create command. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.An Azure resource group is a logical container in which Azure resources are deployed and managed.

Nell'esempio seguente viene creato un gruppo di risorse denominato myResourceGroup nella località westus:The following example creates a resource group named myResourceGroup in the westus location:

az group create --name myResourceGroup --location westus

Creare un set di disponibilitàCreate an availability set

Creare un set di disponibilità è un'operazione facoltativa, ma consigliata.Creating an availability set is optional, but we recommend it. Per altre informazioni, vedere Linee guida per i set di disponibilità di Azure.For more information, see Azure availability sets guidelines.

az vm availability-set create \
    --resource-group myResourceGroup \
    --name myAvailabilitySet \
    --platform-fault-domain-count 2 \
    --platform-update-domain-count 2

Creare una macchina virtualeCreate a virtual machine

Creare una VM con il comando az vm create.Create a VM by using the az vm create command.

Nell'esempio seguente vengono create due VM chiamate myVM1 e myVM2.The following example creates two VMs named myVM1 and myVM2. Crea anche le chiavi SSH se non esistono già in una posizione predefinita.It also creates SSH keys, if they do not already exist in a default key location. Per usare un set specifico di chiavi, utilizzare l'opzione --ssh-key-value.To use a specific set of keys, use the --ssh-key-value option.

Creare myVM1 (primaria):Create myVM1 (primary):

az vm create \
     --resource-group myResourceGroup \
     --name myVM1 \
     --availability-set myAvailabilitySet \
     --image Oracle:Oracle-Database-Ee:12.1.0.2:latest \
     --size Standard_DS1_v2  \
     --admin-username azureuser \
     --generate-ssh-keys \

Dopo aver creato la VM, l'interfaccia della riga di comando di Azure visualizza informazioni simili a quelle dell'esempio seguente.After you create the VM, Azure CLI shows information similar to the following example. Prendere nota del valore di publicIpAddress.Note the value of publicIpAddress. Questo indirizzo verrà usato per accedere alla VM.You use this address to access the VM.

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
  "location": "westus",
  "macAddress": "00-0D-3A-36-2F-56",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "13.64.104.241",
  "resourceGroup": "myResourceGroup"
}

Creare myVM2 (standby):Create myVM2 (standby):

az vm create \
     --resource-group myResourceGroup \
     --name myVM2 \
     --availability-set myAvailabilitySet \
     --image Oracle:Oracle-Database-Ee:12.1.0.2:latest \
     --size Standard_DS1_v2  \
     --admin-username azureuser \
     --generate-ssh-keys \

Prendere nota del valore di publicIpAddress dopo aver creato myVM2.Note the value of publicIpAddress after you create myVM2.

Aprire la porta TCP per la connettivitàOpen the TCP port for connectivity

In questo passaggio vengono configurati gli endpoint esterni, che consentono l'accesso remoto al database Oracle.This step configures external endpoints, which allow remote access to the Oracle database.

Aprire la porta per myVM1:Open the port for myVM1:

az network nsg rule create --resource-group myResourceGroup\
    --nsg-name myVM1NSG --name allow-oracle\
    --protocol tcp --direction inbound --priority 999 \
    --source-address-prefix '*' --source-port-range '*' \
    --destination-address-prefix '*' --destination-port-range 1521 --access allow

Il risultato sarà simile alla seguente risposta:The result should look similar to the following response:

{
  "access": "Allow",
  "description": null,
  "destinationAddressPrefix": "*",
  "destinationPortRange": "1521",
  "direction": "Inbound",
  "etag": "W/\"bd77dcae-e5fd-4bd6-a632-26045b646414\"",
  "id": "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myVmNSG/securityRules/allow-oracle",
  "name": "allow-oracle",
  "priority": 999,
  "protocol": "Tcp",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "sourceAddressPrefix": "*",
  "sourcePortRange": "*"
}

Aprire la porta per myVM2:Open the port for myVM2:

az network nsg rule create --resource-group myResourceGroup\
    --nsg-name myVM2NSG --name allow-oracle\
    --protocol tcp --direction inbound --priority 999 \
    --source-address-prefix '*' --source-port-range '*' \
    --destination-address-prefix '*' --destination-port-range 1521 --access allow

Connettersi alla macchina virtualeConnect to the virtual machine

Usare il comando seguente per creare una sessione SSH con la macchina virtuale.Use the following command to create an SSH session with the virtual machine. Sostituire l'indirizzo IP con il valore publicIpAddress della macchina virtuale.Replace the IP address with the publicIpAddress value for your virtual machine.

$ ssh azureuser@<publicIpAddress>

Creare il database in myVM1 (primaria)Create the database on myVM1 (primary)

Il software Oracle è già installato nell'immagine di Marketplace, pertanto il passaggio successivo è installare il database.The Oracle software is already installed on the Marketplace image, so the next step is to install the database.

Passare all'utente Oracle con privilegi avanzati:Switch to the Oracle superuser:

$ sudo su - oracle

Creare il database:Create the database:

$ dbca -silent \
   -createDatabase \
   -templateName General_Purpose.dbc \
   -gdbname cdb1 \
   -sid cdb1 \
   -responseFile NO_VALUE \
   -characterSet AL32UTF8 \
   -sysPassword OraPasswd1 \
   -systemPassword OraPasswd1 \
   -createAsContainerDatabase true \
   -numberOfPDBs 1 \
   -pdbName pdb1 \
   -pdbAdminPassword OraPasswd1 \
   -databaseType MULTIPURPOSE \
   -automaticMemoryManagement false \
   -storageType FS \
   -ignorePreReqs

Gli output saranno simili alla risposta seguente:Outputs should look similar to the following response:

Copying database files
1% complete
2% complete
8% complete
13% complete
19% complete
27% complete
Creating and starting Oracle instance
29% complete
32% complete
33% complete
34% complete
38% complete
42% complete
43% complete
45% complete
Completing Database Creation
48% complete
51% complete
53% complete
62% complete
70% complete
72% complete
Creating Pluggable Databases
78% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/cdb1/cdb1.log" for further details.

Impostare le variabili ORACLE_SID e ORACLE_HOME:Set the ORACLE_SID and ORACLE_HOME variables:

$ ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1; export ORACLE_HOME
$ ORACLE_SID=cdb1; export ORACLE_SID

Se si vuole, è possibile aggiungere le variabili ORACLE_HOME e ORACLE_SID al file /home/oracle/.bashrc, in modo da salvare queste impostazioni per un accesso futuro:Optionally, you can add ORACLE_HOME and ORACLE_SID to the /home/oracle/.bashrc file, so that these settings are saved for future logins:

# add oracle home
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
# add oracle sid
export ORACLE_SID=cdb1

Configurare Data GuardConfigure Data Guard

Abilitare la modalità archivelog in myVM1 (primaria)Enable archive log mode on myVM1 (primary)

$ sqlplus / as sysdba
SQL> SELECT log_mode FROM v$database;

LOG_MODE
------------
NOARCHIVELOG

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;

Abilitare la registrazione forzata e verificare che esista almeno un file di log:Enable force logging, and make sure at least one log file is present:

SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER SYSTEM SWITCH LOGFILE;

Creare i log di ripristino di standby:Create standby redo logs:

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/cdb1/standby_redo01.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/cdb1/standby_redo02.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/cdb1/standby_redo03.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/cdb1/standby_redo04.log') SIZE 50M;

Attivare il flashback che facilita il recupero e impostare STANDBY_FILE_MANAGEMENT su auto. Chiudere quindi il comando SQL * Plus.Turn on Flashback (which makes recovery a lot easier) and set STANDBY_FILE_MANAGEMENT to auto. Exit SQL*Plus after that.

SQL> ALTER DATABASE FLASHBACK ON;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
SQL> EXIT;

Configurare il servizio in myVM1 (primaria)Set up service on myVM1 (primary)

Modificare o creare il file tnsnames.ora che si trova nella cartella $ORACLE_HOME\network\admin.Edit or create the tnsnames.ora file, which is in the $ORACLE_HOME\network\admin folder.

Aggiungere le voci seguenti:Add the following entries:

cdb1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myVM1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )

cdb1_stby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myVM2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )

Modificare o creare il file listener.ora che si trova nella cartella $ORACLE_HOME\network\admin.Edit or create the listener.ora file, which is in the $ORACLE_HOME\network\admin folder.

Aggiungere le voci seguenti:Add the following entries:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myVM1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cdb1_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1)
      (SID_NAME = cdb1)
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

Abilitare Data Guard Broker:Enable Data Guard Broker:

$ sqlplus / as sysdba
SQL> ALTER SYSTEM SET dg_broker_start=true;
SQL> EXIT;

Avviare il listener:Start the listener:

$ lsnrctl stop
$ lsnrctl start

Configurare il servizio in myVM2 (standby)Set up service on myVM2 (standby)

SSH per myVM2:SSH to myVM2:

$ ssh azureuser@<publicIpAddress>

Accedere come Oracle:Log in as Oracle:

$ sudo su - oracle

Modificare o creare il file tnsnames.ora che si trova nella cartella $ORACLE_HOME\network\admin.Edit or create the tnsnames.ora file, which is in the $ORACLE_HOME\network\admin folder.

Aggiungere le voci seguenti:Add the following entries:

cdb1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myVM1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )

cdb1_stby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myVM2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )

Modificare o creare il file listener.ora che si trova nella cartella $ORACLE_HOME\network\admin.Edit or create the listener.ora file, which is in the $ORACLE_HOME\network\admin folder.

Aggiungere le voci seguenti:Add the following entries:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myVM2)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cdb1_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1)
      (SID_NAME = cdb1)
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

Avviare il listener:Start the listener:

$ lsnrctl stop
$ lsnrctl start

Ripristinare il database su myVM2 (standby)Restore the database to myVM2 (standby)

Creare un file di parametri /tmp/initcdb1_stby.ora con il contenuto seguente:Create the parameter file /tmp/initcdb1_stby.ora with the following contents:

*.db_name='cdb1'

Creare le cartelle:Create folders:

mkdir -p /u01/app/oracle/oradata/cdb1/pdbseed
mkdir -p /u01/app/oracle/oradata/cdb1/pdb1
mkdir -p /u01/app/oracle/fast_recovery_area/cdb1
mkdir -p /u01/app/oracle/admin/cdb1/adump

Creare un file di password:Create a password file:

$ orapwd file=/u01/app/oracle/product/12.1.0/dbhome_1/dbs/orapwcdb1 password=OraPasswd1 entries=10

Avviare il database su myVM2:Start the database on myVM2:

$ export ORACLE_SID=cdb1
$ sqlplus / as sysdba

SQL> STARTUP NOMOUNT PFILE='/tmp/initcdb1_stby.ora';
SQL> EXIT;

Ripristinare il database usando lo strumento RMAN:Restore the database by using the RMAN tool:

$ rman TARGET sys/OraPasswd1@cdb1 AUXILIARY sys/OraPasswd1@cdb1_stby

Eseguire i comandi seguenti in RMAN:Run the following commands in RMAN:

DUPLICATE TARGET DATABASE
  FOR STANDBY
  FROM ACTIVE DATABASE
  DORECOVER
  SPFILE
    SET db_unique_name='CDB1_STBY' COMMENT 'Is standby'
  NOFILENAMECHECK;

Dopo aver completato il comando, i messaggi saranno simili ai seguenti.You should see messages similar to the following when the command is completed. Uscire da RMAN.Exit RMAN.

media recovery complete, elapsed time: 00:00:00
Finished recover at 29-JUN-17
Finished Duplicate Db at 29-JUN-17

RMAN> EXIT;

Se si vuole, è possibile aggiungere le variabili ORACLE_HOME e ORACLE_SID al file /home/oracle/.bashrc, in modo da salvare queste impostazioni per un accesso futuro:Optionally, you can add ORACLE_HOME and ORACLE_SID to the /home/oracle/.bashrc file, so that these settings are saved for future logins:

# add oracle home
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
# add oracle sid
export ORACLE_SID=cdb1

Abilitare Data Guard Broker:Enable Data Guard Broker:

$ sqlplus / as sysdba
SQL> ALTER SYSTEM SET dg_broker_start=true;
SQL> EXIT;

Configurare Data Guard Broker su myVM1 (primaria)Configure Data Guard Broker on myVM1 (primary)

Avviare Data Guard Manage e accedere usando SYS e una password.Start Data Guard Manager and log in by using SYS and a password. Non usare l'autenticazione del sistema operativo. Eseguire questi passaggi:(Do not use OS authentication.) Perform the following:

$ dgmgrl sys/OraPasswd1@cdb1
DGMGRL for Linux: Version 12.1.0.2.0 - 64bit Production

Copyright (c) 2000, 2013, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS cdb1 CONNECT IDENTIFIER IS cdb1;
Configuration "my_dg_config" created with primary database "cdb1"
DGMGRL> ADD DATABASE cdb1_stby AS CONNECT IDENTIFIER IS cdb1_stby MAINTAINED AS PHYSICAL;
Database "cdb1_stby" added
DGMGRL> ENABLE CONFIGURATION;
Enabled.

Rivedere la configurazione:Review the configuration:

DGMGRL> SHOW CONFIGURATION;

Configuration - my_dg_config

  Protection Mode: MaxPerformance
  Members:
  cdb1      - Primary database
    cdb1_stby - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS   (status updated 26 seconds ago)

L'installazione di Oracle Data Guard è stata completata.You've completed the Oracle Data Guard setup. La sezione successiva illustra come testare la connettività e il passaggio.The next section shows you how to test the connectivity and switch over.

Connettere il database dal computer clientConnect the database from the client machine

Aggiornare o creare il file tnsnames.ora nel computer client.Update or create the tnsnames.ora file on your client machine. Questo file si trova solitamente in $ORACLE_HOME\network\admin.This file is usually in $ORACLE_HOME\network\admin.

Sostituire gli indirizzi IP con i valori publicIpAddress per myVM1 e myVM2:Replace the IP addresses with your publicIpAddress values for myVM1 and myVM2:

cdb1=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=<myVM1 IP address>)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=cdb1)
    )
  )

cdb1_stby=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=<myVM2 IP address>)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=cdb1_stby)
    )
  )

Avviare il comando SQL * Plus:Start SQL*Plus:

$ sqlplus sys/OraPasswd1@cdb1
SQL*Plus: Release 12.2.0.1.0 Production on Wed May 10 14:18:31 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL>

Testare la configurazione di Data GuardTest the Data Guard configuration

Passare il database su myVM1 (primario)Switch over the database on myVM1 (primary)

Per passare da database primario a quello di standby (da cdb1 a cdb1_stby):To switch from primary to standby (cdb1 to cdb1_stby):

$ dgmgrl sys/OraPasswd1@cdb1
DGMGRL for Linux: Version 12.1.0.2.0 - 64bit Production

Copyright (c) 2000, 2013, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> SWITCHOVER TO cdb1_stby;
Performing switchover NOW, please wait...
Operation requires a connection to instance "cdb1" on database "cdb1_stby"
Connecting to instance "cdb1"...
Connected as SYSDBA.
New primary database "cdb1_stby" is opening...
Operation requires start up of instance "cdb1" on database "cdb1"
Starting instance "cdb1"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "cdb1_stby"
DGMGRL>

È ora possibile connettersi al database di standby.You can now connect to the standby database.

Avviare il comando SQL * Plus:Start SQL*Plus:


$ sqlplus sys/OraPasswd1@cdb1_stby
SQL*Plus: Release 12.2.0.1.0 Production on Wed May 10 14:18:31 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL>

Passare il database su myVM2 (standby)Switch over the database on myVM2 (standby)

Per il passaggio, eseguire le operazioni seguenti su myVM2:To switch over, run the following on myVM2:

$ dgmgrl sys/OraPasswd1@cdb1_stby
DGMGRL for Linux: Version 12.1.0.2.0 - 64bit Production

Copyright (c) 2000, 2013, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> SWITCHOVER TO cdb1;
Performing switchover NOW, please wait...
Operation requires a connection to instance "cdb1" on database "cdb1"
Connecting to instance "cdb1"...
Connected as SYSDBA.
New primary database "cdb1" is opening...
Operation requires start up of instance "cdb1" on database "cdb1_stby"
Starting instance "cdb1"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "cdb1"

Dovrebbe essere ancora possibile connettersi al database primario.Once again, you should now be able to connect to the primary database.

Avviare il comando SQL * Plus:Start SQL*Plus:


$ sqlplus sys/OraPasswd1@cdb1
SQL*Plus: Release 12.2.0.1.0 Production on Wed May 10 14:18:31 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL>

L'installazione e la configurazione di Data Guard in Oracle Linux sono state terminate.You've finished the installation and configuration of Data Guard on Oracle Linux.

Eliminare la macchina virtualeDelete the virtual machine

Quando la VM non è più necessaria, è possibile usare il comando seguente per rimuovere il gruppo di risorse, la VM e tutte le risorse correlate:When you no longer need the VM, you can use the following command to remove the resource group, VM, and all related resources:

az group delete --name myResourceGroup

Passaggi successiviNext steps

Esercitazione: creare macchine virtuali a disponibilità elevataTutorial: Create highly available virtual machines

Esplorare gli esempi dell'interfaccia della riga di comando di Azure per la distribuzione della VMExplore VM deployment Azure CLI samples