Abstract:
A mechanism and method for querying between two data centers managed by two different data center management products is described. A single information query model is utilized to query multiple instances of another data center, which receives, translates and responds to the information query through the use of a schema. Knowledge of the other (foreign) data center&#39;s APIs for each instance is made unnecessary. Improved query efficiency is achieved by combining a plurality of disparate queries into a single information query. The responses to the plurality of queries are populated into a single reply to the information query, which is then transmitted back to the querying data center, translated and made readable to the IT administrator.

Description:
BACKGROUND OF THE INVENTION 
     1. Copyright Statement 
     A portion of the disclosure of this patent document contains material that is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure as they appear in the U.S. Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever. 
     2. Field of the Invention 
     This present invention relates to the field of information technology and more particularly to a mechanism for optimizing data center management software integration. 
     3. Description of Related Art 
     As business operations expand, corporate networks have evolved and now typically comprise one or more sophisticated data centers that are globally distributed but centrally managed. These data centers serve as repositories for the storage, management, and dissemination of data and information organized around a particular body of knowledge or pertaining to a particular business. Each data center may include application servers, database servers, web servers and other network infrastructure devices. To ensure efficient operation of the data center, commercially available management software products have been developed to monitor and manage faults that could impact data center operations. The entire system comprising the management software and the data center is known as the data center environment. 
     One such data center management software product is Enterprise Manager, a commercially available product offered by Oracle Corporation, the assignee of the present application. Enterprise Manager is an integrated management solution for managing the complete data center environment as one cohesive unit. Enterprise Manager facilitates the management of all services or instances within an enterprise data center, including hosts, databases, listeners, application servers, HTTP servers, collaboration suites, storage, network devices, load balancers and Web applications to extract information needed for critical and timely decisions. Other similar data center management software products include Hewlett Packard&#39;s OpenView, IBM&#39;s Tivoli Framework, Microsoft&#39;s Systems Management Server, LANDesk&#39;s Management Solutions Suite, Novell&#39;s ZENworks and CA&#39;s Unicenter. 
     In a typical data center, there are often multiple elements and instances, each of which comprise a running operating environment. In a typical data center, the elements may include application servers, application programs, storage devices network, and infrastructure devices such as load balancers, firewalls, intrusion detection devices, routers and the like. Each instance typically includes RDBMS software, table structure, stored procedures and other functionality. Each instance is a running database, such as an Oracle Database, made up of memory structures and background processes executing in computer memory. Multiple instances can be started for a single database on different nodes of a cluster. 
     A data center can often include hundreds of elements and thousands of instances for complex data structures. In order to learn the status of an element or instance, it must be queried by the data center management software. The status may be “up and running” if all is well, or may be “down” if there is a fault or issue. The data center management software may also manage the configuration of each element, as well as monitor and mange performance and alerts for each element and instances and storing the information for later analysis. 
     Information query is a common method to monitor the status and performance parameters, and manage configurations, events and faults of a data center. With prior art data center management software the information query is typically done in an application programming interface (“API”) driven approach, meaning that the query calls the specific API for each instance in order to check the status of each element or instance. For a complex data structure, the calling program might need to invoke multiple APIs multiple times, and may need to invoke the same APIs repetitively. While inefficient, this is currently the most common method to elicit the status of each instance. 
     Often a business may have multiple data centers managed by different data center management software products. For example, one data center may be handled by Oracle&#39;s Enterprise Manager, another by HP&#39;s OpenView, and yet another data center by IBM&#39;s Tivoli management software. IT administrators tasked with maintaining and transferring data between the data centers are commonly challenged by the potential for incompatibility. Specifically, each brand of data center management software has its own set of information query models that work with a specific library of APIs developed by each manufacturer. In order to query a data center, the IT administrator will need to know which query model works with which API, requiring proficiency with a large number of query-API constructs. Any change to the data center management software will necessitate learning new query models and new APIs. 
     Additionally, other problems arise when the IT administrator often does not have enough information about instances managed by the other data centers. An effective query requires knowledge of all of the instances available for query; however, as new data centers are acquired, the IT administrator is unlikely to know all of the instances under the new data center&#39;s control. These issues lead to an inefficient use of data center resources. 
     What is needed is a mechanism that not only responds to status requests regardless of the quantity of known and unknown instances, but also efficiently and conveniently integrates and accesses different data centers regardless of the data center management software that maintains those different data centers. The mechanism should also obviate the need for repetitive queries, and should also make learning different query models and APIs for different data centers unnecessary. 
     BRIEF SUMMARY OF THE INVENTION 
     The present invention comprises a mechanism and method of information query between a plurality of data centers managed by different data center management software products. Advantageously, the present invention will enable the IT administrator of one data center to query the elements and instances of another data center with a single information query model. Knowledge of the other data center&#39;s query model, elements, instances, or the corresponding APIs is made unnecessary by the present invention. Advantageously, the present invention provides a heterogeneous enterprise-wide solution where multi-vendor data center management software exists. 
     The present invention comprises of a mechanism in which one data center can determine the status of elements or instances in the foreign data center by generating a single information query. At the foreign data center, the information query is translated into a form understandable by the foreign data center&#39;s management software program. Preferably, a schema is used to translate the information query and reference the appropriate APIs for the queried instances. In other embodiments, the schema maps the leaf nodes to a corresponding API call. 
     Subsequently, the responses to the information query are returned back to the home data center. The schema may be used to populate a single reply to the information query, which is then made readable by the IT administrator. Alternatively, the home data center may apply a schema to translate the foreign data center&#39;s response. 
     Other and further objects, features, aspects and advantages of the present invention are found in the following detailed description of the embodiments and the accompanying drawings. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The accompanying drawings, which are incorporated into and constitute part of this specification, illustrate one or more embodiments of the present invention and, together with the detailed description, serve to explain the principles and implementations of the invention. 
         FIG. 1  shows a block diagram of an enterprise environment having a plurality of data center environments that operate in accordance with an embodiment of the present invention. 
         FIG. 2  is a block diagram illustrating components of a foreign data center environment according to an embodiment of the present invention. 
         FIG. 3  illustrates a method for querying a foreign data center in accordance with an embodiment of the present invention. 
         FIG. 4  illustrates a method for handling a model based information query at a foreign data center in accordance with an embodiment of the present invention. 
         FIG. 5  illustrates another method for querying a foreign data center in accordance with an embodiment of the present invention. 
         FIG. 6  is a block diagram representation of a computing system that may be utilized in association with the embodiments of the present invention 
     
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     Embodiments of the present invention are herein described in the context of a mechanism and method for using an information query model to query a plurality of data centers, each data center managed by a different data center management software product. Those of ordinary skill in the art will realize that the following detailed description of the present invention is illustrative only and is not intended to be in any way limiting. Other embodiments of the present invention will readily suggest themselves to such skilled persons having the benefit of this disclosure. Reference will now be made in detail to implementations of the present invention as illustrated in the accompanying drawings. The same reference indicators will be used throughout the drawings and the following detailed description to refer to the same or like parts. 
     In the interest of clarity, not all of the routine features of the implementations described herein are shown and described. It will, of course, be appreciated that in the development of any such actual implementation, numerous implementation-specific decisions must be made in order to achieve the IT administrator&#39;s specific goals, such as compliance with application- and business-related constraints, and that these specific goals will vary from one implementation to another and from one IT administrator to another. Moreover, it will be appreciated that such a development effort might be complex and time-consuming, but would nevertheless be a routine undertaking of engineering for those of ordinary skill in the art having the benefit of this disclosure. 
     In accordance with the present invention, the components, process steps, and/or data centers may be implemented using various types of operating systems, computing platforms, computer programs, and/or general purpose machines. In addition, those of ordinary skill in the art will recognize that devices of a less general purpose nature may also be used without departing from the scope and spirit of the inventive concepts disclosed herein. 
       FIG. 1  illustrates the general architecture of a representative network enterprise data center system  100  having a data center environment  101  that operates in accordance with one embodiment of the present invention. A typical data center environment may include a data center  102 , a plurality of elements and instances  103 ,  104 ,  105  and  106 , and data center management software tool  108  that manages data center environment  101 . Tool  108  typically include hundreds application program interfaces (APIs) that can be called to acquire attributes of the instances associated with data center  102 . An IT administrator interested in managing or monitoring data center  102  will use a computer terminal or workstation  110  to interact with data center environment  101  through tool  108 . 
     Data center  102  typically comprises network infrastructure devices such as routers, switches, firewalls, intrusion detection systems, load balancers and other such devices. The network infrastructure devices are routine features of a typical data center implementation and are not otherwise described or shown herein. Data center  102  operates to connect users to various servers, such as application servers and HTTP servers, server-based applications, network appliances such as SAN or other storage devices, network devices, load balancers, and the like. As is understood in the art, the servers, applications, appliances, or devices in data center  102  can each be viewed as an independent instance with a distinct role or responsibility. Further, it will be appreciated that an instance may be a host, database, listener, collaboration suite, or a Web application. Note that in a typical data center the number of instances can vary from a few to several thousands. In  FIG. 1 , instances  103 - 106  are merely illustrative of what instances can be, and are not intended to limit the present invention in any manner. 
     Tool  108  offers the IT administrator the ability to discover and track performance parameters, configurations, network events and alarms and status changes (collectively referred to herein as “status” unless otherwise specifically noted otherwise) and any of a plurality of other attributes associated with each of the instances in data center  102 . This eliminates the need to manually track status changes or other attributes and can speed up troubleshooting efforts when problems occur. Tool  108  can also be used to specify and enforce enterprise access and use policies. 
     In many enterprises, enterprise environment  100  may comprise one or more additional data centers environments  151  that includes, by way of example, data center  152 . Note that data center  152  also has a plurality of instances  153  but the structure and status of such instances will not generally be known to an IT administrator attempting to monitor the enterprise environment from workstation  110 . 
     A network  145 , such as the Internet or an intranet. Connects data centers  102  and  152 . This network connection enables data and control information to be exchanged between the data centers, and allows consumers to access information, applications and services. Administrative matters may be handled over network  145 , or they may be routed over a management network  147  that is dedicated to handling traffic related to administrative or management functions. One example of network  147  is a simple network management protocol (SNMP) network. 
     For a variety of reasons, data center  152  may be managed by data center management software tool  154 , rather than tool  108 , provided by a different commercial vendor. Tool  154  operates to manage data center environment  151  and includes hundreds APIs that can be called to acquire attributes of the instances  153  associated with data center  152 . Note that data center  152  may also comprise network infrastructure devices that are not otherwise described or shown herein. 
     When the IT administrator at workstation  110  requires status or other attribute information regarding an instance  153  in data center environment  151  or has to identify available resources in data center  152 , the IT administrator needs to expose the API of each instance  153 . Once the APIs are exposed, it is possible to discover and track status changes to any of the instances in data center  152  from workstation  110  by the IT administer, thereby enhancing the ability to efficiently manage and control enterprise environment  100 . 
     As is well known in the art, obtaining the status or attributes of an instance in another data center, such as data center  152 , is accomplished through a query typically initiated by the IT administrator at workstation  110 . However, because tools  108  and  154  are often provided by different vendors, and because tools from different vendors utilizes different models and APIs to manage the respective data center environment, it is not possible for tool  108  to issue the appropriate calls to the instances in data center  152 . Advantageously, the present invention eliminates the need of the IT administrator to understand both models and both sets of APIs in order to obtain the status or attribute information. Further, if one of the target instances is changed, then the present invention relieves the IT administrator from the need to understand or otherwise acquire detailed information regarding the new APIs associated with such changes. 
     To illustrate, if the IT administrator desires to determine the number of instances  153  in data center  152  and the status of a selected few instances, the present invention enables the IT administrator to issue a single information query to expose the APIs of the such instances. Accordingly, the present invention is substantially faster, adaptive, and more efficient than how IT administrators have previously operated. 
     In accordance with one embodiment of the present invention, a schema is associated with each tool  108  and  154 . Specifically, schema  117  is associated with tool  108 , and schema  156  is associated with tool  154 . Each schema  112  and  156  is tasked with translating a model-based query into the appropriate APIs. 
       FIG. 2  is a block diagram illustrating components of a data center environment according to an embodiment of the present invention. When the status or attributes of one or a plurality of instances at another (foreign) data center is required by the IT administrator at the home data center (that is, by way of example, data center environment  101 ), a single model based information query is generated and sent to the foreign data center (by way of example, data center environment  151 ) on a network, such as network  147  ( FIG. 1 ). As used herein, the home data center is the source of an information query and the foreign data center comprises the instances that are the target of the query. In one embodiment, the foreign data center may include a Real Application Cluster (“RAC”) database, which is commercially available from Oracle Corporation, the assignee of this present application. 
     At the foreign data center, the model based information query is passed to an interpreter  160  associated with tool  154 . The function of interpreter  160  is to interpret the model based information query based on the rules and definitions contained in schema  156 . Interpreter  160  may also parse the model based information query into a plurality of individual information queries and queue the plurality of queries for handling by tool  154 . The combination of interpreter  160  and schema  156  functions to provide an interface between data centers  102  and  152  where each data center operates under different management tools. Schema  156  is provided to the foreign data center based on a pre-defined mapping. Thus, when interpreter  160  receives the model based query, it applies a transformation to the information query to create individual queries. Note that the queries generated by tool  108  as a result of the model based query include the appropriate information to expose the APIs and show the data structure of the instances in the foreign data center. 
       FIG. 3  illustrates a method for performing the information query process in accordance with an embodiment of the present invention. Specifically, when an information query is received, as indicated at  302 , the foreign data center uses schema  156  to interpret the model based information query as indicated at  304 . With schema  156 , tool  154  is able to generate the appropriate API calls for targeted instances, as indicated at  306 . By interpreting the information query at the foreign data center, the IT administrator at the home data center is not required to manually associate each queried instance with the instance&#39;s APIs. Tool  154  then issues the appropriate calls to each instance referenced in the original model based information query, as indicated at  308 . 
     Responsive to the information query and the generated API calls, tool  154  receives responses from each of the targeted instances  153 , as indicated at  310 . Tool  154 , in conjunction with interpreter  160  and schema  156  then populates a response that is organized based on the format of the model based information query, as indicated at  312 . 
     In one embodiment of the present invention, the model based information query is written in extensible markup language (“XML”). While such an information query can take many forms based on the engineering requirements of a particular application, it is advantageous to compose an XML query in a format that permits the query of multiple instances in a single model-based information query. The following information query, labeled “QueryModel,” is illustrative of such a query: 
     
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 &lt;QueryModel&gt; 
               
               
                   
                 &lt;RAC&gt; 
               
               
                   
                   &lt;Name&gt;rac&lt;/Name&gt; 
               
               
                   
                   &lt;Property&gt; 
               
               
                   
                     &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                     &lt;Value xsd:nil=“true”&gt;&lt;/Value&gt; 
               
               
                   
                   &lt;/Property&gt; 
               
               
                   
                   &lt;Instance&gt; 
               
               
                   
                     &lt;Name&gt;rac1&lt;/Name&gt; 
               
               
                   
                     &lt;Property&gt; 
               
               
                   
                       &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                       &lt;Value xsd:nil=“true”&gt;&lt;/Value&gt; 
               
               
                   
                     &lt;/Property&gt; 
               
               
                   
                   &lt;/Instance&gt; 
               
               
                   
                   &lt;Instance&gt; 
               
               
                   
                     &lt;Name&gt;rac2&lt;/Name&gt; 
               
               
                   
                     &lt;Property&gt; 
               
               
                   
                       &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                       &lt;Value xsd:nil=“true”&gt;&lt;/Value&gt; 
               
               
                   
                     &lt;/Property&gt; 
               
               
                   
                   &lt;/Instance&gt; 
               
               
                   
                 &lt;/RAC&gt; 
               
               
                   
                 &lt;Host&gt; 
               
               
                   
                   &lt;Name&gt;server1&lt;/Name&gt; 
               
               
                   
                   &lt;Property&gt; 
               
               
                   
                     &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                     &lt;Value xsd:nil=“true”&gt;&lt;/Value&gt; 
               
               
                   
                   &lt;/Property&gt; 
               
               
                   
                   &lt;Property&gt; 
               
               
                   
                     &lt;Name&gt;OS&lt;/Name&gt; 
               
               
                   
                     &lt;Value xsd:nil=“true”&gt;&lt;/Value&gt; 
               
               
                   
                   &lt;/Property&gt; 
               
               
                   
                 &lt;/Host&gt; 
               
               
                   
                 &lt;/QueryModel&gt; 
               
               
                   
                   
               
             
          
         
       
     
     In an embodiment of the present invention, the information query follows a tree-based query model where multiple instances, each of which comprises a leaf, are listed. Thus, for the above illustrated information query model the request for the status of a Real Application Cluster (“RAC”) database and two instances called rac 1  and rac 2  in addition to a server 1  instance. Each instance (RAC, server 1  and the two instances) is considered a leaf node. 
     One advantage provided by the model based information query, and illustrated by the above QueryModel is that the same model based information query can be used to query any foreign data center. Thus, if an enterprise environment includes a plurality of data center environments, each of which is managed by a different vendor supplied tool, a single model based information query can be used to expose the APIs of the plurality of instances. The above illustrated QueryModel shows an example of how an information query can be passed between at least two different data centers with a single XML query. Since the responses from all queried data centers are returned in XML format, the information obtained from the query can be quickly parsed and presented to the IT administrator on workstation  110  (see  FIG. 1 ). The following listing is illustrative of an XML response to the above information query: 
     
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 &lt;QueryModel&gt; 
               
               
                   
                 &lt;RAC&gt; 
               
               
                   
                   &lt;Name&gt;rac&lt;/Name&gt; 
               
               
                   
                   &lt;Property&gt; 
               
               
                   
                     &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                     &lt;Value&gt;Up&lt;/Value&gt; 
               
               
                   
                   &lt;/Property&gt; 
               
               
                   
                   &lt;Instance&gt; 
               
               
                   
                     &lt;Name&gt;rac1&lt;/Name&gt; 
               
               
                   
                     &lt;Property&gt; 
               
               
                   
                       &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                       &lt;Value&gt;Down&lt;/Value&gt; 
               
               
                   
                     &lt;/Property&gt; 
               
               
                   
                   &lt;/Instance&gt; 
               
               
                   
                   &lt;Instance&gt; 
               
               
                   
                     &lt;Name&gt;rac2&lt;/Name&gt; 
               
               
                   
                     &lt;Property&gt; 
               
               
                   
                       &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                       &lt;Value&gt;Up&lt;/ Value&gt; 
               
               
                   
                     &lt;/Property&gt; 
               
               
                   
                   &lt;/Instance&gt; 
               
               
                   
                 &lt;/RAC&gt; 
               
               
                   
                 &lt;Host&gt; 
               
               
                   
                   &lt;Name&gt;server1&lt;/Name&gt; 
               
               
                   
                   &lt;Property&gt; 
               
               
                   
                     &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                     &lt;Value&gt;Up&lt;/Value&gt; 
               
               
                   
                   &lt;/Property&gt; 
               
               
                   
                   &lt;Property&gt; 
               
               
                   
                     &lt;Name&gt;OS&lt;/Name&gt; 
               
               
                   
                     &lt;Value&gt;Redhat Linux&lt;/Value&gt; 
               
               
                   
                   &lt;/Property&gt; 
               
               
                   
                 &lt;/Host&gt; 
               
               
                   
                 &lt;/QueryModel&gt; 
               
               
                   
                   
               
             
          
         
       
     
     In another embodiment, a data center can be queried even when the exact number and structure of the instances are unknown. In response to the interpreted information query model, the foreign data center will search for answers by issuing one or more API calls internally, and will then populate the leaf nodes of the query model accordingly with the responses received from the queried instances. The following XML listing is illustrative of this embodiment: 
     
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 &lt;QueryModel&gt; 
               
               
                   
                 &lt;RAC&gt; 
               
               
                   
                   &lt;Name&gt;*&lt;/Name&gt; 
               
               
                   
                   &lt;Property&gt; 
               
               
                   
                     &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                     &lt;Value xsd:nil=“true”&gt;&lt;/Value&gt; 
               
               
                   
                   &lt;/Property&gt; 
               
               
                   
                   &lt;Instance&gt; 
               
               
                   
                     &lt;Name&gt;*&lt;/Name&gt; 
               
               
                   
                     &lt;Property&gt; 
               
               
                   
                       &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                       &lt;Value xsd:nil=“true”&gt;&lt;/Value&gt; 
               
               
                   
                     &lt;/Property&gt; 
               
               
                   
                   &lt;/Instance&gt; 
               
               
                   
                 &lt;/RAC&gt; 
               
               
                   
                 &lt;Host&gt; 
               
               
                   
                   &lt;Name&gt;*&lt;/Name&gt; 
               
               
                   
                   &lt;Property&gt; 
               
               
                   
                     &lt;Name&gt;Status&lt;/Name&gt; 
               
               
                   
                     &lt;Value xsd:nil=“true”&gt;&lt;/Value&gt; 
               
               
                   
                   &lt;/Property&gt; 
               
               
                   
                   &lt;Property&gt; 
               
               
                   
                     &lt;Name&gt;OS&lt;/Name&gt; 
               
               
                   
                     &lt;Value xsd:nil=“true”&gt;&lt;/Value&gt; 
               
               
                   
                   &lt;/Property&gt; 
               
               
                   
                 &lt;/Host&gt; 
               
               
                   
                 &lt;/QueryModel&gt; 
               
               
                   
                   
               
             
          
         
       
     
     As shown by the above, the present invention is flexible and adaptive. In a single information query, IT administrators can ask for information in different or unrelated areas, such as RAC and Host, and different levels of information, such as RAC and Instance. The source of the information query will get the answer in a single response. The present invention therefore makes querying very convenient and efficient. Since a single information query replaces a plurality of API calls, the need for network bandwidth is reduced because a single round trip query can provide the same information as literally hundreds of queries required in the prior art systems. Advantageously, IT administrators can receive the responsive information faster and with less effort in accordance with the present invention. 
     Another advantage of the present invention arises because the model based information query is very extensible and adaptable to changes at foreign data centers. When an instance is added or changed, there is no need to learn any new APIs because the combination of the interpreter and the schema provides a uniform interface to the home data center and handles the translation into foreign data center specific API calls. The present invention obviates the need to gather extensive API libraries formerly required to keep up with changes in foreign data center, thereby simplifying integration of multiple tools in managing a complex enterprise environment with multiple data center environments. 
     As a further benefit, there is no new code that needs to be written on the foreign data center side. Results responsive to the leaf nodes in the model based information query model are returned in XML format, as illustrated above. 
     The present invention also ensures consistent interface. Queries and results are always passed as XML trees. Both queries and results are easy to understand and interpret, so long as the querying data center and the responding data center both subscribe to the appropriate schema in accordance with the present invention. 
     In accordance with an embodiment of the present invention, schema  117  and  156  comprise a description of the structure and rules a model based information query (or XML document) must satisfy. The schema includes the formal declaration of the elements that make up a document, and can be extended to accommodate more features as needed. Note that the schema may vary for each data center and may be readily extended or adapted depending on the configuration or needs of a particular data center. Note further that the actual schema that may be selected for a particular implementation is deemed to be an engineering decision based on the specific requirements and may differ from the illustrated schema. One example of an illustrative schema follows: 
     
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 &lt;?xml version=“1.0” encoding=“UTF-8” ?&gt; 
               
               
                   
                 &lt;xsd:schema 
               
               
                   
                 xmlns:xsd=“http://www.w3.org/2001/XMLSchema” 
               
               
                   
                 xmlns=“http://xmlns.oracle.com/sysman/connector/msi” 
               
               
                   
                 targetNamespace=“http://xmlns.oracle.com/sysman/connector/ 
               
               
                   
                 msi” 
               
               
                   
                           elementFormDefault=“qualified”&gt; 
               
               
                   
                  &lt;xsd:simpleType name=“Name”&gt; 
               
               
                   
                   &lt;xsd:restriction base=“xsd:string”/&gt; 
               
               
                   
                  &lt;/xsd:simpleType&gt; 
               
               
                   
                  &lt;xsd:simpleType name=“Type”&gt; 
               
               
                   
                   &lt;xsd:restriction base=“xsd:string”/&gt; 
               
               
                   
                  &lt;/xsd:simpleType&gt; 
               
               
                   
                  &lt;xsd:simpleType name=“TargetType”&gt; 
               
               
                   
                   &lt;xsd:restriction base=“xsd:string”/&gt; 
               
               
                   
                  &lt;/xsd:simpleType&gt; 
               
               
                   
                  &lt;xsd:simpleType name=“AggregateTargetType”&gt; 
               
               
                   
                   &lt;xsd:restriction base=“xsd:string”&gt; 
               
               
                   
                    &lt;xsd:enumeration value=“cluster”/&gt; 
               
               
                   
                    &lt;xsd:enumeration value=“rac_database”/&gt; 
               
               
                   
                   &lt;/xsd:restriction&gt; 
               
               
                   
                  &lt;/xsd:simpleType&gt; 
               
               
                   
                  &lt;xsd:simpleType name=“Host”&gt; 
               
               
                   
                   &lt;xsd:restriction base=“xsd:string”/&gt; 
               
               
                   
                  &lt;/xsd:simpleType&gt; 
               
               
                   
                  &lt;xsd:simpleType name=“Username”&gt; 
               
               
                   
                   &lt;xsd:restriction base=“xsd:string”/&gt; 
               
               
                   
                  &lt;/xsd:simpleType&gt; 
               
               
                   
                  &lt;xsd:simpleType name=“Password”&gt; 
               
               
                   
                   &lt;xsd:restriction base=“xsd:string”/&gt; 
               
               
                   
                  &lt;/xsd:simpleType&gt; 
               
               
                   
                  &lt;xsd:simpleType name=“Value”&gt; 
               
               
                   
                   &lt;xsd:restriction base=“xsd:string”/&gt; 
               
               
                   
                  &lt;/xsd:simpleType&gt; 
               
               
                   
                  &lt;xsd:simpleType name=“RequestID”&gt; 
               
               
                   
                   &lt;xsd:restriction base=“xsd:string”/&gt; 
               
               
                   
                  &lt;/xsd:simpleType&gt; 
               
               
                   
                  &lt;xsd:complexType name=“Credential”&gt; 
               
               
                   
                   &lt;xsd:sequence&gt; 
               
               
                   
                    &lt;xsd:element name=“Name” type=“Username”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Password” type=“Password”/&gt; 
               
               
                   
                   &lt;/xsd:sequence&gt; 
               
               
                   
                  &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;xsd:complexType name=“Threshold”&gt; 
               
               
                   
                   &lt;xsd:sequence&gt; 
               
               
                   
                    &lt;xsd:element name=“ColumnName” 
               
               
                   
                 type=“xsd:string”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Operator” 
               
               
                   
                 type=“xsd:string”/&gt; 
               
               
                   
                    &lt;xsd:element name=“WarningValue” type=“Value” 
               
               
                   
                 minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“CriticalValue” type=“Value” 
               
               
                   
                 minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Response” type=“xsd:string” 
               
               
                   
                 minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Occurrences” 
               
               
                   
                 type=“xsd:int”/&gt; 
               
               
                   
                   &lt;/xsd:sequence&gt; 
               
               
                   
                  &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;xsd:complexType name=“Metric”&gt; 
               
               
                   
                   &lt;xsd:sequence&gt; 
               
               
                   
                    &lt;xsd:element name=“Name” type=“Name”/&gt;&lt;!-- for 
               
               
                   
                 example, ECM or regular. --&gt; 
               
               
                   
                    &lt;xsd:element name=“Type” type=“Type”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Threshold” type=“Threshold” 
               
               
                   
                 minOccurs=“0” maxOccurs=“unbounded”/&gt; 
               
               
                   
                   &lt;/xsd:sequence&gt; 
               
               
                   
                  &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;xsd:complexType name=“Property”&gt; 
               
               
                   
                   &lt;xsd:sequence&gt; 
               
               
                   
                    &lt;xsd:element name=“Name” type=“Name”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Value” type=“Value” 
               
               
                   
                 nillable=“true”/&gt; 
               
               
                   
                   &lt;/xsd:sequence&gt; 
               
               
                   
                  &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;xsd:complexType name=“ComplexProperty”&gt; 
               
               
                   
                   &lt;xsd:sequence&gt; 
               
               
                   
                    &lt;xsd:element name=“Type” type=“Type”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Property” type=“Property” 
               
               
                   
                 maxOccurs=“unbounded”/&gt; 
               
               
                   
                   &lt;/xsd:sequence&gt; 
               
               
                   
                  &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;xsd:complexType name=“RequestHeader”&gt; 
               
               
                   
                   &lt;xsd:sequence&gt; 
               
               
                   
                    &lt;xsd:element name=“RequestID” 
               
               
                   
                 type=“RequestID”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Source” type=“Name”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Destination” type=“Name”/&gt; 
               
               
                   
                    &lt;xsd:element name=“RequestProperty” 
               
               
                   
                 type=“ComplexProperty” minOccurs=“0”/&gt; 
               
               
                   
                   &lt;/xsd:sequence&gt; 
               
               
                   
                  &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;xsd:complexType name=“StorageType”&gt; 
               
               
                   
                   &lt;xsd:sequence&gt; 
               
               
                   
                    &lt;xsd:element name=“Type”&gt; 
               
               
                   
                     &lt;xsd:simpleType&gt; 
               
               
                   
                      &lt;xsd:restriction base=“xsd:string”&gt; 
               
               
                   
                       &lt;xsd:enumeration value=“CFS”/&gt; 
               
               
                   
                       &lt;xsd:enumeration value=“ASM”/&gt; 
               
               
                   
                       &lt;xsd:enumeration value=“RAW”/&gt; 
               
               
                   
                      &lt;/xsd:restriction&gt; 
               
               
                   
                     &lt;/xsd:simpleType&gt; 
               
               
                   
                    &lt;/xsd:element&gt; 
               
               
                   
                    &lt;xsd:element name=“Property” type=“Property” 
               
               
                   
                 maxOccurs=“unbounded”/&gt; 
               
               
                   
                   &lt;/xsd:sequence&gt; 
               
               
                   
                  &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;xsd:complexType name=“Job”&gt; 
               
               
                   
                   &lt;xsd:sequence&gt; 
               
               
                   
                    &lt;xsd:element name=“JobId” type=“xsd:string”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Target” type=“Target” 
               
               
                   
                 maxOccurs=“unbounded” minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“JobStatus” type=“xsd:int” 
               
               
                   
                 nillable=“true” minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Property” type=“Property”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Parameter” type=“Property” 
               
               
                   
                 minOccurs=“0” maxOccurs=“unbounded”/&gt; 
               
               
                   
                   &lt;/xsd:sequence&gt; 
               
               
                   
                  &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;xsd:complexType name=“Target”&gt; 
               
               
                   
                   &lt;xsd:sequence&gt; 
               
               
                   
                    &lt;xsd:element name=“Name” type=“Name”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Type” type=“TargetType”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Host” type=“Host” 
               
               
                   
                 minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Storage” type=“StorageType” 
               
               
                   
                 minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Credential” 
               
               
                   
                 type=“Credential” minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Property” type=“Property” 
               
               
                   
                 minOccurs=“0” maxOccurs=“unbounded”/&gt; 
               
               
                   
                    &lt;xsd:element name=“ComplexProperty” 
               
               
                   
                 type=“ComplexProperty” maxOccurs=“unbounded” 
               
               
                   
                 minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Metric” type=“Metric” 
               
               
                   
                 minOccurs=“0” maxOccurs=“unbounded”/&gt; 
               
               
                   
                   &lt;/xsd:sequence&gt; 
               
               
                   
                  &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;xsd:complexType name=“AggregateTarget”&gt; 
               
               
                   
                   &lt;xsd:sequence&gt; 
               
               
                   
                    &lt;xsd:element name=“Name” type=“Name”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Type” 
               
               
                   
                 type=“AggregateTargetType”/&gt;&lt;!-- for Aggregate 
               
               
                   
                 target, the host is not required. --&gt; 
               
               
                   
                    &lt;xsd:element name=“Host” type=“Host” 
               
               
                   
                 minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Storage” type=“StorageType” 
               
               
                   
                 minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Credential” 
               
               
                   
                 type=“Credential” minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Target” type=“Target” 
               
               
                   
                 minOccurs=“1” maxOccurs=“unbounded”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Property” type=“Property” 
               
               
                   
                 minOccurs=“0” maxOccurs=“unbounded”/&gt; 
               
               
                   
                    &lt;xsd:element name=“ComplexProperty” 
               
               
                   
                 type=“ComplexProperty” maxOccurs=“unbounded” 
               
               
                   
                 minOccurs=“0”/&gt; 
               
               
                   
                    &lt;xsd:element name=“Metric” minOccurs=“0” 
               
               
                   
                 maxOccurs=“unbounded”/&gt; 
               
               
                   
                   &lt;/xsd:sequence&gt; 
               
               
                   
                  &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;xsd:element name=“EMModel”&gt; 
               
               
                   
                   &lt;xsd:annotation&gt; 
               
               
                   
                    &lt;xsd:documentation&gt;EM Model in integration. 
               
               
                   
                    &lt;/xsd:documentation&gt; 
               
               
                   
                   &lt;/xsd:annotation&gt; 
               
               
                   
                   &lt;xsd:complexType&gt; 
               
               
                   
                    &lt;xsd:sequence minOccurs=“1”&gt; 
               
               
                   
                     &lt;xsd:element name=“RequestHeader” 
               
               
                   
                 type=“RequestHeader”/&gt; 
               
               
                   
                     &lt;xsd:element name=“Credential” minOccurs=“1” 
               
               
                   
                 type=“Credential”/&gt; 
               
               
                   
                     &lt;xsd:element name=“Job” type=“Job” 
               
               
                   
                 minOccurs=“0” maxOccurs=“unbounded”/&gt; 
               
               
                   
                     &lt;xsd:element name=“AggregateTarget” 
               
               
                   
                 minOccurs=“0” maxOccurs=“unbounded” 
               
               
                   
                 type=“AggregateTarget”/&gt; 
               
               
                   
                     &lt;xsd:element name=“Target” minOccurs=“0” 
               
               
                   
                 maxOccurs=“unbounded” type=“Target”/&gt; 
               
               
                   
                    &lt;/xsd:sequence&gt; 
               
               
                   
                   &lt;/xsd:complexType&gt; 
               
               
                   
                  &lt;/xsd:element&gt; 
               
               
                   
                 &lt;/xsd:schema&gt; 
               
               
                   
                   
               
             
          
         
       
     
       FIG. 4  illustrates a method for handling a model based information query at a foreign data center in accordance with an embodiment of the present invention. Initially, a model based information query is composed in an XML format that conforms to the schema for the target foreign data center, as indicated at  402 . In one embodiment, an interpreter  162  (see  FIG. 1 ) is responsible for formulating the model based information query based on the nature of the request from tool  108  in view of schema  117 . 
     This information query is transmitted to one or more foreign data centers, as indicated at  404 . After the interpreter at the foreign data center receives the information query, it applies the schema to translate and interpret the request. The tool at the foreign data center processes the translated queries to generate the appropriate APIs and generate the response. The response is populated with information from the targeted instances in a tree-like formatted response that has leaf nodes corresponding to the leaf nodes of the model based information query. After response tree is populated, the foreign data center transmits the response to the home data center. 
     When the home data center receives the response, interpreter  162 , as indicated at  406 , applies the schema to decode the information contained the response. In one embodiment, the response is in the form of an XML tree with a plurality of leaf nodes comprising status and attribute information of the queried instances. This information is then available for use by tool  108  and for display on workstation  110  for the benefit of the IT administrator, as indicated at  408 . 
     While this process flow illustrates one embodiment of the present invention, where data center environment  101  is shown as the home data center functioning as the source of the information query, it will be appreciated that the respective designation of home and foreign data centers is interchangeable. Thus, it is contemplated that, in some embodiments, data center environment  150  (or some other data center) will function as the source of the information queries and data center environment  101  (or some other data center) will function as the foreign data center. 
       FIG. 5  illustrates another method for querying a foreign data center in accordance with an embodiment of the present invention. As indicated at  502 , the initial requirement is to populate foreign data centers with schema and interpreter. The interpreter at the foreign data center initially acts as the front end to receive information queries from a home data center. 
     When an information query is received, the interpreter uses the schema to generate a plurality of XML model based information queries as indicated at  504 . Advantageously, the same information query can be directed to additional foreign data centers and need not be drafted on a case by case basis. Thus, a generalized information query can be sent from a home data center to a plurality of foreign data centers. The plurality of queries interpreted by the interpreter are then used by the tool to expose APIs on the foreign data center as indicated at  506 . Finally, as indicated at  508 , the interpreter populates and returns an XML response to the home data center in response to the information query providing the requested status and attribute information. 
       FIG. 6  shows a block diagram of components that may be present in one or more of the computer systems  602 , such as workstation  110  or server  105 , that implement embodiments of the present invention. Specifically, a computer system  602  includes a processor  604  that executes instructions from computer programs, including operating systems. Processor  604  may be utilized to allow a semantic engine, for example, to run. Although processor  604  typically has memory caches, processor  604  may utilize memory  606 , which may store instructions or computer code and data to implement embodiments of the present invention. 
     The processor may be a dual core or multicore processor, where there are multiple processor cores on a single integrated circuit. The system may also be part of a distributed computing environment. In a distributed computing environment, individual computing systems are connected to a network and are available to lend computing resources to another system in the network as needed. 
     A fixed storage  608  may store computer programs and data. Fixed storage  608  is typically persistent, and provides more storage than memory  606 . One example of a typical fixed storage  608  for databases comprises multiple hard drives, although it should be understood that fixed storage  608  maybe be any suitable component. A removable storage  610  provides mobility to computer programs and/or data that are stored thereon. Removable storage  610  may include, but is not limited to, mass disk drives, floppy disks, magnetic disks, optical disks, magneto-optical disks, fixed disks, hard disks, CD-ROMs, recordable CDs, DVDs, recordable DVDs (e.g., DVD-R, DVD+R, DVD-RW, DVD+RW, HD-DVD, or Blu-ray Disc), flash and other nonvolatile solid-state storage (e.g., USB flash drive), battery-backed-up volatile memory, tape storage, reader, and other similar media, and combinations of these. 
     Memory  606 , fixed storage  608  and removable storage  610  provide examples of computer-readable storage media that may be utilized to store and retrieve computer programs incorporating computer codes or code devices that implement the invention, data for use with the invention, and the like. Additionally, a data signal embodied in a carrier wave, e.g., in a network such as the Internet or an Intranet, may also be a computer-readable storage medium. An input device  612  allows a user to interface with computer system  602 . Input device  612  may be a keyboard, a mouse, buttons, dials, or any other suitable input mechanism. An output device  614  generally allows system  602  to provide output to the user. Output device  614  may include, but is not limited to, devices such as monitors, display screens, LEDs, printers, or substantially any other output mechanism. 
     Additional peripherals may be connected to the system through a network interface  616  or other interface such as serial, parallel, or universal serial bus (USB) interfaces. 
     Network interface  616  typically allows system  602  to interface with a network to which it is connected. The system bus architecture of computer system  602  is represented by arrows  618 . The components shown in  FIG. 6  may be found in many computer systems. However, components may be added, deleted, and combined without departing from the spirit or the scope of the present invention. For example, fixed storage  608  may be a file server that is accessed through a network connection. Thus,  FIG. 6  is for illustration purposes and is not limiting. 
     In one embodiment, an IT administrator utilizes computer system  602  to initiate a query selected or unknown instances and to determine the properties or attributes of multiple instances. The query is model based rather than operational because an interpreter at the foreign data center utilizes a schema to parse the query and generate the operational APIs. Thereafter, the management tool uses the locally generated APIs to query each instance and collects responsive information on the status and attributes. This information is then used to populate a response that is preferably the format of an XML tree where each leaf node comprises the information of one of the instances. The response is then interpreted at the home data center and parsed to provide the requested information to the source management tool. 
     The present invention solves the inherent problems of maintaining a plurality of data center environments while enabling the efficient and scaleable mechanism for interrogating a foreign data center to determine the structure of the data center as well as the properties of the target instances even if the foreign data center is subsequently updated. The present invention solves the long felt need to integrate at least two data center environments that each operate under different management software tools. 
     Although the present invention has been discussed with respect to specific embodiments thereof, these embodiments are merely illustrative, and not restrictive, of the present invention. For example, the methods disclosed herein, such as illustrated in conjunction with  FIGS. 3 and 4 , can include additional, combined, altered, reordered or fewer method elements without departing from the spirit or the scope of the present invention. In other embodiments, the model based information query of the present invention can be used with a variety of data center management software tools when combined with the interpreter and the appropriate schema. Indeed, embodiments of the present invention are readily adaptable to a variety of such tools and are particularly valuable because there is no need to modify or change the computer code associated with the tool that is used to manage the foreign data center. 
     Note that any suitable programming language can be used to implement the routines of an embodiment of the present invention including C, C++, C#, Perl, Java, JavaScript, AJAX, assembly language, etc. Different programming techniques can be employed such as procedural or object oriented. The routines can execute on a single processing device or multiple processors. Although certain steps, operations or computations may be presented in a specific order, this order may be changed in different embodiments. In some embodiments of the present invention, multiple steps shown as sequential in this specification can be performed at the same time. The sequence of operations described herein can be interrupted, suspended, or otherwise controlled by another process. The routines can operate in a networking environment or as standalone routines occupying a substantial part, or an in-substantial part of the system processing. 
     A computer-implemented version of the invention may be embodied using, or residing on, computer-readable medium. A computer-readable medium may include any medium that participates in providing instructions to one or more processors for execution. Such a medium may take many forms including, but not limited to, nonvolatile, volatile, and transmission media. Nonvolatile media includes, for example, magneto-strictive random access memory (MRAM), flash memory or optical or magnetic disks. Volatile media includes static or dynamic memory, such as cache memory or RAM. Transmission media includes coaxial cables, copper wire, fiber optic lines, and wires arranged in a bus. Transmission media can also take the form of electromagnetic, radio frequency, acoustic, or light waves, such as those generated during radio wave and infrared data communications. 
     For example, a binary, machine-executable version, of the software of the present invention may be stored or reside in RAM or cache memory, or on mass storage device. The source code of the software of the present invention may also be stored or reside on mass storage device (e.g., hard disk, magnetic disk, tape, or CD-ROM). As a further example, code of the invention may be transmitted via wires, radio waves, or through a network such as the Internet. 
     While preferred embodiments are disclosed herein, many variations are possible which remain within the spirit and scope of the invention. Such variations, modifications, alternate constructions, and equivalents will be obvious to those with skill in the art after inspection of the specification, drawings and claims herein. The invention therefore is not to be restricted except by the scope and spirit of the appended claims.