Blog Post

Running SAP Applications on the Microsoft Platform
18 MIN READ

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

RalfKlahr's avatar
RalfKlahr
Icon for Microsoft rankMicrosoft
Sep 06, 2023

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.

  

 

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

 

Create the Volume Structure

Download the sources from the SAP Marketplace

The DB Export

 

The SWPM

 

The MaxDB

The SAPCAR

 

The Kernel

The IGS

 

Finally, the HOST Agent.

 

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.

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

 

Select continue.

Login as root

 

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

 

Primary App Server installation

./sapinst

 

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

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.

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

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

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.

 

 

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).

 

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

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

Create the target DR volume.

On the destination storage account overview select Add data Protection

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

Schedule an hourly replication for the data volume

 

Now authorize the source volume for the replication.

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

Finished

 

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

 

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 

Updated Aug 21, 2023
Version 1.0
No CommentsBe the first to comment
"}},"componentScriptGroups({\"componentId\":\"custom.widget.MicrosoftFooter\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/QueryHandler\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageCoverImage\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageCoverImage-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeTitle\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeTitle-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTimeToRead\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTimeToRead-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserRank\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserRank-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTime\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTime-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageCustomFields\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageCustomFields-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageRevision\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageRevision-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageReplyButton\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageReplyButton-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageAuthorBio\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageAuthorBio-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/ranks/UserRankLabel\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/attachments/AttachmentView/AttachmentViewChip\"]})":[{"__ref":"CachedAsset:text:en_US-components/attachments/AttachmentView/AttachmentViewChip-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserRegistrationDate\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserRegistrationDate-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeAvatar-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeDescription\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeDescription-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"components/tags/TagView/TagViewChip\"]})":[{"__ref":"CachedAsset:text:en_US-components/tags/TagView/TagViewChip-1745505309835"}],"cachedText({\"lastModified\":\"1745505309835\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeIcon\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1745505309835"}]},"CachedAsset:pages-1745487429264":{"__typename":"CachedAsset","id":"pages-1745487429264","value":[{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"UserBlogPermissions.Page","type":"COMMUNITY","urlPath":"/c/user-blog-permissions/page","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"TkbViewAllArticlesPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId/all-articles/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730142000000,"localOverride":null,"page":{"id":"AllEvents","type":"CUSTOM","urlPath":"/Events","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"MaintenancePage","type":"COMMUNITY","urlPath":"/maintenance","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"IdeaPostPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730142000000,"localOverride":null,"page":{"id":"CommunityHub.Page","type":"CUSTOM","urlPath":"/Directory","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ResetPasswordPage","type":"USER","urlPath":"/resetpassword/:userId/:resetPasswordToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730142000000,"localOverride":null,"page":{"id":"AllBlogs.Page","type":"CUSTOM","urlPath":"/blogs","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745487429264,"localOverride":null,"page":{"id":"GroupHubPostPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"}],"localOverride":false},"CachedAsset:text:en_US-components/context/AppContext/AppContextProvider-0":{"__typename":"CachedAsset","id":"text:en_US-components/context/AppContext/AppContextProvider-0","value":{"noCommunity":"Cannot find community","noUser":"Cannot find current user","noNode":"Cannot find node with id {nodeId}","noMessage":"Cannot find message with id {messageId}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-0":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-0","value":{"title":"Loading..."},"localOverride":false},"User:user:-1":{"__typename":"User","id":"user:-1","uid":-1,"login":"Deleted","email":"","avatar":null,"rank":null,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":"ANONYMOUS","registrationTime":null,"confirmEmailStatus":false,"registrationAccessLevel":"VIEW","ssoRegistrationFields":[]},"ssoId":null,"profileSettings":{"__typename":"ProfileSettings","dateDisplayStyle":{"__typename":"InheritableStringSettingWithPossibleValues","key":"layout.friendly_dates_enabled","value":"false","localValue":"true","possibleValues":["true","false"]},"dateDisplayFormat":{"__typename":"InheritableStringSetting","key":"layout.format_pattern_date","value":"MMM dd yyyy","localValue":"MM-dd-yyyy"},"language":{"__typename":"InheritableStringSettingWithPossibleValues","key":"profile.language","value":"en-US","localValue":"en","possibleValues":["en-US"]}},"deleted":false},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"Category:category:SAPonMicrosoft":{"__typename":"Category","id":"category:SAPonMicrosoft","entityType":"CATEGORY","displayId":"SAPonMicrosoft","nodeType":"category","depth":3,"title":"SAP on Microsoft","shortTitle":"SAP on Microsoft","parent":{"__ref":"Category:category:products-services"}},"Category:category:top":{"__typename":"Category","id":"category:top","displayId":"top","nodeType":"category","depth":0,"title":"Top","entityType":"CATEGORY","shortTitle":"Top"},"Category:category:communities":{"__typename":"Category","id":"category:communities","displayId":"communities","nodeType":"category","depth":1,"parent":{"__ref":"Category:category:top"},"title":"Communities","entityType":"CATEGORY","shortTitle":"Communities"},"Category:category:products-services":{"__typename":"Category","id":"category:products-services","displayId":"products-services","nodeType":"category","depth":2,"parent":{"__ref":"Category:category:communities"},"title":"Products","entityType":"CATEGORY","shortTitle":"Products"},"Blog:board:SAPApplications":{"__typename":"Blog","id":"board:SAPApplications","entityType":"BLOG","displayId":"SAPApplications","nodeType":"board","depth":4,"conversationStyle":"BLOG","title":"Running SAP Applications on the Microsoft Platform","description":"","avatar":null,"profileSettings":{"__typename":"ProfileSettings","language":null},"parent":{"__ref":"Category:category:SAPonMicrosoft"},"ancestors":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:gxcuf89792"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:communities"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:products-services"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:SAPonMicrosoft"}}]},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"boardPolicies":{"__typename":"BoardPolicies","canPublishArticleOnCreate":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","args":[]}}},"shortTitle":"Running SAP Applications on the Microsoft Platform","repliesProperties":{"__typename":"RepliesProperties","sortOrder":"REVERSE_PUBLISH_TIME","repliesFormat":"threaded"},"tagProperties":{"__typename":"TagNodeProperties","tagsEnabled":{"__typename":"PolicyResult","failureReason":null}},"requireTags":false,"tagType":"FREEFORM_ONLY"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/cmstNC05WEo0blc\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/cmstNC05WEo0blc","height":512,"width":512,"mimeType":"image/png"},"Rank:rank:4":{"__typename":"Rank","id":"rank:4","position":6,"name":"Microsoft","color":"333333","icon":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/cmstNC05WEo0blc\"}"},"rankStyle":"OUTLINE"},"User:user:303327":{"__typename":"User","id":"user:303327","uid":303327,"login":"RalfKlahr","deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0zMDMzMjctMjUyMjcwaUMxOEY4NTNBNkU0QzI2M0E"},"rank":{"__ref":"Rank:rank:4"},"email":"","messagesCount":14,"biography":null,"topicsCount":12,"kudosReceivedCount":17,"kudosGivenCount":0,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2019-03-19T05:19:58.490-07:00","confirmEmailStatus":null},"followersCount":null,"solutionsCount":0},"BlogTopicMessage:message:3905041":{"__typename":"BlogTopicMessage","uid":3905041,"subject":"SAP Netweaver 7.5 with MaxDB 7.9 on Azure using Azure NetApp Files (ANF)","id":"message:3905041","revisionNum":5,"repliesCount":0,"author":{"__ref":"User:user:303327"},"depth":0,"hasGivenKudo":false,"board":{"__ref":"Blog:board:SAPApplications"},"conversation":{"__ref":"Conversation:conversation:3905041"},"messagePolicies":{"__typename":"MessagePolicies","canPublishArticleOnEdit":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_edit_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_edit_workflow_action.accessDenied","args":[]}},"canModerateSpamMessage":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","key":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","args":[]}}},"contentWorkflow":{"__typename":"ContentWorkflow","state":"PUBLISH","scheduledPublishTime":null,"scheduledTimezone":null,"userContext":{"__typename":"MessageWorkflowContext","canSubmitForReview":null,"canEdit":false,"canRecall":null,"canSubmitForPublication":null,"canReturnToAuthor":null,"canPublish":null,"canReturnToReview":null,"canSchedule":false},"shortScheduledTimezone":null},"readOnly":false,"editFrozen":false,"moderationData":{"__ref":"ModerationData:moderation_data:3905041"},"teaser":"

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.

","body":"

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

\n

Overview

\n

 

\n

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.

\n

 

\n

SAP MaxDB: The SAP Database - Home

\n

SAP MaxDB - MaxDB - Support Wiki

\n

SAP MaxDB Directory Structure - MaxDB - Support Wiki

\n

 

\n

System Configuration

\n

This illustration is a short overview of the system setup.

\n

  

\n

\n

 

\n

Create the Environment

\n

The VM

\n
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
\n

Create the delegated network for ANF

\n

\n

 

\n

Create the Volume Structure

\n

Download the sources from the SAP Marketplace

\n

The DB Export

\n

\n

 

\n

The SWPM

\n

\n

 

\n

The MaxDB

\n

\n

\n

The SAPCAR

\n

\n

 

\n

The Kernel

\n

\n

\n

\n

\n

The IGS

\n

\n

\n

 

\n

Finally, the HOST Agent.

\n

\n

 

\n

Volume design on ANF

\n

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

\n

 

\n

Mount the volumes and create the directories.

\n

 

\n

Modify the idmapd to align the NFSv4 domain.

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

 

\n

update the system

\n
zypper up 
\n

Install the RPM’s regarding the installation manual

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

 

\n

Maintain the sysctl.conf

\n
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
\n

 

\n

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

\n
reboot
\n

Check that sapconf is running and that it is enabled.

\n

 

\n
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.
\n

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

\n
groupadd sapsys -g 79 
\n
groupadd sdba -g 1001 
\n

 

\n

creating the DB users to avoid issues during the DB installation

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

 

\n

MaxDB Volume design for non XXL installations

\n

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.

\n

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

\n

\n

Get the FQDN name of the VM

\n

hostname -f

\n
ralfmaxdb01.lgbsmidv5lrurp4qqyuwbceesh.bx.internal.cloudapp.net
\n

 

\n

maintain the /etc/hosts

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

Create the SAP App server structure

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

 

\n

Create the MaxDB “installation” structure

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

 

\n

Create the data structure

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

 

\n

Create the log structure

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

 

\n

Create the backup structure

\n
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
\n

 

\n

Create the fstab

\n
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
\n

 

\n
mount -a
chown -R sdb:sdba /sapdb
\n

 

\n

Create the Software directory

\n

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

\n

 

\n

Create the Software Disk

\n
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
\n

 

\n
mkfs -t xfs /dev/sdc
mkdir /Software
\n

 

\n
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
\n

 

\n

copy the SAPCAR into the PATH

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

 

\n

ASCS Installation

\n

Extract the SWPM archive and start the SAP Installation

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

 

\n

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

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

 

\n

  

\n

Start the SWPM

\n

/Software/SWPM # ./sapinst

\n

 

\n

Open your browser with

\n

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

\n

and select advanced

\n

\n

 

\n

Select continue.

\n

Login as root

\n

\n

\n

\n

\n

\n

\n

\n

 

\n

MaxDB Installation

\n

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

\n

 

\n
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
\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

 

\n

Primary App Server installation

\n
./sapinst
\n

\n

\n

\n

\n

 

\n

Install the MaxDB Database Studio

\n

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

\n

 

\n

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

\n

\n

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

\n

Then call the sdbsetup.exe to install the MaxDB Studio

\n

Backup the Database

\n

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

\n

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

\n
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
\n

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

\n

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

\n

 

\n

List the xuser entries

\n
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>
\n

Login as SUPERDBA using the XUSER key

\n
dbmcli -U ADMIN
dbmcli on C11>
\n

 

\n

Create template d1 for data backup:

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

 

\n

Create template l1 for log backup:

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

 

\n

Starting a backup

\n
db_connect
backup_start d1
\n

check the data backup location

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

 

\n

Checking a backup after completion

\n
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
\n

Short Presentation Title (sap.com)

\n

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.

\n

 

\n

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

\n

A snapshot can be created in the ONLINE operational state.

\n

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.

\n

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

\n

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.

\n

The Log area is never part of this backup procedure.

\n

\n

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

\n

OK

\n

Returncode -8020

\n

...

\n

Max Used Data Page 0

\n

 

\n

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.

\n

 

\n

Create the Snapshot

\n
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
---
\n

 

\n

take the snapshot with azacsnap on ANF than finish the backup

\n
backup_finish External_Snapshot ExternalBackupID 202303071508 
\n

(backup ID e.g. date and time)

\n
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
\n

 

\n

Check the logfile

\n
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.
\n

Restore using an Snapshot

\n

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

\n

\n

Recovery tests

\n

Crash the system by sending the sysrequest trigger b

\n
echo b > /proc/sysrq-trigger
\n

umount the data volume before we restore the snapshot

\n
umount /sapdb/C11/sapdata
\n

restore the SnapShot

\n

\n

Remount the volume and start the DB for the automated recovery

\n
mount -a
\n

 

\n

go to Restore the database --> further down

\n

 

\n

Creating automated DB SnapShots

\n

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.

\n

 

\n

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

\n

 

\n

Download the azacsnap tool

\n

https://aka.ms/azacsnapinstaller

\n

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

\n

 

\n

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

\n

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

\n

2282054 - Background DBM server - SAP ONE Support Launchpad

\n

 

\n

SAP MaxDB | SAP Community

\n

Configure azacsnap

\n

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

\n

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.

\n

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

\n

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

\n

 

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

 

\n

You will get an output which looks similar to this:

\n
{
  \"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/\"
}
\n

 

\n

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

\n
vi /tmp/auth.json
\n

 

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

 

\n

Install azacsnap

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

 

\n

Configure azacsnap

\n
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'.
\n

 

\n

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”.

\n
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'
\n

 

\n

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

\n
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
\n

 

\n

create the user key

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

 

\n

Test the dbmcli connection using the user-key

\n
dbmcli -U ADMIN
dbmcli on C11>quit
\n

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

\n
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
\n

 

\n
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
\n

 

\n
chmod 755 MaxDB*
\n

create the cron script to schedule the azacsnap call

\n
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

\n
chmod 755 cron_backup_daily.sh
\n

Schedule the daily backup in the cron

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

Check the backup history in MaxDB

\n
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    |
\n

 

\n

Show the MaxDB Templates

\n
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
\n

List the taken SnapShots

\n
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)
\n

 

\n

Restore using azacsnap

\n

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

\n

stopsap all

\n

 

\n

umount the data volume

\n

umount /sapdb/C11/sapdata

\n

 

\n

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.

\n

See:

\n

su – azacsnap

\n

cd bin

\n

 

\n

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

\n

...

\n

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

\n

 

\n

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:

\n

 

\n

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.

\n

 

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

 

\n

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

\n

list the available SnapShots

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

 

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

 

\n

create the new /etc/fstab

\n

 

\n
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.
\n

 

\n

Mount the cloned volume to the sapdata directory

\n
mount -a
\n

 

\n

Recover the database

\n
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
\n

Restore the latest SnapShot

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

 

\n

Start the DB and SAP

\n

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

\n
su – c11adm
startsap
\n

 

\n

Upgrade MaxDB

\n
su - c11adm
stopsap
\n

as root

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

 

\n

ANF Cross Region Replication

\n

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.

\n

\n

 

\n

\n

 

\n

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

\n

 

\n

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

\n

 

\n

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

\n

 

\n

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

\n

\n

 

\n

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

\n

\n

\n

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

\n

\n

Create the target DR volume.

\n

On the destination storage account overview select Add data Protection

\n

\n

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

\n

\n

\n

Schedule an hourly replication for the data volume

\n

\n

 

\n

Now authorize the source volume for the replication.

\n

\n

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

\n

\n

\n

Finished

\n

 

\n

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

\n

\n

 

\n

Crontab for snapshots and logbackup

\n
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
\n

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

\n

Create the logbackup script

\n
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
\n

 

\n

as an alternative you can enable autolog backup to 300 seconds

\n
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
\n

 

\n

END 

","body@stringLength":"92791","rawBody":"

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

\n

Overview

\n

 

\n

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.

\n

 

\n

SAP MaxDB: The SAP Database - Home

\n

SAP MaxDB - MaxDB - Support Wiki

\n

SAP MaxDB Directory Structure - MaxDB - Support Wiki

\n

 

\n

System Configuration

\n

This illustration is a short overview of the system setup.

\n

  

\n

\n

 

\n

Create the Environment

\n

The VM

\n
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
\n

Create the delegated network for ANF

\n

\n

 

\n

Create the Volume Structure

\n

Download the sources from the SAP Marketplace

\n

The DB Export

\n

\n

 

\n

The SWPM

\n

\n

 

\n

The MaxDB

\n

\n

\n

The SAPCAR

\n

\n

 

\n

The Kernel

\n

\n

\n

\n

\n

The IGS

\n

\n

\n

 

\n

Finally, the HOST Agent.

\n

\n

 

\n

Volume design on ANF

\n

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

\n

 

\n

Mount the volumes and create the directories.

\n

 

\n

Modify the idmapd to align the NFSv4 domain.

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

 

\n

update the system

\n
zypper up 
\n

Install the RPM’s regarding the installation manual

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

 

\n

Maintain the sysctl.conf

\n
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
\n

 

\n

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

\n
reboot
\n

Check that sapconf is running and that it is enabled.

\n

 

\n
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.
\n

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

\n
groupadd sapsys -g 79 
\n
groupadd sdba -g 1001 
\n

 

\n

creating the DB users to avoid issues during the DB installation

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

 

\n

MaxDB Volume design for non XXL installations

\n

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.

\n

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

\n

\n

Get the FQDN name of the VM

\n

hostname -f

\n
ralfmaxdb01.lgbsmidv5lrurp4qqyuwbceesh.bx.internal.cloudapp.net
\n

 

\n

maintain the /etc/hosts

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

Create the SAP App server structure

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

 

\n

Create the MaxDB “installation” structure

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

 

\n

Create the data structure

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

 

\n

Create the log structure

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

 

\n

Create the backup structure

\n
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
\n

 

\n

Create the fstab

\n
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
\n

 

\n
mount -a
chown -R sdb:sdba /sapdb
\n

 

\n

Create the Software directory

\n

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

\n

 

\n

Create the Software Disk

\n
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
\n

 

\n
mkfs -t xfs /dev/sdc
mkdir /Software
\n

 

\n
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
\n

 

\n

copy the SAPCAR into the PATH

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

 

\n

ASCS Installation

\n

Extract the SWPM archive and start the SAP Installation

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

 

\n

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

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

 

\n

  

\n

Start the SWPM

\n

/Software/SWPM # ./sapinst

\n

 

\n

Open your browser with

\n

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

\n

and select advanced

\n

\n

 

\n

Select continue.

\n

Login as root

\n

\n

\n

\n

\n

\n

\n

\n

 

\n

MaxDB Installation

\n

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

\n

 

\n
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
\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

\n

 

\n

Primary App Server installation

\n
./sapinst
\n

\n

\n

\n

\n

 

\n

Install the MaxDB Database Studio

\n

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

\n

 

\n

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

\n

\n

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

\n

Then call the sdbsetup.exe to install the MaxDB Studio

\n

Backup the Database

\n

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

\n

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

\n
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
\n

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

\n

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

\n

 

\n

List the xuser entries

\n
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>
\n

Login as SUPERDBA using the XUSER key

\n
dbmcli -U ADMIN
dbmcli on C11>
\n

 

\n

Create template d1 for data backup:

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

 

\n

Create template l1 for log backup:

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

 

\n

Starting a backup

\n
db_connect
backup_start d1
\n

check the data backup location

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

 

\n

Checking a backup after completion

\n
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
\n

Short Presentation Title (sap.com)

\n

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.

\n

 

\n

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

\n

A snapshot can be created in the ONLINE operational state.

\n

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.

\n

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

\n

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.

\n

The Log area is never part of this backup procedure.

\n

\n

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

\n

OK

\n

Returncode -8020

\n

...

\n

Max Used Data Page 0

\n

 

\n

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.

\n

 

\n

Create the Snapshot

\n
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
---
\n

 

\n

take the snapshot with azacsnap on ANF than finish the backup

\n
backup_finish External_Snapshot ExternalBackupID 202303071508 
\n

(backup ID e.g. date and time)

\n
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
\n

 

\n

Check the logfile

\n
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.
\n

Restore using an Snapshot

\n

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

\n

\n

Recovery tests

\n

Crash the system by sending the sysrequest trigger b

\n
echo b > /proc/sysrq-trigger
\n

umount the data volume before we restore the snapshot

\n
umount /sapdb/C11/sapdata
\n

restore the SnapShot

\n

\n

Remount the volume and start the DB for the automated recovery

\n
mount -a
\n

 

\n

go to Restore the database --> further down

\n

 

\n

Creating automated DB SnapShots

\n

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.

\n

 

\n

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

\n

 

\n

Download the azacsnap tool

\n

https://aka.ms/azacsnapinstaller

\n

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

\n

 

\n

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

\n

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

\n

2282054 - Background DBM server - SAP ONE Support Launchpad

\n

 

\n

SAP MaxDB | SAP Community

\n

Configure azacsnap

\n

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

\n

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.

\n

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

\n

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

\n

 

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

 

\n

You will get an output which looks similar to this:

\n
{
  \"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/\"
}
\n

 

\n

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

\n
vi /tmp/auth.json
\n

 

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

 

\n

Install azacsnap

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

 

\n

Configure azacsnap

\n
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'.
\n

 

\n

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”.

\n
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'
\n

 

\n

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

\n
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
\n

 

\n

create the user key

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

 

\n

Test the dbmcli connection using the user-key

\n
dbmcli -U ADMIN
dbmcli on C11>quit
\n

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

\n
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
\n

 

\n
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
\n

 

\n
chmod 755 MaxDB*
\n

create the cron script to schedule the azacsnap call

\n
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

\n
chmod 755 cron_backup_daily.sh
\n

Schedule the daily backup in the cron

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

Check the backup history in MaxDB

\n
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    |
\n

 

\n

Show the MaxDB Templates

\n
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
\n

List the taken SnapShots

\n
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)
\n

 

\n

Restore using azacsnap

\n

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

\n

stopsap all

\n

 

\n

umount the data volume

\n

umount /sapdb/C11/sapdata

\n

 

\n

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.

\n

See:

\n

su – azacsnap

\n

cd bin

\n

 

\n

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

\n

...

\n

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

\n

 

\n

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:

\n

 

\n

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.

\n

 

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

 

\n

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

\n

list the available SnapShots

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

 

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

 

\n

create the new /etc/fstab

\n

 

\n
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.
\n

 

\n

Mount the cloned volume to the sapdata directory

\n
mount -a
\n

 

\n

Recover the database

\n
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
\n

Restore the latest SnapShot

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

 

\n

Start the DB and SAP

\n

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

\n
su – c11adm
startsap
\n

 

\n

Upgrade MaxDB

\n
su - c11adm
stopsap
\n

as root

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

 

\n

ANF Cross Region Replication

\n

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.

\n

\n

 

\n

\n

 

\n

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

\n

 

\n

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

\n

 

\n

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

\n

 

\n

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

\n

\n

 

\n

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

\n

\n

\n

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

\n

\n

Create the target DR volume.

\n

On the destination storage account overview select Add data Protection

\n

\n

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

\n

\n

\n

Schedule an hourly replication for the data volume

\n

\n

 

\n

Now authorize the source volume for the replication.

\n

\n

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

\n

\n

\n

Finished

\n

 

\n

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

\n

\n

 

\n

Crontab for snapshots and logbackup

\n
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
\n

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

\n

Create the logbackup script

\n
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
\n

 

\n

as an alternative you can enable autolog backup to 300 seconds

\n
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
\n

 

\n

END 

","kudosSumWeight":1,"postTime":"2023-09-06T14:47:44.097-07:00","images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk2N2kzMEM1MEVFOUM4MUI4M0VD?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3Mmk1RDMwNkI1QThCMDg2OTcy?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3NWkwMUUyNjUyNTc5NjFCMTU5?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3N2lGRjhBMzE3NjAyQjhDMDg5?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3OGk0RTYwNEJCRDczM0NDRDk3?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3OWk5QjUxMERDQjEzRDREMzE0?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4MWk1Q0U5ODU1QTQ4MDBBNTJF?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4MmkyNkMyQTNGNDE2QjREODE2?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDk","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4M2k4NTk2QkIwMDM1NDZDNUQx?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4NGk5RTNDNjlGRjFBNkE1MzQ5?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEx","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4NWlDNDlFNEZDNTlCMkVCOUM3?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEy","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4OGlGOUNCNTkwRUZFNjQ0QjBB?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDEz","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk5NGkyQTQxRjAyRDcyNEJERDM1?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE0","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk5NWkzMUQ2OEFEQzI3QTk5RUNB?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE1","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAxMWlFRDNGRjNGQ0E2RTk3RTI2?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE2","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyMmkxNkQ0NDNENERDQTlDQzVE?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE3","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyM2k1RkJGQjk5NDFGNjFFOEQ5?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE4","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyNGk2OTMzNTY3M0ZCNTk0RDJE?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE5","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyNWlCNDk0NEU0Nzg3NDYwMTEx?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDIw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzNGk0NzMwQzVGMDUxOEM0MjRB?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDIx","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzNWlCNEVBOUZDM0U2QkQ0MDM2?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDIy","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzNmlEMTkxMzlEMzkwREUyMTk1?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDIz","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzN2lBNzk4NTU0MTE2OEZEODQw?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI0","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDA0MGkxNkU5MUI1NTlBRUNFODc4?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI1","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDA0MWlEMDdDODI3QzY5OENEOTkw?revision=5\"}"}}],"totalCount":59,"pageInfo":{"__typename":"PageInfo","hasNextPage":true,"endCursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI1","hasPreviousPage":false,"startCursor":null}},"attachments":{"__typename":"AttachmentConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[{"__typename":"AttachmentEdge","cursor":"MjUuMXwyLjF8b3w1fF9OVl98MQ","node":{"__ref":"Attachment:{\"id\":\"attachment:message3905041AttachmentNumber1\",\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/SAPApplications/975/1/MaxDB_on_ANF.pdf\"}"}}]},"tags":{"__typename":"TagConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[{"__typename":"TagEdge","cursor":"MjUuMXwyLjF8b3wxMHxfTlZffDE","node":{"__typename":"Tag","id":"tag:ANF","text":"ANF","time":"2019-10-22T11:52:45.585-07:00","lastActivityTime":null,"messagesCount":null,"followersCount":null}},{"__typename":"TagEdge","cursor":"MjUuMXwyLjF8b3wxMHxfTlZffDI","node":{"__typename":"Tag","id":"tag:MaxDB","text":"MaxDB","time":"2019-03-12T18:36:30.118-07:00","lastActivityTime":null,"messagesCount":null,"followersCount":null}},{"__typename":"TagEdge","cursor":"MjUuMXwyLjF8b3wxMHxfTlZffDM","node":{"__typename":"Tag","id":"tag:SAP","text":"SAP","time":"2019-10-22T11:52:45.585-07:00","lastActivityTime":null,"messagesCount":null,"followersCount":null}}]},"timeToRead":18,"rawTeaser":"

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.

","introduction":"","coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""},"currentRevision":{"__ref":"Revision:revision:3905041_5"},"latestVersion":{"__typename":"FriendlyVersion","major":"1","minor":"0"},"metrics":{"__typename":"MessageMetrics","views":16726},"visibilityScope":"PUBLIC","canonicalUrl":null,"seoTitle":"SAP Netweaver 7.5 with MaxDB 7.9","seoDescription":null,"placeholder":false,"originalMessageForPlaceholder":null,"contributors":{"__typename":"UserConnection","edges":[]},"nonCoAuthorContributors":{"__typename":"UserConnection","edges":[]},"coAuthors":{"__typename":"UserConnection","edges":[]},"blogMessagePolicies":{"__typename":"BlogMessagePolicies","canDoAuthoringActionsOnBlog":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.blog.action_can_do_authoring_action.accessDenied","key":"error.lithium.policies.blog.action_can_do_authoring_action.accessDenied","args":[]}}},"archivalData":null,"replies":{"__typename":"MessageConnection","edges":[],"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"customFields":[],"revisions({\"constraints\":{\"isPublished\":{\"eq\":true}},\"first\":1})":{"__typename":"RevisionConnection","totalCount":5}},"Conversation:conversation:3905041":{"__typename":"Conversation","id":"conversation:3905041","solved":false,"topic":{"__ref":"BlogTopicMessage:message:3905041"},"lastPostingActivityTime":"2023-09-06T14:47:44.097-07:00","lastPostTime":"2023-09-06T14:47:44.097-07:00","unreadReplyCount":0,"isSubscribed":false},"ModerationData:moderation_data:3905041":{"__typename":"ModerationData","id":"moderation_data:3905041","status":"APPROVED","rejectReason":null,"isReportedAbuse":false,"rejectUser":null,"rejectTime":null,"rejectActorType":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk2N2kzMEM1MEVFOUM4MUI4M0VD?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk2N2kzMEM1MEVFOUM4MUI4M0VD?revision=5","title":"RalfKlahr_0-1692629850450.png","associationType":"BODY","width":789,"height":683,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3Mmk1RDMwNkI1QThCMDg2OTcy?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3Mmk1RDMwNkI1QThCMDg2OTcy?revision=5","title":"RalfKlahr_1-1692630737792.png","associationType":"BODY","width":1010,"height":494,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3NWkwMUUyNjUyNTc5NjFCMTU5?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3NWkwMUUyNjUyNTc5NjFCMTU5?revision=5","title":"RalfKlahr_2-1692630779473.png","associationType":"BODY","width":1010,"height":60,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3N2lGRjhBMzE3NjAyQjhDMDg5?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3N2lGRjhBMzE3NjAyQjhDMDg5?revision=5","title":"RalfKlahr_3-1692630802427.png","associationType":"BODY","width":1010,"height":56,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3OGk0RTYwNEJCRDczM0NDRDk3?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3OGk0RTYwNEJCRDczM0NDRDk3?revision=5","title":"RalfKlahr_4-1692630827578.png","associationType":"BODY","width":1010,"height":168,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3OWk5QjUxMERDQjEzRDREMzE0?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk3OWk5QjUxMERDQjEzRDREMzE0?revision=5","title":"RalfKlahr_5-1692630849794.png","associationType":"BODY","width":1010,"height":54,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4MWk1Q0U5ODU1QTQ4MDBBNTJF?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4MWk1Q0U5ODU1QTQ4MDBBNTJF?revision=5","title":"RalfKlahr_6-1692630882897.png","associationType":"BODY","width":1010,"height":304,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4MmkyNkMyQTNGNDE2QjREODE2?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4MmkyNkMyQTNGNDE2QjREODE2?revision=5","title":"RalfKlahr_7-1692630924917.png","associationType":"BODY","width":1010,"height":193,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4M2k4NTk2QkIwMDM1NDZDNUQx?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4M2k4NTk2QkIwMDM1NDZDNUQx?revision=5","title":"RalfKlahr_8-1692630947955.png","associationType":"BODY","width":1010,"height":53,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4NGk5RTNDNjlGRjFBNkE1MzQ5?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4NGk5RTNDNjlGRjFBNkE1MzQ5?revision=5","title":"RalfKlahr_9-1692630972464.png","associationType":"BODY","width":1010,"height":230,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4NWlDNDlFNEZDNTlCMkVCOUM3?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4NWlDNDlFNEZDNTlCMkVCOUM3?revision=5","title":"RalfKlahr_10-1692630995609.png","associationType":"BODY","width":1010,"height":54,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4OGlGOUNCNTkwRUZFNjQ0QjBB?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk4OGlGOUNCNTkwRUZFNjQ0QjBB?revision=5","title":"RalfKlahr_11-1692631035879.png","associationType":"BODY","width":1010,"height":304,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk5NGkyQTQxRjAyRDcyNEJERDM1?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk5NGkyQTQxRjAyRDcyNEJERDM1?revision=5","title":"RalfKlahr_12-1692631059181.png","associationType":"BODY","width":1010,"height":297,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk5NWkzMUQ2OEFEQzI3QTk5RUNB?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTQ5OTk5NWkzMUQ2OEFEQzI3QTk5RUNB?revision=5","title":"RalfKlahr_13-1692631089336.png","associationType":"BODY","width":1010,"height":301,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAxMWlFRDNGRjNGQ0E2RTk3RTI2?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAxMWlFRDNGRjNGQ0E2RTk3RTI2?revision=5","title":"RalfKlahr_14-1692631649945.png","associationType":"BODY","width":1010,"height":198,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyMmkxNkQ0NDNENERDQTlDQzVE?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyMmkxNkQ0NDNENERDQTlDQzVE?revision=5","title":"RalfKlahr_15-1692632188553.png","associationType":"BODY","width":660,"height":491,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyM2k1RkJGQjk5NDFGNjFFOEQ5?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyM2k1RkJGQjk5NDFGNjFFOEQ5?revision=5","title":"RalfKlahr_16-1692632202036.png","associationType":"BODY","width":434,"height":271,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyNGk2OTMzNTY3M0ZCNTk0RDJE?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyNGk2OTMzNTY3M0ZCNTk0RDJE?revision=5","title":"RalfKlahr_17-1692632229251.png","associationType":"BODY","width":641,"height":568,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyNWlCNDk0NEU0Nzg3NDYwMTEx?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAyNWlCNDk0NEU0Nzg3NDYwMTEx?revision=5","title":"RalfKlahr_18-1692632249652.png","associationType":"BODY","width":863,"height":456,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzNGk0NzMwQzVGMDUxOEM0MjRB?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzNGk0NzMwQzVGMDUxOEM0MjRB?revision=5","title":"RalfKlahr_0-1692632584283.png","associationType":"BODY","width":880,"height":441,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzNWlCNEVBOUZDM0U2QkQ0MDM2?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzNWlCNEVBOUZDM0U2QkQ0MDM2?revision=5","title":"RalfKlahr_1-1692632603205.png","associationType":"BODY","width":869,"height":223,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzNmlEMTkxMzlEMzkwREUyMTk1?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzNmlEMTkxMzlEMzkwREUyMTk1?revision=5","title":"RalfKlahr_2-1692632626118.png","associationType":"BODY","width":809,"height":469,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzN2lBNzk4NTU0MTE2OEZEODQw?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDAzN2lBNzk4NTU0MTE2OEZEODQw?revision=5","title":"RalfKlahr_3-1692632646546.png","associationType":"BODY","width":829,"height":380,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDA0MGkxNkU5MUI1NTlBRUNFODc4?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDA0MGkxNkU5MUI1NTlBRUNFODc4?revision=5","title":"RalfKlahr_4-1692632712823.png","associationType":"BODY","width":1010,"height":488,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDA0MWlEMDdDODI3QzY5OENEOTkw?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTA1MDQxLTUwMDA0MWlEMDdDODI3QzY5OENEOTkw?revision=5","title":"RalfKlahr_5-1692632735903.png","associationType":"BODY","width":793,"height":427,"altText":null},"Attachment:{\"id\":\"attachment:message3905041AttachmentNumber1\",\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/SAPApplications/975/1/MaxDB_on_ANF.pdf\"}":{"__typename":"Attachment","id":"attachment:message3905041AttachmentNumber1","filename":"MaxDB_on_ANF.pdf","filesize":4888586,"contentType":"application/pdf","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/SAPApplications/975/1/MaxDB_on_ANF.pdf"},"Revision:revision:3905041_5":{"__typename":"Revision","id":"revision:3905041_5","lastEditTime":"2023-08-21T09:42:48.399-07:00"},"CachedAsset:theme:customTheme1-1744326567483":{"__typename":"CachedAsset","id":"theme:customTheme1-1744326567483","value":{"id":"customTheme1","animation":{"fast":"150ms","normal":"250ms","slow":"500ms","slowest":"750ms","function":"cubic-bezier(0.07, 0.91, 0.51, 1)","__typename":"AnimationThemeSettings"},"avatar":{"borderRadius":"50%","collections":["default"],"__typename":"AvatarThemeSettings"},"basics":{"browserIcon":{"imageAssetName":"favicon-1730836283320.png","imageLastModified":"1730836286415","__typename":"ThemeAsset"},"customerLogo":{"imageAssetName":"favicon-1730836271365.png","imageLastModified":"1730836274203","__typename":"ThemeAsset"},"maximumWidthOfPageContent":"1300px","oneColumnNarrowWidth":"800px","gridGutterWidthMd":"30px","gridGutterWidthXs":"10px","pageWidthStyle":"WIDTH_OF_BROWSER","__typename":"BasicsThemeSettings"},"buttons":{"borderRadiusSm":"3px","borderRadius":"3px","borderRadiusLg":"5px","paddingY":"5px","paddingYLg":"7px","paddingYHero":"var(--lia-bs-btn-padding-y-lg)","paddingX":"12px","paddingXLg":"16px","paddingXHero":"60px","fontStyle":"NORMAL","fontWeight":"700","textTransform":"NONE","disabledOpacity":0.5,"primaryTextColor":"var(--lia-bs-white)","primaryTextHoverColor":"var(--lia-bs-white)","primaryTextActiveColor":"var(--lia-bs-white)","primaryBgColor":"var(--lia-bs-primary)","primaryBgHoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.85))","primaryBgActiveColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.7))","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","primaryBorderActive":"1px solid transparent","primaryBorderFocus":"1px solid var(--lia-bs-white)","primaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","secondaryTextColor":"var(--lia-bs-gray-900)","secondaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","secondaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","secondaryBgColor":"var(--lia-bs-gray-200)","secondaryBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","secondaryBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","secondaryBorder":"1px solid transparent","secondaryBorderHover":"1px solid transparent","secondaryBorderActive":"1px solid transparent","secondaryBorderFocus":"1px solid transparent","secondaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","tertiaryTextColor":"var(--lia-bs-gray-900)","tertiaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","tertiaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","tertiaryBgColor":"transparent","tertiaryBgHoverColor":"transparent","tertiaryBgActiveColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.04)","tertiaryBorder":"1px solid transparent","tertiaryBorderHover":"1px solid hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","tertiaryBorderActive":"1px solid transparent","tertiaryBorderFocus":"1px solid transparent","tertiaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","destructiveTextColor":"var(--lia-bs-danger)","destructiveTextHoverColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.95))","destructiveTextActiveColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.9))","destructiveBgColor":"var(--lia-bs-gray-200)","destructiveBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","destructiveBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","destructiveBorder":"1px solid transparent","destructiveBorderHover":"1px solid transparent","destructiveBorderActive":"1px solid transparent","destructiveBorderFocus":"1px solid transparent","destructiveBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","__typename":"ButtonsThemeSettings"},"border":{"color":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","mainContent":"NONE","sideContent":"LIGHT","radiusSm":"3px","radius":"5px","radiusLg":"9px","radius50":"100vw","__typename":"BorderThemeSettings"},"boxShadow":{"xs":"0 0 0 1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.08), 0 3px 0 -1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.16)","sm":"0 2px 4px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.12)","md":"0 5px 15px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","lg":"0 10px 30px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","__typename":"BoxShadowThemeSettings"},"cards":{"bgColor":"var(--lia-panel-bg-color)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":"var(--lia-box-shadow-xs)","__typename":"CardsThemeSettings"},"chip":{"maxWidth":"300px","height":"30px","__typename":"ChipThemeSettings"},"coreTypes":{"defaultMessageLinkColor":"var(--lia-bs-link-color)","defaultMessageLinkDecoration":"none","defaultMessageLinkFontStyle":"NORMAL","defaultMessageLinkFontWeight":"400","defaultMessageFontStyle":"NORMAL","defaultMessageFontWeight":"400","forumColor":"#4099E2","forumFontFamily":"var(--lia-bs-font-family-base)","forumFontWeight":"var(--lia-default-message-font-weight)","forumLineHeight":"var(--lia-bs-line-height-base)","forumFontStyle":"var(--lia-default-message-font-style)","forumMessageLinkColor":"var(--lia-default-message-link-color)","forumMessageLinkDecoration":"var(--lia-default-message-link-decoration)","forumMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","forumMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","forumSolvedColor":"#148563","blogColor":"#1CBAA0","blogFontFamily":"var(--lia-bs-font-family-base)","blogFontWeight":"var(--lia-default-message-font-weight)","blogLineHeight":"1.75","blogFontStyle":"var(--lia-default-message-font-style)","blogMessageLinkColor":"var(--lia-default-message-link-color)","blogMessageLinkDecoration":"var(--lia-default-message-link-decoration)","blogMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","blogMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","tkbColor":"#4C6B90","tkbFontFamily":"var(--lia-bs-font-family-base)","tkbFontWeight":"var(--lia-default-message-font-weight)","tkbLineHeight":"1.75","tkbFontStyle":"var(--lia-default-message-font-style)","tkbMessageLinkColor":"var(--lia-default-message-link-color)","tkbMessageLinkDecoration":"var(--lia-default-message-link-decoration)","tkbMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","tkbMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaColor":"#4099E2","qandaFontFamily":"var(--lia-bs-font-family-base)","qandaFontWeight":"var(--lia-default-message-font-weight)","qandaLineHeight":"var(--lia-bs-line-height-base)","qandaFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkColor":"var(--lia-default-message-link-color)","qandaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","qandaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaSolvedColor":"#3FA023","ideaColor":"#FF8000","ideaFontFamily":"var(--lia-bs-font-family-base)","ideaFontWeight":"var(--lia-default-message-font-weight)","ideaLineHeight":"var(--lia-bs-line-height-base)","ideaFontStyle":"var(--lia-default-message-font-style)","ideaMessageLinkColor":"var(--lia-default-message-link-color)","ideaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","ideaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","ideaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","contestColor":"#FCC845","contestFontFamily":"var(--lia-bs-font-family-base)","contestFontWeight":"var(--lia-default-message-font-weight)","contestLineHeight":"var(--lia-bs-line-height-base)","contestFontStyle":"var(--lia-default-message-link-font-style)","contestMessageLinkColor":"var(--lia-default-message-link-color)","contestMessageLinkDecoration":"var(--lia-default-message-link-decoration)","contestMessageLinkFontStyle":"ITALIC","contestMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","occasionColor":"#D13A1F","occasionFontFamily":"var(--lia-bs-font-family-base)","occasionFontWeight":"var(--lia-default-message-font-weight)","occasionLineHeight":"var(--lia-bs-line-height-base)","occasionFontStyle":"var(--lia-default-message-font-style)","occasionMessageLinkColor":"var(--lia-default-message-link-color)","occasionMessageLinkDecoration":"var(--lia-default-message-link-decoration)","occasionMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","occasionMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","grouphubColor":"#333333","categoryColor":"#949494","communityColor":"#FFFFFF","productColor":"#949494","__typename":"CoreTypesThemeSettings"},"colors":{"black":"#000000","white":"#FFFFFF","gray100":"#F7F7F7","gray200":"#F7F7F7","gray300":"#E8E8E8","gray400":"#D9D9D9","gray500":"#CCCCCC","gray600":"#717171","gray700":"#707070","gray800":"#545454","gray900":"#333333","dark":"#545454","light":"#F7F7F7","primary":"#0069D4","secondary":"#333333","bodyText":"#1E1E1E","bodyBg":"#FFFFFF","info":"#409AE2","success":"#41C5AE","warning":"#FCC844","danger":"#BC341B","alertSystem":"#FF6600","textMuted":"#707070","highlight":"#FFFCAD","outline":"var(--lia-bs-primary)","custom":["#D3F5A4","#243A5E"],"__typename":"ColorsThemeSettings"},"divider":{"size":"3px","marginLeft":"4px","marginRight":"4px","borderRadius":"50%","bgColor":"var(--lia-bs-gray-600)","bgColorActive":"var(--lia-bs-gray-600)","__typename":"DividerThemeSettings"},"dropdown":{"fontSize":"var(--lia-bs-font-size-sm)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius-sm)","dividerBg":"var(--lia-bs-gray-300)","itemPaddingY":"5px","itemPaddingX":"20px","headerColor":"var(--lia-bs-gray-700)","__typename":"DropdownThemeSettings"},"email":{"link":{"color":"#0069D4","hoverColor":"#0061c2","decoration":"none","hoverDecoration":"underline","__typename":"EmailLinkSettings"},"border":{"color":"#e4e4e4","__typename":"EmailBorderSettings"},"buttons":{"borderRadiusLg":"5px","paddingXLg":"16px","paddingYLg":"7px","fontWeight":"700","primaryTextColor":"#ffffff","primaryTextHoverColor":"#ffffff","primaryBgColor":"#0069D4","primaryBgHoverColor":"#005cb8","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","__typename":"EmailButtonsSettings"},"panel":{"borderRadius":"5px","borderColor":"#e4e4e4","__typename":"EmailPanelSettings"},"__typename":"EmailThemeSettings"},"emoji":{"skinToneDefault":"#ffcd43","skinToneLight":"#fae3c5","skinToneMediumLight":"#e2cfa5","skinToneMedium":"#daa478","skinToneMediumDark":"#a78058","skinToneDark":"#5e4d43","__typename":"EmojiThemeSettings"},"heading":{"color":"var(--lia-bs-body-color)","fontFamily":"Segoe UI","fontStyle":"NORMAL","fontWeight":"400","h1FontSize":"34px","h2FontSize":"32px","h3FontSize":"28px","h4FontSize":"24px","h5FontSize":"20px","h6FontSize":"16px","lineHeight":"1.3","subHeaderFontSize":"11px","subHeaderFontWeight":"500","h1LetterSpacing":"normal","h2LetterSpacing":"normal","h3LetterSpacing":"normal","h4LetterSpacing":"normal","h5LetterSpacing":"normal","h6LetterSpacing":"normal","subHeaderLetterSpacing":"2px","h1FontWeight":"var(--lia-bs-headings-font-weight)","h2FontWeight":"var(--lia-bs-headings-font-weight)","h3FontWeight":"var(--lia-bs-headings-font-weight)","h4FontWeight":"var(--lia-bs-headings-font-weight)","h5FontWeight":"var(--lia-bs-headings-font-weight)","h6FontWeight":"var(--lia-bs-headings-font-weight)","__typename":"HeadingThemeSettings"},"icons":{"size10":"10px","size12":"12px","size14":"14px","size16":"16px","size20":"20px","size24":"24px","size30":"30px","size40":"40px","size50":"50px","size60":"60px","size80":"80px","size120":"120px","size160":"160px","__typename":"IconsThemeSettings"},"imagePreview":{"bgColor":"var(--lia-bs-gray-900)","titleColor":"var(--lia-bs-white)","controlColor":"var(--lia-bs-white)","controlBgColor":"var(--lia-bs-gray-800)","__typename":"ImagePreviewThemeSettings"},"input":{"borderColor":"var(--lia-bs-gray-600)","disabledColor":"var(--lia-bs-gray-600)","focusBorderColor":"var(--lia-bs-primary)","labelMarginBottom":"10px","btnFontSize":"var(--lia-bs-font-size-sm)","focusBoxShadow":"0 0 0 3px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","checkLabelMarginBottom":"2px","checkboxBorderRadius":"3px","borderRadiusSm":"var(--lia-bs-border-radius-sm)","borderRadius":"var(--lia-bs-border-radius)","borderRadiusLg":"var(--lia-bs-border-radius-lg)","formTextMarginTop":"4px","textAreaBorderRadius":"var(--lia-bs-border-radius)","activeFillColor":"var(--lia-bs-primary)","__typename":"InputThemeSettings"},"loading":{"dotDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.2)","dotLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.5)","barDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.06)","barLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.4)","__typename":"LoadingThemeSettings"},"link":{"color":"var(--lia-bs-primary)","hoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) - 10%))","decoration":"none","hoverDecoration":"underline","__typename":"LinkThemeSettings"},"listGroup":{"itemPaddingY":"15px","itemPaddingX":"15px","borderColor":"var(--lia-bs-gray-300)","__typename":"ListGroupThemeSettings"},"modal":{"contentTextColor":"var(--lia-bs-body-color)","contentBg":"var(--lia-bs-white)","backgroundBg":"var(--lia-bs-black)","smSize":"440px","mdSize":"760px","lgSize":"1080px","backdropOpacity":0.3,"contentBoxShadowXs":"var(--lia-bs-box-shadow-sm)","contentBoxShadow":"var(--lia-bs-box-shadow)","headerFontWeight":"700","__typename":"ModalThemeSettings"},"navbar":{"position":"FIXED","background":{"attachment":null,"clip":null,"color":"var(--lia-bs-white)","imageAssetName":"","imageLastModified":"0","origin":null,"position":"CENTER_CENTER","repeat":"NO_REPEAT","size":"COVER","__typename":"BackgroundProps"},"backgroundOpacity":0.8,"paddingTop":"15px","paddingBottom":"15px","borderBottom":"1px solid var(--lia-bs-border-color)","boxShadow":"var(--lia-bs-box-shadow-sm)","brandMarginRight":"30px","brandMarginRightSm":"10px","brandLogoHeight":"30px","linkGap":"10px","linkJustifyContent":"flex-start","linkPaddingY":"5px","linkPaddingX":"10px","linkDropdownPaddingY":"9px","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkColor":"var(--lia-bs-body-color)","linkHoverColor":"var(--lia-bs-primary)","linkFontSize":"var(--lia-bs-font-size-sm)","linkFontStyle":"NORMAL","linkFontWeight":"400","linkTextTransform":"NONE","linkLetterSpacing":"normal","linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkBgColor":"transparent","linkBgHoverColor":"transparent","linkBorder":"none","linkBorderHover":"none","linkBoxShadow":"none","linkBoxShadowHover":"none","linkTextBorderBottom":"none","linkTextBorderBottomHover":"none","dropdownPaddingTop":"10px","dropdownPaddingBottom":"15px","dropdownPaddingX":"10px","dropdownMenuOffset":"2px","dropdownDividerMarginTop":"10px","dropdownDividerMarginBottom":"10px","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","controllerIconColor":"var(--lia-bs-body-color)","controllerIconHoverColor":"var(--lia-bs-body-color)","controllerTextColor":"var(--lia-nav-controller-icon-color)","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","controllerHighlightColor":"hsla(30, 100%, 50%)","controllerHighlightTextColor":"var(--lia-yiq-light)","controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerColor":"var(--lia-nav-controller-icon-color)","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","hamburgerBgColor":"transparent","hamburgerBgHoverColor":"transparent","hamburgerBorder":"none","hamburgerBorderHover":"none","collapseMenuMarginLeft":"20px","collapseMenuDividerBg":"var(--lia-nav-link-color)","collapseMenuDividerOpacity":0.16,"__typename":"NavbarThemeSettings"},"pager":{"textColor":"var(--lia-bs-link-color)","textFontWeight":"var(--lia-font-weight-md)","textFontSize":"var(--lia-bs-font-size-sm)","__typename":"PagerThemeSettings"},"panel":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-bs-border-radius)","borderColor":"var(--lia-bs-border-color)","boxShadow":"none","__typename":"PanelThemeSettings"},"popover":{"arrowHeight":"8px","arrowWidth":"16px","maxWidth":"300px","minWidth":"100px","headerBg":"var(--lia-bs-white)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius)","boxShadow":"0 0.5rem 1rem hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.15)","__typename":"PopoverThemeSettings"},"prism":{"color":"#000000","bgColor":"#f5f2f0","fontFamily":"var(--font-family-monospace)","fontSize":"var(--lia-bs-font-size-base)","fontWeightBold":"var(--lia-bs-font-weight-bold)","fontStyleItalic":"italic","tabSize":2,"highlightColor":"#b3d4fc","commentColor":"#62707e","punctuationColor":"#6f6f6f","namespaceOpacity":"0.7","propColor":"#990055","selectorColor":"#517a00","operatorColor":"#906736","operatorBgColor":"hsla(0, 0%, 100%, 0.5)","keywordColor":"#0076a9","functionColor":"#d3284b","variableColor":"#c14700","__typename":"PrismThemeSettings"},"rte":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":" var(--lia-panel-box-shadow)","customColor1":"#bfedd2","customColor2":"#fbeeb8","customColor3":"#f8cac6","customColor4":"#eccafa","customColor5":"#c2e0f4","customColor6":"#2dc26b","customColor7":"#f1c40f","customColor8":"#e03e2d","customColor9":"#b96ad9","customColor10":"#3598db","customColor11":"#169179","customColor12":"#e67e23","customColor13":"#ba372a","customColor14":"#843fa1","customColor15":"#236fa1","customColor16":"#ecf0f1","customColor17":"#ced4d9","customColor18":"#95a5a6","customColor19":"#7e8c8d","customColor20":"#34495e","customColor21":"#000000","customColor22":"#ffffff","defaultMessageHeaderMarginTop":"40px","defaultMessageHeaderMarginBottom":"20px","defaultMessageItemMarginTop":"0","defaultMessageItemMarginBottom":"10px","diffAddedColor":"hsla(170, 53%, 51%, 0.4)","diffChangedColor":"hsla(43, 97%, 63%, 0.4)","diffNoneColor":"hsla(0, 0%, 80%, 0.4)","diffRemovedColor":"hsla(9, 74%, 47%, 0.4)","specialMessageHeaderMarginTop":"40px","specialMessageHeaderMarginBottom":"20px","specialMessageItemMarginTop":"0","specialMessageItemMarginBottom":"10px","__typename":"RteThemeSettings"},"tags":{"bgColor":"var(--lia-bs-gray-200)","bgHoverColor":"var(--lia-bs-gray-400)","borderRadius":"var(--lia-bs-border-radius-sm)","color":"var(--lia-bs-body-color)","hoverColor":"var(--lia-bs-body-color)","fontWeight":"var(--lia-font-weight-md)","fontSize":"var(--lia-font-size-xxs)","textTransform":"UPPERCASE","letterSpacing":"0.5px","__typename":"TagsThemeSettings"},"toasts":{"borderRadius":"var(--lia-bs-border-radius)","paddingX":"12px","__typename":"ToastsThemeSettings"},"typography":{"fontFamilyBase":"Segoe UI","fontStyleBase":"NORMAL","fontWeightBase":"400","fontWeightLight":"300","fontWeightNormal":"400","fontWeightMd":"500","fontWeightBold":"700","letterSpacingSm":"normal","letterSpacingXs":"normal","lineHeightBase":"1.5","fontSizeBase":"16px","fontSizeXxs":"11px","fontSizeXs":"12px","fontSizeSm":"14px","fontSizeLg":"20px","fontSizeXl":"24px","smallFontSize":"14px","customFonts":[{"source":"SERVER","name":"Segoe UI","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"},{"style":"NORMAL","weight":"300","__typename":"FontStyleData"},{"style":"NORMAL","weight":"600","__typename":"FontStyleData"},{"style":"NORMAL","weight":"700","__typename":"FontStyleData"},{"style":"ITALIC","weight":"400","__typename":"FontStyleData"}],"assetNames":["SegoeUI-normal-400.woff2","SegoeUI-normal-300.woff2","SegoeUI-normal-600.woff2","SegoeUI-normal-700.woff2","SegoeUI-italic-400.woff2"],"__typename":"CustomFont"},{"source":"SERVER","name":"MWF Fluent Icons","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"}],"assetNames":["MWFFluentIcons-normal-400.woff2"],"__typename":"CustomFont"}],"__typename":"TypographyThemeSettings"},"unstyledListItem":{"marginBottomSm":"5px","marginBottomMd":"10px","marginBottomLg":"15px","marginBottomXl":"20px","marginBottomXxl":"25px","__typename":"UnstyledListItemThemeSettings"},"yiq":{"light":"#ffffff","dark":"#000000","__typename":"YiqThemeSettings"},"colorLightness":{"primaryDark":0.36,"primaryLight":0.74,"primaryLighter":0.89,"primaryLightest":0.95,"infoDark":0.39,"infoLight":0.72,"infoLighter":0.85,"infoLightest":0.93,"successDark":0.24,"successLight":0.62,"successLighter":0.8,"successLightest":0.91,"warningDark":0.39,"warningLight":0.68,"warningLighter":0.84,"warningLightest":0.93,"dangerDark":0.41,"dangerLight":0.72,"dangerLighter":0.89,"dangerLightest":0.95,"__typename":"ColorLightnessThemeSettings"},"localOverride":false,"__typename":"Theme"},"localOverride":false},"CachedAsset:text:en_US-components/common/EmailVerification-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1745505309835","value":{"email.verification.title":"Email Verification Required","email.verification.message.update.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. To change your email, visit My Settings.","email.verification.message.resend.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. Resend email."},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1745505309835","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:quilt:o365.prod:pages/blogs/BlogMessagePage:board:SAPApplications-1745502712900":{"__typename":"CachedAsset","id":"quilt:o365.prod:pages/blogs/BlogMessagePage:board:SAPApplications-1745502712900","value":{"id":"BlogMessagePage","container":{"id":"Common","headerProps":{"backgroundImageProps":null,"backgroundColor":null,"addComponents":null,"removeComponents":["community.widget.bannerWidget"],"componentOrder":null,"__typename":"QuiltContainerSectionProps"},"headerComponentProps":{"community.widget.breadcrumbWidget":{"disableLastCrumbForDesktop":false}},"footerProps":null,"footerComponentProps":null,"items":[{"id":"blog-article","layout":"ONE_COLUMN","bgColor":null,"showTitle":null,"showDescription":null,"textPosition":null,"textColor":null,"sectionEditLevel":"LOCKED","bgImage":null,"disableSpacing":null,"edgeToEdgeDisplay":null,"fullHeight":null,"showBorder":null,"__typename":"OneColumnQuiltSection","columnMap":{"main":[{"id":"blogs.widget.blogArticleWidget","className":"lia-blog-container","props":null,"__typename":"QuiltComponent"}],"__typename":"OneSectionColumns"}},{"id":"section-1729184836777","layout":"MAIN_SIDE","bgColor":"transparent","showTitle":false,"showDescription":false,"textPosition":"CENTER","textColor":"var(--lia-bs-body-color)","sectionEditLevel":null,"bgImage":null,"disableSpacing":null,"edgeToEdgeDisplay":null,"fullHeight":null,"showBorder":null,"__typename":"MainSideQuiltSection","columnMap":{"main":[],"side":[],"__typename":"MainSideSectionColumns"}}],"__typename":"QuiltContainer"},"__typename":"Quilt","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-pages/blogs/BlogMessagePage-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-pages/blogs/BlogMessagePage-1745505309835","value":{"title":"{contextMessageSubject} | {communityTitle}","errorMissing":"This blog post cannot be found","name":"Blog Message Page","section.blog-article.title":"Blog Post","archivedMessageTitle":"This Content Has Been Archived","section.section-1729184836777.title":"","section.section-1729184836777.description":"","section.CncIde.title":"Blog Post","section.tifEmD.description":"","section.tifEmD.title":""},"localOverride":false},"CachedAsset:quiltWrapper:o365.prod:Common:1745505310842":{"__typename":"CachedAsset","id":"quiltWrapper:o365.prod:Common:1745505310842","value":{"id":"Common","header":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"community.widget.navbarWidget","props":{"showUserName":true,"showRegisterLink":true,"useIconLanguagePicker":true,"useLabelLanguagePicker":true,"className":"QuiltComponent_lia-component-edit-mode__0nCcm","links":{"sideLinks":[],"mainLinks":[{"children":[],"linkType":"INTERNAL","id":"gxcuf89792","params":{},"routeName":"CommunityPage"},{"children":[],"linkType":"EXTERNAL","id":"external-link","url":"/Directory","target":"SELF"},{"children":[{"linkType":"INTERNAL","id":"microsoft365","params":{"categoryId":"microsoft365"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"windows","params":{"categoryId":"Windows"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"Common-microsoft365-copilot-link","params":{"categoryId":"Microsoft365Copilot"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-teams","params":{"categoryId":"MicrosoftTeams"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-securityand-compliance","params":{"categoryId":"microsoft-security"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"azure","params":{"categoryId":"Azure"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"Common-content_management-link","params":{"categoryId":"Content_Management"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"exchange","params":{"categoryId":"Exchange"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"windows-server","params":{"categoryId":"Windows-Server"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"outlook","params":{"categoryId":"Outlook"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-endpoint-manager","params":{"categoryId":"microsoftintune"},"routeName":"CategoryPage"},{"linkType":"EXTERNAL","id":"external-link-2","url":"/Directory","target":"SELF"}],"linkType":"EXTERNAL","id":"communities","url":"/","target":"BLANK"},{"children":[{"linkType":"INTERNAL","id":"a-i","params":{"categoryId":"AI"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"education-sector","params":{"categoryId":"EducationSector"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"partner-community","params":{"categoryId":"PartnerCommunity"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"i-t-ops-talk","params":{"categoryId":"ITOpsTalk"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"healthcare-and-life-sciences","params":{"categoryId":"HealthcareAndLifeSciences"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-mechanics","params":{"categoryId":"MicrosoftMechanics"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"public-sector","params":{"categoryId":"PublicSector"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"s-m-b","params":{"categoryId":"MicrosoftforNonprofits"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"io-t","params":{"categoryId":"IoT"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"startupsat-microsoft","params":{"categoryId":"StartupsatMicrosoft"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"driving-adoption","params":{"categoryId":"DrivingAdoption"},"routeName":"CategoryPage"},{"linkType":"EXTERNAL","id":"external-link-1","url":"/Directory","target":"SELF"}],"linkType":"EXTERNAL","id":"communities-1","url":"/","target":"SELF"},{"children":[],"linkType":"EXTERNAL","id":"external","url":"/Blogs","target":"SELF"},{"children":[],"linkType":"EXTERNAL","id":"external-1","url":"/Events","target":"SELF"},{"children":[{"linkType":"INTERNAL","id":"microsoft-learn-1","params":{"categoryId":"MicrosoftLearn"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-learn-blog","params":{"boardId":"MicrosoftLearnBlog","categoryId":"MicrosoftLearn"},"routeName":"BlogBoardPage"},{"linkType":"EXTERNAL","id":"external-10","url":"https://learningroomdirectory.microsoft.com/","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-3","url":"https://docs.microsoft.com/learn/dynamics365/?WT.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-4","url":"https://docs.microsoft.com/learn/m365/?wt.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-5","url":"https://docs.microsoft.com/learn/topics/sci/?wt.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-6","url":"https://docs.microsoft.com/learn/powerplatform/?wt.mc_id=techcom_header-webpage-powerplatform","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-7","url":"https://docs.microsoft.com/learn/github/?wt.mc_id=techcom_header-webpage-github","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-8","url":"https://docs.microsoft.com/learn/teams/?wt.mc_id=techcom_header-webpage-teams","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-9","url":"https://docs.microsoft.com/learn/dotnet/?wt.mc_id=techcom_header-webpage-dotnet","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-2","url":"https://docs.microsoft.com/learn/azure/?WT.mc_id=techcom_header-webpage-m365","target":"BLANK"}],"linkType":"INTERNAL","id":"microsoft-learn","params":{"categoryId":"MicrosoftLearn"},"routeName":"CategoryPage"},{"children":[],"linkType":"INTERNAL","id":"community-info-center","params":{"categoryId":"Community-Info-Center"},"routeName":"CategoryPage"}]},"style":{"boxShadow":"var(--lia-bs-box-shadow-sm)","controllerHighlightColor":"hsla(30, 100%, 50%)","linkFontWeight":"400","dropdownDividerMarginBottom":"10px","hamburgerBorderHover":"none","linkBoxShadowHover":"none","linkFontSize":"14px","backgroundOpacity":0.8,"controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerBgColor":"transparent","hamburgerColor":"var(--lia-nav-controller-icon-color)","linkTextBorderBottom":"none","brandLogoHeight":"30px","linkBgHoverColor":"transparent","linkLetterSpacing":"normal","collapseMenuDividerOpacity":0.16,"dropdownPaddingBottom":"15px","paddingBottom":"15px","dropdownMenuOffset":"2px","hamburgerBgHoverColor":"transparent","borderBottom":"1px solid var(--lia-bs-border-color)","hamburgerBorder":"none","dropdownPaddingX":"10px","brandMarginRightSm":"10px","linkBoxShadow":"none","collapseMenuDividerBg":"var(--lia-nav-link-color)","linkColor":"var(--lia-bs-body-color)","linkJustifyContent":"flex-start","dropdownPaddingTop":"10px","controllerHighlightTextColor":"var(--lia-yiq-dark)","controllerTextColor":"var(--lia-nav-controller-icon-color)","background":{"imageAssetName":"","color":"var(--lia-bs-white)","size":"COVER","repeat":"NO_REPEAT","position":"CENTER_CENTER","imageLastModified":""},"linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkHoverColor":"var(--lia-bs-body-color)","position":"FIXED","linkBorder":"none","linkTextBorderBottomHover":"2px solid var(--lia-bs-body-color)","brandMarginRight":"30px","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","linkBorderHover":"none","collapseMenuMarginLeft":"20px","linkFontStyle":"NORMAL","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","linkPaddingX":"10px","linkPaddingY":"5px","paddingTop":"15px","linkTextTransform":"NONE","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","linkBgColor":"transparent","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkDropdownPaddingY":"9px","controllerIconColor":"var(--lia-bs-body-color)","dropdownDividerMarginTop":"10px","linkGap":"10px","controllerIconHoverColor":"var(--lia-bs-body-color)"},"showSearchIcon":false,"languagePickerStyle":"iconAndLabel"},"__typename":"QuiltComponent"},{"id":"community.widget.breadcrumbWidget","props":{"backgroundColor":"transparent","linkHighlightColor":"var(--lia-bs-primary)","visualEffects":{"showBottomBorder":true},"linkTextColor":"var(--lia-bs-gray-700)"},"__typename":"QuiltComponent"},{"id":"custom.widget.community_banner","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"usePageWidth":false,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.HeroBanner","props":{"widgetVisibility":"signedInOrAnonymous","usePageWidth":false,"useTitle":true,"cMax_items":3,"useBackground":false,"title":"","lazyLoad":false,"widgetChooser":"custom.widget.HeroBanner"},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"footer":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"custom.widget.MicrosoftFooter","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"__typename":"QuiltWrapper","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-components/common/ActionFeedback-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1745505309835","value":{"joinedGroupHub.title":"Welcome","joinedGroupHub.message":"You are now a member of this group and are subscribed to updates.","groupHubInviteNotFound.title":"Invitation Not Found","groupHubInviteNotFound.message":"Sorry, we could not find your invitation to the group. The owner may have canceled the invite.","groupHubNotFound.title":"Group Not Found","groupHubNotFound.message":"The grouphub you tried to join does not exist. It may have been deleted.","existingGroupHubMember.title":"Already Joined","existingGroupHubMember.message":"You are already a member of this group.","accountLocked.title":"Account Locked","accountLocked.message":"Your account has been locked due to multiple failed attempts. Try again in {lockoutTime} minutes.","editedGroupHub.title":"Changes Saved","editedGroupHub.message":"Your group has been updated.","leftGroupHub.title":"Goodbye","leftGroupHub.message":"You are no longer a member of this group and will not receive future updates.","deletedGroupHub.title":"Deleted","deletedGroupHub.message":"The group has been deleted.","groupHubCreated.title":"Group Created","groupHubCreated.message":"{groupHubName} is ready to use","accountClosed.title":"Account Closed","accountClosed.message":"The account has been closed and you will now be redirected to the homepage","resetTokenExpired.title":"Reset Password Link has Expired","resetTokenExpired.message":"Try resetting your password again","invalidUrl.title":"Invalid URL","invalidUrl.message":"The URL you're using is not recognized. Verify your URL and try again.","accountClosedForUser.title":"Account Closed","accountClosedForUser.message":"{userName}'s account is closed","inviteTokenInvalid.title":"Invitation Invalid","inviteTokenInvalid.message":"Your invitation to the community has been canceled or expired.","inviteTokenError.title":"Invitation Verification Failed","inviteTokenError.message":"The url you are utilizing is not recognized. Verify your URL and try again","pageNotFound.title":"Access Denied","pageNotFound.message":"You do not have access to this area of the community or it doesn't exist","eventAttending.title":"Responded as Attending","eventAttending.message":"You'll be notified when there's new activity and reminded as the event approaches","eventInterested.title":"Responded as Interested","eventInterested.message":"You'll be notified when there's new activity and reminded as the event approaches","eventNotFound.title":"Event Not Found","eventNotFound.message":"The event you tried to respond to does not exist.","redirectToRelatedPage.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.message":"The content you are trying to access is archived","redirectToRelatedPage.message":"The content you are trying to access is archived","relatedUrl.archivalLink.flyoutMessage":"The content you are trying to access is archived View Archived Content"},"localOverride":false},"CachedAsset:component:custom.widget.community_banner-en-1744400827853":{"__typename":"CachedAsset","id":"component:custom.widget.community_banner-en-1744400827853","value":{"component":{"id":"custom.widget.community_banner","template":{"id":"community_banner","markupLanguage":"HANDLEBARS","style":".community-banner {\n a.top-bar.btn {\n top: 0px;\n width: 100%;\n z-index: 999;\n text-align: center;\n left: 0px;\n background: #0068b8;\n color: white;\n padding: 10px 0px;\n display: block;\n box-shadow: none !important;\n border: none !important;\n border-radius: none !important;\n margin: 0px !important;\n font-size: 14px;\n }\n}\n","texts":null,"defaults":{"config":{"applicablePages":[],"description":"community announcement text","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.community_banner","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"community announcement text","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_community_banner_community-banner_1x9u2_1 {\n a.custom_widget_community_banner_top-bar_1x9u2_2.custom_widget_community_banner_btn_1x9u2_2 {\n top: 0;\n width: 100%;\n z-index: 999;\n text-align: center;\n left: 0;\n background: #0068b8;\n color: white;\n padding: 0.625rem 0;\n display: block;\n box-shadow: none !important;\n border: none !important;\n border-radius: none !important;\n margin: 0 !important;\n font-size: 0.875rem;\n }\n}\n","tokens":{"community-banner":"custom_widget_community_banner_community-banner_1x9u2_1","top-bar":"custom_widget_community_banner_top-bar_1x9u2_2","btn":"custom_widget_community_banner_btn_1x9u2_2"}},"form":null},"localOverride":false},"CachedAsset:component:custom.widget.HeroBanner-en-1744400827853":{"__typename":"CachedAsset","id":"component:custom.widget.HeroBanner-en-1744400827853","value":{"component":{"id":"custom.widget.HeroBanner","template":{"id":"HeroBanner","markupLanguage":"REACT","style":null,"texts":{"searchPlaceholderText":"Search this community","followActionText":"Follow","unfollowActionText":"Following","searchOnHoverText":"Please enter your search term(s) and then press return key to complete a search.","blogs.sidebar.pagetitle":"Latest Blogs | Microsoft Tech Community","followThisNode":"Follow this node","unfollowThisNode":"Unfollow this node"},"defaults":{"config":{"applicablePages":[],"description":null,"fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[{"id":"max_items","dataType":"NUMBER","list":false,"defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"control":"INPUT","__typename":"PropDefinition"}],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.HeroBanner","form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"},"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":null,"fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[{"id":"max_items","dataType":"NUMBER","list":false,"defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"control":"INPUT","__typename":"PropDefinition"}],"__typename":"ComponentProperties"},"form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"},"__typename":"Component","localOverride":false},"globalCss":null,"form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"}},"localOverride":false},"CachedAsset:component:custom.widget.MicrosoftFooter-en-1744400827853":{"__typename":"CachedAsset","id":"component:custom.widget.MicrosoftFooter-en-1744400827853","value":{"component":{"id":"custom.widget.MicrosoftFooter","template":{"id":"MicrosoftFooter","markupLanguage":"HANDLEBARS","style":".context-uhf {\n min-width: 280px;\n font-size: 15px;\n box-sizing: border-box;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n & *,\n & *:before,\n & *:after {\n box-sizing: inherit;\n }\n a.c-uhff-link {\n color: #616161;\n word-break: break-word;\n text-decoration: none;\n }\n &a:link,\n &a:focus,\n &a:hover,\n &a:active,\n &a:visited {\n text-decoration: none;\n color: inherit;\n }\n & div {\n font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n }\n}\n.c-uhff {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.c-uhff-nav {\n margin: 0 auto;\n max-width: calc(1600px + 10%);\n padding: 0 5%;\n box-sizing: inherit;\n &:before,\n &:after {\n content: ' ';\n display: table;\n clear: left;\n }\n @media only screen and (max-width: 1083px) {\n padding-left: 12px;\n }\n .c-heading-4 {\n color: #616161;\n word-break: break-word;\n font-size: 15px;\n line-height: 20px;\n padding: 36px 0 4px;\n font-weight: 600;\n }\n .c-uhff-nav-row {\n .c-uhff-nav-group {\n display: block;\n float: left;\n min-height: 1px;\n vertical-align: text-top;\n padding: 0 12px;\n width: 100%;\n zoom: 1;\n &:first-child {\n padding-left: 0;\n @media only screen and (max-width: 1083px) {\n padding-left: 12px;\n }\n }\n @media only screen and (min-width: 540px) and (max-width: 1082px) {\n width: 33.33333%;\n }\n @media only screen and (min-width: 1083px) {\n width: 16.6666666667%;\n }\n ul.c-list.f-bare {\n font-size: 11px;\n line-height: 16px;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n list-style-type: none;\n li {\n word-break: break-word;\n padding: 8px 0;\n margin: 0;\n }\n }\n }\n }\n}\n.c-uhff-base {\n background: #f2f2f2;\n margin: 0 auto;\n max-width: calc(1600px + 10%);\n padding: 30px 5% 16px;\n &:before,\n &:after {\n content: ' ';\n display: table;\n }\n &:after {\n clear: both;\n }\n a.c-uhff-ccpa {\n font-size: 11px;\n line-height: 16px;\n float: left;\n margin: 3px 0;\n }\n a.c-uhff-ccpa:hover {\n text-decoration: underline;\n }\n ul.c-list {\n font-size: 11px;\n line-height: 16px;\n float: right;\n margin: 3px 0;\n color: #616161;\n li {\n padding: 0 24px 4px 0;\n display: inline-block;\n }\n }\n .c-list.f-bare {\n padding-left: 0;\n list-style-type: none;\n }\n @media only screen and (max-width: 1083px) {\n display: flex;\n flex-wrap: wrap;\n padding: 30px 24px 16px;\n }\n}\n\n.social-share {\n position: fixed;\n top: 60%;\n transform: translateY(-50%);\n left: 0;\n z-index: 1000;\n}\n\n.sharing-options {\n list-style: none;\n padding: 0;\n margin: 0;\n display: block;\n flex-direction: column;\n background-color: white;\n width: 43px;\n border-radius: 0px 7px 7px 0px;\n}\n.linkedin-icon {\n border-top-right-radius: 7px;\n}\n.linkedin-icon:hover {\n border-radius: 0;\n}\n.social-share-rss-image {\n border-bottom-right-radius: 7px;\n}\n.social-share-rss-image:hover {\n border-radius: 0;\n}\n\n.social-link-footer {\n position: relative;\n display: block;\n margin: -2px 0;\n transition: all 0.2s ease;\n}\n.social-link-footer:hover .linkedin-icon {\n border-radius: 0;\n}\n.social-link-footer:hover .social-share-rss-image {\n border-radius: 0;\n}\n\n.social-link-footer img {\n width: 40px;\n height: auto;\n transition: filter 0.3s ease;\n}\n\n.social-share-list {\n width: 40px;\n}\n.social-share-rss-image {\n width: 40px;\n}\n\n.share-icon {\n border: 2px solid transparent;\n display: inline-block;\n position: relative;\n}\n\n.share-icon:hover {\n opacity: 1;\n border: 2px solid white;\n box-sizing: border-box;\n}\n\n.share-icon:hover .label {\n opacity: 1;\n visibility: visible;\n border: 2px solid white;\n box-sizing: border-box;\n border-left: none;\n}\n\n.label {\n position: absolute;\n left: 100%;\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s ease;\n color: white;\n border-radius: 0 10 0 10px;\n top: 50%;\n transform: translateY(-50%);\n height: 40px;\n border-radius: 0 6px 6px 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 5px 20px 8px;\n margin-left: -1px;\n}\n.linkedin {\n background-color: #0474b4;\n}\n.facebook {\n background-color: #3c5c9c;\n}\n.twitter {\n background-color: white;\n color: black;\n}\n.reddit {\n background-color: #fc4404;\n}\n.mail {\n background-color: #848484;\n}\n.bluesky {\n background-color: white;\n color: black;\n}\n.rss {\n background-color: #ec7b1c;\n}\n#RSS {\n width: 40px;\n height: 40px;\n}\n\n@media (max-width: 991px) {\n .social-share {\n display: none;\n }\n}\n","texts":{"New tab":"What's New","New 1":"Surface Laptop Studio 2","New 2":"Surface Laptop Go 3","New 3":"Surface Pro 9","New 4":"Surface Laptop 5","New 5":"Surface Studio 2+","New 6":"Copilot in Windows","New 7":"Microsoft 365","New 8":"Windows 11 apps","Store tab":"Microsoft Store","Store 1":"Account Profile","Store 2":"Download Center","Store 3":"Microsoft Store Support","Store 4":"Returns","Store 5":"Order tracking","Store 6":"Certified Refurbished","Store 7":"Microsoft Store Promise","Store 8":"Flexible Payments","Education tab":"Education","Edu 1":"Microsoft in education","Edu 2":"Devices for education","Edu 3":"Microsoft Teams for Education","Edu 4":"Microsoft 365 Education","Edu 5":"How to buy for your school","Edu 6":"Educator Training and development","Edu 7":"Deals for students and parents","Edu 8":"Azure for students","Business tab":"Business","Bus 1":"Microsoft Cloud","Bus 2":"Microsoft Security","Bus 3":"Dynamics 365","Bus 4":"Microsoft 365","Bus 5":"Microsoft Power Platform","Bus 6":"Microsoft Teams","Bus 7":"Microsoft Industry","Bus 8":"Small Business","Developer tab":"Developer & IT","Dev 1":"Azure","Dev 2":"Developer Center","Dev 3":"Documentation","Dev 4":"Microsoft Learn","Dev 5":"Microsoft Tech Community","Dev 6":"Azure Marketplace","Dev 7":"AppSource","Dev 8":"Visual Studio","Company tab":"Company","Com 1":"Careers","Com 2":"About Microsoft","Com 3":"Company News","Com 4":"Privacy at Microsoft","Com 5":"Investors","Com 6":"Diversity and inclusion","Com 7":"Accessiblity","Com 8":"Sustainibility"},"defaults":{"config":{"applicablePages":[],"description":"The Microsoft Footer","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.MicrosoftFooter","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"The Microsoft Footer","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_MicrosoftFooter_context-uhf_105bp_1 {\n min-width: 17.5rem;\n font-size: 0.9375rem;\n box-sizing: border-box;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n & *,\n & *:before,\n & *:after {\n box-sizing: inherit;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-link_105bp_12 {\n color: #616161;\n word-break: break-word;\n text-decoration: none;\n }\n &a:link,\n &a:focus,\n &a:hover,\n &a:active,\n &a:visited {\n text-decoration: none;\n color: inherit;\n }\n & div {\n font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n }\n}\n.custom_widget_MicrosoftFooter_c-uhff_105bp_12 {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.custom_widget_MicrosoftFooter_c-uhff-nav_105bp_35 {\n margin: 0 auto;\n max-width: calc(100rem + 10%);\n padding: 0 5%;\n box-sizing: inherit;\n &:before,\n &:after {\n content: ' ';\n display: table;\n clear: left;\n }\n @media only screen and (max-width: 1083px) {\n padding-left: 0.75rem;\n }\n .custom_widget_MicrosoftFooter_c-heading-4_105bp_49 {\n color: #616161;\n word-break: break-word;\n font-size: 0.9375rem;\n line-height: 1.25rem;\n padding: 2.25rem 0 0.25rem;\n font-weight: 600;\n }\n .custom_widget_MicrosoftFooter_c-uhff-nav-row_105bp_57 {\n .custom_widget_MicrosoftFooter_c-uhff-nav-group_105bp_58 {\n display: block;\n float: left;\n min-height: 0.0625rem;\n vertical-align: text-top;\n padding: 0 0.75rem;\n width: 100%;\n zoom: 1;\n &:first-child {\n padding-left: 0;\n @media only screen and (max-width: 1083px) {\n padding-left: 0.75rem;\n }\n }\n @media only screen and (min-width: 540px) and (max-width: 1082px) {\n width: 33.33333%;\n }\n @media only screen and (min-width: 1083px) {\n width: 16.6666666667%;\n }\n ul.custom_widget_MicrosoftFooter_c-list_105bp_78.custom_widget_MicrosoftFooter_f-bare_105bp_78 {\n font-size: 0.6875rem;\n line-height: 1rem;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n list-style-type: none;\n li {\n word-break: break-word;\n padding: 0.5rem 0;\n margin: 0;\n }\n }\n }\n }\n}\n.custom_widget_MicrosoftFooter_c-uhff-base_105bp_94 {\n background: #f2f2f2;\n margin: 0 auto;\n max-width: calc(100rem + 10%);\n padding: 1.875rem 5% 1rem;\n &:before,\n &:after {\n content: ' ';\n display: table;\n }\n &:after {\n clear: both;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-ccpa_105bp_107 {\n font-size: 0.6875rem;\n line-height: 1rem;\n float: left;\n margin: 0.1875rem 0;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-ccpa_105bp_107:hover {\n text-decoration: underline;\n }\n ul.custom_widget_MicrosoftFooter_c-list_105bp_78 {\n font-size: 0.6875rem;\n line-height: 1rem;\n float: right;\n margin: 0.1875rem 0;\n color: #616161;\n li {\n padding: 0 1.5rem 0.25rem 0;\n display: inline-block;\n }\n }\n .custom_widget_MicrosoftFooter_c-list_105bp_78.custom_widget_MicrosoftFooter_f-bare_105bp_78 {\n padding-left: 0;\n list-style-type: none;\n }\n @media only screen and (max-width: 1083px) {\n display: flex;\n flex-wrap: wrap;\n padding: 1.875rem 1.5rem 1rem;\n }\n}\n.custom_widget_MicrosoftFooter_social-share_105bp_138 {\n position: fixed;\n top: 60%;\n transform: translateY(-50%);\n left: 0;\n z-index: 1000;\n}\n.custom_widget_MicrosoftFooter_sharing-options_105bp_146 {\n list-style: none;\n padding: 0;\n margin: 0;\n display: block;\n flex-direction: column;\n background-color: white;\n width: 2.6875rem;\n border-radius: 0 0.4375rem 0.4375rem 0;\n}\n.custom_widget_MicrosoftFooter_linkedin-icon_105bp_156 {\n border-top-right-radius: 7px;\n}\n.custom_widget_MicrosoftFooter_linkedin-icon_105bp_156:hover {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162 {\n border-bottom-right-radius: 7px;\n}\n.custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162:hover {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169 {\n position: relative;\n display: block;\n margin: -0.125rem 0;\n transition: all 0.2s ease;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169:hover .custom_widget_MicrosoftFooter_linkedin-icon_105bp_156 {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169:hover .custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162 {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169 img {\n width: 2.5rem;\n height: auto;\n transition: filter 0.3s ease;\n}\n.custom_widget_MicrosoftFooter_social-share-list_105bp_188 {\n width: 2.5rem;\n}\n.custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162 {\n width: 2.5rem;\n}\n.custom_widget_MicrosoftFooter_share-icon_105bp_195 {\n border: 2px solid transparent;\n display: inline-block;\n position: relative;\n}\n.custom_widget_MicrosoftFooter_share-icon_105bp_195:hover {\n opacity: 1;\n border: 2px solid white;\n box-sizing: border-box;\n}\n.custom_widget_MicrosoftFooter_share-icon_105bp_195:hover .custom_widget_MicrosoftFooter_label_105bp_207 {\n opacity: 1;\n visibility: visible;\n border: 2px solid white;\n box-sizing: border-box;\n border-left: none;\n}\n.custom_widget_MicrosoftFooter_label_105bp_207 {\n position: absolute;\n left: 100%;\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s ease;\n color: white;\n border-radius: 0 10 0 0.625rem;\n top: 50%;\n transform: translateY(-50%);\n height: 2.5rem;\n border-radius: 0 0.375rem 0.375rem 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.25rem 0.3125rem 1.25rem 0.5rem;\n margin-left: -0.0625rem;\n}\n.custom_widget_MicrosoftFooter_linkedin_105bp_156 {\n background-color: #0474b4;\n}\n.custom_widget_MicrosoftFooter_facebook_105bp_237 {\n background-color: #3c5c9c;\n}\n.custom_widget_MicrosoftFooter_twitter_105bp_240 {\n background-color: white;\n color: black;\n}\n.custom_widget_MicrosoftFooter_reddit_105bp_244 {\n background-color: #fc4404;\n}\n.custom_widget_MicrosoftFooter_mail_105bp_247 {\n background-color: #848484;\n}\n.custom_widget_MicrosoftFooter_bluesky_105bp_250 {\n background-color: white;\n color: black;\n}\n.custom_widget_MicrosoftFooter_rss_105bp_254 {\n background-color: #ec7b1c;\n}\n#custom_widget_MicrosoftFooter_RSS_105bp_1 {\n width: 2.5rem;\n height: 2.5rem;\n}\n@media (max-width: 991px) {\n .custom_widget_MicrosoftFooter_social-share_105bp_138 {\n display: none;\n }\n}\n","tokens":{"context-uhf":"custom_widget_MicrosoftFooter_context-uhf_105bp_1","c-uhff-link":"custom_widget_MicrosoftFooter_c-uhff-link_105bp_12","c-uhff":"custom_widget_MicrosoftFooter_c-uhff_105bp_12","c-uhff-nav":"custom_widget_MicrosoftFooter_c-uhff-nav_105bp_35","c-heading-4":"custom_widget_MicrosoftFooter_c-heading-4_105bp_49","c-uhff-nav-row":"custom_widget_MicrosoftFooter_c-uhff-nav-row_105bp_57","c-uhff-nav-group":"custom_widget_MicrosoftFooter_c-uhff-nav-group_105bp_58","c-list":"custom_widget_MicrosoftFooter_c-list_105bp_78","f-bare":"custom_widget_MicrosoftFooter_f-bare_105bp_78","c-uhff-base":"custom_widget_MicrosoftFooter_c-uhff-base_105bp_94","c-uhff-ccpa":"custom_widget_MicrosoftFooter_c-uhff-ccpa_105bp_107","social-share":"custom_widget_MicrosoftFooter_social-share_105bp_138","sharing-options":"custom_widget_MicrosoftFooter_sharing-options_105bp_146","linkedin-icon":"custom_widget_MicrosoftFooter_linkedin-icon_105bp_156","social-share-rss-image":"custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162","social-link-footer":"custom_widget_MicrosoftFooter_social-link-footer_105bp_169","social-share-list":"custom_widget_MicrosoftFooter_social-share-list_105bp_188","share-icon":"custom_widget_MicrosoftFooter_share-icon_105bp_195","label":"custom_widget_MicrosoftFooter_label_105bp_207","linkedin":"custom_widget_MicrosoftFooter_linkedin_105bp_156","facebook":"custom_widget_MicrosoftFooter_facebook_105bp_237","twitter":"custom_widget_MicrosoftFooter_twitter_105bp_240","reddit":"custom_widget_MicrosoftFooter_reddit_105bp_244","mail":"custom_widget_MicrosoftFooter_mail_105bp_247","bluesky":"custom_widget_MicrosoftFooter_bluesky_105bp_250","rss":"custom_widget_MicrosoftFooter_rss_105bp_254","RSS":"custom_widget_MicrosoftFooter_RSS_105bp_1"}},"form":null},"localOverride":false},"CachedAsset:text:en_US-components/community/Breadcrumb-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1745505309835","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBanner-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBanner-1745505309835","value":{"messageMarkedAsSpam":"This post has been marked as spam","messageMarkedAsSpam@board:TKB":"This article has been marked as spam","messageMarkedAsSpam@board:BLOG":"This post has been marked as spam","messageMarkedAsSpam@board:FORUM":"This discussion has been marked as spam","messageMarkedAsSpam@board:OCCASION":"This event has been marked as spam","messageMarkedAsSpam@board:IDEA":"This idea has been marked as spam","manageSpam":"Manage Spam","messageMarkedAsAbuse":"This post has been marked as abuse","messageMarkedAsAbuse@board:TKB":"This article has been marked as abuse","messageMarkedAsAbuse@board:BLOG":"This post has been marked as abuse","messageMarkedAsAbuse@board:FORUM":"This discussion has been marked as abuse","messageMarkedAsAbuse@board:OCCASION":"This event has been marked as abuse","messageMarkedAsAbuse@board:IDEA":"This idea has been marked as abuse","preModCommentAuthorText":"This comment will be published as soon as it is approved","preModCommentModeratorText":"This comment is awaiting moderation","messageMarkedAsOther":"This post has been rejected due to other reasons","messageMarkedAsOther@board:TKB":"This article has been rejected due to other reasons","messageMarkedAsOther@board:BLOG":"This post has been rejected due to other reasons","messageMarkedAsOther@board:FORUM":"This discussion has been rejected due to other reasons","messageMarkedAsOther@board:OCCASION":"This event has been rejected due to other reasons","messageMarkedAsOther@board:IDEA":"This idea has been rejected due to other reasons","messageArchived":"This post was archived on {date}","relatedUrl":"View Related Content","relatedContentText":"Showing related content","archivedContentLink":"View Archived Content"},"localOverride":false},"Category:category:Exchange":{"__typename":"Category","id":"category:Exchange","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Outlook":{"__typename":"Category","id":"category:Outlook","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Community-Info-Center":{"__typename":"Category","id":"category:Community-Info-Center","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:EducationSector":{"__typename":"Category","id":"category:EducationSector","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:DrivingAdoption":{"__typename":"Category","id":"category:DrivingAdoption","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Azure":{"__typename":"Category","id":"category:Azure","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Windows-Server":{"__typename":"Category","id":"category:Windows-Server","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftTeams":{"__typename":"Category","id":"category:MicrosoftTeams","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:PublicSector":{"__typename":"Category","id":"category:PublicSector","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft365":{"__typename":"Category","id":"category:microsoft365","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:IoT":{"__typename":"Category","id":"category:IoT","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:HealthcareAndLifeSciences":{"__typename":"Category","id":"category:HealthcareAndLifeSciences","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:ITOpsTalk":{"__typename":"Category","id":"category:ITOpsTalk","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftLearn":{"__typename":"Category","id":"category:MicrosoftLearn","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Blog:board:MicrosoftLearnBlog":{"__typename":"Blog","id":"board:MicrosoftLearnBlog","blogPolicies":{"__typename":"BlogPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:AI":{"__typename":"Category","id":"category:AI","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftMechanics":{"__typename":"Category","id":"category:MicrosoftMechanics","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftforNonprofits":{"__typename":"Category","id":"category:MicrosoftforNonprofits","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:StartupsatMicrosoft":{"__typename":"Category","id":"category:StartupsatMicrosoft","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:PartnerCommunity":{"__typename":"Category","id":"category:PartnerCommunity","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Microsoft365Copilot":{"__typename":"Category","id":"category:Microsoft365Copilot","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Windows":{"__typename":"Category","id":"category:Windows","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Content_Management":{"__typename":"Category","id":"category:Content_Management","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft-security":{"__typename":"Category","id":"category:microsoft-security","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoftintune":{"__typename":"Category","id":"category:microsoftintune","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"QueryVariables:TopicReplyList:message:3905041:5":{"__typename":"QueryVariables","id":"TopicReplyList:message:3905041:5","value":{"id":"message:3905041","first":10,"sorts":{"postTime":{"direction":"DESC"}},"repliesFirst":3,"repliesFirstDepthThree":1,"repliesSorts":{"postTime":{"direction":"DESC"}},"useAvatar":true,"useAuthorLogin":true,"useAuthorRank":true,"useBody":true,"useKudosCount":true,"useTimeToRead":false,"useMedia":false,"useReadOnlyIcon":false,"useRepliesCount":true,"useSearchSnippet":false,"useAcceptedSolutionButton":false,"useSolvedBadge":false,"useAttachments":false,"attachmentsFirst":5,"useTags":true,"useNodeAncestors":false,"useUserHoverCard":false,"useNodeHoverCard":false,"useModerationStatus":true,"usePreviewSubjectModal":false,"useMessageStatus":true}},"ROOT_MUTATION":{"__typename":"Mutation"},"CachedAsset:text:en_US-components/community/Navbar-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1745505309835","value":{"community":"Community Home","inbox":"Inbox","manageContent":"Manage Content","tos":"Terms of Service","forgotPassword":"Forgot Password","themeEditor":"Theme Editor","edit":"Edit Navigation Bar","skipContent":"Skip to content","gxcuf89792":"Tech Community","external-1":"Events","s-m-b":"Nonprofit Community","windows-server":"Windows Server","education-sector":"Education Sector","driving-adoption":"Driving Adoption","Common-content_management-link":"Content Management","microsoft-learn":"Microsoft Learn","s-q-l-server":"Content Management","partner-community":"Microsoft Partner Community","microsoft365":"Microsoft 365","external-9":".NET","external-8":"Teams","external-7":"Github","products-services":"Products","external-6":"Power Platform","communities-1":"Topics","external-5":"Microsoft Security","planner":"Outlook","external-4":"Microsoft 365","external-3":"Dynamics 365","azure":"Azure","healthcare-and-life-sciences":"Healthcare and Life Sciences","external-2":"Azure","microsoft-mechanics":"Microsoft Mechanics","microsoft-learn-1":"Community","external-10":"Learning Room Directory","microsoft-learn-blog":"Blog","windows":"Windows","i-t-ops-talk":"ITOps Talk","external-link-1":"View All","microsoft-securityand-compliance":"Microsoft Security","public-sector":"Public Sector","community-info-center":"Lounge","external-link-2":"View All","microsoft-teams":"Microsoft Teams","external":"Blogs","microsoft-endpoint-manager":"Microsoft Intune","startupsat-microsoft":"Startups at Microsoft","exchange":"Exchange","a-i":"AI and Machine Learning","io-t":"Internet of Things (IoT)","Common-microsoft365-copilot-link":"Microsoft 365 Copilot","outlook":"Microsoft 365 Copilot","external-link":"Community Hubs","communities":"Products"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarHamburgerDropdown-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1745505309835","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1745505309835","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1745505309835","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1745505309835","value":{"title.login":"Sign In","title.registration":"Register","title.forgotPassword":"Forgot Password","title.multiAuthLogin":"Sign In"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeLink-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1745505309835","value":{"place":"Place {name}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewStandard-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewStandard-1745505309835","value":{"anonymous":"Anonymous","author":"{messageAuthorLogin}","authorBy":"{messageAuthorLogin}","board":"{messageBoardTitle}","replyToUser":" to {parentAuthor}","showMoreReplies":"Show More","replyText":"Reply","repliesText":"Replies","markedAsSolved":"Marked as Solved","movedMessagePlaceholder.BLOG":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.TKB":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.FORUM":"{count, plural, =0 {This reply has been} other {These replies have been} }","movedMessagePlaceholder.IDEA":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.OCCASION":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholderUrlText":"moved.","messageStatus":"Status: ","statusChanged":"Status changed: {previousStatus} to {currentStatus}","statusAdded":"Status added: {status}","statusRemoved":"Status removed: {status}","labelExpand":"expand replies","labelCollapse":"collapse replies","unhelpfulReason.reason1":"Content is outdated","unhelpfulReason.reason2":"Article is missing information","unhelpfulReason.reason3":"Content is for a different Product","unhelpfulReason.reason4":"Doesn't match what I was searching for"},"localOverride":false},"CachedAsset:text:en_US-components/messages/ThreadedReplyList-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/ThreadedReplyList-1745505309835","value":{"title":"{count, plural, one{# Reply} other{# Replies}}","title@board:BLOG":"{count, plural, one{# Comment} other{# Comments}}","title@board:TKB":"{count, plural, one{# Comment} other{# Comments}}","title@board:IDEA":"{count, plural, one{# Comment} other{# Comments}}","title@board:OCCASION":"{count, plural, one{# Comment} other{# Comments}}","noRepliesTitle":"No Replies","noRepliesTitle@board:BLOG":"No Comments","noRepliesTitle@board:TKB":"No Comments","noRepliesTitle@board:IDEA":"No Comments","noRepliesTitle@board:OCCASION":"No Comments","noRepliesDescription":"Be the first to reply","noRepliesDescription@board:BLOG":"Be the first to comment","noRepliesDescription@board:TKB":"Be the first to comment","noRepliesDescription@board:IDEA":"Be the first to comment","noRepliesDescription@board:OCCASION":"Be the first to comment","messageReadOnlyAlert:BLOG":"Comments have been turned off for this post","messageReadOnlyAlert:TKB":"Comments have been turned off for this article","messageReadOnlyAlert:IDEA":"Comments have been turned off for this idea","messageReadOnlyAlert:FORUM":"Replies have been turned off for this discussion","messageReadOnlyAlert:OCCASION":"Comments have been turned off for this event"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyCallToAction-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyCallToAction-1745505309835","value":{"leaveReply":"Leave a reply...","leaveReply@board:BLOG@message:root":"Leave a comment...","leaveReply@board:TKB@message:root":"Leave a comment...","leaveReply@board:IDEA@message:root":"Leave a comment...","leaveReply@board:OCCASION@message:root":"Leave a comment...","repliesTurnedOff.FORUM":"Replies are turned off for this topic","repliesTurnedOff.BLOG":"Comments are turned off for this topic","repliesTurnedOff.TKB":"Comments are turned off for this topic","repliesTurnedOff.IDEA":"Comments are turned off for this topic","repliesTurnedOff.OCCASION":"Comments are turned off for this topic","infoText":"Stop poking me!"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1745505309835","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1745505309835","value":{"title":"Query Handler"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageCoverImage-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageCoverImage-1745505309835","value":{"coverImageTitle":"Cover Image"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeTitle-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeTitle-1745505309835","value":{"nodeTitle":"{nodeTitle, select, community {Community} other {{nodeTitle}}} "},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTimeToRead-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTimeToRead-1745505309835","value":{"minReadText":"{min} MIN READ"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1745505309835","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1745505309835","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserRank-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserRank-1745505309835","value":{"rankName":"{rankName}","userRank":"Author rank {rankName}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTime-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTime-1745505309835","value":{"postTime":"Published: {time}","lastPublishTime":"Last Update: {time}","conversation.lastPostingActivityTime":"Last posting activity time: {time}","conversation.lastPostTime":"Last post time: {time}","moderationData.rejectTime":"Rejected time: {time}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1745505309835","value":{"showMessageBody":"Show More","mentionsErrorTitle":"{mentionsType, select, board {Board} user {User} message {Message} other {}} No Longer Available","mentionsErrorMessage":"The {mentionsType} you are trying to view has been removed from the community.","videoProcessing":"Video is being processed. Please try again in a few minutes.","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageCustomFields-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageCustomFields-1745505309835","value":{"CustomField.default.label":"Value of {name}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageRevision-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageRevision-1745505309835","value":{"lastUpdatedDatePublished":"{publishCount, plural, one{Published} other{Updated}} {date}","lastUpdatedDateDraft":"Created {date}","version":"Version {major}.{minor}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyButton-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyButton-1745505309835","value":{"repliesCount":"{count}","title":"Reply","title@board:BLOG@message:root":"Comment","title@board:TKB@message:root":"Comment","title@board:IDEA@message:root":"Comment","title@board:OCCASION@message:root":"Comment"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageAuthorBio-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageAuthorBio-1745505309835","value":{"sendMessage":"Send Message","actionMessage":"Follow this blog board to get notified when there's new activity","coAuthor":"CO-PUBLISHER","contributor":"CONTRIBUTOR","userProfile":"View Profile","iconlink":"Go to {name} {type}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1745505309835","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/ranks/UserRankLabel-1745505309835","value":{"altTitle":"Icon for {rankName} rank"},"localOverride":false},"CachedAsset:text:en_US-components/attachments/AttachmentView/AttachmentViewChip-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/attachments/AttachmentView/AttachmentViewChip-1745505309835","value":{"errorTitle":"Failed!","previewFile":"Preview File","downloadFile":"Download File {name}","removeFile":"Remove File {name}","errorBadExtension":"This file does not have a valid extension. \"{extensions}\" are the valid extensions.","errorFileEmpty":"This file is empty or does not exist.","errorTooLarge":"The maximum file size is: {maxFileSize}.","errorTooMany":"Too many attachments. The maximum number of attachments per message is: {maxAttachmentCount, number, integer}.","errorDuplicate":"This file is already attached."},"localOverride":false},"CachedAsset:text:en_US-components/users/UserRegistrationDate-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserRegistrationDate-1745505309835","value":{"noPrefix":"{date}","withPrefix":"Joined {date}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeAvatar-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeAvatar-1745505309835","value":{"altTitle":"Node avatar for {nodeTitle}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeDescription-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeDescription-1745505309835","value":{"description":"{description}"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagView/TagViewChip-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagView/TagViewChip-1745505309835","value":{"tagLabelName":"Tag name {tagName}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1745505309835":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeIcon-1745505309835","value":{"contentType":"Content Type {style, select, FORUM {Forum} BLOG {Blog} TKB {Knowledge Base} IDEA {Ideas} OCCASION {Events} other {}} icon"},"localOverride":false}}}},"page":"/blogs/BlogMessagePage/BlogMessagePage","query":{"boardId":"sapapplications","messageSubject":"sap-netweaver-7-5-with-maxdb-7-9-on-azure-using-azure-netapp-files-anf","messageId":"3905041"},"buildId":"HEhyUrv5OXNBIbfCLaOrw","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","openTelemetryClientEnabled":false,"openTelemetryConfigName":"o365","openTelemetryServiceVersion":"25.1.0","openTelemetryUniverse":"prod","openTelemetryCollector":"http://localhost:4318","openTelemetryRouteChangeAllowedTime":"5000","apolloDevToolsEnabled":false,"inboxMuteWipFeatureEnabled":false},"isFallback":false,"isExperimentalCompile":false,"dynamicIds":["./components/community/Navbar/NavbarWidget.tsx","./components/community/Breadcrumb/BreadcrumbWidget.tsx","./components/customComponent/CustomComponent/CustomComponent.tsx","./components/blogs/BlogArticleWidget/BlogArticleWidget.tsx","./components/external/components/ExternalComponent.tsx","./components/messages/MessageView/MessageViewStandard/MessageViewStandard.tsx","./components/messages/ThreadedReplyList/ThreadedReplyList.tsx","../shared/client/components/common/List/UnwrappedList/UnwrappedList.tsx","./components/attachments/AttachmentView/AttachmentView.tsx","./components/attachments/AttachmentView/AttachmentViewChip/AttachmentViewChip.tsx","./components/tags/TagView/TagView.tsx","./components/tags/TagView/TagViewChip/TagViewChip.tsx"],"appGip":true,"scriptLoader":[{"id":"analytics","src":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/pagescripts/1730819800000/analytics.js?page.id=BlogMessagePage&entity.id=board%3Asapapplications&entity.id=message%3A3905041","strategy":"afterInteractive"}]}