Mittwoch, 2. November 2016

Starten der Weblogic 12c Umgebung und Server auf Linux - vom Hölzchen (Shell) zum Stöckchen (WLST)

Heute möchte ich meine Erfahrungen beim Starten der Weblogic 12c Umgebung und Server auf Linux teilen, der Kunde hat nach einem entsprechenden Skript gefragt. Mit vielen einzelnen Kommandos habe ich es schon probiert, genauso mit einer Mischung aus Shell-Skripten und Weblogic Scripting Tool-Befehlen (WLST). Schwer ist das ganze ja gar nicht, nur eben viel zu tippern.

Zuerst kommt die ursprüngliche Variante mit einem großen Shell-Skript und vielen Befehlen darin.
# Adjust paths and domain name to suit your installation.
echo "Starting up all servers on machine TheHost..."
export ORACLE_BASE=/Pfad_zum_Oracle_Home
export MW_HOME=/Pfad_zum_Oracle_Home/wlserver/..
export WLS_HOME=$ORACLE_BASE/wlserver
export WL_HOME=$WLS_HOME
export DOMAIN_HOME=/Pfad_zur_Domain/domains/my_domain
export OHS_INST=$DOMAIN_HOME/config/fmwconfig/components/OHS/instances/ohs1

# Start NodeManager
echo "Starting up NodeManager ..."
nohup $DOMAIN_HOME/bin/startNodeManager.sh > /dev/null 2>&1 &

# Start WebLogic Domain
echo "Starting up WebLogic AdminServer ..."
nohup $DOMAIN_HOME/bin/startWebLogic.sh > /dev/null 2>&1 &

sleep 180

# Start the managed Servers
echo "Starting up WLS_FORMS ..."
nohup $DOMAIN_HOME/bin/startManagedWebLogic.sh WLS_FORMS > /dev/null 2>&1 &
echo "Starting up WLS_REPORTS ..."
nohup $DOMAIN_HOME/bin/startManagedWebLogic.sh WLS_REPORTS > /dev/null 2>&1 &
echo "Starting up another Managed Server ..."
nohup $DOMAIN_HOME/bin/startManagedWebLogic.sh WLS_ANOTHER_SERVER > /dev/null 2>&1 &
....
sleep 300

# Start the web tier (HTTP Server).
echo "Starting up ohs1 ..."
$DOMAIN_HOME/bin/startComponent.sh ohs1

# Start the reports Servers.
echo "Starting up ReportsServer rep_server1 ..."
$DOMAIN_HOME/bin/startComponent.sh rep_server1

echo "Starting up ReportsServer rep_server2 ..."
$DOMAIN_HOME/bin/startComponent.sh rep_server2
......

Das läßt sich natürlich mit anderen Servern noch weiter fortführen, aber das Prinzip sollte klar sein. Zwischen dem Starten der Managed Server und den anderen Servern/Komponenten ist zur Sicherheit eine Pause in Form von sleep-Befehlen eingebaut. Dabei ist wichtig, dass für alle Managed Server im Unterordner <Domain_Home>/servers/AdminServer/security oder <Domain_Home>/servers/ManagedServer/security eine Datei namens boot.properties angelegt ist. Sonst gelingt das Starten per Shell-Skript nicht, und es muß in der Console username und password eingegeben werden.



cat boot.properties
username=weblogic
password=mypassword
 


Nach einem Quercheck vom erfahrenen Kollegen gab er den Tipp: mach das Ganze doch mit dem Weblogic Scripting Tool, kurz WLST. Da ich dieses Tool auch kenne, gesagt und getan. Finde ich auch etwas modularer und einfacher zu handeln. Hier das Ergebnis mit WLST:



# Adjust paths and domain name to suit your installation.
echo "Starting up all servers on machine TheHost..."
export ORACLE_BASE=/Pfad_zum_Oracle_Home
export MW_HOME=/Pfad_zum_Oracle_Home/wlserver/..
export WLS_HOME=$ORACLE_BASE/wlserver
export WL_HOME=$WLS_HOME
export DOMAIN_HOME=/Pfad_zur_Domain/domains/my_domain
export OHS_INST=$DOMAIN_HOME/config/fmwconfig/components/OHS/instances/ohs1
export WLST=${ORACLE_HOME}/oracle_common/common/bin/wlst.sh


# Start WebLogic Domain
echo "Starting up WebLogic AdminServer ..."
${WLST} start_admin.py

# Start the managed Servers
echo "Starting up WLS_FORMS ..."
echo "Starting up WLS_REPORTS ..."
echo "Starting up WLS_ANOTHER_SERVER ..."
${WLST} start_ms.py

# Start the web tier (HTTP Server).
echo "Starting up ohs1 ..."
echo "Starting up reports Servers ..."
${WLST} start_comps.py

Hier beispielhaft der Inhalt der start_admin.py:

nmConnect(userConfigFile='/Pfad_zur_Domain/userConfigFile',userKeyFile='/Pfad_zur_Domain/userKeyFile',host='TheHost',port='theNodemanagerListenPort',
domainName='my_domain',domainDir='/Pfad_zur_Domain')
nmStart('AdminServer')


Die Datei start_ms.py enthält:
nmConnect(userConfigFile='/Pfad_zur_Domain/userConfigFile',userKeyFile='/Pfad_zur_Domain/userKeyFile',host='TheHost',port='theNodemanagerListenPort',
domainName='my_domain',domainDir='/Pfad_zur_Domain')
nmStart('WLS_FORMS')
nmStart('WLS_REPORTS')
nmStart('WLS_ANOTHER_SERVER')
...

Die Datei start_comps.py enthält:
nmConnect(userConfigFile='/Pfad_zur_Domain/userConfigFile',userKeyFile='/Pfad_zur_Domain/userKeyFile',host='TheHost',port='theNodemanagerListenPort',
domainName='my_domain',domainDir='/Pfad_zur_Domain')
nmStart(serverName='ohs1', serverType='OHS')
nmStart(serverName='rep_server1', serverType='ReportsServerComponent')
...

Mit beiden Varianten werden nacheinander alle Server und Komponenten, d.h. der gesamte Fusion Middleware Stack gestartet bzw. im anderen Fall auch wieder gestoppt. Das ist sehr praktisch und mit WLST natürlich nochmal einen großen Ticken eleganter als mit reiner Shell-Programmierung.

Update einen Tag später durch weiteres Refactoring und Variablennutzung:
${WLST} start_ms.py $DOMAIN_HOME $WLS_HOST $NODEMGR_PORT

Die Datei start_ms.py enthält:
nmConnect(userConfigFile=sys.argv[1]+'/userConfigFile',userKeyFile=sys.argv[1]+'/userKeyFile',host=sys.argv[2],port=sys.argv[3],
domainName='my_domain',domainDir=sys.argv[1])
nmStart('WLS_FORMS')
nmStart('WLS_REPORTS')
nmStart('WLS_ANOTHER_SERVER')
...

Bis bald im Forms und Weblogic Land
Holger

Dienstag, 1. November 2016

Kochbuch zum Upgrade von Oracle Forms 12.2.1.1 auf Oracle Forms 12.2.1.2

Heute beschreibe ich anhand meiner Spiel-VM das Upgrade von Oracle Forms 12.2.1.1 auf Oracle Forms 12.2.1.2, das eigentlich ganz einfach gehen soll. Aber leider klappt es nicht vollständig, siehe den Thread im Oracle-Forum.

Der zweite Patch für Forms 12c erschien vor kurzem im Oktober 2016 mit einer Reihe von Bugfixes, trotzdem würde ich immer die Neuinstallation vorziehen oder beim Upgrade von Forms 11 sowieso mit einer kompletten Neuinstallation von Forms 12c anfangen.

Zuerst gibt es einen ganz einfachen Schritt, den Weblogic 12.2.1.2.0 sowie Forms und Reports 12.2.1.2.0 in ein neues Verzeichnis, also neues Oracle_Home zu installieren, bei mir C:\Oracle\Middleware\Oracle_Home12.2.1.2.

Danach folgt das spannende Upgrade der existierenden Domain in mehreren Schritten, hier beschrieben.

  1. Upgrade Assistent zum Upgrade des DB Domain Schemas
    Befehl: $NEUES_ORACLE_HOME/oracle_common/upgrade/bin/ua.bat

  2. Konfiguration der vorhandenen Domain mit dem WLS Reconfig Assistenten
    Befehl: $NEUES_ORACLE_HOME/oracle_common/common/bin/reconfig.bat

  3. Upgrade Assistent zum Upgrade der Forms Installation
    Befehl: $NEUES_ORACLE_HOME/oracle_common/upgrade/bin/ua.bat


    Das Upgrade des Oracle HTTP-Servers geht komischerweise nicht, das hat im Forum auch ein anderer User beschrieben. Vielleicht muss Oracle hier noch nacharbeiten. Ansonsten heißen die Ausführungstargets: ein neues Home mit der Neu-Installation der Software und ein Upgrade einer vorhandenen Domain.

    Fazit des Ganzen: das Upgrade auf Forms 12.2.1.2 ging relativ einfach vom Vorgängerpatch her. Selbst das ORDS-Deployment zur APEX-Anbindung läuft noch. Auch geht der HTTP-Server ebenfalls noch, obwohl das Upgrade angeblich nicht erfolgreich war. Trotzdem plädiere ich dennoch für eine saubere Neuinstallation der Umgebung, wenn es drauf ankommt.

    Mittlerweile gibt es von Oracle einen offiziellen Bug, der das ganze beschreibt:


    Bug 25097886 : UPGRADE TO 12.2.1.2 FROM 12.2.1.1 FAILS FOR OHS IF REPORTSTOOL IS CONFIGURED


    Der Workaround ist schon doof, aber machbar:

    Workaround
    ==========
    1) delete the reportsInstance using WLST command
    deleteReportsToolsInstance(instanceName='reptools1') 
    2) Then run UA -readiness check and it succeeds
     
    Schöne Grüße
    Holger