# DCagt.ctl:420:Collects Enterprise Manager Agent Information # $Id: DCagt.ctl,v 1.19 2015/10/06 11:30:37 RDA Exp $ # ARCS: $Header: /home/cvs/cvs/RDA_8/src/scripting/lib/collect/EM/DCagt.ctl,v 1.19 2015/10/06 11:30:37 RDA Exp $ # # Change History # 20150929 KRA Improve 'Agent Server Host' section. =head1 NAME EM:DCagt - Collects Oracle Enterprise Manager Agent Information =head1 DESCRIPTION This module collects Oracle Enterprise Manager Agent-related information. The following reports can be generated and are regrouped under C: =cut echo tput('bold'),'Processing EM.AGT module ...',tput('off') # Initialization var $AGT = ${D_BASE_HOME:''} var $AGENT_HOME = ${D_HOME:''} var $ORACLE_HOME = ${D_ORACLE_HOME:${SET.RDA.BEGIN.D_ORACLE_HOME:''}} var $TAIL = ${DFT.N_TAIL:1000} if ${D_ORACLE_HOME} var $EMCTL = catCommand(last,'bin',${AS.BATCH:'emctl'}) else var $EMCTL = catCommand($AGENT_HOME,'bin',${AS.BATCH:'emctl'}) var $MOD = cond(isUnix(),'fx','fr') var $OSN = getOsName() var $TOC = '%TOC%' var $TOP = '[[#Top][Back to top]]' var $ERR = ' (error)' # Set the required environment var $env = setContext({PERL5LIB => ${ENV.PERL5LIB},\ PERL5OPT => ${ENV.PERL5OPT}}) # Search for the sysman directories var $SYSMAN = catDir($AGENT_HOME,'sysman') var @SYSMAN = ($SYSMAN) if ?nvl(testDir('d',catDir($AGENT_HOME,$nod = ${RDA.T_HOST},'sysman')),\ testDir('d',catDir($AGENT_HOME,$nod = ${RDA.T_NODE},'sysman'))) {call push(@SYSMAN,lastDir()) loop $sub (grepDir($AGENT_HOME,concat('^',verbatim($nod),'_'),'np')) {if ?testDir('d',catDir($sub,'sysman')) call push(@SYSMAN,lastDir()) } } # Load the common macros run EM:EMdiag() run RDA:INVinfo() run RDA:library() # Get the 'hosts' file var $HOSTS = '/etc/hosts' if or(isCygwin(),isWindows()) {if ?${ENV.SYSTEMROOT} var $HOSTS = catFile($sys = last,'System32','drivers','etc','hosts') elsif isWindows() {var ($sys) = command('echo %SystemRoot%') if ?$sys var $HOSTS = catFile(last,'System32','drivers','etc','hosts') } } # Validate the context var $CFG = get_config($EMCTL) if match($CFG,'dbconsole|true') {echo 'Use the DBC module for this DBControl install.' return } if get_agent_name($AGENT_HOME) toc '1:EM Agent (',last,')' else toc '1:Enterprise Manager Agent' # Set the AGT symbols if ?${D_ORACLE_HOME} {call setSymbol('$OB_AGT',$AGT) call setSymbol('$OH_AGT',$ORACLE_HOME) call setSymbol('$OI_AGT',$AGENT_HOME) } else call setSymbol('$OH_AGT',$AGENT_HOME) # Get the agent version var $ver = undef if loadCommand(concat($EMCTL,' status agent')) {if grepLastFile('\sRelease\s','f') {var ($lin) = last if match($lin,'\s(\d+(\.\d+){3,})') var ($ver) = last elsif match($lin,'12c\sRelease\s') var $ver = 12 } if !$ver {if grepLastFile('\sCloud Control\s','f') {var ($lin) = last if match($lin,'\s(\d+(\.\d+){3,})') var ($ver) = last elsif match($lin,'\sCloud Control\s12c') var $ver = 12 } } } if !$ver {if loadCommand(concat($EMCTL,' getversion agent')) {if grepLastFile('\sRelease\s','f') {var ($lin) = last if match($lin,'\s(\d+(\.\d+){3,})') var ($ver) = last elsif match($lin,'12c\sRelease\s') var $ver = 12 } if !$ver {if grepLastFile('\sCloud Control\s','f') {var ($lin) = last if match($lin,'\s(\d+(\.\d+){3,})') var ($ver) = last elsif match($lin,'\sCloud Control\s12c') var $ver = 12 } } } } =head2 abbr_used - Abbreviations Displays the RDA abbreviations defined for Oracle Enterprise Manager Agent collection. =cut report abbr_used prefix {write '---+ Oracle Enterprise Manager Agent Home Abbreviations' write '|*Abbreviation*|*Location*|' } var %hsh = getSymbols() loop $abr (keys(%hsh)) write '|',$abr,' |',$hsh{$abr},' |' if isCreated(true) toc '2:[[',getFile(),'][rda_report][Abbreviations]]' =head2 oh_process - Oracle Home Active Processes For version 12c and later, it displays information about agent Oracle home-related processes (applies to AIX, HP-UX, Linux, Solaris only). =cut if and(compare('VALID',$ver,'12'),\ defined($cmd = check($OSN,'aix', '/bin/ps auxwww',\ 'hpux', '/usr/bin/ps -efx',\ 'linux', '/bin/ps auxwww',\ 'solaris','/usr/ucb/ps auxwww'))) {debug ' Inside AGT module, gathering info about Oracle home-related processes' report oh_process prefix {write '---+ Oracle Home Active Processes' call beginBlock(true) write getHeader() } loop $lin (grepCommand($cmd,concat('\s',verbatim($ORACLE_HOME),'\b'))) write $lin if isCreated(true) {call endBlock() toc '2:[[',getFile(),'][rda_report][Oracle Home Active Processes]]' } } =for stopwords emctl =head2 emctl - emctl Command Output For version 12c and later, it collects the output of the following F command options: =over 4 =item o C =item o C =item o C =item o C =item o C =item o C =item o C =item o C =item o C =item o C =item o C =item o C =item o C =item o C =item o C =item o C =back For earlier versions, it collects the output of the following F command options: =over 4 =item o C =item o C =item o C =item o C =item o C =item o C =item o C =item o C or C =item o C =item o C =item o C =item o C =back =cut debug ' Inside AGT module, collecting emctl information' if compare('VALID',$ver,'12') {var @opt = ('start agent',\ 'getversion agent',\ 'status agent',\ 'status agent scheduler',\ 'status agent jobs',\ 'config agent getTZ',\ 'status agent -secure',\ 'status agent dbconnections',\ 'status agent verify',\ 'status blackout',\ 'pingOMS',\ 'verifykey',\ 'dumpstate agent',\ 'getemhome',\ 'listplugins agent',\ concat('getmetric agent ',get_agent_name($AGENT_HOME),\ ',oracle_emd,z#ConfigProperties')) var @dsc = ('Agent Start',\ 'Agent version',\ 'Current status of the agent',\ 'Collections currently scheduled for the agent',\ 'List of current jobs running in the agent',\ 'Agent Time Zone',\ 'Secure status of the agent',\ 'Agent Database connections details',\ 'Agent communication details',\ 'Agent blackout status',\ 'Agent to Oracle Management Server HTTP(S) ping test',\ 'Verify Key',\ 'Agent dump state',\ 'Agent EM home',\ 'Agent plugins',\ 'Agent Metric Information') } else {var @opt = ('status agent',\ 'upload',\ 'status agent scheduler',\ 'status agent memory',\ 'status agent jobs',\ 'config agent getTZ',\ 'status agent secure',\ cond(compare('older',$ver,'10.2.0.3'),'secure status agent',\ 'status agent -secure'),\ 'pingOMS',\ 'verifykey',\ 'status agent oci',\ 'status agent mutex') var @dsc = ('Current status of the agent',\ 'Makes upload request to the Oracle Management Server. Show error \ message (if any) returned by the Oracle Management Server in \ response to the request.',\ 'Collections currently scheduled for the agent',\ 'Current memory footprint of agent',\ 'List of current jobs running in the agent.',\ 'Agent Time Zone',\ 'Secure status of the agent',\ 'Secure status of the agent',\ 'Agent to Oracle Management Server HTTP(S) ping test',\ 'Verify Key',\ 'OCI agent status',\ 'Agent Mutex status') } var $cmd = exec_emctl($EMCTL,$AGENT_HOME,\@opt,\@dsc) var $HOM = cond(compare('VALID',$ver,'12'),$ORACLE_HOME,$AGENT_HOME) =head2 dns_info - Domain Name Resolution Displays the output of the C test performed on the agent server. This test picks agent server from the C property in the F file. =cut debug ' Inside AGT module, performing nslookup test' var %HST = ('EMD Host Name',get_agent_host($AGENT_HOME),\ 'OS Host Name', ${RDA.T_HOST}) if ?testFile('f',check($OSN,\ 'aix', '/usr/bin/nslookup',\ 'hpux', '/bin/nslookup',\ 'linux', '/usr/bin/nslookup',\ 'solaris','/usr/sbin/nslookup',\ cond(defined($sys),catFile($sys,'System32','nslookup.exe')))) {var $NSLOOKUP = lastTestCommand() report dns_info title '---+!! Domain Name Resolution Information' title $TOC loop $ttl (keys(%HST,'KD')) {next !length($str = $HST{$ttl}) title '---+ ',$ttl if ?isHostName($str,true) call check_dns($NSLOOKUP,last,'Forward') elsif ?isIP($str,true) call check_dns($NSLOOKUP,last,'Reverse') } if isCreated(true) toc '2:[[',getFile(),'][rda_report][Domain Name Resolution]]' } =head2 ping_test - Agent Ping Test Displays the output of the ping test performed on the agent server. This test picks agent server from the C property in the F file. =cut debug ' Inside AGT module, performing ping tests' call ping_host('Agent Ping Test',values(%HST,'KD')) =head2 hosts - Agent Server Host Extracts agent server host name entries from the F file. =cut debug ' Inside AGT module, extracting agent host name entries from hosts file' if ?testFile('f',$HOSTS) {report hosts title '---+!! Agent Server Host Information' title $TOC loop $ttl (keys(%HST,'KD')) {next !length($hst = $HST{$ttl}) if compare('eq',$ttl,'OS Host Name') title '---+ Physical Host Name ',$hst elsif compare('eq',$ttl,'EMD Host Name') title '---+ EMD_URL Host Name ',$hst prefix {write '---## Information extracted from ',encode($HOSTS),\ ' File for physical host ',encode($hst) call beginBlock(true) } loop $lin (grepFile($HOSTS,concat('^[^#]*\s',verbatim($hst),'(\s|\z)'))) write $lin if hasOutput(true) call endBlock() if ?$NSLOOKUP {if ?isHostName($hst,true) var $str = check_dns($NSLOOKUP,last,'Forward',true) elsif ?isIP($hst,true) var $str = check_dns($NSLOOKUP,last,'Reverse',true) else var $str = undef if ?$str {prefix {write '---## Information extracted from ',encode($HOSTS),\ ' File for IP address returned from nslookup ',encode($hst) call beginBlock(true) } loop $lin (grepFile($HOSTS,concat('^[^#]*\s',verbatim($str),'(\s|\z)'))) write $lin if hasOutput(true) call endBlock() } } if isCreated() write $TOP } if isCreated(true) toc '2:[[',getFile(),'][rda_report][Agent Server Host]]' } =head2 monitored_targets - Monitored Targets Displays the targets in the F file of the Oracle Enterprise Manager Agent and performs some predefined tests on target properties. It displays the current state of the target and its blackout information also. =cut debug ' Inside AGT module, collecting monitored target information' call display_targets($cmd,$AGENT_HOME,true,\ 'v,oracle_database,UserName,.',\ 'v,oracle_database,password,.',\ 'f,oracle_listener,ListenerOraDir,.',\ 'h,oracle_ias,StatusURL,.',\ concat('tn,oracle_emd,should start with host name,^',\ verbatim(${RDA.T_HOST}))) =head2 ping_test - OMS Ping Test Displays the output of the ping test performed on the Oracle Management Server. This test picks Oracle Management Server from the C property in the F file. =cut debug ' Inside AGT module, performing OMS ping test' call ping_host('OMS Ping Test',get_repository_host($AGENT_HOME)) =head2 product_info - Product Information Provides the inventory for the Oracle Enterprise Manager Agent home. =cut debug ' Inside AGT module, providing the agent inventory (can take time)' report inventory prefix {write '---+!! Agent Product Information' write '---## From ',encode($HOM),' ' write $TOC } call inventory_details(catDir($HOM,'inventory'),${B_INTERIM}) if isCreated(true) toc '2:[[',getFile(),'][rda_report][Product Information]]' =head2 oh_bin - Oracle Home Lists the content of the F<$HOM/bin> directory (for version 12c and later). =head2 oi_bin - Instance Home Lists the content of the F<$AGENT_HOME/bin> directory (for version 12c and later). =head2 bin - bin Directory Content Lists the content of the F<$AGENT_HOME/bin> directory (for versions earlier than 12c). =cut macro stat_dir {var ($lvl,$rpt,$ttl,$dir) = @arg report $rpt prefix write '---+!! Content of ',encode($dir) call statDir('n',$dir) if isCreated(true) toc $lvl,':[[',getFile(),'][rda_report][',$ttl,']]' } debug ' Inside AGT module, collecting bin directory content' if compare('VALID',$ver,'12') {pretoc '2:bin Directory Content' call stat_dir(3,'oh_bin','Oracle Home',catDir($HOM,'bin')) call stat_dir(3,'oi_bin','Instance Home',catDir($AGENT_HOME,'bin')) unpretoc } else call stat_dir(2,'bin','bin Directory Content',catDir($AGENT_HOME,'bin')) =head2 plugins - Plug-ins Home Lists the content of the F<$AGT/plugins> directory (for version 12c and later). =cut debug ' Inside AGT module, collecting plugins directory content' if compare('VALID',$ver,'12') call stat_dir(2,'plugins','Plug-ins Home',catDir($AGT,'plugins')) =for stopwords oraclehomeproperties =head2 ohprop - oraclehomeproperties.xml Displays the contents of the F file from the F<$AGENT_HOME/inventory/ContentsXML> directory. =cut debug ' Inside AGT module, providing the agent oraclehomeproperties.xml' report ohprop var $fil = catFile($HOM,'inventory','ContentsXML','oraclehomeproperties.xml') prefix {write '---+ Contents of oraclehomeproperties.xml File' write '---## Information Taken from ',encode($fil) } call writeFile($fil) if isCreated(true) toc '2:[[',getFile(),'][rda_report][oraclehomeproperties.xml]]' =for stopwords Agtvfy =head2 agtvfy - EMDIAG Agtvfy Detail Output Collects EMDIAG Agent verification results. =cut if ${B_EMDIAG_IN_USE} {debug ' Inside AGT module, running agtvfy' report agtvfy var $EMDIAG_TOP = ${D_EMDIAG_TOP} if ?testFile($MOD,catFile($EMDIAG_TOP,'bin',${AS.BATCH:'agtvfy'})) {if compare('VALID',$ver,'12') var ($hom,$cmd) = \ ($HOM,concat(lastCommand(),' verify all -level 9 -detail /d ',\ quote($EMDIAG_TOP),' /o ',quote($HOM),' 2>&1')) else var ($hom,$cmd) = \ ($AGENT_HOME,concat(lastCommand(),' verify -level 9 -detail /d ',\ quote($EMDIAG_TOP),' /o ',quote($AGENT_HOME),' 2>&1')) prefix {write '---+ EMDIAG Agtvfy Detail Output' write '---## Using: ',encode($cmd) } call writeCommand({cmd => $cmd,\ env => {EMDIAG_HOME => $EMDIAG_TOP,\ ORACLE_HOME => $hom}}) if isCreated(true) toc '2:[[',getFile(),'][rda_report][EMDIAG Agtvfy Detail Output]]' } # Collect kit log files if $EMDIAG_TOP {pretoc '2:EMDIAG Kit Log Files' call sort_files(3,$TAIL,grepDir(catDir($EMDIAG_TOP,'log'),'\.log$','np')) unpretoc } } =head2 agent_config - Agent Configuration Collects the following configuration files: =over 24 =item F This file contains all the operational parameters for the Oracle Enterprise Manager Agent. =item F This file contains the logging setup for the Java fetchlets. =back It performs some predefined tests on the configuration properties also. It reports failures. =cut debug ' Inside AGT module, collecting agent configuration' var @cfg = ('f,emdRootCertLoc,.') var @log = () call display_agent_config($AGENT_HOME,\@cfg,\@log) call skip_files(catFile($SYSMAN,'config','emd.properties'),\ catFile($SYSMAN,'config','emagentlogging.properties')) =head2 Agent Configuration Collects all the C<*.lst>, and C<*.properties> files from the F<$SYSMAN/config> directory. Collects all the C<*.ini>, C<*.txt>, and C<*.xml> files from the F<$SYSMAN/emd> directory. Collects additional Oracle Enterprise Manager Agent files. Some of the important files are as follows: =over 20 =item F This file contains the Agent image details (for version 12c). =item F This file contains the list of all Oracle Universal Installer inventories on the system to be considered by the Oracle Enterprise Manager Agent (for versions earlier than 12c). =item F This file contains the time stamp of the last heartbeat to the Oracle Management Server. =item F This file contains a list of all discovery scripts that must be run for discovery. Discovery is run only once, typically during the installation of the Oracle Enterprise Manager Agent (for versions earlier than 12c). =item F This file has information about categories properties computed for various targets (for versions earlier than 12c). =item F This file contains the names of all supported time zones (for versions earlier than 12c). =item F This file contains the version-specific information of the Oracle Management Server, which is required by the Oracle Enterprise Manager Agent to communicate properly (for versions earlier than 12c). =item F This file contains the time zones update information (for versions earlier than 12c). =item F This file is generated by Oracle Universal Installer during the installation of the Oracle Enterprise Manager Agent. It contains installation-specific information (for versions earlier than 12c). =item F This file contains the names of all supported time zones. =item F This file contains supported time zone mappings (for versions earlier than 12c). =back =cut var @tbl = () if compare('VALID',$ver,'12') {call push(@tbl,\ catFile($AGT,'agentimage.properties'),\ catFile($HOM,'sysman','admin','supportedtzs.lst'),\ catFile($HOM,'sysman','install','agentimage.properties'),\ grepDir(catDir($SYSMAN,'config'),'\.(lst|properties)$','np'),\ grepDir(catDir($SYSMAN,'emd'),'\.(ini|xml)$','np'),\ catFile($SYSMAN,'emd','agntstmp.txt')) } else {call push(@tbl,catFile($AGENT_HOME,'oracore','zoneinfo','readme.txt')) loop $dir (@SYSMAN) {call push(@tbl,catFile($dir,'setupinfo.txt'),\ catFile($dir,'admin','nsupportedtzs.lst'),\ catFile($dir,'admin','supportedtzs.lst'),\ catFile($dir,'admin','tzmappings.lst'),\ catFile($dir,'admin','discover','discover.lst'),\ grepDir(catDir($dir,'config'),'\.properties$','np'),\ grepDir(catDir($dir,'emd'),'\.(ini|xml)$','np'),\ catFile($dir,'emd','agntstmp.txt')) } } call sort_files(3,undef,@tbl) =head2 file_permissions - File/Directory Details Displays the details of some files and directories and checks the ownership and permissions. =cut debug ' Inside AGT module, collecting files/directories details' var %dir = (catDir($SYSMAN,'emd','upload'),'o',\ catDir($SYSMAN,'emd','upload','upload'),'o',\ catDir($SYSMAN,'emd','upload','upload','badfile'),'o',\ catDir($SYSMAN,'emd','state'),'o',\ catDir($SYSMAN,'emd','collection'),'o',\ catDir($AGENT_HOME),'o') var %fil = ($EMCTL,'xo') var @own = (catFile($AGENT_HOME,'bin','nmb'),\ catFile($AGENT_HOME,'bin','nmo'),\ catFile($AGENT_HOME,'bin','nmhs')) call check_permissions('File/Directory Details',\@own,\%dir,\%fil) =head2 log_errors - Log Errors Filters all the lines with C messages from various Oracle Enterprise Manager Agent log files. It can generate extra reports in cluster contexts. =cut debug ' Inside AGT module, extracting errors from agent log files' pretoc '2:Log Errors' var $cnt = undef loop $dir (@SYSMAN) {call extract_errors(concat('log_errors',$cnt),3,encode(addSymbol($dir)),\ $TAIL,grepDir(catDir($dir,'log'),'^emagent_memDump','npv')) incr $cnt } unpretoc =head2 Log Files Collects the Oracle Enterprise Manager Agent log files. =cut debug ' Inside AGT module, collecting agent log files' pretoc '2:Log Files' if compare('VALID',$ver,'12') {call sort_files(3,undef,\ grepDir(catDir($AGENT_HOME,'install','logs'),'\.log$','ip'),\ grepDir(catDir($SYSMAN,'log'),'^emagent_memDump','npv')) } else {loop $dir (@SYSMAN) {var @tbl = grepDir(catDir($dir,'log'),'^emagent_memDump.*\.trc$','pt') call sort_files(3,undef,\ splice(@tbl,0,3),\ grepDir(catDir($dir,'log'),'^emagent_memDump','npv'),\ grepDir(catDir($dir,'emd'),'.traceback','np')) output F,cputrack var $loc = catDir($dir,'emd','cputrack') prefix {write '---+!! Contents of ',$loc write ' * Links point to files that have been collected in their original \ format. Opening them directly in your browser can present \ risks. To prevent them, access the file outside the browser or \ use the link to save them and use an adequate viewer.' write '|*File Name*| *Size*|*Last Modified Date*|' } var ($flg,$grp) = (true,addSymbol($loc)) loop $bas (grepDir($loc,'^[^\.]','t')) {if ?testFile('f',$fil = catFile($loc,$bas)) {var $lnk = encode(catFile($grp,$bas)) var $siz = getSize($fil) if and($flg,$siz) {output => d,basename($fil) if ${CUR.O_LAST}->write_file($fil) var $lnk = concat('[[',${CUR.O_LAST}->get_raw(true),\ '][_blank][',$lnk,']]') end ${CUR.O_LAST} var $flg = false } write '|',$lnk,' | ',$siz,'|',getLastModify($fil,''),' |' } } if isCreated(true) toc '3:[[',getFile(),'][rda_report][',encode(addSymbol($loc)),']]' output F,dump var $loc = catDir($dir,'dump') prefix {write '---+!! Contents of ',$loc write ' * Links point to files that have been collected in their original \ format. Opening them directly in your browser can present \ risks. To prevent them, access the file outside the browser or \ use the link to save them and use an adequate viewer.' write '|*File Name*| *Size*|*Last Modified Date*|' } var ($flg,$grp) = (true,addSymbol($loc)) loop $bas (grepDir($loc,'^[^\.]','t')) {if ?testFile('f',$fil = catFile($loc,$bas)) {var $lnk = encode(catFile($grp,$bas)) var $siz = getSize($fil) if and($flg,$siz) {output => d,basename($fil) if ${CUR.O_LAST}->write_file($fil) var $lnk = concat('[[',${CUR.O_LAST}->get_raw(true),\ '][_blank][',$lnk,']]') end ${CUR.O_LAST} var $flg = false } write '|',$lnk,' | ',$siz,'|',getLastModify($fil,''),' |' } } if isCreated(true) toc '3:[[',getFile(),'][rda_report][',encode(addSymbol($loc)),']]' } } unpretoc =for stopwords Cfgtoollogs =head2 Cfgtoollogs Files Collects the Oracle Enterprise Manager Agent-related F files. =cut debug ' Inside AGT module, collecting agent cfgtoollogs files' pretoc '2:Cfgtoollogs Files' var @tbl = () loop $dir (findDir(catDir($AGT,'plugins'),'^cfgtoollogs$','nr',1)) call push(@tbl,grepDir(catDir($dir,'oui'),'\.(err|log|out)$','np')) call sort_files(3,undef,\ grepDir(catDir($HOM,'cfgtoollogs'),'.','np'),\ grepDir(catDir($HOM,'cfgtoollogs','cfgfw'),'\.log$','np'),\ grepDir(catDir($HOM,'cfgtoollogs','oui'),'\.(err|log|out)$','np'),\ grepDir(catDir($HOM,'cfgtoollogs','opatch'),'\.log$','np'),\ grepDir(catDir($AGT,'sbin','cfgtoollogs','oui'),'\.(err|log|out)$','np'),\ @tbl) unpretoc # Restore the previous environment call restoreContext($env) =head1 HCVE When requested, performs the postinstallation checks (for version 12c and later). =cut if and(${B_HCVE_CHECKS},compare('VALID',$ver,'12')) {debug ' Inside AGT module, executing the postinstallation checks' # Initialize HCVE input values var ${RUN.HCVE.OEM.AGT.T_HOME} = $AGENT_HOME var ${RUN.HCVE.OEM.AGT.T_ORACLE_HOME} = $ORACLE_HOME test TOOL:TLhcve('EM:Pagt121_gen') } =head1 SEE ALSO L, L, L =begin credits =over 10 =item RDA 4.9: Smitha Nath. =item RDA 4.18: Eliane Papillon Le Noc. =item RDA 4.21: Eliane Papillon Le Noc. =item RDA 4.22: Eliane Papillon Le Noc. =item RDA 4.26: Rachel Bridden, Eliane Papillon Le Noc. =item RDA 4.27: Eliane Papillon Le Noc. =item RDA 4.28: Laurence De Sulzer Wart. =item RDA 4.30: Laurence De Sulzer Wart, Eliane Papillon Le Noc. =item RDA 8.00: Laurence De Sulzer Wart. =item RDA 8.08: Eliane Papillon Le Noc. =item RDA 8.09: Eliane Papillon Le Noc, Jayatheertha Hanumantha Rao. =item RDA 8.10: Jayatheertha Hanumantha Rao. =back =end credits =head1 COPYRIGHT NOTICE Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. =head1 TRADEMARK NOTICE Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners. =cut