Creare un database Oracle in una VM di Azure

Si applica a: ✔️ macchine virtuali Linux

Questo articolo descrive come usare l'interfaccia della riga di comando di Azure per distribuire una macchina virtuale di Azure dall'immagine della raccolta Oracle Marketplace per creare un database Oracle Database 19c. Dopo aver distribuito il server, questo si connette tramite SSH per configurare il database Oracle.

Prerequisiti

  • Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

  • Azure Cloud Shell o interfaccia della riga di comando di Azure.

    È possibile eseguire i comandi dell'interfaccia della riga di comando di Azure in questa guida introduttiva in modo interattivo in Azure Cloud Shell. Per eseguire i comandi in Cloud Shell, selezionare Apri Cloud Shell nell'angolo superiore destro di un blocco di codice. Selezionare Copia per copiare il codice e incollarlo in Cloud Shell per eseguirlo. È anche possibile eseguire Cloud Shell dal portale di Azure. Cloud Shell usa sempre la versione più recente dell'interfaccia della riga di comando di Azure.

    In alternativa, è possibile installare l'interfaccia della riga di comando di Azure in locale per eseguire i comandi. I passaggi descritti in questo articolo richiedono l'interfaccia della riga di comando di Azure versione 2.0.4 o successiva. Eseguire az version per visualizzare la versione installata e le librerie dipendenti ed eseguire az upgrade per eseguire l'aggiornamento. Se si usa un'installazione locale, accedere ad Azure con il comando az login.

Crea gruppo di risorse

Creare un gruppo di risorse con il comando az group create. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.

L'esempio seguente crea un gruppo di risorse denominato rg-oracle nella posizione eastus.

az group create --name rg-oracle --location eastus

Nota

Questa guida introduttiva crea una macchina virtuale SKU Standard_DS2_v2 nell'area Stati Uniti orientali. Per visualizzare l'elenco degli SKU supportati per area, usare il comando az vm list-skus.

Crea macchina virtuale

Crea una macchina virtuale usando il comando az vm create.

L'esempio seguente crea una macchina virtuale denominata vmoracle19c. Crea anche le chiavi SSH se non esistono già in una posizione predefinita. Per usare un set specifico di chiavi, è possibile usare l'opzione --ssh-key-value con il comando.

az vm create \
    --name vmoracle19c \
    --resource-group rg-oracle \
    --image Oracle:oracle-database-19-3:oracle-database-19-0904:latest \
    --size Standard_DS2_v2 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --public-ip-address-allocation static \
    --public-ip-address-dns-name vmoracle19c

In seguito alla creazione della VM, l'interfaccia della riga di comando di Azure visualizza informazioni simili a quelle dell'esempio seguente. Si noti il valore della proprietà publicIpAddress. Questo indirizzo IP verrà usato per accedere alla macchina virtuale.

{
  "fqdns": "",
  "id": "/subscriptions/{snip}/resourceGroups/rg-oracle/providers/Microsoft.Compute/virtualMachines/vmoracle19c",
  "location": "eastus",
  "macAddress": "00-0D-3A-36-2F-56",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "13.64.104.241",
  "resourceGroup": "rg-oracle"
}

Creare un disco per i file di dati Oracle

Creare e collegare un nuovo disco per i file di dati Oracle e un'area di ripristino veloce (FRA) con il comando az vm disk attach.

L'esempio seguente crea un disco denominato oradata01.

az vm disk attach \
    --name oradata01 --new \
    --resource-group rg-oracle \
    --size-gb 64 --sku StandardSSD_LRS \
    --vm-name vmoracle19c

Aprire le porte per la connettività

In questa attività è necessario configurare alcuni endpoint esterni per il listener del database da usare configurando il gruppo di sicurezza di rete di Azure (NSG) che protegge la macchina virtuale.

  1. Creare il gruppo di sicurezza di rete per la macchina virtuale con il comando az network nsg create. Questo comando crea il gruppo di sicurezza di rete vmoracle19cNSG per controllare l'accesso alla macchina virtuale:

    az network nsg create --resource-group rg-oracle --name vmoracle19cNSG
    
  2. Creare una regola del gruppo di sicurezza di rete con il comando az network nsg rule create. Questo comando crea la regola del gruppo di sicurezza di rete allow-oracle per aprire l'endpoint per l'accesso remoto al database Oracle:

    az network nsg rule create \
        --resource-group rg-oracle \
        --nsg-name vmoracle19cNSG \
        --name allow-oracle \
        --protocol tcp \
        --priority 1001 \
        --destination-port-range 1521
    
  3. Creare una seconda regola del gruppo di sicurezza di rete per aprire l'endpoint per l'accesso remoto a Oracle. Questo comando crea la regola del gruppo di sicurezza di rete allow-oracle-EM:

    az network nsg rule create \
        --resource-group rg-oracle \
        --nsg-name vmoracle19cNSG \
        --name allow-oracle-EM \
        --protocol tcp \
        --priority 1002 \
        --destination-port-range 5502
    
  4. Se necessario, usare il comando az network public-ip show per ottenere l'indirizzo IP pubblico della macchina virtuale:

    az network public-ip show \
        --resource-group rg-oracle \
        --name vmoracle19cPublicIP \
        --query "ipAddress" \
        --output tsv
    

Preparare un ambiente di macchina virtuale

  1. Creare una sessione SSH con la macchina virtuale. Sostituire la parte <publicIPAddress> con il valore dell'indirizzo IP pubblico per la macchina virtuale, ad esempio 10.200.300.4:

    ssh azureuser@<publicIPAddress>
    
  2. Passare all'utente radice:

    sudo su -
    
  3. Individuare il dispositivo disco creato più di recente che si vuole formattare per contenere i file di dati Oracle:

    ls -alt /dev/sd*|head -1
    

    L'output è simile all'esempio seguente:

    brw-rw----. 1 root disk 8, 16 Dec  8 22:57 /dev/sdc
    
  4. Come utente radice, usare il comando parted per formattare il dispositivo.

    1. Creare prima di tutto un'etichetta del disco:

      parted /dev/sdc mklabel gpt
      
    2. Creare quindi una partizione primaria che si estende sull'intero disco:

      parted -a optimal /dev/sdc mkpart primary 0GB 64GB	
      
    3. Infine, controllare i dettagli del dispositivo stampando i relativi metadati:

      parted /dev/sdc print
      

      L'output è simile all'esempio seguente:

      Model: Msft Virtual Disk (scsi)
      Disk /dev/sdc: 68.7GB
      Sector size (logical/physical): 512B/4096B
      Partition Table: gpt
      Disk Flags:
      Number   Start    End      Size     File system   Name     Flags
      1        1049kB   64.0GB   64.0GB   ext4          primary
      
  5. Creare un file system nella partizione del dispositivo:

    mkfs -t ext4 /dev/sdc1
    

    L'output è simile all'esempio seguente:

    mke2fs 1.42.9 (28-Dec-2013)
    Discarding device blocks: done                            
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    3907584 inodes, 15624704 blocks
    781235 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=2164260864
    477 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks: 
         32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
         4096000, 7962624, 11239424
     Allocating group tables: done                            
     Writing inode tables: done                            
     Creating journal (32768 blocks): done
     Writing superblocks and filesystem accounting information: done   
    
  6. Creare un punto di montaggio:

    mkdir /u02
    
  7. Montare il disco:

    mount /dev/sdc1 /u02
    
  8. Modificare le autorizzazioni per il punto di montaggio:

    chmod 777 /u02
    
  9. Aggiungere il montaggio al file /etc/fstab:

    echo "/dev/sdc1               /u02                    ext4    defaults        0 0" >> /etc/fstab
    

    Importante

    Questo comando monta il file /etc/fstab senza un UUID specifico, cosa che può impedire il riavvio corretto del disco. Prima di tentare di riavviare il disco, aggiornare la voce /etc/fstab in modo che includa un UUID per il punto di montaggio.

  10. Aggiornare il file /etc/hosts con l'indirizzo IP pubblico e il nome host dell'indirizzo. Modificare le parti <Public IP> e due <VMname> in modo da riflettere i valori effettivi:

    echo "<Public IP> <VMname>.eastus.cloudapp.azure.com <VMname>" >> /etc/hosts
    
  11. Aggiungere il nome di dominio della macchina virtuale al file /etc/hostname. Il comando seguente presuppone che il gruppo di risorse e la macchina virtuale vengano creati nell'area eastus:

    sed -i 's/$/\.eastus\.cloudapp\.azure\.com &/' /etc/hostname
    
  12. Aprire le porte del firewall.

    Poiché SELinux è abilitato per impostazione predefinita nell'immagine del Marketplace, è necessario aprire il firewall al traffico per la porta di ascolto del database 1521 e la porta Enterprise Manager Express 5502. Eseguire i comandi seguenti come utente radice:

    firewall-cmd --zone=public --add-port=1521/tcp --permanent
    firewall-cmd --zone=public --add-port=5502/tcp --permanent
    firewall-cmd --reload
    

Creare il database

Il software Oracle è già installato nell'immagine del Marketplace. Creare un database di esempio come segue.

  1. Passare all'utente oracle:

    sudo su - oracle
    
  2. Avviare il listener del database:

    lsnrctl start
    

    L'output è simile all'esempio seguente:

    LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 20-OCT-2020 01:58:18
    
    Copyright (c) 1991, 2019, Oracle.  All rights reserved.
    
    Starting /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr: please wait...
    
    TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    Log messages written to /u01/app/oracle/diag/tnslsnr/vmoracle19c/listener/alert/log.xml
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521)))
    
    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    Start Date                20-OCT-2020 01:58:18
    Uptime                    0 days 0 hr. 0 min. 0 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Log File         /u01/app/oracle/diag/tnslsnr/vmoracle19c/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521)))
    The listener supports no services
    The command completed successfully
    
  3. Creare una directory di dati per i file di dati Oracle:

    mkdir /u02/oradata
    
  4. Eseguire l'Assistente di creazione del database:

    dbca -silent \
        -createDatabase \
        -templateName General_Purpose.dbc \
        -gdbname oratest1 \
        -sid oratest1 \
        -responseFile NO_VALUE \
        -characterSet AL32UTF8 \
        -sysPassword OraPasswd1 \
        -systemPassword OraPasswd1 \
        -createAsContainerDatabase false \
        -databaseType MULTIPURPOSE \
        -automaticMemoryManagement false \
        -storageType FS \
        -datafileDestination "/u02/oradata/" \
        -ignorePreReqs
    

    La creazione del database richiede alcuni minuti.

    L'output è simile all'esempio seguente:

         Prepare for db operation
        10% complete
        Copying database files
        40% complete
        Creating and starting Oracle instance
        42% complete
        46% complete
        50% complete
        54% complete
        60% complete
        Completing Database Creation
        66% complete
        69% complete
        70% complete
        Executing Post Configuration Actions
        100% complete
        Database creation complete. For details check the logfiles at: /u01/app/oracle/cfgtoollogs/dbca/oratest1.
        Database Information:
        Global Database Name:oratest1
        System Identifier(SID):oratest1
        Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/oratest1/oratest1.log" for further details.
    
  5. Impostare le variabili Oracle:

    Prima della connessione, è necessario impostare la variabile di ambiente ORACLE_SID:

    export ORACLE_SID=oratest1
    

    È anche necessario aggiungere la variabile ORACLE_SID per gli utenti oracle al file .bashrc per gli accessi futuri usando il comando seguente:

    echo "export ORACLE_SID=oratest1" >> ~oracle/.bashrc
    

Automatizzare l'avvio e l'arresto del database

Per impostazione predefinita, il database Oracle non viene avviato automaticamente quando si riavvia la VM. Per configurare il database Oracle perché venga avviato automaticamente, accedere prima di tutto come utente ROOT. Quindi creare e aggiornare alcuni file di sistema.

  1. Accedere come utente radice:

    sudo su -
    
  2. Modificare il flag di avvio automatico da N a Y nel file /etc/oratab:

    sed -i 's/:N/:Y/' /etc/oratab
    
  3. Creare un file denominato /etc/init.d/dbora e aggiungere il comando bash seguente al file:

    #!/bin/sh
    # chkconfig: 345 99 10
    # Description: Oracle auto start-stop script.
    #
    # Set ORA_HOME to be equivalent to $ORACLE_HOME.
    ORA_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
    ORA_OWNER=oracle
    
    case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the Oracle sign-in
        # will not prompt the user for any values.
        # Remove "&" if you don't want startup as a background process.
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME" &
        touch /var/lock/subsys/dbora
        ;;
    
    'stop')
        # Stop the Oracle databases:
        # The following command assumes that the Oracle sign-in
        # will not prompt the user for any values.
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME" &
        rm -f /var/lock/subsys/dbora
        ;;
    esac
    
  4. Modificare le autorizzazioni per i file con il comando chmod:

    chgrp dba /etc/init.d/dbora
    chmod 750 /etc/init.d/dbora
    
  5. Creare collegamenti simbolici per l'avvio e l'arresto:

    ln -s /etc/init.d/dbora /etc/rc.d/rc0.d/K01dbora
    ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/S99dbora
    ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/S99dbora
    
  6. Per testare le modifiche, riavviare la VM:

    reboot
    

Pulire le risorse

Al termine dell'esplorazione di un primo database Oracle in Azure e quando la macchina virtuale non è più necessaria, è possibile usare il comando az group delete per rimuovere il gruppo di risorse la macchina virtuale e tutte le risorse correlate.

az group delete --name rg-oracle

Passaggi successivi