How to Share OEM Named Credentials

Tags

, , , , , , ,

Named Credentials

Named credentials (NC) are an excellent way to support the work performed by OEM users/administrators without requiring them to actually know key passwords. Named credentials also provide a single location to update when the passwords change.

The Problem

Named credentials can only be shared with individual users/administrators inside OEM. You can’t grant the privilege to an EM role and expect the privilege to propagate the role members like you can with a similar database role.  NC’s are an internal OEM construct and not database objects.

Our need for an automated solution to manage our named credentials arose as we started using OEM for provisioning and patching. We have a group of named credentials owned by our SYSMAN account – some to share and many to use internally. At first I made the grants to individuals as needed through the console but as the number of users increased (yay) so did the overhead associated the named credentials (boo).  More importantly we also needed a quick way to share new named credentials with several EM administrators and revoke access to others.

Solution

This may appear to be a complex solution to this problem, but it consists of four simple parts:

  1. Build a control table in the OMR containing a complete list of SYSMAN-owned named credentials with a flag indicating whether each NC should be shared.
  2. Populate that table from user and NC data stored elsewhere in the SYSMAN schema.
  3. Use SQL to build EM CLI argfiles to grant and revoke access.
  4. Wrap those SQL and CLI commands into a shell script.
  5. Build an OEM Job to perform those updates on a regular basis

Step 1 – Build the Control Table

The first step in managing share Named Credentials is to catalog them and define which will be shared through this process. I created a table named shared_named_credentials in my work-horse SCOOP schema with three columns:

  • CRED_NAME is the name of the credential stored in the OMR
  • GUID is the global unique identifier for the NC
  • SHARED_YN is the flag you set to either share or hide it. As you can see from the DDL, the default value is ‘Y’ – all newly created NC’s will be shared unless you change their flag manually.
CREATE TABLE SCOOP.SHARED_NAMED_CREDENTIALS
 (
   CRED_NAME  VARCHAR2(64 BYTE)          NOT NULL,
   GUID       RAW(16)                    NOT NULL,
   SHARE_YN   CHAR(1 BYTE)               DEFAULT 'Y'
 )
 TABLESPACE MGMT_TABLESPACE
 LOGGING 
 NOCOMPRESS 
 NOCACHE
 MONITORING;
 
 
 CREATE UNIQUE INDEX SCOOP.SHARED_NAMED_CREDENTIALS_PK ON SCOOP.SHARED_NAMED_CREDENTIALS
 (CRED_NAME)
 LOGGING
 TABLESPACE MGMT_TABLESPACE

);
 
 ALTER TABLE SCOOP.SHARED_NAMED_CREDENTIALS ADD (
   CONSTRAINT SHARED_NAMED_CREDENTIALS_PK
   PRIMARY KEY
   (CRED_NAME)
   USING INDEX SCOOP.SHARED_NAMED_CREDENTIALS_PK
   ENABLE VALIDATE);
 
 GRANT INSERT, SELECT ON SCOOP.SHARED_NAMED_CREDENTIALS TO SYSMAN;

nc_blog02_table1.png

Step 2 – Populate the Control Table

Information about Named Credentials is stored in OMR table sysman.em_nc_creds. I try to use views whenever possible but this time we can’t avoid accessing the table directly.

As you can see, it’s a very simple query to gather data for an INSERT statement.

Note:  I’ve used the cred_guid in this model to avoid problems with renamed NC’s.

INSERT INTO scoop.shared_named_credentials
 ( SELECT cred_name,
          cred_guid,
          'Y'
     FROM   sysman.em_nc_creds
     WHERE  cred_owner = 'SYSMAN'
            AND cred_guid NOT IN ( SELECT guid
                                 FROM   scoop.shared_named_credentials ) );
COMMIT;

Step 3 – Generate EM CLI statements

The SQL statements below will be spooled into EM CLI argfiles at run-time. The first statement will generate the GRANT privileges for EM administrators with a specific role (LOCAL_DBA_ROLE in these examples).

SELECT   DISTINCT
         'grant_privs -name="'
         || u.user_name
         || '" -privilege="GET_CREDENTIAL;CRED_NAME='
         || c.cred_name
         || ':CRED_OWNER=SYSMAN";'
         as cli_command
FROM     sysman.gc_user_roles u,
         scoop.shared_named_credentials c,
         sysman.mgmt_priv_grants a
WHERE    u.role_name IN ( 'LOCAL_DBA_ROLE' )
         AND UPPER( c.share_yn ) = 'Y'
ORDER BY cli_command;

The second statement revokes existing NC privileges your users may have received based on the share_yn flag in the control table.

SELECT DISTINCT
       'revoke_privs -name="'
       || a.grantee
       || '" -privilege="GET_CREDENTIAL;CRED_NAME='
       || b.cred_name
       || ':CRED_OWNER=SYSMAN";'
       as cli_command
FROM   sysman.mgmt_priv_grants a,
       scoop.shared_named_credentials b
WHERE  a.priv_name = 'GET_CREDENTIAL'
       AND a.guid = b.guid
       AND a.grantee IN ( SELECT user_name
                          FROM   sysman.gc_user_roles
                          WHERE  role_name IN ( 'LOCAL_DBA_ROLE' ) )
       AND b.share_yn <> 'Y';

Step 4 – Wrap all of it into a shell script

I’m a firm believer in encapsulating as much as possible into shell functions. It makes your run-time procedure easier to read and it segregates specific tasks for analysis and debugging.

nc_script1.png

nc_script2.png

nc_script3.pngnc_script4.png

Output Log

Setting the environment ...

Updating the list of named credentials owned by SYSMAN


0 rows created.


Commit complete.


Creating the argfile to revoke permissions


revoke_privs -name="BOBBY" -privilege="GET_CREDENTIAL;CRED_NAME=NC_AGENT_INSTALL:CRED_OWNER=SYSMAN";
revoke_privs -name="PHIL" -privilege="GET_CREDENTIAL;CRED_NAME=NC_ORACLE:CRED_OWNER=SYSMAN";
revoke_privs -name="MICKEY" -privilege="GET_CREDENTIAL;CRED_NAME=NC_AGENT_INSTALL:CRED_OWNER=SYSMAN";
...

Creating the argfile to grant permissions


grant_privs -name="JERRY" -privilege="GET_CREDENTIAL;CRED_NAME=NC_SHARED_ORACLE:CRED_OWNER=SYSMAN";
grant_privs -name="JERRY" -privilege="GET_CREDENTIAL;CRED_NAME=NC_SHARED_ORACLE_ROOT:CRED_OWNER=SYSMAN";
grant_privs -name="PHIL" -privilege="GET_CREDENTIAL;CRED_NAME=NC_SHARED_ORACLE:CRED_OWNER=SYSMAN";
grant_privs -name="PHIL" -privilege="GET_CREDENTIAL;CRED_NAME=NC_SHARED_ORACLE_ROOT:CRED_OWNER=SYSMAN";
grant_privs -name="BRENT" -privilege="GET_CREDENTIAL;CRED_NAME=NC_SHARED_ORACLE_ROOT:CRED_OWNER=SYSMAN";
...

Login successful
Synchronized successfully

Applying grants


Privileges granted to user/role "JERRY" successfully
Privileges granted to user/role "JERRY" successfully
Privileges granted to user/role "PHIL" successfully
Privileges granted to user/role "PHIL" successfully
Privileges granted to user/role "BRENT" successfully
...

Revoking older grants


Privileges revoked from user/role "BOBBY" successfully
Privileges revoked from user/role "PHIL" successfully
Privileges revoked from user/role "MICKEY" successfully
...

Logout successful

Current grants


GRANTEE CRED_NAME
-------------------------------- --------------------------------
JERRY NC_SHARED_ORACLE
JERRY NC_SHARED_ORACLE_ROOT
PHIL NC_SHARED_ORACLE
PHIL NC_SHARED_ORACLE_ROOT
BILL NC_SHARED_ORACLE
BILL NC_SHARED_ORACLE_ROOT
MICKEY NC_SHARED_ORACLE
MICKEY NC_SHARED_ORACLE_ROOT
...

Step 6 – Deploy Using OEM Jobs

The Job development and deployment process is straight-forward.  The heavy lifting was already done with the shell script.

General Tab

There are four essential elements to complete on this screen

  1. Give the Job a name.
  2. Add a useful description.
  3. Select Target Type of Host
  4. Pick the host where the job will be executed.  The shell script requires SQL+ and EMCLI, both of which are installed on your management servers, so it makes sense to run the job on an OMS.

nc_blog02_job1.png

Parameters Tab

  1. Select Script as the Command Type.
  2. Paste the script into the OS Script box.  You can edit this script after the job has been saved when required (unlike Information Publisher reports).
  3. Name the Interpreter to be used

nc_blog02_job2.png

Credentials Tab

It may seems incestuous to use Named Credentials to manage Named Credentials.  If you feel that way you need to get a hobby.

Select the NC for the operating system account that owns your MW home.

nc_blog02_job3.png

Schedule Tab

I have two versions of this Job.  One is named simply UPDATE_NAMED_CREDENTIALS and the other has _IMMEDIATE tacked on to its name.  The only difference between the two is their schedule.  I kick off the IMMEDIATE job right after I make any change to SYSMAN’s NC’s.  The other one runs early every morning, local time.

nc_blog02_job4.png

Access Tab

You can grant permissions on this job to other OEM administrators.  I may do that someday but not right now.

 

Summary

There is some set-up and analysis required before this will work.  You need to build and populate the control table.  Before your first deployment job runs you’ll probably want to set the SHARE_YN flags.  Since the script handles both grants and revokes there is no harm in running the job a couple of times to get things set the way you want.

In this post I avoided specifics on two important elements:

  • You’ll need to decide how to manage the connect strings within the shell script.  I showed the simplest way in my illustrations.  The SYSMAN password is stored inside the job definition which is probably stored as a CLOB in the OMR so the risk is contained.  You might explore alternatives like passing variables into the script via the Job control system.
  • We grant a specific home-built OEM role for the administrators that will be using OEM for provisioning and patching.  You may choose to simply share these NC’s with all of your EM Administrators/users or base grants on existing OEM roles.  It’s your choice.

Scalability

If/when we decide to expand this functionality to another set of EM Admins (if we choose to maintain another set of NC’s to share with DBAs from the Command center, for instance) another Y/N column could be added to the control table  and the SQL scripts updated to match.

Force OEM to Discover HA Systems

Tags

, , , ,

You know there’s a cluster and that means that an HA system exists, but OEM won’t discover it.  Of course that means that your RAC databases can’t be discovered either and all of this is making you cranky.  Take a deep breath.  We can fix this.

The agent can only recognize an HA system when it knows of the clusterware home.  For some reason the agents weren’t aware of the CRS_HOME on some of our Solaris hosts.

Here’s my solution.

  1. Determine the CRS_HOME with a quick ps -ef | grep lsnr
  2. Add that home to your environment settings with export CRS_HOME=/my/path/to/crshome
  3. Stop and start the agent to pick up the new information.

The agent will discover the clusterware home and report it back to the the management servers.

Run through your typical process in Add Targets Manually to save the HA system as a monitored target.

add_ha_service

Come right back to Add Targets Manually to discover, configure, and add the cluster database using the Guided Process.

In some cases the Guided Process didn’t discover any database targets so I  ran through the dreaded Add Targets Declaratively by Specifying Target Monitoring Properties.  Web page titles like that are good indicators of their unpleasantness.  This one is no exception.

 

add_ha_service2

I found that configuration on that page is quicker if you limit yourself to just the RAC database and one of its instances.  Once that pair is saved, open the Monitoring Configuration page for your newly discovered RAC database and hit the Sync Cluster Database Instances button.  OEM will add the other instances to the list with no typing on your part.  Test the updated connections and save your work.

Reward yourself – you just earned it.

 

 

 

Resolve ‘Device or resource busy’ problems

Tags

Upgrading opatch utility consists of two steps

  1. Remove the old copy of opatch by deleting $OH/OPatch directory
  2. Unzip the replacement file into your Oracle home directory

But when you try to remove the contents of OPatch directory you get slammed with errors like this:

rm: cannot remove `jlib/.nfs0000000005213282002649ad’: Device or resource busy
rm: cannot remove `jlib/.nfs000000000523b2e4002649ae’: Device or resource busy


rm: cannot remove `ocm/lib/.nfs0000000005226a87002649b3′: Device or resource busy
rm: cannot remove `ocm/lib/.nfs0000000005226a88002649b4′: Device or resource busy

 

The lsof utility lists running processes associated with a directory if you use this syntax:

lsof +D <directory name>

 

Example

oms > pwd
/u01/oracle/product/em/oms/OPatch

oms > rm -rf *
rm: cannot remove `jlib/.nfs0000000005213282002649ad’: Device or resource busy
rm: cannot remove `jlib/.nfs000000000523b2e4002649ae’: Device or resource busy
rm: cannot remove `jlib/.nfs000000000523b2e5002649af’: Device or resource busy
rm: cannot remove `jlib/.nfs000000000524eaad002649b0′: Device or resource busy
rm: cannot remove `jlib/.nfs000000000524eaae002649b1′: Device or resource busy
rm: cannot remove `ocm/lib/.nfs0000000005226a87002649b3′: Device or resource busy
rm: cannot remove `ocm/lib/.nfs0000000005226a88002649b4′: Device or resource busy

oms > lsof +D oplan
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 3520 oracle mem REG 0,22 8760 83713032 oplan/jlib/.nfs0000000004fd5c08003d981f
java 3520 oracle mem REG 0,22 18675 83713035 oplan/jlib/.nfs0000000004fd5c0b003d9821
java 3520 oracle mem REG 0,22 6861 83713028 oplan/jlib/.nfs0000000004fd5c04003d981c

oms > kill -9 3520

oms > lsof +D oplan

< Nothing returned >
oms > pwd
/u01/oracle/product/em/oms/OPatch

oms > rm -rf *

oms > cd ../

oms > rmdir OPatch

oms > unzip /shared/oem_patches/opatch/p6880880_111000_Linux-x86-64.zip

OMS Configuration Backup

Tags

, ,

The Job system in OEM provides a flexible and reliable means of scheduling custom activities. This can be particularly handy for managing OEM itself.

Backing up the configuration of your management server is essential for recovery and the Job system is great tool for scheduling it.

Job Creation

Start by creating a Job through Enterprise | Job | Job Library.  Select OS Command from the Create Library Job dropdown.

OMS_Backup01

On the General tab give the job a name and description, then associate it with the OMS server hosting the Admin Server for your cluster

OMS_Backup02.png

On the Parameters tab

  • Select Script as the Command Type
  • Create a script in the OS Script block from this sample, inserting your own paths and sysman password.  The directory referenced as BU_DIR should be on your shared drive containing the Software Library
  • Enter your command interpreter (/bin/bash in this example)

OMS_Backup03

Associate the job with your appropriate named credential on the Credentials tab.

Create an initial schedule in the Schedule tab. We’ll come back to this page when we run a test later.

OMS_Backup04

Save your new job to the library

OMS_Backup05

Test It

You’ll be returned to the Job Library page.  Click the radio button for your new job and press the Submit button

OMS_Backup06

Go to the Schedule tab and select One Time (Immediate).

OMS_Backup07

Click-through on the job name (OMS BACKUP 1.0 in this example) to follow your progress

OMS_Backup08

OMS_Backup09

Follow-up

  1. Visit the OMS server and verify that file was created where you expected it.  Do this again in a few days to verify that the job is running as scheduled
  2. Check back with the Job Activity  page in a couple days.
  3. Create another job to clean up older backup files

 

 

Implement VM Virtual Box for OEM 13c

Tags

,

Oracle has released a nicely packaged, preconfigured OEM 13c environment for us to play with inside Oracle Virtual Box.  The VM comes with an installed repository database, a management server, and a local agent.  Great starting place.

Download the zip files from http://www.oracle.com/technetwork/oem/enterprise-manager/downloads/oem-templates-2767917.html.

OVB_13c_01.png

Lets walk through items c-f since the instructions aren’t super clear.

Item c:  Uncheck ‘Programs’ when edelivery brings up this page

OVB_13c_03.png

Item d:  Start typing Oracle VM Virtual Box for Oracle Enterprise Manager Cloud Control until the list appears.  Select the item highlighted below.

OVB_13c_04.png

Item e is extraneous, since the platform is already selected for you.  Select the latest release on the next screen (there’s only one release as I write this post).

Review and accept the license agreement

OVB_13c_05.png

We’ve finally arrived at the download page.  Hit the Download All button and find something else to do for a while.  The Download Manager will restart downloads for you if your local machine goes to sleep.

OVB_13c_06

I created a separate download folder for this download, and it turned out to be handy for the next step which is unzip all the downloaded files.

OVB_13c_07

Being conscientious professionals, we’ll start by reading the README file.  I pasted it here so you’d have an idea what to expect.  In a nutshell:

  1. Combine all the ova files into one file
  2. Import the appliance
  3. Start it and use it.  Passwords for everything is welcome1

BTW:  I increased the VM’s memory to 10GB to make the VM run a little better.

The first thing I did when I opened the VM was create a desktop shortcut to a terminal app, in this case it’s Konsole.  I’m not a KDE user, so I guessed my way through it:

  1. Right click on the desktop
  2. Create New | Link to Application
  3. Hit the Application tab, then browse to /usr/bin to find konsole

You can also got through the Launcher, find the application in the list, and create a shortcut from in there.  That’s what I did to get Mozilla on the desktop.

Open that terminal and execute ./start_all.sh to get it all started.  Open a second terminal and run top to see how hard this VM has to work to get things started.

One last thing:  After you’ve started the VM, run stop_all.sh first and then run start_all.sh to get a nice, clean start on everything including the OMR.

OVB_13c_08.png

 

 

 

 

 

Smart Connections with BetterTouchTool

Tags

,

Terminal applications like iTerm2 are a great way to improve your efficiency when connecting to a remote host on your Mac.  As I started making my own shortcut keys I hit the wall.

When I have an OEM agent to check, I’ll log into the box, sudo to the binary owner, go the agent bin directory, and execute emctl status agent.

Here’s the wall:  Shortcut keys from iTerm could change directory and execute a command, but each step needs its own shortcut. I want one keystroke to get me there and give me a status.

This is where BetterTouchTool comes in.

The first step is to define the application the action will work with in the left panel.  Hit the + button and select iTerm from the list.

btt_01

In the right-hand panel press Add New Shortcut and give it a shortcut key.

btt_02

Under the Predefined Actions drop-down, open the Utility Actions group and select Paste Custom Text.  Type your text into the pop-up.

btt_07

This is where the magic happens.  Press the Attach Additional Action button and tell it you want to record a keystroke.  Hit the Enter key.

btt_03

Repeat that sequence for each additional task

  • Trigger predefined action
  • Paste Custom Text (./emctl status agent)
  • Trigger another keyboard shortcut for a hard return …

 

BTW:  The tab for Attach Additional Action may be greyed-out.  Select it anyhow.

 

 

 

 

 

Actively Manage Your OMR with EMDIAG

Tags

,

Oracle provides the OMR analysis tools EMDIAG and repvfy so we can perform detailed management repository analysis and maintenance just like the pros.

Kellyn has her typical clear instructions on how to install the tools at http://dbakevlar.com/2013/02/using-the-em-diagnostic-kit-with-em12c/.

Werner de Gruyter (Yoda), the father and caretaker for EMDIAG, has provided a custom Information Publisher report that you can use to manage your system on a regular basis.

Create EMDIAG Report

EM CLI allows you to create an IP report by importing an XML definition of the report.  Create and save the XML file listed at the bottom of this post and execute the following EM CLI commands to create this report:

emcli login -username=sysman
emcli sync
emcli import_report -files=rpt_last_run.xml

This Information Publisher report can be found under a new EMDIAG category.

emdiag_report2

Because I’m me, I had to make a couple changes to the report:  scheduled it for weekly refresh (emailed to my team each Sunday), added it to my Public Reports page, and switched the bottom two sections of the report so the Top Five appears above the complete listing.

Run repvfy Regularly

That gets you halfway there – the report shows results the latest run of repvfy, so you need to keep it current.  I’ve cronned this simple script on one of my OMR database servers:

#!/bin/bash
# ------------------------------------------------------------------------
# File name = refresh_repvfy.sh
# Purpose = Update OMR health status analysis
# Paramenters = None
# ------------------------------------------------------------------------
export ORACLE_HOME=/home/oracle/product/11.2.0.4
export EMDIAG=${ORACLE_HOME}/emdiag
# Cleanup logs from older executions
find ${EMDIAG}/log/repvfy* -type f -mtime 2 -exec rm -f {} \;
# Execute the program
${EMDIAG}/bin/repvfy diag all

I have it scheduled to run daily.

The Report

The report consists of four sections: EMDIAG Details, Scorecard, Violations, and the Top Five Violations in each category.

In order to use this report effectively you need to understand that the ‘Test’ numbers indicate the priority/importance of the individual test.  Tests in the 1000 series have more impact than tests in the 8000 series, etc.  Click on the column heading to sort tabular data.

emdiag_report

 

File rpt_last_run.xml

<?xml version = '1.0' encoding = 'UTF-8'?>
<ReportDefinition title="EMDIAG - Results of Last Run" internal_only="0" system_report="0" category="EMDIAG" sub_category="Diagnostics" show_navigation="0" generate_context="0" add_toc="0" product_name="EM" is_jit_multi_target="0" is_jit_target="0" style="BLAF" oms_version="12.1.0.2.0" xmlns="http://www.oracle.com/DataCenter/ReportDefinition">
 <ReportWideParameters parameterName="oracle.sysman.eml.ip.render.elem.TimePeriodOption" parameterValue="false"/>
 <ReportWideParameters parameterName="oracle.sysman.eml.ip.render.elem.TimePeriodParam" parameterValue="0:0"/>
 <ReportWideParameters parameterName="oracle.sysman.eml.ip.render.elem.TimezoneRegion" parameterValue="PST8PDT"/>
 <ReportWideParameters parameterName="oracle.sysman.eml.ip.render.elem.TimePeriodUserCust" parameterValue="false"/>
 <ReportElement element_row="1" suppress_render="0" element_name_nlsid="IPMSG_USER_TABLE_FROM_SQL" element_type_nlsid="IPMSG_ANY_TARGET_TYPE" element_order="0">
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.TableRender.maxNumberOfRowsAllowed" parameterValue="10"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.sqlStatementIsPlSql" parameterValue="false"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.headerParam" parameterValue="EMDIAG Details"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.sqlStatement" parameterValue="SELECT component,info FROM sysman.em$diag_info_ext UNION ALL SELECT 'Last Run' component,TO_CHAR(last_verify,'DD-MON-YYYY HH24:MI:SS') info FROM sysman.em$diag_config_ext"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.TableRender.numRowsToShow" parameterValue="10"/>
 </ReportElement>
 <ReportElement element_row="1" suppress_render="0" element_name_nlsid="IPMSG_USER_TABLE_FROM_SQL" element_type_nlsid="IPMSG_ANY_TARGET_TYPE" element_order="1">
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.TableRender.maxNumberOfRowsAllowed" parameterValue="10"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.sqlStatementIsPlSql" parameterValue="false"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.headerParam" parameterValue="Scorecard"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.sqlStatement" parameterValue="SELECT category,TO_CHAR(DECODE(SIGN(100-SUM(score)),-1,0,100-SUM(score)),'90.90') score,COUNT(*) tests,SUM(cnt) violations FROM sysman.em$diag_latest_score_ext WHERE category!='Other' GROUP BY category ORDER BY category"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.TableRender.numRowsToShow" parameterValue="10"/>
 </ReportElement>
 <ReportElement element_row="2" suppress_render="0" element_name_nlsid="IPMSG_SEPARATOR" element_type_nlsid="IPMSG_NO_TARGET_TYPE" element_order="2"/>
 <ReportElement element_row="3" suppress_render="0" element_name_nlsid="IPMSG_USER_TABLE_FROM_SQL" element_type_nlsid="IPMSG_ANY_TARGET_TYPE" element_order="3">
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.TableRender.maxNumberOfRowsAllowed" parameterValue="2000"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.sqlStatementIsPlSql" parameterValue="false"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.headerParam" parameterValue="Violations"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.sqlStatement" parameterValue="SELECT module,TO_CHAR(id,'0000') test,label,vfy_cnt violations FROM sysman.em$diag_latest_results_ext ORDER BY module,id"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.TableRender.numRowsToShow" parameterValue="50"/>
 </ReportElement>
 <ReportElement element_row="4" suppress_render="0" element_name_nlsid="IPMSG_SEPARATOR" element_type_nlsid="IPMSG_NO_TARGET_TYPE" element_order="4"/>
 <ReportElement element_row="5" suppress_render="0" element_name_nlsid="IPMSG_USER_TABLE_FROM_SQL" element_type_nlsid="IPMSG_ANY_TARGET_TYPE" element_order="5">
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.TableRender.maxNumberOfRowsAllowed" parameterValue="50"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.sqlStatementIsPlSql" parameterValue="false"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.headerParam" parameterValue="Top-5 Violations per Category"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.sqlStatement" parameterValue="SELECT category,module,TO_CHAR(id,'0000') test,label,TO_CHAR(score,'90D0') score,cnt violations FROM (SELECT category,module,id,label,ROUND(score,1) score,cnt,rank() OVER (PARTITION BY category ORDER BY score DESC) rk FROM sysman.em$diag_latest_score_ext) WHERE rk&lt;6 AND category!='Other' ORDER BY category,score DESC,cnt,module,id"/>
 <ReportElementParameters parameterName="oracle.sysman.eml.ip.render.elem.TableRender.numRowsToShow" parameterValue="25"/>
 </ReportElement>
</ReportDefinition>


Changing OEM BI Publisher Host

Tags

,

Changing the name of the server or load-balancing server handling your BI Publisher workload for OEM can be done with a single EM CLI command.  The values you need to know are:

  • Protocol, either http or https
  • The host or LBS name
  • The BIP port
emcli login -username=sysman
emcli sync
emcli setup_bipublisher -protocol=https -host=demo_oms01.demo.com -port=9702 -uri=xmlpserver -force
BI Publisher "https://demo_oms01.demo.com:9702/xmlpserver" has been registered for use with Enterprise Manager and the Enterprise Manager Oracle-provided Reports have been deployed to the Shared folder "/Enterprise Manager Cloud Control".

What’s Inside an EM Agent Upload

Tags

, , , ,

OEM agents on each host upload data to your management servers every few minutes.

Here’s how you can see exactly what your agent has uploaded.  First, enable local backups of the uploaded files with:

emctl setproperty agent -name 'backupUploadedFiles' -value 'true'

Then bounce the agent and perform an upload like this:

emctl reload agent
emctl upload agent

Look in your ../agent_inst/sysman/emd/upload/upload/succbkup/ directory (I snickered a little when I saw the directory name, too) for a numbered subdirectory.  If that directory doesn’t exist execute the upload agent command again and then check for the subdirectory.  As soon as you’ve confirmed the existence of a subdirectory is there, turn off the upload backup before you forget.

emctl setproperty agent -name 'backupUploadedFiles' -value 'false'
emctl reload agent 
emctl upload agent

You’ll see something that looks like this in those files:

<?xml version="1.0" encoding="UTF-8"?><UP OPV="12.1.0.1.0" MTS="2015-09-24T09:41:44.224-07:00" EU="https://demodb475.demo.com:3872/emd/main/" UT="metadata"><MD MT="DynamicProperties" TI="TARGET_GUID=866AB07AE9F11C0C5F58FCE7CFEE12F1" TN="SAMPLE_RO1_SAMPLE_1" TT="oracle_database"><PL>&lt;Target TYPE=&quot;oracle_database&quot; NAME=&quot;SAMPLE_RO1_SAMPLE_1&quot; DISPLAY_NAME=&quot;SAMPLE_RO1_SAMPLE_1&quot; ON_HOST=&quot;&quot; EMD_URL=&quot;https://demodb475.demo.com:3872/emd/main/&quot; TIMEZONE_REGION=&quot;&quot; TYPE_DISPLAY_NAME=&quot;Database Instance&quot; IDENTIFIER=&quot;TARGET_GUID=866AB07AE9F11C0C5F58FCE7CFEE12F1&quot;&gt;
 &lt;Property NAME=&quot;MetricScope&quot; VALUE=&quot;RACINST&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;DBVersion&quot; VALUE=&quot;11.2.0.4.0&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;VersionCategory&quot; VALUE=&quot;11gR202&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;RACOption&quot; VALUE=&quot;YES&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;DataGuardStatus&quot; VALUE=&quot;Physical Standby&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;CDB&quot; VALUE=&quot;NO&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;FullLLFile&quot; VALUE=&quot;TRUE&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;DBCategoryDetails&quot; VALUE=&quot;FullLLFile&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;umask_setting_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;log_archive_dest_perm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;log_archive_dest_owner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;log_archive_duplex_dest_perm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;log_archive_duplex_dest_owner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;oh_bin_files_owner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;oh_files_perm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;oh_exebin_files_perm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;utl_file_dir_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;utl_file_dir_9i_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;oh_ifile_perm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;initora_perm&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;spfile_perm&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;audit_file_dest_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;user_dump_dest_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;background_dump_dest_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;core_dump_dest_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;osauth_prefix_domain_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;trace_files_public_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;remote_listener_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;audit_trail_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;os_authent_prefix_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;sql92_security_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;db_link_global_name_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;audit_syslog_level_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;remote_os_roles_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;remote_os_authent_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;remote_login_passwordfile_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;tkprof_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;otrace_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;sqlplus_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;tkprof_owner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;sqlplus_owner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;webcache_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;webcache_owner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;snmp_ro_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;snmp_ro_owner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;snmp_rw_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;snmp_rw_owner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;wdbsvr_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;wdbsvr_owner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;htperm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;htowner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;xsql_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;xsql_owner_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;win_plat_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;drive_perm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;domain_user_grp_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;win_tools_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_tkprof_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_sqlplus_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_webcache_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_snmp_ro_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_snmp_rw_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_wdbsvr_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_htperm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_xsql_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_audit_file_dest_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_user_dump_dest_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_background_dump_dest_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_core_dump_dest_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_oh_ifile_perm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_log_archive_dest_perm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_log_archive_duplex_dest_perm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_oh_exebin_files_perm_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_spfile_perm&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_initora_perm&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;db_link_pwd&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;dba_ts_quotas&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;password_life_time&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;password_reuse_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;password_reuse_time&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;password_lock_time&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;password_grace_time&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;well_known_ac&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;default_pwd&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;pub_sys_priv&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;failed_login_at&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;db_data_perm&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;db_control&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_aud_table_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_user_history_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_source_table_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_link_table_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_user_table_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_sql_text_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_sql_summary_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_all_source_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_dba_roles_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_dba_sysprivs_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_dba_roleprivs_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_dba_tabprivs_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_dba_users_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_role_roleprivs_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_user_tabprivs_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;access_user_roleprivs_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;public_execute_UTL_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;password_complexity_fn&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;public_execute_UTL_TCP_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;public_execute_UTL_HTTP_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;public_execute_UTL_SMTP_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;select_table_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;select_privilege_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;proxy_account_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;insert_failure_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_db_data_perm&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;nt_db_control&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;catalog_roles_max&quot; VALUE=&quot;25&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;DBName&quot; VALUE=&quot;SAMPLE_RO1&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;InstanceName&quot; VALUE=&quot;SAMPLE_1&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;StartTime&quot; VALUE=&quot;2015-09-23 19:50:56&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;TimeFormat&quot; VALUE=&quot;YYYY-MM-DD HH24:MI:SS&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;Version&quot; VALUE=&quot;11.2.0.4.0&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;TimedStatistics&quot; VALUE=&quot;TRUE&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;OpenMode&quot; VALUE=&quot;READ ONLY WITH APPLY&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;RACInstNum&quot; VALUE=&quot;1&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;CPUTimingEnabled&quot; VALUE=&quot;TRUE&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;StatisticsLevel&quot; VALUE=&quot;TYPICAL&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;VersionBanner&quot; VALUE=&quot;Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;MCSpInst&quot; VALUE=&quot;0&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;MCResponse&quot; VALUE=&quot;3&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;MCPkg&quot; VALUE=&quot;2&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;background_dump_dest&quot; VALUE=&quot;/x/home/oracle/diag/rdbms/sample_ro1/SAMPLE_1/trace&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;core_dump_dest&quot; VALUE=&quot;/x/home/oracle/diag/rdbms/sample_ro1/SAMPLE_1/cdump&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;user_dump_dest&quot; VALUE=&quot;/x/home/oracle/diag/rdbms/sample_ro1/SAMPLE_1/trace&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;log_archive_mode&quot; VALUE=&quot;ARCHIVELOG&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;alert_log_file&quot; VALUE=&quot;/x/home/oracle/diag/rdbms/sample_ro1/SAMPLE_1/trace/alert_SAMPLE_1.log&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;CPUCount&quot; VALUE=&quot;128&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;OSMInstance&quot; VALUE=&quot;+ASM1&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;ConvertFromCharset&quot; VALUE=&quot;UTF8&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;needCharsetConvert&quot; VALUE=&quot;TRUE&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;AdrBase&quot; VALUE=&quot;/x/home/oracle&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;AdrHome&quot; VALUE=&quot;/x/home/oracle/diag/rdbms/sample_ro1/SAMPLE_1&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;Property NAME=&quot;DbBlockSize&quot; VALUE=&quot;8192&quot; IS_DYNAMIC=&quot;TRUE&quot;/&gt;
 &lt;CompositeMembership&gt;
 &lt;MemberOf TYPE=&quot;rac_database&quot; NAME=&quot;SAMPLE_RO1&quot;/&gt;
 &lt;/CompositeMembership&gt;
&lt;/Target&gt;
</PL></MD></UP>

Forcing OEM Target Detail Discovery

Tags

, , ,

The Problem – Missing Target Details

I was evaluating an Information Publisher report containing data about host targets. The report is based on the sysman.mgmt$os_hw_summary view that contains all sorts of information about your hosts.  It is an excellent data source for Information Publisher reports.  Unless the data is missing.

One of my hosts didn’t appear in that view, even though the host’s console page appeared healthy.  Then I looked at the details.  Instead of looking like this:

refresh_config0

.. it looked like this:

refresh_config00

None of the details related to the host were there!  Regardless of its cause, important data about this target was not known to OEM and my report was incomplete.

The Fix

You can manually collect those missing details by starting from the drop-down on the host’s home page.  Select Last Collected from the Configuration item on the drop-down.

refresh_config1

On the Last Collected page,  pull down the Actions menu with its flashy green gear and select Refresh to force the agent to rediscover all the details about the target and then upload that new knowledge into the repository.

refresh_config3

refresh_config4

After my refresh all of the data appeared on the home page and the host appeared in the report that started this whole event.

Follow

Get every new post delivered to your Inbox.

Join 374 other followers