- 1 Product Description
- 1.1 Known Versions
- 1.1.1 Editions
- 2 Software Pattern Summary
- 3 Platforms Supported by the Pattern
- 4 Identification
- 5 Versioning
- 5.1 Oracle Database Server and Oracle Database Server Express (UNIX)
- 5.1.1 Active Versioning (Unix only)
- 5.1.2 Registry Versioning (Windows only)
- 5.1.3 Package Versioning (Express Edition, Linux platform only)
- 5.1.4 Path Versioning
- 5.2 TNS Listener
- 5.3 Alternative Versioning Approach
- 6 Application Model Produced by Software Pattern
- 6.1 Product Architecture
- 6.2 Software Pattern Model
- 6.2.1 DatabaseServer
- 6.2.2 TNSListener
- 6.2.3 SI Depth
- 6.3 Relationship Creation
- 6.3.1 Oracle E-Business Suite
- 6.4 Future Considerations
- 6.5 Determining Oracle RDBMS Edition
- 6.6 Retrieving Port, Global Name and Service Name
- 6.6.1 Parsing listener.ora file:
- 6.6.2 Parsing tnsnames.ora file
- 7 Listing Oracle Database Installed Options
- 8 Listing Oracle Management Packs
- 9 Identification of Oracle Pro*C installation
- 10 Obtaining detailed Oracle Database schema and table information
- 11 Subject Matter Expertise
- 12 Testing
- 12.1 Unix/Linux
- 12.2 Windows
- 13 Information Sources
- 14 Open Issues
- Discover with BMC ADDM
-
This product can be discovered by any edition of BMC Atrium Discovery and Dependency Mapping. Download our free Community Edition to try it out, or see what else it can discover!
- What is this?
- This is a product information page, containing details of the information that BMC Atrium Discovery gathers about a product and how it is obtained.
- Product Name
- Database
- Publisher Page
- Category
- Release
- TKU 2011-Nov-1
- Change History
- Reports & Attributes
- Publisher Link
- Oracle
Product Description
Oracle RDBMS (a product of Oracle Corporation) is an enterprise-class relational database management system product. Oracle RDBMS is available on multiple platforms such as: Unix (Solaris, HP-UX, AIX, Mac OS X Server, Tru64), Linux, Microsoft Windows, z/OS, OpenVMS.
Known Versions
Version numbering of Oracle products has been fairly inconsistent and seems to vary from product to product with marketing and actual product versions often used interchangeably.
Known versions of this product are:
- 7.0
- Oracle7 (7.0.16 - 7.3.4; includes 7.1, 7.2, 7.3 and 7.3.4)
- 8.0
- Oracle8 Database (8.0.3 - 8.0.6)
- Oracle8i Database Release 1 (8.1.5.x; includes 8.1.5.0 and 8.1.5.1)
- Oracle8i Database Release 2 (8.1.6.x; includes 8.1.6.0 and 8.1.6.3)
- Oracle8i Database Release 3 (8.1.7.x; includes 8.1.7.0 and 8.1.7.4)
- Oracle9i Database Release 1 (9.0.1.x; includes 9.0.1.0 and 9.0.1.5)
- Oracle9i Database Release 2 (9.2.0.1 - 9.2.0.8; includes 9.2.0.7 and 9.2.0.8)
- Oracle Database 10g Release 1 (10.1.0.x)
- Oracle Database 10g Release 2 (10.2.0.x; includes 10.1.0.2, 10.1.0.5, 10.2.0.1, 10.2.0.2 and 10.2.0.3)
- Oracle Database 11g Release 1 11.1.0.6.0
- Oracle Database 11g Release 2
Editions
Oracle RDBMS is available in a number of different editions all of which are built on the same common code base. The editions are likely provided for marketing and license-tracking reasons.
Known editions of the current version of the product (11g) are:
- Enterprise Edition - offers largest scale performance, scalability and reliability in either single-server or clustered configurations. No limits applied to the maximum number of CPUs, RAM usage or Database Size. Licensed on the basis of users or CPUs and typically used on servers running more than 4 CPUs.
- Standard Edition - contains base database functionality. Licensed on the basis of users or CPUs with the limitation of running on server with a maximum of 4 CPUs. An Enterprise-edition license is required for servers running more than 4 CPUs.
- Standard Edition One - contains some more restrictions than Standard Edition. Marketed and sold for use on systems with one or two CPUs.
- Express Edition - a version that is free to distribute on Windows and Linux platform, with a small footprint and restricted to the use of a single CPU and a maximum of 4GB of user data (database size) and 1GB of RAM.
Software Pattern Summary
| Product Component | OS Type | Versioning | Pattern Depth |
|---|---|---|---|
| DatabaseServer | Unix | Command (Active), Path | Instance-based or Grouped by version (data dependent) |
| Windows | Registry, Path | ||
| DatabaseServerExpressUnix | Unix | Command (Active), File, Package | Instance-based |
| TNSListener | Unix | Path | Instance-based or Grouped by version (data dependent) |
| Windows |
Platforms Supported by the Pattern
The patterns have been created in a manner that allows them to support Windows, Linux and Unix platforms from the same module.
Identification
Software Instance Triggers
| Component | Trigger Node | Attribute | Condition | Argument |
|---|---|---|---|---|
| DatabaseServer | DiscoveredProcess | cmd | matches | regex'ora_smon_.+$' |
| or | ||||
| regex'(?i)\boracle\.exe$' | ||||
| or | ||||
| regex'(?i)\boracle\d\d\.exe$' | ||||
| DatabaseServerExpressUnix | DiscoveredProcess | cmd | matches | regex '\bxe_smon_.+$' |
| TNSListener | DiscoveredProcess | cmd | matches | regex'\btnslsnr$' |
| or | ||||
| regex'(?i)\btnslsnr\.exe$' |
Simple Identification Mappings
The following components/processes are identified using the combination of pattern definitions and simple identity mappings which map other known (but deemed less important in terms of application modeling) processes.
- Simple identifiers for DatabaseServer
| Name | Command |
|---|---|
| Oracle Advanced Queuing | \bora_qmn[0-9]_.*$ |
| Oracle Archiver | \bora_arc[0-9]_.*$ |
| Oracle Checkpoint | \bora_ckpt_.*$ |
| Oracle Database Automatic Workload Repository Statistics Gatherer Process | \bora_mmon_\w+$ |
| Oracle Database Diagnosability Process | \bora_dia\d_\w+$ |
| Oracle Database Flashback Data Archive | \bora_fbda_\w+$ |
| Oracle Database Lightweight Manageability Tasks Process | \bora_mmnl_\w+$ |
| Oracle Database Job Queue Slave | \bora_q\d{3}_\w+$ |
| Oracle Database Queue Monitor Process | \bora_qmnc_\w+$ |
| Oracle Database PL/SQL Server Process | \bora_psp\d_\w+$ |
| Oracle Database Space Manager | \bora_smco_\w+$ |
| Oracle Database Space Manager Worker Process | \bora_w\d{3}_\w+$ |
| Oracle Database Virtual Time Keeper Process | \bora_vktm_\w+$ |
| Oracle Database Writer | \bora_dbw[0-9]_.*$ |
| Oracle Resource Manager | \bora_dbrm_\w+$ |
| Oracle External Job Scheduler | \bora[Oracle Database^ ]*\bextjob$ |
| Oracle Job | \bora_j[0-9][0-9][0-9]_.*$ |
| Oracle Job Queue Coordinator | \bora_cjq[0-9]_.*$ |
| Oracle Log Writer | \bora_lgwr_.*$ |
| Oracle MTS Dispatcher | \bora_d[0-9][0-9][0-9]_.*$ |
| Oracle MTS Server | \bora_s[0-9][0-9][0-9]_.*$ |
| Oracle Parallel Execution | \bora_p[0-9][0-9][0-9]_.*$ |
| Oracle Process Monitor | \bora_pmon_.*$ |
| Oracle Recovery Process | \bora_reco_.*$ |
| Oracle Intelligent Agent | \bdbsnmp$ |
| Oracle Shadow Process | \boracle[a-zA-Z0-9_]+$ |
| Oracle System Monitor | \bora_smon_.*$ |
| Oracle Net Services (TNS) Listener | \btnslsnr$ |
| Oracle DataPump Export | \bora[Oracle Database^ ]*\bbin/expdp$ |
| (?i)\bora[Oracle Database^ ]*\bexpdp\.exe$ | |
| Oracle DataPump Import | \bora[Oracle Database^ ]*\bimpdp$ |
| (?i)\bora[Oracle Database^ ]*\bimpdp\.exe$ | |
| Oracle Database Export Utility | (?i)\bora[Oracle Database^ ]*\bexp\.exe$ |
| \bora[Oracle Database^ ]*\bbin/exp$ | |
| Oracle External Procedure Agent | (?i)\bextproc\.exe$ |
| \bextproc\w+$ | |
| Oracle Database Import Utility | (?i)\bora[Oracle Database^ ]*\bimp\.exe$ |
| \bora[Oracle Database^ ]*\bbin/imp$ | |
| Oracle MTS Recovery Service | (?i)\bomtsreco\.exe$ |
| Oracle Recovery Manager | (?i)\bora[Oracle Database^ ]*\brman\.exe$ |
| Oracle Enterprise Manager Website Service | (?i)\bnmentsrvc\.exe$ |
| Oracle Client Cache | (?i)\bora[Oracle Database^ ]*\bonrsd\.exe$ |
| (?i)\bora[Oracle Database^ ]*\bonrsd\d\d\.exe$ | |
| Oracle Connection Manager Administration Service | (?i)\bora[Oracle Database^ ]*\bcmadmin\.exe$ |
| Oracle Connection Manager Gateway | (?i)\bcmgw\.exe$ |
| Oracle DB Console | (?i)\bnmesrvc\.exe$ |
| Oracle Database Server | (?i)\boracle\d\d\.exe$ |
| (?i)\boracle\.exe$ | |
| Oracle External Job Scheduler | (?i)\bora[Oracle Database^ ]*\bextjob\.exe$ |
| Oracle Net Services (TNS) Listener | (?i)\btnslsnr\.exe$ |
| Oracle Web Publishing Assistant | (?i)\bowastsvr\.exe$ |
| Interactive Database client - SQL shell | \bsqlplus$ |
| (?i)sqlplus.exe$ | |
| Graphical Oracle Database client (Windows) | (?i)\bsqlplusw\.exe$ |
- Simple identifiers for DatabaseServer Express
| Name | Command |
|---|---|
| Oracle Database Express System Monitor | \bxe_smon_.*$ |
| Oracle Database Express Process Monitor | \bxe_pmon_.*$ |
| Oracle Database Express Process-spawner | \bxe_psp[0-9]_.*$ |
| Oracle Database Express Memory-manager Process | \bxe_mman_.*$ |
| Oracle Database Express Database Writer | \bxe_dbw[0-9]_.*$ |
| Oracle Database Express Log Writer | \bxe_lgwr_.*$ |
| Oracle Database Express Checkpoint | \bxe_ckpt_.*$ |
| Oracle Database Express Recovery Process | \bxe_reco_.*$ |
| Oracle Database Express Job Queue Coordinator | \bxe_cjq[0-9]_.*$ |
| Oracle Database Express Memory-monitor Process | \bxe_mmon_.*$ |
| Oracle Database Express Memory-monitor Light Process | \bxe_mmnl_.*$ |
| Oracle Database Express Queue-monitor Processes | \bxe_qmnc_.*$ |
| Oracle Database Express MTS Server | \bxe_s[0-9][0-9][0-9]_.*$ |
| Oracle Database Express MTS Dispatcher | \bxe_d[0-9][0-9][0-9]_.*$ |
| Oracle Database Express MTS Process | \bxe_q[0-9][0-9][0-9]_.*$ |
Versioning
Oracle Database Server and Oracle Database Server Express (UNIX)
In case of Oracle Database Server, version information is currently collected using one of three possible methods (active, registry, path) while in case of Oracle Database Server Express (UNIX) version information is collected using one of 2 possible methods (active, package).
The methods are tried in an order of precedence based on likely success and/or accuracy of the information that can be gathered. Once a result is obtained, the method lower in precedence is not attempted. In order of precedence the methods are:
Active Versioning (Unix only)
As the method most likely to give a highly accurate result, active versioning is attempted first provided that the pattern can extract the Oracle installation path (ora_home).
Directly Extracting ora_home (installation path)
This method is employed for both the DatabaseServer and DatabaseServerExpressUnix patterns, though only in Unix environments. It uses two possible approaches. Only the first approach is enabled by default.
The database SID (instance name) is initially extracted from the trigger process command line Arguments by using a Regular Expression, which varies depending on Operating System.
Regular Expression employed in Windows environments: (.+)
Regular Expression employed in Unix environments: (?i)ora_smon_(.+)
First Approach - oratab file parsing method
The pattern tries to open a file called 'oratab' by searching through a list of potential (user configurable) locations for it:
- /var/opt/oracle/oratab
- /etc/oratab
- /var/opt/unix/oratab
- /etc/oracle/oratab
- /etc/opt/oracle/oratab
- /shared/opt/oracle/oratab
| Note: These files are typically viewed using an unprivileged account (Atrium Discovery login account). It is possible to view them as a privileged user on Atrium Discovery 8.2 and later. To do this you must alter the PRIV_CAT variable is the platform scripts |
If the 'oratab' file is located, the file is parsed for the database with the SID in the process command-line via the following regular expression:
- "(?m)^\s*%norm_ora_sid%:([^:]+):(?:[YNW])?"
If a matching entry is found the above regular expression extracts the installation path (ora_home) for this database instance.
The Oracle DB 'oratab' file has the following format:
a. A colon, ':', is used as the field terminator. A new line terminates the entry. Lines beginning with a pound sign, '#', are comments.
b. Entries are of the form: $ORACLE_SID:$ORACLE_HOME:<N|Y>:
c. The first and second fields are the system identifier and home directory of the database respectively.
d. Multiple entries with the same $ORACLE_SID are not allowed.
Examples:
- PRMP01:/local/ORAPRMSDG/sw/oracle/product/9.2.0:Y
o Here, $ORACLE_SID is PRMP01,
$ORACLE_HOME is /local/ORAPRMSDG/sw/oracle/product/9.2.0
- OPSP01:/local/ORAOPSDG/sw/oracle/product/9.2.0:N
o Here, $ORACLE_SID is OPSP01
$ORACLE_HOME is /local/ORAOPSDG/sw/oracle/product/9.2.0
If ora_home isn't found through this method, ordinarily the TNS Listener method is executed to obtain it indirectly
Second Approach - use of pmap command (Solaris and Linux)
On certain Unix platforms (Solaris and Linux), the pmap command is used against the process id (pid) of the 'oracle' process and the output is parsed for the full path to the oracle binary.
Oracle installation path is then extracted using one of the following regular expressions:
For Database Server other than Express Edition
- \W(/[^ ]*/)bin/oracle\W
For Database Express
- \(/\S*)/bin/oracle\W
- This approach works only in cases where the appliance has credentials that give the logged-in user elevated privileges via privilege escalation mechanism (e.g. 'sudo')
- The approach is disabled by default due to the above requirement (majority of installations do not provide these level of privileges to the account used by Atrium Discovery appliance).
- To enable this approach, both the priv_execution and pmap_enabled options in the configuration section should be set to 'true'.
- The priv_function option in the configuration section may be modified to point to an alternative path (the default being PRIV_RUNCMD) for an instance of 'sudo' or 'suexec' on the hosts being scanned.
- The pmap_path option in the configuration section may be modified to point to an alternative path (the default being /usr/bin/pmap) for an instance of 'pmap' on the hosts being scanned.
Indirectly obtaining ora_home (installation) path - TNS Listener method
This approach is used only in the Oracle Database Server pattern if the pattern has failed to obtain the Oracle DB Server installation path via the direct method described above.
Within the TNS Listener pattern ora_home is extracted from the TNS Listener Command Path, by employing a Regular Expression.
Regular Expression Employed to extract ora_home: (?i)^((?:/|\w:).+)[/\\]bin[/\\]tnslsnr
It is subsequently stored in the TNS Listener SI.
The Database pattern searches for all the TNS Listener SoftwareInstances on the Host, where the instance or instances attributes are set. If the instance from a TNS Listener matches ora_sid, then ora_home is extracted from the TNS Listener SI, when present.
In case where the TNS Listener has the instances attribute set (i.e. it is acting as a listener for multiple database servers), the pattern will loop through the list and compare each instance to ora_sid. If a match is found, then ora_home is extracted from the TNS Listener SI, when present.
Performing Versioning
If the installation path (ora_home) has been determined, an SQLPlus command, "echo exit | ORACLE_HOME=%ora_home% %ora_home%/bin/sqlplus /NOLOG", is executed; The /NOLOG option is used to ensure that no login is attempted so that there is no interaction required.
The output from this command is then parsed via the regex, "Release\s+(\d+(?:\.\d+)*)", to extract the version string.
The output is further processed using the following regular expression "^(\d+)" and the short version obtained this way evaluated for validity as version returned by the SQLPlus command in early Oracle releases (prior to Oracle 8) are not directly linked to the version of the Oracle Database Server. If such version is detected, a code mapping is used to attempt to map the version obtained to the actual Oracle version. If this does not succeed, then this approach will not set a version for the product.
Versioning achieved using this method is either to depth x.x.x , x.x.x.x or x.x.x.x.x unless a version mapping has to be used in which case only the major version is set.
| Note: The disadvantage of this method is that the user permissions for the account Atrium Discovery uses need to allow execution of the SQLPlus binary, and the fact that an assumption is made that the 'oratab' file is being actively maintained with $ORACLE_HOME path being accurate. If installation path is not obtained, versioning will using this method will not be attempted. |
Registry Versioning (Windows only)
The Oracle Service Key is searched for by querying the following registry key:
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleService<ora_sid>\ImagePath
Once the Oracle Service Key is known, the Windows Registry is queried for the full image path.
From the full image path, the location of the binary files is extracted via the regex:
- (?i)(.+\\bin\\).
The contents of the file, %install_path%oracle.key, are then extracted to give the Oracle Install Key ('HKEY_LOCAL_MACHINE\\' + oracle_keyfile.content + '\\').
Once the Oracle Install Key is known, version_key is obtained from the Windows Registry by searching for "%oracle_install_key%VERSION".
| Note: The oracle.key file is viewed using an unprivileged account. It is possible to view them as a privileged user on Atrium Discovery 8.2 and later. To do this you must alter the PRIV_CAT variable is the platform scripts |
Package Versioning (Express Edition, Linux platform only)
Oracle Database Server Express Edition (available on Unix and Windows) can be installed from the .rpm package only. The host is being queried for the 'oracle-xe-univ' package, and its version parameter provides the full version of product.
Regular expression used to match the package name is:
- oracle-xe-univ$
Path Versioning
The Path Regex functionality allows a regular expression to be applied against the process command line to derive a version number from the command path or arguments.
For Database Server (other than Express Edition) running on a UNIX host the regular expression used is as follows:
- (?:(?:ora|orcl)[Oracle Database^/]*|(?:ora|orcl)[Oracle Database^ ]*product[Oracle Database^ ]*|/product[s]?|/prod|/oracle)/(1?\d)\.?(\d?)\.?(\d?)\.?(\d?)
For Database Server Express Edition (UNIX) the regular expression used is as follows::
- /oracle\S+/(\d+(?:\.\d+)*)
This path may come from a file or the results of an active command.
Windows Path Regular Expression:
- (?i)(?:Oracle|ora|or|product)(?:\\|)(1?\d)\.?(\d?)\.?(\d?)\.?(\d?)
Versioning is achieved in this case upto depth x.x.x depending on the deployment pattern.
Examples of paths that would be matched and versions extracted are:
- d:\ora81\bin\ORACLE.EXE - 8.1
- d:\oracle\product\10.2.0\db_1\bin\ORACLE.EXE - 10.2.0
- d:\apps\oracle\7.3.3\bin\oracle73.exe - 7.3.3
- d:\orant\bin\oracle80.exe - 8.0
TNS Listener
Versioning is performed using the path versioning approach. The Path Regex functionality allows a regular expression to be applied against the process command line to derive a version number from the command path or arguments.
The regular expressions used are as follows:
Unix Path Regex: (?:(?:ora|orcl)[^/]*|(?:ora|orcl)[^ ]*product[^ ]*|/[Pp][Rr][Oo][Dd][Uu][Cc][Tt][s]?|/prod|/oracle|/app)/(1?\d)\.?(\d?)\.?(\d?)\.?(\d?)
Windows Path Regex: (?i)(?:Oracle|ora|or|product)(?:\\|)(1?\d)\.?(\d?)\.?(\d?)\.?(\d?)
When these Regular Expressions fail, another multi-platform Regular Expression is employed.
Multi-platform Regular Expression: (?i)[/\\](\d+(?:\.\d+)+)[/\\]bin[/
]tnslsnr
Versioning is achieved in this case to depth x.x , x.x.x or x.x.x.x - depending on the deployment pattern.
Examples of paths that would be matched and versions extracted are:
- /dboracle/orabase/product/9.2.0.7/bin/tnslsnr - 9.2.0.7
- /u01/app/oracle/product/10.1.0/db_1/bin/tnslsnr - 10.1.0
- /dboracle/product/8.1.7.4v/bin/tnslsnr - 8.1.7.4
- /u01/app/oracle/product/9.2/bin/tnslsnr - 9.2
| Note: These files are viewed using an unprivileged account. It is possible to view them as a privileged user on Atrium Discovery 8.2 and later. To do this you must alter the PRIV_CAT variable is the platform scripts |
Alternative Versioning Approach
Unix/Linux
Detailed analysis of methods to obtain Oracle RDBMS product version was then undertaken by Engineering and Oracle RDBMS SMEs (internal and customer - JPMC) and it was concluded that due to the complexity of the product in terms of deployment and configuration, there is no single way to reliably obtain Oracle RDBMS version in all instances.
Application Model Produced by Software Pattern
Product Architecture
An Oracle database server instance comprises a set of operating system processes and memory structures that interact with the storage. Additional to this are client connectivity components which enable database clients to communicate with the database server.
- Related Processes
Depending on how Oracle was installed (including licensing restrictions) the processes listed in the table of related processes above may not all be observed on a single host running Oracle RDBMS. Client processes in particular are likely to be running on multiple hosts.
Software Pattern Model
DatabaseServer
The DatabaseServer pattern triggers on either the Oracle System Monitor (ora_smon_<SID>) or Oracle Database Server (oracle.exe, oracle73.exe or oracle80.exe) processes to identify an instance of Oracle Database Server.
The DatabaseServerExpressUnix pattern triggers on the Oracle System Monitor (xe_smon_<SID>) process to also identify an instance of Oracle Database Server Express edition (on Windows, the trigger is oracle.exe).
TNSListener
The TNSListener pattern triggers on the Oracle Net Services (TNS) Listener (tnslsnr or tnslsnr.exe) process to identify an instance of TNS Listener.
SI Depth
Oracle Database Server
On Unix the main process present for each instance of an Oracle database is Oracle System Monitor (SMON).
An instance is also denoted by a SID which is observed on a command-line as the ending of the process name. e.g. ora_smon_SXQ1
The DatabaseServer and DatabaseServerExpressUnix pattern definitions use the Oracle System Monitor process (ora_smon_<SID> or xe_smon_<SID>) as the trigger process.
The instance name is extracted from the command using the following regular expression '(?i)ora_smon_(.)' (or 'xe_smon_(.)' for the Express edition). This name is used to create a unique Software Instance (SI).
The prime process is then collected into a set of all other processes that also have the same SID in their command or command-line arguments (in case of Oracle Net Services (TNS) Listener process).
On Windows, one or more Oracle Database Server processes are observed on hosts running Oracle RDBMS. Oracle Database instances can in certain cases be inferred from the command-line arguments but this pattern is not always observed and may be linked to the number of database instances being managed. It seems that if only one database instance is being managed, an SID is not required. More research is however required to be certain that this behaviour is correct.
If a SID is not obtained by the pattern a grouped (on version) SI is created in case of Oracle Database Server, while in case of Oracle Database Server Express (UNIX) and SI with a key based on type and host key is created (since only one instance of Express Edition can run on a host).
TNS Listener
The TNS Listener pattern will attempt to extract the Oracle database SID from the command-line arguments of the trigger process and use that to create a unique Software Instance (SI).
If a SID is not obtained by the pattern a grouped (on oracle installation path extracted from the trigger process) SI is created.
Relationship Creation
A communication relationship is then created with the Oracle Net Services (TNS) Listener (with exception of Oracle Database Express Edition on either Windows or Unix platform).
This relationship is modeled both from the DatabaseServer and the TNSListener patterns.
The DatabaseServer pattern then tries to associate all other related Oracle processes, running on the same host, to the SI.
Oracle E-Business Suite
The Oracle Database Server pattern raises a flag when acting in an Oracle E-Business Suite environment. This flag is stored in the Oracle Database Server SI as the ebs_suite attribute.
The way the pattern determines whether it has discovered and instance of Oracle Database Server running as part of E-Business is to search for any TNS Listener process where its command-line args match a regular expression APPS_<ora SID> where <ora SID> is this Database Server SID.
The flag is then checked for later in the pattern in order to determine the correct path to listener.ora file, as this path is different for Database Servers running as a component of Oracle E-Business.
Future Considerations
We cannot determine appropriate (TNS) Listener for the Express Edition of Oracle Database Server, as the command line doesn't contain any attributes.
Determining Oracle RDBMS Edition
- Unix
Oracle RDBMS Database Server pattern will, when triggered on a scan of a Unix host, attempt to determine which Oracle RDBMS edition this Database Server is provided that the installation ($ORACLE_HOME) path has been found.
File 'context.xml' is parsed to obtain the value for edition which is then mapped to the actual edition name using a mapping table (EditionsTable).
The 'context.xml' file is parsed using the following code:
grep -w s_serverInstallType <installation_path>/inventory/Components21/oracle.server/*/context.xml<br> | tr ' ' '\n'<br> | grep VAL
The edition value is extracted using the following regular expression:
VAL="(\w\w)"
In certain cases, this file may not be readable except by the root user or users belonging to the same group as the user that has installed Oracle.
The pattern will therefore, if it fails to access the context.xml file, and execution of commands under elevated privileges has been enabled, attempt to access the file under elevated privileges.
This is then performed in 2 steps:
- An 'ls' command is executed against the directory <installation_path>/inventory/Components21/oracle.server in order to get the full path of context.xml file
- If the directory name where context.xml is has been obtained, the file is parsed as above
In all cases, edition information is only recorded if it can be fully determined. Quite often, the edition information is set to 'Custom' in the context.xml file and this is done by the Oracle installation script if the defaults of creating a database are not followed but a custom installation is performed. In those cases, edition information is not stored in the Software Instance.
The method detailed above cannot however be used to identify Oracle RDBMS Express Edition. A separate pattern has been created to identify this edition as the trigger process is different (and distinct) - it is xe_smon_<SID>.
In addition to this, Express Edition has 'XE' as its SID, the only one available for the installation; therefore, 'Express' edition can always be positively determined and the 'edition' attribute set.
- Windows
On Windows-based systems, a specific registry key is parsed within the main Oracle RDBMS pattern in order to obtain the edition. The key accessed is:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\<Oracle service key>\ORACLE_BUNDLE_NAME
Retrieving Port, Global Name and Service Name
The pattern employs 2 different methods for retrieving Port, and 1 method each for retrieving Global Name and Service Name, all of which apply to Windows and Unix platforms alike.
Parsing listener.ora file:
This method captures the content of the listener.ora file, which resides under Oracle Home, in the network/admin dirtree. Upon a successful retrieval of the file, it then tries to extract Port and Global Name from that file.
The regex used for extracting relevant information for getting the port information is :
((?i)(?:\n|^)\s*%<listener_name>%\s*=)
| Note: If the Pattern detected that we are in an E-Business Suite environment, it will try to retrieve listener.ora from a subdirectory nested within the network/admin path. This subdirectory can be named either SID_Hostname, or simply SID |
| Note: The listener.ora file is viewed using an unprivileged account. It is possible to view them as a privileged user on Atrium Discovery 8.2 and later. To do this you must alter the PRIV_CAT variable is the platform scripts |
Port
The pattern uses an algorithm to parse the listener.ora file. It iterates through its sections, which can describe more than one listener, and identifies the section relevant to the right SID. In this section, it retrieves the Port after checking that it belongs to the correct Host.
Global Name
The pattern identifies the section relevant to the right SID, and subsequently extracts the Global Name, by applying the following Regular Expressions:
Regular Expression employed to identify relevant Section: (?i)\(\s*SID_DESC\s*=\s*((?:\(\s*(?:GLOBAL_DBNAME|ORACLE_HOME)\s*=\s*[Oracle Database^ \)]*?\s*\)\s*){0,2}\(\s*SID_NAME\s*=\s*%ora_sid%\s*\)\s*(?:\(\s*(?:GLOBAL_DBNAME|ORACLE_HOME)\s*=\s*[Oracle Database^ \)]*?\s*\)\s*){0,2})\s*\)
Regular Expression employed to extract Global Name: \(\s*(?:GLOBAL_DBNAME)\s*=\s*([Oracle Database^ \)]*?)\s*\)
Parsing tnsnames.ora file
The pattern checks the content of the ora_home/network/admin/tsnames.ora file
Note that:
- The tnsnames.ora file is viewed using an unprivileged account. It is possible to view them as a privileged user on Atrium Discovery 8.2 and later. To do this you must alter the PRIV_CAT variable is the platform scripts
- As the tnsnames.ora file is normally employed to set up configuration for the Oracle Client – as opposed to the Database Server – it is possible that this file is wrongly configured, or not configured at all, while the Oracle Database Server continues to function normally. This is the reason why the tnsnames.ora method is tried only in case of failure of the listener.ora method.
Port and Service Name
Port and service name are obtained from the file using the following regular expressions:
- Port: (?is)\s*%ora_sid%\s*=\s*\(\s*DESCRIPTION.*?PORT\s*=\s*(\d+\s*)\)
- Service Name: (?is)\s*%ora_sid%\s*=\s*\(\s*DESCRIPTION.*?SERVICE_NAME\s*=\s*([Oracle Database^ \)]+)\s*\)
In cases where Global Name has been obtained but the Service name has not, the 'service_name' attribute is populated by the value of 'global_db_name'
Address names
The pattern parses the tnsnames.ora file for all "paragraphs" that might contain an address name using the following regular expression:
- (?is)(?:\)\s*){3}\w.+?SERVICE_NAME\s*=\s*%service_name%
Each "paragraph" is then parsed with the following regular expression:
- (?:\)\s*){3}(\w+(?:\.world))
All valid results are reported in the address_names attribute of the Software Instance
Listing Oracle Database Installed Options
A separate pattern is used to identify and model a selection of Installed Options in the Oracle Database. For more information on this approach, please refer to the relevant page.
Listing Oracle Management Packs
A separate pattern is used to identify and model a selection of Management Packs in the Oracle Database. For more information on this approach, please refer to the relevant page.
Identification of Oracle Pro*C installation
A pattern to identify and model Oracle Pro*C pre-compiler (installed as an optional component of Oracle Database) has also been developed. For more information about this pattern, please refer to the relevant page.
Obtaining detailed Oracle Database schema and table information
A separate pattern has been created to query the Oracle Database in order to obtain schema and (optionally) database table details. For more information about this pattern, please refer to the relevant page
Subject Matter Expertise
The set of simple identifiers for Oracle RDBMS running on Unix/Linux hosts, including approaches used to version the product have been developed from local knowledge on Oracle RDBMS as well as with input from JPMC SMEs.
Testing
Unix/Linux
Testing to ensure the processes related to Oracle RDBMS have been correctly identified has been performed using Atrium Discovery record data from hosts running Solaris, AIX and Linux operating systems.
Record data contained enough information to extract the version information using the Regex Path versioning approach.
In addition to this, active version command approach was developed and initially evaluated both on in-house Oracle RDBMS installations and on customer sites. The approach taken was shown to work well, provided the environment conditions that this approach requires were met.
Testing to ensure the processes related to Oracle RDBMS Express Edition have been correctly identified has been performed against in-house Oracle RDBMS Express installations running on Linux hosts.
Product version obtained using active command approach, package query and path regex was proven to work.
Windows
Testing to ensure the processes related to Oracle RDBMS have been correctly identified has been performed using both Atrium Discovery Record data and in-house Oracle RDBMS installations.
Path Regex versioning approach was also tested against both in-house Oracle RDBMS installations and Atrium Discovery Record data and was deemed to work well unless constrained by the data returned from the hosts (e.g. Atrium discovery typically cannot obtain process command-line on hosts running Windows NT or Windows 2000 Server. This limitation no longer exists on hosts running Windows XP or Windows 2003 server).
Testing to ensure the processes related to Oracle RDBMS Express Edition have been correctly identified has been performed against in-house Oracle RDBMS Express installations running on Windows hosts.
Product version obtained using active command approach, package query and path regex was proven to work.
Information Sources
Open Issues
N/A
| TOP |
|---|
Created by: Rebecca Shalfield 30 Oct 2007
Updated by: Nikola Vukovljak 22 Nov 2011
