PK
r>Aoa, mimetypeapplication/epub+zipPK r>A iTunesMetadata.plist]
This section describes new features of the Oracle Database 11g Release 2 (11.2) and provides pointers to additional information. New features information from previous releases is retained to help those users migrating to the current release.
The following sections describe the new features in Oracle Database Heterogeneous Connectivity User's Guide:
New features for Oracle Database 11g Release 2 (11.2) in the Oracle Database Heterogeneous Connectivity User's Guide include:
Gateway CHAR
Semantics
This feature allows any HS-based gateway to optionally run in CHAR
Semantics mode. Rather than always describing non-Oracle database columns as CHAR(
n
BYTE)
, this new feature describes them as CHAR(
n
CHAR)
and VARCHAR(
n
CHAR)
. The concept is similar to Oracle Database CHAR
Semantics.
Multi-byte character sets ratio suppression
This feature optionally suppresses the ratio expansion from the non-Oracle database involving multi-byte character set (for example, from US7ASCII
to AL32UTF8
, or from KO16MSWIN949
to KO16KSC5601
). By default, Oracle Gateways assume the worst ratio to prevent data being truncated or insufficient buffer size situation.
IPv6
This release fully supports IPv6 between Oracle Database and Oracle Database gateways. For some gateways, IPv6 is also supported between Oracle Database gateways and the non-Oracle targets.
Gateway IDLE timeout
This release allows some Gateways to specify a session idle timeout limit. When a gateway session is idle for more than the specified time limit, the gateway session is terminated automatically with any pending update rolled back (if the gateway has the proper rollback capability).
See Also: For additional information, consult the Oracle documentation for that specific gateway |
New features for Oracle Database 11g Release 1 (11.1) in the Oracle Database Heterogeneous Connectivity User's Guide include:
Parallel data retrieval
The Heterogeneous Services agent architecture was enhanced for parallel data retrieval from remote non-Oracle databases. With this feature, gateway customers experience improved elapsed time for data retrieval and load.
This feature includes the new DBMS_HS_PARALLEL
package. Four new procedures are introduced with this package:
LOAD_TABLE
This procedure loads the data from a remote table to a local Oracle table in parallel. If the local Oracle table does not already exist, it is created automatically.
CREATE_TABLE_TEMPLATE
This procedure writes out a CREATE TABLE
template based on information gathered from the remote table. You can use the information to add any optimal Oracle CREATE TABLE
clauses.
CREATE_OR_REPLACE_VIEW
This procedure creates (or replaces) a read-only view to be referenced for retrieving the data from a remote table in parallel.
DROP_VIEW
This procedure drops the view and internal objects created by the CREATE_OR_REPLACE_VIEW
procedure. If the view has not already been created by the CREATE_OR_REPLACE_VIEW
procedure, an error message is returned.
Optimizer interface improvements
The statistics interface of Heterogeneous Services was enhanced to enable the Oracle optimizer to derive an equivalent execution plan for distributed SQL when dealing with a remote Oracle database and the agent. With this feature, customers experience similar or better elapsed time for distributed SQL across the gateways.
Oracle's synchronous solutions for operating in a heterogeneous environment are Oracle Database gateways. The common component of Oracle Database for supporting these solutions is Heterogeneous Services. This chapter describes the architecture and functionality of the Heterogeneous Services component and its interaction with Oracle Database gateways.
This chapter contains the following topics:
At a high level, Oracle heterogeneous connectivity process architecture is structured as shown in Figure 2-1.
Figure 2-1 Oracle Heterogeneous Connectivity Process Architecture
The Heterogeneous Services component in Oracle Database communicates with a Heterogeneous Services agent process which, in turn, communicates with the non-Oracle system. The code can be conceptually divided into three parts:
The Heterogeneous Services component in Oracle Database
This module performs most of the processing related to heterogeneous connectivity.
Agent generic code
This is code in the agent that is generic to all Heterogeneous Services products. This code communicates with the database and provides multithreading support.
The driver
This module communicates with the non-Oracle system. It is used to map calls from the Heterogeneous Services to the native API of the non-Oracle system, and it is not specific to Oracle systems.
A Heterogeneous Services agent is the process through which Oracle Database connects to a non-Oracle system. The agent process that accesses a non-Oracle system is called a gateway. Access to all gateways goes through the Heterogeneous Services component in Oracle Database and all gateways contain the same agent-generic code. Each gateway has a different driver linked in that maps the Heterogeneous Services to the client API of the non-Oracle system.
The agent process consists of two components. These are agent generic code and a non-Oracle system-specific driver. An agent exists primarily to isolate Oracle Database from third-party code. For a process to access the non-Oracle system, the non-Oracle system client libraries must be linked into it. In the absence of the agent process, these libraries would have to be directly linked into the Oracle database and problems in this code could cause Oracle Database to fail. An agent process isolates Oracle Database from any problems in third-party code. Even if a fatal error occurs in the thirde-party code, only the agent process will end.
An agent can be in the following places:
On the same computer as the non-Oracle system
On the same computer as Oracle Database
On a computer different from either of these two
Agent processes are started when a user session accesses a non-Oracle system through a database link. These connections are made using Oracle's remote data access software, Oracle Net Services, which enables both client/server and server/server communication. The agent process continues to run until the user session is disconnected or the database link is explicitly closed.
Multithreaded agents act differently. They must be explicitly started and shut down by a database administrator, instead of automatically being spawned by Oracle Net Services
There are two types of Heterogeneous Services agents:
An Oracle Database gateway is a gateway that is designed for accessing a specific non-Oracle system. Oracle provides gateways to access several commercially available non-Oracle systems. For example, an Oracle Database Gateway for Sybase is designed to access Sybase databases.
With Oracle Database gateways, you can access data anywhere in a distributed database system without being required to know either the location of the data or how it is stored. When the results of your queries are returned to you by Oracle Database, they are presented to you as if the data stores from which they were taken all resided within a remote instance of an Oracle distributed database.
In addition to Oracle Database gateways for various non-Oracle database systems, there is the Oracle Database Gateway for ODBC agent. This agent contains only generic code, and the customer is responsible for providing the necessary drivers. Oracle Database Gateway for ODBC enables you to use ODBC drivers to access non-Oracle systems that have an ODBC interface.
To access a specific non-Oracle system using Oracle Database Gateway for ODBC, you must configure an ODBC driver to the non-Oracle system. These drivers are not provided by Oracle. However, if the non-Oracle system supports the ODBC protocols, you can use Oracle Database Gateway for ODBC to access any non-Oracle system that can be accessed using an ODBC driver.
Oracle Database Gateway for ODBC has some limitations. Especially, when compared to a paticular target, the functionality and performance are limited.
This section discusses the components of Heterogeneous Services in Oracle Database. These components are:
The transaction service component of the Heterogeneous Services component enables non-Oracle systems to be integrated into Oracle Database transactions and sessions. When you access a non-Oracle system for the first time using a database link within your Oracle user session, you transparently set up an authenticated session in the non-Oracle system. At the end of your Oracle user session, the authenticated session in the non-Oracle database system is closed.
Additionally, one or more non-Oracle systems can participate in an Oracle distributed transaction. When an application commits a transaction, Oracle's two-phase commit protocol accesses the non-Oracle database system to transparently coordinate the distributed transaction. Even in those cases where the non-Oracle system does not support all aspects of Oracle two-phase commit protocol, Oracle can (with some limitations) support distributed transactions with the non-Oracle system.
The structured query language (SQL) service handles the processing of all SQL-related operations. The work done by the SQL service includes:
Mapping Oracle internal SQL-related calls to the Heterogeneous Services driver application programing interface (API). This API is then mapped by the driver to the client API of the non-Oracle system.
Translating SQL statements from Oracle's SQL dialect to the SQL dialect of the non-Oracle system.
Translating queries that reference Oracle data dictionary tables to queries that extract the necessary information from the non-Oracle system's data dictionary.
Converting data from non-Oracle system data types to Oracle data types and back.
Compensating for missing functionality of the non-Oracle system by issuing multiple queries to get the necessary data and doing postprocessing to get the desired results.
Heterogeneous Services components consist of generic code and must be configured to work with many different non-Oracle systems. Each gateway has configuration information stored in the driver module. The information is uploaded to the server immediately after the connection to the gateway is established. The configuration information includes:
Data dictionary translations are views on non-Oracle data dictionary tables. They help Heterogeneous Services translate references to Oracle data dictionary tables into queries that can retrieve the equivalent information from the non-Oracle data dictionary.
Heterogeneous Services initialization parameters serve two functions:
They give you a means of fine-tuning the gateway to optimize performance and memory utilization for the gateway and the Heterogeneous Services component.
They enable you to inform the gateway (and, thereby, Heterogeneous Services) how the non-Oracle system was configured (for example, in what language the non-Oracle system is running). They give information to Heterogeneous Services about the configurable properties of the non-Oracle system.
You can examine the Heterogeneous Services initialization parameters for a session by querying the view V$HS_PARAMETER
. Users can set initialization parameters in gateway initialization files.
Capabilities tell Heterogeneous Services about the limitations of the non-Oracle system (such as what types of SQL statements are supported) and how to map Oracle data types and SQL expressions to their non-Oracle system equivalents. In other words, they tell Heterogeneous Services about the non-configurable properties of the non-Oracle system. Capabilities cannot be changed by the user.
Configuration information is uploaded from an agent to the Heterogeneous Services component immediately after the connection to the agent is established. The configuration information is stored in Heterogeneous Services data dictionary tables. No further uploading occurs until something at the agent changes (for example, if a patch is applied or if the agent is upgraded to a new version).
The following sections describe:
Classes and Instances
Data Dictionary Views
Using Heterogeneous Services, you can access several non-Oracle systems from a single Oracle database. This is illustrated in Figure 2-2, which shows two non-Oracle systems being accessed.
Figure 2-2 Accessing Multiple Non-Oracle Instances
Both agents upload configuration information, which is stored as part of the Heterogeneous Services data dictionary information on Oracle Database.
Although it is possible to store data dictionary information at one level of granularity by having completely separate definitions in the Heterogeneous Services data dictionary for each individual instance, this can lead to an unnecessarily large amount of redundant data dictionary information. To avoid this, Oracle organizes the Heterogeneous Services data dictionary by two levels of granularity, called class and instance.
A class pertains to a specific type of non-Oracle system. For example, you may want to access the class of Sybase database systems with Oracle Database. An instance defines specializations within a class. For example, you may want to access several separate instances within a Sybase database system. Each class definition (one level of granularity) is shared by all the particular instances (a second level of granularity) under that class. Further, instance information takes precedence over class information, and class information takes precedence over server-supplied defaults.
For example, suppose that Oracle Database accesses three instances of Sybase and two instances of Ingres II. Sybase and Ingres II each have their own code, requiring separate class definitions for Oracle Database to access them. The Heterogeneous Services data dictionary therefore would contain two class definitions, one for Sybase and one for Ingres II, with five instance definitions, one for each instance being accessed by Oracle Database.
Note that instance-level capability and data dictionary information are session-specific and are not stored in the Heterogeneous Services data dictionary of Oracle Database. However, instance-level initialization parameters can be stored in the database.
The Heterogeneous Services data dictionary views contain the following kinds of information:
Names of instances and classes uploaded into the Oracle data dictionary
Capabilities, including SQL translations, defined for each class or instance
Data Dictionary translations defined for each class or instance
Initialization parameters defined for each class or instance
You can access information from the Oracle data dictionary by using fixed views. The views are categorized into three main types:
Figure 2-3 shows a typical gateway process flow. The steps explain the sequence of events that occur when a client application queries the non-Oracle database system database through the gateway.
The client application sends a query using Oracle Net to Oracle Database.
Heterogeneous Services and the gateway converts the SQL statement into a SQL statement understood by the non-Oracle database system.
Oracle Database sends the query to the gateway using Oracle Net.
For the first transaction in a session, the gateway logs in to non-Oracle database system using a user name and password that is valid in the non-Oracle system.
The gateway retrieves data using non-Oracle database system SQL statements.
The gateway converts retrieved data into a format compatible with Oracle Database.
The gateway returns query results to Oracle Database, again using Oracle Net Services.
Oracle Database passes the query results to the client application using Oracle Net. The database link remains open until the gateway session is finished, or the database link is explicitly closed.
Heterogeneous Connectivity User's Guide
11g Release 2 (11.2)
E11050-01
July 2009
Oracle Database Heterogeneous Connectivity User's Guide, 11g Release 2 (11.2)
E11050-01
Copyright © 2001, 2009, Oracle and/or its affiliates. All rights reserved.
This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.
The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.
If this software or related documentation is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:
U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.
This software is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications which may create a risk of personal injury. If you use this software in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure the safe use of this software. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software in dangerous applications.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
This software and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.
This chapter describes the challenges of operating in a heterogeneous environment. Oracle recognizes these challenges and offers both synchronous and asynchronous solutions that enable companies to easily operate in such an environment. The synchronous solution, Oracle Database gateway, is discussed in this guide.
This chapter contains the following topics:
Benefits of Oracle's Solution for Synchronous Information Integration
See Also: For information about a specific Oracle Database gateway, consult the Oracle documentation for that specific gateway |
Information integration is a challenge that affects many organizations because they may run several different database systems. Each of these systems store data and has a set of applications that run against the data. This data is just bits and bytes on a file system - and only a database can turn the bits and bytes of data into business information. Integration and consolidation of all business information allows an organization to take advantage of the synergies inherent in business information.
Consolidation of all data into one database system is often difficult. This is primarily because many of the applications that run against one database may not have an equivalent application that runs against another. Until migrating data to one consolidated database system is possible, the heterogeneous database systems must work together.
There are several problems to overcome before interoperability is possible. The database systems can be accessed using different interfaces, different data types, different capabilities, and different ways of handling errors. Even when one relational database tries to access another relational database, the differences are significant. In this situation, the common features of the databases include data access through SQL, two-phase commit protocol, and similar data types.
There are also significant differences. SQL dialects can be different, as can transaction semantics. There can be some data types in one database that do not exist in the other. The most significant area of difference is in the data dictionaries of the two databases. Most data dictionaries contain similar information, but the information is structured for each data dictionary in a different way. There are several ways of overcoming this problem. This guide describes Oracle's approach to synchronously access information from multiple sources.
If a client program must access or modify data on several Oracle databases, it can open connections to each of them. This approach, however, has several drawbacks; among them are the following:
To join data from the databases, the client must have logic allowing that.
To guarantee data integrit, the client must have transaction coordination logic.
Oracle provides another approach called distributed processing, where the client connects to one Oracle database and shifts the burden of joining data and transaction coordination to that database. The database to which the client program connects is called the local database. Any database other than this one is a remote database. The client program can access objects at any of the remote databases using database links. The Oracle query processor takes care of the joins and its transaction engine takes care of the transaction coordination.
The approach that Oracle took to solve the heterogeneous connectivity problem is to allow a non-Oracle system to be one of the remote nodes in the previously described scenario. The remote non-Oracle system functions as a remote Oracle system. The non-Oracle system uses the same SQL dialect and the same data dictionary structure as an Oracle system. Access to a non-Oracle system is done through Heterogeneous Services.
The work done by the Heterogeneous Services component is, for the most part, completely transparent to the end user. With only a few exceptions (these are noted in later chapters), you are not required to do anything different to access a non-Oracle system than is required for accessing an Oracle system. The Heterogeneous Services component is used as the foundation for implementing Oracle's access to non-Oracle databases.
An Oracle Database gateway works in conjunction with the Heterogeneous Services component of Oracle Database to access a particular, commercially available, non-Oracle system for which that Oracle Database gateway was designed. For example, you use the Oracle Database Gateway for Sybase to access a Sybase database. Oracle also provides an Oracle Database Gateway for ODBC which enables you to use ODBC drivers to access non-Oracle databases.
Using an Oracle Database gateway, you can access data anywhere in a distributed database system without being required to know either the location of the data or how it is stored.
Note: The ODBC drivers that are required by Oracle Database Gateway for ODBC are not supplied by Oracle. Users must obtain drivers from other vendors. |
Oracle also offers asynchronous information integration products. Those products are not discussed in this guide. Briefly, these products include:
Oracle Streams enables the propagation of data, transactions, and events in a single data stream or queue, either within a database or among multiple databases. Not only can Oracle Streams capture, propagate, and apply changes to data, it can also handle data structure changes (DDL) and user-defined events. Changes can be captured and applied as is, or transformed at any point in the capture, propagation, and application processing.
The Messaging Gateway enables communication between Oracle Database and non-Oracle messaging systems.
Oracle offers a number of open interfaces, such as OCI, JDBC, and ODBC, that enable customers to use third-party applications or to write their own client applications to access Oracle Database.
Much of the processing power of Oracle Database gateways is integrated into the database. This provides an efficient solution for information integration that enables full exploitation of the power and features of the Oracle database. This includes such features as powerful SQL parsing and distributed optimization capabilities.
The following sections describe the benefits of Oracle's approach to resolving the challenges of a heterogeneous environment:
Oracle's Application Development and End User Tools Can Be Used
Users Can Communicate With a Remote Database in its Own Language
Oracle Database gateways provide the ability to transparently access data in non-Oracle databases from an Oracle environment. You can create synonyms for the objects in a non-Oracle database and refer to them without having to specify a physical location. This transparency eliminates the need for application developers to customize their applications to access data from different non-Oracle systems, thus decreasing development efforts and increasing the mobility of the application.
Instead of requiring applications to interoperate with non-Oracle systems using their native interfaces (which can result in intensive application-side processing), applications can be built upon a consistent Oracle interface for both Oracle and non-Oracle systems.
Oracle Database gateways provide applications direct access to data in non-Oracle databases. This eliminates the need to upload and download large amounts of data to different locations, thus reducing data duplication and saving disk storage space. By eliminating uploading and downloading large amounts of data, there is a reduced risk for unsynchronized or inconsistent data.
An Oracle database accepts SQL statements that query data stored in several different databases. An Oracle database with the Heterogeneous Services component processes the SQL statement and passes the appropriate SQL code directly to other Oracle databases and through gateways to non-Oracle databases. The Oracle database combines the results and returns them to the client.
Oracle Database gateways extend the range of Oracle's database and application development tools. Oracle has tools that increase application development and user productivity by reducing prototype, development, and maintenance time.
You are not required to develop new tools or learn how to use other tools to access data stored in non-Oracle databases. Instead, you can access Oracle and non-Oracle data with a single set of Oracle tools. These tools can run on remote systems connected through Oracle Net to an Oracle database.
Oracle enables you to transparently access non-Oracle systems using SQL statements. In some cases, however, it becomes necessary to use non-Oracle system SQL to access the non-Oracle system. For such cases, Heterogeneous Services has a passthrough feature that enables you to bypass Oracle's query processor and to communicate with the remote database in its own language.
This chapter explains how to use Heterogeneous Services (HS) agents. For installing and configuring the agents, refer to the Oracle Database gateway installation and configuration guides. This chapter contains the following sections:
Copying Data from the Oracle Database Server to the Non-Oracle Database System
Copying Data from the Non-Oracle Database System to the Oracle Database Server
Configure the gateway using initialization parameters. This is done by creating an initialization file and setting the desired parameters in this file. See Section 2.5 for configuration information.
Heterogeneous Services initialization parameters are distinct from Oracle Database initialization parameters. Heterogeneous Services initialization parameters are set in the Heterogeneous Services initialization file and not in the Oracle database initialization parameter file (init.ora
file). There is a Heterogeneous Services initialization file for each gateway instance.
The following sections describe:
Encrypting Initialization Parameters
Gateway Initialization Parameters
Initialization parameters may contain sensitive information, such as user IDs or passwords. Initialization parameters are stored in plain text files and are insecure. An encryption feature has been added to Heterogeneous Services making it possible to encrypt parameter values. This is done through the dg4pwd
utility. To use this feature requires setting the value of a parameter in the initialization file to an unquoted asterisk (*). For example:
With the value set to this security marker, all Heterogeneous Services agents know that the real value will be stored in a related, encrypted password file. The name of this file will be init
sid
.pwd
, where sid
is the Oracle system identifier used for the gateway. This file is created by the dg4pwd
utility in the current directory containing the initialization file. Running the utility prompts for the real value of the parameter, which the utility will encrypt and store in the password file. It should be noted that encrypted initialization parameters are implicitly treated as PRIVATE
parameters and are not uploaded to the server.
The dg4pwd
utility is used to encrypt initialization parameters that would normally be stored in the initialization parameter file in plain text. The utility works by reading the initialization parameter file in the current directory and looking for parameters having a security marker for the value. The security marker is an unquoted asterisk (*). This designates that the value of this parameter is to be stored in an encrypted form in a password file. The following is an example of an initialization parameter set to this value:
HS_FDS_CONNECT_INFO = *
The initialization parameter file in the current directory is first edited to set the value of the parameter to this security marker. Then the utility is run, specifying the gateway SID on the command line, with an optional user ID to designate a different owner of the encrypted information. The utility reads the initialization parameter file and prompts you to enter the real values that are to be encrypted. The syntax of the command is:
dg4pwd [sid] {userid}
Where [
sid
]
is the SID of the gateway and {
userid
}
is an optional user ID used to encrypt the contents. If no user ID is specified, then the current user's ID is used. Values are encrypted using this ID. In order to decrypt the values, the agent must be run as that user. The following example assumes a gateway SID of SYBASE:
dg4pwd SYBASE ORACLE Gateway Password Utility Constructing password file for Gateway SID SYBASE Enter the value for HS_FDS_CONNECT_INFO sybasew
In the previous example, the initialization parameter file, initSYBASE.ora
, is read. The parameter, HS_FDS_CONNECT_INFO
, is identified as requiring encryption. Enter the value (for example, sybasew
) and presses enter. If more parameters require encryption, they are prompted for in turn. The encrypted data is stored in the same directory as the initialization file.Any initialization parameters needing encryption should be encrypted before using the Oracle Database gateway.
Gateway initialization parameters can be divided into two groups. One is a set of generic initialization parameters that are common to all gateways and the other is a set of initialization parameters that are specific to individual gateways. The following generic initialization parameters are the only initialization parameters discussed in this document:
HS_BULK
HS_CALL_NAME
HS_COMMIT_POINT_STRENGTH
HS_DB_DOMAIN
HS_DB_INTERNAL_NAME
HS_DB_NAME
HS_DESCRIBE_CACHE_HWM
HS_FDS_CONNECT_INFO
HS_FDS_DEFAULT_SCHEMA_NAME
HS_FDS_SHAREABLE_NAME
HS_FDS_TRACE_LEVEL
HS_LANGUAGE
HS_LONG_PIECE_TRANSFER_SIZE
HS_NLS_DATE_FORMAT
HS_NLS_DATE_LANGUAGE
HS_NLS_NCHAR
HS_NLS_NUMERIC_CHARACTERS
HS_NLS_TIMESTAMP_FORMAT
HS_NLS_TIMESTAMP_TZ_FORMAT
HS_OPEN_CURSORS
HS_ROWID_CACHE_SIZE
HS_RPC_FETCH_REBLOCKING
HS_RPC_FETCH_SIZE
HS_TIME_ZONE
Do not use the PRIVATE
keyword when setting any of these parameters. Using the PRIVATE
keyword prevents the parameter from being uploaded to the server and can cause errors in SQL processing. None of these parameters needs to be set in the environment, so you do not need to use the SET
keyword.
See Also: Individual gateway documentation for the list of initialization parameters specific to a gateway |
When an application fetches data from a non-Oracle system using Heterogeneous Services, data is transferred:
From the non-Oracle system to the agent process.
From the agent process to Oracle Database.
From Oracle Database to the application.
Oracle optimizes all three data transfers, as illustrated in Figure 4-1.
This section contains the following topics:
Using OCI, an Oracle Precompiler, or Another Tool for Array Fetches
Controlling the Array Fetch Between Oracle Database and the Agent
Controlling the Array Fetch Between the Agent and the Non-Oracle System
You can optimize data transfers between your application and Oracle Database by using array fetches. See your application development tool documentation for information about array fetching and how to specify the amount of data to be sent and each network round-trip.
When Oracle retrieves data from a non-Oracle system, the Heterogeneous Services initialization parameter, HS_RPC_FETCH_SIZE
, defines the number of bytes sent for each fetch between the agent and Oracle Database. The agent fetches data from the non-Oracle system until one of the following occurs:
It has accumulated the specified number of bytes to send back to Oracle Database.
The last row of the result set is fetched from the non-Oracle system.
The initialization parameter, HS_FDS_FETCH_ROWS
, determines the number of rows to be retrieved from a non-Oracle system. Note that the array fetch must be supported by the agent. See your agent-specific documentation to ensure that your agent supports array fetching.
By default, an agent fetches data from the non-Oracle system until it has enough data retrieved to send back to the system. It continues until the number of bytes fetched from the non-Oracle system is equal to or higher than the value of HS_RPC_FETCH_SIZE
initialization parameter. In other words, the agent reblocks the data between the agent and Oracle Database in sizes defined by the value of the HS_RPC_FETCH_SIZE
initialization parameter.
When the non-Oracle system supports array fetches, you can immediately send the data fetched from the non-Oracle system by the array fetch to Oracle Database without waiting until the exact value of the HS_RPC_FETCH_SIZE
initialization parameter is reached. That is, you can stream the data from the non-Oracle system to Oracle Database and disable reblocking by setting the value of the HS_RPC_FETCH_REBLOCKING
initialization parameter to OFF
.
For example, assume that you set HS_RPC_FETCH_SIZE
to 64 kilobytes (KB) and HS_FDS_FETCH_ROWS
to 100 rows. Also assume that each row is approximately 600 bytes in size, so that the 100 rows are approximately 60 KB. When the HS_RPC_FETCH_REBLOCKING
initialization parameter is set to ON
, the agent starts fetching 100 rows from the non-Oracle system.
Because there is only 60 KB of data in the agent, the agent does not send the data back to Oracle Database. Instead, the agent fetches the next 100 rows from the non-Oracle system. Because there is now 120 KB of data in the agent, the first 64 KB can be sent back to Oracle Database.
Now there is 56 KB of data left in the agent. The agent fetches another 100 rows from the non-Oracle system before sending the next 64 KB of data to Oracle Database. By setting the HS_RPC_FETCH_REBLOCKING
initialization parameter to OFF
, the first 100 rows are immediately sent back to the Oracle database server.
The DBMS_HS_PARALLEL
PL/SQL package enables parallel processing for heterogeneous targets access. This package improves performance when retrieving data from a large foreign table.
DBMS_HS_PARALLEL
is compiled with an authorization ID of CURRENT_USER
, meaning it uses invoker's rights. In other words, all procedures in this package are executed with the privileges of the calling user.
For additional information about the procedures, see Oracle Database PL/SQL Packages and Types Reference.
Registration is an operation through which Oracle stores information about an agent in the data dictionary. Agents do not have to be registered. If an agent is not registered, Oracle stores information about the agent in memory instead of in the data dictionary. When a session involving an agent terminates, this information ceases to be available.
Self-registration is an operation in which a database administrator sets an initialization parameter that lets the agent automatically upload information into the data dictionary. Self-registration occurs when the HS_AUTOREGISTER
initialization parameter is set to TRUE
(default).
Note: HS_AUTOREGISTER is an Oracle initialization parameter that you set in the init.ora file; it is not a Heterogeneous Services initialization parameter that is set in the gateway initialization file. |
This section contains the following topics:
To ensure correct operation over heterogeneous database links, agent self-registration automates updates to Heterogeneous Services configuration data that describe agents on remote hosts. Agent self-registration is the default behavior. If you do not want to use the agent self-registration feature, set the HS_AUTOREGISTER
initialization parameter to FALSE
.
Both the server and the agent rely on three types of information to configure and control operation of the Heterogeneous Services connection. These three sets of information are collectively called HS configuration data:
Heterogeneous Services Configuration Data | Description |
---|---|
Heterogeneous Services initialization parameters | Provide control over various connection-specific details of operation. |
Capability definitions | Identify details like SQL language features supported by the non-Oracle data source. |
Data dictionary translations | Map references to Oracle data dictionary tables and views into equivalents specific to the non-Oracle data source. |
HS configuration data is stored in the data dictionary of the Oracle database server. Because the agent may be remote and may therefore be administered separately, several circumstances can lead to configuration mismatches between servers and agents. For example:
An agent can be newly installed on a separate computer so that the server has no Heterogeneous Services data dictionary content to represent the agent's Heterogeneous Services configuration data.
A server can be newly installed and lack the necessary Heterogeneous Services configuration data for existing agents and non-Oracle data stores.
A non-Oracle instance can be upgraded from an older version to a newer version, requiring modification of the Heterogeneous Services configuration data.
A Heterogeneous Services agent at a remote site can be upgraded to a new version or patched, requiring modification of the Heterogeneous Services configuration data.
A database administrator (DBA) at the non-Oracle site can change the agent setup, possibly for tuning or testing purposes, in a manner which affects Heterogeneous Services configuration data.
Agent self-registration permits successful operation of Heterogeneous Services in all these scenarios. Specifically, agent self-registration enhances interoperability between any Oracle database server and any Heterogeneous Services agent (if each is Version 8.0.3 or higher). The basic mechanism for this functionality is the ability to upload Heterogeneous Services configuration data from agents to servers.
Self-registration provides automatic updating of Heterogeneous Services configuration data residing in the Oracle database server data dictionary. This update ensures that the agent self-registration uploads need to be done only once, on the initial use of a previously unregistered agent. Instance information is uploaded on each connection, not stored in the server data dictionary.
The Heterogeneous Services agent self-registration feature can perform the following tasks:
Identify the agent and the non-Oracle data store to the Oracle database server
Permit agents to define Heterogeneous Services initialization parameters for use both by the agent and connected Oracle servers
Upload capability definitions and data dictionary translations, if available, from a Heterogeneous Services agent during connection initialization
Note: The upload of class information occurs only when the class is undefined in the server data dictionary. Similarly, instance information is uploaded only if the instance is undefined in the server data dictionary. |
The information required for agent self-registration is accessed in the server data dictionary by using these agent-supplied names:
FDS_CLASS
FDS_CLASS_VERSION
See Also: Section 4.10, "Using Heterogeneous Services Data Dictionary Views" to learn how to use the Heterogeneous Services data dictionary views |
FDS_CLASS
and FDS_CLASS_VERSION
are defined by Oracle or by third-party vendors for each individual Heterogeneous Services agent and version. Oracle Heterogeneous Services concatenates these names to form FDS_CLASS_NAME
, which is used as a primary key to access class information in the server data dictionary.
FDS_CLASS
should specify the type of non-Oracle data store to be accessed and FDS_CLASS_VERSION
should specify a version number for both the non-Oracle data store and the agent that connects to it. Note that when any component of an agent changes, FDS_CLASS_VERSION
must also change to uniquely identify the new release.
Note: This information is uploaded when you initialize each connection. |
Instance-Specific Information can be stored in the server data dictionary. The instance name, FDS_INST_NAME
, is configured by the database administrator (DBA) who administers the agent. How the DBA performs this configuration depends on the specific agent in use.
The Oracle database server uses FDS_INST_NAME
to look up instance-specific configuration information in its data dictionary. Oracle uses the value as a primary key for columns of the same name in these views:
FDS_INST_INIT
FDS_INST_CAPS
FDS_INST_DD
Server data dictionary accesses that use FDS_INST_NAME
also use FDS_CLASS_NAME
to uniquely identify configuration information rows. For example, if you port a database from class Sybase816 to class Sybase817, both databases can simultaneously operate with instance name SCOTT
and use separate sets of configuration information.
Unlike class information, instance information is not automatically self-registered in the server data dictionary:
If available, instance information is always uploaded by the agent. However, it is never stored in the server data dictionary. Instead, the information is kept in memory and it is only valid for that connection.
If the server data dictionary contains instance information, it represents the DBA's defined setup details which correspond to the instance configuration. Data dictionary defined instance information takes precedence over class information. However, uploaded instance information takes precedence over data dictionary defined instance information.
The HS_AUTOREGISTER
Oracle database server initialization parameter enables or disables automatic self-registration of Heterogeneous Services agents. Note that this parameter is specified in the Oracle initialization parameter file, not the agent initialization file. For example, you can set the parameter as follows:
HS_AUTOREGISTER = TRUE
When set to TRUE
, the agent uploads information describing a previously unknown agent class or a new agent version into the server's data dictionary.
Oracle recommends that you use the default value for this parameter (TRUE
), which ensures that the server's data dictionary content always correctly represents definitions of class capabilities and data dictionary translations as used in Heterogeneous Services connections.
To disable agent self-registration, set the HS_AUTOREGISTER
initialization parameter as follows:
HS_AUTOREGISTER = FALSE
Disabling agent self-registration means that agent information is not stored in the data dictionary. Consequently, the Heterogeneous Services data dictionary views are not useful sources of information. Nevertheless, the Oracle server still requires information about the class and instance of each agent. If agent self-registration is disabled, the server stores this information in local memory.
Heterogeneous Services and the gateway rewrite SQL statements when the statements need to be translated or postprocessed.
For the following examples, assume the INITCAP
function is not supported in the non-Oracle database. Consider a program that requests the following from the non-Oracle database. For example:
SELECT "COLUMN_A" FROM "test"@remote_db WHERE "COLUMN_A" = INITCAP("COLUMN_B");
The non-Oracle database does not recognize the INITCAP
function, so the Oracle database server fetches the data from the table test
in the remote database and filters the results locally. The gateway rewrites the SELECT
statement as follows:
SELECT "COLUMN_A", "COLUMN_B" FROM "test"@remote_db;
The results of the query are sent from the gateway to Oracle and are filtered by the Oracle database server.
If a string literal or bind variable is supplied in place of "COLUMN_B"
as shown in the previous example, the Heterogeneous Services component of the Oracle server would apply the INITCAP
function before sending the SQL command to the gateway. For example, if the following SQL command is issued:
SELECT "COLUMN_A" FROM "test"@remote_db WHERE "COLUMN_A" = INITCAP('jones');
The following SQL command would be sent to the gateway:
SELECT "COLUMN_A" FROM "test"@remote_db WHERE "COLUMN_A" = 'Jones';
Consider the following UPDATE
request:
UPDATE "test"@remote_db SET "COLUMN_A" = 'new_value' WHERE "COLUMN_A" = INITCAP("COLUMN_B");
In this case, the Oracle database server and the gateway cannot compensate for the lack of support at the non-Oracle side, so an error is issued.
If a string literal or bind variable is supplied in place of "COLUMN_B"
as shown in the preceding example, the Heterogeneous Services component of the Oracle server would apply the INITCAP
function before sending the SQL command to the gateway. For example, if the following SQL command is issued:
UPDATE "test"@remote_db SET "COLUMN_A" = 'new_value' WHERE "COLUMN_A" = INITCAP('jones');
The following SQL command would be sent to the gateway:
UPDATE "test"@remote_db SET "COLUMN_A" = 'new_value' WHERE "COLUMN_A" = 'Jones';
In previous releases, the preceding UPDATE
statement would have raised an error due to the lack of INITCAP
function support in the non-Oracle database.
The Oracle database has always performed data type checking and data type coercion in a homogeneous environment. For example, SELECT * FROM EMP WHERE EMPNO='7934'
would return the same result as SELECT * FROM EMPNO WHERE EMPNO=7934
. There is also full data type checking support for remote-mapped statements in a heterogeneous environment. In general, the operands in SQL statements whether its a column, literal, or bind variable would be processed internally for data type checking. Consider the following examples:
SELECT * FROM EMP@LINK WHERE NUMBER_COLUMN='123' SELECT * FROM EMP@LINK WHERE NUMBER_COLUMN=CHAR_COLUMN; SELECT * FROM EMP@LINK WHERE NUMBER_COLUMN=CHAR_BIND_VARIABLE;
Most non-Oracle databases do not support data type coercion, and the previous statements fail if they are sent to a non-Oracle database as is. The Heterogeneous Services component for the Oracle database performs data type checking and the necessary data type coercion before sending an acceptable statement to a non-Oracle database.
Data type checking provides consistent behavior on post-processed or remote-mapped statements. Consider the following two statements:
SELECT * FROM EMP@LINK WHERE TO_CHAR(EMPNO)='7933' + '1';
And:
SELECT * FROM EMP@LINK WHERE EMPNO='7933' + '1';
Both of the previous statements provide the same result and coercion regardless if the TO_CHAR
function is supported in the non-Oracle database or not. Now, consider the following statement:
SELECT * FROM EMP@LINK WHERE EMPNO='123abc' + '1';
As data type checking is enforced, the coercion attempt within Oracle generates an error and returns it without sending any statements to a non-Oracle database.
In summary, there is consistent data type checking and coercion behavior regardless of post-processed or remote-mapped statements.
You can execute user-defined functions in a remote non-Oracle database. For example:
SELECT getdeptforemp@Remote_DB(7782) FROM dual;
In this example, a SELECT
statement was issued that executes a user-defined function in the remote database that returns department information for employee 7782.
When the remote function resides in an Oracle database, the Oracle database automatically ensures that the remote function does not update any database state (such as updating rows in a database or updating the PL/SQL package state). The gateway cannot verify this when the remote function resides in a non-Oracle database. Therefore, you are responsible for ensuring that the user-defined functions do not update the state in any database. Ensuring no updates to the database is required to guarantee read consistency.
As a security measure, you must specify the functions that you want to execute remotely and their owners in the HS_CALL_NAME
parameter in the gateway-specific initialization parameter file. For example:
HS_CALL_NAME = "owner1.A1, owner2.A2 "
owner1
and owner2
are the remote function owner names. A1
and A2
are the remote function names. You do not need to specify the remote function owner in the SQL statement. By default, the remote function needs to reside in the schema that the Database Gateway connects to. If this is not the case, then you must specify the owner of the remote function in the SQL statement.
Some other examples of executing user-defined remote functions are as follows:
A remote function in a subquery
The function uses the employee_id
column data to retrieve the department_id
from the EMPLOYEES
table in the remote database. The outer query then determines all department numbers in the remote database that match the returned list.
SELECT * FROM departments@remotedb WHERE department_id IN (SELECT getdeptforemp@remotedb (employee_id) FROM employees@remotedb);
Applying a local function to the result of a user-defined remote function
This query returns the maximum salary of all employees on the remote database.
SELECT max (getsalforemp@remotedb (employee_id)) FROM employees@remotedb;
A DML statement
The statement uses the output from a user-defined query in the remote database to update the salary column with new salary information.
UPDDATE employee_history SET salary = emp_changed_salary@remote_db;
In these examples, the Oracle database passes the function name and owner to the Database Gateway. The user-defined function is executed on the remote database.
You can provide complete data location transparency and network transparency by using the synonym feature of the Oracle database server. When a synonym is defined, you do not have to know the underlying table or network protocol. A synonym can be public, which means that all Oracle users can refer to the synonym. A synonym can also be defined as private, which means every Oracle user must have a synonym defined to access the non-Oracle table.
The following statement creates a systemwide synonym for the emp
table in the schema of user ORACLE
in the Sybase database:
CREATE PUBLIC SYNONYM emp FOR "ORACLE"."EMP"@SYBS;
Note: Modify these examples for your environment. Do not try to execute them as they are written. |
The following statement joins data between the Oracle database server, an IBM DB2 database, and a Sybase database:
SELECT O.CUSTNAME, P.PROJNO, E.ENAME, SUM(E.RATE*P."HOURS") FROM ORDERS@DB2 O, EMP@ORACLE9 E, "PROJECTS"@SYBS P WHERE O.PROJNO = P."PROJNO" AND P."EMPNO" = E.EMPNO GROUP BY O.CUSTNAME, P."PROJNO", E.ENAME;
Through a combination of views and synonyms, using the following SQL statements, the process of distributed queries is transparent:
CREATE SYNONYM ORDERS FOR ORDERS@DB2; CREATE SYNONYM PROJECTS FOR "PROJECTS"@SYBS; CREATE VIEW DETAILS (CUSTNAME,PROJNO,ENAME,SPEND) AS SELECT O.CUSTNAME, P."PROJNO", E.ENAME, SUM(E.RATE*P."HOURS") SPEND FROM ORDERS O, EMP E, PROJECTS P WHERE O.PROJNO = P."PROJNO" AND P."EMPNO" = E.EMPNO GROUP BY O.CUSTNAME, P."PROJNO", E.ENAME;
Use the following SQL statement to retrieve information from the data stores in one statement:
SELECT * FROM DETAILS;
The statement retrieves the following table:
CUSTNAME PROJNO ENAME SPEND -------- ------ ----- ----- ABC Co. 1 Jones 400 ABC Co. 1 Smith 180 XYZ Inc. 2 Jones 400 XYZ Inc. 2 Smith 180
Heterogeneous Services supports callback links. This enables SQL statements like the following to be executed:
INSERT INTO table_name@dblink SELECT column_list FROM table_name;
Even though Heterogeneous Services supports the callback functionality, not all gateways have implemented it. If the gateway that you are using has not implemented this functionality, the preceding INSERT
statement returns the following error message:
ORA-02025: All tables in the SQL statement must be at the remote database
See Also: Your gateway documentation for information about support for callback links |
For gateways that do not support callback links, you can use the SQL*Plus COPY
command. The syntax is as follows:
COPY FROM username/password@db_name
-
INSERT destination_table -
USING query;
The following example selects all rows from the local Oracle emp
table, inserts them into the emp
table on the non-Oracle database, and commits the transaction:
COPY FROM SCOTT/TIGER@inst1 - INSERT EMP@remote_db - USING SELECT * FROM EMP;
TheCOPY
command supports theAPPEND
,CREATE
,INSERT
, andREPLACE
options. However,INSERT
is the only option supported when copying to non-Oracle databases. The SQL*PlusCOPY
command does not support copying to tables with lowercase table names. Use the following PL/SQL syntax with lowercase table names: DECLARE v1 oracle_table.column1%TYPE; v2 oracle_table.column2%TYPE; v3 oracle_table.column3%TYPE; . . . CURSOR cursor_name IS SELECT * FROM oracle_table; BEGIN OPEN cursor_name; LOOP FETCH cursor_name INTO v1, v2, v3, ... ; EXIT WHEN cursor_name%NOTFOUND; INSERT INTO destination_table VALUES (v1, v2, v3, ...); END LOOP; CLOSE cursor_name; END;
The CREATE TABLE
statement lets you copy data from a non-Oracle database to the Oracle database. To create a table on the local database and insert rows from the non-Oracle table, use the following syntax:
CREATE TABLE table_name AS query;
The following example creates the table emp
in the local Oracle database and inserts the rows from the EMP
table of the non-Oracle database:
CREATE TABLE table1 AS SELECT * FROM "EMP"@remote_db;
Alternatively, you can use the SQL*PlusCOPY
command to copy data from the non-Oracle database to the Oracle database server.
You can use the Heterogeneous Services data dictionary views to access information about Heterogeneous Services. This section addresses the following topics:
The Heterogeneous Services data dictionary views, whose names all begin with the HS_
prefix, can be divided into the following categories:
Most of the data dictionary views are defined for both classes and instances. For most types of data there is a *_CLASS
view and a *_INST
view. See Table 4-1 for additional details.
Table 4-1 Data Dictionary Views for Heterogeneous Services
View | Type | Identifies |
---|---|---|
SQL service |
All capabilities supported by Heterogeneous Services | |
SQL service |
All data dictionary translation table names supported by Heterogeneous Services | |
Transaction service, SQL service |
Capabilities for each class | |
SQL service |
Data dictionary translations for each class | |
General |
Initialization parameters for each class | |
General |
Classes accessible from the Oracle server | |
General |
Instances accessible from the Oracle server | |
Transaction service, SQL service |
Capabilities for each instance (if set up by the DBA) | |
SQL service |
Data dictionary translations for each class (if set up by the DBA) | |
General |
Initialization parameters for each instance (if set up by the DBA) | |
Data dictionary view to keep track of internal objects created with bulk load procedures. |
Like all Oracle data dictionary tables, these views are read-only. Do not change the content of any of the underlying tables.
The values used for data dictionary content in any particular connection on a Heterogeneous Services database link can come from any of the following sources, in order of precedence:
Instance information uploaded by the connected Heterogeneous Services agent at the start of the session. This information overrides corresponding content in the Oracle data dictionary, but is never stored into the Oracle data dictionary.
Instance information stored in the Oracle data dictionary. This data overrides any corresponding content for the connected class.
Class information stored in the Oracle data dictionary.
If the Oracle database server runs with the HS_AUTOREGISTER
server initialization parameter set to FALSE
, then information is not stored automatically in the Oracle data dictionary. The equivalent data is uploaded by the Heterogeneous Services agent on a connection-specific basis each time a connection is made, with any instance-specific information taking precedence over class information.
Note: It is not possible to determine positively what capabilities and what data dictionary translations are in use for a given session due to the possibility that an agent can upload instance information. |
You can determine the values of Heterogeneous Services initialization parameters by querying the VALUE
column of the V$HS_PARAMETER
view. Note that the VALUE
column of V$HS_PARAMETER
truncates the actual initialization parameter value from a maximum of 255 characters to a maximum of 64 characters. It truncates the parameter name from a maximum of 64 characters to a maximum of 30 characters.
The views that are common for all services are as follows:
View | Contains |
---|---|
HS_FDS_CLASS | Names of the classes that are uploaded into the Oracle data dictionary |
HS_FDS_INST | Names of the instances that are uploaded into the Oracle data dictionary |
HS_CLASS_INIT | Information about the Heterogeneous Services initialization parameters |
For example, you can access multiple Sybase gateways from an Oracle database server. After accessing the gateways for the first time, the information uploaded into the Oracle database server could appear as follows:
SQL> SELECT * FROM HS_FDS_CLASS; FDS_CLASS_NAME FDS_CLASS_COMMENTS FDS_CLASS_ID --------------------- ------------------------------ ------------ Sybase816 Uses Sybase driver, R1.1 1 Sybase817 Uses Sybase driver, R1.2 21
Two classes are uploaded: a class that accesses Sybase816 and a class that accesses Sybase817. The data dictionary in the Oracle database server now contains capability information, SQL translations, and data dictionary translations for both Sybase816 and Sybase817.
The Oracle database server data dictionary also contains instance information in the HS_FDS_INST
view for each non-Oracle system instance that is accessed.
When a non-Oracle system is involved in a distributed transaction, the transaction capabilities of the non-Oracle system and the agent control whether it can participate in distributed transactions. Transaction capabilities are stored in the HS_CLASS_CAPS
tables.
The ability of the non-Oracle system and agent to support two-phase commit protocols is specified by the 2PC type capability, which can specify one of the types shown in the following table.
Type | Capability |
---|---|
Read-Only (RO) | The non-Oracle system can be queried only with SQL SELECT statements. Procedure calls are not allowed because procedure calls are assumed to write data. |
Single-Site (SS) | The non-Oracle system can handle remote transactions but not distributed transactions. That is, it cannot participate in the two-phase commit protocol. |
Commit Confirm (CC) | The non-Oracle system can participate in distributed transactions. It can participate in the server's two-phase commit protocol but only as the commit point site. That is, it cannot prepare data, but it can remember the outcome of a particular transaction if asked by the global coordinator. |
Two-Phase Commit (2PC) | The non-Oracle system can participate in distributed transactions. It can participate in the server's two-phase commit protocol, as a regular two-phase commit node, but not as a commit point site. That is, it can prepare data, but it cannot remember the outcome of a particular transaction if asked to by the global coordinator. |
Two-Phase Commit Confirm (2PCC) | The non-Oracle system can participate in distributed transactions. It can participate in the server's two-phase commit protocol as a regular two-phase commit node or as the commit point site. That is, it can prepare data and it can remember the outcome of a particular transaction if asked by the global coordinator. |
The transaction model supported by the driver and non-Oracle system can be queried from the HS_CLASS_CAPS
Heterogeneous Services data dictionary view.
The following example shows one of the capabilities is of the 2PC type:
SELECT cap_description, translation FROM hs_class_caps WHERE cap_description LIKE '2PC%' AND fds_class_name LIKE 'SYBASE%'; CAP_DESCRIPTION TRANSLATION ---------------------------------------- ----------- 2PC type (RO-SS-CC-PREP/2P-2PCC) CC
When the non-Oracle system and agent support distributed transactions, the non-Oracle system is treated like any other Oracle server. When a failure occurs during the two-phase commit protocol, the transaction is recovered automatically. If the failure persists, the in-doubt transaction may need to be manually overridden by the database administrator.
Data dictionary views that are specific for the SQL service contain information about:
SQL capabilities and SQL translations of the non-Oracle data source
Data dictionary translations to map Oracle data dictionary views to the data dictionary of the non-Oracle system
Note: This section describes only a portion of the SQL Service-related capabilities. Because you should never need to alter these settings for administrative purposes, these capabilities are not discussed here. |
The HS_*_CAPS
data dictionary tables contain information about the SQL capabilities of the non-Oracle data source and required SQL translations. These views specify whether the non-Oracle data store or the Oracle database server implements certain SQL language features. If a capability is turned off, then Oracle does not send any SQL statements to the non-Oracle data source that require this particular capability, but it still performs postprocessing.
In order to make the non-Oracle system appear similar to an Oracle database server, Heterogeneous Services connections map a limited set of Oracle data dictionary views onto the non-Oracle system's data dictionary. This mapping permits applications to issue queries as if these views belonged to an Oracle data dictionary. Data dictionary translations make this access possible. These translations are stored in Heterogeneous Services views whose names have the _DD
suffix.
For example, the following SELECT
statement transforms into a Sybase query that retrieves information about emp
tables from the Sybase data dictionary table:
Data dictionary tables can be mimicked instead of translated. If a data dictionary translation is not possible because the non-Oracle data source does not have the required information in its data dictionary, then Heterogeneous Services causes it to appear as if the data dictionary table is available, but the table contains no information.
To retrieve information about which Oracle data dictionary views or tables are translated or mimicked for the non-Oracle system, connect as user SYS
and issue the following query on the HS_CLASS_DD
view:
SELECT DD_TABLE_NAME, TRANSLATION_TYPE FROM HS_CLASS_DD WHERE FDS_CLASS_NAME LIKE 'SYBASE%'; DD_TABLE_NAME T ----------------------------- - ALL_ARGUMENTS M ALL_CATALOG T ALL_CLUSTERS T ALL_CLUSTER_HASH_EXPRESSIONS M ALL_COLL_TYPES M ALL_COL_COMMENTS T ALL_COL_PRIVS M ALL_COL_PRIVS_MADE M ALL_COL_PRIVS_RECD M ...
The T
translation type specifies that a translation exists. When the translation type is M
, the data dictionary table is mimicked.
The Oracle database server stores information about agents, sessions, and parameters. You can use the dynamic performance views to access this information. This section contains the following topics:
Determining Which Agents Are Running on a Host: V$HS_AGENT View
Determining the Open Heterogeneous Services Sessions: V$HS_SESSION View
Determining the Heterogeneous Services Parameters: V$HS_PARAMETER View
The V$HS_AGENT
view identifies the set of Heterogeneous Services agents currently operating on a specified host. Table 4-2 shows the most relevant columns. For a description of all the columns in the view, see Oracle Database Reference.
Table 4-2 Important Columns in the V$HS_AGENT View
Column | Description |
---|---|
|
Oracle Net session identifier used for connections to agent ( |
|
Operating system machine name |
|
Program name of agent |
|
Type of agent |
|
The ID of the foreign data store class |
|
The instance name of the foreign data store |
The V$HS_SESSION
view shows the sessions for each agent and specifies the database link that is used. Table 4-3 shows the most relevant columns. For a description of all the columns in the view, see Oracle Database Reference.
Table 4-3 Important Columns in the V$HS_SESSION View
Column | Description |
---|---|
|
Unique Heterogeneous Services session identifier |
|
Oracle Net session identifier used for connections to agent ( |
|
Server database link name used to access the agent |
|
Owner of the database link in |
The V$HS_PARAMETER
view lists the Heterogeneous Services parameters and their values that are registered in the Oracle database server. Table 4-4 shows the most relevant columns. For a description of all the columns in the view, see Oracle Database Reference.
Table 4-4 Important Columns in the V$HS_SESSION View
Column | Description |
---|---|
|
Unique Heterogeneous Services session identifier |
|
The name of the Heterogeneous Services parameter |
|
The value of the Heterogeneous Services parameter |
Information about the database link that was used for establishing the distributed connection, the startup time, and the set of initialization parameters used for the session is also available. All of the runtime information is derived from dynamically updated tables.
This guide describes Oracle's approach for information integration in a heterogeneous environment. Specifically, it describes Oracle Database gateways.
This preface contains these topics:
Documentation Accessibility
This guide is intended for the following users:
Database administrators who want to manage distributed database systems that involve Oracle to non-Oracle database links
Application developers who want to use the heterogeneous connectivity functionality in Oracle database
Readers who want a high-level understanding of Oracle's architecture for heterogeneous connectivity and how it works
To use this guide, you must be familiar with relational database concepts and basic database or applications administration. You must be familiar with the operating system environment under which database administrators are running Oracle software.
Our goal is to make Oracle products, services, and supporting documentation accessible to all users, including users that are disabled. To that end, our documentation includes features that make information available to users of assistive technology. This documentation is available in HTML format, and contains markup to facilitate access by the disabled community. Accessibility standards will continue to evolve over time, and Oracle is actively engaged with other market-leading technology vendors to address technical obstacles so that our documentation can be accessible to all of our customers. For more information, visit the Oracle Accessibility Program Web site at http://www.oracle.com/accessibility/
.
Accessibility of Code Examples in Documentation
Screen readers may not always correctly read the code examples in this document. The conventions for writing code require that closing braces should appear on an otherwise empty line; however, some screen readers may not always read a line of text that consists solely of a bracket or brace.
Accessibility of Links to External Web Sites in Documentation
This documentation may contain links to Web sites of other companies or organizations that Oracle does not own or control. Oracle neither evaluates nor makes any representations regarding the accessibility of these Web sites.
Deaf/Hard of Hearing Access to Oracle Support Services
To reach Oracle Support Services, use a telecommunications relay service (TRS) to call Oracle Support at 1.800.223.1711. An Oracle Support Services engineer will handle technical issues and provide customer support according to the Oracle service request process. Information about TRS is available at http://www.fcc.gov/cgb/consumerfacts/trs.html
, and a list of phone numbers is available at http://www.fcc.gov/cgb/dro/trsphonebk.html
.
For more information, see the following:
Many of the examples in this guide use the sample schemas, which are installed by default when you select the Basic Installation option with an Oracle Database installation. See Oracle Database Sample Schemas for information about how these schemas were created and how to use them.
The following text conventions are used in this document:
Convention | Meaning |
---|---|
boldface | Boldface type indicates graphical user interface elements associated with an action, or terms defined in text or the glossary. |
italic | Italic type indicates book titles, emphasis, or placeholder variables for which you supply particular values. |
monospace | Monospace type indicates commands within a paragraph, URLs, code in examples, text that appears on the screen, or text that you enter. |