Wenn in einem Unternehmen mehrere Installationen von Cloud Control betrieben werden, ist es manchmal erforderlich ein Target (also ein Zielsystem) von einer Cloud Control Installation zu einer anderen zu verschieben. Eine direkte Migration von einem EM Repository in ein anderes ist nicht möglich. Aber einzelne Informationen, wie zum Beispiel die Target Properties können mit einem einfachen Workaround exportiert und importiert werden. Dieser Tipp zeigt, wie das funktioniert.
Dieser Tipp entstand aus einer realen Kundenanfrage: aufgrund von Änderungen in der Netzwerktopologie sollten aus einem Cloud Control mehrere Installationen erstellt werden. Dabei war klar, dass dazu neue Agenten installiert werden müssen, und ein Target Discovery neu durchgeführt werden muß. Es stand fest, dass alle Targets ihren alten Namen behalten sollen. Da bei diesem Kunden die Target Properties intensiv genutzt werden, kam die Frage auf, ob die Werte der Target Properties von einer Cloud Control Installation zu einer anderen transportiert werden können, es also einen Weg eines Exports/Imports gibt.
Ein Blick in die GUI von Cloud Control zeigt, dass dieses Vorgehen nicht angeboten wird. In EMCLI (Enterprise Manager Command Line Interface) gibt es ein Verb (Kommando) mit dem Namen "set_target_property", welches für ein Import verwendet werden könnte, jedoch fehlt ein Verb zum Auslesen aller Property Werte, zumindest gilt das für die aktuelle Version EM 13.3.
Um die Werte aller Target Properties auslesen zu können bleibt also nur der direkte Blick in das EM Repository und die Views MGMT$TARGET_PROPERTIES und MGMT$ALL_TARGET_PROP_DEFS. Damit der Import optimal vorbereitet wird, wird das SELECT Kommando gleich so geschrieben, dass die passenden EMCLI Kommandos erzeugt werden:
select distinct 'emcli set_target_property_value -property_records="'||p.target_name||':'||p.target_type||':'||d.property_display_name||':'||p.property_value||'"' from MGMT$TARGET_PROPERTIES p, MGMT$ALL_TARGET_PROP_DEFS d where p.property_name=d.property_name and d.PROPERTY_NAME not in ('orcl_gtp_platform','orcl_gtp_target_version','orcl_gtp_os'); emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Downtime Contact:Ralf Durben" emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Location:Lippstadt"
Diese Abfrage blendet drei Properties aus, die nicht manuell gesetzt werden sollten, da sie beim Discovery automatisch mit einem Wert belegt werden: Plattform, Version und Betriebssystem.
Die obige Abfrage "exportiert" aber nur die Werte der Standardproperties. Benutzerdefinierte Properties sind in der View MGMT$ALL_TARGET_PROP_DEFS leider nicht gelistet. Um auch diese benutzerdefinierten Properties erfassen zu können muß noch ein zweiter Leseaufruf durchgeführt werden:
select distinct 'emcli set_target_property_value -property_records="'||p.target_name||':'||p.target_type||':'||tpd.property_display_name||':'||p.property_value||'"' from MGMT$TARGET_PROPERTIES p, GC_TARGET_PROP_DEFS tpd where p.property_name=tpd.property_name and tpd.PROPERTY_NAME like 'udtp%'; emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Approval:RD" emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Usage:EM Repository"
Letztlich kombiniert man diese beiden Abfragen mit einem UNION und schon ist man am Ziel:
select distinct 'emcli set_target_property_value -property_records="'||p.target_name||':'||p.target_type||':'||d.property_display_name||':'||p.property_value||'"' from MGMT$TARGET_PROPERTIES p, MGMT$ALL_TARGET_PROP_DEFS d where p.property_name=d.property_name and d.PROPERTY_NAME not in ('orcl_gtp_platform','orcl_gtp_target_version','orcl_gtp_os') union select distinct 'emcli set_target_property_value -property_records="'||p.target_name||':'||p.target_type||':'||tpd.property_display_name||':'||p.property_value||'"' from MGMT$TARGET_PROPERTIES p, GC_TARGET_PROP_DEFS tpd where p.property_name=tpd.property_name and tpd.PROPERTY_NAME like 'udtp%'; emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Downtime Contact:Ralf Durben" emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Location:Lippstadt" emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Approval:RD" emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Usage:EM Repository"
Falls Sie die Abfrage in SQL*Plus ausführen empfiehlt es sich noch, folgende Einstellungen vorzunehmen, damit die Ausgabe auch gleich als Skript verwendet werden kann:
set heading off linesize 200 echo off spool import_properties.sh select distinct 'emcli login -username=sysman' from dual; select distinct 'emcli set_target_property_value -property_records="'||p.target_name||':'||p.target_type||':'||d.property_display_name||':'||p.property_value||'"' from MGMT$TARGET_PROPERTIES p, MGMT$ALL_TARGET_PROP_DEFS d where p.property_name=d.property_name and d.PROPERTY_NAME not in ('orcl_gtp_platform','orcl_gtp_target_version','orcl_gtp_os') union select distinct 'emcli set_target_property_value -property_records="'||p.target_name||':'||p.target_type||':'||tpd.property_display_name||':'||p.property_value||'"' from MGMT$TARGET_PROPERTIES p, GC_TARGET_PROP_DEFS tpd where p.property_name=tpd.property_name and tpd.PROPERTY_NAME like 'udtp%'; spool off emcli login -username=sysman emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Downtime Contact:Ralf Durben" emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Location:Lippstadt" emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Approval:RD" emcli set_target_property_value -property_records="emrep.example.com:oracle_database:Usage:EM Repository"
Zum Import in das neue System braucht man dort nur eine Sitzung in EMCLI und führt die erzeugten Kommandos aus, oder startet das erzeugte Skript, welches eine EMCLI Sitzung erzeugt.
Weitere Informationen
Zurück zum Anfang des Artikels
Zurück zur Community-Seite