Oracle7 Administrator's Reference for UNIX

Contents Index Home Previous Next

Oracle SPX/IPX Protocol Adapter

SPX Protocol

Sequenced Packet Exchange (SPX) is a high-performance protocol that is functionally equivalent to the OSI transport layer. It is a connection-oriented communication protocol that establishes a peer-to-peer connection between the source and destination, before transferring a network request and subsequent data packets. SPX guarantees network delivery, packet sequence, and correction of errors.

IPX Protocol

Internet Packet Exchange (IPX) is a connectionless (datagram) protocol functionally equivalent to the OSI network layer. It does not establish connections between the source and destination of network requests. Data packets are addressed and sent, but the sender receives no guarantee that data will be successfully delivered or correctly sequenced.

Using the Oracle SPX/IPX Protocol Adapter

The Oracle SPX/IPX Protocol Adapter provides a transparent two-task communication interface between the Oracle database, (running on the Oracle Server), and its applications, running on DOS, UNIX, OS/2 clients, and/or Netware OS.

SPX and IPX are specifically designed for PC LAN environments. SPX ensures that the data is reliably delivered to the correct user or process on the host machine. IPX routes the data to the appropriate host machine. The application layer protocol that provides access to these network protocols is referred to as the SPX/IPX Protocol Adapter.

Specifying the SPX/IPX ADDRESS

The Oracle SPX/IPX Protocol Adapter allows TNS and its applications and services to communicate over the SPX/IPX communications protocol. The SPX/IPX Protocol Adapter implements a standard interface to resolve the equivalent communication functions of the SPX/IPX protocol and TNS.

After the SPX/IPX protocol and Oracle SPX/IPX Protocol Adapter are installed on your system, you can use the SPX/IPX parameters with the TNS connect descriptors to identify SPX/IPX community nodes.

The SPX/IPX Protocol Adapter parameters are part of the ADDRESS keyword-value pairs. The name of the SPX/IPX community and the three SPX/IPX parameters can be entered in any order. The syntax for the SPX/IPX Protocol Adapter connection is:

(ADDRESS=
   [(COMMUNITY=community_name)]
   (PROTOCOL=protocol)
   (SERVICE=servicename)
)

where:

community_name is the optional community name to be used with MPI. The community name should be unique on the network.
protocol is the adapter name. For SPX/IPX, the value is spx.
servicename is a unique name (up to 30 characters) identifying an application on the network. The service is named during startup and is available to the entire network. Client references to the service are made using lookup in the bindery.

Example:

The following is an example of an SPX/IPX ADDRESS specifying service MAILDB1 on a remote server, in the PCLAN.SALES.ACME community:

(ADDRESS=
   (COMMUNITY=PCLAN.SALES.ACME)
   (PROTOCOL=SPX)
   (SERVICE=MAILDB1)
)

This ADDRESS is commonly part of a larger construct such as a connect descriptor or configuration file.

The ntisbsdm Broadcast Daemon

A client uses a name and translates the name into an SPX address to identify a server and communicate with it. The netware bindery is a directory service that provides the translation mechanism. When a server is registered with the bindery, it periodically notifies the bindery of its address. This is done using the Server Advertising Protocol (SAP).

The server broadcasts a SAP packet in an IPX datagram every 60 seconds. This SAP packet contains all relevant addressing information. Any client can then query its nearest server for the address of the required server.

The Oracle SPX/IPX Protocol Adapter broadcasts using the ntisbsdm broadcast daemon in $ORACLE_HOME/bin. The ntspxctl utility starts and stops ntisbsdm.

The ntspxctl Utility

The ntspxctl utility contains functions to register and remove names, and to query a bindery. It can also be used to stop and start the broadcast daemon. (The listener automatically uses the daemon to auto-register service names in use.)

The ntspxctl utility reads commands from the command line. If parameters are missing, it prompts for them.

Examples:

To start ntspxctl, enter:

$ ntspxctl

Output similar to the following is displayed:

ntspxctl: Version 2.0.12.1 - Beta on
Fri Jul 3 11:43:50 1992

To start the broadcast daemon, enter:

ntspxctl> startup

Output similar to the following is displayed:

ntisbsdm started at Fri Jul 3 11:43:47 1992

A system message is displayed if the daemon has already been started.

The broadcast daemon should always be running to avoid starting it every time you restart a machine. For example, to start the ntisbsdm daemon on /etc/inittab on system startup, enter:

ntspxctl:2:once:/u/oracle/bin/ntisbsdm &

where /u/oracle/bin is the full path to $ORACLE_HOME.

To register a name for testing, enter register and the name. Following is an example for the name YYY:

ntspxctl> register YYY

This creates a socket owned by ntisbsdm, and registers it.

A message similar to the following is displayed:

Name YYY successfully registered
YYY address 00eee045:000000000001:4454

To check the status of ntisbsdm, enter:

ntspxctl>status

A message similar to the following is displayed:

ntisbsdm started at Fri Jul 3 11:43:47 1992
Tracing is off
Pid: 14784 YYY

A shorter status can be obtained by entering:

ntspxctl>summary

A message similar to the following is displayed:

ntisbsdm started at Fri Jul 3 11:43:47 1992
Tracing is off
1 names are registered

The getname Command

The getname command asks the Novell system for names; it does not involve the broadcast daemon. Enter:

getname name servicetype

A message similar to the following is displayed:

getname name servicetype (address number_of_hops)

where:

name is the name you entered
servicetype is a number assigned by Novell. Oracle has the number 103.
address is the address of the name you entered.
number_of_hops is the number of hops to the destination, displayed in hexadecimal. The value 10 means the name is deregistered. If SAP queries are not supported, the value is 0000.
To see all possible names, enter:

getname * *

Examples:

Following are examples of the information getname returns:

ntspxctl> getname YYY *
YYY  servertype x0103 address 00eee045:000000000001:
    4465 hops 0000
ntspxctl> getname * 103
LSNR servertype x0103 address 00eee053:000000000001:
    502c hops 0000
IBM6 servertype x0103 address 00eee058:000000000001:
    507f hops 0000
DESK servertype x0004 address 00eee055:000000000001:
    5451 hops 0000
DESK servertype x0107 address 00eee055:000000000001:
    5104 hops 0000
CXY4 servertype x009e address 00eee055:000000000001:
    5063 hops 0000
IBM2 servertype x0004 address 00eee057:000000000001:
    5451 hops 0000

To stop ntisbsdm, enter:

ntspxctl> shutdown

The daemon will not be stopped if names are still registered. A message similar to the following is displayed:

1 names are registered
ntisbsdm not stopped

To remove a name, enter remove and the name. Following is an example for the name YYY:

ntspxctl> remove YYY

A message similar to the following is displayed:

Name xxx removed.
ntspxctl>shutdown
ntisbsdm stopped

To force a stop, enter:

ntspxctl> shutdown force

A message similar to the following is displayed:

ntisbsdm stopped

Summary of Commands

The help command gives the following summary of commands:

register name Register entry.
remove name Remove entry.
shutdown [force] Shut down ntisbsdm.
startup Get status summary.
traceon Activate trace.
traceoff Deactivate trace.
status Get full status.
getname name|* hex_number|* Query name services.
exit Exit program.
help [command] Print command information.
! Shell escape.

MTS Configuration

Following is an example of an initsid.ora MTS dispatcher configuration:

mts_dispatchers = "spx,1"  # run one SPX dispatcher
mts_max_dispatchers = 10   # max no of dispatchers
mts_service = ORA7         # dispatcher service name
                           # (=ORACLE_SID)
mts_servers = 1            # min no of shared servers
mts_max_servers = 10       # max no of shared servers
mts_listener_address = "(ADDRESS=(PROTOCOL=spx)
                        (SERVICE=SPXSVC))"


Contents Index Home Previous Next