SharePlex 9.2.5 Admin Guide
SharePlex 9.2.5 Admin Guide
SharePlex® 9.2.5
Admininstrator Guide
© 2019 Quest Software Inc. ALL RIGHTS RESERVED.
This guide contains proprietary information protected by copyright. The software described in this guide is furnished under a
software license or nondisclosure agreement. This software may be used or copied only in accordance with the terms of the
applicable agreement. No part of this guide may be reproduced or transmitted in any form or by any means, electronic or
mechanical, including photocopying and recording for any purpose other than the purchaser’s personal use without the written
permission of Quest Software Inc.
The information in this document is provided in connection with Quest Software products. No license, express or implied, by estoppel
or otherwise, to any intellectual property right is granted by this document or in connection with the sale of Quest Software products.
EXCEPT AS SET FORTH IN THE TERMS AND CONDITIONS AS SPECIFIED IN THE LICENSE AGREEMENT FOR THIS
PRODUCT, QUEST SOFTWARE ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR
STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL
QUEST SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL
DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, BUSINESS INTERRUPTION OR
LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF QUEST
SOFTWARE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Quest Software makes no representations or
warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to
specifications and product descriptions at any time without notice. Quest Software does not make any commitment to update the
information contained in this document.
If you have any questions regarding your potential use of this material, contact:
Quest Software Inc.
Attn: LEGAL Dept
4 Polaris Way
Aliso Viejo, CA 92656
Refer to our Web site (https://www.quest.com) for regional and international office information.
Patents
Quest Software is proud of our advanced technology. Patents and pending patents may apply to this product. F or the most current
information about applicable patents for this product, please visit our website at https://www.quest.com/legal.
Trademarks
Quest, the Quest logo, SharePlex, and Join the Innovation are trademarks and registered trademarks of Quest Software Inc. For a
complete list of Quest marks, visit https://www.quest.com/legal/trademark-information.aspx. A
ll other trademarks and registered
trademarks are property of their respective owners.
SharePlex Admininstrator Guide
Updated - 08/19/2019
Version - 9.2.5
About us 18
Contacting Quest 18
Technical support resources 18
Overview of SharePlex 20
The advantages of SharePlex 20
About source and target data 23
About the SharePlex architecture 23
SharePlex Directories 23
The sp_cop process 25
The sp_ctrl process 25
SharePlex replication processes 25
SharePlex queues 27
SharePlex Installed Objects 27
How SharePlex replication works 29
Understand the concept of synchronization 30
Characteristics of synchronized tables 30
Hidden out-of-sync conditions 31
How SharePlex responds to an out-of-sync condition 32
Strategies for information availability 32
Reporting instances 33
Broadcast and cascade 34
Data warehousing 34
High availability and disaster recovery 34
Peer-to peer 34
Test before you deploy 34
Run SharePlex 36
Run SharePlex on Unix and Linux 36
Startup sequence on Unix and Linux 37
Start SharePlex on Unix and Linux 37
Identify SharePlex processes on Unix and Linux 38
Stop SharePlex on Unix and Linux 38
Shutdown Considerations on Unix and Linux 39
Run SharePlex on Windows 39
l Operating SharePlex
l Planning your replication strategy
l Preparing the environment for replication
l Configuring replication
l Starting replication
l Monitoring, tuning, and troubleshooting replication
l Failover/failback in a high-availability environment
l Performing administrative operations on replication systems
The following typographic conventions are used in this guide.
l Bold represents required components of a command or option that must be typed as shown.
l Italics represent variables defined, named or entered by the user.
l {Braces} enclose required arguments.
l [Brackets] represent optional command components and may also be used in example command strings
to emphasize required user defined variables in long strings.
Example:
reconcile queue {queuename} for {datasource-datadest} [on host]
l A vertical bar, or “pipe” character, ( | ) within brackets or braces indicates that you can use only one of the
enclosed components.
Example:
abort service {service | all}
Names of commands, programs, directories and files are expressed in Bold.
Other names are expressed in capital letters using the default font.
Examples:
The sp_ctrl program is located in the bin directory.
Open the oramsglst file.
Find the value for ORACLE_HOME.
Click Apply.
System displays, such as prompts and command output, are expressed in a monofaced (fixed-space) font.
Examples:
sp_ctrl(sysA)>
User is a viewer (level=3)
Windows menu items, dialog boxes, and options within dialog boxes are expressed in Bold.
Example:
From the File menu, select Print.
System names are expressed generically or fictitiously. When necessary, the source system (or primary system)
is referred to as SysA. Target systems (or secondary systems) are referred to as SysB, SysC, SysD, and so forth.
Contacting Quest
For sales or other inquiries, visit www.quest.com/contact.
l Submit and manage a Service Request
l View Knowledge Base articles
l Sign up for product notifications
l Download software and technical documentation
l View how-to-videos
Overview of SharePlex
SharePlex provides high-speed replication that supports a variety of topology configurations in heterogeneous
database environments. This chapter provides an overview of how SharePlex replication works. It explains
concepts surrounding SharePlex replication and provides an overview of SharePlex capabilities.
For more information about the platforms and databases that SharePlex supports, see the SharePlex
Release Notes.
Contents
The advantages of SharePlex
About source and target data
About the SharePlex architecture
SharePlex Directories
The sp_cop process
The sp_ctrl process
SharePlex replication processes
SharePlex queues
SharePlex Installed Objects
How SharePlex replication works
Understand the concept of synchronization
Characteristics of synchronized tables
Hidden out-of-sync conditions
How SharePlex responds to an out-of-sync condition
Strategies for information availability
Test before you deploy
SharePlex is designed for the nonstop replication of enterprise volumes of data. It is capable of replicating
millions of transactions a day for thousands of tables and other objects. It supports business varieties of data,
including large object types and National Language Character Set types, as well as Oracle XML and user-
defined types.
You have full control over which data is replicated, and to where. Through column partitioning, you can replicate
a subset of the columns of a table beyond a firewall, while protecting other, more sensitive data. Through row
partitioning, you can replicate different records to different locations, or prevent the replication of certain records
altogether. You can configure SharePlex to interact with PL/SQL procedures that transform data before, or
instead of, posting it to a target database.
With SharePlex, your enterprise can ensure high availability, migrate data from one platform to another, and
integrate data among many different datastores at once — whether locally, remote, or in the cloud. SharePlex
not only supports standard query-driven replication targets, such as those for reporting, analytics and data
warehousing, but it can also deliver the data to messaging systems and provide data in file or XML format for
input to other enterprise solutions.
SharePlex supports capture from and replication to many of today's popular datastores:
l Capture from Oracle (including Exadata) and SQL Server databases, replicating to Oracle and SQL
Server target databases, including those hosted by Amazon, Microsoft, and Oracle Cloud and Paas
cloud environments.
l Replication from Oracle sources to many popular ODBC-compliant databases, such as Microsoft SQL
Server, SAP Adaptive Server Enterprise (ASE), SAP HANA, EDB Postgres Advanced Server, other
PostgreSQL implementations, Oracle MySQL and Teradata. SharePlex supports replication to several
of these databases in both Amazon EC2 and RDS cloud services as well as Microsoft Azure
Marketplace.
l Oracle databases to targets other than relational database systems, such as flat files (SQL and XML
format), JMS, and Apache Kafka (XML and JSON).
l SQL Server to SQL Server or Oracle targets.
l Oracle or SQL Server to an Oracle change-history target, where each change to the source data is
replicated as a new row in the target, leaving the previous state of the target intact and providing a
history of every change that was made to the source data.
SharePlex replicates to many different targets at the same time, requiring only one configuration file to provide
the routing instructions for them all.
Everything required for data replication is provided "out of the box" with SharePlex, without the need to buy any
add-ons or management packs. This includes the SharePlex Manager monitoring GUI software, and a compare-
repair utility for detecting and repairing out-of-sync data.
The installation of SharePlex is fast and straightforward, and it includes utilities that help you configure
connections to a database. Complex replication scenarios, such as active-active or a multi-step cascading
scenario, may require more time, but overall SharePlex is driven primarily from a single configuration file on
each source system. This file supplies most of the needed replication instructions: table lists, special handling
such as column mapping or partitioning, and data routing. A relatively small set of commands and files supplies
the rest of the input for setup and control.
When you have SharePlex, you have both replication and data compare-repair software all in the same
package. You pay no extra. You can run the SharePlex Compare and Repair features on a regular basis to
ensure the consistency of source and target data. Run Compare to detect hidden out-of-sync conditions, and
run Repair to repair the target rows to restore synchronization. SharePlex detects extra or missing rows and
rows where the values do not match. By repairing mismatches at the row level on a regular basis, you can avoid
larger problems that may require full data resynchronization. You can customize your comparisons, for example
to filter the rows that are compared. These features work without stopping user activity or replication processing.
In an Oracle environment, SharePlex supports reliable high availability configurations where replication
maintains a duplicate database in a different location that is ready for fast, seamless failover and failback in
planned or unplanned mode. If the primary system fails, transaction activity moves to the secondary system and
continues while the secondary instance is copied to the primary system during recovery. SharePlex reconciles
the copy with the replicated transactions from the secondary system, then discards operations that were already
applied by the copy. After SharePlex restores synchronization of the data, transaction activity can move back to
the primary system.
SharePlex also supports reliable replication recovery in deployments where the source and target are mirrored,
such as with disk mirroring or Oracle Data Guard. SharePlex quickly recovers replication whether the source
fails, the target fails, or both fail.
SharePlex performs replication without significantly impacting the source database, the source system, or the
network. SharePlex reads either the Oracle redo logs or the transaction stream provided by the SQL Server
replication API. Because SharePlex replicates changes as they occur, rather than on a refresh schedule, it
reduces the impact of replication on the network and does not cause spikes in network performance. This
design also minimizes latency between source and target systems. Removing non-transactional data use from
the production server improves the performance of the production database while enabling target databases to
be optimized for the needs of their users.
SharePlex is fast, minimizing the latency between source and target databases by capturing changes to
configured objects continuously. SharePlex maintains read consistency, maintaining operation order and
session context all the way to the target. SharePlex uses standard SQL to apply replicated changes to the
target database.
SharePlex continuously reads the transaction stream and sends the appropriate data to the target as quickly as
possible, even before it receives a commit record. In the case of Oracle, if a transaction is canceled, SharePlex
simply replicates the rollback so that the target remains an accurate representation of the source. In the case of
SQL Server data, because only committed transactions are received from the SQL Server replication API, there
is no concern for possible rollbacks.
SharePlex tolerates outages regardless of where they occur. If the target system is down, or if there are network
problems, SharePlex stores the data on the source system until operations and connections are restored. If the
target system is running but the target database or receiving software itself is down, SharePlex queues the
captured data on the target system until the target is available again.
You have control over when SharePlex sends the data to the target. By default, SharePlex sends a steady
stream of data to the target systems, but you can delay transmission by stopping the Export process. You can
delay the posting of data to a target by stopping or delaying the Post process.
Hardware migrations usually require a significant amount of downtime, whether you need to change hardware
platforms, move a data center, or consolidate servers to reduce costs. By maintaining a near-realtime copy of
the database, SharePlex can help you minimize migration downtime by enabling the original system to function
normally until the migration is complete.
l The source data is the primary data that is to be replicated. This data resides on the source system.
l The target data is a full or subset copy of the primary data. This data resides on the target system.
The object of replication is to keep the source and target data synchronized, or in-sync, which means that the
state of the source data is reflected accurately by the target data, adjusting for any transformation that is
performed and for any time lag in the replication stream.
The target data can take the form of any of the SharePlex-supported target types: tables in a database,
messages in a messaging queue or topic, or XML or SQL records in a file that can be consumed by other
software programs.
SharePlex Directories
SharePlex uses two main directories:
The product directory: This is the SharePlex installation directory, where the SharePlex programs and libraries
are stored.
Sub- Contents
directory
BACKUP Uninstall information
bin SharePlex executable files
config Internally used content.
data Default parameter settings
doc Catalog of exception messages
install (Unix and Linux only) Scripts related to installation, licensing and upgrades
lib SharePlex shared libraries
log SharePlex log files
mks_oe Runtime installation files for third-party software used by SharePlex.
util SharePlex utilities
.app- (Unix and Linux only) Hidden internal directory that contains raw executables. Do not use the
modules contents of this directory to launch processes.
.meta-inf (Unix and Linux only) Hidden internal directory that contains meta information used during the
installation process.
Sub- Contents
directory
config Configuration files for this installation of SharePlex.
data Status Database, configuration activation information, user-defined parameter settings, and other
user-defined files that direct replication activities.
db Configuration internal database for each activation of a configuration file.
downgrd Information about SharePlex targets that are a lower version than the source.
dump Core files (if a process fails)
log SharePlex log files
rim Queue files (working data files)
save Information about active and inactive configurations.
state Information about the current state of SharePlex when a configuration is active, such as the object
and sequence caches.
temp Used by the copy and append features and other SharePlex sync-related processes.
oos Stores the transactions that contain out-of-sync operations when the SP_OPO_SAVE_OOS_
TRANSACTION parameter is enabled.
l Only a SharePlex Administrator (member of the SharePlex admin group) can start or stop sp_cop.
l sp_cop must be started on all source and target systems involved in replication.
l Start sp_cop as soon as (or before) applications access the data on the source system, so that all of the
SharePlex processes are ready to start processing transactions. That way, Capture can keep pace with
the changes that are made to the source data.
All communication and movement of data by SharePlex is handled by an internal messaging and transport
system, using an asynchronous stream protocol with TCP/IP connections that is very efficient for large data
transfers. This method ensures optimal performance, reliability and restart capabilities, while conserving
communication bandwidth. SharePlex can replicate over any TCP/IP network.
l Capture Queue: The capture queue resides on the source system and stores captured data for further
processing by SharePlex. There is one capture queue for each datasource that is being replicated. A
capture queue is identified by the datasource, for example o.fin1 or r.fin1.
l Export Queue: The export queue resides on the source system. It holds data that has been processed by
SharePlex and is ready for transport to the target system. By default, there is one export queue on a
source system regardless of the number of active configurations or target systems. A default export
queue is identified by the name of the source system on which it resides, for example, SysA. You can
instruct SharePlex to create additional namedexport queues for more complex replication strategies.
l Post Queue: The post queue resides on the target system. It holds data that is ready for Post to write to
the target database, file, or message queue or topic. On each target system, there is one post queue for
the replication stream between a datasource and its target. For example, if DatabaseA and DatabaseB
are both replicating to DatabaseC, there are two post queues. A default post queue is identified by the
name of the source system plus the datasource and the target, for example SysA (o.DatabaseA-
o.DatabaseB) or SysA (r.DatabaseA-o.DatabaseB). You can instruct SharePlex to create additional
named post queues for more complex replication strategies.
NOTE: All SharePlex queue files are created and maintained in the rim sub-directory of the SharePlex variable-
data directory.
l Configure data replication on page 57
l Start replication on your production systems on page 188
From the information that it has about a transaction operation, SharePlex creates one or more messages that
are sent from the source system to the target system. A message can reflect a SQL operation or an internal
SharePlex operation, but most of the time it is an INSERT, UPDATE, DELETE, COMMIT, TRUNCATE or a
supported DDL operation.
NOTE: Large operations like those on LONG or LOB columns can require more than one message
because a message has a size limitation. Other operations, such as array inserts of small records, have
the inverse effect: There could be one record for numerous operations. For example, an array insert of
70,000 rows might be recorded in the transaction stream as only 700 messages, depending on the data.
In general, unless you are replicating numerous changes to those kinds of data types, you can assume
that the number of messages shown in the status output for a process or queue approximately
corresponds to the same number of SQL operations.
The Post process reads messages from the post queue and applies the replicated data changes to the target.
In the case of a database target, Post constructs SQL statements to apply the data. In the case of non-
database targets, Post outputs data records in the format required by the target, for example a file or
messaging queue or topic.
The following explains the default ways that SharePlex builds SQL statements on the target system.
l If the change is an INSERT, SharePlex uses all of the columns in the row to build an INSERT statement.
l If the change is a DELETE, SharePlex uses only the key to build a WHERE clause to locate the correct
row. In the case of Oracle, if a table lacks a key, SharePlex simulates one by using the values of all of the
columns, except LONG and LOB columns. You can specify columns to use as a key when you create the
configuration file. In the case of SQL Server, all configured objects must have a primary key.
l If a row exists in the source database, it exists in the target.
l Corresponding columns in source and target tables have the same structure and data types.
l Data values in corresponding rows are identical, including the values of the key.
Ensuring data integrity is the responsibility of the Post process. Post applies a WHERE clause to compare the
key values and the before values of the SQL operations that it processes. Post uses the following logic to
validate synchronization between source and target tables:
l Post applies a replicated INSERT but a row with the same key already exists in the target. Post applies
the following logic:
o If all of the current values in the target row are the same as the INSERT values, Post considers
the rows to be in-sync and discards the operation.
o If any of the values are different from those of the INSERT, Post considers this an out-of-
sync condition.
NOTE: You can configure Post so that it does not consider non-key values when posting an
INSERT. See the SP_OPO_SUPPRESSED_OOS parameter in the SharePlex Reference Guide.
o If the current values in the target row match the after values of the UPDATE, Post considers the
rows to be in-sync and discards the operation.
o If the values in the target row do not match the before or after values of the UPDATE, Post
considers this an out-of-sync condition.
NOTE: You can configure Post so that it returns an out-of-sync message if the current values in
the target row match the after values of the UPDATE. See the SP_OPO_SUPPRESSED_OOS
parameter in the SharePlex Reference Guide.
l A DELETE is performed on the source data, but Post cannot locate the target row by using the key. When
Post constructs its DELETE statement, it includes only the key value in its WHERE clause. If the row does
not exist in the target, Post discards the operation.
l Prevent write access to the target tables, so that DML and DDL cannot be applied to them.
l Use the compare command to compare source and target data regularly to verify synchronization and
detect hidden out-of-sync conditions. You can use the repair command to repair any out-of-sync rows.
For more information about these commands, see the SharePlex Reference Guide.
l The default Post behavior when a transaction contains an out-of-sync operation is to continue
processing other valid operations in the transaction to minimize latency and keep targets as current as
possible. Latency is the amount of time between when a source transaction occurs and when it is
applied to the target. Different factors affect the amount of latency in replication, such as unusually high
transaction volumes or interruptions to network traffic.
Post logs the SQL statement and data for the out-of-sync operation to the ID_errlog.sql log file, where
ID is the database identifier. This file is in the log sub-directory of the variable-data directory on the
target system.
l You can configure Post to stop when it encounters an out-of-sync condition by setting the following
parameter to 1:
l Oracle targets: SP_OPO_OUT_OF_SYNC_SUSPEND
l Open Target targets: SP_OPX_OUT_OF_SYNC_SUSPEND
l You can configure Post to roll back and discard a transaction if any operation in that transaction
generates an out-of-sync error. The entire transaction is logged to a SQL file, but not applied to the
target.You can edit the SQL file to fix the invalid DML and then run the SQL file to apply the transaction.
This feature is enabled by setting the SP_OPO_SAVE_OOS_TRANSACTION to 1.
Reporting instances
Targets maintained by SharePlex are ideal for offloading report and query processing because they are
accessible while being kept up-to-date, and they can be optimized with keys and indexes designed for
optimal query performance. You can run reports all day long, without complaints about performance from
your OLTP users. Even during busy reporting times such as the end of the month or quarter, application
response time will be unaffected by heavy reporting. And, your organization’s decision-makers will appreciate
the accuracy of the data reflected in the reports. For more information, see Configure replication to share or
distribute data on page 116.
Data warehousing
SharePlex can replicate from numerous source systems to one target system. This configuration is ideal for
consolidating data in a data warehouse or a data mart so that information is available enterprise-wide for
queries and reports. You have control over the data that is replicated and the option to transform any data to
conform to a different target structure. These capabilities enable you to populate your data warehouse with the
specific, timely information that users need to make good decisions. For more information, see Configure
replication to maintain a central datastore on page 120.
Peer-to peer
SharePlex supports replication among multiple source databases where applications on each system can make
changes to the same data while SharePlex maintains synchronization. In this strategy, the databases are
usually mirror images of each other, with all objects existing in their entirety on all systems. Although similar in
benefit to a high-availability strategy, the difference between the two is that peer-to-peer allows concurrent
changes to the same data, while high availability permits changes to the secondary database only in the event
that the primary database goes offline. A few ways to use peer-to-peer replication are to maintain the availability
and flexibility of a database by enabling access from different locations or to distribute heavy online transaction
processing volumes among multiple access points. For more information, see Configure peer-to-peer
replication on page 125.
The SharePlex Professional Services team can help you prepare for, install, and deploy SharePlex in your
environment.
Run SharePlex
This chapter contains instructions for running SharePlex on UNIX, Linux, and Windows
Contents
Run SharePlex on Unix and Linux
Startup sequence on Unix and Linux
Start SharePlex on Unix and Linux
Identify SharePlex processes on Unix and Linux
Stop SharePlex on Unix and Linux
Shutdown Considerations on Unix and Linux
Run SharePlex on Windows
Startup Sequence on Windows
Start and stop SharePlex on Windows
Set SharePlex startup status on Windows
Set SharePlex process priority on Windows
Identify SharePlex processes on Windows
Shutdown Considerations on Windows
l From the operating system command line.
l At system startup as part of the startup file.
IMPORTANT: Run SharePlex from either the korn (ksh) or C shell (csh) shell.
1. Start the system.
2. Start the source and target databases.
3. Start SharePlex.
4. Start sp_ctrl.
5. Verify that the SharePlex processes are started by issuing the lstatus command in sp_ctrl.
sp_ctrl> lstatus
6. Allow users on the system.
CD to the product directory $ cd /productdir/bin
$./sp_cop [-uidentifier] &
From a startup script #!/bin/ksh
cd productdir\bin
nohup sp_cop [-uidentifier] &
Argument Description
& Causes SharePlex to run in the background.
nohup Directs the startup of SharePlex to continue in the background after the current
user logs out.
-uidentifier Starts sp_cop with a unique identifier. Use this option when there are multiple
instances of sp_cop running on a system, which is required for some SharePlex
configurations. For more information, see Run multiple instances of SharePlex on
page 43.
Some suggestions for identifier are:
l the SharePlex port number (such as -u2100)
l the identifier of the database for which replication is running (such as -
uora12c)
l any descriptive identifier (such as -utest)
l The sp_cop process is the root process.
l The following child processes are spawned by sp_cop on a source system:
o Command and Control process (sp_cnc)
o Capture (sp_ocap)
o Read (sp_ordr)
o Export (sp_xport)
l The following child processes are spawned by sp_cop on a target system:
1. Command and Control process (sp_cnc)
2. Import (sp_mport)
3. Post (sp_opst_mt if the database is Oracle or sp_xpst if the database is Open Target)
Each child process has the same -uidentifier as its parent sp_cop process. This makes it easier to identify
related processes when multiple session of sp_cop are running.
1. Start the system.
2. Start the source and target databases.
3. Start the NuTCRACKER service in the Windows Administrative Tools control panel. This starts the
MKS Toolkit® operating environment, which must be running in order to run SharePlex. See the
SharePlex Installation Guide for more information about the MKS Toolkit.
4. Start the SharePlex port# service.
5. Start sp_ctrl from the bin sub-directory of the SharePlex product directory.
6. Verify that the SharePlex processes are started by issuing the lstatus command in sp_ctrl.
sp_ctrl> lstatus
1. Log onto Windows as a SharePlex Administrator. Your user name must be assigned to the SharePlex
admin group. For more information, see Assign SharePlex users to security groups on page 185.
2. View the Windows services to make certain the NuTCRACKER service is running. Start it, if needed.
3. Run the SpUtils utility from the desktop shortcut or the Programs menu.
4. Click the SharePlex Services tab of the utility.
5. Select the port number of the SharePlex instance that you want to control.
6. Do one of the following:
l Click Install to install the service. If Install is not shown, the service exists.
l Click Start to start the service. When Current State shows that the service is running, you can
close the utility. If Start is not shown, the service is either running already or not installed.
l Click Stop to stop the service. If Stop is not shown, the service is either stopped already or
not installed.
NOTE: You can also use the shutdown command in sp_ctrl to stop the SharePlex service.
1. Run SpUtils.
2. Select the TaskMgr tab.
3. Right click the SharePlex instance that you want to prioritize.
4. Select Set Priority, then select the desired priority level.
l One parent Sp_Copsrv.exe process.
l One Sp_Ocap or Sp_capture (Capture) process plus one child Sp_Copsrv.exe process.
l One Sp_Ordr (Read) process plus one child Sp_Copsrv.exe process.
l One Sp_Xport (Export) process plus one child Sp_Copsrv.exe process.
l If there are any additional SharePlex processes running, such as sp_ctrl, there is an additional Sp_
Copsrv.exe process for each one.
On the target system:
l One parent Sp_Copsrv.exe process.
l One Sp_Mport (Import) process plus one child Sp_Copsrv.exe process.
l One Sp_Opst_Mt (Oracle Post) or Sp_Xpst (Open Target Post) process plus one child Sp_
Copsrv.exe process.
l If there are any additional SharePlex processes running, such as sp_ctrl, there is an additional Sp_
Copsrv.exe process for each one.
If there are no active replication configurations, the SharePlex processes do not start when you start the service,
and just the parent Sp_Copsrv.exe will be running.
To identify the parent Sp_Copsrv.exe process in the Windows Task Manager, look for the one that is
using the largest amount of memory. The child Sp_Copsrv.exe processes consume less memory than the
parent process.
To identify which replication process is associated with a child Sp_Copsrv.exe process, look in the SharePlex
Event Log for the message stating when the replication process started. This entry provides the PID for that
process and the PID of the associated Sp_copsvr.exe process.
Contents
Run multiple instances of SharePlex from separate installations
Run multiple instances of SharePlex from one installation
l Processes are easily isolated. You do not have to set environment variables to point to the correct port
and variable-data directory.
l You can upgrade or perform other maintenance one product directory at a time, or choose not to perform
those tasks.
l You can run the same or different versions of SharePlex on the same system.
The disadvantages are:
l You must install and upgrade each installation separately.
l More disk space is required to store the product files.
To set up multiple instances of SharePlex in this configuration:
l Install each one separately. There should be one product directory and one variable-data directory per
installation.
l Install each one on a different TCP/IP port number.
l IMPORTANT! Make certain to create a different database account for each installation.
To install SharePlex, see the SharePlex Installation Guide.
l You install and upgrade only one installation of SharePlex. Maintenance procedures are performed for
only one installation.
l You conserve disk space, because you only store one set of SharePlex binaries and installed files.
l The customization of the SharePlex monitoring scripts only need to be done once, in one place. For
more information, see Run monitor scripts on Unix on page 217.
l Startup and shutdown scripts only need to be created and run for one set of binaries.
The disadvantages are:
l Processes must be directed to each instance. You must set environment variables for each instance,
start sp_cop with the correct identifier for each instance, and set a port connection in sp_ctrl to ensure
that commands are directed to the correct instance.
l Upgrades apply to all instances of SharePlex.
l All sp_cop instances are the same version of SharePlex.
The sp_cop process listens on each system on TCP and UDP ports for communications from SharePlex
processes on other systems in the network, such as a command or exchange between the Export and Import
processes. If the ports are different, sp_cop on one system cannot connect to the sp_cop on another system to
send or receive messages.
1. Install SharePlex according to the instructions in the SharePlex Installation Guide. At the end of the
installation, you should have one product directory, one variable-data directory associated with a port
number, and one database account. This is your base instance of SharePlex.
2. Log in as a root user.
3. Shut down sp_cop if it is running.
4. Copy the original variable-data directory (with its sub-directories) to a new variable-data directory for
each instance of sp_cop that you want to run. Include the port number in each name, as shown in the
following examples.
cp -p -r /splex/vardir/splex2100 /splex/vardir/splex2101
cp -p -r /splex/vardir/splex2100 /splex/vardir/splex2102
1. Export the SP_SYS_VARDIR variable to point to one of the new variable-data directories, for example
splex2101 in the preceding example.
ksh shell:
export SP_SYS_VARDIR=/full_path_of_variable-data_directory
csh shell:
setenv SP_SYS_VARDIR=/full_path_of_variable-data_directory
2. Export the SP_COP_TPORT and SP_COP_UPORT variables to point to the port number of the variable-
data directory that you exported.
ksh shell:
export SP_COP_TPORT=port
export SP_COP_UPORT=port
csh shell:
setenv SP_COP_TPORT port
setenv SP_COP_UPORT port
3. Log in as SharePlex Administrator.
1. Export the SP_SYS_VARDIR variable to point to one of the new variable-data directories, for example
splex2101 in the example.
ksh shell:
export SP_SYS_VARDIR=/full_path_of_variable-data_directory
csh shell:
setenv SP_SYS_VARDIR=/full_path_of_variable-data_directory
2. Run the appropriate Database Setup utility for the database. For more information, see Database Setup
Utilities in the SharePlex Reference Guide.
3. Repeat these steps for each additional variable-data directory.
1. Export the SP_SYS_VARDIR environment variable to point to the variable-data directory of the first sp_
cop instance.
ksh shell:
export SP_SYS_VARDIR=/full_path_of_variable-data_directory
csh shell:
setenv SP_SYS_VARDIR=/full_path_of_variable-data_directory
2. Start sp_cop with the -u option, where port is the port assigned to the sp_cop instance.
/splex/proddir/bin/sp_cop -u port &
3. In sp_ctrl, use the port command to set the session to the port number of the sp_cop instance you want
the commands to affect.
./sp_ctrl
port number
4. Repeat these steps for each instance of sp_cop that you want to run.
NOTE: If you receive an error message similar to the following, find out if someone else started a session of sp_
cop using the same port number and variable-data directory. If permissible, kill the processes associated with
that session, then start sp_cop again.
l Use the same product directory for each instance.
l Select or create a different variable-data directory for each instance.
l Select a different port number for each instance. The installation program locates available ports,
which you can override if necessary.
l When prompted for a license key, use the same license key for all instances. Make certain to
select the correct port each time.
l When you run the Database Setup utility, use the correct port number for the instance, and use a
different name for each database account.
1. Log onto Windows as a SharePlex Administrator (member of the spadmin group).
2. Run the SpUtils utility.
3. Select the SharePlex Services tab.
4. Select the port number for the instance of SharePlex that you want to start.
5. Under SharePlex Service Status, click Start. This starts the service for that instance.
6. When the Current State text box shows that the service has started, you can start another instance
of SharePlex.
7. Run Sp_Ctrl for the instance.
8. In Sp_Ctrl, use the port command to set the session to the port number of the sp_cop instance you want
the commands to affect.
sp_ctrl > port number
Contents
How to run sp_ctrl
Define a default port for sp_ctrl
Define a default host for sp_ctrl
Set a default editor for sp_ctrl
Command guidelines
Issue Commands on a remote system
Issue commands for clustered systems
Add a scroll bar to output on Windows
Start sp_ctrl
There are two ways to run sp_ctrl:
l from the command shell of the operating system to issue one command, for example:
$ /productdir/bin/sp_ctrl command [on host]
where:
l productdir is the SharePlex product (installation) directory.
l command is the SharePlex command.
l on host represents one of the command options that allow you to issue a command on the local
machine to control SharePlex on a remote machine (if supported by the command), as shown in the
following example.
$ /productdir/bin/sp_ctrl status on host:port
On Windows systems, you can run sp_ctrl from the Sp_Ctrl desktop shortcut or Windows Programs menu.
The sp_ctrl command line allows a total of 256 characters, including spaces.
sp_ctrl prompt
The sp_ctrl prompt appears in one of two ways, depending on whether or not you set a default host and
port number.
Prompt Description
sp_ctrl> Basic sp_ctrl prompt
sp_ctrl(this_host:3304) > Prompt when a default system and port are set by issuing the
host and port commands
Exit sp_ctrl
To exit the sp_ctrl command-line interface, issue the exit or quit command.
On Windows systems, you can simply close the sp_ctrl command prompt window.
The exit or quit command only closes the sp_ctrl session. It does not stop the SharePlex replication processes.
l Before you start sp_ctrl. This sets the editor only for that session of sp_ctrl.
l In the shell startup script on the local machine. This sets the editor permanently, until changed in the
startup script. You can override this setting on a per-session basis.
export EDITOR=name_of_editor
setenv EDITOR name_of_editor
1. Shut down the SharePlex service.
2. Open the Run dialog. The location varies with the Windows version.
3. In the Run dialog, type regedit to run the Registry Editor.
5. Right click the port number of the SharePlex instance to which you want to add a variable, then select
New, then String Value.
6. Under the Name column, right click the new variable, then select Rename.
7. Type the correct name.
8. Double click the new variable.
9. Under Value Data, enter the string for the new variable and then click OK.
10. Exit the Registry.
Command guidelines
Observe the following when issuing commands:
l To issue commands for a machine, sp_cop must be running on that machine.
l Enter the syntax exactly as shown in the command description in the SharePlex Reference Guide.
l The maximum string length of a SharePlex command is 255 characters, including spaces. To work
around this operating-system limitation, use the edit command.
l Use the redo command to execute the previous command again without having to retype it. This
command is useful when you are making frequent status checks with the information commands, for
example using the qstatus command to monitor changes in queue volume.
l To view descriptions and syntax for SharePlex commands from within the sp_ctrl interface, issue the
help command. To view just the syntax for a command, issue the usage command.
l Use the usage command to view the syntax for a SharePlex command. You can enter the entire
command or just the first few keywords. For example, type usage compare to view syntax for both the
compare using and compare commands.
l Use the edit command to edit a previously issued command.
l Use the authlevel command to determine your authorization level for issuing SharePlex commands
on a system.
For more information, see About the SharePlex security groups on page 185.
on host Execute the command on a remote system (one other than
the one where the current sp_ctrl session is running). You
are prompted for login credentials for the remote system. If
used, must be the last component of the command syntax.
Example: sp_ctrl(sysB)>status on SysA
on host:portnumber Execute the command on a remote system when a remote
login and port number must be provided. If used, must be the
last component of the command syntax.
Example: sp_ctrl(sysB)>status on SysA:8304
on login/password@host Execute the command on a remote system when a remote
login, password, and host name must be provided. If used,
must be the last component of the command syntax.
Example: sp_ctrl(sysB)>status on john/spot5489@SysA
on login/password@host:portnumber Execute the command on a remote system when a remote
login, password, host name, and port number must be
provided. If used, must be the last component of the command
syntax.
Example: sp_ctrl(sysB)>status on
john/spot5489@SysA:8304
1. Click the Command Prompt icon at the top left corner of the console, then select Properties
from the menu.
2. In the Command Prompt Properties dialog box, click the Layout tab.
4. Click OK to apply the settings.
6. Click OK to close the dialog box.
Contents
View and set parameters
Where parameter information is stored
View parameters
Use the list param command in sp_ctrl to view user-configurable SharePlex parameters. It displays parameter
names, current settings, default values (if the parameter has been changed), and set-at points. The set-at point
indicates when changes to a parameter will take effect. Possible set-at points are:
l Live means a change takes effect immediately.
l Restart Process means a change takes effect after the affected SharePlex process is restarted.
l Restart Cop means a change takes effect after sp_cop is restarted.
Additional options are available for viewing:
l All SharePlex parameters.
l Only parameters whose values have changed.
l Parameters relating to a specific SharePlex module.
To view descriptions of the SharePlex parameters, see the SharePlex Reference Guide.
l With the set param command through the sp_ctrl interface. This is the preferred method because the
new value remains intact no matter how many times replication stops and starts. The syntax is:
set param parameter_name value
Example:
set param SP_OCT_OLOG_RDS_MINER 1
l As environment variables on Unix and Linux systems prior to starting sp_cop. The new value remains in
effect only for that session of sp_cop.
Parameters for the Capture, Read, Export, Import, and Post processes can be set on a per-process basis when
there are multiple instances of a process for an instance of SharePlex.
l The paramdb file stores user-defined parameter settings — values that were changed from their defaults
by a SharePlex Administrator using the set param command. Also stored in this file are the SharePlex
license key for the local system, the Share- Plex Oracle user, and the SharePlex user’s password.
The paramdb resides in the data sub-directory of the SharePlex variable-data directory. It starts out
empty, and as SharePlex Administrators change parameter values, those values are added to it. User-
defined parameter values override SharePlex default values when SharePlex is running. All of the
settings in the paramdb file remain intact when a new version of SharePlex is installed.
Contents
Ensure compatible source-target mapping
Create a configuration file
How to qualify object names
How to specify case-sensitive names
Database specifications in a configuration file
Target specifications in a configuration file
Routing specifications in a configuration file
Configuration examples by datasource and target
Capture from multiple local datasources
Use Wildcards to specify multiple objects
Define a unique key
Filter DML operations
Map source and target columns
Build a configuration file using a script
l Contain compatible data types (same type, size, precision).
l Have identical names, unless you use column mapping in the configuration file. For more information,
see Map source and target columns on page 79.
l Be the same letter case if one of the databases is case-sensitive, but the source or target of that
database is not case-sensitive. You can use column mapping to work around this issue. For more
information, see Map source and target columns on page 79.
A target table can have more columns than the source table.
l If the source and related target column names are identical, SharePlex will ignore the extra columns in
the target table.
l If the source and target column names are not identical, SharePlex maps a one-to-one relationship in
the order that the columns are defined in each table (for example, map the first column in the source to
the first column in the target, map the second column to the second column, and so forth).
l To avoid Oracle errors if the extra (non-mapped) columns are NOT NULL, define default values for those
columns. For more information, see Map source and target columns on page 79.
A target table can have fewer columns than the number of columns in the source table, but you must use
vertically partitioned replication to replicate only that subset of the source columns that matches the rows of the
target. For more information, see Configure vertically partitioned replication on page 106.
Only a SharePlex Administrator or operator has the authority to create a configuration file.
When your configuration file is completed, you activate the configuration with the activate config command to
begin replication. For more information, see Start replication on your production systems on page 188.
1. Run sp_ctrl from the bin sub-directory of the SharePlex product directory.
2. In sp_ctrl, issue the create config command.
sp_ctrl> create config config_name
This command opens a file in the default text editor that is set for the operating system. NOTE: You
can change the default editor that sp_ctrl uses. For more information, see Set a default editor for sp_
ctrl on page 50.
3. Complete the configuration file. For more information, see Structure of a configuration file on page 60.
IMPORTANT! All configurations must reside in the config sub-directory of the SharePlex variable-data
directory. Configuration files outside this directory cannot be activated. SharePlex places configurations
in this directory by default when you create them through the sp_ctrl interface with the create config
command. If you create the configuration directly through a text editor, make certain to save it to the
config sub-directory.
Scripts in the
SharePlex
Reference
Guide.
# comment: basic SharePlex configuration file
datasource_specification
The basic components of a configuration file are as follows.
l The keyword Datasource followed by a
colon (:). The word "Datasource" is not
case-sensitive.
l The database specification. For more
information, see Database specifications
in a configuration file on page 64.
How to specify case-sensitive names on page 63
You can use wildcards to specify multiple objects.
Owner names cannot be wildcarded. For more
information, see Use Wildcards to specify
multiple objects on page 73.
l How to qualify object names on
page 62
l How to specify case-sensitive
names
l Use Wildcards to specify multiple
objects on page 73
l Target specifications in a
configuration file on page 65 on
page 1
l An Oracle sequence (or wildcard
specification).
l A file that contains XML or SQL records.
l A JMS queue or topic.
l A Kafka topic.
l A change-history table that maintains a
record of all changes made to a source
table (also known as change data
capture)
2. (Database targets only) The @ symbol
followed by the target database
specification. For more information, see
Database specifications in a configuration
file on page 64.
The database specification is absent if the target
is JMS, Kafka, or a file.
There can be no spaces between any characters
in the routing map.
For more information, see Routing specifications
in a configuration file on page 66.
l owner is the schema or database that contains the object (or objects, if wildcarded), depending on how
that container is defined by the database.
l object is the name of the object or a wildcard specification to specify multiple objects.
When defining source or target objects in the configuration file, follow these guidelines for specifying the
owner component:
Aurora database_name.object_name
MySQL database_name.object_name
Oracle schema_name.object_name
PostgreSQL schema_name.object_name
SQL Server schema_name.object_name
SAP ASE schema_name.object_name
SAP HANA schema_name.object_name
Teradata database_name.object_name
Correct way
l This is how to specify an object where both the owner and object names are both case-sensitive:
"Owner"."Object"
l This is how to specify an object where only one of the components is case-sensitive:
owner."Object" or "Owner".object
The name that is not case-sensitive can be specified in any case.
Examples of both ways:
Datasource o.oraA
sales."Emp" "Sales"."Emp" [email protected]
Incorrect way
This is not correct, because both components are within one set of quotes:
"Sales.Employees"
Datasource o.oraA
sales.emp(ID,"first","last") sales.emp(ID,"First","Last") [email protected]
Database specifications in a
configuration file
A database specification is required in the following components of the configuration file:
l the datasource (source datastore) specification
l routing map (target datastore and location) specification
Oracle source or target o. Depending on the Oracle database configuration, use
one of the following. This is the string that SharePlex
will use to connect to the database.
l The Oracle SID of a regular (non-CDB) Oracle
database, as in o.ora12.
l The TNS alias of a pluggable database (PDB)
in an Oracle container database (CDB), as in
o.pdb1.
l The global TNS alias of an Oracle RAC
cluster, as in o.rac1. SharePlex connects to an
Oracle RAC instance through this TNS alias,
which is mapped locally on each node to the
Oracle SID of the local Oracle instance. For
more information about creating this alias, see
Preinstallation instructions for Oracle cluster in
the SharePlex Installation Guide.
SQL Server source or r. Use to specify the name of a SQL Server source
target database or an Open Target (non-Oracle) target
Other Open Target database, as in r.mydb. IMPORTANT! Use the actual
targets database name. Do not use the ODBC datasource
name (DNS) or database instance name. If the
database name is case-sensitive, specify it that way.
Oracle change-history c. Use in a routing map to specify the Oracle SID, TNS
target alias, or global RAC TNS alias of an Oracle change
history database, as in c.ORA12CH. In this
configuration, SharePlex applies all source
transactions as INSERTs to the target tables, to
maintain a history of every operation performed.
For more information, see Configure replication to a
change history target on page 111.
* NOTE: The dot is required.
Target specifications in a
configuration file
The following table shows how to specify a target table or non-table target in a configuration file.
Routing specifications in a
configuration file
The following instructions show you how to build a routing map based on where you want to send the source
data. A routing map sends replicated data to the correct target on the correct target system, or systems.
For details about the components of these configurations, see:
Database specifications in a configuration file
Target specifications in a configuration file
IaaS targets
If replicating to a database target hosted in an IaaS cloud service, specify the full endpoint URL as the target
host in the routing map.
datasource_specification
PaaS targets
If replicating to a database target hosted in a PaaS cloud service, there are special installation, setup, and
routing requirements. Because SharePlex cannot be installed directly on a PaaS cloud server, you must install
SharePlex on either the source server or an intermediary server, from which Post connects to the target cloud
database. For more information, see Installation and setup for cloud-hosted databases in the SharePlex
Installation and Setup Guide.
l All are of one type: All the same database object type or all a JMS queue or all a JMS topic or all a Kafka
topic, or all a file (but no combination of these).
l All have the same fully qualified name, including any table specifications in a JMS, Kafka, or file target
specification.
l All have identical column mappings or key mappings, if used. For more information about these
mappings, see:
l Define a unique key on page 76
l Map source and target columns on page 79
NOTES:
l Certain routing limitations apply when using vertically partitioned replication. For more
information, see Configure vertically partitioned replication on page 106.
l If any target has a different qualified name from the other targets of the same source object, you
must use a simple routing map for that target.
datasource_specification
src_
tgt_owner.table host1[@database_specification]+host2[@database_specification][...]
owner.table
When SharePlex replicates between objects on the same system, it does not create Import and Export
processes. You can force SharePlex to create Import and Export processes by using the following routing map.
If you do not need the Import or Export processes, omit the host* portion of the routing map.
Configuration with replication to objects in the same or different database on the same system
datasource_specification
Routing Limitations
l By default, SharePlex supports replication to a maximum of 19 direct target systems. That is the
maximum number of processes that can read the export queue. To replicate to more than 19 targets, use
named export queues. With each additional queue that you add, you can replicate to 19 additional
targets. For more information, see Configure named export queues on page 87.
l Each instance of sp_cop on a system permits a maximum of 1024 different routes. This limitation
includes each route that uses a different named post queue (see Configure named post queues on page
91.) If your replication strategy requires more than 1024 routes, consider using one or more intermediary
systems to divide the routes among multiple sp_cop instances. For more information, see Configure
replication to share or distribute data on page 116.
l By default, each sp_cop instance allows a total of 25 queues on a system. There will always be one
capture queue on a source system and one post queue on a target. Therefore, you can have as many as
24 named export queues on a source system and 24 named post queues on a target system. If a system
serves as both a source and target, you will have both a capture queue and a post queue. That allows
you to create up to 23 named queues of either type (or a mix of both). If system memory permits, you can
change the number of allowed queues by setting the SP_QUE_MAX_QUEUES parameter. See the
SharePlex Reference Guide for more information about this parameter.
Configuration examples by
datasource and target
These are examples of basic configuration files according to each possible datasource type and target type.
Example
The following example replicates table SCOTT.EMP from Oracle instance oraA to target table SCOTT.EMP2 in
Oracle instance oraB on target system sysprod.
Datasource:o.oraA
SCOTT.EMP SCOTT.EMP2 [email protected]
Example
The following example replicates table SCOTT.EMP from Oracle instance oraA to target table SCOTT.EMP2 in the
PaaS cloud Oracle instance oraB. Post runs on intermediary target system sysprod2.
datasource:o.oraA
SCOTT.EMP SCOTT.EMP2 [email protected]
Example
The following example replicates table SCOTT.EMP from Oracle instance oraA to target table Scott2.Emp2 in
Open Target database mydb on target system sys2. The target table is case-sensitive.
Datasource:o.oraA
SCOTT.EMP "Scott2"."Emp2" [email protected]
Example
The following example replicates table SCOTT.EMP from Oracle instance oraA to a file on target
system sysprod.
Datasource:o.oraA
SCOTT.EMP !file sysprod
Example
The following example replicates table SCOTT.EMP from Oracle instance oraA to a JMS queue on target
system sysprod.
Datasource:o.oraA
SCOTT.EMP !jms sysprod
Example
The following example replicates table SCOTT.EMP from Oracle instance oraA to a Kafka topic on target
system sysprod.
Datasource:o.oraA
SCOTT.EMP !kafka sysprod
Example
This example replicates table SCOTT.EMP from an Oracle PDB that uses the TNS alias of aliasA to target table
SCOTT.EMP in an Oracle PDB that uses the TNS alias of aliasB on target system sysprod.
Datasource:o.aliasA
SSCOTT.EMP SCOTT.EMP [email protected]
* You can also replicate data from an Oracle PDB to any other supported target. For more information, see
Configure capture and delivery on page 85.
Example
The following example replicates table SCOTT.EMP from Oracle instance oraA to change-history target table
SCOTT.EMP2 in Oracle instance oraB on target system sysprod.
Datasource:o.oraA
SCOTT.EMP !cdc:SCOTT.EMP2 [email protected]
For more information, see Configure replication to a change history target on page 111.
# Replicate to Oracle target
# Replicate to SQL Server target
Example
The following example replicates table MSS.EMP from SQL Server database MSS1 to target table MSS.EMP2 in
SQL Server database MSS2 on target system sysprod. In this example, the databases are collated for case-
sensitivity, so quotes are placed around the names.
Datasource:r."MSS1"
"MSS.EMP" "MSS.EMP2" sysprod@r."MSS2"
Example
The following example replicates table mss.emp from SQL Server database mss1 to target table mss.emp2 in
the PaaS cloud database mss2. Post runs on the intermediary system sysprod2. In this example, the
databases are not collated for case-sensitivity.
Datasource:r.mss1
mss.emp mss.emp2 [email protected]
1. Create a configuration file for the first datasource. In each routing map, include a named export queue.
For more information, see Configure named export queues on page 87.
2. Create a configuration file for the second datasource. In each routing map, specify a named export
queue, but make certain it is different from any of the queues named in the first configuration file. It is
important that data from one datasource does not process through the export queues of the other
datasource.
3. Create additional configurations with dedicated named export queues, if needed.
4. When you activate the configuration files, use a separate sp_ctrl session for each one. For more
information, see How to activate multiple configuration files on page 194.
o Vertically partitioned replication. For more information, see Configure vertically partitioned
replication on page 106.
o Horizontally partitioned replication. For more information, see Configure horizontally partitioned
replication on page 95.
o (Oracle) Key definition. For more information, see Define a unique key on page 76.
o (Oracle) Column mapping. For more information, see Map source and target columns on
page 79.
The tables that use these features must be specified in the configuration file separately.
l Percent (%) wildcard to specify a string. (See the Examples on page 75.)
l Underscore (_) wildcard to specify a single-character.
l For table names that contain a percent sign or an underscore character (for example emp_salary),
SharePlex recognizes the backslash (\) as an escape character to denote the character as a literal,
not a wildcard.
datasource_specification
Component Description
expand Indicates that the specification contains wildcard characters that
must be expanded. When SharePlex detects the expand keyword,
it queries the database for all objects that match the criteria in the
wildcard specification. Without this required keyword, the wildcard
characters are assumed to be part of an explicit object name, and
no wildcard expansion is performed.
NOTE: Leave a space between expand and the start of the source
object specification.
src_owner.wildcard_name l src_owner is the owner of the source objects. Owner
names cannot be wildcarded. If wildcards are used in the
owner name, SharePlex assumes that they are part of the
owner (schema) name.
l wildcard_name is the wildcarded name of the source
objects.
Rules:
SQL Server: The names of the target objects must be identical to
those of the source objects, but the objects can be in different
databases.
Oracle: The names of the target objects must be identical to those
of the source objects, but the objects may belong to different
owners.
l The not keyword and parentheses are required elements.
l list is a comma-separated list of tables owned by the same
owner, either wildcarded or explicit. Example: not (spo%,
gen%, product).
Leave a space before and after the not keyword. A space is
allowed after each comma in the list.
NOTE: If an object that satisfies a wildcard is listed
elsewhere in the configuration file, that entry overrides the
processing or routing specified in the wildcarded entry. In
this case, a not clause is not needed. See the Examples.
tgt_owner.wildcard_name l tgt_owner is the owner of the target objects.
l wildcard_name is the wildcarded name of the target
objects.
The target specification must be in the form of owner.%. Partially
expanded target wildcarded names are not supported, such as
owner.tab%.
routing_map Any valid routing map. For more information, see Routing
specifications in a configuration file on page 66
Examples
Examples of valid wildcard specifications
Example 1: The following wildcard specification directs SharePlex to activate all tables owned by scott,
where the table name is like prod% except if the table name is like %temp%. All tables that match this
description are replicated to tables of the same names on the target in the hal schema. Note that SharePlex
automatically upshifts the names, so that it actually activates all tables where the table name is like 'PROD%'
but not like '%TEMP%'.
Example 2: The following example shows how you can specify special handling for one of the tables in a
wildcarded specification, in this case the photo table. All tables but photo are routed through the default post
queue. The separate entry for the photo table overrides the wildcarded entry and processes the photo table
through a named post queue. For more information, see Configure named post queues on page 91.
Datasource:o.sidA
cust.% cust.% [email protected]
cust.photo cust.photo hostB:[email protected]
The following are additional examples of valid wildcard specifications
Datasource:o.sidA
expand scott.%test% scott.% [email protected]
Datasource:o.sidA
expand scott.%t__t% fred.% [email protected]
Datasource:o.sidA
expand scott.% not (spo%, gen%, prodct) scott.% [email protected]
Datasource:o.sidA
expand scott.prod% not (%temp%) hal.% [email protected]
Datasource:o.sidA
expand rob%.%test% scott.% [email protected]
The following example contains a partially wildcarded target object name, which is not permitted.
Datasource:o.sidA
expand scott.%test% scott.%obj% [email protected]
l Without a primary or unique key, SharePlex uses all of the columns of a table (or all of the columns in a
column partition) as a key, which slows replication performance.
l When a key definition is specified for a table that has a PRIMARY or UNIQUE key, the key definition
overrides the defined key. This can be useful if you do not want any of the existing keys to be used by
SharePlex.
The columns that you specify as a key must meet the following criteria:
l !key is a required keyword.
l column_list is a list of columns to include in the key. Separate column names with commas. A space after
the comma is optional.
datasource_specification
Example
Datasource:o.ora1
scott.tab !key(name,ID) scott.tab2 sysB@oraB
l Oracle or SQL Server DML type (INSERT, UPDATE, DELETE)
l DML related to Oracle sequences and Oracle SQL*Loader direct-path loads.
i INSERT
d DELETE
u UPDATE
Examples
Example 1
The following example filters DELETE operations from being replicated to the target table.
Datasource:o.ora
scott.emp !dml(d) scott.emp [email protected]
Example 2
The following example filters DELETEs and INSERTs so that only UPDATEs are replicated to the target table.
This example also shows how a DML filter is compatible with a column mapping specification.
Datasource:o.ora
scott.stock !dml(d,i) (ID, name) scott.stock (SKU, prod) [email protected]
Restrictions
l The copy and compare commands do not support tables that include DML filtering in their
specifications.
l Routing a source table to multiple targets without using a compound routing map. For more
information, see Routing specifications in a configuration file on page 66.
l Combining full-table replication with horizontally partitioned replication. For more information,
see Configure horizontally partitioned replication on page 95.
Sequences SP_OCT_REPLICATE_SEQUENCES 0
SQL*Loader direct-path loads SP_OCT_REPLICATE_DLOAD 0
l If the spelling case is different between the source and target column names, enclose them
within quotes.
l You can use horizontally partitioned replication and column mapping for the same source table, but you
cannot combine column mapping with vertically partitioned replication.
l A target table can have more columns than the source table, but there must at least be a target column
for every source column.
l ALTER TABLE to add a column to a table that is configured with column mapping is not supported.
datasource_specification The datasource specification. For more information, see Database
specifications in a configuration file on page 64.
(src_col,src_col,...) A list of the source columns.
Follow these rules to specify a column list:
l A column list must be enclosed within parentheses.
l Separate each column name with a comma. A space after the
comma is optional.
l The maximum length of a column list is 174820 bytes (the
maximum line length allowed in a configuration file).
(tgt_col,tgt_col,...) A list of the target columns.
l List the target columns in the same logical order as their
corresponding source columns. This is required regardless of the
actual order of the target columns in the table, so that SharePlex
builds the correct map in the object cache. For example, a
change to the second column in the source list is replicated to the
second column in the target list.
l The syntax rules for the source list also apply to the target list.
routing_map The routing map. For more information, see Routing specifications in a
configuration file on page 66.
Configuration example
This example contains no case-sensitive columns.
Datasource o.oraA
sales.prod (ID,name,vendor) mfg.prod (UPC,product,supplier) [email protected]
This example contains case-sensitive columns.
Datasource o.oraA
sales.prod (ID,"name",vendor) mfg.prod (UPC,"product",supplier) [email protected]
l config.sql: configure all tables and optionally all sequences in the database.
l build_config.sql: configure multiple or all tables in a schema
Supported databases
Oracle
Use config.sql
The config.sql script enables you to build a configuration that lists all of the tables, and optionally all of the
sequences, in all of the schemas of a database. This script saves time when establishing a high-availability
replication strategy or other scenario where you want the entire database to be replicated to an identical
secondary database.
l The script does not configure objects in the SYS, SYSTEM, and SharePlex schemas. These schemas
cannot be replicated since they are system and/or instance-specific.
l The script does not support partitioned replication. You can use the copy config command to copy the
configuration file that the script builds, then use the edit config command to add entries for tables that
use partitioned replication. Activate the new configuration file, not the original one.
l You can use the edit config command to make any other changes as needed after the
configuration is built.
To run config.sql
1. Change directories to the config sub-directory of the SharePlex variable-data directory. The config.sql
script puts configurations in the current working directory, and SharePlex configurations must reside in
the config sub-directory.
cd /vardir/config
2. Log onto SQL*Plus as SYSTEM.
3. Run config.sql using the full path from the util sub-directory of the SharePlex product directory.
@ /proddir/util/config.sql
Refer to the following table when following the prompts.
Target The name of the target machine, for example SystemB.
machine
Source The ORACLE_SID of the source (primary) Oracle instance, for example oraA. Do not include
database the o. keyword. The ORACLE_SID is case-sensitive.
SID
Target The ORACLE_SID of the target (destination) Oracle instance, for example oraB. Do not include
database the o. keyword. The ORACLE_SID is case-sensitive.
SID
Replicate Enter y to replicate sequences or n not to replicate sequences.
sequences
Shareplex The name of the SharePlex user in the source database. This entry prevents the SharePlex
oracle schema from being replicated, which would cause replication problems. If a valid name is not
username provided, the script fails.
NOTE: The name assigned by SharePlex to the configuration is config.file. If you run the script again to create
another configuration file, it overwrites the first file. To preserve the original file, rename it before you create the
second one.
Next steps:
l If any tables or owners are case-sensitive, open the configuration file with the edit config command in
sp_ctrl, then use the text editor to enclose case-sensitive table and owner names within double-quote
marks, for example “scott”.“emp”. The script does not add the quote marks required by Oracle to enforce
case-sensitivity.
sp_ctrl> edit config filename
l To ensure that the configuration is in the correct location, issue the list config command. If the name of
the configuration is not shown, it was created in the wrong directory. Find the file and move it to the
config sub-directory of the variable-data directory.
sp_ctrl> list config
Use build_config.sql
The build_config.sql script enables you to build a configuration that contains multiple (or all) tables in a
schema. It is an interactive script that prompts for each component of the configuration step by step. Instead of
entering the information for each object and the routing individually, you can use a wildcard to select certain
tables at once, or you can select all of the tables in the schema.
To run build_config.sql
1. Change directories to the config sub-directory of the SharePlex variable-data directory. The build_
config.sql script puts configurations in the current working directory, and SharePlex configurations must
reside in the config sub-directory.
cd /vardir/config
2. Log onto SQL*Plus as SYSTEM.
3. Run build_config.sql using the full path from the util sub-directory of the SharePlex product directory.
@ /proddir/util/build_config.sql
Refer to the following table when following the prompts.
Target machine The name of the target machine, for example SystemB.
Source database The ORACLE_SID of the source (primary) Oracle instance, for example oraA. Do not
SID include the o. keyword. The ORACLE_SID is case-sensitive.
Target database SID The ORACLE_SID of the target (destination) Oracle instance, for example oraB. Do not
include the o. keyword. The ORACLE_SID is case-sensitive.
Owner of the source The owner of the source tables.
database tables
Owner of the target The owner of the target tables.
database tables
Table name to Do one of the following:
include (blank for
all) l Press Enter to accept the default, which selects all tables that belong to the
source owner.
l Enter a wildcard (%) character and a string to select certain tables, for example
%e_salary%.
l Enter an individual table name.
Name of the output A name for the configuration. The script gives the file a .lst suffix, for example Scott_
file to create config.lst.
Next steps:
l If any tables or owners are case-sensitive, open the configuration with the edit config command in sp_
ctrl, then use the text editor to enclose case-sensitive table and owner names within double-quote
l To ensure that the configuration is in the correct location, issue the list config command. If the name of
the configuration is not shown, it was created in the wrong directory. Find the file and move it to the
config sub-directory of the variable-data directory.
sp_ctrl> list config
Contents
Configure capture and delivery
PDB configuration examples
l another PDB in the same CDB
l a PDB in a different CDB
l a regular (non-PDB) target
SharePlex can replicate data from a regular source database to a PDB in a target Oracle CDB.
In one configuration file, you can replicate to any number of target PDBs in the same CDB or a different CDB.
l In the configuration file, specify the TNS alias of a PDB as the datasource. For example, if the TNS alias
is pdb1, the datasource specification is:
Datasource: o.pdb1
l You can replicate from as many pluggable databases (PDBs) in the same CDB as desired: Create a
separate configuration file for each PDB. Because each PDB is a different datasource, all configurations
can be active at the same time.
To replicate to a PDB
Specify the TNS alias of the target PDB in the routing map, as shown in the following example where pdb2 is
the target:
[email protected]
Datasource: o.pdb1
hr.emp hr2.emp2 [email protected]
Datasource: o.pdb2
sales.cust sales2.cust2 [email protected]
Example 2: This example shows one configuration file replicating from pdb1 to pdb2 and pdb3, both targets
being on different systems.
Datasource: o.pdb1
hr.sal hr2.sal2 [email protected]
hr.sal hr3.sal3 [email protected]
Contents
Configure named export queues
Configure named post queues
Supported targets
All
l Individual configurations: By default, SharePlex sends data from all active configurations through one
export queue-process pair per target system, but the use of named Export queues enables you to
separate each of those replication streams into its own export queue and Export process. In this way,
you ensure that purge config or abort config commands that are issued for one configuration do not
affect any of the others.
Additional benefits:
l You can stop the Export or Import process for one data stream, while allowing the others to continue
processing.
l You can set SharePlex parameters to different settings for each export queue-process pair. This enables
you to tune the performance of the Export processes based on the objects replicating through each one.
l All tables with referential integrity to one another must be in the same export queue.
l SharePlex has a maximum number of allowed queues. For more information, see Routing specifications
in a configuration file on page 66.
Datasource:database_specification
source_host The name of the source system.
export_queue The name of the export queue. Queue names are case-sensitive on all
platforms. Use one word only. Underscores are permissible, for
example:
sys1:export_q1*[email protected]
target_host The name of the target system.
database specification One of the following for the datasource:
o.oracle_SID
r.database_name
One of the following if the target is a database:
o.oracle_SID
o.tns_alias
o.PDBname
r.database_name
c.oracle_SID
NOTES:
l Allow no spaces between any components in the syntax of the routing map.
l For more information about the components of a configuration file, see Configure data
replication on page 57.
Examples
The following configuration files show two different datasources that are being replicated to two different
databases on the same target system. Each datasource is routed through a named export queue.
Datasource:o.oraA
scott.emp scott.emp sysA:QueueA*[email protected]
scott.sales scott.sales sysA:QueueA*[email protected]
Datasource:o.oraB
scott.prod scott.prod sysA:QueueB*[email protected]
scott.cust scott.cust sysA:QueueB*[email protected]
The following shows how to separate a table that contains LOBs from the rest of the tables by using named
export queues.
Datasource:o.oraA
scott.cust scott.cust sysA:QueueA*[email protected]
scott.sales scott.sales sysA:QueueA*[email protected]
scott.prod scott.prod sysA:QueueA*[email protected]
scott.emp_LOB scott.emp_LOB sysA:QueueB*[email protected]
Alternatively, you could simply define a named export queue for the LOB table and allow the remaining tables to
be processed through the default export queue.
Datasource:o.oraA
scott.cust scott.cust [email protected]
scott.sales scott.sales [email protected]
scott.prod scott.prod [email protected]
scott.emp_LOB scott.emp_LOB sysA:lobQ*[email protected]
l Use the qstatus command to view all queues on a system.
l Use the show command to view all Export processes with their queues.
See the SharePlex Reference Guide for more infomation about theses commands.
Supported sources
Oracle and SQL Server
Supported targets
All
l large tables
l objects that have LOB columns. Named post queues are recommended for objects that contain LOBs.
l objects that involve large transactions.
l any objects whose operations you want to isolate.
Process the remaining objects through additional named post queues, or use the default post queue. Objects in
the configuration file with a standard routing map (host@target) are replicated through a default post queue.
You can use horizontal partitioning to divide the rows of very large tables into separate named post queues as
an added measure of parallelism.
You can set SharePlex parameters to different settings for each queue-process pair. This enables you to tune
the performance of the Post processes based on the objects replicating through each one.
Datasource:database_specification
host The name of the target system.
queue The unique name of the post queue. Queue names are case-sensitive
on all platforms. One word only. Underscores are permissible, for
example:
sys2:[email protected]
database_specification One of the following for the datasource:
o.oracle_SID
r.database_name
One of the following if the target is a database:
l o.oracle_SID
o.tns_alias
o.PDBname
r.database_name
c.oracle_SID
NOTES:
l Allow no spaces between any components in the syntax of the routing map.
l For more information, see Configure data replication on page 57.
Examples
The following configuration creates one post queue named Queue1 that routes data from table scott.emp and
another post queue named Queue2 that routes data from table scott.cust.
l the name of an associated named export queue (if the Import is linked to a named export queue)
l the user-assigned post-queue name (if the Import is linked to a default export queue).
You can view named post queues through sp_ctrl:
l Use the qstatus command to view all queues on a system.
l Use the show command to view all Post processes with their queues.
See the SharePlex Reference Guide for more infomation about theses commands.
Contents
Configure horizontally partitioned replication
Configure vertically partitioned replication
l Replicate a subset of rows to a target, while retaining the rest of the rows in the source.
l Replicate different subsets of rows to different targets.
l Divide the replication of a source table into parallel Post queues for faster posting to the target table.
Supported sources
Oracle
Supported targets
All
l A row partition is a subset of rows in a source table that you want to replicate as a group.
l A partition scheme is a logical container for row partitions.
2. Specify the name of the partition scheme in the SharePlex configuration file to include the partitions in
replication.
Partition types
The row partitions in a partition scheme can be based on one of the following:
l Use a single row partition to replicate only a subset of the rows of a table. For example, you can replicate
only those rows where the value of the YEAR column is greater than 2014. The partition scheme in this
case could be named "Since2014" or "Recent."
l Use multiple row partitions to divide the rows of a table so that each set of rows replicates to a different
target. For example, a table named CORPORATE.SALES could have two row partitions named "East"
and "West." The column conditions are defined accordingly, where the rows that satisfy REGION = EAST
replicate to one location and the rows that satisfy REGION = WEST replicate to a different location. The
partition scheme could be named "Sales_by_region."
l A corporate headquarters maintains a master corporate database.
l Each of the corporation's four regional offices maintains its own database.
l Corporate headquarters uses vertically partitioned replication to share some column data of a table with
the regional offices, but does not share any columns that contain sensitive data.
l The rows of the table are horizontally partitioned into four groups (East, West, North, South) for
replication, so that each region receives only the record changes that apply to it.
Horizontally partitioned replication can be used in conjunction with full-table replication for the same table, for
example to route groups of rows to different reporting systems and all rows to a backup system.
Limitations of use
Hash-based partitioning does not support the following:
Hash-based partitioning also does not support operations that cause rows to migrate into a different partition.
Examples of such operations are:
o Update a value so that it moves to a new row partition
o Table reorganization
o Split a table partition or combine two partitions
o Export or import the table
o ALTER TABLE with the MOVE option
o ALTER TABLE with the SHRINK SPACE option
o FLASHBACK TABLE
o Redefine a table by using dbms_redefinition
o UPDATE to a non-partitioned table that changes row size so that the data does not fit into the
current block
o DELETE of a row in a non-partitioned table and then re-insert.
to scheme_name to is a required keyword indicating the row partition is being added to
scheme_name.
scheme_name is the name of the partition scheme. The partition scheme
is created by the first add partition command that you issue, which will
also specify the first set of rows to partition.
If you are making heavy use of horizontal partitioning, it may help to
establish naming conventions for your partition schemes.
set Required keyword that starts the definition of the row partition.
l Issue a separate add partition command for each different target
name. Use the tablename option to specify the name.
l In the configuration file, specify any of these target tables as the
target table in the entry that uses this partition scheme. SharePlex
will detect the other names when the configuration is activated.
l Set the SP_ORD_FIRST_FIND parameter to 0 so that SharePlex
checks all of the column conditions in the partition scheme. By
default SharePlex assumes that any given row change will satisfy
only one column condition in the partition scheme. For more
information, see the SharePlex Reference Guide.
l host is the name of the target system.
l basename is the base name that is assigned to all queues.
l |# directs SharePlex to number the queues sequentially by
appending the base name with an integer, starting with 1 to the
value set with hash.
l o.SID for an Oracle target or r.database for an Open Target target.
Examples
Route different sets of rows through different post queues:
sp_ctrl> add partition to scheme1 set name = q1 and condition = "C1 >= 200" and route =
sysb:[email protected]
sp_ctrl> add partition to scheme1 set name = q2 and condition = "C1 < 200" and route =
sysb:[email protected]
Route different sets of rows to different target systems and different table names from the source:
sp_ctrl> add partition to scheme1 set name = east and condition = "area = east" and route =
[email protected] and tablename = ora1.targ
sp_ctrl> add partition to scheme1 set name = west and condition = "area = west" and route =
[email protected] and tablename = ora2.targ
Divide rows into four partitions, each processing through a different post queue:
sp_ctrl> add partition to scheme1 set hash = 4 and route = sysb:hash|#@o.ora112
l SharePlex performs the operation, but future operations on that row are not replicated. The reason: the
row no longer satisfies a column condition.
l The source and target tables of the original partition are now out of synchronization, but Post
returns no errors.
Partition shift case 2: A row that satisfies one column condition gets updated to meet a different condition:
l Post cannot find a matching target row. The reason: the original change was not replicated because it
did not meet the column condition.
l Post returns an out-of-sync error.
You can use the following method to repair the out-of-sync rows that are caused by changes to the values of
column conditions:
l Use the compare command to repair the out-of-sync rows. For more information about this command,
see the SharePlex Reference Guide.
Additionally, you can ensure that data is replicated properly by setting the following parameter on the source
prior to activating the configuration file.
l Set the SP_ORD_HP_IN_SYNC parameter to a value of 1. When this parameter is enabled, if an
UPDATE changes a column (conditional column) value resulting in a row that no longer satisfies the
correct condition, SharePlex corrects the row. Enabling this parameter causes some performance
degradation, depending on how many tables are configured for horizontally partitioned replication. See
the SharePlex Reference Guide for more information and a list of conditions corrected by this parameter.
NOTE: If you are using a column other than a key to base the column condition on, and you notice reduced
performance with horizontally partitioned replication enabled, add a log group for that column.
l NUMBER
l DATE
l CHAR
l VARCHAR
l VARCHAR2
l LONG VARCHAR
NOTES:
l Horizontally partitioned replication does not support the following:
l data types other than the ones listed in this section. This also excludes large types like LOBs and
object types such as VARRAYs and abstract data types.
l Oracle TO_DATE function
l UPDATEs or INSERTs on LONG columns larger than 100k
l Sequences
l TRUNCATEs of an Oracle partition
l value can be a string or a number. Enclose strings and dates within single quote marks (‘west’). Do not
use quote marks for numbers .
l column is the name of a column in the table that you are configuring to use horizontally partitioned
replication.
column = value
not (column = value)
column > value
value > column
column < value
column <= value
column >= value
column <> value
column != value
column like value
column between value1 and value2
not (column between value1 and value2 )
column is null
column is not null
Conditions can be combined into nested expressions with parentheses and the AND, OR, and NOT logical
connectives.
Additional guidelines
l NULLs are replicated by SharePlex in cases such as this one: not (department_id = 90). If department_
id is NULL, it is replicated. To avoid replicating records with NULLs, include the column is not null syntax
as part of the condition, for example: not (department_id = 90) and department_id is not null.
l include references to other tables in the column condition.
l exceed the 1024 bytes maximum defined storage.
l During the activation of a configuration that refers to partition schemes, SharePlex verifies the syntax in
the column conditions of those schemes. If any syntax is incorrect, the activation fails. SharePlex prints
an error to the Event Log that indicates where the error occurred.
! routing_map
Component Description
o.database The datasource designation. Use the o. notation for an Oracle source.
For database, specify the ORACLE_SID.
src_owner.table and tgt_ The specifications for the source and target tables, respectively.
owner.table
!partition_scheme The name of the partition scheme to use for the specified source and
target tables. The ! is required. The name is case-sensitive. Compound
routing of multiple partition schemes is not supported, for example
!schemeA+schemeB.
Create a separate entry for each partition scheme that you want to use
for the same source table. See Examples.
listed in a partition scheme.
l NOTES:
l This option is valid only for partitions based on a column
condition.
l If using named queues, list each queue route with this
option
l If routing the partition scheme to different targets, list each
one with this option. You can use a compound routing
map if the names of all target tables are identical.
See Examples.
Examples
Datasource: r.mydb
Datasource: r.mydb
! targsys1
! [email protected][email protected]
This placeholder is only required for partitions based on column conditions.
1. Run sp_ctrl on the source system.
2. Issue the following command with either option, depending on whether you want to view all partitions or
just those for a particular partition scheme.
sp_ctrl> view partitions for {scheme_name | all}
Supported targets
All
l Vertically partitioned replication is appropriate for reporting and other data sharing strategies, but it is not
appropriate for high availability environments. Once you configure a table for vertically partitioned
replication, SharePlex does not recognize the other columns, so data in those columns is not replicated.
l A column partition specifies the columns that you want to include in replication. Only data changes that
are made to the specified columns get sent to the target.
l An exclusion column partition specifies columns to be excluded from replication. No data from those
columns is replicated to the target.
Follow these rules to specify either type of column partition:
l There can be one partition per source table. A column partition and an exclusion partition are
mutually exclusive.
l A column list must be enclosed within parentheses.
l Separate each column name with a comma. A space after the comma is optional.
l The maximum length of a partition is 174820 bytes (the maximum line length allowed in a configuration
file). Therefore, the actual number of columns that you can list depends on the length of each name.
l The columns can be contiguous or non-contiguous in the source table. For example, you can replicate
the first, third and seventh columns of a table.
l Key columns are not required to be included in the partition.
l If using horizontally partitioned and vertically partitioned replication together for this table, all of the
columns in the partition scheme must be part of the column condition.
l Use one configuration file for all of the data that you want to replicate from a given datasource, including
tables that will have full-table replication and those that will use partitioned replication.
To configure entries for vertically partitioned replication, use the following syntax. For more information about
how to create a configuration file, see Configure data replication on page 57.
# table specification with column partition
# table specification with exclusion column partition
(tgt_col,tgt_col,...) The target columns. Use this option to map source columns to target
columns that have different owners or names. If the source and target
columns have identical owners or names, the target columns can be
omitted.
To map source columns to target columns, follow these rules:
l The syntax rules for the source column partition also apply to the
target column list.
l The target columns must have identical definitions as their
source columns, except for their names.
l List the target columns in the same logical order as their
corresponding source columns. This is required regardless of the
actual order of the target columns in the table, so that SharePlex
builds the correct correlations in the object cache. For example, a
change to the second column in the source list is replicated to the
second column in the target list.
routing_map The routing map for the column partition. The routing map can be one of
the following:
l If using horizontally partitioned replication for the source table,
specify a partition scheme, as in: !partition_scheme.
l If not using horizontally partitioned replication for the source
table, specify a routing map as follows:
l Use a simple routing map like [email protected] if
replicating the column partition to one target. A route with
a named export or post queue is supported. For more
information, see:
Configure named export queues on page 87
Configure named post queues on page 91
l Use a compound routing map like
[email protected][email protected] if replicating the
column partition to multiple target systems. IMPORTANT!
A compound routing map must be used, rather than listing
multiple targets in separate entries, because only one
column condition per source table can be listed in the
configuration file. To use a compound routing map, the
owners and names of all of the target tables must be
identical. For more information, see Routing
specifications in a configuration file on page 66.
Configuration examples
The following is a vertically partitioned replication configuration replicating to multiple targets by using a
compound routing map. To use a compound routing map for this source table, all targets must be
named scott.sal.
Datasourceo.oraA
The following is a vertically partitioned replication configuration replicating to a single target where the target
columns have different names from those of the source.
Datasourceo.oraA
Datasourceo.oraA
Contents
Overview of the change-history target
Configure change history
Capabilities
This replication strategy supports the following:
Supported sources
Oracle and SQL Server
Supported targets
Oracle target
Operations supported
SharePlex supports adding a change history row for these operations:
l INSERT
l UPDATE
l DELETE
l TRUNCATE
l ALTER TABLE to DROP COLUMN (NOTE: for ADD COLUMN, Post adds a column to the table, but does
not create a change history row.)
l ALTER TABLE to MODIFY the data type of a column
SharePlex can be configured to include the before image of update operations in the history or to control which
operation types are included in the history. For example, you could include only updates and deletes.
3. Disable triggers on the target tables.
4. Allow no DML or DDL to be performed on the target tables except by SharePlex.
5. On the source system, create a configuration file using the following syntax. For more information about
how to create a configuration file, see Configure data replication on page 57.
datasource_specification
l Datasource:o.SID is the ORACLE_SID of the source Oracle instance, or Datasource:r.database
is the name (not DSN) of the source SQL Server database.
l src_owner.table is the fully qualified name of a source object (owner.object) or a wildcarded
specification.
l !cdc: identifies the target as a change-history table.
l tgt_owner.table is the fully qualified name of the target history table or a wildcarded specification.
l host is the target system.
l c.SID specifies the target Oracle instance.
l The script only adds the default columns. To add optional columns, or to change a column name,
use the target command to add them to the Post configuration. For a list of default and optional
metadata columns, see the target command in the SharePlex Reference Guide. Some metadata
is not available for SQL Server data.
l The default columns are automatically added to new tables that are added to the SharePlex
change history configuration.
2. Set the SP_OCT_USE_SUPP_KEYS parameter to 1.
3. Set the SP_OCT_INCLUDE_UNCHANGED_COL to 1.
NOTE: When both SP_OCT_USE_SUPP_KEYS and SP_OPO_TRACK_PREIMAGE are enabled, the before
image includes all column values as they were before the change.
Include COMMITs
By default, the COMMIT record is not included in the history tables. To configure Post to insert a row for every
COMMIT, set the SP_OPO_TRACK_COMMITS parameter to 1.
Contents
Configure replication to share or distribute data
Configure replication to maintain a central datastore
Configure peer-to-peer replication
Configure replication through an intermediary system
Configure replication to maintain high availability
l reporting to support real-time decision making
l data sharing to support research and transparency requirements
l data integration throughout an enterprise
l customer service inquiries and other query-intensive applications
l data auditing and archiving
Supported targets
All
Capabilities
This replication strategy supports the following:
l Replication to one or more target systems
l Replication between databases on the same system
l Replication between schemas in the same database (Oracle)
l Identical or different source and target names
l Use of vertically partitioned replication
l Use of horizontally partitioned replication
l Use of named export and post queues
l Use of transformation
Requirements
l Prepare the system, install SharePlex, and configure database accounts according to the instructions in
the SharePlex Installation Guide.
l No DML or DDL should be performed on the target tables except by SharePlex. Tables on the target
system that are outside the replication configuration can have DML and DDL operations without affecting
replication.
l If sequences are unnecessary on the target system, do not replicate them. It can slow down replication.
Even if a sequence is used to generate keys in a source table, the sequence values are part of the key
columns when the replicated rows are inserted on the target system. The sequence itself does not have
to be replicated.
IMPORTANT! These instructions assume you have a full understanding of SharePlex configuration files. They
use abbreviated representations of important syntax elements.
For more information, see Configure data replication on page 57.
IMPORTANT!
l Configure data replication on page 57.
l Within one Oracle instance, replicate to different tables within the same schema or to the same table in
different schemas.
l Replicate between different SQL Server databases on the same system.
l Replicate to from an Oracle instance to any SharePlex-supported target on the same system.
On the Windows platform, SharePlex does not support replication between Oracle databases that reside on the
same system, but you can replicate to Open Target targets on the same system.
Configuration options
datasource_specification
Example
This example shows how you can replicate data to the same Oracle instance, to a different Oracle instance
(Unix and Linux only), and to different target types, all on the same local system.
Datasource:o.oraA
hr.emp hr.emp2 [email protected]
hr.sal hr.sal2 [email protected]
fin.* fin.* [email protected]
act.* !file hostA
datasource_specification
Example
The last line in this example shows how you can replicate data to different target types on the same remote
target system.
Datasource:o.oraA
hr.emp hr.emp2 [email protected]
hr.sal hr.sal2 [email protected]
fin.* !file hostB
Configuration options
If the target specification of a source object is identical on all target systems, you can use a compound
routing map, rather than type a separate entry for each route. For more information, see Configure data
replication on page 57.
datasource_specification
datasource_specification
Example
NOTE: This example does not cover all possible source-target combinations. The last entry in this example
shows the use of horizontally partitioned replication to distribute different data from the sales.accounts table to
different regional databases.
Datasource:o.oraA
hr.emp hr.emp2 [email protected]
hr.emp hr."Emp_3" [email protected]
hr.emp !jms hostX
cust.% cust.% [email protected][email protected]
sales.accounts sales.accounts !regions
l Real-time reporting and data analysis
l The accumulation of big data into a central datastore/mart or warehouse
Supported sources
Oracle and SQL Server
Supported targets
Oracle and Open Target
Capabilities
This replication strategy supports the following:
Requirements
l Prepare the system, install SharePlex, and configure database accounts according to the instructions in
the SharePlex Installation Guide.
l No DML or DDL should be performed on the target tables except by SharePlex. Tables on the target
system that are outside the replication configuration can have DML and DDL operations without affecting
replication.
l Each source system must replicate a different set of data to the central target. If any source systems
replicate the same data to the central target system, it is considered to be active-active replication. For
more information, see Configure peer-to-peer replication on page 125.
l If sequences are unnecessary on the target system, do not replicate them. It can slow down replication.
Even if a sequence is used to generate keys in a source table, the sequence values are part of the key
columns when the replicated rows are inserted on the target system. The sequence itself does not have
to be replicated.
Deployment options
You have two options for deploying SharePlex to replicate from many source systems to one target system.
l One instance of SharePlex processes all of the incoming data from all sources. For more information,
see Deploy with one instance of SharePlex on the target system on page 121.
l Multiple instances of SharePlex each process the incoming data from a different source. For more
information, see Deploy with multiple instances of SharePlex on the target system on page 122.
In either deployment, if any source system cannot make a direct connection to the target system, you can use
cascading replication for that route to enable SharePlex to cascade the data an intermediary system that
allows connection to the target. For more information, see Configure replication through an intermediary
system on page 145.
NOTE: The SharePlex compare and repair commands cannot be used in a cascading configuration.
l Install SharePlex in the normal manner, with one port number and one variable-data directory on each
system (sources and target).
l Make certain that when you install SharePlex, you create a database account for SharePlex for each
installation.
l IMPORTANT! Use the same port number for SharePlex on all systems.
l A unique sp_cop process
l A unique variable-data directory
l A unique port number on which sp_cop runs
l A unique database account that the processes of that instance use to interact with the database.
By running multiple, distinct instances of SharePlex, you can isolate each source-target replication stream from
the others. It enables you to:
l Avoid contention problems that can occur if multiple processes must compete for access to the same
queues in a single variable-data directory.
Select either of the setup options presented in Run multiple instances of SharePlex on page 43. These
procedures will guide you through the steps to establish independent instances of SharePlex on the target. If
you already installed SharePlex on the target, a variable-data directory, database account, and port number
already exist. You can dedicate that SharePlex instance to one of the source systems, and then create
additional instances on the target per those instructions.
Install one instance of SharePlex on each source system, as directed in the SharePlex Installation Guide. Match
the port numbers of those instances to the port numbers of their associated target variable-data directories. If
you already installed SharePlex on the source systems, you can change the port numbers as needed. For more
information, see Set the SharePlex port number on page 323.
Configuration
Create a configuration file on each source system that replicates the objects from that system to the central
target. For more information about how to create a configuration file, see Configure data replication on page 57.
datasource_specification
Example
This example shows data from datasource oraA on hostA and datasource oraB on hostB replicating to oraC
on system hostC.
1. Create or alter the target table to include a column named SHAREPLEX_SOURCE_ID. This is the
column that will contain the source ID value.
NOTE: You can change this name by running the target command with the set metadata option, before
continuing further. See the SharePlex Reference Guide for more information.
2. Choose a unique ID for each of the source systems. Any single alphanumeric string is permitted.
3. On the target, run sp_ctrl for each Post process.
l Maintain the availability of mission-critical data by operating multiple instances in different locations.
l Distribute heavy online transaction processing application (OLTP) loads among multiple points
of access.
l Limit direct access to an important database, while still enabling users outside a firewall to make
updates to their own copies of the data.
An example of peer-to-peer replication is an e-commerce company with three identical databases. When users
access the application from a web browser, the web server connects to any of those databases sequentially in a
round-robin configuration. If one of the databases is unavailable, the server connects to a different available
database server. Thus the configuration serves not only as a failover resource, but also as a means of
distributing the load evenly among all the peers. Should the company need to produce business reports, user
access to one of the databases can be stopped temporarily, and that database can be used to run the reports.
NOTE: Data changes made in peer-to-peer replication are prevented from looping back from one
machine to another because Capture ignores transactions performed on the local system by the
Post process.
Peer-to-peer replication is not appropriate for all replication environments. It requires a major commitment to
database design that might not be practical when packaged applications are in use. It also requires the
development of conflict resolution routines to prioritize which transaction SharePlex posts to any given database
if there are multiple changes to the same data at or near the same time.
Capabilities
This replication strategy supports the following:
For SQL Server, the expected behavior for handling conflicts is as follows:
l On UPDATE, the latest transaction will always override.
l On INSERT, the host will always override.
This replication strategy does not support the following:
l Replication of LOBs. If tables with LOBs are included in replication the LOBs will be bypassed by conflict
resolution, causing the potential for data to be out of synchronization.
l Column mapping and partitioned replication is not appropriate in a peer-to-peer configuration.
Requirements
l Every table involved in peer-to-peer replication must have a primary key or a unique key with no nullable
columns. Each key must uniquely identify the same owner.table.row among all of the databases that will
be involved in replication, and the logging of the key columns must be enabled in the database. See
additional requirements in this topic.
l Prepare the system, install SharePlex, and configure database accounts according to the instructions in
the SharePlex Installation Guide.
l Enable supplemental logging for primary keys, unique keys, and foreign keys on all databases in the
peer-to-peer configuration.
l Enable archive logging on all systems.
l You must understand the concepts of synchronization. For more information, see Understand the
concept of synchronization on page 30.
Overview
In peer-to-peer replication, DML changes are allowed on copies of the same tables in different databases,
usually on different systems, while SharePlex keeps them all current through replication. If a record is changed
in more than one database at (or near) the same time, conflicts can occur, and conflict-resolution logic must be
applied to resolve the discrepancy.
What is a conflict?
A conflict is defined as an out-of-sync condition — source and target tables are not identical. You can predict
that out-of-sync (conflict) situations will occur when a DML statement constructed by SharePlex fails to execute
on a row in the target table because of the following reasons:
l Post applies a replicated INSERT but a row with the same key already exists in the target. Post applies
the following logic:
o If all of the current values in the target row are the same as the INSERT values, Post considers
the rows to be in-sync and discards the operation.
NOTE: You can configure Post so that it does not consider non-key values when posting an
INSERT. See the SP_OPO_SUPPRESSED_OOS parameter in the SharePlex Reference Guide.
l Post applies a replicated UPDATE but either cannot find a row in the target with the same key value as
the one in the UPDATE or Post finds the correct row but the row values do not match the before values in
the UPDATE. Post applies the following logic:
o If the current values in the target row match the after values of the UPDATE, Post considers the
rows to be in-sync and discards the operation.
o If the values in the target row do not match the before or after values of the UPDATE, Post
considers this an out-of-sync condition.
NOTE: You can configure Post so that it returns an out-of-sync message if the current values in
the target row match the after values of the UPDATE. See the SP_OPO_SUPPRESSED_OOS
parameter in the SharePlex Reference Guide.
l A DELETE is performed on the source data, but Post cannot locate the target row by using the key. When
Post constructs its DELETE statement, it includes only the key value in its WHERE clause. If the row does
not exist in the target, Post discards the operation.
Now the row looks like this:
NOTE: For more information, see Appendix A: Peer-To-Peer Diagram on page 338.
Deployment
To deploy peer-to-peer replication, perform the following tasks:
1. Evaluate the data for suitability to a peer-to-peer environment. Make any recommended alterations. For
more information, see Evaluate the data on page 128.
2. Configure SharePlex so that data from each system replicates to all other systems in the peer-to-peer
environment. For more information, see Configure replication on page 132.
3. Develop conflict resolution routines that provide rules for how Post handles conflicts. For more
information, see Develop conflict resolution routines on page 133.
4. Create a conflict resolution file. SharePlex refers to this file to determine the correct procedure to
use when a conflict occurs. For more information, see List the routines in conflict_resolution.SID
on page 142.
These requirements must be considered during the architectural phase of the project, because they demand
cooperation with the application. Consequently, many packaged applications are not suitable for a peer-to-peer
deployment because they were not created within those guidelines.
Following are more detailed explanations of each of the requirements.
Keys
The only acceptable key in peer-to-peer replication is a primary key. If a table has no primary key but has a
unique, not-NULL key, you can convert that key to a primary key. LONG columns cannot be part of the key.
If you cannot assign a primary key, and you know all rows are unique, you can create a unique index
on all tables.
The primary key must be unique among all of the databases in the peer-to-peer replication network, meaning:
l it must use the same column(s) in each corresponding table in all databases.
l key columns for corresponding rows must have the same values.
The primary key must be created to contain enough information about a row so there can be no question about
the uniqueness of that row, and so that there will be a conflict if a replicated operation would violate uniqueness.
The primary key value cannot be changed.
Supplemental logging of primary and unique keys must be enabled in the database.
Using only a sequence as the primary key probably will not suffice for peer-to-peer replication. For example,
suppose the sample table uses sequences to generate values for key column EmpNo. Suppose UserA gets the
next sequence value on SysA and inserts a row for “Jane Wilson.” UserB gets the next sequence value on SysB
and also inserts a row for “Jane Wilson.” Even if the sequence numbers are different on each system, so there
are no unique key violations on the replicated INSERTs, data integrity is compromised because there are now
two entries for “Jane Wilson” in the databases, each with a different key. Subsequent UPDATEs will fail. The
solution is to include other unique columns in the key, so that there is enough information to ensure uniqueness
and ensure a conflict that can then be resolved through resolution logic.
Sequences
SharePlex does not support peer-to-peer replication of sequences. If the application uses sequences to
generate all or part of a key, there must be no chance for the same range of values to be generated on any other
system in the peer-to-peer configuration. You can use a sequence server or you can maintain sequences
separately on each server and make sure you partition a unique range to each one. Quest recommends using
n+1 sequence generation (where n = the number of systems in replication). Depending on the type of
application, you can add a location identifier such as the system name to the sequence value in the primary key
to enforce uniqueness.
l Disable the triggers.
l Keep them enabled, but alter them to ignore the SharePlex user on all instances in the peer-to-peer
configuration. SharePlex provides the sp_add_trigger.sql script for this purpose. This script puts a
WHEN clause into the procedural statement of the trigger that tells it to ignore the Post process. For more
information about this script, see the SharePlex Reference Guide.
l SP_OPO_DEPENDENCY_CHECK parameter to 2
l SP_OCT_REDUCED_KEY parameter to 0
l SP_OPO_REDUCED_KEY parameter to 0 (although in other replication scenarios this parameter can
be set to different levels, it must be set to 0 in a peer-to-peer configuration)
1. A customer buys a book through the database on one server. The quantity on hand reduces from 100
books to 99. SharePlex replicates that UPDATE statement to the other server. (UPDATE inventory SET
quantity = 99 WHERE book_ID = 51295).
2. Before the original UPDATE arrives, another customer buys two copies of the same book on another
server (UPDATE inventory SET quantity = 98 WHERE book_ID = 51295), and the quantity on that server
reduces from 100 books to 98.
3. When the Post process attempts to post the first transaction, it determines that the pre-image (100 books)
on the first system does not match the expected value on the second system (it is now 98 as a result of
the second transaction). Post returns an out-of-sync error.
A conflict resolution procedure could be written, but how would the correct value be determined? The correct
value in both databases after the two transactions should be 97 books, but no matter which of the two UPDATE
statements is accepted, the result is incorrect.
For this reason, peer-to-peer replication is not recommended for applications maintaining account or inventory
balances using UPDATEs. If you can use a debit/credit method of maintaining balances, you can use INSERT
statements (INSERT into inventory values “n”,...) instead of UPDATE statements. INSERT statements do not
require a before-and-after comparison with a WHERE clause, as do UPDATE statements.
If your application must use UPDATE statements, you can write a conflict resolution procedure to determine the
1. Suppose a row (an account) in the example table has a balance of $1500 on SysA. CustomerA makes a
deposit of $500 on that system. The application uses an UPDATE statement to change the balance to
$2000. The change is replicated to SysB as an UPDATE statement (such as UPDATE...SET
balance=$2000 WHERE account_number=51295).
2. Before the change arrives, CustomerA’s spouse makes a withdrawal of $250 on SysB, and the
application updates the database on that system to $1250. When CustomerA’s transaction arrives from
SysA and Post attempts to post it to SysB, there is a conflict, since the pre-image from the source system
is $1500, but the pre-image on the target is $1250 because of the spouse’s transaction — not a match.
You can write a conflict resolution routine to accommodate this kind of transaction by calculating the absolute
(or net) change in the account, then using that value to resolve the conflict. For example:
if existing_row.balance <> old.balance then old.balance - new.balance = balance_change; update
existing_row set balance = existing_row.balance - balance_change;
The result of this procedure would be to update the account balance to $1750, the net effect of depositing $500
and withdrawing $250. On SysB, the routine directs SharePlex to subtract the new (replicated) balance of 2000
from the old balance of 1500 for a net change of -500. The UPDATE statement sets the balance value to 1250 -
(-500) = 1750, the correct value.
On SysA, the replicated value of 1250 is subtracted from the old balance of 1500 to get the net change of 250.
The UPDATE statement subtracts that value from the existing balance of 2000 to get the correct value of 1750.
Priority
When the environment is established to avoid or resolve conflict when SharePlex searches for the correct row to
change, the only remaining conflict potential is on fact data — which change to accept when the values for the
same column in the same row differ on two or more systems. For this, your application must be able to accept
the addition of timestamp and source columns, with source being the name of the local system for the table.
The following explains how those columns play a vital role when using a conflict resolution routine to
establish priority.
Trusted source
You must assign a particular database or server to be the prevailing, or trusted, source for two reasons:
Timestamp
It is recommended that you include a timestamp column in the tables and assign priority in the conflict resolution
routine to the earliest or latest timestamp. However, the timestamp must not be part of a key, or it will cause
conflicts. SharePlex cannot locate rows if a key value changes — and the key value will change if one of the
columns is a timestamp.
For timestamp priority to work, you must make sure all of the servers involved agree on the date and time.
Tables on servers in different time zones can use Greenwich Mean Time (GMT).
The default date format for SharePlex conflict resolution is MMDDYYYY HH24MISS. Tables with default dates
must use that format, or conflict resolution will return errors. Before creating a table with a default date, use the
following command to change the date format in SQL*Plus.
ALTER SESSION SET nls_date_format = 'MMDDYYYYHH24MISS'
Configure replication
The configuration files on the systems in a peer-to-peer configuration are identical with the exception of the
datasource specification and the routing.
l hostA is the first system.
l hostB is the second system.
l hostC is the third system.
l ownerA.object is the fully qualified name of an object on hostA or a wildcarded specification.
l ownerB.object is the fully qualified name of an object on hostB or a wildcarded specification.
l ownerC.object is the fully qualified name of an object on hostC or a wildcarded specification.
l oraA is the Oracle instance on hostA.
l oraB is the Oracle instance on hostB.
l oraC is the Oracle instance on hostC.
IMPORTANT!
l See Configure data replication on page 57 for more information about the components of a
configuration file.
Datasource:o.oraA
Configuration on hostB
Datasource:o.oraB
Configuration on hostC
Datasource:o.oraC
Example
Datasource:o.oraA
hr.emp hr.emp [email protected]
hr.sal hr.sal [email protected]
cust.% cust.% [email protected]
l A generic PL/SQL interface that you can use to write basic routines based on DML operation types. For
more information, see How to write a routine using the SharePlex generic interface on page 134.
l Packaged routines that perform basic conflict resolution based on a key or column value, which can be
used as a backup measure in case the custom routines fail. For more information, see How to use the
SharePlex prepared routines on page 139.
IMPORTANT!
l This documentation provides guidelines, examples and templates to assist you, but do not use them as
your own routines.
l Test your conflict resolution routines before you put them into production to make sure they work as
intended, and to make sure that one routine does not counteract another one.
l By default, SharePlex does not stop for out-of-sync conditions. If failed attempts at conflict resolution are
not resolved, the databases can become more and more out of synchronization. Check the Event Log
frequently to monitor for out-of-sync warnings by using the show log command in sp_ctrl. See the
SharePlex Reference Guide for more information about show log and other SharePlex commands.
l Updates are occasionally made to the conflict resolution logic, so refer to the Release Notes and
documentation for your version of SharePlex for any additional information that augments or supersedes
these instructions.
l The same PL/SQL package is used for both generic conflict resolution and transformation (its name is
sp_cr). Use either generic conflict resolution or transformation for a table, but not both. Transformed
tables cannot be compared by SharePlex and conflict resolution cannot succeed. If both are used,
SharePlex only calls the transformation routine. If appropriate, you can use generic conflict resolution
and transformation for different tables in the same configuration. For more information, see Configure
data transformation on page 168.
l Conflict resolution cannot be used for DDL changes.
l Any table to be accessed through PL/SQL for conflict resolution requires implicitly granted privileges
from the owner of the object to SharePlex.
l Conflict resolution does not support changes to LONG or LOB columns.
NOTE: If you ran the SharePlex conflict resolution demonstration in the SharePlex Installation and Setup Guide,
you can view a sample generic conflict resolution routine by viewing the od_employee_gen routine that was
installed in the database used for the demonstration.
l splex is the SharePlex schema.
l sp_cr is the name of the package that contains the PL/SQL record and table structures.
l row_typ is the name of the PL/SQL record that passes in/out variables (see Package definition).
l col_def_type is the name of the PL/SQL table that stores column information (see col_def_type table).
Package definition
SharePlex defines PL/SQL record and table structures in a public package named sp_cr in the SharePlex
database schema. The package uses the following parameters.
IN variables
For each row operation that causes a conflict, SharePlex passes this metadata information to your procedure.
Variable Description
src_host The name of the source system (where the operation occurred). It is
case-sensitive and is passed using the same case as on the source
system, for example SysA. If there are named post queues in use on the
target system, this variable consists of the name of the post queue, for
example postq1.
src_ora_sid The ORACLE_SID of the source database. It is case-sensitive and is
passed in the same case as in the oratab file, Windows Registry or
V$PARAMETER table.
src_ora_time The timestamp of the change record in the source redo log.
source_rowid The row ID of the source row. It is passed as a literal within single
quotes, for example ‘123456’.
target_rowid The row ID of the corresponding row in the target database. SharePlex
obtains the row ID by querying the target database. It is passed as a
literal within single quotes, for example ‘123456’. If the row cannot be
found using the PRIMARY key, the value is NULL.
statement_type A letter, either I, U or D, indicating whether the operation is an INSERT,
UPDATE or DELETE statement.
source_table The owner and name of the source table, expressed as owner.table.
This value is case-sensitive and matches the way the table is named in
the database. It is passed within double quotes, for example
"scott"."emp."
target_table The owner and name of the target table, expressed as owner.table. This
value is case-sensitive and matches the way the table is named in the
database. It is passed within double quotes, for example "scott"."emp."
oracle_err This is different, depending on whether the procedure is being used for
conflict resolution or transformation.
Transformation: SharePlex passes a value of 0 for this variable. This
variable is only used for conflict resolution.
Conflict resolution: The Oracle error number that caused the conflict.
OUT variables
These variables direct the action of SharePlex based on whether the procedure succeeded or failed).
Variable Description
status Defines whether or not the procedure succeeded. You must specify a
value for this parameter.
l A value of 0 implies successful execution. It acts differently,
depending on whether the procedure is used for conflict
resolution or transformation.
Transformation: Post does not write any SQL. SharePlex does
not write any error messages to the Event Log when
transformation succeeds. It continues its processing by reading
the next replicated operation in the post queue.
l Conflict resolution: A value of 0 directs SharePlex to proceed
with the SQL statement. SharePlex does not write any log entries
to the Event Log when conflict resolution succeeds.
l A value of 1 implies that the procedure was unsuccessful. In this
case, the action SharePlex takes depends on what you specified
as the action variable.
l (Transformation only) A value of 7 implies unsuccessful
execution and instructs the Post process to stop.
action Defines the action that you want SharePlex to take. This is different,
depending on whether the procedure is used for transformation or
conflict resolution.
Transformation: You must specify a value of 0 for this parameter, which
directs SharePlex NOT to post the SQL statement. Your transformation
routine is responsible for posting the results of the transformation either
to the target table or another table. The outcome of this action depends
on what you specify for the reporting variable
Conflict resolution: Specifies the action to take as a result of an
unsuccessful conflict resolution procedure. You must specify a value for
this parameter.
l A value of 0 directs SharePlex NOT to post the SQL statement.
The outcome of this action depends on what you specify for the
reporting variable.
In addition, it directs SharePlex to try the next conflict resolution
procedure that you listed in the conflict resolution file, if one
exists.
l The value of 1 is reserved for internal SharePlex use. Do not use
it.
l A value of 2 directs SharePlex to try the next conflict resolution
procedure that you listed in the conflict resolution file, if one
exists.
reporting Determines how SharePlex reports unsuccessful procedural results. You
must specify a value for this parameter.
l A value of 0 directs SharePlex NOT to report an error or write the
failed SQL statement to the SID_errlog.sql log.
l Values 1 and 2 are reserved for internal SharePlex use. Do not
use them.
l A value of 3 directs SharePlex to write the failed SQL statement
to the SID_errlog.sql log and report an error to the Event Log.
col_def_type table
SharePlex creates a col_def_tabtyp PL/SQL table for each replicated operation. This table stores column
information. It is different depending on whether the procedure is used for transformation or conflict resolution.
l Transformation: For each row operation, SharePlex writes column information to col_def_type.
l Conflict resolution: For each row operation that causes a conflict, SharePlex writes column information
to col_def_tabtyp.
All fields are passed by SharePlex to your routine, although not all will have values if SharePlex cannot
locate the row.
Following is the data type that is used to populate the col_def_tabtyp table.
Description of col_def_tabtyp
Column Description
column_name Tells your procedure the name of the column that was replicated from
the source table, for example emp_last_name. This value is not case-
sensitive.
data type Tells your procedure the data type of the data in the replicated column,
for example VARCHAR2. This value is always in capital letters.
is_key Tells your procedure whether or not the column is a key column. If it is a
key column, SharePlex passes a value of TRUE. If the column is not part
of a key, SharePlex passes a value of FALSE.
is_changed Tells your procedure whether or not the column value has changed. If it
is changed, SharePlex passes a value of TRUE. If the column is not
changed, SharePlex passes a value of FALSE.
l For INSERTs, is_changed is TRUE for non-NULL values,
because none of the columns existed in the database. If a NULL
value is inserted, is_changed is FALSE.
l For UPDATEs, is_changed is TRUE for non-key columns. For
key columns, is_changed normally is FALSE, but SharePlex will
pass a value for a changed key column.
Conflict resolution only: If a key value also was changed on the
target system, SharePlex will not be able to locate the correct
row, and conflict resolution could fail.
l For DELETEs, is_changed is always FALSE, because
SharePlex replicates only the key values for a DELETE
statement.
old_value Tells your procedure the old value of the replicated column, before it was
changed on the source system. This column is NULL for INSERTs,
because the row did not exist in the target database before the INSERT.
Conflict resolution only: This is the pre-image against which SharePlex
compared the source and target columns as part of its synchronization
check for UPDATEs and DELETEs. If the old value passed by SharePlex
does not match the current_value value obtained from the target row,
then there is a conflict.
new_value Tells your procedure the new value of the replicated column, as
changed on the source system.
current_value Tells your procedure the current value of the column in the target table. If
SharePlex cannot locate the target row, the value is NULL.
The following tables illustrate the possible outcomes of each type of operation.
INSERT operation
1 When an INSERT fails, it is because a row with the same PRIMARY key already exists in the target database.
SharePlex does not return the current value for INSERTs.
UPDATE operation
1 (Conflict resolution) When an UPDATE fails, it is because SharePlex cannot find the row by using the
PRIMARY key and the pre-image. If the row cannot be found, SharePlex searches for the row by using only the
PRIMARY key. If SharePlex finds the row, it returns the current value for the key column as well as the changed
columns. If SharePlex cannot find the row by using just the PRIMARY key, then SharePlex returns a NULL.
2 (Transformation) For an UPDATE, SharePlex cannot locate a row using the PRIMARY key and the pre-
images, because the pre-images are different due to transformation. As an alternative, it searches for the row
using just the PRIMARY key. If it finds it, SharePlex returns the current value for the key column as well as the
changed columns. If it cannot locate the row using just the PRIMARY key, then current_value is NULL
DELETE operation
1 When a DELETE fails, it is because SharePlex could not find the row by using the PRIMARY key. Therefore,
SharePlex returns a NULL.
!UpdateUsingKeyOnly
This routine works for UPDATE operations. It provides conflict resolution that relies solely on the key value of the
changed row.
NOTE: This routine can be used only with an Oracle to Oracle source-target combination.
Supported source-target: This routine can be used only with Oracle to Oracle source-target combinations.
Normally, when SharePlex builds a SQL statement to post data, the WHERE clause uses both the key and the
pre-image of the columns that changed to ensure synchronization. The !UpdateUsingKeyOnly routine directs
SharePlex to post the data even though the pre-image values do not match, assuming the keys match.
If appropriate, this routine can be used as the sole routine for UPDATEs, but with the understanding that it does
not include logic that assigns priority, such as system or time priority, in case of multiple concurrent UPDATEs.
To avoid out-of-sync errors, Quest recommends using !UpdateUsingKeyOnly in conjunction with other, more
specific routines, relying on !UpdateUsingKeyOnly as a final option if the custom routines fail.
IMPORTANT: !UpdateUsingKeyOnly must be the last entry in the list of routines, thus assigning it last priority.
In the following example, when there is a conflict for owner.table1 during an UPDATE, SharePlex calls the two
custom routines first (in order of priority) and then calls the !UpdateUsingKeyOnly routine.
owner.table1 u owner.procedure_up_A
owner.table1 u owner.procedure_up_B
owner.table1 u !UpdateUsingKeyOnly
The !UpdateUsingKeyOnly name is case sensitive. It must be typed exactly as shown in these instructions, with
no spaces between words. Do not list an owner name with this routine in the configuration file. For more
information, see List the routines in conflict_resolution.SID on page 142.
For INSERT and DELETE operations, custom logic must be used.
!HostPriority
This prepared conflict resolution routine works for INSERT, UPDATE, and DELETE operations. It provides host-
based conflict resolution by assigning priority to the row change that originated on the trusted source system. To
define the trusted source, set the SP_OPO_TRUSTED_SOURCE or SP_OPX_TRUSTED_SOURCE parameter
to the name of the source system.
Resolution logic
INSERT If the source is the one specified with SP_OPO_TRUSTED_SOURCE or SP_OPX_TRUSTED_
SOURCE, convert the INSERT to an UPDATE and overwrite the existing row.
Otherwise, discard the change record and do nothing to the target row.
UPDATE (Oracle only) If the source is the one specified with SP_OPO_TRUSTED_SOURCE, overwrite the
existing row using an UPDATE and use only the key columns in the WHERE clause. Otherwise,
discard the change record and do nothing to the target row.
(SQL Server only) The latest transaction will always override.
DELETE Ignore the out-of-sync error and do nothing to the target row.
For more information, see List the routines in conflict_resolution.SID on page 142.
!MostRecentRecord
This prepared routine works for INSERT, UPDATE, and DELETE operations. It provides time-based conflict
resolution by assigning priority to the most recent row change, as determined by a timestamp.
NOTE: This routine can be used only with an Oracle to Oracle source-target combination.
To capture the timestamp, tables using this routine must have a non-NULL timestamp column that is updated
with every INSERT and UPDATE on the table. If the timestamp column in the DML, or in the existing row, is
NULL, this routine cannot resolve the conflict.
This routine requires the SP_OCT_REDUCED_KEY parameter to be set to 0 on the source system, so that all of
the pre-image values of UPDATES are available to the Post process.
Resolution logic
DELETE Ignore the conflict (out-of-sync message).
Where col_name is the timestamp column to be used by the routine.
See List the routines in conflict_resolution.SID on page 142.
!LeastRecentRecord
This prepared routine works for INSERT, UPDATE, and DELETE operations. It provides time-based conflict
resolution by assigning priority to the least recent row change, as determined by a timestamp.
NOTE: This routine can be used only with an Oracle to Oracle source-target combination.
To capture the timestamp, tables using this routine must have a non-NULL timestamp column that is updated
with every INSERT and UPDATE on the table. If the timestamp column in the DML, or in the existing row, is
NULL, this routine cannot resolve the conflict.
DELETE Ignore the conflict (out-of-sync message).
Where col_name is the timestamp column to be used by the routine.
See List the routines in conflict_resolution.SID on page 142.
l owner.object is the owner and name of a target object, or a wildcarded entry. (See Syntax rules
on page 143)
l i| u | d is the type of operation that creates the conflict that is resolved with the specified procedure. You
can specify any or all operation types, for example id or iud. Upper or lower case are both valid.
l owner.procedure is the owner and name of the conflict resolution procedure that will handle the
specified object and operation type.
l The scott.sal_cr routine is used for the scott.sal table before the scott.emp_cr1 procedure is used for
that table.
l The scott.emp_cr1 procedure is used before the scott.emp_cr2 procedure for all tables meeting the
search criteria, and so forth.
l For scott.cust, a procedure is called for UPDATEs before the other routines are used for all operations.
1. Run sp_ctrl on the target system.
2. Issue the following command:
sp_ctrl> set param SP_OPO_LOG_CONFLICT {1 | 2}
l A setting of 1 enables the logging of conflict resolution to the SHAREPLEX_CONF_LOG table.
l A setting of 2 enables the logging to the SHAREPLEX_CONF_LOG table and also directs Post to
log the following to the Post process log:
o conflict resolution routine called
o tablename
o source rowid
o whether or not the conflict was resolved
NOTE: A setting of 2 may affect the performance of Post as a result of making the query.
3. Restart Post.
Post logs the information to a table named SHAREPLEX_CONF_LOG. The following describes this table.
the ID_errlog.sql file, where ID is the source database identifier.
l Your replication strategy exceeds the 1024 routes that are allowed directly from a given source system:
You can send data to the intermediary system and then broadcast to the additional targets from there.
l The source has no direct connection to the ultimate target, because of firewall restrictions or other
factors. You can cascade to a system that does allow remote connection from the source system.
To use a cascading strategy, the source machine must be able to resolve the final target machine name(s),
although the ability to make a direct connection is not required.
Supported targets
Oracle or SQL Server (intermediary system)
Oracle and Open Target (final target)
Capabilities
This replication strategy supports the following:
l Replication to one or more target systems
l Identical or different source and target names
l Use of vertically partitioned replication
l Use of horizontally partitioned replication
l Use of named export and post queues
Requirements
l Prepare the system, install SharePlex, and configure database accounts according to the instructions in
the SharePlex Installation Guide.
IMPORTANT! Create the same SharePlex user on all systems if you will be using SharePlex to post to a
database on the intermediary system.
l Disable triggers that perform DML on the target objects.
l No DML or DDL should be performed on the target tables except by SharePlex. Tables on the target
system that are outside the replication configuration can have DML and DDL operations without affecting
replication.
l If sequences are unnecessary on the target system, do not replicate them. It can slow down replication.
Even if a sequence is used to generate keys in a source table, the sequence values are part of the key
columns when the replicated rows are inserted on the target system. The sequence itself does not have
to be replicated.
IMPORTANT! These instructions assume you have a full understanding of SharePlex configuration files. They
use abbreviated representations of important syntax elements. For more information, see Configure data
replication on page 57.
l source_specification[n] is the fully qualified name of a source object (owner.object) or a wildcarded
specification.
l target_specification[n] is the fully qualified name of a target object or a wildcarded specification.
l host is the name of a system where SharePlex runs. Different systems are identified by appending a
letter to the names, like hostB.
l db is a database specification. The database specification consists of either o. or r. prepended to the
Oracle SID, TNS alias, or database name, as appropriate for the connection type. A database identifier is
not required if the target is JMS, Kafka, or a file.
IMPORTANT!
l Configure data replication on page 57.
Deployment options
To cascade data, you have the following options:
l If there is a database on the intermediary system, you can configure SharePlex to post to that database
and then capture the data again to replicate it to one or more remote targets.
l If there is not a database on the intermediary system, you can configure SharePlex to import, queue,
and then export the data to one or more remote targets. There is no Capture process on the system.
This is known as a pass-through configuration. It passes the data directly from the source system to
the target(s).
l SharePlex database accounts must exist on all systems and must be the same name on all systems.
This account is usually created when SharePlex is installed. See the SharePlexInstallation Guide for
more information.
l Triggers must be disabled in the intermediary database, as well as on the target system.
l Oracle DDL replication is not supported from an Oracle database on the intermediary system to the
target systems. It is supported only from the source system to the intermediary system.
l You create two configuration files: one on the source system, and one on the intermediary system.
l Enable archive logging on the source and intermediary systems in case the redo logs wrap before
Capture is finished with them.
datasource_specification
l DDL replication is not supported.
l You create one configuration file, which is on the source system.
datasource_specification
l The hostB*host syntax configures the pass-through behavior.
l If using a compound routing map where all data passes through the intermediary system first, make
certain to use the hostB* component in each target route.
l You can also use a compound routing map where data from a source object is replicated directly to
one target, and also through the intermediary system to another target, as in the third line of this
configuration file.
Example
Datasource:o.oraA
hr.emp hr.emp2 hostB*[email protected]
hr.emp hr."Emp_3" hostB*[email protected]
cust.% cust.% hostB*[email protected][email protected]
l Disaster recovery
l Continuous operation of business applications throughout maintenance cycles or mechanical failures
In this strategy, SharePlex operates as follows:
Supported sources
Oracle
Supported targets
Oracle
Capabilities
This replication strategy supports the use of named export and post queues.
NOTE: Column mapping and partitioned replication is not appropriate in a high availability configuration.
Source and target objects can have different names but this makes the management of a high-availability
structure more complicated.
Requirements
l Prepare the system, install SharePlex, and configure database accounts according to the instructions in
the SharePlex Installation Guide.
l All objects must exist in their entirety on both systems.
l The target objects must have the same structure and qualified names as their source objects.
l Enable archive logging on all systems.
l Create a script that denies INSERT, UPDATE and DELETE operations to all users except SharePlex.
For failover purposes, the following are required:
l Make the applications used on the primary system available on the secondary system.
l Copy non-replicated database objects and critical files outside the instance to the secondary system.
l Create a script that grants INSERT, UPDATE and DELETE privileges to all users, which can be run
during a failover procedure.
l Create a script that enables constraints on the secondary system to be used during a failover procedure.
l Develop a failover procedure for relocating users to the secondary system.
NOTE: If you use an Oracle hot backup to create the secondary instance, keep the script. It can be modified to
re-create the primary instance.
l hostA is the primary system.
l hostB is the secondary system.
l ownerA.object is the fully qualified name of an object on hostA or a wildcarded specification.
l ownerB.object is the fully qualified name of an object on hostB or a wildcarded specification.
l oraA is the Oracle instance on hostA.
l oraB is the Oracle instance on hostB.
IMPORTANT!
l See Configure data replication on page 57 for more information about the components of a
configuration file.
Configuration
A high availability configuration uses two configurations that are the reverse of each other. To replicate all
objects in the database, you can use the config.sql script to simplify the configuration process. For more
information, see Configuration Scripts on page 1.
Datasource:o.oraA
Datasource:o.oraB
Contents
DDL that SharePlex supports
Control Oracle DDL replication
Filter DDL Replication
Best practices for ALTER TABLE DDL
DDL logging and error handling
SharePlex provides default DDL support for objects in the configuration file. You can expand this support
through parameter settings.
See the SharePlex Release Notes for detailed information about the DDL that is supported by SharePlex.
l TRUNCATE TABLE
l ALTER TABLE to:
ADD, MODIFY, DROP, SPLIT, COALESCE, MOVE, TRUNCATE, EXCHANGE
PARTITION/SUBPARTITION
ADD, MODIFY, or DROP columns
when:
l the affected object exists in the source and target at the time of activation and
l its name is listed in the configuration file (explicitly or through wildcard).
This functionality is controlled by the SP_OCT_REPLICATE_DDL parameter. The valid values are as follows:
0 (disable replication of both ALTER TABLE and TRUNCATE)
1 (enable ALTER replication only)
2 (enable TRUNCATE replication only)
3 (enable replication of ALTER and TRUNCATE)
l replicates the CREATE to add the object to the target
l adds the object to replication
l maintains that object through future DDL and DML changes
The Auto-Add feature is controlled by the SP_OCT_AUTOADD_ENABLE parameter, which is set to 1 (enabled)
by default.
See the SharePlex Reference Guide for details about this parameter.
CREATE / DROP TRIGGER SP_OCT_REPLICATE_TRIGGER
CREATE / DROP SYNONYM SP_OCT_REPLICATE_SYNONYM
GRANT SP_OCT_REPLICATE_GRANT
See the SharePlex Reference Guide for details about these parameters.
1. Make certain the SP_OCT_AUTOADD_ENABLE parameter is set to 1.
2. Set the appropriate parameter to 1, using the following table as your guide.
* SharePlex does not replicate materialized views to materialized views. SharePlex converts a
CREATE MATERIALIZED VIEW to a CREATE TABLE, applies the CREATE TABLE to the target, and then
replicates the DML that populates the view. SharePlex replicates DROP MATERIALIZED VIEW, but not
ALTER MATERIALIZED VIEW. See the SharePlex Reference Guide for details about these parameters.
Expanded DDL replication supports not only tables and sequences but also a wide range of other objects
such as procedures, functions, users, and views, which are not part of replication. Some of these objects may
have underlying objects that are in replication. In those cases, Expanded DDL replication applies not only to
the object that is outside the replication configuration, but also to the underlying objects that are in replication.
SharePlex does not support the Oracle Flashback Table feature. If the SP_REPLICATE_ALL_DDL parameter
is enabled (value of 1), SharePlex may try to replicate the flashback DDL, which will return an error. To
perform Flashback Table on a table that is in replication, use the following procedures to work around this
issue:
1. Remove source objects from replication
2. Perform the flashback
3. Add or change objects in an active configuration
Name Type
------------- ------------
DDL_PARAMETER NUMBER
DDL_CODE NUMBER
SCHEMA_FILTER VARCHAR2(32)
OBJECT_FILTER VARCHAR2(32)
Each row in the SHAREPLEX_DDL_CONTROL table defines a filter based on what you specify in each of the
following columns:
l OBJECT_FILTER filters DDL by an object name.
l DDL_CODE filters by the code number of a DDL type. See DDL codes.
A null value in the DDL_CODE column means that the filter applies to all of the DDL types A null in the
SCHEMA_FILTER or OBJECT_FILTER column means that the filter applies to any schema or object name.
NOTE: The DDL_PARAMETER column is not an active column as of this release of SharePlex.
To filter DDL
Insert a row into the table with the desired values in the active columns.
Examples
The following filters out of replication the DDL for ALTER TABLE:
INSERT INTO SPLEX.SHAREPLEX_DDL_CONTROL (DDL_CODE, SCHEMA_FILTER, OBJECT_FILTER)
values (15,null,null);
The following filters out of replication all DDL for all objects with names that begin with TEST_ in any schema:
INSERT INTO SPLEX.SHAREPLEX_DDL_CONTROL (DDL_CODE, SCHEMA_FILTER, OBJECT_FILTER)
values (null,null,'TEST_%');
The following filters out of replication the DDL for CREATE TABLE for the "Sales" schema and objects with
names that begin with "TEST_":
INSERT INTO SPLEX.SHAREPLEX_DDL_CONTROL (DDL_CODE, SCHEMA_FILTER, OBJECT_FILTER)
values (1,'Sales','TEST_%');
DDL codes
CREATE TABLE 1
ALTER TABLE 15
DROP TABLE 12
ASSOCIATE STATISTICS 168
DISASSOCIATE STATISTICS 169
COMMENT TABLE, COMMENT ON COLUMNS 29
TRUNCATE 85
CREATE INDEX 9
ALTER INDEX 11
DROP INDEX 10
CREATE SEQUENCE 13
ALTER SEQUENCE 14
DROP SEQUENCE 16
CREATE CLUSTER 4
DROP CLUSTER 8
CREATE USER 51
ALTER USER 43
DROP USER 53
CREATE_ROLE 52
ALTER_ROLE 79
DROP_ROLE 54
GRANT 17
REVOKE 18
CREATE SYNONYM 19
DROP SYNONYM 20
CREATE VIEW 21
ALTER VIEW 88
DROP VIEW 22
CREATE TYPE 77
ALTER TYPE 80
DROP TYPE 78
CREATE TYPE BODY 81
DROP TYPE BODY 83
CREATE FUNCTION 91
ALTER FUNCTION 92
DROP FUNCTION 93
CREATE PROCEDURE 24
ALTER PROCEDURE 25
DROP PROCEDURE 68
CREATE PACKAGE 94
ALTER PACKAGE 95
DROP PACKAGE 96
CREATE PACKAGE BODY 97
ALTER PACKAGE BODY 98
DROP PACKAGE BODY 99
CREATE DIRECTORY 157
DROP DIRECTORY 158
ALTER TABLE...MOVE
ALTER TABLE DDL commands that change the rowid of a table can affect subsequent DML operations if the
primary or unique keys of the tables in replication are not being logged. When the keys are not logged,
SharePlex fetches their values based on the rowid. Any operation that changes the rowid, such as
ALTER TABLE...MOVE, can cause the wrong key values to be used for subsequent DML operations.
Contents
Continue to post when there is a DML error
Continue to Post when there is a DDL error
Increase the number of retries on error
Handle transactions that contain out-of-sync operations
2. Find the oramsglist file.
3. If replication is not active, open the file in a text editor. If replication is active, make a copy of the file and
then open the copy in the editor.
4. Increase the number on the first line by the number of errors that you are adding. This number must be
equal to the total number of errors that are in the file. For example, in the following file there are 10
errors listed.
5. Starting at the end of the file, add the number of each Oracle or SharePlex error, one per line as shown
in the preceding example. The messages need not be in numerical order.
6. Save and close the file.
7. Stop Post (if running).
sp_ctrl> stop post
8. If you edited a copy of the oramsglist file, save the copy to the original name of oramsglist.
9. Change the value of the SP_OPO_CONT_ON_ERR parameter to 1. Or change the value to 2 to also
continue posting on table errors listed in the oramsglist file. See the SharePlex Reference Guide for a
description of the SP_OPO_CONT_ON_ERR parameter.
sp_ctrl> set param SP_OPO_CONT_ON_ERR 1
10. Start Post.
sp_ctrl> start post
2. Look for one of the following files, depending on the database. These files are installed empty.
postgresmsglist Postgres
sqlservermsglist Microsoft SQL Server
sybasemsglist SAP Adaptive Server Enterprise (ASE)
tdmsglist Teradata
mysqlmsglist Oracle MySQL
NOTE: There are certain errors for which Post will stop, even if you list those errors in the message file.
3. If replication is not active, open the file in a text editor. If replication is active, make a copy of the file and
then open the copy in the editor.
4. Starting at the end of the file, add the number of each error, one per line as shown in the example. The
messages need not be in numerical order.
Example:
sqlservermsglist:
8102
8180
544
2627
3621
5. Save and close the file.
6. Stop Post (if running).
sp_ctrl> stop post
7. If you copied the original file, save it back to its original name.
8. Change the value of the SP_OPX_CONT_ON_ERR parameter to 1.
sp_ctrl> set param SP_OPX_CONT_ON_ERR 1
l Oracle targets: SP_OPO_OUT_OF_SYNC_SUSPEND
l Open Target targets: SP_OPX_OUT_OF_SYNC_SUSPEND
If you use this feature, make certain to monitor replication frequently. If Post stops, latency increases and data
accumulates in the queues. For more information, see the parameter documentation in the SharePlex
Reference Guide.
Contents
Overview of transformation
Considerations when using transformation
Deploy transformation
Overview of transformation
Transformation directs the Post process to call a PL/SQL procedure (de fined as a transformation routine)
instead of applying a SQL operation to the target database. Transformation enables replicated data to be
manipulated before, or instead of, posting to a target.
For example, if a source table and its target table are dissimilar in construction — like when a person’s first and
last name are in one column in the source table but in separate columns in the target table — you can write a
transformation routine to convert the data for those columns so that replication succeeds. You can use
transformation routines to convert data types, units of measurement, or character sets. You can use them
instead of database triggers to reduce I/O overhead, and for many other business requirements.
When you specify transformation for a table, Post takes no action on the replicated data. Instead, it passes data
values to your transformation routine, enabling you to control both the form and destination of the data with the
procedure. You can post to the target table, post to an alternate location, or both. Therefore, when writing your
routine, is your responsibility to include in your procedure the necessary SQL operations for posting.
Supported sources
Oracle
Supported operations
Transformation supports only INSERT, UPDATE and DELETE operations. You can do the following when
developing procedures:
l You can create one procedure for all three operation types, or you can create a procedure for each
operation type.
l You can use one procedure for all tables, or use different procedures for different tables. SharePlex
allows this through the use of wildcards to specify the tables.
If a transformation routine is specified for an individual table, and the table also is part of a group of tables for
which another routine is specified, only the table-specific routine is used for that table when the associated DML
operation occurs.
Privileges
Any table that will be accessed through PL/SQL for transformation requires implicitly granted privileges from the
owner of the object to SharePlex.
Keys
A PRIMARY or UNIQUE key is required for all tables using transformation. SharePlex locates the target row for
UPDATEs and DELETEs by using the key, which enables it to return values to your transformation routine from
Dates
The default date format for SharePlex transformation is MMDDYYYY HH24MISS. Tables with default dates must
use that format, or transformation will return errors. Before creating a table with a default date, use the following
command to change the date format in SQL*Plus.
ALTER SESSION SET nls_date_format = 'MMDDYYYYHH24MISS'
Other considerations
l Transformation does not support changes to LOB and LONG columns.
l The processing overhead for passing data to your procedure, combined with that of executing the
procedure itself, degrades overall performance on the target system compared to normal replication
and posting.
l The same PL/SQL package is used for both generic conflict resolution and transformation (its name is
sp_cr). Use either generic conflict resolution or transformation for a table, but not both. Transformed
tables cannot be compared by SharePlex and conflict resolution cannot succeed. If both are used,
SharePlex only calls the transformation routine. If appropriate, you can use generic conflict resolution
and transformation for different tables in the same configuration. For more information, see Configure
peer-to-peer replication on page 125.
Deploy transformation
Deployment of transformation involves the following steps.
l Create configuration entries for the source and target tables to be transformed. There are no special
configuration procedures for tables that use transformation. Configure them as you would any other
table. For more information, see Create a configuration file on page 58.
l Create transformation routines. For more information, see Create transformation routines on page 171.
l Create a transformation file, which directs SharePlex to call the transformation routines. For more
information, see Create the transformation file on page 176.
Procedure interface
Follow this template to create your procedure.
(table_info in outsplex.sp_cr.row_typ, col_values insplex.sp_cr.col_def_tabtyp)
where:
l splex is the SharePlex schema.
l sp_cr is the name of the package that contains the PL/SQL record and table structures.
l row_typ is the name of the PL/SQL record that passes in/out variables (see Package definition).
l col_def_type is the name of the PL/SQL table that stores column information (see col_def_type table).
Package definition
SharePlex defines PL/SQL record and table structures in a public package named sp_cr in the SharePlex
database schema. The package uses the following parameters.
IN variables
For each row operation that causes a conflict, SharePlex passes this metadata information to your procedure.
Variable Description
src_host The name of the source system (where the operation occurred). It is
case-sensitive and is passed using the same case as on the source
system, for example SysA. If there are named post queues in use on the
target system, this variable consists of the name of the post queue, for
example postq1.
src_ora_sid The ORACLE_SID of the source database. It is case-sensitive and is
passed in the same case as in the oratab file, Windows Registry or
V$PARAMETER table.
src_ora_time The timestamp of the change record in the source redo log.
source_rowid The row ID of the source row. It is passed as a literal within single
quotes, for example ‘123456’.
target_rowid The row ID of the corresponding row in the target database. SharePlex
obtains the row ID by querying the target database. It is passed as a
literal within single quotes, for example ‘123456’. If the row cannot be
found using the PRIMARY key, the value is NULL.
statement_type A letter, either I, U or D, indicating whether the operation is an INSERT,
UPDATE or DELETE statement.
source_table The owner and name of the source table, expressed as owner.table.
This value is case-sensitive and matches the way the table is named in
the database. It is passed within double quotes, for example
"scott"."emp."
target_table The owner and name of the target table, expressed as owner.table. This
value is case-sensitive and matches the way the table is named in the
database. It is passed within double quotes, for example "scott"."emp."
oracle_err This is different, depending on whether the procedure is being used for
conflict resolution or transformation.
Transformation: SharePlex passes a value of 0 for this variable. This
variable is only used for conflict resolution.
Conflict resolution: The Oracle error number that caused the conflict.
OUT variables
These variables direct the action of SharePlex based on whether the procedure succeeded or failed).
Variable Description
status Defines whether or not the procedure succeeded. You must specify a
value for this parameter.
l A value of 0 implies successful execution. It acts differently,
depending on whether the procedure is used for conflict
resolution or transformation.
Transformation: Post does not write any SQL. SharePlex does
not write any error messages to the Event Log when
transformation succeeds. It continues its processing by reading
the next replicated operation in the post queue.
l Conflict resolution: A value of 0 directs SharePlex to proceed
with the SQL statement. SharePlex does not write any log entries
to the Event Log when conflict resolution succeeds.
l A value of 1 implies that the procedure was unsuccessful. In this
case, the action SharePlex takes depends on what you specified
as the action variable.
l (Transformation only) A value of 7 implies unsuccessful
execution and instructs the Post process to stop.
action Defines the action that you want SharePlex to take. This is different,
depending on whether the procedure is used for transformation or
conflict resolution.
Transformation: You must specify a value of 0 for this parameter, which
directs SharePlex NOT to post the SQL statement. Your transformation
routine is responsible for posting the results of the transformation either
to the target table or another table. The outcome of this action depends
on what you specify for the reporting variable
Conflict resolution: Specifies the action to take as a result of an
unsuccessful conflict resolution procedure. You must specify a value for
this parameter.
l A value of 0 directs SharePlex NOT to post the SQL statement.
The outcome of this action depends on what you specify for the
reporting variable.
In addition, it directs SharePlex to try the next conflict resolution
procedure that you listed in the conflict resolution file, if one
exists.
l The value of 1 is reserved for internal SharePlex use. Do not use
it.
l A value of 2 directs SharePlex to try the next conflict resolution
procedure that you listed in the conflict resolution file, if one
exists.
reporting Determines how SharePlex reports unsuccessful procedural results. You
must specify a value for this parameter.
l A value of 0 directs SharePlex NOT to report an error or write the
failed SQL statement to the SID_errlog.sql log.
l Values 1 and 2 are reserved for internal SharePlex use. Do not
use them.
l A value of 3 directs SharePlex to write the failed SQL statement
to the SID_errlog.sql log and report an error to the Event Log.
col_def_type table
SharePlex creates a col_def_tabtyp PL/SQL table for each replicated operation. This table stores column
information. It is different depending on whether the procedure is used for transformation or conflict resolution.
All fields are passed by SharePlex to your routine, although not all will have values if SharePlex cannot
locate the row.
Following is the data type that is used to populate the col_def_tabtyp table.
Description of col_def_tabtyp
Column Description
column_name Tells your procedure the name of the column that was replicated from
the source table, for example emp_last_name. This value is not case-
sensitive.
data type Tells your procedure the data type of the data in the replicated column,
for example VARCHAR2. This value is always in capital letters.
is_key Tells your procedure whether or not the column is a key column. If it is a
key column, SharePlex passes a value of TRUE. If the column is not part
of a key, SharePlex passes a value of FALSE.
is_changed Tells your procedure whether or not the column value has changed. If it
is changed, SharePlex passes a value of TRUE. If the column is not
changed, SharePlex passes a value of FALSE.
l For INSERTs, is_changed is TRUE for non-NULL values,
because none of the columns existed in the database. If a NULL
value is inserted, is_changed is FALSE.
l For UPDATEs, is_changed is TRUE for non-key columns. For
key columns, is_changed normally is FALSE, but SharePlex will
pass a value for a changed key column.
Conflict resolution only: If a key value also was changed on the
target system, SharePlex will not be able to locate the correct
row, and conflict resolution could fail.
l For DELETEs, is_changed is always FALSE, because
SharePlex replicates only the key values for a DELETE
statement.
old_value Tells your procedure the old value of the replicated column, before it was
changed on the source system. This column is NULL for INSERTs,
because the row did not exist in the target database before the INSERT.
Conflict resolution only: This is the pre-image against which SharePlex
compared the source and target columns as part of its synchronization
check for UPDATEs and DELETEs. If the old value passed by SharePlex
does not match the current_value value obtained from the target row,
then there is a conflict.
new_value Tells your procedure the new value of the replicated column, as
changed on the source system.
current_value Tells your procedure the current value of the column in the target table. If
SharePlex cannot locate the target row, the value is NULL.
The following tables illustrate the possible outcomes of each type of operation.
INSERT operation
1 When an INSERT fails, it is because a row with the same PRIMARY key already exists in the target database.
SharePlex does not return the current value for INSERTs.
UPDATE operation
1 (Conflict resolution) When an UPDATE fails, it is because SharePlex cannot find the row by using the
PRIMARY key and the pre-image. If the row cannot be found, SharePlex searches for the row by using only the
PRIMARY key. If SharePlex finds the row, it returns the current value for the key column as well as the changed
columns. If SharePlex cannot find the row by using just the PRIMARY key, then SharePlex returns a NULL.
2 (Transformation) For an UPDATE, SharePlex cannot locate a row using the PRIMARY key and the pre-
images, because the pre-images are different due to transformation. As an alternative, it searches for the row
using just the PRIMARY key. If it finds it, SharePlex returns the current value for the key column as well as the
changed columns. If it cannot locate the row using just the PRIMARY key, then current_value is NULL
1 When a DELETE fails, it is because SharePlex could not find the row by using the PRIMARY key. Therefore,
SharePlex returns a NULL.
l owner.object is the owner and name of a target object, or a wildcarded entry. (See Syntax rules)
l i| u | d is the type of operation to be transformed by the specified procedure. You can specify any or all
operation types, for example id or iud. Upper or lower case are both valid.
l owner.procedure is the owner and name of the procedure that will handle the specified object and
operation type.
Syntax rules
l There must be at least one space between the object specification, the operation type specification, and
the procedure specification.
l You can use the LIKE operator and a SQL wildcard (%) to specify multiple objects by using a search
string. (See the Example.)
l You can use an underscore (_) to denote a single-character wildcard. For table names that contain an
underscore character (for example emp_sal), SharePlex recognizes the backslash (\) as an escape
character to denote the underscore as a literal and not a wildcard, for example: like:scott.%\_corp\_
emp. If you are not using the LIKE operator, the backslash escape character is not required if an object
name contains an underscore.
l You a comment line anywhere in the file. Start a comment line with the pound symbol (#).
Contents
Secure data with SSL/TLS
Host Authentication
Secure data with SSH
Encrypt data between Export and Import
Assign SharePlex users to security groups
l Shutdown sp_cop on all nodes
l Run “sp_security --setup” on all nodes
l Start sp_cop on all nodes
Enable SSL/TLS
IMPORTANT! SSL/TLS must be either enabled with a common network password or disabled on all SharePlex
installations.
To enable SSL/TLS
Run “sp_security --setup”, select the SSL/TLS option, and then enter a network password.
% sp_security --setup
Security model: 1
Network password:
Please re-enter the network password
Network password:
Security settings:
Setup complete!
Disable SSL/TLS
IMPORTANT! SSL/TLS must be either enabled with a common network password or disabled on all SharePlex
installations.
To disable SSL/TLS
Run “sp_security --setup” and select non-SSL/TLS connections.
% sp_security --setup
Security model: 2
Security settings:
Setup complete!
Security settings:
Host Authentication
SharePlex provides host authorization security that verifies whether or not SharePlex processes on specific
remote systems are authorized to connect to the local system for service and command requests. To implement
host authorization, you create an ASCII text file named auth_hosts in the data sub-directory of the SharePlex
variable-data directory and then populate it with the names of systems being granted connection permission.
Requirements
l If used, the auth_hosts file must contain valid entries. If this file exists but is empty or contains invalid
entries, SharePlex sends an error message similar to the following example to the Event Log:
unauthorized connection attempt.
l If an auth_hosts file does not exist on a system, SharePlex accepts all requests from all systems that
attempt to connect to sp_cop.
l The name of the local system must be the first non-commented line of this file, or host authorization will
not function.
l All entries, including comments, must end with a return.
1. Run an ASCII text editor such as vi (Unix and Linux), NotePad (Windows), or WordPad (Windows) to
open a blank file. If you are using a Unix and Linux text editor, change directories to the data sub-
directory of the SharePlex variable-data directory before you run the editor.
2. On the first non-commented line, enter the full machine name of the local system, for
example:Localhost.mycorp.com.
3. On the next non-commented line, enter one of the following:
Value Description
all Grants connection authorization to processes on all remote systems.
hostname Grants connection authorization to the specified host. Enter the fully qualified
machine name, for example remotehost.mycorp.com. Specify as many host
names as needed, each on its own line.
4. Save the file as auth_hosts in the data sub-directory of the SharePlex variable-data directory. If running
multiple instances of sp_cop, make certain to save the file to the correct variable-data directory.
Localhost.mycorp.com
remotehost.mycorp.com
remotehost2.mycorp.com
remotehost3.mycorp.com
Requirements
l Purchase and install the SSH software. SSH is not included with Shareplex.
l Using SSH with SharePlex requires the use of local port forwarding (also known as tunneling) within the
SSH configuration. Port forwarding allows you to establish a secure SSH session and then tunnel TCP
connections through it.
l SharePlex can be configured to work with SSH software between a source system and one target
system. If a source replicates to multiple targets, only one of the routes can be configured with SSH.
l This feature is supported on Unix and Linux.
1. On the source and target systems, choose an available local port to be used as the tunnel port. For peer-
to-peer and high availability replication, the port must be the same number on both systems. For other
replication strategies, choose a different port on each system.
l -L specifies that the specified port on the local host (acting as the client) is to be forwarded to the
remote host and port.
l source_port is the port number on the source system.
l target_host is the name of the target system.
l target_port is the port on the target system.
l userid is your Unix and Linux user ID. You will be prompted for the password.
l -N specifies not to execute a remote command. This is used just to forward a port (protocol
version 2 only).
l -f forces the SSH shell to work in the background just before command execution. If this
argument is omitted, the terminal window you are using must be kept open. SSH cannot be
started with nohup.
Refer to your SSH documentation for more information about these commands.
3. (If using multiple SharePlex instances) On the source system, export the correct variable-data directory
for the instance of sp_cop for which you are setting up SSH.
ksh shell:
export SP_SYS_VARDIR=/full_path_of_variable-data_directory
csh shell:
setenv SP_SYS_VARDIR=/full_path_of_variable-data_directory
4. On the source system, start sp_cop.
5. On the source system, run sp_ctrl from the bin subdirectory of the product directory.
6. In sp_ctrl, set the SP_XPT_USE_LOCALHOST parameter in one of the following ways.
l If there is only one target system, set the parameter with the following syntax:
sp_ctrl> set param SP_XPT_USE_LOCALHOST 1
l If there are multiple targets, use the following command to set up a tunnel to the target that will
use SSH. Replication to the other target systems will connect directly in the normal fashion.
sp_ctrl> set param SP_XPT_USE_LOCALHOST to host 1
where: host is the name of the target system that will use the tunnel.
8. If there is an active configuration, stop and then start sp_cop to make the new parameter setting active.
To stop sp_cop:
sp_ctrl> shutdown /productdir/bin/sp_cop &
To start sp_cop:
$ /productdir/bin/sp_cop &
Encryption guidelines
Encryption must be enabled on the source and target systems. You enable encryption and set the size of the
key through the Export process. You configure the Import process to ensure that encryption is enabled on the
source, so that no data is sent across the network unless it is encrypted.
When configuring encryption, follow these guidelines:
l Use one encryption key for all Export processes in the SharePlex instance.
l To use encryption, SharePlex must be version 9.1 or later.
Encryption procedure
On the source system
1. Set the Export parameter SP_XPT_ENABLE_AES to 1. This enables encryption.
sp_ctrl> set param sp_xpt_enable_aes 1
3. (Optional) Set the SP_XPT_AES_KEY_LENGTH parameter to increase the key size.
The create encryption key command returns a randomly generated, 256-bit AES key. By default,
SharePlex uses 128 bits of that length to encrypt the data.
To increase the key length that SharePlex uses, set the SP_XPT_AES_KEY_LENGTH parameter to 192
or 256 bits. When you increase the length, the key is harder to hack but requires more CPU power.
sp_ctrl> set param sp_xpt_aes_key_length {192 | 256}
Example: set param sp_xpt_aes_key_length 256
5. Restart Export to activate the settings.
sp_ctrl> stop export
sp_ctrl> start export
3. Restart Import to activate the settings.
sp_ctrl> stop import
sp_ctrl> start import
Overview
The SharePlex security groups provide access control to the SharePlex command and control system. Without
proper configuration of these groups, anyone with permissions on the system can use the commands that view,
configure, and control data replication.
l startup, shutdown
l all configuration commands relating to an active configuration
l all parameter commands except list param
l start capture
l stop capture
l abort capture
l truncate log
The SharePlex Administrator user must be in the Oracle dba group. For
Oracle RAC and ASM 11gR2 and above, the user must also be in the
Oracle Inventory group. For example: $ useradd –g spadmin –G
dba,oinstall. The membership in Oracle Inventory group must be listed
explicitly in the etc/group file.
On Unix and Linux, unless you install SharePlex as a root user, the
SharePlex Administrator user and the SharePlex admin group must exist
prior to installation.
NOTE: The default name for the SharePlex administrator group is spadmin, but you can designate any group or
specify any name for that group during installation.
l If you install as non-root, create the groups in the /etc/group file before you run the SharePlex installer.
In a cluster, create them on all nodes.*
* The groups must exist because the installer adds the SharePlex Administrator user to the spadmin
group during the installation process. In a cluster, this user is only added to the primary node. You must
add the SharePlex Administrator user to the other nodes.
1. Open the /etc/group file.
2. Add the Unix or Linux user name to the appropriate group. To assign a list of user names to a group, use
a comma-separated list (see the following example).
spadmin:*:102:spadmin,root,jim,jane,joyce,jerry
If the password field is null, no password is associated with the group. In the example, the asterisk (*)
represents the password, “102” represents the numerical group ID, and spadmin is the group. The group
ID must be unique.
3. Save the file.
Users can verify their authorization levels by issuing the authlevel command in sp_ctrl.
Contents
What is activation?
Activation commands
Requirements for activating a configuration
Test the configuration before activation
Frequently Asked Questions about activation
How to activate multiple configuration files
Activate replication with an Oracle hot backup on an active database
Activate replication with an Oracle hot backup on a quiet database
Activate replication with Oracle transportable tablespaces
Activate replication with cold copy/transfer methods
Activate replication from Oracle to Open Target
Activate replication from a SQL Server source to any target
What is activation?
When you activate a configuration, through the activate config command in sp_ctrl, SharePlex does
the following:
l Activates (read) the configuration file to build a series of internal structures that identify objects and
routes. Only one configuration can be active for any given datasource at a time. Configurations for
different datasources on a system can be active at the same time. For example, you can activate a
configuration for each Oracle instance or SQL Server database on a system.
l Starts the processes that maintain the capture and replication of source transactions.
The activation of a configuration generally proceeds as follows.
1. Assign an activation ID
SharePlex assigns an activation ID number to each configuration activation and its associated replication
processes and queues. A configuration can be activated many times, and this ID keeps track of each one.
SharePlex builds an object cache that records the standard metadata needed to support replication: the name,
size, and type of columns, NOT-NULL constraints, and whether a column is part of a key. For tables using
partitioned replication, additional information is stored.
SharePlex places a configuration-change marker in the data stream. This marker directs sp_cop to
generate a new set of replication processes and queues. If another configuration is active for the same
datasource, the marker deactivates it, causing the removal of the old processes and queues after the data
they contain is posted.
(Oracle only) SharePlex locks the tables that are listed in the configuration file so that it can obtain information
about them while they are in a read-consistent state. As many tables can be locked concurrently as there are
locking threads available. When SharePlex locks a table, it places an activation marker in the data stream that
tells the Capture process to start (or stop) replicating that table.
NOTE: If an application uses NOWAIT locking on tables in the replication configuration, the NOWAIT could fail if
it attempts to obtain a lock on an object that is already locked because it is being activated.
SharePlex locks the following:
l All tables added to replication (new and reactivated configurations)
l All tables removed from replication (reactivated configurations)
l All tables where routes changed (reactivated configurations)
Each table is locked for a very short time, just long enough to activate a table. Replication of each table begins
as soon as its activation is complete. Should one or more table fail to activate, SharePlex continues with the
activation of the other tables. Users can access the data in a source table when the activation lock is released.
Activation commands
Use sp_ctrl commands to activate, deactivate and view information about a configuration activation, as well as
to reconcile ongoing changes with a copy. For more information about these commands, see the SharePlex
Reference Guide.
Deactivating or aborting a configuration stops replication. If users continue making
changes to the configured objects, the source and target data can go out of
synchronization.
Reconcile reconcile
replicated
(Valid for an Oracle source only) Coordinates the results of ongoing replication with a copy
changes with
the copy of the source data that is applied to the target system, so that changes that occurred before
the copy are discarded.
View replication status
status Shows a summary of the status of replication to help you ensure that processes are
running and to check for errors, warnings or notices.
View queue qstatus
status
Shows statistics for the capture, post, and export queues.
Required setup
l (SQL Server) A SQL Server source database must be quiesced (no transaction activity allowed) while a
configuration is being activated.
l Before you activate a configuration, make certain that the objects that you want to replicate exist in the
source database.
l If a table will be partitioned, create those partitions before you activate a configuration to begin
replication processing. Partitioning a table while it is actively replicating causes SharePlex to lose the
identifying information it has compiled, and DML from that table partition will not be replicated. You can
add a partition to a table already in replication, but you will need to reactivate the configuration to update
that table in the SharePlex object cache.
Prerequisites
Make certain you satisfy the following prerequisites before you activate a configuration.
Understand how to start and stop the sp_cop program. Run SharePlex
Understand how to issue SharePlex commands. Execute commands in sp_ctrl
Understand the commands you will use during Activation commands
activation.
Make certain your SharePlex configuration and setup Configure data replication
are complete and any optional features are included in Configure partitioned replication
the configuration or setup.
Configure named queues
Configure security features
Configure data transformation
Configure error handling
Prepare the database to support replication. See "Set up an Oracle environment for replication"
in the Installation and Setup Guide for an Oracle
Source
Plan and configure SharePlex to support your replication Configure a replication strategy
strategy
Start the source and target databases. Database documentation
Unless your applications only generate SharePlex- Database documentation
supported DDL, prevent DDL operations, including
TRUNCATE, during activation. Where permitted, DML
changes are the only permissible changes during
activation.
l Verify the syntax of the entries in the configuration file.
l Report an error if the source object is not supported for replication by SharePlex.
l Report if a host name specified in a route is unreachable.
l Report if there are duplicate specifications for a single object.
l Report if an object specification will be skipped and the reason why.
l List the qualifying objects included under wildcard specifications.
The verify config command does not verify how long the activation will take, nor will it verify the target objects or
database connection (as represented by the database identifier listed in the routing map.)
For more information, see the verify config command in the SharePlex Reference Guide.
Preliminary considerations
Read these points before you proceed.
Supported databases
Oracle source and Oracle target
Consolidated To establish consolidated replication, the use of a hot backup from all source systems is not
replication possible. A backup from one source will override the data that was applied by a backup from a
(many
different source. You can use a hot backup of one of the source instances to establish a target
sources to
one target) instance, and then use another copy method to apply the objects from the other source
instances. Possible methods include:
l Export/import. For more information, see Activate replication with cold copy/transfer
methods on page 205.
l Transportable tablespaces. For more information, see Activate replication with Oracle
transportable tablespaces on page 202.
Peer-to-peer To establish peer-to-peer replication, you must:
1. Quiet all of the systems except the trusted source system for the duration of this
procedure.
2. Move all users to the trusted source system, and then follow this procedure.
Only after this procedure has been performed on all of the secondary systems may users may
resume activity on them.
Windows To use a hot backup between Windows systems, the target system must have an instance
systems already created containing an identical ORACLE_SID and directory structure created with the
Oracle creation tools. Oracle runs as a service on Windows, and the Registry entries must
exist before starting the database recovery process. The database can start empty, because
the hot backup will populate it.
Requirements
l [Unix and Linux systems] Verify that the ORACLE_SID and ORACLE_HOME in the oratab file are correct
for the instance you will be establishing with the hot backup. The SID must be the SID used in the routing
map in the configuration file that you will be activating.
l Read the requirements before you start this procedure. For more information, see Requirements for
activating a configuration on page 190.
l Make certain a SharePlex database account exists in the source database (only). This account usually is
created when SharePlex first is installed. See the SharePlex Installation and Setup Guide for more
information.
l Before you start, review this procedure and see the SharePlex Reference Guide for more information
about the commands that are used.
Troubleshooting
If the configuration fails to activate, you can find information about the failure in these places:
l Use the show log command to view the event_log.
l View the activation process log, which is a file named SID_oconf##.log in the log sub-directory of the
SharePlex variable data directory.
See also Solve Database Setup problems on page 231.
1. On the source and target systems, go to the bin sub-directory of the SharePlex product directory, and
start sp_cop and sp_ctrl. In a cluster, the source is the primary node where the cluster VIP is running.
2. On both systems, verify that the SharePlex processes are running.
sp_ctrl> status
3. On the target system (primary node of a target cluster), stop the Post process. This allows replicated data
to accumulate in the post queue until the database has been recovered and reconciled.
sp_ctrl> stop post
4. On the source system, run the Oracle hot backup.
5. When the backup is finished, activate the configuration on the source system.
sp_ctrl> activate config filename
6. On the source system, monitor activation status.
NOTE: The command retains control of sp_ctrl until activation is finished.
7. When activation is complete, switch log files on the source system.
On-premises database:
svrmgr1> alter system switch logfile;
Amazon RDS database:
Run the Amazon RDS procedure rdsadmin.rdsadmin_util.switch_logfile.
8. Do one of the following:
l To recover the database to a sequence number, make a note of the highest archive-log
sequence number.
l To recover the database to a Oracle System Change Number (SCN), pick an SCN to recover to
on the target database.
9. On the target system, do one of the following:
l If recovering to a sequence number, recover the database from the hot backup using the UNTIL
CANCEL option in the RECOVER clause, and cancel the recovery after Oracle has fully applied
the log from the previous step.
l If recovering to a SCN, recover the database from the hot backup using the UNTIL CHANGE scn
option in the RECOVER clause, and cancel the recovery after Oracle has applied the logs
matching the SCN from the previous step.
10. On the target system, open the database with the RESETLOGS option.
l SharePlex can remain running during the setup process.
l Database Setup Utilities in the SharePlex Reference Guide.
12. [Optional] If you are using named post queues and are unsure of the queue names, issue the
qstatus command.
sp_ctrl> qstatus
13. On the target system, issue the reconcile command as follows, depending on the recovery option you
chose. If you are using named post queues, issue the command for each one.
l If recovering to a sequence number, substitute the sequence number of the log that you noted
previously.
sp_ctrl> reconcile queue queuename for datasource-datadest seq sequence_
number
Example: reconcile queue SysA for o.oraA-o.oraA seq 1234
l If recovering to a SCN, substitute the SCN that you noted previously.
sp_ctrl> reconcile queue queuename for datasource-datadest scn scn_number
Example: reconcile queue SysA for o.oraA-o.oraA scn 0123456789
NOTE: The command retains control of sp_ctrl until the reconcile process is finished.
14. On the target system, run the cleanup.sql script to truncate the SharePlex internal tables. Instructions for
running this script are in the SharePlex Reference Guide.
15. On the target system, disable triggers on the tables, or run the sp_add_trigger.sql utility script so that the
triggers ignore the SharePlex user.
16. On the target system, disable check constraints and scheduled jobs that perform DML.
17. [Partitioned replication only] If you are using vertically partitioned or horizontally partitioned replication
for any tables, delete the unneeded columns and rows from those tables.
18. [High availability only] On the target (secondary) system, stop Export.
sp_ctrl> stop export
19. [High availability and peer-to-peer only] On the target (secondary) system, activate the configuration so
that SharePlex is ready in the event of failover.
sp_ctrl> activate config filename
20. On the target system, start the Post process. The two instances are now in synchronization, and
SharePlex will continue replicating to maintain synchronization.
sp_ctrl> start post
21. [Optional] If this was only a partial backup, drop the tablespaces that were not copied over during
the hot backup.
1. On all systems, go to the bin sub-directory of the SharePlex product directory, and start sp_
cop and sp_ctrl
2. On all systems, verify that the SharePlex processes are running.
sp_ctrl> status
3. On the intermediary and target systems, stop the Post process. This allows replicated data to accumulate
in the post queue until the databases are recovered.
4. sp_ctrl> stop post
5. On the source system, run the Oracle hot backup to the intermediary and target systems.
6. When the backup is finished, activate the configuration on the source system.
sp_ctrl> activate config filename
7. On the source system, view activation status.
NOTE: The command retains control of sp_ctrl until activation is finished.
8. When activation is complete, switch log files on the source system.
On-premises database:
svrmgr1> alter system switch logfile;
Amazon RDS database:
Run the Amazon RDS procedure rdsadmin.rdsadmin_util.switch_logfile.
9. Make a note of the highest archive-log sequence number.
10. On the intermediary system, recover the database from the hot backup using the UNTIL CANCEL
option in the RECOVER clause, and cancel the recovery after Oracle has fully applied the log from the
previous step.
11. On the intermediary system, open the database with the RESETLOGS option.
12. On the intermediary system, run Database Setup on the database. When prompted for the SharePlex
database user, enter n to choose the existing user and password (these were copied in the backup).
Would you like to create a new SharePlex user [y]. n
NOTES:
l SharePlex can remain running during the setup process.
l For more information, see Database Setup Utilities in the SharePlex Reference Guide.
13. [Optional] If you are using named post queues and are unsure of the queue names, issue the
qstatus command.
sp_ctrl> qstatus
14. On the intermediary system, issue the reconcile command for each post queue. For seq sequence_
number, substitute the sequence number of the log that you noted previously.
15. On the intermediary system, run the cleanup.sql script to truncate all of the SharePlex internal tables.
Instructions for running this script are in the SharePlex Reference Guide.
19. [Partitioned replication only] If you are using vertically partitioned or horizontally partitioned replication
for any tables, delete the unneeded columns and rows from those tables.
IMPORTANT! Do not start any Post processes yet.
20. On the target system, recover the database from the hot backup using the UNTIL CANCEL option in the
RECOVER clause, and cancel the recovery after Oracle has fully applied the log that you reconciled to in
the previous steps taken on the intermediary system.
21. On the target system, open the database with the RESETLOGS option.
22. On the target system, run Database Setup on the database. When prompted for the SharePlex database
user, enter n to choose the existing user and password (these were copied in the backup).
Would you like to create a new SharePlex user [y]. n
NOTE: SharePlex can remain running during the setup process. For more information about Database
Setup, see Database Setup Utilities in the SharePlex Reference Guide.
23. On the target system, run the cleanup.sql script to truncate the SharePlex internal tables. Instructions for
running this script are in the SharePlex Reference Guide.
24. On the target system, disable triggers on the tables, or run the sp_add_trigger.sql utility script so that the
triggers ignore the SharePlex user.
25. On the target system, disable check constraints and scheduled jobs that perform DML.
26. [Partitioned replication only] If you are using vertically partitioned or horizontally partitioned replication
for any tables, delete the unneeded columns and rows from those tables.
27. On the intermediary system, activate the configuration file.
sp_ctrl> activate config filename
28. On the intermediary system, monitor activation status.
NOTE: The command retains control of sp_ctrl until activation is finished.
29. On the intermediary and target systems, start the Post process. All instances are now in synchronization,
and SharePlex will continue replicating to maintain synchronization.
sp_ctrl> start post
30. [Optional] If this was only a partial backup, drop the tablespaces that were not copied over during
the hot backup.
Preliminary considerations
Read these points before you proceed.
Supported databases
Oracle source and Oracle target
Limitation Description
applies to:
Consolidated To establish consolidated replication, the use of a hot backup from all source systems is not
replication possible. A backup from one source will override the data that was applied by a backup from a
(many
different source. You can use a hot backup of one of the source instances to establish a target
sources to
one target) instance, and then use another copy method to apply the objects from the other source
instances. Possible methods include:
l Export/import. For more information, see Activate replication with cold copy/transfer
methods on page 205.
l Transportable tablespaces. For more information, see Activate replication with Oracle
transportable tablespaces on page 202.
Windows To use a hot backup between Windows systems, the target system must have an instance
systems already created containing an identical ORACLE_SID and directory structure created with the
Oracle creation tools. Oracle runs as a service on Windows, and the Registry entries must
exist before starting the database recovery process. The database can start empty, because
the hot backup will populate it.
Requirements
l [Unix and Linux systems] Verify that the ORACLE_SID and ORACLE_HOME in the oratab file are correct
for the instance you will be establishing with the hot backup. The SID must be the SID used in the routing
map in the configuration file that you will be activating.
l Read the requirements before you start this procedure. For more information, see Requirements for
activating a configuration on page 190.
Procedure
NOTE: If you are not using cascading replication, ignore all references to an intermediary system. For more
information, see Configure replication through an intermediary system on page 145.
1. On the source system, complete the Oracle hot backup.
2. On the source system, stop user access to the source database by shutting it down and opening it in
restricted mode.
3. On the source system, switch the redo logs.
On-premises database:
svrmgr1> alter system switch logfile;
Amazon RDS database:
Run the Amazon RDS procedure rdsadmin.rdsadmin_util.switch_logfile.
4. Keep a record of the sequence number of the current log.
5. On all systems, start sp_cop and sp_ctrl from the bin sub-directory of the SharePlex product directory.
6. On all systems, verify that sp_cop and sp_ctrl are running.
sp_ctrl> status
7. On the intermediary and target systems, stop Post. Stopping Post allows replicated data to accumulate in
the post queue until the databases have been recovered.
sp_ctrl> stop post
8. On the source system, activate the configuration file.
sp_ctrl> activate config filename
9. On the source system, view activation status.
NOTE: The command retains control of sp_ctrl until activation is finished.
10. When the activation is finished, allow users to resume access to the source database.
11. List the archive logs on the intermediary and target systems. Delete any logs made after the one for
which you made a record.
12. On the intermediary and target systems, recover the database to the log number that you recorded. Make
sure a full recovery is performed.
13. On the intermediary and target systems, open the database.
l SharePlex can remain running during the setup process.
l For more information about Database Setup, see Database Setup Utilities in the SharePlex
Reference Guide.
15. On the intermediary and target systems, run the cleanup.sql script to truncate the SharePlex internal
tables. Instructions for running this script are in the SharePlex Reference Guide.
16. On the intermediary and target systems, disable triggers on the tables, or run the sp_add_trigger.sql
utility script so that the triggers ignore the SharePlex user.
17. On the intermediary and target systems, disable check constraints and scheduled jobs that perform DML.
18. [Partitioned replication only] If you are using vertically partitioned or horizontally partitioned replication
for any tables, delete the unneeded columns and rows from those tables on the intermediary and
target systems.
19. [Intermediary system only] On the intermediary system, set the SP_OCT_REPLICATE_POSTER
parameter to 1. This directs SharePlex to capture posted changes on that system and replicate them to
the target system.
sp_ctrl> set param SP_OCT_REPLICATE_POSTER 1
20. On the intermediary system, activate the configuration file.
sp_ctrl> activate config filename
21. On the intermediary system, monitor activation status.
NOTE: The command retains control of sp_ctrl until activation is finished.
22. When activation is finished, start the Post process on the intermediary and target systems. All instances
are now in synchronization, and SharePlex will continue replicating to maintain synchronization.
sp_ctrl> start post
23. [Optional] If this was only a partial backup, drop the tablespaces that were not copied over during
the hot backup.
Supported databases
Oracle source and Oracle target
Requirements
l Read the requirements before you start this procedure. For more information, see Requirements for
activating a configuration on page 190.
l Make certain a SharePlex database account exists in the source database (only). This account usually is
created when SharePlex is first installed. See the SharePlex Installation and Setup Guide for more
information.
l Before you start, review this procedure and see the SharePlex Reference Guide for more information
about the commands that are used.
l The source system of a single-direction replication configuration, including cascading replication.
l All source systems of a consolidated replication configuration.
l The trusted source system in a peer-to-peer replication configuration.
l The primary node of a cluster (where the cluster VIP is running).
In this procedure, the "intermediary" system only needs to be part of this procedure if SharePlex will be posting
to, and capturing from, an intermediary system in a cascading configuration.
In this procedure, the "target" system is one of the following:
l The target system of a single-direction replication configuration, including cascading and consolidated
replication.
l The secondary systems in a peer-to-peer replication configuration.
l The primary node (where the cluster VIP is running) of the target cluster.
In this procedure, the SharePlex commands in the procedure apply to all sp_cop instances that apply to the
replication strategy you are using (for example, all sp_cop processes on a target in consolidated replication).
2. On the source system, activate the configuration file.
sp_ctrl> activate config filename
3. On the source system, start sp_cop and sp_ctrl from the bin sub-directory of the SharePlex
product directory.
4. On the source system, verify that sp_cop and sp_ctrl are running.
sp_ctrl> status
5. On the intermediary and target systems, stop Post. Stopping Post allows replicated data to accumulate in
the post queue until the databases have been recovered.
sp_ctrl> stop post
6. On the source system, export the metadata to an export file.
7. When the export is finished, copy the datafiles to another location on the source system. This minimizes
the impact on the source database of copying the files to the target system.
8. Set the source tablespaces back to read/write mode.
svrmgr1> alter Tablespace name read write;
9. If any of the copied datafiles and tablespaces exist in the intermediary or target database, drop them so
that the copied files can be applied.
10. Copy the files from the new location on the source system to the intermediary and target systems.
11. On the intermediary and target systems, use the Oracle import utility to import the metadata and the
tablespace definitions.
12. On the intermediary and target systems, set the tablespace(s) to read/write mode.
13. On the intermediary and target systems, open the Oracle instances.
14. On the intermediary and target systems, disable triggers on the tables, or run the sp_add_trigger.sql
utility script so that the triggers ignore the SharePlex user.
15. On the intermediary and target systems, disable check constraints and scheduled jobs that perform DML.
16. [Partitioned replication only] If you are using vertically partitioned or horizontally partitioned replication
for any tables, delete the unneeded columns and rows from those tables on the intermediary and
target systems.
17. [Intermediary system only] Set the SP_OCT_REPLICATE_POSTER parameter to 1. This directs
SharePlex to capture posted changes on that system and replicate them to the target system.
sp_ctrl> set param SP_OCT_REPLICATE_POSTER 1
18. [Intermediary system only] Activate the configuration file.
sp_ctrl> activate config filename
19. [High availability] On the target system, stop the Export process.
sp_ctrl> stop export
21. Start Post on the intermediary and target systems. SharePlex begins executing the SQL statements that
have been collecting in the post queue, keeping the source and target data in sync.
sp_ctrl> start post
22. [Peer-to-peer replication] Allow users to access the databases on all systems.
l Import/Export/Data Pump
l Store/Restore from tape
l FTP
NOTE: This document does not provide instructions for how to perform the chosen copy method. This procedure
should be performed by someone who has a solid understanding of database copy methods.
Preliminary considerations
Read these points before you proceed.
Supported databases
Oracle source and Oracle target
Requirements
l [Unix and Linux systems] Verify that the ORACLE_SID and ORACLE_HOME in the oratab file are correct
for the instance you will be establishing with the hot backup. The SID must be the SID used in the routing
map in the configuration file that you will be activating.
l Read the requirements before you start this procedure. For more information, see Requirements for
activating a configuration on page 190.
l Users must stop accessing the production database while the copy and configuration activation
take place.
l The target instance must exist.
l The source system of a single-direction replication configuration, including cascading replication.
l All source systems of a consolidated replication configuration.
l The trusted source system in a peer-to-peer replication configuration.
l The primary node of a cluster (where the cluster VIP is running).
In this procedure, the "intermediary" system only needs to be part of this procedure if SharePlex will be posting
to, and capturing from, an intermediary system in a cascading configuration.
In this procedure, the "target" system is one of the following:
l The target system of a single-direction replication configuration, including cascading and consolidated
replication.
l The secondary systems in a peer-to-peer replication configuration.
l The primary node (where the cluster VIP is running) of the target cluster.
In this procedure, the SharePlex commands in the procedure apply to all sp_cop instances that apply to the
replication strategy you are using (for example, all sp_cop processes on a target in consolidated replication).
Procedure
1. On the source system, stop user access to the objects that are in the replication configuration.
l If deploying consolidated replication, you can either stop access to all of the source systems at
once and make the copies at the same time, or you can synchronize each source system one at a
time using these instructions.
l If deploying peer-to-peer replication, stop access to all databases in the peer group, including the
trusted source.
2. Copy the files from the source system to the intermediary and target systems.
3. On the source system, start sp_cop and sp_ctrl.
4. On the source system, activate the configuration file (all files if using consolidated replication).
sp_ctrl> activate config filename
5. On the intermediary and target systems, start sp_cop and sp_ctrl.
6. On the intermediary and target systems, stop Post. Stopping Post allows any data that gets replicated
before the target data is established to collect in the post queue.
sp_ctrl> stop post
7. On the source system, allow users to resume access to the source database.
9. Start and mount the intermediary and target databases, but do not allow users access.
10. On the intermediary and target systems, apply the copy to the database.
11. On the intermediary and target systems, disable triggers on the tables, or run the sp_add_trigger.sql
utility script so that the triggers ignore the SharePlex user.
12. On the intermediary and target systems, disable check constraints and scheduled jobs that perform DML.
13. [Partitioned replication only] If you are using vertically partitioned or horizontally partitioned replication
for any tables, delete the unneeded columns and rows from those tables on the intermediary and
target systems.
14. [Intermediary system only] Set the SP_OCT_REPLICATE_POSTER parameter to 1. This directs
SharePlex to capture posted changes on that system and replicate them to the target system.
sp_ctrl> set param SP_OCT_REPLICATE_POSTER 1
15. [Intermediary system only] Activate the configuration file.
sp_ctrl> activate config filename
16. [Peer-to-peer] Activate the configuration file on the target systems.
17. Start Post on:
l The intermediary system
l The trusted source and all other targets in a peer group
l All other targets
NOTE: SharePlex will start executing SQL statements that accumulated in the post queue.
18. [Peer-to-peer] On the target systems in the peer group, allow users to resume access to the database.
Preliminary considerations
Read these points before you proceed.
Supported databases
Oracle source and any supported target
Requirements
l You can use your Oracle RMAN backup system to take a hot backup of your primary instance and
recover to an SCN or sequence number in a staging instance.
l This document does not provide instructions for how to perform the chosen copy method. Someone with
expertise in database copy methods should perform this procedure. You can use Toad Data point or a
third-party tool to extract data from the staging instance into the Open Target database.
l Read the requirements for activating a configuration file. For more information, see Requirements for
activating a configuration on page 190.
l Before you start, review this procedure and see the SharePlex Reference Guide for more information
about the commands that are used.
Procedure
1. On the source and target systems, start sp_cop and sp_ctrl from the bin sub-directory of the SharePlex
product directory.
2. On source and target systems, verify that the SharePlex processes are running.
sp_ctrl> status
3. On the target system, stop the Post process. This allows replicated data to accumulate in the post queue
until the target database is instantiated and reconciled.
sp_ctrl> stop post
4. Activate the configuration on the source system.
sp_ctrl> activate config filename
5. On the source system, monitor activation status.
NOTE: The command retains control of sp_ctrl until activation is finished.
6. When activation is complete, start the hot backup to the staging instance.
7. When the hot backup is finished, switch log files on the primary source system twice.
On-premises database:
svrmgr1> alter system switch logfile;
svrmgr1> alter system switch logfile;
Amazon RDS database:
Run the Amazon RDS procedure rdsadmin.rdsadmin_util.switch_logfile twice.
8. Copy the archive logs that were generated by the log switch from the primary instance to the staging
instance.
a. If the source is RAC, recover the database on the staging server to the latest SCN of the last
archive log that was copied to the staging server.
b. If the source is not RAC, recover to the sequence number of the last archive log that was copied
to the staging server.
NOTE: The next steps apply the replicated changes that occurred after the backup point.
10. Do one of the following:
l If the source is RAC, make a note of the SCN that you recovered to on the staging server.
l If source is non-RAC, make a note of the log sequence number that you recovered to on the
staging server.
11. Using the copy method of your choice, make a copy of the Oracle data from the staging server to the
Open Target database. Wait until the copy is finished before proceeding to the next step.
12. [Optional] If you are using named post queues and are unsure of the queue names, issue the qstatus
command and make a note of them.
sp_ctrl> qstatus
13. On the target system, disable triggers on the target tables.
14. On the target system, disable check constraints and scheduled jobs that perform DML.
15. On the target system, run sp_ctrl, then issue one of the following reconcile commands. If you are using
named post queues, issue the command for each one.
l If the source is non-RAC, reconcile to the log sequence number of the log that you noted
previously.
sp_ctrl> reconcile queue queuename for datasource-datadest seq sequence_
number
Example: reconcile queue SysA for o.prod1-r.rep1 seq 1234
l If the source is RAC, reconcile to the SCN that you noted previously.
sp_ctrl> reconcile queue queuename for datasource-datadest scn scn_number
Example: reconcile queue SysA for o.prod1-r.rep1 scn 0123456789
NOTE: The command retains control of sp_ctrl until the reconcile process is finished.
16. On the target system, start the Post process. The two instances are now in synchronization, and
SharePlex will continue replicating to maintain synchronization.
sp_ctrl> start post
Supported databases
SQL Server source and any supported target. See the SharePlex Release Notes for supported targets.
Requirements
l Satisfy all of the pre-activation requirements. For more information, see Requirements for activating a
configuration on page 190.
l Stop access to the source tables while the copy of the data is being made and applied to the target. The
target data must be fully established before you start the activation.
l Before you start, review this procedure and see the SharePlex Reference Guide for more information
about the commands that are used.
l This document does not provide instructions for how to perform the chosen copy method. Someone with
expertise in database copy methods should perform this procedure. Use a copy method that supports
the target database and can copy data from a SQL Server database.
Procedure
1. On the source system, stop access to the source objects that are listed in the configuration file.
2. On all systems, start sp_cop and sp_ctrl from the bin sub-directory of the SharePlex product directory.
3. On all systems, verify that sp_cop and sp_ctrl are running.
sp_ctrl> status
4. Make a copy of the source data and then apply it to the target database. Wait until the copy is applied
before you proceed with the next step.
5. On the source system, activate the configuration file.
sp_ctrl> activate config filename
6. On the source system, view activation status.
NOTE: The command retains control of sp_ctrl until activation is finished.
7. On the target system, disable triggers on the tables.
8. On the target system, disable check constraints and scheduled jobs that perform DML.
9. Allow activity to resume on the source tables.
After a successful activation, SharePlex replication commences automatically. To view replication status, use
the status command on each system.
sp_ctrl> status
For more information, see the status documentation in the SharePlex Reference Guide.
Monitor SharePlex
This chapter contains an overview of the tools that SharePlex provides to detect errors and monitor the
replication processes. Like any mission-critical software, SharePlex should be monitored regularly for situations
or events that could interfere with processing, especially those that could result in loss of data synchronization.
Contents
View and terminate SharePlex processes
View events and errors
Monitor with sp_ctrl commands
Run monitor scripts on Unix
Run a monitor script on Windows
Monitor replication with SNMP
o Command and Control process (sp_cnc)
o Capture (sp_ocap)
o Read (sp_ordr)
o Export (sp_xport)
l The following child processes are spawned by sp_cop on a target system:
1. Command and Control process (sp_cnc)
2. Import (sp_mport)
3. Post (sp_opst_mt if the database is Oracle or sp_xpst if the database is Open Target)
Each child process has the same -uidentifier as its parent sp_cop process. This makes it easier to identify
related processes when multiple session of sp_cop are running.
l From the Command Prompt console using the tlist program provided with the SharePlex software.
l From the Windows Task Manager.
In the Windows Task Manager, SharePlex appears as Sp_Copsrv.exe, representing the SharePlex sp_cop
process. The operating system controls the parent Sp_Copsrv.exe service. The parent Sp_Copsrv.exe process
spawns child Sp_Copsrv.exe processes — one for each replication process (Capture, Read, Export, Import,
Post, sp_ctrl, and so forth.).
For a standard uni-directional configuration replicating through default queues to one target system, there are
following processes on a Windows system:
On the source system:
l One parent Sp_Copsrv.exe process.
l One Sp_Ocap or Sp_capture (Capture) process plus one child Sp_Copsrv.exe process.
On the target system:
l One parent Sp_Copsrv.exe process.
l One Sp_Mport (Import) process plus one child Sp_Copsrv.exe process.
l One Sp_Opst_Mt (Oracle Post) or Sp_Xpst (Open Target Post) process plus one child Sp_
Copsrv.exe process.
l If there are any additional SharePlex processes running, such as sp_ctrl, there is an additional Sp_
Copsrv.exe process for each one.
If there are no active replication configurations, the SharePlex processes do not start when you start the service,
and just the parent Sp_Copsrv.exe will be running.
To identify the parent Sp_Copsrv.exe process in the Windows Task Manager, look for the one that is
using the largest amount of memory. The child Sp_Copsrv.exe processes consume less memory than the
parent process.
To identify which replication process is associated with a child Sp_Copsrv.exe process, look in the SharePlex
Event Log for the message stating when the replication process started. This entry provides the PID for that
process and the PID of the associated Sp_copsvr.exe process.
1. Press Control | Alt | Delete.
2. Select Start Task Manager or Task Manager, depending on your Windows version.
3. Select the Processes tab.
4. (Optional) Sort the processes by name.
5. Select the process that you want to kill.
6. Click End Process.
Event Log
SharePlex reports operational errors, notices and warning conditions to the Event Log. This log provides a
perpetual step-by-step record of replication activities, errors, and events. The Event Log can help you replay the
sequence of events that led up to a problem.
Examples of replication events include:
l Start or stop of sp_cop or a replication process
l Execution of a command in sp_ctrl. User-issued commands are recorded for every SharePlex command
that is issued.
NOTE: A user-issued command appears in the Event Log as a notice, as in the following example:
Notice 08-07-02 16:13:24.641582 23696 1 User command: rjones activate
config 1route (from mycomp14)
l Database errors
l Failure of a network connection or SharePlex process
l Start or stop of a utility or script
l Login or logout of a user
Each entry in the Event Log includes:
l The date and time of the event.
l A description of the event and any related messages (error or non-error).
l The event’s process ID number, if it is associated with a SharePlex process.
Status Database
The Status Database contains a summary of the conditions reported in the Event Log, including events that did
not generate an error message or warning at the sp_ctrl user interface. This information alerts you to potential
problems and helps you resolve existing ones. The Status Database may refer you to the Event Log for a more
detailed explanation of a warning, notice or event.
When the Post process detects that source and target tables are out of synchronization, it logs the first 100 SQL
statements and data for the out-of-sync transactions to an error file on the target system. You can use this log to
determine the extent of the out-of-sync condition, and you can use the SQL statements to repair target tables if
the condition is not too severe, after first correcting the cause of the problem.
Process logs
When a SharePlex process cannot process a record, the process not only logs the record to the Event Log, but
also to its process log file. The process logs are primarily for use in debugging.
The name of a process log consists of the datasource identifier (such as the ORACLE_SID), the short name of
the process (such as ocap, ord, opo, rcl), the file number, and the file extension (.log).
Examples:
Capture: ora10_ocap02.log
Read: ora10_ord01.log
Post: ora10_opo03.log
Reconcile: ora10_rcl01.log
The aging of old log files is performed in a circular pattern. The numbering begins with 01 and ends with 03. Up
to three logs can exist at any time, including the current one. When all three logs are full (50 MB), the process
starts overwriting them, beginning with the oldest one.
Activation log
When you activate a configuration, it generates a log.
Compare/repair log
The compare and repair commands log errors, messages and warnings to a log. For more information about
these logs, see the compare commands in the SharePlex Reference Guide.
l Monitor for out-of-sync tables.
l Verify that replication processes are running.
lstatus 3 Displays detailed information about the state of SharePlex
replication.
job status 3 Displays current status and history for append, compare, copy
and repair commands.
orainfo 3 Displays the Oracle database information.
qstatus 3 Displays the state of the capture, export and post queues.
report 3 Displays append, compare, copy and/or repair history for a
table.
show 3 Displays the source and destination of the data being
processed by each replication process on a system, and
displays the status of each process.
show capture 3 Displays brief or detailed statistics for the Capture process for
use in tuning and problem solving.
show config 3 Displays properties of the active configuration.
show export 3 Displays the number of messages sent to the target system(s).
show import 3 Displays the number of messages received from the source
system(s).
show log 3 Displays the Even Log, Command Log, Verify Log, Trace Log,
or a process log.
show post 3 Displays brief or detailed statistics for the Post process for use
in tuning and problem solving.
show read 3 Displays brief or detailed statistics for the Read process for use
in tuning and problem solving.
show sql 3 Displays the current or last SQL statement processed by the
Post process.
show statusdb 3 Displays the Status Database, which contains records of
important replication events.
show sync 3 Displays information about out-of-sync conditions.
status 3 Displays an overview of the state of SharePlex replication.
See the SharePlex Reference Guide for details about these commads.
l sp_eventmon monitors the SharePlex Event Log and reports errors that you specify in a special file.
l sp_logmon monitors how well Capture is keeping pace with the changes entering the redo logs. If
Capture loses pace by a specified number of logs, sp_logmon alerts you before the logs wrap so that
you can take corrective action.
l sp_ps monitors the SharePlex processes and notifies you if one or more are stopped so that you can
correct the problem before the logs wrap or the queues exceed available disk space.
l sp_qstatmon monitors the status of the SharePlex queues and sends a warning if the backlog exceeds
a threshold (limit) that you define. This enables you to take corrective action before the queues exceed
available disk space and replication is adversely affected.
IMPORTANT!
l These scripts run on Unix or Linux systems only.
l The monitoring scripts are overwritten with new scripts during patches and upgrades of SharePlex.
Before you install the patch or upgrade, rename your existing scripts so that your customizing is retained.
After applying the patches, update the new scripts with your customizing. Do not rename the existing
scripts to replace the updated scripts, or you could lose important improvements or fixes.
l The scripts must be customized to reflect your environment, such as the type of e-mail or the
paging available.
l the SharePlex port number
l the ORACLE_SID of the instance for which replication is being monitored
l the SharePlex Administrator’s name
l SharePlex must be running prior to executing a monitoring script.
l Verify the ORACLE_HOME (the path to the ORACLE_HOME directory) for each Oracle instance
being monitored.
l The monitoring scripts make use of sp_ctrl commands. Before you use the scripts, make a link in the util
sub-directory to the sp_ctrl binary in the bin sub-directory of the SharePlex product directory. Do not
copy the binary itself, because that makes it difficult to maintain patches to sp_ctrl.
l Users of the monitoring utilities must have the following rights:
l Local access to sp_ctrl and permission to run the script on the system on which the sp_cop to be
monitored is running.
l Korn (ksh) shell access and ps permission from the Unix or Linux command line.
l Read, write and execute permissions to the directory where the scripts reside.
l The permission on the iwgrep utility must be 755.
l The monitoring utilities use the mailx program to send e-mail notifications. Before using a script, make
sure mailx is configured to send e-mail on all systems where the monitoring scripts will be deployed.
l Paging requires that your service provider supports receiving e-mails on your paging device.
l To kill any of the processes generated by these scripts, use the kill -9 command. The kill command
alone does not kill all of the processes.
Satisfy requirements
See Requirements for using the monitoring scripts on page 217 before you use this script. NOTE: The script
must be run in the ksh shell.
1. Open the script in the app-modules directory of the SharePlex product directory.
2. Add any number of address strings after the MailUserName= variable. Use the full e-mail and/or pager
address. Separate multiple entries with a comma, as shown in the following example:
[email protected],[email protected]
IMPORTANT! If the person modifying the script is someone other than a SharePlex user, he or she needs to
have these Oracle privileges:
l CONNECT privileges
l SELECT privileges for the V$LOG table
l SELECT privileges for the SharePlex internal tables
Run sp_logmon
Run the script from the util sub-directory of the SharePlex product directory, not from app-modules. When you
run it from the util directory, you actually make a soft link that runs a utility which first sets up the correct
environment before running the script itself.
Syntax
nohup sp_logmon -p port -t interval -l integer [-m ] [/dev/null] &
Table 4: Required arguments
Argument Description
Argument Description
/dev/null Redirects the notification output to the /dev/null device on the local system so that
the monitoring process continues to run in the background and generate output.
To have the output appear on screen, omit this argument.
-m Enables the e-mail/paging option. Without this parameter, sp_logmon only logs
errors to the log file.
l When sp_eventmon detects an error that you defined, it prints a notification to the error.splex log file
and an e-mail message, if that option is enabled.
l It logs each error, the error Event Log line number of the error, the sp_cop instance name (typically the
port number), and the time and date of the error.
The script relies on the iwgrep program, the error_list file (described later), and a marker file named
username.mrk (where username is derived from the string that you enter with the -s argument when you run
sp_eventmon). These three components must be kept in the same directory as the script, or it will not function.
NOTE: The username.mrk file prevents duplicate warning messages from being sent to the log and to your e-
mail or pager. Without this file, the script starts scanning the Event Log from the beginning every time it starts.
Warnings that were previously generated are sent again.
Satisfy requirements
See Requirements for using the monitoring scripts on page 217 before using this script. NOTE: The script must
be run in the ksh shell.
Set IW_HOME
The IW_HOME variable in the script must be set to the correct value on each machine. This variable must point
to the directory in which the monitoring scripts and iwgrep reside.
If the path is not correct:
IW_HOME=/export/home/splex/monscripts
1. Open the script in the app-modules directory of the SharePlex product directory.
2. Add any number of address strings after the MailUserName= variable. Use the full e-mail and/or pager
address. Separate multiple entries with a comma, as shown in the following example:
[email protected],[email protected]
Run sp_eventmon
NOTES:
l If you are running multiple instances of sp_eventmon, each instance must be run under the name of a
different operating system user. Each username.mrk file will have a different username.
l Use the truncate log command in sp_ctrl to truncate the Event Log frequently when you are running the
sp_eventmon script. If the log grows too large, the iwgrep program cannot grep from it properly. When
you issue the truncate log command, remove the username.mrk file. The next time you run sp_
eventmon it will create a new file. See the SharePlex Reference Guide for more information about the
truncate log command.
l When there is an existing Event Log with errors in it and the script is running, issue the truncate log
command and then delete the sp_cop_name.mrk file, where sp_cop_name is the value used in the -s
argument when the script was run. This file is in the util sub-directory of the SharePlex product directory.
To run sp_eventmon
Run the script from the util sub-directory of the SharePlex product directory, not from app-modules. When you
run it from the util directory, you actually make a soft link that runs a utility which first sets up the correct
environment before running the script itself.
Syntax
nohup sp_eventmon -s 'sp_copname' -t interval -p path [-n name ] [-m] /dev/null &
Table 6: Required arguments
Component Description
-s 'sp_copname' Sets the name of sp_cop that was used when sp_cop was started with the -u
option. The name of sp_cop must be enclosed within single quote marks. You
can use this parameter more than once to monitor multiple sp_cop instances on
a system. Without this parameter, sp_eventmon will not start.
& Runs the script in the background.
-t interval Sets the time interval between scans in seconds. The value can be any positive
integer.
Component Description
-p path Sets the path to the
SharePlex variable-data
directory. Without this
variable, sp_eventmon
assumes the default path.
/dev/null Redirects the notification
output to the /dev/null
device on the local system
so that the monitoring
process continues to run in
the background and
generate output. To have
the output appear on
screen, omit this argument.
-n name Sets the name of the Event
Log if it is something other
than the default name
“event_log.”
-m Enables the e-mail/paging
option. Without this option,
sp_eventmon only logs
errors to the log file.
Satisfy requirements
See Requirements for using the monitoring scripts on page 217 before using this script. NOTE: The script must
be run in the ksh shell.
1. Open the sp_ps file in the app-modules directory of the SharePlex product directory.
2. Set the interval= parameter to the required scan interval. Use any positive integer, for example:
interval=1500
1. Open the script in the util directory of the SharePlex product directory.
2. Add any number of address strings after the MailUserName= variable. Use the full e-mail and/or pager
address. Separate multiple entries with a comma, as shown in the following example:
[email protected],[email protected]
NOTE: The e-mail/paging option is enabled by default for sp_ps, but confirm that it was not changed. In the
script, MAILOPTION=TRUE enables e-mail notifications and MAILOPTION=FALSE disables them.
Run sp_ps
Run the script from the util sub-directory of the SharePlex product directory.
Syntax
nohup sp_ps ['sp_cop -u name'] CONFIGURATION [> /dev/null] [ &]
Table 8: Required arguments
Argument Description
system.
NOTE: If replicating between source and target tables on the same system,
there are no Export or Import processes.
Satisfy requirements
See Requirements for using the monitoring scripts on page 217 before using this script. NOTE: The script must
be run in the ksh shell.
1. Open the sp_qstatmon script in any ASCII text editor. The script is in the .app-modules directory in the
SharePlex installation directory.
2. Add the address strings after the MailUserName= variable. Use the full e-mail and/or pager address.
Separate multiple entries with a comma, as shown in the following example.
[email protected], [email protected]
3. Save and close the file.
Syntax
nohup sp_qstatmon -v path -t n -p port_number [-c integer ] [-d integer ] [-m] > /dev/null &
Table 9: Required arguments
Argument Description
Argument Description
/dev/null Redirects the notification output to the /dev/null device on the local system so that
the monitoring process continues to run in the background and generate output.
To have the output appear on screen, omit this argument.
-c integer Sets the number of messages in the capture queue at which the script issues a
warning message. This value can be any positive integer. Without this parameter,
sp_qstatmon defaults to 100 messages.
-d integer Sets the number of messages in the post queue at which the script issues a
warning message. This value can be any positive integer. Without this parameter,
sp_qstatmon defaults to 100 messages.
-m Enables the e-mail/paging option. Without this parameter, sp_qstatmon only
logs errors to the log file.
1. Run the SpClient utility from the SharePlex programs group.
2. On the SpClient toolbar, click the SpMonitor button.
3. Select the port number of the instance of SharePlex that you want to monitor, then click
Configure Monitor.
Host is down
Internal error
Out of sync
Poster failure
Deactivate config
Error
5. Click Start to run the script. The script starts and the word Start becomes Stop. The script runs
continuously to monitor SharePlex until you click Stop.
Enable SNMP
To enable SNMP monitoring of SharePlex replication, set the SP_SLG_SNMP_ACTIVE parameter to 1. By
default, the parameter is set to 0 (disabled).
Parameter Value
SP_SLG_SNMP_HOST The name of the system (host) to which the traps will be sent
SP_SLG_SNMP_COMMUNITY The community security string
SP_SLG_SNMP_MJR_ERRNUM The major error number to be used by the traps
SP_SLG_SNMP_MNR_ERRNUM The minor error number to be used by the traps
Parameter Value
SP_SLG_SNMP_ The enterprise object identifier to send with the trap. The default is
ENTERPRISE_OID 1.3.6.1.4.1.3.1.1 .
SP_SLG_SNMP_TRAP_OID A custom object identifier to bind to the trap. The default is
1.3.6.1.2.1.1.1.0.
SP_SLG_SNMP_TRAP_ The name of the trap program. The default is iwsnmptrap.
PROGRAM
SP_SLG_SNMP_INT_ERROR SharePlex logic errors and errors that cause processes to exit
SP_SLG_SNMP_SYS_ERROR System-related errors encountered by SharePlex
SP_SLG_SNMP_ERROR Other SharePlex errors
SP_SLG_SNMP_OUT_OF_SYNC Replication is out of synchronization
SP_SLG_SNMP_STARTUP SharePlex starts up
SP_SLG_SNMP_SHUTDOWN SharePlex shuts down
SP_SLG_SNMP_LAUNCH A SharePlex process starts
SP_SLG_SNMP_EXIT A SharePlex process stops
Contents
Find the solution in the SharePlex Knowledge Base
Solve Database Setup problems
Solve configuration file problems
Solve activation problems
Solve replication problems
Solve Oracle DDL replication problems
Solve queue problems
Solve synchronization problems
Solve compare command errors
Solve other replication problems
How to resynchronize source and target tables
How to restore Oracle archive logs
How to release semaphores after process failure
How to resolve disk space shortage
How to find the ORACLE_SID and ORACLE_HOME
2. Rerun the Database Setup
utility. For more
information, see Database
Setup Utilities in the
SharePlex Reference
Guide.
ctrl. Run sp_ctrl from the bin sub-
directory in the SharePlex product
directory.
Oracle library On Unix and Linux systems, SharePlex expects the Install the appropriate library from
location not Oracle library to be in the $ORACLE_HOME/lib or Oracle and then re-start
correct
$ORACLE_HOME/lib32 directory. In some SharePlex (if it is stopped).
environments, the Oracle library has a different name SharePlex will link to the correct
than what SharePlex expects it to be, or it is installed library from that point forward.
in a different location than expected (or both). In that
case, you will see an error message when you attempt
to run the Database Setup utility.
privileges SharePlex Reference Guide.
l Database specifications
in a configuration file on
page 64
l Routing specifications in
a configuration file on
page 66
After your fix the routing syntax,
activate the affected configuration
again.
Examples:
Datasource: r."MyMSSDB"
(source database specification on
first line of configuration file)
myhost@r."TargMSSDB" (target
database in routing map)
file you want to activate is not listed, it
may not be in the config sub-directory
of the variable-data directory. Find the
file and move it to that directory, then
issue the activate config command
again.
Attempt to run sp_conf when The configuration is already in None required.
sp_conf is already active the process of being activated.
Login parameters not set... A SharePlex account and Run the Database Setup utility. For
internal tables do not exist in more information, see Database
the source database. Setup Utilities in the SharePlex
Reference Guide.
WARNING, not all objects One or more tables failed to For more information, see Some
activated successfully. activate. objects failed to activate on page 235.
Check activation log.
Deactivate/flush a You are attempting to No action is necessary if this is the
nonactive datasource deactivate a configuration that configuration that you wanted to
is not active. deactivate. To see a list of
configurations, use the list config
command.
(Oracle) Currently involved Objects in the configuration SharePlex cannot lock Oracle tables
in transaction. file are locked. to analyze them if another process
has them locked. If the locks are from
source transaction activity, try
activating at a time when the database
is less busy.
General issues
Problem Description Solution
l Set the Oracle DB_FILE_
MULTIBLOCK_READ_COUNT
parameter to the maximum number
of blocks that can be read in one I/O
request. This is defined by the
system setting MAX_IO_SIZE/DB_
BLOCK_SIZE. You can increase the
DB_BLOCK_BUFFERS parameter
as well.
not cached, they add unnecessarily are part of a key, replicate the tables that
to the replication volume. contain those keys, and remove the
sequences from the replication
configuration. You should see significant
performance improvement.
new logs, and it suspends
processing. Post stalls because it is
waiting for Oracle.
Post stopped
If Post stops, issue the status command in sp_ctrl to find out why.
• An idle status means there is no data in the post queue to post.
• A stopped by user status means that a SharePlex user stopped the Post process. To find out which user is
responsible, view the user issued commands in the Event Log.
• A stopped due to error status means a replication or database error caused Post to stop.
The following are some potential causes for Post to stop unexpectedly.
could mean that a user, application, or job is the data if DML was performed on the table.
accessing the table and might have caused For more information, see How to
an out-of-sync condition. Or, for an Oracle resynchronize source and target tables on
target, it could mean that a repair command page 267.
has locked the table.
owners. Oracle has stated that the issue
will not be fixed. See Oracle TAR
2577886.996 for more information.
that were generated before the
current one. Note that this error also
occurs when the archived log is
corrupted.
Post error messages
operation taking too long. It is taking more than the For more information, see Oracle
internally allowed time to Post-related issues on page 241.
apply a SQL statement to the
target instance.
Rowid not found SharePlex cannot locate the Check for triggers, processes, or
correct row to update in the users that may have deleted the row
target database. on the target. For more information,
see Solve synchronization problems
on page 254.
Database not available. Post cannot log into the Verify that the database is running,
target database. and determine whether someone
changed the password of the
SharePlex database account.
l Set a hard limit:
(Recommended) A root user
and system restart are
required to change the hard
limit, but the value remains
fixed at the correct level to
support SharePlex. Consult
your System Administrator for
assistance.
l Set a soft limit: A soft limit
setting stays in effect only for
the duration of the sp_cop
session for which it was set,
and then it reverts back to a
default value that may be
lower than the hard limit and
too low for SharePlex.
06/29/00 08:05 System call SharePlex ran out of space For more information, see How to
error: sp_ocap(que) (for for the queues on the disk. resolve disk space shortage on
o.QA11 queue o.QA11) No space page 274.
left on device devname
06/29/00 08:05 Internal error:
sp_ocap (for o.QA11 queue
o.QA11) 10705 - writecommit
failed que_BUFWRTERR: Error
writing buffer to file
06/29/00 08:05 Process exited
sp_ocap (for o.QA11 queue
o.QA11) [pid = 8692] -exit(1)
l SP_OCT_REPLICATE_DDL
l SP_OCT_AUTOADD_ENABLE
l SP_OCT_AUTOADD_MV
l SP_OCT_AUTOADD_SEQ
l SP_OCT_REPLICATE_ALL_DDL
l Transformation changes the target data, so before and after images cannot be compared.
l The transformation routine posts the data, not SharePlex.
When SharePlex determines that source and target data are different, it generates error conditions but
continues to post other data from the post queue. To direct Post to stop processing altogether when it detects
an out-of-sync condition, change the SP_OPO_OUT_OF_SYNC_SUSPEND (Oracle) or SP_OPX_OUT_OF_
SYNC_SUSPEND (Open Target) parameter. See the Post parameter documentation in the SharePlex
Reference Guide.
When an out-of-sync condition occurs, the Post process logs a message in the Status Database and also to the
Event Log. To view these files in sp_ctrl:
Use these commands frequently to monitor for out-of-sync errors.
The following is an example of how SharePlex reports an out-of-sync condition.
sp_ctrl (irvspxu14:8567)> show sync
Out Of Sync Status Database irvspxu14
Count Details
----- --------------------
3 Table "SCOTT"."TG_TEST1" out of sync for queue irvspxu14 since 16-Jun-
08 17:06:33
3 Table "SCOTT"."TG_TEST2" out of sync for queue irvspxu14 since 17-Jun-
08 15:47:58
1 Table "SCOTT"."TG_TEST3" out of sync for queue irvspxu14 since 17-Jun-
08 15:52:03
When data goes out of synchronization, SharePlex logs the failed SQL statements to the database_ID_
errlog.sql file in the data sub-directory of the SharePlex variable-data directory.
IMPORTANT: If you see an out-of-sync message in the Status Database and in the Event Log, but there is no
record in the database_ID_errlog.sql file for the transaction, do not ignore those messages. They could be
associated with a ROLLBACK. Regardless of whether or not a transaction is rolled back, SharePlex still
compares the pre-images of the source and target rows. If they are different, that indicates that the data is out of
synchronization. Only when a transaction is committed on the source but fails on the target does SharePlex log
it to the database_ID_errlog.sql file, to give you a record of the statement that should have been applied as a
tool for problem solving and for manually applying the statement if appropriate. Rolled back statements are
canceled operations, and therefore not logged on the target.
1. Get the rowid of the affected row from the database_ID_errlog.sql file in the variable-data directory on
the target system.
2. Using the rowid in the WHERE clause, run a SELECT query on the source table to get the row data for
this rowid.
3. Run a SELECT query on the target table, using the row data that you got from the source query in the
WHERE clause.
4. Compare the query results. If they are different, the rows are out of synchronization. If they are the same,
the rows are synchronized.
2. Alter the target table to undo
the DDL changes.
3. Start Post and let SharePlex
post the replicated DDL
(which is still in the post
queue).
sp_ctrl(sysB)> start
post
l Run the sp_add_trigger.sql
script, which directs triggers to
ignore the SharePlex Oracle
user. See the utilities
documentation in the
SharePlex Reference Guide
for more information about the
trigger scripts.
l Disable the triggers if they are
not needed.
l The network or target system was unavailable
and too much data accumulated in the export
queue.
l The target was unavailable and too much data
accumulated in the Post queue.
l Capture lost pace with the logging of source
transactions. In this case, data accumulates in
the capture queue.
l A SharePlex process was stopped, but not
restarted.
l The flush command was issued, but Post was
not started again.
sync conditions are: Release Notes.
To undo duplicate DDL changes made manually
l Non-replicated DDL changes
and also by SharePlex:
are made to source objects, but
the configuration was not 1. Stop the Post process (it might already be
reactivated so that the objects stopped).
can be re-analyzed.
sp_ctrl(sysB)> stop post
l DDL that SharePlex replicates
also gets performed manually 2. Alter the target table to undo the DDL
on the target. changes.
3. Start Post and let SharePlex post the
replicated DDL (which is still in the post
queue).
sp_ctrl(sysB)> start post
l If SharePlex is many logs behind Oracle,
consider resynchronizing the data instead
of restoring the logs. It might take less time
than Capture would take to process the
missing records from the archive logs. In
addition, it eliminates the possibility that the
capture queue could exceed free disk
space while processing the archive logs.
You can base your decision on the size of
the redo logs and the number of tables
being replicated, both of which determine
how much information Capture must
process. Also take into consideration how
much latency the users of the target data
can tolerate.
l If archive logs are available, copy the
appropriate logs back to the archived-log
directory on the source system, or use the
SP_OCT_ARCH_LOC parameter to point
SharePlex to their location.
existing value.
1. Determine why it happened before you resynchronize the data. Otherwise, the problem can repeat itself
and result in more data going out of synchronization.
2. Stop the Post process to prevent further errors. If the accumulation of messages in the Post queue is
threatening to cause disk space issues, and if there is enough disk space available on the source
system, you can stop Import until Post can clear out some of the operations from other transactions. For
more information, see How to resolve disk space shortage on page 274.
3. View the Status Database and the Event Log to determine the cause of the problem.
4. Resolve the problem.
Resynchronize data
For more information, see How to resynchronize source and target tables on page 267.
l By viewing the sp_declt log file — In the file, look at the Session IDs of the sp_declt processes and find
the one that matches the PID of the sp_desvr process that died. That is the sp_declt process to kill. The
On Windows systems, the logs also record the startup of the associated sp_cop process.
l If you do not see the NuTCRACKER service, re-install SharePlex.
l If the NuTCRACKER service started, but SharePlex still returns errors, check to see if the
NuTCRACKER files were relocated. To determine the correct installed location, look at the
following in the Windows Registry:
HKEY_LOCAL_MACHINE\SOFTWARE\Data Focus\Runtime
l The InstallDir string in the right pane of the Runtime node shows the correct location for the
files. Search for the MKS Toolkit folder and restore the files to the location specified in the
InstallDir entry.
If you cannot locate the files or cannot restore them to the correct location, do the following:
1. Stop the SharePlex and NuTCRACKER services, if running.
2. Run regedit to open the Registry Editor.
another one when you start sp_
cop again.
Parameter does not exist in You tried to set a parameter, and Use the list param command to
database.
you entered the wrong name or view the SharePlex parameters
the parameter is deprecated for for your version and to verify the
your SharePlex version. spelling.
or…
Permission denied for command You are not a member of the Issue the authlevel command to
- check your authorization user group that can issue this view your authorization level.
level. command.
Default host is not defined: SharePlex cannot to determine Either establish a default host
use the ‘host’ command or [on which system you want the with the host command or use
host] option. command to affect. the [on host] option with the
command that you want to issue
(if available).
l For Oracle tables, if only a few tables are out of synchronization, and they are not large, you can use the
compare command in sp_ctrl to see how many rows are out-of-sync in each one. If the number of out-
of-sync rows is small, you can run the repair command to resynchronize them. If the number of out-of-
sync tables is large, it might take less time to re-synchronize the databases than it will to use the
compare and repair commands to repair them. For more information, see Overview of Compare and
Repair on page 278.
l Manually patch out-of-sync tables on page 268
l Resynchronize by copying the source tables on page 268
l Resynchronize with Oracle transportable tablespace on page 269
l Resynchronize with an Oracle hot backup on an active database on page 270
1. Stop user access to the affected source table.
2. On the target system, open the ID_errlog.sql file.
3. Apply the SQL statement(s) to the target table.
4. Reactivate the configuration if you had to make any changes to it.
sp_ctrl> activate config filename
5. Allow user access to the source table.
1. On the source and target systems, make sure sp_cop is running.
2. On the target system, run sp_ctrl.
3. [If necessary] On the target system, issue the show sync command to identify the tables that are out of
synchronization.
sp_ctrl> show sync
4. On the source system, stop activity for the out-of-sync tables.
5. On the source system, run sp_ctrl.
6. On the source system, issue the flush command. NOTE: This command has additional options for use
with named queues or multiple targets. See the SharePlex Reference Guide for more information about
this command.
sp_ctrl> flush datasource
7. On the source system, copy the tables.
8. On the source system, reactivate the configuration file if you had to make any changes.
sp_ctrl> activate config filename
9. On the source system, allow users back onto the source tables.
10. On the target system, issue the status command until it shows that Post stopped.
sp_ctrl> status
11. On the target system, restore the tables.
12. On the target system, disable or modify triggers, referential integrity constraints and check constraints
according to the requirements of your replication strategy.
13. On the target system, determine the status ID of each message by viewing the Status Database.
sp_ctrl> show statusdb detail
14. On the target system, clear each message with the following command.
sp_ctrl> clear status statusID
15. On the target system, start the Post process.
sp_ctrl> start post
2. On the source system, run sp_ctrl.
3. On the source system, issue the flush command in sp_ctrl. NOTE: This command has additional
options for use with named queues or multiple targets. See the SharePlex Reference Guide for more
information.
sp_ctrl> flush datasource
4. Export the metadata to an export file according to the Oracle documentation.
5. When the export is finished, copy the datafiles to a secondary location on the source system. This
minimizes the impact on the source database of copying the files to the target system.
6. On the source system, set the source tablespace(s) to READ WRITE mode.
SQL> ALTER TABLESPACE name READ WRITE;
7. On the target system, drop the existing datafiles and tablespaces from the target database so that the
copied files can be applied.
8. Copy the files from the secondary location on the source system to the target system.
9. On the target system, use the Oracle import utility to import the metadata and the tablespace definitions.
10. On the target system, set the tablespace(s) to READ WRITE mode.
SQL> ALTER TABLESPACE name READ WRITE;
NOTE: SharePlex must be the only user permitted to have write access to the target tables, unless you
are using peer-to-peer replication.
11. On the source system, reactivate the configuration file if you had to make any changes to it.
sp_ctrl> activate config filename
12. On the target system, run sp_ctrl.
13. On the target system, start the Post process.
sp_ctrl> start post
IMPORTANT:
l To resynchronize centralized reporting, such as a data warehouse, you cannot use a hot backup from
all source systems. One backup would override the data from the previous one. You can use a hot
backup of one of the source instances to establish the target instance, and then use another method
such as export/import or transportable tablespaces to copy the tables from the other instances.
l To resynchronize peer-to-peer replication, you must quiet all of the secondary source systems for the
duration of this procedure. Move all users to the primary system, and then follow the procedure. After the
procedure has been performed on all of the secondary systems, users can resume activity on them.
l Before you start, review this procedure and see the SharePlex Reference Guide for more information
about the commands that are used.
1. On the source and target systems, run sp_ctrl.
2. On the target system, stop the Post process. This allows the replicated data to accumulate in the post
queue until the target instance has been recovered and reconciled.
sp_ctrl> stop post
3. On the source system, run the Oracle hot backup.
4. On the source and target systems, verify that sp_cop, sp_ctrl and all SharePlex processes (Capture,
Read, Export, Import, Post) are running.
sp_ctrl> status
5. Switch log files on the source system.
l To recover the database to a sequence number, make a note of the highest archive-log
sequence number.
l To recover the database to an Oracle System Change Number (SCN), pick an SCN to recover to
on the target database.
6. Recover the target database from the hot backup:
l If recovering to a sequence number, recover the database from the hot backup using the UNTIL
CANCEL option in the RECOVER clause, and cancel the recovery after Oracle has fully applied
the log from the previous step.
l If recovering to a SCN, recover the database from the hot backup using the UNTIL CHANGE SCN
option in the RECOVER clause, and cancel the recovery after Oracle has applied the logs
matching the SCN from the previous step.
7. Open the database with the RESETLOGS option.
8. On the target system, issue the reconcile command. If you are using named post queues, issue the
command for each one. Issue the qstatus command if you are unsure of the queue name.
l If recovering to a sequence number, substitute the sequence number of the log that you
noted in step 5.
sp_ctrl> reconcile queue queuename for datasource-datadest seq sequence_
number
Example: reconcile queue SysA for o.oraA-o.oraA seq 1234
l If recovering to a SCN, substitute the SCN that you noted in step 5.
sp_ctrl> reconcile queue queuename for datasource-datadest scn scn_number
Example: reconcile queue SysA for o.oraA-o.oraA scn 0123456789
The reconcile process retains control of sp_ctrl until it is finished, and then the sp_ctrl prompt returns.
9. On the target system, log onto SQL*Plus as the Oracle user for SharePlex, and run the cleanup.sql
script located in the bin sub-directory of the SharePlex product directory. This script truncates and
updates the SharePlex tables, which are owned by the SharePlex user. If you are running multiple
instances of sp_cop with multiple variable-data directories, there is a SharePlex Oracle user for each
one. Make sure you run this script as the SharePlex user that owns the tables you want to restore. The
script prompts you for the SharePlex user name and password.
SQL> @/productdir/bin/cleanup.sql
l triggers
l foreign key constraints
l cascading delete constraints (or configure SharePlex to ignore them)
l check constraints
l scheduled jobs that perform DML
11. On the source system, reactivate the configuration file if you had to make any changes to it.
sp_ctrl> activate config filename
12. On the target system, start the Post process. The two instances are now in synchronization, and
SharePlex will continue replicating.
sp_ctrl> start post
1. Determine the sequence number that Capture needs to resume processing from. Capture stops when it
encounters a log wrap and prints a message to the Event Log (event_log) containing the redo log
sequence number it needs. You also can find out this number by querying the SHAREPLEX_ACTID
table and looking at the SEQNO column, as shown in the following example:
SQL> select * from splex.shareplex_actid;
2. Query the Oracle V$LOG_HISTORY table to find out when that sequence number was archived, then
copy the logs from that point forward to the source system.
SQL> select * from V$LOG_HISTORY;
1. Look for any SharePlex processes that did not shut down, and kill them.
$ ps -ef | grep sp_
$ kill -9 PID
3. Make a note of the following values:
l The first 32-bit word of each of the files above reveals the hexadecimal equivalent of the ID of the
shared memory segment. Convert this value to decimal. For example, in the shmaddr.loc file
shown in step 2, the first word is 0000 00e1, which equates to a decimal value of 225. In the
shstinfo.ipc file, the first word is 0000 00e0, which equates to a decimal value of 224.
l The third word of the shmaddr.loc and the shstinfo.ipc files reveals the hexadecimal equivalent
of the KEY of the shared memory segment and the semaphore. (Each set has the same key
value.) Do not convert this value to decimal. For example, in the shmaddr.loc file, the third word
is 4400 9328. In the shstinfo.ipc file, the third word is 4100 9328.
l The fifth word of each file is the SEMAPHORE ID. Convert this value to decimal. The semaphore
IDs in the examples are hex 0002 0021 and 0020 0020, which in decimal are 131105 and
131104, respectively.
5. Verify that the shared memory IDs from the shmaddr.loc and shstinfo.ipc are in the list and that
the keys match.
6. For each shared memory segment, verify that the value in the NATTCH column is 0. This ensures that
the SharePlex processes that you killed released their memory segments.
7. For the semaphores, verify that the semaphore IDs and keys match the file values.
1. Stop the Import process.
2. Let the data accumulate on the source system until Post processes enough messages to clear
the post queue.
3. Start Import.
4. Continue to stop and start Import until the amount of data accumulating in the post queue levels out.
When you implement this method, monitor the replication services and disk usage on the source system. On
Unix and Linux systems, you can use the sp_ps script to monitor processes and the sp_qstatmon monitoring
script to monitor the queues. On Windows systems, you can use the Sp_Nt_Mon utility to monitor those
components. For more information, see Monitor SharePlex on page 211.
1. Stop SharePlex on the affected system.
2. Add more disk space.
3. Start SharePlex.
l If both messages are there, SharePlex resumes processing where it stopped and the recovery
succeeded. If your applications generate high volumes of transactions, there may be numerous
backlogged messages in the queues. Depending on the nature of the transactions, how well the
target database and the Post process are tuned, and your tolerance for latency, it might be more
practical to resynchronize the data instead of waiting for replication to regain parity with
transactional activity.
l If one or more queues is corrupted, the Event Log records a message like this: Bad header
magic... or peekahead failure. Or, you will see the message queue recovery started,
but you will not see the queue recovery complete message that signifies successful queue
recovery. In this case, you must restore replication an initial state.
1. Run db_cleansp to restore the variable-data directory and SharePlex tables. It must be run on all
systems in the affected replicationconfiguration. See the utilities documentation in the SharePlex
Reference Guide.
2. Synchronize the data using your method of choice, then reactivate the configuration. For more
information, see Start replication on your production systems on page 188.
3. You can prevent this problem from occurring again by using the SharePlex monitoring utilities to start
unattended monitoring of key replication events, including queue volume alerts. For more information,
see Monitor SharePlex on page 211.
Contents
Overview of Compare and Repair
Before you use Compare and Repair
How to use the repair and compare commands
l compare: Compares an individual source table to its target table or compares a wildcarded set of tables
in the same schema.
l compare using: Takes input from a file to compare some or all of the tables in the active replication
configuration.
l repair: Repairs an individual target table or a wildcarded set of tables in the same schema.
l repair using: Takes input from a file to repair some or all of the tables in the active replication
configuration.
Supported targets
Oracle
The server and client processes then begin communication with each other. Depending on the syntax options
included in the command, the processes may be multithreaded on the target. The two processes compare the
source and target tables and then write the results to a log file.
l All of the SharePlex processes (Capture, Read, Export, Import, Post) must be running when you run a
comparison or repair command.
l The tables that you want to compare or repair must be part of an active configuration file.
l If a table is large, it will probably need to be sorted in the TEMP tablespace. Before running the compare
or repair commands, the TEMP tablespace may need to be made larger. The size depends on the
setting of the SP_DEQ_THREADS parameter or the threads option within the command syntax, both of
which controls the number of processing threads used by SharePlex on the target. Each thread
processes a table. At the default of two threads, the size of the tablespace should be larger than the sum
of the sizes of the two largest tables. If you set the number of threads higher, then increase the size of the
tablespace to accommodate a proportionate number of the largest tables. However,
l The UNDO tablespace may also need to be increased. Based on transaction volume and the length of
time it takes to compare the largest table, increase the size of the UNDO tablespace and increase the
undo_retention database parameter to avoid an ORA-1555 Snapshot too old error. Tables with LOBs
take much longer to compare or repair than tables without them.
The following are commonly modified compare and repair parameters. Do not increase the values unless
necessary. For details about these parameters, see their documentation in the SharePlex Reference Guide.
Parameter Description
SP_DEQ_MALLOC This parameter controls the fetch batch size. The batch size controls
the number of rows that SharePlex selects at once for comparison.
Larger batch sizes increase processing speed but require more
memory. The value is divided equally by the number of compare
threads to be used, and then the batch size is recalculated based on
all column sizes added together.
SP_DEQ_PARRALLISM This parameter manages the select statement Degree of Parallelism
hint. The parallelism option of the command overrides this setting.
SP_DEQ_PART_TABLE_UPDATE This parameter controls how the repair commands work on Oracle
partitioned tables, depending on whether row movement is possible.
SP_DEQ_READ_BUFFER_SIZE This parameter controls the size of the buffer that holds fetched LONG
and LOB data and can be adjusted based on available system
memory.
SP_DEQ_ROW_LOCK_ This parameter sets a threshold that controls whether SharePlex uses
THRESHOLD row-level or table-level locking when a where option is used.
SP_DEQ_SKIP_LOB This parameter determines whether or not LOBs are included in the
compare/repair processing.
l When the parameter is set to the default of 0, the compare
processes include LOBs in their processing.
l When the parameter is set to 1, only non-LOB columns are
compared and repaired. If LOBs are not modified once
inserted, you can speed up processing by setting this
parameter to 1.
Set this parameter on the source system.
SP_DEQ_TIMEOUT This parameter sets a queue backlog threshold. High backlogs delay
the establishment of a connection between the source and target
compare/repair processes. If the backlog meets or exceeds this value,
any compare or repair command that is issued on the source will exit
and return an error. If this happens, consider running the compare or
repair when the system is less busy.
l Although the users of the tables are not usually affected by the brief locks that are applied when tables
are compared, they are locked out of the target table for the duration of the repair process. For a small
table, this might not be disruptive, but for a large table needing extensive repairs, the wait can be
significant.
l Locks on a target table can reduce posting performance if Post must wait for the repair to finish before it
can apply changes to that table and move on to other tables. This increases the latency of the target data
and causes operations to accumulate in the post queue. If the objects that Post needs to change are
different from those being repaired, the two processes run simultaneously.
l If you must repair a table immediately, but cannot tolerate locks or replication latency, you can use the
where option to limit the repair to certain rows. An alternative is to use the key option, but this option may
cause the repair to miss some out-of-sync rows.
l If the repair can wait, correct the cause of the problem immediately and then do the repair during non-
peak hours.
l Replication latency can slow down the compare and repair processing. The message sent from the
source to spawn the command processes on the target is sent through the queues along with regular
Contents
Disable LOB Mapping
Tune Capture on Exadata
Tune checkpointing
Add a second thread
1. Run sp_ctrl on the source system.
2. Set SP_OCT_ENABLE_LOBMAP to 0.
sp_ctrl> set param SP_OCT_ENABLE_LOBMAP 0
3. Stop Capture.
sp_ctrl> stop capture
4. Truncate the SHAREPLEX_LOBMAP table.
1. Run sp_ctrl.
2. Set the SP_OCT_ASM_MULTI_OCI parameter to the number of threads that you want Capture to use.
sp_ctrl> set param SP_OCT_ASM_MULTI_OCI 3
3. Restart Capture.
NOTE: Capture automatically adjusts its buffer size to the value of the AU_SIZE parameter that is set for
the disk group where the logs reside. This is the recommended buffer size for best performance and
should not be changed. The SP_OCT_ASM_MULTI_OCI_BLOCK_SIZE parameter can override the default
behavior if necessary.
Tune checkpointing
Capture checkpoints it state to disk on a regular basis to support recovery. This information includes the log and
location within that log of the most recently processes data. In a database environment where there are frequent
log switches, a switch can occur before SharePlex writes its checkpoint. You can use the SP_OCT_
CHECKPOINT_LOG parameter to ensure that Capture issues a checkpoint before a log switch.
The checkpoint is triggered when Capture lags a specified number of logs behind Oracle. For example, with the
default of 2, Capture does a checkpoint when it falls 2 or more logs behind Oracle.
The range of permissible values for this parameter is from 2 (the default) to a value equal to the number of logs
you are using. A value of 0 disables this feature.
Contents
Use Oracle INDEX hints
Tune SQL Caching
Adjust open cursors
Skip large maintenance transactions
Make small transactions faster
Split a large transaction into a smaller one
Tune queue performance
Tune hash-based horizontally partitioned replication
When SharePlex performs UPDATEs and DELETEs on a target table, Oracle sometimes does not pick the most
efficient index for SharePlex. Without the right index, the Post process slows down when multiple UPDATEs and
DELETEs are performed. SharePlex enables you to make use of Oracle’s INDEX hints to enforce the use of the
correct index on target objects.
To use INDEX hints, use the hints.SID file, where SID is the ORACLE_SID of the target instance. When Post
applies a SQL statement, it reads the hints file. If the file contains entries, Post reads the data into memory and
then checks each UPDATE and DELETE statement that it processes. If any of those operations involve tables
listed in the hints file, Post sends the hints to Oracle.
Use hints only for tables that need them. For example, if Post is doing full-table scans on tables where there are
defined indexes, use hints only for those tables. The use of hints causes Post to read the hints.SID file for each
operation on tables listed in the file. This can slow down processing if numerous tables are listed.
The default maximum number of hints (table/index pairs) is 100. You can adjust this value with the SP_OPO_
HINTS_LIMIT parameter. See the SharePlex Reference Guide for more information.
1. Stop Post if it is running.
2. Open the file.
3. You can add comment lines anywhere in the file. Start a comment line with a pound symbol (#).
4. On a non-commented line, use the following template to specify a source table and the index that you
want to use for that table. Put at least one space between the table name and the index name. Place
each specification on a separate line.
src_owner.table tgt_owner.index
Example
scott.emp scott.emp_index
Supported targets
All
Oracle
Parameter Description
SP_OPO_ Enables or disables SQL Cache. Enabled by default with a setting of 0. To disable SQL Cache
SQL_ set the parameter to 1. To disable SQL Cache only for batch operations set the parameter to 3,
CACHE_ which reduces the amount of memory that Post uses.
DISABLE
SP_OPO_ Determines the number of active statements to cache per Post session. Post opens 50 cursors
MAX_CDA per session by default. You can increase or decrease this setting if needed. For more
information, see Adjust open cursors on page 289.
Open Target
Parameter Description
SP_OPX_SQL_ Enables or disables SQL Cache. Enabled by default with a setting of 0. To disable
CACHE_DISABLE SQL Cache set the parameter to 1.
Use the target Determines the number of active statements to cache per Post session. For Open
command: Target databases, Post gets the number of allowed active statements from the
target r.database ODBC driver. If that value is lower than the setting for max_active_statements,
[queue queuename] set Post stops and returns an error. You can either disable the SQL Cache feature or
resources max_ reduce the value of max_active_statements.
active_
statements=number_
of_active_statements
1. Determine the hit ratio for cached statements by running sp_ctrl and issuing the show post
detail command.
2. Look for the SQL cache hit count field. It shows the ratio of the total number of messages that are
executed without parsing and binding divided by the total number of INSERT, UPDATE and
DELETE operations. For example, a hit ratio of 36% indicates that Post is using cached statements 36
percent of the time.
3. View the hit ratio after several days of typical replication activity to gauge the ideal setting for the number
of active statements. If the hit ratio is under 50 percent, increase the parameter value in a small
increment of about 5 statements.
The value of the Oracle parameter OPEN_CURSORS needs to be set high enough to support the level of
performance expected of the Post process. This parameter defines the maximum number of cursors that a
process (such as Post) can open.
Internally, Post establishes its maximum total number of open cursors from the value of OPEN_CURSORS,
minus the 10 required for routine calls. You view this value in the event_log. For the following example, OPEN_
CURSORS is set to 512.
Notice: sp_opst_mt (for o.oracle-o.oracle queue oracle) Post will not open more
than 502 cursors (OPEN_CURSORS – 10).
Post maintains a record of the number of cursors it has open. If Post detects that it will exceed the maximum
number of cursors, it closes the least-recently used cursor in the least-recently used session.
To avoid running out of cursors, the Post process queries the OPEN_CURSORS value when it starts. If the value
is not high enough, Post writes the following warning to the event_log:
To estimate a value for OPEN_CURSORS that is high enough for the Post process
1. Estimate the peak number of concurrent transactions (sessions) that will be expected for the target
instance. Post opens a session on the target system for each one on the source system. You can get a
good estimate of the number of transactions by issuing the show post detail command in sp_ctrl when
production is at its maximum level. The Number of Open Transactions field in the display shows the
number of concurrent transactions.
2. Use the following formulas to determine the correct setting for OPEN_CURSORS to support SharePlex
(and other applications that may be accessing the target data).
SQL Cache enabled (default): By default, Post needs to reserve 10 cursors for routine calls that are
closed once they finish, plus a minimum of 7 cursors per transaction (the base minimum of 2 plus an
additional 5). The formula is:
10 + (peak number of concurrent transactions x 7) = minimum open cursors needed
SQL Cache disabled: The Post process needs to reserve 10 cursors for routine calls that are closed
once they finish, plus a minimum of 2 cursors per transaction. The formula is:
10 + (peak number of concurrent transactions x 2) = minimum open cursors needed
Large transactions that are applied by application patches or other internal Oracle operations can be omitted
from replication if they are not relevant to the data needed by user applications. These operations can translate
into thousands or millions of individual UPDATE or DELETE statements for SharePlex, all to be applied by Post.
Such transactions can adversely affect Post performance and increase the latency between the source and
target data that user applications need to perform their work. There may be reasons to prevent other DML
operations from being posted to a target database.
There are two ways you can handle such transactions:
l Assuming there are no referential relationships between those operations and the user data, configure
those operations to process through a dedicated named post queue. For more information, see
Configure named post queues on page 91.
l Configure Post to skip the operations, and then apply the SQL statement directly through Oracle. See the
following instructions.
1. On the source system, run the create_ignore.sql script from the util sub-directory in the SharePlex
product directory. This script creates the SHAREPLEX_IGNORE_TRANS public procedure in the
database. When executed at the start of the transaction, the procedure directs the Capture process to
ignore the DML operations that occur until the transaction is committed or rolled back. Thus, the affected
operations are not replicated. For more information about the script, its limitations, and how to run it, see
create_ignore.sql in the SharePlex Reference Guide.
2. Edit your patch script to call SHAREPLEX_IGNORE_TRANS before UPDATE or DELETE operations.
This allows SharePlex to ignore the transaction and not send it to the target. The script will also have to
be run on the target to bring the database back into sync.
NOTE: Only DML operations are affected by the SHAREPLEX_IGNORE_TRANS procedure. It does not cause
SharePlex to skip DDL operations, including TRUNCATE. DDL operations are implicitly committed by Oracle, so
they render the procedure invalid.
l Increase the level of concurrency
l Reduce the number of commits
Together these features are called Post Enhanced Performance, or PEP.
l For an Oracle target database, set the SP_OPO_DEPENDENCY_CHECK parameter to 1.
l For SQL Server and PostgreSQL, set the SP_OPX_THREADS parameter to 2 or greater.
NOTE: The use of Transaction Concurrency may reduce or eliminate the need to run multiple Post processes,
but you can still benefit from that configuration because it eliminates a single point of failure. If a Post process
fails, the other Post processes can continue, resulting in less recovery time, after the problem is resolved. The
Transaction Concurrency feature can be used in a multi-Post configuration, so long as the rules for using
multiple Post processes are followed (such as including all tables with referential integrity in the same process
stream). For more information, see Configure named post queues on page 91.
l SP_OPO_COMMIT_REDUCE_MSGS (Oracle targets)
l SP_OPX_COMMIT_REDUCE_MSGS (Open Target)
The default batch transaction size is 100 messages. This value is an approximation. If the size of the last
transaction in the batch exceeds the specified threshold, SharePlex waits for the remaining messages and the
commit before applying the batch transaction to the target.
Commit reduction is enabled by default. To disable commit reduction, set this parameter to a value of 1.
Example:
target r.mydb queue q1 set resources commit_frequency=10000
To use this feature, both SP_IMP_QUEUE_PAUSE and SP_IMP_QUEUE_RESUME must be greater than zero,
and SP_IMP_QUEUE_PAUSE must be greater than SP_IMP_QUEUE_RESUME.
1. Set the SP_OCF_HASH_BY_BLOCK parameter to 1.
2. Reactivate the configuration file.
Contents
Recover replication if the primary system fails
Recover replication if the secondary Oracle instance fails
Move replication during planned failover and failback
Resume replication after failure and recovery
Supported databases
Oracle database on Unix or Linux
1. Verify that Export is stopped on the secondary system.
sp_ctrl> stop export
2. Use the qstatus command to view the post queue, and keep issuing this command until the number of
backlogged messages is 0. NOTE: Do not wait for the actual numberof messages to be 0. If the primary
system failed before the commit for some transactions were received, messages for these partial
transactions will remain in the queue until cleared later in this procedure.
sp_ctrl> qstatus
3. Run the script that grants INSERT, UPDATE and DELETE access to all users on the secondary system.
4. Run the script that enables triggers and constraints on the secondary system when users begin using
this system.
5. Implement the failover procedure for relocating users to the secondary system, including starting the
applications.
6. Move users to the secondary system and let them resume working, but do not start Export. Their
transactions will now be accumulating in the export queue awaiting restoration of the source database.
NOTE: If started, Export will repeatedly try to connect to the primary system, wasting system resources.
7. Go to Procedure 2: Move replication to the restored primary system.
3. On the primary system, start sp_ctrl.
4. On the primary system, deactivate the configuration file. When you copied the archived SharePlex
variable-data directory to the primary system, you copied the configuration that was active before the
system failed. This causes the Capture process to set the transaction number to “1” when replication
from the primary system resumes.
sp_ctrl> deactivate config filename
3. On the primary system, delete the export queue.
sp_ctrl> delete queue queuename:X
Example: sp_ctrl> delete queue sysA:X
4. On the secondary system, delete the post queue.
sp_ctrl> delete queue queuename:P for datasource-datadest
Example: sp_ctrl> delete queue sysA:P for o.oraA-o.oraB
NOTE:
l You are issuing the delete queue command on the primary system because you restored the old
capture and export queues when you restored the archived SharePlex directories.
l You are issuing the delete queue command on the secondary system because data remaining in
the post queue cannot be posted. The primary system failed before Post received a COMMIT for
remaining transactions. SharePlex will rebuild the queues when you reactivate the configuration
and the two systems are reconciled.
2. On the primary system, stop Post.
sp_ctrl> stop post
3. On the secondary system, start Export. This establishes communication between the primary and
secondary systems.:
sp_ctrl> start export
3. On the primary system, recover the primary database from the backup by using the UNTIL CANCEL
option in the RECOVER clause, and cancel the recovery after the log with the number you recorded has
been fully applied.
4. Open the database with the RESETLOGS option.
NOTE: This resets the sequences on the primary system to the top of the cache upon startup.
5. On the primary system, issue the reconcile command using the sequence number of the log that you
noted previously. If you are using named post queues, issue the command for each one. If you do not
know the queue names, issue the qstatus command first.
sp_ctrl> qstatus
sp_ctrl> reconcile queue queuename for datasource-datadest seq sequence_number
Example: reconcile queue SysB for o.oraA-o.oraA seq 1234
6. On the primary system, disable triggers on the tables, or run the sp_add_trigger.sql utility script so that
the triggers ignore the SharePlex user.
7. On the primary system, disable check constraints and scheduled jobs that perform DML.
8. On the primary system, log onto SQL*Plus as the SharePlex Oracle user and run the cleanup.sql utility
from the bin sub-directory of the SharePlex product directory. This truncates the SharePlex tables and
updates the SHAREPLEX_ACTID table.
9. On the secondary system, truncate the SHAREPLEX_TRANS table. This table contains transaction
information that the Post process was using before the primary system failed, and therefore that
information is obsolete. Truncating the table restores transaction consistency between the two systems.
2. On the primary system, start Post.
sp_ctrl> start post
4. Make a note of the full pathname of the Post object-cache file(s) named in the error message. The path
will be the state directory in the SharePlex variable-data directory, for example:
splex_vardir/state/0x0a0100c5+PP+sys4+sp_opst_mt+o.quest-o.ov-objcache_sp_
opst_mt.18
5. On the secondary system, shut down SharePlex.
sp_ctrl> shutdown
6. On the secondary system, change directories to the state sub-directory of the SharePlex variable-data
directory and locate the Capture object-cache file. This file will have a name similar to the one in the
following example.
o.quest-objcache_sp_ocap.18
IMPORTANT! If there are more than one of these files, use the one with the most recent number at the
end of it — this number should match the number at the end of the Post object-cache file, such as .18 in
the example.
7. Copy the Capture object-cache file to the primary system and rename it to the full pathname of the Post
object-cache file that you noted previously.
8. On the primary system, start Post.
sp_ctrl> start post
3. On the secondary system, shut down the Oracle instance.
svrmgr1> shutdown
4. On the secondary system, start the Oracle instance.
svrmgr1> startup
NOTE: This resets the sequence on the secondary system to the top of the cache to synchronize with the
primary system.
5. On the primary system, enable database objects that were disabled.
6. On the secondary system, start SharePlex.
7. On the secondary system, stop Post.
sp_ctrl> stop post
8. On the secondary system, disable triggers on the tables, or run the sp_add_trigger.sql utility script so
that the triggers ignore the SharePlex user.
11. On the primary system, view the number of messages in the post queue, and keep checking until the
number of messages is 0.
sp_ctrl> qstatus
12. When the number of messages is 0, switch users back to the primary system.
13. On the secondary system, stop Export to prevent accidental changes made on that system from being
replicated to the primary system.
sp_ctrl> stop export
NOTE: The secondary system is now in a failover-ready state again, with:
l no users
l an active configuration
l disabled or modified triggers, constraints, and scheduled jobs
l a stopped Export process
Supported databases
Oracle database on Unix or Linux
Requirements
l SharePlex must be configured correctly to support high availability. For more information, see Configure
replication to maintain high availability on page 150.
l You must know how to run SharePlex. For more information, see Run SharePlex on page 36.
l You must understand the activate config, reconcile, and delete queue commands. See the SharePlex
Reference Guide.
Procedure
This procedure is divided into logical segments. Follow them in the order presented.
2. On the secondary system, deactivate the configuration file.
sp_ctrl> deactivate config filename
NOTE: The deactivation causes the error “Error in sp_cnc.” in the Event Log. You may ignore it and
continue with the procedure.
3. On the primary system, run sp_ctrl.
4. On the primary system, delete the post queue.
sp_ctrl> delete queue queuename:P for datasource-datadest
Example: sp_ctrl> delete queue sysB:P for o.oraA-o.oraB
NOTE: You are deleting the queues on the primary system because there could be messages remaining
from uncommitted transactions sent from the secondary instance before it failed.
5. On the primary system, truncate the SHAREPLEX_TRANS internal table in the SharePlex schema. This
table contains transaction information that the Post process on that system was using before the
secondary instance failed, and therefore the information is obsolete. Truncating the tables restores
transaction consistency.
6. On the secondary system, run sp_ctrl.
7. On the secondary system, delete the capture queue.
sp_ctrl> delete queue datasource:C
Example: sp_ctrl> delete queue o.oraB:C
8. On the secondary system, delete the export queue.
sp_ctrl> delete queue queuename:X
Example: sp_ctrl> delete queue sysB:X
NOTE: You are deleting the queues on the secondary system because the capture and export queues
on that system still retain a record of the transactions that have already been processed.
3. Make a note of the highest sequence number of the archive logs.
4. On the secondary system, recover the secondary database from the hot backup using the UNTIL
CANCEL option in the RECOVER clause. Cancel the recovery after Oracle has fully applied the log from
the previous step.
5. On the secondary system, open the secondary database with the RESETLOGS option. This resets the
sequence on the secondary system to the top of the cache upon startup
6. On the secondary system, run SQL*Plus as the SharePlex database user.
7. In SQL*Plus, run the cleanup.sql script from the bin subdirectory of the SharePlex product directory.
8. On the secondary system, issue the reconcile command using the sequence number of the log that you
noted previously. If you are using named post queues, issue the command for each one. If you do not
know the queue names, issue the qstatus command first.
sp_ctrl> qstatus
sp_ctrl> reconcile queue queuename for datasource-datadest seq sequence_number
Example: reconcile queue SysA for o.oraA-o.oraA seq 1234
9. On the secondary system, disable triggers on the tables, or run the sp_add_trigger.sql utility script so
that the triggers ignore the SharePlex user.
10. On the secondary system, disable check constraints and scheduled jobs that perform DML.
11. On the secondary system, after the sp_ctrl prompt returns, stop Export. This ensures that nothing
accidentally gets replicated to the primary system when you activate the configuration on the
secondary system.
sp_ctrl> stop export
2. On the secondary system, start Post.
sp_ctrl> start post
NOTE: The secondary system is now prepared for future failover.
Supported databases
Oracle database on Unix or Linux
Requirements
l SharePlex must be configured correctly to support high availability. For more information, see Configure
replication to maintain high availability on page 150.
l There must be enough disk space where the queues reside on the secondary system to contain the data
that accumulates while users are working on that system.
l You must know how to run SharePlex. For more information, see Run SharePlex on page 36.
l You must understand the SharePlex flush command. For more information, see the SharePlex
Reference Guide.
Procedure
This procedure is divided into logical segments. Follow them in the order presented. Do not shut down the
primary instance until prompted in the procedure.
3. On the secondary system, verify that Post stopped. (Continue to issue this command until it shows that
Post stopped.)
sp_ctrl> status
4. On the primary system, verify that there are no messages in the capture and export queues. The Number
of Messages and the Backlog (messages) fields must be 0.
sp_ctrl> qstatus
6. On the primary system, shut down SharePlex.
7. On the primary system, shut down the Oracle instance with the abort option. Do not use the
immediate option.
svrmgr1> shutdown abort
NOTE: This resets the sequence on the primary system to the top of the cache when the database starts.
8. On the secondary system, verify that Export is stopped. This prevents user changes from being
replicated to the primary system until it is back online and SharePlex is ready to receive them. Stop
Export if needed.
sp_ctrl> status
sp_ctrl> stop export
9. On the secondary system, run the script that grants INSERT, UPDATE and DELETE access to all users.
10. On the secondary system, run the script that enables triggers and constraints on the secondary instance.
11. Run your failover procedure for relocating users to the secondary system, including starting the
applications and starting jobs that were running on the primary system.
12. Move the users to the secondary system to resume working, but do not start the Export process.
6. On the primary system, stop Export.
sp_ctrl> stop export
7. On the primary system, allow Post to process the message backlog that was sent from the
primary system.
8. On the secondary system, stop user access to the Oracle instance.
9. On the secondary system, flush the data in the queues to the primary system.
sp_ctrl> flush datasource
where: datasource is the datasource specification of the secondary Oracle instance, for example o.OraB.
11. On the secondary system, verify that there are no messages in the capture and export queues. The
Number of Messages and the Backlog (messages) fields must be 0.
sp_ctrl> qstatus
13. On the secondary system, shut down SharePlex.
sp_ctrl> shutdown
14. On the secondary system, shut down the Oracle instance with the abort option. Do not use the
immediate option.
svrmgr1> shutdown abort
NOTE: This resets the sequence on the secondary system to the top of the cache when the
database starts.
15. On the secondary system, start the Oracle instance.
svrmgr1> startup
NOTE: The sequence on the secondary system is now at the top of the cache. When the next value is
selected on the primary system, a new cache is acquired and is replicated to the secondary system.
Now, the primary system is at the start of a cache, and the secondary system is at the top of a cache.
16. On the primary system, run the script that grants INSERT, UPDATE and DELETE access to all users.
17. On the primary system, run the script that enables triggers and constraints on the primary system when
users begin using this system.
18. Run your failover procedure for moving users back to the primary system, including starting the
applications and starting jobs that were running on the secondary system.
19. Switch the users to the primary system to resume working, but do not start the Export process. This
prevents replicated data from being sent to the secondary system until SharePlex is ready to
receive it there.
5. On the primary system, start export.
sp_ctrl> start export
l When the source system fails and replication must be switched to a standby database system
l When replication must be positioned back in time to re-read old archive logs.
l A disaster recovery (DR) solution that provides a physically identical copy of the production source
instance and another physical copy of the production target instance. Methods such as Oracle Data
Guard or disk mirroring, tape backups and other methods support this requirement.
l The SP_OPO_UPDATE_SCN parameter must be set to a value of 1. This parameter directs SharePlex to
keep a record of the SCNs of the transactions that it processes. When you set this parameter to 1, it also
disables the Post Enhanced Performance feature.
l The solid (blue) lines represent the Oracle Data Guard DR deployment.
l The dotted (bright green) line between the production source instance and the production target
instance represent SharePlex replication under normal operating circumstances.
l The dashed lines (red, orange or aqua) show possible replication recovery paths if the source, target or
both fail.
Normal replication
The following diagram illustrates the configuration and the names that are used in this example.
l Direct SharePlex to capture the correct Oracle SCN of the last committed transaction processed by each
post queue.
l Direct SharePlex, through the reconcile command, to discard all transactions that were committed to the
target before the failure, so that SharePlex resumes replication at the correct point in the data stream.
NOTE: This procedure requires the following:
To resume replication
NOTE: In these instructions, the source and target systems are whichever source and target are operational
after the failover.
1. Shut down SharePlex on the source system, if it is still running.
sp_ctrl> shutdown
2. On the target, start sp_cop if it is not running already.
$ /productdir/bin/sp_cop &
3. On the target, use the qstatus command to make certain that all of the message in the queues are posted
to the target database. The command output should show 0 backlog in the post queue.
sp_ctrl> qstatus
4. From the command line of the target, run the show_scn utility from the bin subdirectory of the SharePlex
product directory. For ORACLE_SID use the ORACLE_SID of the target database.
$ /productdir/bin/show_scn ORACLE_SID
5. Keep the output of the show_scn utility open. The output displays the complete reconcile command that
you will use for each of your post queues to reposition Post to the correct transaction for recovery. It also
shows the SCN to which you will activate the configuration later in these steps.
6. Shut down sp_cop on the source and target.
sp_ctrl> shutdown
7. Run ora_cleansp on the source and target to clean out the queues.
$ /productdir/bin/ora_cleansp
8. Start sp_cop on the source and target.
$ /productdir/bin/sp_cop &
9. On the target, stop Post.
sp_ctrl> stop post
12. On the target, start Post.
sp_ctrl> start post
Contents
Change an active configuration file
Add or change objects in an active configuration
Change Partitioned Replication
Add Oracle sequences to an active replication configuration
Remove source objects from replication
Make DDL changes in an active replication configuration
Make Oracle changes that affect replication
Change the SharePlex database account
Change the name or IP address of a replication host
Set the SharePlex port number
Supported databases
Oracle or SQL Server source
All targets
Oracle procedure
NOTE: To add sequences to replication, see Add Oracle sequences to an active replication configuration
on page 313.
If you are using wildcards and an object that you are adding satisfies the wildcard specification, it is not
necessary to add the object to the configuration file if the source is Oracle. Any new objects that match
the wildcard criteria are automatically added into replication. Only add objects that must be explicitly
stated by name.
IMPORTANT! Do not deactivate the original configuration.
1. If adding new tables, add them to the source and target (populated in both places, if applicable) to
establish a synchronized initial state. Do not allow transactional access to the source table yet.
2. In sp_ctrl, issue the copy config command to make a copy of the active configuration file.
sp_ctrl> copy config filename to newname
Where: filename is the name of the active file and newname is the name of the new one.
4. Add the entries for the new tables or change existing entries.
NOTE: To change partitioned replication, see Change Partitioned Replication on page 312.
5. Save the configuration file.
6. Activate the new configuration. This deactivates the original configuration. Only the new or changed
tables are activated, so the activation should not be as long as the initial activation.
sp_ctrl> activate config newname
7. Allow access to the newly added tables.
4. Add the entries for the new table(s) or change existing entries.
NOTE: To change partitioned replication, see Change Partitioned Replication on page 312.
5. Save the configuration file.
6. Stop transactional access to the new and changed tables.
7. Activate the new configuration. This deactivates the original configuration. Only the new or changed
tables are activated, so the activation should not be as long as the initial activation.
sp_ctrl> activate config newname
8. Allow transactional access the tables.
Supported databases
Oracle or SQL Server source
All targets
1. Run sp_ctrl.
2. Issue one of the following commands to change the partition or partition scheme. For syntax and other
information, see the alphabetical command listings in the SharePlex Reference Guide.
3. If you dropped a partition scheme:
b. Edit the copy to remove or change the routing map where the partition scheme was specified.
sp_ctrl> edit config filename
4. Activate the new configuration file.
sp_ctrl> activate config filename
2. Edit the copy to change the appropriate column partition.
sp_ctrl> edit config filename
3. Activate the new configuration file.
sp_ctrl> activate config filename
4. Add the new sequences to the configuration file.
5. Save and close the file.
6. Create the target sequence on the target system. To ensure uniqueness on the target system, the start
value of the target sequence must be larger than the start value of the source sequence. Use the
following formula to determine the target START_WITH value:
source_INCREMENT_BY_value = START_WITH_value
7. Activate the new configuration. This deactivates the original configuration.
sp_ctrl> activate config newname
8. Allow users to access the objects.
6. On the source system, flush the data from source system to the target system. This command stops Post
and places a marker in the data stream that establishes a synchronization point between source and
target data.
sp_ctrl> flush datasource
Where: datasource is o.ORACLE_SID of the source instance — for example o.oraA.
7. After Post stops, issue the following Oracle command on the target system to find the last known value of
the sequence. Make a record of this value.
select max(column_name) = last known value
8. Determine the value of the following equation.
source_INCREMENT_BY_value x source_CACHE_value
For example, if the source sequence is incremented by 2 and the cache size is 10, the value
would be 20.
10. To the value obtained in the previous step, add another multiple of (source_INCREMENT_BY_value x
source_CACHE_value). The result determines the START WITH value of the target sequence. For
example, in the previous equation the START WITH value would be: 40 + (2 x 10) = 60.
11. Create the target sequence with the START WITH value that you calculated.
12. On the target, start Post.
sp_ctrl> start post
SharePlex will continue replicating the data, while keeping the target sequence at least one multiple of
(source_INCREMENT_BY_value x source_CACHE_value) ahead of the source sequence.
IMPORTANT!
Sequences continue to be incremented even when a transaction is rolled back. If numerous rollbacks are
issued for a source table that uses a replicated sequence, it causes the sequence values to increase without
actually being used in columns in the table. As a result, when Post applies the next valid operation, the
sequence value on the target system could be less than the value in the replicated row.
When there are numerous rollbacks, view the target table regularly to ensure that the current value of the target
sequence remains greater than the maximum value in the table. If the current value of the target sequence is
less than the maximum value in the table, repeat the preceding procedure to re-establish the sequence
relationships.
Supported databases
All databases supported by SharePlex
Procedure
1. In sp_ctrl, issue the copy config command to make a copy of the active configuration file.
sp_ctrl> copy config filename to newname
Where: filename is the name of the active file and newname is the name of the new one.
3. In the new configuration file, delete the entries for the objects that you want to remove from replication. If
the object that you want to remove from replication satisfies a wildcard, use the not notation to exclude
the object. For more information, see Use Wildcards to specify multiple objects on page 73.
4. Save and close the file.
5. Activate the new configuration. This deactivates the original configuration.
sp_ctrl> activate config newname
6. Allow users to access the removed objects.
Supported databases
Oracle
Requirements
l You must know how to run SharePlex. For more information, see Run SharePlex on page 36.
l You must understand how to activate a configuration file with the activate config command.
l You must understand the SharePlex flush command. For more information, see the SharePlex
Reference Guide.
Procedure
1. On the source system, stop access to the source objects (on all systems if using peer-to-peer
replication).
2. On the source system (trusted source in peer-to-peer), flush the data from the source system to the target
systems. This command stops the Post process and places a marker in the data stream that establishes
a synchronization point between the source and target data.
sp_ctrl> flush datasource
where: datasource is the database specification of the source instance, for example o.oraA.
3. On the target system (all secondary systems in peer-to-peer) verify that the number of messages in the
post queue is 0 on each system and that Post stopped.
sp_ctrl> lstatus
4. On the source system, make the DDL changes.
5. On the source system, reactivate the configuration file.
sp_ctrl> activate config filename
6. On the source system, allow user activity to resume. Their replicated changes will accumulate in
the post queue.
7. On the target system, make the corresponding DDL changes.
8. [High availability and peer-to-peer replication only] On the secondary systems, reactivate the
configuration file.
sp_ctrl> activate config filename
9. On the target systems, start Post.
sp_ctrl> start post
SharePlex resumes replication from the last stop point and the data remains synchronized.
Supported databases
Oracle on Linux and UNIX
1. Shut down SharePlex.
sp_ctrl> shutdown
2. Move the ORACLE_HOME.
3. Edit the oratab file to point to the new ORACLE_HOME.
4. Edit the defaults.yaml file to point to the new ORACLE_HOME. This file is in the data subdirectory of the
SharePlex product directory.
5. Start SharePlex.
3. On the source system, open the new configuration file.
sp_ctrl> edit config filename
4. Change the ORACLE_SID to the new one in all of the routing maps that include this target database and
target system.
5. Save and close the configuration file, but do not activate it.
6. On the source system, stop user access to the objects involved in replication.
7. On the source system, flush the data in the queues to the target. This stops the Post process and
establishes a synchronization point between the source and target databases.
sp_ctrl> flush datasource
where: datasource is the database indicator of the source instance, for example o.oraA.
9. On the source system, allow users to access the objects involved in replication.
10. On the target system, verify that Post stopped. If Post is not stopped, continue to issue the command until
it shows that Post stopped.
sp_ctrl> status
11. On the target system, shut down the database and then rename the ORACLE_SID.
12. On the target system, start Post.
sp_ctrl> start post
Supported databases
All SharePlex-supported databases
Procedure
This procedure changes the user account name and/or password of the SharePlex user account in a database.
This user account is the one that the SharePlex processes use to connect to the database when performing
replication tasks.
IMPORTANT! If using multiple variable-data directories, you must run this procedure for each one that you
want to change.
1. (Unix and Linux only) If you are using multiple variable-data directories, export the environment variable
that points to the variable-data directory for the SharePlex instance for which you are changing the
account name or password.
ksh shell:
export SP_SYS_VARDIR=/full_path_of_variable-data_directory
csh shell:
setenv SP_SYS_VARDIR=/full_path_of_variable-data_directory
4. Verify that all SharePlex replication processes for this instance of SharePlex are stopped.
sp_ctrl> status
5. Log in to the database as a DBA user and change the SharePlex account name and/or password to the
new ones. Important! Do not delete the SharePlex objects!
6. If you changed the account name, copy all of the SharePlex database objects from the old account to
the new one.
NOTE: Keep the old account and SharePlex objects as backup until you are certain replication
resumes properly.
7. In sp_crtl, issue the following command to change the account name and/or password in the SharePlex
internal records.
To change the user account:
sp_ctrl> connection {o.SID | r.database} set user=username
To change the password:
sp_ctrl> connection {o.SID | r.database} set password=password
where:
l SID is the ORACLE_SID of the database, if the database is Oracle.
l database is the name (not the DSN) of the database, if the database is non-Oracle.
l username is the new account name.
l password is the new password.
8. Start the SharePlex processes.
sp_ctrl> start service
l If running SharePlex on an AIX machine, set EXTSHM before running provision.
export EXTSHM=ON
l Run provision on all of the machines in the SharePlex configuration. Each machine can reference the
IP addresses of all the other machines.
Run provision
1. Stop sp_cop. If sp_cop is running, provision will fail. NOTE: provision prevents sp_cop from being
started while it is running.
Argument Input
-f old_hostname[:old_ l -f is required and represents "from."
ipaddress]
l old_hostname is the old (current) host name.
l old_IPaddress is the old IP address. Use if the IP address cannot
be obtained from the network.
-t new_hostname[:new_ l -t is required and represents "to."
ipaddress]
l new_hostname is the new host name.
l new_IPaddress is the new IP address. Use if the IP address cannot
be obtained from the network.
-p port For Windows systems, specifies the port of the SharePlex instance for
which provision is being run.
-n Runs provision without actually making any changes. Generates a report
on the changes that provision will make.
IMPORTANT! The best practice is to run provision with -n first, to make
certain you agree with the potential changes, then run it without -n to make
the changes.
Example:
3. View the event log to view every change that was made. If the provision run fails or you do not agree with
the changes that were made, you can undo them by running the undo_provision script. See Undo
changes made by provision .
Known issues
The following may occur but do not affect the integrity of the replication environment:
l The provision utility does not change the active configuration file. This means that the configuration file
no longer represents the current state of replication after provision is run. If you need to run the
compare config command, or if you decide to reactivate the configuration, update the host name or
IP address in the configuration file first.
l If your replication strategy requires multiple instances of sp_cop on a system, you must set a unique port
number for each one. For more information, see Run multiple instances of SharePlex on page 43.
l When an non-default port is required, the same number must be used for both the TCP and UDP ports,
and it must be used for the TCP and UDP ports of all other instances of sp_cop that are involved in the
same replication configuration. If the ports are different, sp_cop on one system cannot connect to the
sp_cop on another system to send or receive messages and data.
l On the Windows platform, SharePlex permits a maximum of 64 port numbers (SharePlex instances) on
one system.
Supported databases
All databases supported by SharePlex on all supported platforms
1. (If using multiple variable-data directories] Export the SP_SYS_VARDIR environment variable to point to
the correct variable-data directory for the port you are setting.
ksh shell:
export SP_SYS_VARDIR=/full_path_of_variable-data_directory
csh shell:
2. Export the following environment variables.
ksh shell:
export SP_COP_TPORT=port
export SP_COP_UPORT=port
csh shell:
setenv SP_COP_TPORT port
setenv SP_COP_UPORT port
where: port is the new port number
3. Change directories to the SharePlex product directory.
4. Start sp_cop and sp_ctrl. NOTE:If you are using multiple variable-data directories, start sp_cop with
the -uport option, where port is the port number that you have chosen for the variable-data directory
that you exported.
./sp_cop [-uport] &
5. Run sp_ctrl.
./sp_ctrl
6. In sp_ctrl, set the following SharePlex parameters.
sp_ctrl> set param SP_COP_TPORT port
sp_ctrl> set param SP_COP_UPORT port
7. Do one of two things:
l If there is not an active configuration, use the shutdown command in sp_ctrl to stop sp_cop. The
next time you start sp_cop, the new port number takes effect.
NOTE: If you do not have an active configuration, you are finished setting the port number.
l If there is an active configuration, continue to the next step.
9. On the source system, issue the qstatus command to verify that all of the messages reached the
target system.
sp_ctrl> qstatus
Continue to issue the command until the export queue is empty.
10. On the target system, issue the qstatus command to verify that all of the messages were posted to the
database. Continue to issue the command until the post queue is empty.
12. Shut down SharePlex on the source and target systems.
sp_ctrl> shutdown
13. Start sp_cop on the source and target systems. NOTE:If you are using multiple variable-data directories,
start sp_cop with the -uport option, where port is the port number that you have chosen for the variable-
data directory that you exported.
./sp_cop [-uport] &
14. Run sp_ctrl on the target system.
15. Start the Post process.
sp_ctrl> start post
16. Allow users to access the replicating objects.
17. Use the status command on the source and target systems to verify that all SharePlex processes
are running.
sp_ctrl> status
1. Log onto Windows as a SharePlex Administrator using your system password and user name. Your user
name must be assigned to the SharePlex Admin group.
2. Run the SpUtils utility.
3. Select the SharePlex Services tab.
4. Under Port, select the port number for the instance of SharePlex whose port you want to change.
5. Under SharePlex Service Status, click Stop.
6. Click Close.
7. From the Start menu, select Run.
8. In the Run dialog box, type regedit to open the Registry Editor.
9. In the Registry Editor, under \HKEY_LOCAL_MACHINE\Software\Wow6432node\Quest
Software\SharePlex, right click the current port number, then select Rename.
10. Replace the highlighted port number with the new number.
11. Click the new port number to highlight it.
12. In the Name column of the right-hand pane, right-click the SP_SYS_VARDIR entry that is associated
with the new port number, then select Modify.
13. In the Edit String dialog, change the port number (only the port number) in the path to the new port
number, then click OK.
14. Exit the Registry Editor.
Contents
Before you patch or upgrade an application
Apply patch/upgrade to source then copy it to target
Apply patch/upgrade to source and target
Apply patch to source and replicate it to the target
If the patch/upgrade applies DDL that is not supported by Manually apply the patch/upgrade to the
SharePlex. For details on the DDL that SharePlex supports, source and target by following either of these
see the SharePlexSharePlex Release Notes. procedures:
Apply patch/upgrade to source then copy it
to target on page 329
Apply patch/upgrade to source and target on
page 331
If the patch/upgrade does any of the following: Manually apply the patch/upgrade to the
source, then allow SharePlex to replicate the
l Performs DML changes. changes to the target. Follow this procedure:
l Performs supported DDL on the source system. For Apply patch to source and replicate it to the
details on the DDL that SharePlex supports, see the target on page 332
SharePlexSharePlex Release Notes. NOTE: Because this procedure assumes that
l Changes users and security on source system (other SharePlex can replicate all of the changes
than SharePlex) that the patch or upgrade applies, the
patch/upgrade is not applied to the target.
Adds columns that do not satisfy the column (Optional) Drop the columns from the target table after the
partition of the table patch or upgrade is applied.
Adds columns that need to be in the column Add those columns to the source and target column partition
partition of the table lists in the configuration file.
Drops columns that are part of the column Remove those columns from the source and target column
partition of the table partition lists in the configuration file.
Changes the name of a column that is in the Change the column name in the source and target column
column partition of a table partition lists in the configuration file.
For more information, see Configure vertically partitioned replication on page 106.
l The source system of a single-direction replication configuration, including cascading replication.
l All source systems of a consolidated replication configuration.
l The trusted source system in a peer-to-peer replication configuration.
In these procedures, the "target" system is one of the following:
In this procedure, the SharePlex commands in the procedure apply to all sp_cop instances that apply to the
replication strategy you are using (for example, all sp_cop processes on a target in consolidated replication).
l Duplicate DML and supported DDL from the patch or upgrade operations that were replicated but also
applied by the backup.
l Production transactions that were replicated but also applied by the backup.
4. On the source system, apply the patch or upgrade.
5. On the source system, restore user access to the source instance.
6. [If the patch/upgrade adds objects that must be replicated] Edit the configuration file as follows (do not
deactivate it). The patch or upgrade may have affected column partitions or column conditions in
partitioned replication. For more information, see Change an active configuration file on page 310.
l Copy the configuration file.
sp_ctrl> copy config filename to newname
l Edit the copy.
sp_ctrl> edit config newname
Save the file.
7. Do one of the following:
l If you added objects in the previous step, activate the new configuration file.
sp_ctrl> activate config newname
l If you did not make any changes to the original configuration file, activate that one.
sp_ctrl> activate config filename
8. On the source, run the Oracle hot backup.
9. On the source, switch log files and make a note of the highest archive-log sequence number.
On-premises database:
svrmgr1> alter system switch logfile;
Amazon RDS database:
Use Amazon RDS procedure rdsadmin.rdsadmin_util.switch_logfile.
10. On the target, recover the target database from the hot backup using the UNTIL CANCEL option in the
RECOVER clause, and cancel the recovery after Oracle fully applies the log that you recorded in the
previous step.
11. On the target system, open the database with the RESETLOGS option.
12. Run the Database Setup utility on the target instance, but do not create a new user. Choose the existing
SharePlex user and password (copied in the backup). For more information, see Database Setup
Utilities in the SharePlex Reference Guide.
13. On the target system, issue the reconcile command using the sequence number of the log that you
noted previously. If you are using named post queues, issue the command for each one. If you do not
know the queue names, issue the qstatus command first.
sp_ctrl> qstatus
sp_ctrl> reconcile queue queuename for datasource-datadest seq sequence_number
Example: reconcile queue SysA for o.oraA-o.oraA seq 1234
NOTE: The reconcile process retains control of sp_ctrl until it is finished.
17. On the target system, start Post.
sp_ctrl> start post
The two instances are now in synchronization, and SharePlex resumes replication.
4. On the source system, apply the patch or upgrade.
5. [If the patch/upgrade adds objects that must be replicated] On the source system, edit the configuration
file, including making any changes to column partitions or column conditions if using partitioned
replication. For more information, see Change an active configuration file on page 310.
sp_ctrl> edit config filename
6. On the source system, activate the configuration file.
sp_ctrl> activate config filename
7. On the source system, restore user access to the source instance.
8. On the target system, apply the patch or upgrade.
9. On the target system, if the patch or upgrade installed triggers on the tables in replication, disable them
or run the sp_add_trigger.sql utility script so that the triggers ignore the SharePlex user.
10. On the target system, if the patch or upgrade added check constraints or scheduled jobs that perform
DML, disable them.
11. On the target system, perform any cleanup required by partitioned replication.
12. On the target system, start Post.
sp_ctrl> start post
The two instances are now in synchronization, and SharePlex resumes replication.
3. On the source system, apply the patch or upgrade.
4. On the source system, restore user access to the source instance.
5. On the target system, if the patch or upgrade created or modified triggers, disable them or run the sp_
add_trigger.sql utility script so that the triggers ignore the SharePlex user.
6. On the target system, restore user access to the target instance.
Contents
Perform a partial backup of the source data
Perform a full backup of the source system
Supported databases
Oracle or SQL Server source
All targets
3. On the target system, back up the data. NOTE: The data now matches the source data at the
flush marker.
4. On the target system, start the Post process.
sp_ctrl> start post
Supported databases
Oracle or SQL Server source
All targets
Procedure
Perform these steps on the source system:
1. Stop all system activity.
2. Start sp_ctrl.
3. Flush the data to the target system. This command stops the Post process and places a marker in the
data stream that establishes a synchronization point between source and target data.
sp_ctrl> flush datasource
where: datasource is the datasource specification of the source database in the configuration file,
for example o.ora1 or r.mss1.
4. Shut down SharePlex. This command shuts down SharePlex.
sp_ctrl> shutdown
7. Start the database.
8. Start sp_cop (Unix and Linux) or the SharePlex service (Windows).
9. Start sp_ctrl.
10. Allow users to access the database.
11. Verify that the SharePlex Capture, Read, and Export processes started.
sp_ctrl> status
2. Verify that Post started.
sp_ctrl> status
Troubleshooting Tips
Use the following resources from the Quest Support Portal to help you troubleshoot SharePlex.
l SharePlex Knowledge Base articles
l How to do basic troubleshooting with SharePlex (video)
See also, Prevent and solve replication problems on page 230.
EDITOR Sets the default ASCII text editor for sp_ctrl commands that use one, for
example the create config command.
HOST Sets a host name for all locally run sessions of sp_ctrl.
SP_COP_TPORT Sets a non-default port number for an instance of SharePlex. The default
port number is 2100. You may need to set a different port number if one
of the following is true:
l You are setting up additional instances of sp_cop.
l A different port number than 2100 must be used.
SP_SYS_HOST_NAME Sets the host name that SharePlex binds to during configuration
activation. This variable is used for the following:
l Sets the virtual IP address (also known as the global cluster
package name) on a clustered system, such as Oracle RAC. This
variable must be set on all cluster nodes.
l In the case where there are multiple network cards on Windows,
it must be set to the network card or IP address that you want
SharePlex to use as the local host. Otherwise, if the server
reboots after the SharePlex configuration is activated, the IP
address may bind to a different network card from the one that is
bound in the replication configuration.
l If SP_SYS_HOST_NAME is set to an IPV6 address on the source
system, SharePlex on the target system must be version 9.0 or
later.
SP_SYS_VARDIR Sets the full path to the SharePlex variable-data directory so that sp_cop
can locate the configuration data, queues, logs and other information. If
there is only one instance of sp_cop on the local system, this variable is
set by default*. If there are multiple instances of sp_cop on the local
system, always set this variable to point to the correct variable-data
directory of an instance before setting any other SharePlex variables for
that instance.
SP_SYS_SECURE_MODE Suppresses the output of the compare and repair SQL log file for all
compare and repair runs while the current instance of SharePlex is
running. This variable must be set before starting SharePlex, so if the
sp_cop process is running it must be restarted after setting this variable.
When sp_cop is run with this environment variable, the compare and
repair commands will not put data into SQL files and the Post process
will not put data into the SharePlex error log.
* On Unix and Linux, the variable-data directory is set in the proddir/data/defaults.yaml file. On Windows, it is
set in the Windows Registry.
ksh shell:
export SP_SYS_VARDIR=full_path_of_variable-data_directory
csh shell:
setenv SP_SYS_VARDIR full_path_of_variable-data_directory
1. Shut down the SharePlex service.
2. Open the Run dialog. The location varies with the Windows version.
3. In the Run dialog, type regedit to run the Registry Editor.
4. Expand the SharePlex node:
\HKEY_LOCAL_MACHINE\Software\Wow6432node\Quest Software\SharePlex
5. Right click the port number of the SharePlex instance to which you want to add a variable, then select
New, then String Value.
6. Under the Name column, right click the new variable, then select Rename.
7. Type the correct name.
8. Double click the new variable.