SAP Netweaver 7.5 with MaxDB 7.9 on Azure using Azure NetApp Files (ANF)

Posted by

This post has been republished via RSS; it originally appeared at: Microsoft Tech Community - Latest Blogs - .

SAP Netweaver 7.5 with MaxDB 7.9 on Azure using Azure NetApp Files (ANF)

Overview

 

This article describes the setup of SAP ERP 7.5 with MaxDB 7.9. In addition, we will show how to use azacsnap to create application consistent snapshots. This article is written for an audience which are familiar with Azure, Linux and SAP Basis. Since the login mechanism changed in version 7.7 we can only support the MaxDB 7.9 with all the automation scripts explained here iin the documentation.

 

SAP MaxDB: The SAP Database - Home

SAP MaxDB - MaxDB - Support Wiki

SAP MaxDB Directory Structure - MaxDB - Support Wiki

 

System Configuration

This illustration is a short overview of the system setup.

  

RalfKlahr_0-1692629850450.png

 

Create the Environment

The VM

SubscriptionSAP             your subscribtion
Resource group          (new) ralfMaxDB
Virtual machine name    ralfmaxdb01
Region                  East US
Availability options    Availability zone
Availability zone        1
Security type           Standard
Image                   SUSE Enterprise Linux 15 SP3 +Patching - Gen2
VM architecture         x64
Size               Standard E16-8ads v5 (8 vcpus, 128 GiB memory)
Authentication type      Password
Username                admin01

Create the delegated network for ANF

RalfKlahr_1-1692630737792.png

 

Create the Volume Structure

Download the sources from the SAP Marketplace

The DB Export

RalfKlahr_2-1692630779473.png

 

The SWPM

RalfKlahr_3-1692630802427.png

 

The MaxDB

RalfKlahr_4-1692630827578.png

RalfKlahr_5-1692630849794.png

The SAPCAR

RalfKlahr_6-1692630882897.png

 

The Kernel

RalfKlahr_7-1692630924917.png

RalfKlahr_8-1692630947955.png

RalfKlahr_9-1692630972464.png

RalfKlahr_10-1692630995609.png

The IGS

RalfKlahr_11-1692631035879.png

RalfKlahr_12-1692631059181.png

 

Finally, the HOST Agent.

RalfKlahr_13-1692631089336.png

 

Volume design on ANF

Create the volume structure on ANF. The size of each volume depends on a proper capacity and performance sizing.

 

Mount the volumes and create the directories.

 

Modify the idmapd to align the NFSv4 domain.

vi /etc/idmapd.conf
 # Example
 [General]
 Domain = defaultv4iddomain.com
 [Mapping]
 Nobody-User = nobody
 Nobody-Group = nobody

 

update the system

zypper up 

Install the RPM’s regarding the installation manual

zypper in motif libXtst-devel libXp-devel libX11-devel libSM-devel libICE-devel
 zypper in glibc-32bit sapconf

 

Maintain the sysctl.conf

vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 300000
net.ipv4.tcp_rmem = 4096 131072 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
net.ipv4.tcp_max_syn_backlog = 16348
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_syn_retries = 8
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tw_recycle = 1

 

reboot the system to apply all the changes and reload the kernel after the update.

reboot

Check that sapconf is running and that it is enabled.

 

sapconf_check
This is sapconf_check v1.0.
It verifies if sapconf is set up correctly and will give advice to do so.
Please keep in mind:
 - This tool does not check, if the tuning itself works correctly.
 - Follow the hints from top to down to minimize side effects.
Checking sapconf
================
[ OK ] sapconf package has version 5.0.5
[ OK ] sapconf.service is active
[ OK ] sapconf.service is enabled
Sapconf is set up correctly.

create the group ID for your SAP systems (should be the same for all SAP systems)

groupadd sapsys -g 79 
groupadd sdba -g 1001 

 

creating the DB users to avoid issues during the DB installation

useradd c11adm -g sapsys -c "SAP System Administrator" -u 1001 -s /bin/csh -d /home/c11adm
useradd sapadm -g sapsys -c "SAP System Administrator" -u 1002 -s /bin/false -d /home/sapadm
useradd sdb -g sdba -c "Database Software Owner" -u 1003 -s /bin/csh -d /home/sdb
useradd sqdc11 -g sapsys -c "Owner of Database Instance C11" -u 1004 -s /bin/csh -d /home/sqdc11
 passwd c11adm
passwd sapadm
passwd sdb
passwd sqdc11

 

MaxDB Volume design for non XXL installations

As usual, create one shared volume for the Application Server part , a MaxDB volume for the database specific directories, data and log volume and the backup volume ideally on a different storage endpoint.

In this PoC we have all storage endpoints on one IP, which is okay for small and medium installations.

RalfKlahr_14-1692631649945.png

Get the FQDN name of the VM

hostname -f

ralfmaxdb01.lgbsmidv5lrurp4qqyuwbceesh.bx.internal.cloudapp.net

 

maintain the /etc/hosts

vi /etc/hosts
127.0.0.1       localhost
#
10.6.0.4    ralfmaxdb01.lgbsmidv5lrurp4qqyuwbceesh.bx.internal.cloudapp.net   ralfmaxdb01
10.6.1.4    anf01

Create the SAP App server structure

mount -o vers=4.1  anf01:/C11usrsap  /mnt
mkdir -p /mnt/sapmnt /mnt/usr_sap
mkdir -p /usr/sap/C11 /sapmnt
umount /mnt

 

Create the MaxDB “installation” structure

mount -t nfs -o vers=4.1 anf01:/C11MaxDB /mnt
mkdir -p /sapdb
mkdir -p /mnt/C11

 

Create the data structure

mkdir -p /sapdb/C11/sapdata
mkdir -p /mnt/C11/sapdata

 

Create the log structure

mkdir -p /sapdb/C11/saplog
mkdir -p /mnt/C11/saplog

 

Create the backup structure

mkdir -p /mnt/C11/backup
mount -t nfs -o vers=4.1 anf01:/C11backup /mnt/C11/backup
mkdir -p /sapdb/C11/backup/data /sapdb/C11/backup/log
mkdir -p /mnt/C11/backup/data /mnt/C11/backup/log
umount /mnt/C11/backup
umount /mnt

 

Create the fstab

vi /etc/fstab
...

/dev/sdc    /Software    xfs  defaults   0   0
anf01:/C11usrsap/usr_sap  /usr/sap    nfs  rw,hard,vers=4.1,nconnect=8,rsize=262144,wsize=262144,noatime,lock  0  0
anf01:/C11usrsap/sapmnt  /sapmnt    nfs  rw,hard,vers=4.1,nconnect=8,rsize=262144,wsize=262144,noatime,lock  0  0
anf01:/C11MaxDB  /sapdb  nfs  rw,hard,timeo=600,vers=4.1,nconnect=8,rsize=262144,wsize=262144,noatime,lock  0  0
anf01:/C11data  /sapdb/C11/sapdata    nfs  rw,hard,vers=4.1,nconnect=8,rsize=262144,wsize=262144,noatime,lock  0  0
anf01:/C11log  /sapdb/C11/saplog    nfs  rw,hard,vers=4.1,nconnect=8,rsize=262144,wsize=262144,noatime,lock  0  0
anf01:/C11backup/data /sapdb/C11/backup/data  nfs  rw,hard,vers=4.1,nconnect=8,rsize=262144,wsize=262144,noatime,lock  0  0
anf01:/C11backup/log  /sapdb/C11/backup/log   nfs  rw,hard,vers=4.1,nconnect=8,rsize=262144,wsize=262144,noatime,lock  0  0

 

mount -a
chown -R sdb:sdba /sapdb

 

Create the Software directory

Create a /Software directory where you store the SAP archives.

 

Create the Software Disk

lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   30G  0 disk
├─sda1   8:1    0    2M  0 part
├─sda2   8:2    0  512M  0 part /boot/efi
├─sda3   8:3    0    1G  0 part /boot
└─sda4   8:4    0 28.5G  0 part /
sdb      8:16   0  600G  0 disk
└─sdb1   8:17   0  600G  0 part
sdc      8:32   0    1T  0 disk

 

mkfs -t xfs /dev/sdc
mkdir /Software

 

ll /Software
drwxrwxrwx 3 root root     263 Mar  6 20:06 Export
drwxrwxrwx 2 root root     173 Mar  6 19:51 Kernel
drwxrwxrwx 2 root root      60 Mar  6 19:51 MaxDB
-rwxrwxrwx 1 root root 4507168 Mar  6 15:27 SAPCAR_1115-70006178.EXE
drwxrwxrwx 2 root root      22 Mar  6 19:51 SWPM

 

copy the SAPCAR into the PATH

mv SAPCAR_1115-70006178.EXE /usr/bin/SAPCAR

 

ASCS Installation

Extract the SWPM archive and start the SAP Installation

cd /Software/SWPM
SAPCAR -xf SWPM10SP37_0-20009701.SAR
SAPCAR: processing archive SWPM10SP37_0-20009701.SAR (version 2.01)
SAPCAR: 837 file(s) extracted

 

set the root password on the VM (required for the SAP installation)

sudo su –
passwd
Changing password for user root.
New password: *********
Retype new password: *******
passwd: all authentication tokens updated successfully.

 

  

Start the SWPM

/Software/SWPM # ./sapinst

 

Open your browser with

https://10.6.0.4:4237/sapinst/docs/index.html

and select advanced

RalfKlahr_15-1692632188553.png

 

Select continue.

Login as root

RalfKlahr_16-1692632202036.png

RalfKlahr_17-1692632229251.png

RalfKlahr_18-1692632249652.png

RalfKlahr_0-1692632584283.png

RalfKlahr_1-1692632603205.png

RalfKlahr_2-1692632626118.png

RalfKlahr_3-1692632646546.png

 

MaxDB Installation

After the ASCS is installed we now install the MaxDB and load the content into it.

 

ralfmaxdb01:/Software/SWPM # ./sapinst
cd /Software/MaxDB
mkdir DB Patch
mv unzip 51052559_8.ZIP DB
mv 51054410_2.ZIP Patch/
cd DB
unzip 51052559_8.ZIP

RalfKlahr_4-1692632712823.png

RalfKlahr_5-1692632735903.png

RalfKlahr_6-1692632756241.png

RalfKlahr_7-1692632795449.png

RalfKlahr_8-1692632814103.png

RalfKlahr_9-1692632836531.png

RalfKlahr_10-1692632855252.png

RalfKlahr_0-1692632942244.png

RalfKlahr_1-1692632962343.png

RalfKlahr_2-1692632985734.png

RalfKlahr_3-1692633003279.png

RalfKlahr_4-1692633026601.png

RalfKlahr_5-1692633047240.png

RalfKlahr_6-1692633069947.png

 

Primary App Server installation

./sapinst

RalfKlahr_7-1692633110699.png

RalfKlahr_8-1692633130103.png

RalfKlahr_9-1692633148782.png

RalfKlahr_10-1692633163634.png

 

Install the MaxDB Database Studio

https://help.sap.com/docs/link-disclaimer?site=https%3A%2F%2Flaunchpad.support.sap.com%2F%23%2Fsoftwarecenter

 

Installing or Upgrading Database Studio for SAP MaxDB | SAP Help Portal

RalfKlahr_11-1692633203389.png

Download SAPCAR for Windows and extract the MAXDBSTUDIO.sar archive in a separate folder.

Then call the sdbsetup.exe to install the MaxDB Studio

Backup the Database

HowTo - SAP MaxDB Backup with Database Manager CLI - MaxDB - Support Wiki

Before you can create snapshot based backups we need to take a full database backup. Then we can switch the logmode

su – c11adm
dbmcli -d C11 -u superdba,<pwd> user_getall
OK
control
superdba
dbmcli -d C11 -u superdba,<pwd> user_get superdba
OK
SERVERRIGHTS=UserMgm,InstallMgm,SystemCmd,DBFileRead,AccessUtility,Recovery,Backup,ParamFull,ParamCheckWrite,ParamRead,AccessSQL,ExecLoad,LoadSysTab,DBStop,DBStart,DBInfoRead,SharedMemoryMgm,SchedulerMgm,Scheduling,EvtDispMgm,EvtDisp
GUIRIGHTS=
SECONDPASSWORD=NO
DISABLED=NO
COMMENT=
USERTYPE=DBA
EXTERNAL_IDS=
MASTER_PW_ALTER_TIME=2023-03-07 18:51:54

Create an xuser key to be able password less access to the DB.

xuser set -U ADMIN -d C11 -u superdba,<pwd>

 

List the xuser entries

xuser -U ADMIN list
----------------------------------------------------------
XUSER Entry  5
--------------
Key           :ADMIN
Username      :SUPERDBA
UsernameUCS2  :S.U.P.E.R.D.B.A. . .. . . . . . . . . . .
Password      :?????????
PasswordUCS2  :?????????
PasswordUTF8  :?????????
Dbname        :C11
Nodename      :<unspecified>
Sqlmode       :<unspecified>
Cachelimit    :-1
Timeout       :-1
Isolation     :-1
Charset       :<unspecified>

Login as SUPERDBA using the XUSER key

dbmcli -U ADMIN
dbmcli on C11>

 

Create template d1 for data backup:

dbmcli on C11> backup_template_create d1 to FILE /sapdb/C11/backup/data/DAT0001 CONTENT DATA

 

Create template l1 for log backup:

dbmcli on DB1> backup_template_create l1 to FILE /sapdb/C11/backup/log/LOG0001 CONTENT LOG

 

Starting a backup

db_connect
backup_start d1

check the data backup location

ls -lh /sapdb/C11/backup/data/
-rw-rw---- 1 sdb sdba 24G Mar  7 19:39 DAT0001

 

Checking a backup after completion

medium_label d1
OK
Returncode              0
Date                    20230307
Time                    00193608
Server                  ralfmaxdb01
Database                C11
Kernel Version          Kernel    7.9.09   Build 005-123-259-005
Pages Transferred       0
Pages Left              0
Volumes
Medianame
Location                /sapdb/C11/backup/data/DAT0001
Errortext
Label                   DAT_000000001
Is Consistent           true
First LOG Page          6939
Last LOG Page
DB Stamp 1 Date         20230307
DB Stamp 1 Time         00193608
Page Count              3044252
Devices Used            1
Database ID             ralfmaxdb01:C11_20230307_193608
Converter Page Count    1681

Short Presentation Title (sap.com)

As of SAP MaxDB Version 7.8 you can use external filer snapshot in combination with SAP MaxDB snapshot to create a consistent backup in online database mode.

 

As of version 7.7 you can freeze the data area of a SAP MaxDB using internal database snapshots.

A snapshot can be created in the ONLINE operational state.

As of SAP MaxDB version 7.8 you can perform a complete data backup with an external file system snapshot in the operational state ONLINE in combination with a SAP MaxDB Database Snapshot.

First a SAP MaxDB (internal) Snapshot is created followed by the external file snapshot.

While this backup procedure the database is in online mode and the users can work with the application. Moreover, this procedure guarantees that this external file system backup is included in the backup history.

The Log area is never part of this backup procedure.

RalfKlahr_0-1692633668909.png

In response to this command, the system displays the following output:

OK

Returncode -8020

...

Max Used Data Page 0

 

The return code -8020 together with the number of maximum used data pages (Max Used Data Page), in this case 0, displays in this case that the complete data backup was successfully started.

 

Create the Snapshot

backup_template_create External_Snapshot TO EXTERNAL SNAPSHOT
db_connect
backup_start External_Snapshot
OK
Returncode              -8020
Date                    20230307
Time                    00201047
Server                  ralfmaxdb01
Database                C11
Kernel Version          Kernel    7.9.09   Build 005-123-259-005
Pages Transferred       0
Pages Left              0
Volumes
Medianame               External_Snapshot
Location
Errortext
Label                   DAT_000000002
Is Consistent           true
First LOG Page          6940
Last LOG Page
DB Stamp 1 Date         20230307
DB Stamp 1 Time         00201047
DB Stamp 2 Date
DB Stamp 2 Time
Page Count
Devices Used            1
Database ID             ralfmaxdb01:C11_20230307_193608
Max Used Data Page      0
Converter Page Count
---

 

take the snapshot with azacsnap on ANF than finish the backup

backup_finish External_Snapshot ExternalBackupID 202303071508 

(backup ID e.g. date and time)

backup_finish External_Snapshot ExternalBackupID 202303071508
OK
Returncode              0
Date                    20230307
Time                    00201047
Server                  ralfmaxdb01
Database                C11
Kernel Version          Kernel    7.9.09   Build 005-123-259-005
Pages Transferred       0
Pages Left              0
Volumes
Medianame               External_Snapshot
Location
Errortext
Label                   DAT_000000002
Is Consistent           true
First LOG Page          6940
Last LOG Page
DB Stamp 1 Date         20230307
DB Stamp 1 Time         00201047
DB Stamp 2 Date
DB Stamp 2 Time
Page Count
Devices Used            1
Database ID             ralfmaxdb01:C11_20230307_193608
Max Used Data Page      0
Converter Page Count

 

Check the logfile

tail -f ./sapdb/C11/data/wrk/C11/dbm.prt
          23611 INF  7 DBMKnl   Data: DBSTAMP1 DATE..... 20230307
          23611 INF  7 DBMKnl   Data: DBSTAMP1 TIME..... 00201047
          23611 INF  7 DBMKnl   Data: DBSTAMP2 DATE..... (null)
          23611 INF  7 DBMKnl   Data: DBSTAMP2 TIME..... (null)
          23611 INF  7 DBMKnl   Data: BD PAGE COUNT..... (null)
          23611 INF  7 DBMKnl   Data: TAPEDEVICES USED.. 1
          23611 INF  7 DBMKnl   Data: DB_IDENT.. ralfmaxdb01:C11_20230307_193608
          23611 INF  7 DBMKnl   Data: MAX USED DATA PNO. 0
          23611 INF  7 DBMKnl   Data: CONV PAGE COUNT.. (null)
2023-03-07 20:17:46 23611 INF 419 DBMSrv   Command 'backup_finish' has ended with return code 0.

Restore using an Snapshot

HowTo - SAP MaxDB Recovery with Database Manager CLI - MaxDB - Support Wiki

RalfKlahr_1-1692633927047.png

Recovery tests

Crash the system by sending the sysrequest trigger b

echo b > /proc/sysrq-trigger

umount the data volume before we restore the snapshot

umount /sapdb/C11/sapdata

restore the SnapShot

RalfKlahr_2-1692633987211.png

Remount the volume and start the DB for the automated recovery

mount -a

 

go to Restore the database --> further down

 

Creating automated DB SnapShots

A MaxDB Snapshot must be created before taking a storage Snapshot. The database will be set into a consistent state by quiescing the database. The following steps show how to perform database backup by using a storage Snapshot copy.

 

Install the Azure CLI on Linux | Microsoft Docs (SLES)

 

Download the azacsnap tool

https://aka.ms/azacsnapinstaller

Get started with Azure Application Consistent Snapshot tool for Azure NetApp Files | Microsoft Learn

 

1612412 - SAP MaxDB: How does a database backup with external file system backups take place?

1928060 - Data backup and recovery with file system backup - SAP ONE Support Launchpad

2282054 - Background DBM server - SAP ONE Support Launchpad

 

SAP MaxDB | SAP Community

Configure azacsnap

Install the Azure Application Consistent Snapshot tool for Azure NetApp Files | Microsoft Learn

Azacsnap is supporting only HANA, DB2 and Oracle at the moment. It is, however, possible to take a snapshot from the data volume and use the new feature in the version 6 with pre and post automation.

Create the service principal for your subscription and install azacsnap – in the Azure Portal

Store the output in a file I used /tmp/auth.json

 

az ad sp create-for-rbac --name "AzAcSnap" --role Contributor --scopes /subscriptions/{subscription-id} --sdk-auth

 

You will get an output which looks similar to this:

{
  "clientId": "0815**4711-4**-a91f-d937*********1",
  "clientSecret": "d~_8Q~****Zk*****Y_********",
  "subscriptionId": "47110815-***-****-***-**********",
  "tenantId": "K47110815-****-4ecc-bda0-**********",
  "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/"
}

 

Create an auth.conf file and copy the content into this file

vi /tmp/auth.json

 

ls -l /Software/azacsnap*
admin01 users 16478438 Mar 8 15:30 /Software/azacsnap_7a_(1AA8343)_installer.run

 

Install azacsnap

cd /Software/
ralfmaxdb01:/Software # chmod 755 azacsnap_7a_\(1AA8343\)_installer.run
./azacsnap_7a_\(1AA8343\)_installer.run -I

 

Configure azacsnap

su - azacsnap
azacsnap -c configure --configuration=new
Building new config file
Add comment to config file (blank entry to exit adding comments): MaxDB
Add comment to config file (blank entry to exit adding comments):
Enter the database type to add, 'hana', 'oracle', 'db2', or 'exit' (to save and exit): hana
=== Add SAP HANA Database details ===
HANA SID (e.g. H80): C11
HANA Instance Number (e.g. 00): 00
HANA HDB User Store Key (e.g. `hdbuserstore List`): ADMIN
HANA Server's Address (hostname or IP address): 10.6.0.4
Do you need AzAcSnap to automatically disable/enable backint during snapshot? (y/n) [n]:
=== Azure NetApp Files Storage details ===
Are you using Azure NetApp Files for the database? (y/n) [n]: y
Enter new value for 'ANF Backup (none, renameOnly)' (current = 'none'): renameOnly
--- 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]:
--- 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/da/resourceGroups/ralfMaxDB/providers/Microsoft.NetApp/netAppAccounts/ralfmaxdbanf/capacityPools/ralfMaxDB/volumes/C11data
Service Principal Authentication filename or Azure Key Vault Resource ID (e.g. auth-file.json or https://...): auth.json
Add Azure NetApp Files resource to OTHER Volume section of Database configuration? (y/n) [n]:
=== Azure Managed Disk details ===
Are you using Azure Managed Disks for the database? (y/n) [n]:
=== Azure Large Instance (Bare Metal) Storage details ===
Are you using Azure Large Instance (Bare Metal) for the database? (y/n) [n]:
Enter the database type to add, 'hana', 'oracle', 'db2', or 'exit' (to save and exit): exit
Editing configuration complete, writing output to 'azacsnap.json'.

 

Test the storage connection, at this point we “only” can test the storage connection. The ASE backup-mode will be scheduled as “runbefore” and “runafter”.

azacsnap -c test --test storage –preview
PASSED: Storage test completed successfully for all 'other' Volumes
END   : Storage tests complete
END   : Test process complete for 'storage'

 

Create the .bashrc for the azacsnap user (compare the environment from the SIDadm user)

vi .bashrc
test -s ~/.alias && . ~/.alias || true
export PATH=$PATH:/sapdb/clients/C11/bin:/sapdb/programs/bin
export LD_LIBRARY_PATH=/usr/sap/C11/SYS/exe/run:/usr/sap/C11/SYS/exe/uc/linuxx86_64:/sapdb/clients/C11/lib
export LANG=C.UTF-8

 

create the user key

xuser set -U ADMIN -d C11 -u superdba,<pwd>

 

Test the dbmcli connection using the user-key

dbmcli -U ADMIN
dbmcli on C11>quit

Create the two Quiece and Unquiece scripts. (no Microsoft support) this is only an example.

vi cat MaxDBQuiece.sh
#!/bin/bash
SID="$1"
KEY="$2"
DATE="`date +%m-%d-%Y`"
LOGFILE="/tmp/MaxDM_Snapshot${SID}.log"
# MAX LOGFILE SIZE is 2 MB
MAXSIZE=2000000
# Get file size
FILESIZE=$(stat -c%s "$LOGFILE")
if [[ "$SID" == "" || "$KEY" == "" ]]; then
  echo "Usage: `basename $0` <SID> <USERSTOREKEY>"  exit 1
fi
sqlFile=$(mktemp)
cat > $sqlFile << EOF
background_server_start myserver
background_server_execute myserver db_connect
background_server_get_reply myserver -wait
background_server_execute myserver backup_start External_Snapshot DATA
background_server_get_reply myserver -wait
EOF
echo "Size of $LOGFILE = $FILESIZE bytes." >>$LOGFILE
if (( $FILESIZE > $MAXSIZE)); then
    echo "Moving the MaxDM Snapshot logfile to a backup" >>$LOGFILE
    mv $LOGFILE ${LOGFILE}-${DATE}
else
    echo "Logfilesize OK" >>$LOGFILE
fi
echo "`date` Creating MaxDB SnapShot" >>$LOGFILE
#rc=`dbmcli -U $KEY -i $sqlFile -b | head -1 | tr -d "[:blank:]"`
dbmcli -U $KEY -uUTL -i $sqlFile >>$LOGFILE
echo "Returncode = $?" >>$LOGFILE
rm $sqlFile

 

vi  MaxDBunQuiece.sh
#!/bin/bash
SID="$1"
KEY="$2"
DATE="`date +%m-%d-%Y`"
LOGFILE="/tmp/MaxDM_Snapshot${SID}.log"
# MAX LOGFILE SIZE is 2 MB
MAXSIZE=2000000
# Get file size
FILESIZE=$(stat -c%s "$LOGFILE")
if [[ "$SID" == "" || "$KEY" == "" ]]; then
  echo "Usage: `basename $0` <SID> <USERSTOREKEY>"  exit 1
fi
sqlFile=$(mktemp)
cat > $sqlFile << EOF
background_server_execute myserver backup_finish External_Snapshot ExternalBackupID ANFSnapShot
background_server_get_reply myserver -wait
background_server_exit myserver
EOF
echo "Size of $LOGFILE = $FILESIZE bytes." >>$LOGFILE
if (( $FILESIZE > $MAXSIZE)); then
    echo "Moving the MaxDM Snapshot logfile to a backup" >>$LOGFILE
    mv $LOGFILE ${LOGFILE}-${DATE}
else
    echo "Logfilesize OK" >>$LOGFILE
fi
echo "`date` Creating MaxDB SnapShot" >>$LOGFILE
#rc=`dbmcli -U $KEY -i $sqlFile -b | head -1 | tr -d "[:blank:]"`
dbmcli -U $KEY -uUTL -i $sqlFile >>$LOGFILE
echo "Returncode = $?" >>$LOGFILE
rm $sqlFile

 

chmod 755 MaxDB*

create the cron script to schedule the azacsnap call

vi cron_backup_daily.sh
#!/bin/bash
BACKUP_PREFIX="daily"
PRIMARY_BACKUP_RETENTION=2
SAPSID="C11"
USERKEY="ADMIN"
## AZACSNAP - PRIMARY BACKUP ##
#HANA_CLIENT_PATH=`find /hana/shared/ -name hdbclient -type d -print 2>/dev/null`
#export PATH=$PATH:$HANA_CLIENT_PATH
#
echo "Executing primary backup with prefix $BACKUP_PREFIX (retention ${PRIMARY_BACKUP_RETENTION})."
/home/azacsnap/bin/azacsnap -c backup --volume other --prefix $BACKUP_PREFIX --retention $PRIMARY_BACKUP_RETENTION -v --runbefore "/home/azacsnap/bin/MaxDBQuiece.sh $SAPSID $USERKEY" --runafter "/home/azacsnap/bin/MaxDBunQuiece.sh $SAPSID $USERKEY" –preview

chmod 755 cron_backup_daily.sh

Schedule the daily backup in the cron

crontab -e
# create daily backups twice a day and replicate them via ANF backup
0 2,14 * * *            /home/azacsnap/bin/cron_backup_daily.sh

Check the backup history in MaxDB

backup_history_list -c label,action,pages,stop,media
OK
END
             |HISTLOST |     |                   |                     |
             |HISTLOST |     |                   |                     |
DAT_000000001|SAVE WARM|44272|2023-03-07 19:39:57|d1                   |
LOG_000000001|SAVE WARM| 6952|2023-03-07 19:45:09|l1                   |
DAT_000000002|SAVE WARM|    0|2023-03-07 20:17:45|External_Snapshot    |
DAT_000000005|SAVE WARM|    0|2023-03-08 16:52:18|External_Snapshot    |
DAT_000000008|SAVE WARM|    0|2023-03-08 17:10:02|External_Snapshot    |

 

Show the MaxDB Templates

backup_template_show ALL
OK

NAME                          d1
    CONTENT                   DATA
    CREATIONDATE              20230307193424
    MODIFICATIONDATE          20230307193424
    TOOL                      NONE
    BLOCKSIZE                 8
    DATACARRIER
        TYPE                  FILE
        LOCATION              /sapdb/C11/backup/data/DAT0001
        OVERWRITE             NO
        COMPRESSED            NO
 
NAME                          l1
    CONTENT                   AUTO
    CREATIONDATE              20230307193440
    MODIFICATIONDATE          20230307193440
    TOOL                      NONE
    BLOCKSIZE                 8
    DATACARRIER
        TYPE                  FILE
        LOCATION              /sapdb/C11/backup/log/LOG0001
        OVERWRITE             NO
        COMPRESSED            NO

 NAME                          External_Snapshot
    CONTENT                   DATA
    CREATIONDATE              20230307201008
    MODIFICATIONDATE          20230307201008
    TOOL                      DBMC
    BLOCKSIZE                 8
    DATACARRIER
        TYPE                  EXTERNAL
        LOCATION
        OVERWRITE             NO
        COMPRESSED            NO

List the taken SnapShots

azacsnap -c details --preview
  >>>  Preview Feature 'ANF Backup' enabled in config file 'azacsnap.json'.
================================================================================
  PREVIEWS ARE PROVIDED "AS-IS," "WITH ALL FAULTS," AND "AS AVAILABLE," AND
  ARE EXCLUDED FROM THE SERVICE LEVEL AGREEMENTS AND LIMITED WARRANTY
  https://azure.microsoft.com/support/legal/preview-supplemental-terms/
================================================================================
  User has enabled execution of PREVIEW features with '--preview'.
--------------------------------------------------------------------------------
List snapshot details called with snapshotFilter ''
#, Volume, SnapshotName, Created
#1, C11data, Backup_202303141218, 14-Mar-2023 11:18:44am (UTC+0)
#2, C11data, Backup_202303141215, 14-Mar-2023 11:15:20am (UTC+0)
#3, C11data, Backup_202303131057, 13-Mar-2023 9:57:42am (UTC+0)

 

Restore using azacsnap

Shutdown SAP and ASE (if possible – if not simply “kill” the DB. We are restoring anyway.

stopsap all

 

umount the data volume

umount /sapdb/C11/sapdata

 

At the moment azacsnap does not support “Revert Volume” for ANF. If you would like to keep the volume names you have the option to “revert a volume using the Azure Portal.

See:

su – azacsnap

cd bin

 

azacsnap -c restore --dbsid C11 --restore revertvolume --configfile azacsnap.json --snapshotfilter daily__F44BFE3175B__c11data

...

Azure NetApp Files volumes not supported for revertvolume, will not revert volume.

 

With ANF you do have the option to clone a volume. This is probably the better option anyway. How to clone a volume for a recovery is demonstrated here:

 

AzAcSnap is designed to restore a collection of dataVolumes and otherVolumes.  AzAcSnap makes sure all the dataVolumes share the same snapshot to be restored and the otherVolumes the latest snapshot to be restored.  In a deployment with multiple data volumes (e.g., SAP HANA Scale-Out) this can save a lot of time trying to ensure all the snapshots match in the Azure Portal before cloning or reverting the volumes.  This means when using a setup with custom scripts to quiesce/unquiesce the database it's necessary to create a copy of the backup configfile and change "otherVolume" to "dataVolume" and change "dataVolume" to "otherVolume" effectively switching them.

 

cp azacsnap.json azacsnap_snaptovol.json
vi azacsnap_snaptovol.json
        "anfStorage": [
          {
            "otherVolume": [],
      "dataVolume": [

 

Down here are the specifications of your ANF volumes à keep unchanged change only dataVolume to otherVolume and otherVolume to dataVolume.

list the available SnapShots

azacsnap -c details
List snapshot details called with snapshotFilter ''
#, Volume, SnapshotName
#1, ralfC11data, daily__F44BFE3175B__c11data

 

azacsnap -c restore --dbsid C11 --restore revertvolume --configfile azacsnap_snaptovol.json --snapshotfilter daily__F44BFE3175B__c11data

 

create the new /etc/fstab

 

pwd
/home/azacsnap/bin
 
grep rwclone ./logs/*.log
… Creating new volume 'ralfc11data-rwclone-20221111-0732'
… Volume 'ralfc11data-rwclone-20221111-0732' successfully created from snapshot.

… Creating new volume 'ralfc11sybase-rwclone-20221111-0732'
… Volume 'ralfc11sybase-rwclone-20221111-0732' successfully created from snapshot.

 

Mount the cloned volume to the sapdata directory

mount -a

 

Recover the database

dbmcli -U ADMIN
dbmcli on C11>backup_history_list -c label,action,pages,stop,media
OK
...
..                                           |
DAT_000000030|SAVE WARM|0|2023-03-14 11:18:04|External_Snapshot            |
DAT_000000031|SAVE WARM|0|2023-03-14 11:18:57|External_Snapshot            |
---
dbmcli on C11>quit

Restore the latest SnapShot

dbmcli -U ADMIN
db_admin
OK
db_connect
OK
recover_start External_Snapshot DATA ExternalBackupID DAT_000000031
OK

 

Start the DB and SAP

The Database will automatically apply the latest logfiles to the database.

su – c11adm
startsap

 

Upgrade MaxDB

su - c11adm
stopsap

as root

cd /Software/MaxDB/Patch/MaxDB_7.9___SP10_Build_05_/DATA_UNITS/MAXDB_LINUX_X86_64
./SDBUPD –d C11 -u control,<pwd>

 

ANF Cross Region Replication

Azure NetApp Files volume replication is supported between various Azure regional pairs and non-standard pairs. Azure NetApp Files volume replication is currently available between the following regions. You can replicate Azure NetApp Files volumes from Regional Pair A to Regional Pair B, and vice versa.

RalfKlahr_3-1692635156821.png

 

RalfKlahr_4-1692635185629.png

 

Cross-region replication of Azure NetApp Files volumes | Microsoft Learn

 

Azure NetApp Files cross region replication and new enhancements in preview | Azure Blog and Updates | Microsoft Azure

 

Cross-zone replication of Azure NetApp Files volumes | Microsoft Learn

 

Create an storage account in the destination region (must be the paired region (see table).

RalfKlahr_7-1692635319003.png

 

Create a VNET (if not already existing in the DR region)

RalfKlahr_8-1692635357604.png

RalfKlahr_9-1692635391511.png

Create a Capacity Pool for the DR volume (can be a different QoS level)

RalfKlahr_10-1692635426183.png

Create the target DR volume.

On the destination storage account overview select Add data Protection

RalfKlahr_11-1692635596801.png

obviously the new volume should have the same size as the destination volume.

RalfKlahr_12-1692635621577.png

RalfKlahr_13-1692635674171.png

Schedule an hourly replication for the data volume

RalfKlahr_14-1692635714500.png

 

Now authorize the source volume for the replication.

RalfKlahr_15-1692635746312.png

Specify the volume resource ID of the DR volume to the Source volume

RalfKlahr_16-1692635771516.png

RalfKlahr_17-1692635792133.png

Finished

 

Now repeat the same for the log backup volume but schedule the transfer every 10 Minutes

RalfKlahr_18-1692635831823.png

 

Crontab for snapshots and logbackup

crontab -l
# create daily backups twice a day and replicate them via ANF backup
0 2,14 * * *            /home/azacsnap/bin/cron_backup_daily.sh
*/10 * * * *            /home/azacsnap/bin/cron_logbackup.sh

The second part with the log volume is optional if you set the autolog_on to 300 second (5 minutes)

Create the logbackup script

vi cron_logbackup.sh
#!/bin/bash
SID="$1"
DATE="`date +%m-%d-%Y`"
LOGFILE="/tmp/MaxDM_Logbackup${SID}.log"
# MAX LOGFILE SIZE is 2 MB
MAXSIZE=2000000
# Get file size
FILESIZE=$(stat -c%s "$LOGFILE")
if [[ "$SID" == "" ]]; then
  echo "Usage: `basename $0` <SID> "  exit 1
fi
echo "Size of $LOGFILE = $FILESIZE bytes." >>$LOGFILE
if (( $FILESIZE > $MAXSIZE)); then
    echo "Moving the MaxDM logbackup logfile to a backup" >>$LOGFILE
    mv $LOGFILE ${LOGFILE}-${DATE}
else
    echo "Logfilesize OK" >>$LOGFILE
fi
echo "`date` Creating MaxDB Logbackup" >>$LOGFILE
 
#rc=`dbmcli -U $KEY -i $sqlFile -b | head -1 | tr -d "[:blank:]"`
dbmcli -U ADMIN -uUTL -c backup_start l1  >>$LOGFILE
echo "Returncode = $?" >>$LOGFILE

 

as an alternative you can enable autolog backup to 300 seconds

dbmcli -U ADMIN
dbmcli on C11>db_connect
dbmcli on C11>autolog_off
dbmcli on C11>autolog_on l1 INTERVAL 300
dbmcli on C11>db_stop
dbmcli on C11>db_start
dbmcli on C11>exit

 

END 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.