Step-by-Step Oracle deployment procedures on Azure VM and Azure NetApp Files
This section describes the deployment procedures of deploying Oracle RDS custom database with FSx storage.
Deploy an Azure VM with ANF for Oracle via Azure portal console
If you are new to Azure, you first need to set up an Azure account environment. This includes signing up your organization to use Azure Active Directory. The following section is a summary of these steps. For details, see the linked Azure-specific documentation.
Create and consume Azure resources
After your Azure environment is set up and an account is created and associated with a subscription, you can log into Azure portal with the account to create the necessary resources to run Oracle.
1. Create a virtual network or VNet
Azure Virtual Network (VNet) is the fundamental building block for your private network in Azure. VNet enables many types of Azure resources, such as Azure Virtual Machines (VMs), to securely communicate with each other, the internet, and on-premises networks. Before provisioning an Azure VM, a VNet (where a VM is deployed) must first be configured.
See Create a virtual network using the Azure portal to create a VNet.
2. Create a NetApp storage account and capacity pool for ANF
In this deployment scenario, an Azure VM OS is provisioned using regular Azure storage, but ANF volumes are provisioned to run Oracle database via NFS. First, you need to create a NetApp storage account and a capacity pool to host the storage volumes.
See Set up Azure NetApp Files and create an NFS volume to set up an ANF capacity pool.
3. Provision Azure VM for Oracle
Based on your workload, determine what type of Azure VM you need and the size of the VM vCPU and RAM to deploy for Oracle. Then, from the Azure console, click the VM icon to launch the VM deployment workflow.
-
From the Azure VM page, click Create and then choose Azure virtual machine.
-
Choose the subscription ID for the deployment, and then choose the resource group, region, host name, VM image, size, and authentication method. Go to the Disk page.
-
Choose premium SSD for OS local redundancy and leave the data disk blank because the data disks are mounted from ANF storage. Go to the Networking page.
-
Choose the VNet and subnet. Allocate a public IP for external VM access. Then go to the Management page.
-
Keep all defaults for Management and move to the Advanced page.
-
Keep all defaults for the Advanced page unless you need to customize a VM after deployment with custom scripts. Then go to Tags page.
-
Add a tag for the VM if desired. Then, go to the Review + create page.
-
The deployment workflow runs a validation on the configuration, and, if the validation passes, click Create to create the VM.
4. Provision ANF database volumes for Oracle
You must create three NFS volumes for an ANF capacity pool for the Oracle binary, data, and log volumes respectively.
-
From the Azure console, under the list of Azure services, click Azure NetApp Files to open a volume creation workflow. If you have more than one ANF storage account, click the account that you would like to provision volumes from.
-
Under your NetApp storage account, click Volumes, and then Add volume to create new Oracle volumes.
-
As a good practice, identify Oracle volumes with the VM hostname as a prefix and then followed by the mount point on the host, such as u01 for Oracle binary, u02 for Oracle data, and u03 for Oracle log. Choose the same VNet for the volume as for the VM. Click Next: Protocol>.
-
Choose the NFS protocol, add the Oracle host IP address to the allowed client, and remove the default policy that allows all IP addresses 0.0.0.0/0. Then click Next: Tags>.
-
Add a volume tag if desired. Then click Review + Create>.
-
If the validation passes, click Create to create the volume.
Install and configure Oracle on Azure VM with ANF
The NetApp solutions team has created many Ansible-based automation toolkits to help you deploy Oracle in Azure smoothly. Follow these steps to deploy Oracle on an Azure VM.
Set up an Ansible controller
If you have not set up an Ansible controller, see NetApp Solution Automation, which has detailed instructions on how to setup an Ansible controller.
Obtain Oracle deployment automation toolkit
Clone a copy of the Oracle deployment toolkit in your home directory under the user ID that you use to log into the Ansible controller.
git clone https://github.com/NetApp-Automation/na_oracle19c_deploy.git
Execute the toolkit with your configuration
See the CLI deployment Oracle 19c Database to execute the playbook with the CLI. You can ignore the ONTAP portion of the variables configuration in the global VARS file when you create database volumes from the Azure console rather than the CLI.
The toolkit default deploys Oracle 19c with RU 19.8. It can be easily adapted for any other patch level with minor default configuration changes. Also default seed-database active log files are deployed into the data volume. If you need active log files on the log volume, it should be relocated after initial deployment. Reach out to the NetApp Solution team for help if needed. |
Set up AzAcSnap backup tool for app-consistent snapshots for Oracle
The Azure Application-Consistent Snapshot tool (AzAcSnap) is a command-line tool that enables data protection for third-party databases by handling all the orchestration required to put them into an application-consistent state before taking a storage snapshot. It then returns these databases to an operational state. NetApp recommends installing the tool on the database server host. See the following installation and configuration procedures.
Install AzAcSnap tool
-
Get the most recent version of the the AzArcSnap Installer.
-
Copy the downloaded self-installer to the target system.
-
Execute the self-installer as the root user with the default installation option. If necessary, make the file executable using the
chmod +x *.run
command../azacsnap_installer_v5.0.run -I
Configure Oracle connectivity
The snapshot tools communicate with the Oracle database and need a database user with appropriate permissions to enable or disable backup mode.
1. Set up AzAcSnap database user
The following examples show the setup of the Oracle database user and the use of sqlplus for communication to the Oracle database. The example commands set up a user (AZACSNAP) in the Oracle database and change the IP address, usernames, and passwords as appropriate.
-
From the Oracle database installation, launch sqlplus to log into the database.
su – oracle sqlplus / AS SYSDBA
-
Create the user.
CREATE USER azacsnap IDENTIFIED BY password;
-
Grant the user permissions. This example sets the permission for the AZACSNAP user to enable putting the database into backup mode.
GRANT CREATE SESSION TO azacsnap; GRANT SYSBACKUP TO azacsnap;
-
Change the default user's password expiration to unlimited.
ALTER PROFILE default LIMIT PASSWORD_LIFE_TIME unlimited;
-
Validate azacsnap connectivity for the database.
connect azacsnap/password quit;
2. Configure Linux-user azacsnap for DB access with Oracle wallet
The AzAcSnap default installation creates an azacsnap OS user. It's Bash shell environment must be configured for Oracle database access with the password stored in an Oracle wallet.
-
As root user, run the
cat /etc/oratab
command to identify the ORACLE_HOME and ORACLE_SID variables on the host.cat /etc/oratab
-
Add ORACLE_HOME, ORACLE_SID, TNS_ADMIN, and PATH variables to the azacsnap user bash profile. Change the variables as needed.
echo "export ORACLE_SID=ORATEST" >> /home/azacsnap/.bash_profile echo "export ORACLE_HOME=/u01/app/oracle/product/19800/ORATST" >> /home/azacsnap/.bash_profile echo "export TNS_ADMIN=/home/azacsnap" >> /home/azacsnap/.bash_profile echo "export PATH=\$PATH:\$ORACLE_HOME/bin" >> /home/azacsnap/.bash_profile
-
As the Linux user azacsnap, create the wallet. You are prompted for the wallet password.
sudo su - azacsnap mkstore -wrl $TNS_ADMIN/.oracle_wallet/ -create
-
Add the connect string credentials to the Oracle Wallet. In the following example command, AZACSNAP is the ConnectString to be used by AzAcSnap, azacsnap is the Oracle Database User, and AzPasswd1 is the Oracle User's database password. You are again prompted for the wallet password.
mkstore -wrl $TNS_ADMIN/.oracle_wallet/ -createCredential AZACSNAP azacsnap AzPasswd1
-
Create the
tnsnames-ora
file. In the following example command, HOST should be set to the IP address of the Oracle Database and the Server SID should be set to the Oracle Database SID.echo "# Connection string AZACSNAP=\"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.30.137.142)(PORT=1521))(CONNECT_DATA=(SID=ORATST)))\" " > $TNS_ADMIN/tnsnames.ora
-
Create the
sqlnet.ora
file.echo "SQLNET.WALLET_OVERRIDE = TRUE WALLET_LOCATION=( SOURCE=(METHOD=FILE) (METHOD_DATA=(DIRECTORY=\$TNS_ADMIN/.oracle_wallet)) ) " > $TNS_ADMIN/sqlnet.ora
-
Test Oracle access using the wallet.
sqlplus /@AZACSNAP as SYSBACKUP
The expected output from the command:
[azacsnap@acao-ora01 ~]$ sqlplus /@AZACSNAP as SYSBACKUP SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 8 18:02:07 2022 Version 19.8.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.8.0.0.0 SQL>
Configure ANF connectivity
This section explains how to enable communication with Azure NetApp Files (with a VM).
-
Within an Azure Cloud Shell session, make sure that you are logged into the subscription that you want to be associated with the service principal by default.
az account show
-
If the subscription isn't correct, use the following command:
az account set -s <subscription name or id>
-
Create a service principal using the Azure CLI as in the following example:
az ad sp create-for-rbac --name "AzAcSnap" --role Contributor --scopes /subscriptions/{subscription-id} --sdk-auth
The expected output:
{ "clientId": "00aa000a-aaaa-0000-00a0-00aa000aaa0a", "clientSecret": "00aa000a-aaaa-0000-00a0-00aa000aaa0a", "subscriptionId": "00aa000a-aaaa-0000-00a0-00aa000aaa0a", "tenantId": "00aa000a-aaaa-0000-00a0-00aa000aaa0a", "activeDirectoryEndpointUrl": "https://login.microsoftonline.com", "resourceManagerEndpointUrl": "https://management.azure.com/", "activeDirectoryGraphResourceId": "https://graph.windows.net/", "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/", "galleryEndpointUrl": "https://gallery.azure.com/", "managementEndpointUrl": "https://management.core.windows.net/" }
-
Cut and paste the output content into a file called
oracle.json
stored in the Linux user azacsnap user bin directory and secure the file with the appropriate system permissions.
Make sure the format of the JSON file is exactly as described above, especially with the URLs enclosed in double quotes ("). |
Complete the setup of AzAcSnap tool
Follow these steps to configure and test the snapshot tools. After successful testing, you can perform the first database-consistent storage snapshot.
-
Change into the snapshot user account.
su - azacsnap
-
Change the location of commands.
cd /home/azacsnap/bin/
-
Configure a storage backup detail file. This creates an
azacsnap.json
configuration file.azacsnap -c configure –-configuration new
The expected output with three Oracle volumes:
[azacsnap@acao-ora01 bin]$ azacsnap -c configure --configuration new Building new config file Add comment to config file (blank entry to exit adding comments): Oracle snapshot bkup Add comment to config file (blank entry to exit adding comments): Enter the database type to add, 'hana', 'oracle', or 'exit' (for no database): oracle === Add Oracle Database details === Oracle Database SID (e.g. CDB1): ORATST Database Server's Address (hostname or IP address): 172.30.137.142 Oracle connect string (e.g. /@AZACSNAP): /@AZACSNAP === Azure NetApp Files Storage details === Are you using Azure NetApp Files for the database? (y/n) [n]: y --- DATA Volumes have the Application put into a consistent state before they are snapshot --- Add Azure NetApp Files resource to DATA Volume section of Database configuration? (y/n) [n]: y Full Azure NetApp Files Storage Volume Resource ID (e.g. /subscriptions/.../resourceGroups/.../providers/Microsoft.NetApp/netAppAccounts/.../capacityPools/Premium/volumes/...): /subscriptions/0efa2dfb-917c-4497-b56a-b3f4eadb8111/resourceGroups/ANFAVSRG/providers/Microsoft.NetApp/netAppAccounts/ANFAVSAcct/capacityPools/CapPool/volumes/acao-ora01-u01 Service Principal Authentication filename or Azure Key Vault Resource ID (e.g. auth-file.json or https://...): oracle.json Add Azure NetApp Files resource to DATA Volume section of Database configuration? (y/n) [n]: y Full Azure NetApp Files Storage Volume Resource ID (e.g. /subscriptions/.../resourceGroups/.../providers/Microsoft.NetApp/netAppAccounts/.../capacityPools/Premium/volumes/...): /subscriptions/0efa2dfb-917c-4497-b56a-b3f4eadb8111/resourceGroups/ANFAVSRG/providers/Microsoft.NetApp/netAppAccounts/ANFAVSAcct/capacityPools/CapPool/volumes/acao-ora01-u02 Service Principal Authentication filename or Azure Key Vault Resource ID (e.g. auth-file.json or https://...): oracle.json Add Azure NetApp Files resource to DATA Volume section of Database configuration? (y/n) [n]: n --- OTHER Volumes are snapshot immediately without preparing any application for snapshot --- Add Azure NetApp Files resource to OTHER Volume section of Database configuration? (y/n) [n]: y Full Azure NetApp Files Storage Volume Resource ID (e.g. /subscriptions/.../resourceGroups/.../providers/Microsoft.NetApp/netAppAccounts/.../capacityPools/Premium/volumes/...): /subscriptions/0efa2dfb-917c-4497-b56a-b3f4eadb8111/resourceGroups/ANFAVSRG/providers/Microsoft.NetApp/netAppAccounts/ANFAVSAcct/capacityPools/CapPool/volumes/acao-ora01-u03 Service Principal Authentication filename or Azure Key Vault Resource ID (e.g. auth-file.json or https://...): oracle.json Add Azure NetApp Files resource to OTHER Volume section of Database configuration? (y/n) [n]: n === Azure Managed Disk details === Are you using Azure Managed Disks for the database? (y/n) [n]: n === Azure Large Instance (Bare Metal) Storage details === Are you using Azure Large Instance (Bare Metal) for the database? (y/n) [n]: n Enter the database type to add, 'hana', 'oracle', or 'exit' (for no database): exit Editing configuration complete, writing output to 'azacsnap.json'.
-
As the azacsnap Linux user, run the azacsnap test command for an Oracle backup.
cd ~/bin azacsnap -c test --test oracle --configfile azacsnap.json
The expected output:
[azacsnap@acao-ora01 bin]$ azacsnap -c test --test oracle --configfile azacsnap.json BEGIN : Test process started for 'oracle' BEGIN : Oracle DB tests PASSED: Successful connectivity to Oracle DB version 1908000000 END : Test process complete for 'oracle' [azacsnap@acao-ora01 bin]$
-
Run your first snapshot backup.
azacsnap -c backup –-volume data --prefix ora_test --retention=1