Create an Oracle Database in an Azure VM
This guide details using the Azure CLI to deploy an Azure virtual machine from the Oracle marketplace gallery image in order to create an Oracle 12c database. Once the server is deployed, you will connect via SSH in order to configure the Oracle database.
If you don't have an Azure subscription, create a free account before you begin.
If you choose to install and use the CLI locally, this quickstart requires that you are running the Azure CLI version 2.0.4 or later. Run az --version
to find the version. If you need to install or upgrade, see Install Azure CLI.
Create a resource group
Create a resource group with the az group create command. An Azure resource group is a logical container into which Azure resources are deployed and managed.
The following example creates a resource group named myResourceGroup in the eastus location.
az group create --name myResourceGroup --location eastus
Create virtual machine
To create a virtual machine (VM), use the az vm create command.
The following example creates a VM named myVM
. It also creates SSH keys, if they do not already exist in a default key location. To use a specific set of keys, use the --ssh-key-value
option.
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image Oracle:Oracle-Database-Ee:12.1.0.2:latest \
--size Standard_DS2_v2 \
--admin-username azureuser \
--generate-ssh-keys
After you create the VM, Azure CLI displays information similar to the following example. Note the value for publicIpAddress
. You use this address to access the VM.
{
"fqdns": "",
"id": "/subscriptions/{snip}/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"
}
Connect to the VM
To create an SSH session with the VM, use the following command. Replace the IP address with the publicIpAddress
value for your VM.
ssh azureuser@<publicIpAddress>
Create the database
The Oracle software is already installed on the Marketplace image. Create a sample database as follows.
Switch to the oracle user, then start the Oracle listener:
$ sudo -su oracle $ lsnrctl start
The output is similar to the following:
Copyright (c) 1991, 2014, Oracle. All rights reserved. Starting /u01/app/oracle/product/12.1.0/dbhome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 12.1.0.2.0 - Production Log messages written to /u01/app/oracle/diag/tnslsnr/myVM/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myVM.twltkue3xvsujaz1bvlrhfuiwf.dx.internal.cloudapp.net)(PORT=1521))) Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production Start Date 23-MAR-2017 15:32:08 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/myVM/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myVM.twltkue3xvsujaz1bvlrhfuiwf.dx.internal.cloudapp.net)(PORT=1521))) The listener supports no services The command completed successfully
Create a data directory for the Oracle data files
mkdir /u01/app/oracle/oradata
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 \ -datafileDestination "/u01/app/oracle/oradata/" \ -ignorePreReqs
It takes a few minutes to create the database.
You will see output that looks similar to the following:
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.
Set Oracle variables
Before you connect, you need to set two environment variables: ORACLE_HOME and ORACLE_SID.
ORACLE_SID=cdb1; export ORACLE_SID
You also can add ORACLE_HOME and ORACLE_SID variables to the .bashrc file. This would save the environment variables for future sign-ins. Confirm the following statements have been added to the
~/.bashrc
file using editor of your choice.# Add ORACLE_SID. export ORACLE_SID=cdb1
Oracle EM Express connectivity
For a GUI management tool that you can use to explore the database, set up Oracle EM Express. To connect to Oracle EM Express, you must first set up the port in Oracle.
Connect to your database using sqlplus:
sqlplus / as sysdba
Once connected, set the port 5502 for EM Express
exec DBMS_XDB_CONFIG.SETHTTPSPORT(5502);
Open the container PDB1 if not already opened, but first check the status:
select con_id, name, open_mode from v$pdbs;
The output is similar to the following:
CON_ID NAME OPEN_MODE ----------- ------------------------- ---------- 2 PDB$SEED READ ONLY 3 PDB1 MOUNT
If the OPEN_MODE for
PDB1
is not READ WRITE, then run the followings commands to open PDB1:alter session set container=pdb1; alter database open;
You need to type quit
to end the sqlplus session and type exit
to logout of the oracle user.
Automate database startup and shutdown
The Oracle database by default doesn't automatically start when you restart the VM. To set up the Oracle database to start automatically, first sign in as root. Then, create and update some system files.
Sign on as root
sudo su -
Using your favorite editor, edit the file
/etc/oratab
and change the defaultN
toY
:cdb1:/u01/app/oracle/product/12.1.0/dbhome_1:Y
Create a file named
/etc/init.d/dbora
and paste the following contents:#!/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/12.1.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
Change permissions on files with chmod as follows:
chgrp dba /etc/init.d/dbora chmod 750 /etc/init.d/dbora
Create symbolic links for startup and shutdown as follows:
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
To test your changes, restart the VM:
reboot
Open ports for connectivity
The final task is to configure some external endpoints. To set up the Azure Network Security Group that protects the VM, first exit your SSH session in the VM (should have been kicked out of SSH when rebooting in previous step).
To open the endpoint that you use to access the Oracle database remotely, create a Network Security Group rule with az network nsg rule create as follows:
az network nsg rule create \ --resource-group myResourceGroup\ --nsg-name myVmNSG \ --name allow-oracle \ --protocol tcp \ --priority 1001 \ --destination-port-range 1521
To open the endpoint that you use to access Oracle EM Express remotely, create a Network Security Group rule with az network nsg rule create as follows:
az network nsg rule create \ --resource-group myResourceGroup \ --nsg-name myVmNSG \ --name allow-oracle-EM \ --protocol tcp \ --priority 1002 \ --destination-port-range 5502
If needed, obtain the public IP address of your VM again with az network public-ip show as follows:
az network public-ip show \ --resource-group myResourceGroup \ --name myVMPublicIP \ --query [ipAddress] \ --output tsv
Connect EM Express from your browser. Make sure your browser is compatible with EM Express (Flash install is required):
https://<VM ip address or hostname>:5502/em
You can log in by using the SYS account, and check the as sysdba checkbox. Use the password OraPasswd1 that you set during installation.
Clean up resources
Once you have finished exploring your first Oracle database on Azure and the VM is no longer needed, you can use the az group delete command to remove the resource group, VM, and all related resources.
az group delete --name myResourceGroup
Next steps
Learn about other Oracle solutions on Azure.
Try the Installing and Configuring Oracle Automated Storage Management tutorial.