• Index
  • Visitenkarte
  • Kontakt
  • Impressum
Patrick Wessel

grep -i stuff /dev/brain | weblog

Prozent

SAP Speicherverwaltung für Dummies mit ABAP Kernel 7.40/7.41 und Linux

9. Juni 2013 by

Die richtige Einstellung der SAP Speicherverwaltung ist nicht immer einfach. Zum einen kommt es auf die Anforderungen an das System an, zum anderen natürlich auf die vorgegebene Umgebung und verfügbare Ressourcen. Früher zunächst nur für die Windows-Systemschiene bei SAP verfügbar gibt es seit einiger Zeit das SAP Zero Administration Memory Management auch für Linux. Eine nette Sache! Richtig eingesetzt macht es gerade in virtuellen Umgebungen richtig Sinn. Den über einen prozentuale Angabe des zu benutzenden RAMs ist es möglich, dass das SAP System sich zum Großteil automatisch an die RAM Veränderung anpasst. Man gibt also der virtuellen Maschine mehr Arbeitsspeicher, startet die entsprechende Instanz durch und viola – das System ist gleich passend für die wichtigsten Kenngrößen gesized ohne das auch nur an das Instanzprofil gedacht werden muss.

Wie geht man nun am Besten vor? Zunächst als <sid>adm ein cdpro absetzen um ins Profilverzeichnis (/sapmnt/<SID>/profile) zu wechseln und eine Sicherungskopie des aktuell aktiven Instanzprofils anlegen – safety first 🙂 Dreh- und Angelpunkt während der Anpassung ist der Parameter PHYS_MEMSIZE. Über diesen wird angegeben, wie viel Arbeitsspeicher für die Instanz genutzt werden soll. Die Angabe kann in Absoluten- und in Prozentwerten erfolgen. Somit kann man recht einfach für einen Application Server ohne Datenbank je nach Speicherausstattung 96 oder mehr Prozent angeben um dem Application Server möglichst viel Arbeitsspeicher zur Verwendung zu überlassen. Der Rest bleibt dann entsprechend für das OS übrig. In einer Shared Host Installation mit viel RAM kann so ggf. auch jeder Instanz 10% zugewiesen werden. Über das Konstrukt ist es dann ebenfalls möglich Instanzen mit hören Anforderungen über den Parameter gezielt mehr Speicher zuzuordnen ohne immer wieder an mehreren Parametern in mehreren Profilen schrauben zu müssen. Wird die Instanz auf dem Datenbankhost betrieben sollte hier zuvor genau errechnet werden wie viel Speicher das Datenbanksystem allein benötigt. In neueren SAP Releases geht das sehr einfach über die Transaktion DB02, die eine genaue Auflistung erstellt, die nicht nur die SGA enthält. Ansonsten muss man die Oracle Parameter auswerten und manuell errechnen.

Die für das jeweilige Kernelrelease unterstützen Formeln, die für das Memory Management herangezogen werden erhält man über sappfpar. Hierfür bietet sich folgendes Statement an: [Read more…]

Posted in: SAP Tagged: 512 GB, 7.4, 7.4 SP8, 7.40, 7.40 SP8, 7.41, 7.4x, ABAP, ABAP Program Buffer, Abhängigkeit, absolut, Admin, Anforderung, Appication Server, Applikationsserver, basiert, Benefit, BGB, buffer, check, check_formula, Configuration, disk, dump, Einstellungen, EM, em/initial_size_MB, Ergebnis, Festplatte, file, Filesystem, Formel, Formula, grep, help.sap.com, How, How-To, Initial, INSTANZ, Instanzprofil, Kernel, Kurzdump, Limit, LOAD_NO_ROLL, Management, Memory, Memory Management, Net Weaver, Netwaver, page, page file, pagefile, Parameter, pf=, pf=/sapmnt//profile/, PHYS_MEMSIZE, Platte, Profil, profile, Prozent, quota, RAM, rdisp, rdisp/PG_MAXFS, rdisp/PG_SHM, Referenz, Release, SAP, SAP Marketplace, SAP Zero Administration Memory Management, sapfpar, sapmnt, Server, Settings, Short, Shortdump, sid, Size, SP8, Speicher, Speicherverwaltung, STRING_LENGTH_TOO_LARGE, swap, swapfile, task_limit, to, TSV_TNEW_BLOCKS_NO_ROLL_MEMORY, TSV_TNEW_PAGE_ALLOC, Verwaltung, Werte, Zero, ztta

RMAN Sicherungen und die Bestimmung der Restlaufzeit

20. Mai 2013 by

Leider werden bei Datenbanksicherungen mit brbackup, die mit dem Oracle Recovery Manager (rman) angefertigt werden, keine Restlaufzeiten (estimated end time) bzw. Fortschritte in % (Progress) ausgegeben. Zwar steht im Protokoll, dass brbackup für die Sicherung erstellt die Anzahl der zu sichernenden Dateien und das Sicherungsvolumen, jedoch wäre eine Ausgabe analog der Sicherung ohne rman per util_file hilfreich.

Mit dem folgenden SQL Script kann man sich die (geschätzte) Restlaufzeit so wie den aktuellen Fortschritt anzeigen lassen:

set pages 200 lines 200
col dbsize_mbytes      for 99,999,990.00 justify right head "DB Groesse MB"
col input_mbytes       for 99,999,990.00 justify right head "Gelesen MB"
col output_mbytes      for 99,999,990.00 justify right head "Geschrieben MB"
col output_device_type for a10           justify left head "Typ"
col complete           for 990.00        justify right head "Fertig %"
col est_complete       for a20           head "Geschaetztes Ende"
col recid              for 9999999       head "ID"

select recid, output_device_type, dbsize_mbytes, input_bytes/1024/1024 input_mbytes, output_bytes/1024/1024 output_mbytes, (mbytes_processed/dbsize_mbytes*100) complete, to_char(start_time + (sysdate-start_time)/(mbytes_processed/dbsize_mbytes), 'DD-MON-YYYY HH24:MI:SS') est_complete 
from v$rman_status rs, (select sum(bytes)/1024/1024 dbsize_mbytes from v$datafile)
where status='RUNNING' and output_device_type is not null;

Der Output sieht dann zum Beispiel so aus:

      ID Typ         DB Groesse MB     Gelesen MB Geschrieben MB Fertig % Geschaetztes Ende
-------- ---------- -------------- -------------- -------------- -------- --------------------
   13237 SBT_TAPE    13,253,366.00   3,376,273.98   3,374,149.75  25.47    22-MAY-2013 18:27:09
Posted in: SAP Tagged: Backup, brbackup, brtoosl, Endzeit, estimated, fertigstellung, Fortschritt, initSID.sap, initSID.utl, Laufzeit, Oracle, percent, progress, Prozent, Recovery Manager, Restlaufzeit, rman, rman_util, SAP, Status, v$ Tabelle, v$datafile, v$rman_status, Volumen, Zeit

BDLS und die nervige Laufzeit – Ein Akt in 3 Teilen.

9. Juni 2012 by

Nach einer Systemkopie müssen in der Regel die logischen Systemnamen umgesetzt werden. Und auch unter Netweaver 7.4 lässt die SAP den Kunden ganz schön im Regen stehen. Nicht einmal Standard Indizes für die Felder mit den logischen Systemnamen werden ausgefliefert. Also muss der Kunde hier wieder selbst Hand anlegen.

Eine schnelle und einfache Möglichkeit die Indizes anzulegen habe ich mir mit folgendem Script geschaffen. Der geneigte Admin kann mit dem Script schnell und direkt auf Datenbank-ebene die notwendigen Indizes nach einem Systemrefresh anlegen. Ganz ohne die zeitraubenden brtools.

Das Script lässt sich einfach anpassen und erweitern. Entfernt man zum Beispiel den manuellen vi-Part kann man es mit einem Wrapper versehen und für einen Massenverarbeitung nutzen. Da es eigenständige Logfiles pro Tabelle und Aufruf anlegt kann dies sogar parallelisiert passieren. Das Script an sich ist recht simpel gehalten und sieht so aus:

 

#!/usr/bin/ksh
#Script zum Anlegen von Indizes
#Patrick Wessel, Juni 2012

#Variablen deklarieren
TABELLE=$1 #Uebergebener Tabellennname
FELDER=$2 #Uebergebene Feldnamen
RC=1 #Returncode Pruefung sqlplus Lauf
SUCHRC=1 #Returncode Pruefung Feldpruefung

#Konstanten deklarieren
DATUM=`date ‚+%d%m%Y_%H%M%S’` #Datum fuer die Logfiles
SCHEMA=$dbs_ora_schema #Schema fuer die Indizes
SQLGETTABINFO=get_$(echo $TABELLE | tr ‚/‘ ‚_‘)_info_${DATUM}.sql #SQL Script zum Ermitteln der Tabellenfelder
SQLGETTABINFOLOG=$SQLGETTABINFO.log #Logfile fuer SQL Script zum Ermitteln der Tabellenfelder
SQLCREATEINDEX=create_$(echo $TABELLE | tr ‚/‘ ‚_‘)_${DATUM}.sql #SQL Script zum Erstellen der Indizes
SQLCREATEINDEXLOG=$SQLCREATEINDEX.log #Logfile fuer SQL Script zum der Indizes
PROZENT=10 #Samplesize fuer die Analyse des DB Objects
ZEILEN=5 #Mindestanzahl an Zeilen in den SQL Script Dateien bevor diese ausgeführt werden.

#Uebergabe Parameter pruefen
[ „$TABELLE“ == „“ ] && echo „\n*** Fehler: Es wurde keine Tabelle angegeben“ && exit 1
[ „$FELDER“ == „“ ] && echo „\n*** Fehler: Es wurden keine Felder fuer den Index angeben“ && exit 1

#Bestehende SQL Scripts und Logfiles umbennen
[ -f $SQLCREATEINDEX ] && mv $SQLCREATEINDEX $SQLCREATEINDEX.bak
[ -f $SQLGETTABINFO ] && mv $SQLGETTABINFO $SQLGETTABINFO.bak
[ -f $SQLCREATEINDEXLOG ] && mv $SQLCREATEINDEXLOG $SQLCREATEINDEXLOG.bak
[ -f $SQLGETTABINFOLOG ] && mv $SQLGETTABINFOLOG $SQLGETTABINFOLOG.bak

#Uebergebene Felder aufbereiten
FELDER=$(echo „\“$(echo $FELDER | sed s/,/\“,\“/g)\““)

#Beschreibung fuer die Tabelle auslesen
echo „\nLade Tabellenbeschreibung fuer Tabelle ${SCHEMA}.\“${TABELLE}\“ :“
echo „set echo off;“ | tee -a $SQLGETTABINFO
echo „set termout off;“ | tee -a $SQLGETTABINFO
echo „spool $SQLGETTABINFOLOG“ | tee -a $SQLGETTABINFO
echo „whenever sqlerror exit sql.sqlcode“ | tee -a $SQLGETTABINFO
echo „connect / as sysdba;“ | tee -a $SQLGETTABINFO
echo „desc ${SCHEMA}.\“${TABELLE}\“;“ | tee -a $SQLGETTABINFO
echo „exit;“ | tee -a $SQLGETTABINFO

#Attribute der Erstellten SQL Script Datei ausgeben
ls -al $SQLGETTABINFO

#SQL Script rudimentaer auf Inhalt pruefen und ausfuehren
[ „$(cat ${SQLGETTABINFO} | wc -l)“ -lt $ZEILEN ] && echo „\n**** Die Ausfuehrung wird nicht vorgenommen.\nDas SQL Script hat weniger als $ZEILEN Zeilen.\nAbbruch.“ && exit 0
sqlplus /NOLOG @${SQLGETTABINFO}
RC=$?
[ „$RC“ -eq 0 ] && echo „\nDie Tabellenbeschreibungi fuer ${SCHEMA}.\“${TABELLE}\“ wurde erfolgreich geladen“
[ „$RC“ -ne 0 ] && echo „*** Fehler: sqlplus wurde mit Fehlern beendet.\nDie Tabellenbeschreibung konnte nicht geladen werden\nBitte pruefen!\niGGf. existiert die Tabelle ${SCHEMA}.\“${TABELLE}\“ nicht.\n$(cat $SQLGETTABINFOLOG)“ && exit 1

#Uebergebene Felder pruefen ob diese auch in der Tabelle existieren.
echo „\nPruefe die angegebenen Felder auf Existenz:“
for i in $(echo „${FELDER}“ | sed s/‘,’/‘ ‚/g | sed s/'“‚//g )
do
grep $i $SQLGETTABINFOLOG >/dev/null
SUCHRC=$?
[ „$SUCHRC“ -ne 0 ] && echo „\n**** Das Feld $i konnte in der Tabelle ${SCHEMA}.\“${TABELLE}\“ nicht gefundden werden! ****\nDer Index kann nicht erstellt werden. Das Script wird abgebrochen!“ && exit 1
[ „$SUCHRC“ -eq 0 ] && echo „Feld: $i gefunden“
done

#Script fuer die Index Erstellung zusammen setzen
echo „\nErstelle Indizies fuer Tabelle ${SCHEMA}.\“${TABELLE}\“ :“
#Informationen zu der Tabelle und den Feldern als Kommentar in das Script schreiben um die Informationen fuer eine Scriptmodifikation direkt im Editor zu sehen.
echo „– Die Tabelle mit den Vorhandenen Feldern:“ | tee -a $SQLCREATEINDEX
grep -v „Connected.“ $SQLGETTABINFOLOG | sed ’s/^/– /‘ | tee -a $SQLCREATEINDEX
echo „set echo off;“ | tee -a $SQLCREATEINDEX
echo „set termout off;“ | tee -a $SQLCREATEINDEX
echo „spool $SQLCREATEINDEXLOG“ | tee -a $SQLCREATEINDEX
echo „whenever sqlerror exit sql.sqlcode“ | tee -a $SQLCREATEINDEX
echo „connect / as sysdba;“ | tee -a $SQLCREATEINDEX
echo „CREATE Index ${SCHEMA}.\“${TABELLE}~BDLS\“ on ${SCHEMA}.\“${TABELLE}\“ (${FELDER}) NOLOGGING TABLESPACE P${SCHEMA} PARALLEL;“ | tee -a $SQLCREATEINDEX
echo „ALTER INDEX ${SCHEMA}.\“${TABELLE}~BDLS\“ NOPARALLEL;“ | tee -a $SQLCREATEINDEX
echo „ANALYZE INDEX ${SCHEMA}.\“${TABELLE}~BDLS\“ ESTIMATE STATISTICS SAMPLE ${PROZENT} PERCENT;“ | tee -a $SQLCREATEINDEX
echo „exit;“ | tee -a $SQLCREATEINDEX

#Attribute der Erstellten SQL Script Datei ausgeben
ls -al $SQLCREATEINDEX

#Anpassung des erstellten SQL Scriptes ermöglichen
echo „\n… Datei kann jetzt editiert werden.\nDer Inhalt wird im Anschluss ausgefuehrt\nWenn nicht gewuenscht Dateiinhalt komplett loeschen!“
sleep 3
vi $SQLCREATEINDEX

#Pruefen ob der Inhalt des SQL Scripts geloescht worden ist (dann nicht ausfuehren) ansonsten ausfuehren und Returncode abfragen
[ „$(cat ${SQLCREATEINDEX} | wc -l)“ -lt $ZEILEN ] && echo „\n**** Die Ausfuehrung wird nicht vorgenommen.\nDas SQL Script hat weniger als $ZEILEN Zeilen.\nAbbruch.“ && exit 0
sqlplus /NOLOG @${SQLCREATEINDEX}
RC=$?
[ „$RC“ -eq 0 ] && echo „\nOK: sqlplus wurde erfolgreich ausgefuehrt:\n$(cat $SQLCREATEINDEXLOG)“
[ „$RC“ -ne 0 ] && echo „\n*** Fehler: sqlplus wurde mit Fehlern beendet.\nBitte pruefen!\n$(cat $SQLCREATEINDEXLOG)“ && exit 1

#Das Script wird sauber beendet. Bei Fehlern setzen vorherige Exits entsprechende Returncodes
exit 0


[Read more…]

Posted in: SAP Tagged: ABAP, analysieren, analyze, anlegegen, BDLS, bdlss, brtools, client, create, database, Databaserefersh, DataDictionary, Datenbank, Datenbankkopie, Datenbankrefresh, DD, direct, direkt, Download, Drop, drop index, estimate, fast, Feld, INDEX; INDIZES, Indices, Löschen, Logging, logsys, mand, nologging, noparallel, Oracle, parallel, percent, Prozent, rclient, Refresh, sample, SAP, schnell, Script, sh, SQL, statistics, Statistik, Systemkopie, Tabelle, Tablsespace

Kategorien

  • Allgemein
  • Politik und Soziales
  • Projekt Linux Server
  • SAP

Zu den Kommentaren:

Die Kommentare auf der Seite werden erst nach manueller Prüfung freigeschaltet. Es kann daher mehrere Stunden dauern, bis der entsprechende Kommentar auf der Seite veröffentlicht ist. Bitte nicht mehrfach posten.

Verschiedenes

Spaß Windows Download PHP Webserver Artikel Homepage Script Howto select. Tabelle postfix Installation User Verbindung sqlplus Speicher sid Blog Backup Wesselonline Debian Datenbank IP Email Problem Linux Oracle SAP Server

Archive

  • Juni 2013
  • Mai 2013
  • April 2013
  • März 2013
  • Februar 2013
  • Januar 2013
  • Dezember 2012
  • November 2012
  • Oktober 2012
  • September 2012
  • August 2012
  • Juli 2012
  • Juni 2012
  • Mai 2012
  • Januar 2012
  • Mai 2011
  • April 2011
  • März 2011
  • Januar 2011
  • Dezember 2010
  • November 2010
  • Oktober 2010
  • September 2010
  • August 2010
  • Juli 2010
  • Juni 2010
  • Juli 2009
  • Juni 2009
  • Mai 2009
  • Februar 2009
  • Januar 2009
  • Dezember 2008
  • August 2008
  • Juli 2008
  • Mai 2008
  • April 2008
  • August 2007
  • Juli 2007
  • Juni 2007
  • Mai 2007
  • April 2007
  • März 2007
  • Februar 2007
  • Januar 2007
  • Dezember 2006
  • Oktober 2006
  • September 2006
  • August 2006

Copyright © 2019 Patrick Wessel.

Omega WordPress Theme by ThemeHall

Internetseiten verwenden teilweise so genannte Cookies. Cookies richten auf Ihrem Rechner keinen Schaden an und enthalten keine Viren. Cookies dienen dazu, meine Internetseite nutzerfreundlicher, effektiver und sicherer zu machen. Cookies sind kleine Textdateien, die auf Ihrem Rechner abgelegt werden und die Ihr Browser speichert. Die meisten der von mir verwendeten Cookies sind so genannte „Session-Cookies“. Sie werden nach Ende Ihres Besuchs automatisch gelöscht. Andere Cookies bleiben auf Ihrem Endgerät gespeichert, bis Sie diese löschen. Diese Cookies ermöglichen es, Ihren Browser beim nächsten Besuch wiederzuerkennen. Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies informiert werden und Cookies nur im Einzelfall erlauben, die Annahme von Cookies für bestimmte Fälle oder generell ausschließen sowie das automatische Löschen der Cookies beim Schließen des Browser aktivieren. Bei der Deaktivierung von Cookies kann die Funktionalität dieser Website eingeschränkt sein.AkzeptierenDatenschutzerklärung