How to Set Up and Execute a

How to Set Up and Execute a
Mobile Project with DB2 Everyplace
Part 2: DB2 Everyplace V8.2
Martin Oberhofer
SAP DB2 Everyplace Enablement, Germany
Martino@de.ibm.com
Joachim G. Stumpf
DB2 Technical Presales Support, Germany
Stumpfj@de.ibm.com
December, 2004
Notices and Trademarks
The following terms are trademarks or registered trademarks of International Business Machines
Corporation in the United States, other countries, or both:
DataPropagator
DB2
DB2 Universal Database
Everyplace
Informix
Mobile Notes
Notes
Tivoli
WebSphere
WorkPad
Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United
States, other countries, or both.
Microsoft, Windows, Windows NT, Windows 2000 and Windows XP, Visual C#, Visual Basic
and Visual Studio are registered trademarks of Microsoft Corporation in the United States, other
countries, or both.
UNIX is a registered trademark of The Open Group in the United States and other countries.
Other company, product, and service names may be trademarks or service marks of others.
The furnishing of this document does not imply giving license to any IBM patents.
References in this document to IBM products, Programs, or Services do not imply that IBM
intends to make these available in all countries in which IBM operates.
The information contained in this publication does not include any product warranties, and any
statements provided in this document should not be interpreted as such.
© Copyright International Business Machines Corporation 2004. All rights reserved.
2
About the authors
Martin Oberhofer joined IBM in 2002 as a member of the DB2 Everyplace performance team at
the IBM Silicon Valley lab. Since 2003 he has worked as a DB2 Everyplace consultant in mobile
projects with SAP. He is interested in mobile technologies, Java and Linux. You can contact him
at martino@de.ibm.com.
Joachim Stumpf joined IBM Software group in 1994 first in marketing, and later in presales
technical support for database technology. He was member of teams which wrote the redbooks
DB2 meets Windows NT and Replication in a pervasive computing environment. Since 1999 he
has worked with DB2 Everyplace and was coauthor of the previous article on this topic. He has
developed and taught IBM Learning Services course material on DB2 Everyplace. You can
contact him at stumpfj@de.ibm.com.
3
Table of Contents
1 Introduction .......................................................................... 6
2 Overview of DB2 Everyplace ................................................ 7
2.1 DB2 Everyplace Sync Server.................................................................................. 8
2.2 DB2 Everyplace Synchronization Client................................................................ 9
2.3 DB2 Everyplace mobile database ........................................................................ 10
2.4 IBM Cloudscape database .................................................................................... 11
3 Data flow between backend database and mobile client . 12
3.1 Overview................................................................................................................. 12
3.2 Types of subscriptions ......................................................................................... 14
3.2.1 File subscription ..................................................................................................................14
3.2.2 Custom subscription ...........................................................................................................14
3.2.3 Table subscriptions .............................................................................................................15
3.3 Filtering .................................................................................................................. 18
3.3.1 Vertical filtering ..................................................................................................................19
3.3.2 Horizontal filtering..............................................................................................................20
3.3.3 Join filtering.........................................................................................................................21
3.4 Conflict handling ................................................................................................... 22
3.4.1 Basic conflict resolution ......................................................................................................22
3.4.2 Custom logic.........................................................................................................................22
4 Security questions .............................................................. 23
4.1 Device ..................................................................................................................... 23
4.2 Transport layer ...................................................................................................... 24
5 Programming....................................................................... 24
5.1 C/C++ Applications................................................................................................ 25
5.2 Java Applications .................................................................................................. 26
5.3 .NET applications................................................................................................... 28
5.4 Sync Client – programming considerations........................................................ 28
6 Administration and Monitoring ........................................... 29
6.1 Administration tools and setup ............................................................................ 29
6.2 Regular administrative tasks................................................................................ 30
6.3 Monitoring .............................................................................................................. 31
6.4 Troubleshooting .................................................................................................... 32
6.5 Conflict information............................................................................................... 34
6.6 Duplicating a DB2 Everyplace installation .......................................................... 34
6.7 Disaster recovery/High availability ...................................................................... 35
7 Software distribution .......................................................... 36
7.1 Server ..................................................................................................................... 36
7.2 Clients..................................................................................................................... 36
8 Scalability and availability ................................................. 37
8.1 WebSphere............................................................................................................. 37
8.2 Sync Server servlet ............................................................................................... 37
8.3 First level of scalability ......................................................................................... 38
8.4 Second level of scalability .................................................................................... 38
4
8.5 Availability.............................................................................................................. 39
9 Performance ....................................................................... 40
9.1 Data design ............................................................................................................ 40
9.2 DB2 Everyplace database performance .............................................................. 42
9.3 Sync client performance ....................................................................................... 43
9.4 Sync Server performance ..................................................................................... 43
10 Summary ........................................................................... 44
Bibliography ........................................................................... 45
5
1 Introduction
This article is intended for people who are involved in planning and executing a mobile project
with DB2® Everyplace®. It describes the functional scope of DB2 Everyplace V8.2 and details
how the product works. DB2 Everyplace is a relational synchronization product allowing fast
data synchronization between backend databases and a mobile database running on an
occasionally-connected mobile device, as shown in Figure 1.
Figure 1: Simplified overview of the involved processes
There are many mobile scenarios where such a solution is useful, including sales force
automation, insurance, health care, retail and financial services. The functionality required for
these mobile scenarios includes the following:
•
•
•
•
•
•
Ability to stay current with office (e-mail, calendar)
Ability to automate tasks
Ability to receive alerts
Ability to process fulfillments (orders, service requests, delivery)
Access to business information (orders, inventory, shipments, rates)
Access to peers and experts (help, info, sharing)
The first part of this article is a technical overview of DB2 Everyplace V8.2 covering
6
•
•
•
•
•
•
Features (introducing in a new section on Cloudscape as an option for a client database)
The replication process
The synchronization process
Filtering
Conflict resolution (introducing the new Custom Logic feature)
Security (introducing new options like SSL)
In the next section we give an overview of the available programming options for the client
application development, introducing the new .NET support which was added in DB2 Everyplace
V8.1.4 and was not available in the DB2 Everyplace V7 release.
The second part of this article covers administrative tasks, software distribution considerations
for mobile projects, and troubleshooting hints. Here, we introduce some options for crash
recovery, suggest ideas for duplicating DB2 Everyplace installations for migration testing, and
provide additional hints for problem solving.
The final sections of this article cover scalability options and important performance tuning hints.
2 Overview of DB2 Everyplace
This section describes the main components of DB2 Everyplace and explains how these
components work together.
A full DB2 Everyplace solution consists of a DB2 Everyplace mobile database on the mobile
device, DB2 Everyplace Sync Server with DB2 UDB as the engine for the mirror databases, and
a backend database. DB2 Everyplace Sync Server is responsible for synchronizing the data
between the backend database and the DB2 Everyplace mobile database on the device. The DB2
Everyplace Synchronization Client on the mobile device communicates with the DB2 Everyplace
Sync Server through an HTTP-based protocol.
Below we consider the following DB2 Everyplace components in more detail:
y DB2 Everyplace mobile database
y IBM Cloudscape database (called Derby with V10)
y DB2 Everyplace Synchronization Client
y DB2 Everyplace Synchronization Server with the Mobile Device Administration Center
(MDAC) on the mid-tier system
7
2.1 DB2 Everyplace Sync Server
The Mobile Devices Administration Center (MDAC) is a graphical administration tool for the
Sync Server that allows centralized administration. With MDAC, you manage all mobile devices
and users centrally, so that you can support large numbers of individual devices simply and
easily. It enables you to set up and administer users, user groups and data access, and allows you
to make some adjustments to the replication definition for individual users as necessary. The
MDAC allows you to define subsets of data and files to be accessed by groups of users. Using
MDAC, you can create and maintain the following four important types of objects (details on
objects like subscriptions will follow later):
•
•
•
•
Mobile users (and their associated mobile devices)
Groups of users
Subscriptions (define what data needs to be synchronized)
Subscription sets (grouping container of subscriptions which are assigned to user groups)
The Sync Server accesses this administration information each time a client requests data
synchronization.
The DB2 Everyplace Sync Server (Sync Server for short) enables bidirectional synchronization
between any supported device and backend data sources.
A mobile user can decide which data (based on subscription sets) should be synchronized. Once
the synchronization is triggered, the Sync Client extracts the changed data from the mobile
database based on the configuration information, and calls the transport API to send the data. On
the server side, the Sync Server gets the request, authenticates the client, puts changed data from
the client into the mirror database, and sends any changes which were replicated from the
backend database to the mirror database to the client.
The replication process driven by Sync Server exchanges the data according to the definitions in
the subscriptions between the backend database and the mirror database. A replication is one
process per mirror database. The replication process is asynchronous to the synchronization
processes, meaning it runs independently from synchronization.
The HTTP-based synchronization is well-suited for both wired and wireless networks. DB2
Everyplace synchronization can be described with the following two main steps:
1. First, the clients synchronize their data with the mirror database on the mid-tier server. The
synchronization is triggered from the mobile device whenever the mobile user has a need to
synchronize the data.
2. Second, on scheduled cycles (or on demand) Sync Server performs a replication between its
mirror database and the backend database. The cycle can be defined during subscription creation
(and adjusted later on if the need arises).
Below is a summary of the DB2 Everyplace Sync Server functionality (for a full list see Sync
Server documentation):
8
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Efficient two-way synchronization
o Synchronizes on all platforms with source databases which support JDBC and
triggers
o Uses remote stored procedure support to allow mobile applications to directly
interact with data sources in real time
Support for the following backend databases: DB2 (on all supported platforms),
Informix®, Cloudscape, Sybase, Microsoft SQL Server, Oracle
Support for the following client databases: DB2 Everyplace mobile database, Cloudscape
Sync Server is supported on AIX, Solaris, Linux and Windows platforms
Supports data partitioning for higher scalability and better performance using the mirror
database concept on the mid-tier servers
Centralized administration
o Facilitates grouping and management of users and grouping of data subscriptions
o Manages database definitions, constraints, and indexes and requires no
administration at the device
Supports powerful (horizontal, vertical, join) filter mechanism
Handles distribution of data, files, and applications
Supports access control for device users based on insert, update, and delete privileges
Supports user exit extensions for managing conflicts
Supports 56 bit and 128 bit encryption of all messages exchanged with sync client
Supports SSL as communication channel to exchange messages with sync client on an
encrypted communication layer
Support of table spaces in the DB2 UDB mirror database for better performance
Supports HALB (High availability/Load Balancing) scenarios by using such capabilities
from WebSphere Application Server
These are some of the features introduced in DB2 Everyplace V8.2 for Sync Server:
•
•
•
•
DB2 UDB support for V8.1 and V8.2 was added.
Join filtering functionality was redesigned to support more customer scenarios and higher
scalability in DB2 Everyplace V8.2.
Delete device and reset functionality were separated to allow customers to refresh the
device without losing data changes which were not yet synchronized.
Concurrent synchronization and replication against a mirror database is now supported,
significantly increasing the availability of Sync Server to mobile clients
2.2 DB2 Everyplace Synchronization Client
The DB2 Everyplace Synchronization Client on the mobile device is built around a
synchronization engine that communicates with the DB2 Everyplace Synchronization Server. The
synchronization API is available for C, Java and .NET. Currently the DB2 Everyplace
Synchronization Client uses HTTP over TCP/IP to communicate with the Sync Server. The
Synchronization Client supports DB2 Everyplace or Cloudscape as the client side database. On
the communication layer, it also supports HTTPS over TCP/IP (SSL).
9
The DB2 Everyplace Synchronization Client (Sync Client for short) is available on all platforms
where the DB2 Everyplace database is available.
For usage with Cloudscape there is also a 100% pure Java Sync Client available.
Sync Client offers the following features:
1. Row level based synchronization, always triggered from the Sync Client
2. Synchronization to different target directories (for example, sync to memory cards)
3. Enabling or disabling of subscription sets for synchronization
4. Message encryption/decryption (in addition to using SSL on the communication layer)
5. Resumable sync
6. API for handling rejected records
The concept behind 3. is to allow mobile users to decide which data should be synchronized. By
enabling or disabling subscriptions sets, only the data where the user has a need for
synchronization will be synchronized on the next synchronization. This also contributes to shorter
synchronization time (especially important when you need to synchronize over telephone
networks where you are paying for the connection time).
2.3 DB2 Everyplace mobile database
The DB2 Everyplace mobile database is specifically designed for the mobile and embedded
application environment and has minimal storage requirements. In order to maximize
functionality using the least resources, only functionality most relevant for mobile databases has
been included. For high capacity data storage DB2 Everyplace supports memory cards and micro
drives.
The user is not required to perform any administration for DB2 Everyplace on the mobile device.
The mobile database is available for Palm OS V4 and V5, Windows® CE/Pocket PC, Symbian
OS, Java™ 2 Micro Edition, Linux, embedded Linux, QNX Neutrino and Windows 32-bits
platforms.
DB2 Everyplace implements a subset of the SQL 92 standard and supports the following
interfaces: DB2 Call Level Interface (CLI), Open Database Connectivity (ODBC), .NET and
Java Database Connectivity (JDBC). JDBC is supported on all platforms that have Java
technology support.
The mobile database supports relational operations such as JOIN, GROUP BY, and ORDER BY.
It supports multiple column primary keys, expression functions, aggregate functions, and
constraints. Advanced indexing provides a noticeable query performance boost for medium to
large tables. Scrollable cursors enable easier application data manipulation. With V8.2, DB2
Everyplace database supports transactional processing with the new multiple connection feature
introducing support for isolation levels UR, CS, RS and RR. If multiple connections are used,
locking happens on table level.
10
In addition, the database engine supports Single Byte Character Sets (SBCS), Double Byte
Character Sets (DBCS), and UNICODE where available. It is globalized for the major languages
including English, Spanish, French, German, Italian, Czech, Polish, Brazilian Portugese, Slovak,
Hungarian, Japanese, Korean, Traditional Chinese and Simplified Chinese, Hebrew and Arabic.
For data security reasons, DB2 Everyplace supports encryption on a per table basis.
Below is a short summary of the most important database functionality (the list is not complete):
y
y
y
y
y
y
y
y
y
y
y
y
y
y
y
CREATE, ALTER, DROP TABLE,
CREATE INDEX, DROP INDEX
CHECK Constraints, DEFAULT VALUE, auto increment
Multiple-column primary key and indexes (bidirectional, prefix scanning)
Transactional processing with isolation levels UR, CS, RS, RR (new in V8.2)
INSERT, INSERT with subselect, DELETE, and UPDATE (records)
SELECT, JOIN, LENGTH, RTRIM, IN list, GROUP BY, ORDER BY, scrollable cursor
REORG, LOCK
Aggregate functions (MAX, MIN, AVG, SUM, COUNT)
Read-only media support on 32-bit Windows platforms and Linux
Memory card and micro drive support (maximum database size now 4 GB)
DBCS support on many platforms
Import/Export functionality for all platforms
UNICODE support also for Win32® (Windows 2000, Windows XP, Windows 2003)
Encryption on per table level
2.4 IBM Cloudscape database
If you are intending to use laptop devices or high-end set-top boxes for your mobile solution and
you intend to write the client side application in Java, you might want to consider the IBM
Cloudscape database. Cloudscape is a lightweight, SQL92-compliant database (also supporting a
large subset of the SQL99 features) written in Java. The database engine provides parallel
transactional processing, recovery and is threadsafe. Starting with V10 (Derby), the object
extensions are limited to the level DB2 UDB supports. The database has a footprint of 2 MB and
is able to run with as little as 4 MB of Java heap memory.
In addition to the features listed for DB2 Everyplace, Cloudscape also supports the following (for
a full list see the product documentation):
• CREATE/DROP schema
• CREATE/DROP view
• Constraints and referential integrity using FOREIGN KEYs with cascading delete option
• UNION, UNION ALL
• HAVING clauses
• Joins (RIGHT OUTER, LEFT OUTER, INNER)
• Aggregate functions: MAX, MIN, AVG, SUM, COUNT
• Triggers
• Database encryption
11
•
•
Stored procedures
Multiple connections with row level locking mechanism
If you need any of these features for your mobile application, you should consider using the IBM
Cloudscape database.
3 Data flow between backend database and
mobile client
3.1 Overview
This section is an overview of how information is exchanged using the DB2 Everyplace Sync
Server technology. We cover additional issues around the synchronization process in the filtering
and conflict sections.
Figure 2: Processes in a DB2 Everyplace synchronization solution
The information exchange that occurs with DB2 Everyplace is a two step process (see Figure 2)
and both steps together form a complete synchronization cycle. One part is a synchronization
between the mobile device and the mirror database, the other part a replication between the
mirror database and the source system database:
1. Synchronization between mobile client and mirror database
Mobile users or clients make changes to their local copy of the data. Depending on their needs,
12
they want to synchronize these changes back to the company and receive important updates
related to their work. Through the client application, the mobile user triggers a synchronization.
The sync process starts with the Sync Client authenticating with Sync Server. The Sync Client
extracts the delta since the last synchronization and sends the delta in one or multiple messages
(depending on the size of the data changed) to the Sync Server. Once all changes from the client
are received, the Sync Server queries the mirror database and sends the delta of changes since the
last synchronization back to the client. The changes from the client are stored in the staging
tables until the next replication cycle occurs. If the Sync Server is receiving messages from the
client or preparing them for sending them to the client, you can configure Sync Server to store the
messages in a database (see msg db in Figure 2). Note that with V8.2, the option to store the
messages on the file system is removed.
2. Replication between backend database and mirror database
During subscription creation time, the initial replication between the source and mirror databases
occurs, and the mirror database is populated. Information on subscriptions, groups, users, and so
on is stored in the control database dsyctldb (see Figure 2). Replication is a process per mirror
database. During subscription creation time, you specify a replication cycle. (If you set it to 0,
this means only replication on demand will happen, meaning you must call it from a command
line utility.) The replication performs the following tasks:
a. It applies the changes from the staging tables to the mirror database.
b. It replicates all changes from the mirror database to the backend database.
c. It replicates all changes from the backend databases to the mirror database.
This has the following consequences:
•
•
•
The client will get information on rejected records from previous synchronizations only
when the first synchronization after a replication cycle occurs.
Any changes to the backend database are unavailable to clients unless a replication cycle
moves them to the mirror database.
Any changes from a client are available to other clients only after a replication cycle.
Replication supports n:1 relations between backend databases and client databases (see Figure 3
for an example of three backend databases that synchronize with one client database over three
mirror databases, implementing a 3:1 relation.). The concept of a mirror database was introduced
for higher scalability (see performance section) and to protect the backend database from a heavy
synchronization load which would otherwise affect your backend application performance. This
means that a DB2 Everyplace mobile database can receive data originating from different
sources, and consolidate it in one client database.
Prior to DB2 Everyplace V8.2, on any mirror database at any given point in time, either
replication occurred, or the mirror database was available for synchronization. This restriction is
now removed. Replication on a mirror database can now run parallel to clients synchronizing
against the same mirror database. This improvement increases the availability of Sync Server to
the clients significantly. Another major replication improvement in DB2 Everyplace in V8 is the
fact that replication can now run in parallel to backend applications modifying the source.
13
Figure 3: Replication between multiple backend databases and one client database
Subscriptions can also be used to synchronize files. Other subscription types are available to
define upload-only synchronization directly against the source, to set up custom subscriptions for
remote stored procedures and to use DB2 DataPropagator™ mechanism.
In the following section we look in more detail at the various subscription types.
3.2 Types of subscriptions
The synchronization solution allows the exchange of information in a number of ways. This
information can be data stored in database tables or files. The definition of an exchange for data
or files is called a subscription. You can create three types of subscriptions: file subscriptions,
table subscriptions and custom subscriptions.
3.2.1 File subscription
File subscriptions are needed for example to transfer client applications automatically to the
client. This file can be your application. The term we use for this process is file subscription. File
subscriptions in V8.2 download only to the device and are useful to transfer any file which may
be needed on the mobile device.
3.2.2 Custom subscription
14
Custom subscriptions can be used for stored procedures. DB2 Everyplace includes a remote
query and stored procedure adapter. This adapter enables DB2 Everyplace to use the Sync Server
architecture to call a stored procedure located at a DB2 data source without synchronizing. The
CALL statement supported by the DB2 Everyplace mobile database can be used to invoke a
stored procedure in the DB2 source database using this infrastructure. The results of the stored
procedure are returned directly to the application on the device. With stored procedures, you
have less network transmission, since stored procedures run locally on the DB2 source server.
Additional advantages of stored procedures are:
y
y
y
y
The processing load on client systems is lower.
Code maintenance on client systems is simplified.
The stored procedure is executed in real time against the source database.
The stored procedure can perform non-database related tasks.
For sensitive data you can use a remote stored procedure call. In this scenario, you call a stored
procedure that delivers a result set as a temporary table. This result set is only available to the
application. After the application is closed, the data is no longer available.
Examples for real time data access where the remote stored procedure feature is useful are:
•
•
•
Real time ordering
Real time stock quantity check
Real time server notification
Using remote stored procedures through custom subscriptions has the following disadvantages:
•
•
Client application waits until result of remote stored procedure is returned
Solution is less scalable
Therefore, remote stored procedures should only be used if transactions need to be performed
against the source database.
3.2.3 Table subscriptions
Data subscriptions allow you to make data stored in the tables of one or more database
management systems available to a mobile device. Subscriptions use replication mechanisms
such as DataPropagator or JDBC subscriptions to achieve this function. Subscriptions use the
concept of a mirror database. This makes information exchange independent from the backend. It
keeps unpredictable loads away from operational systems. Data will be retrieved from the source
to the mirror and sent back from the mirror to the source at replication time. Upload is a special
subscription to sync directly to the source. However, this subscription only allows insert
operations during synchronization with the source database.
15
3.2.3.1 Upload subscription
Upload subscriptions should be used when you only want to send data from the mobile devices to
the source database. No changes to the source database from other programs are expected. No
mirror database exists for upload subscriptions. Data will be directly inserted to the source
database. No data rows changed on the device by update or delete SQL statements are
synchronized. Upload subscriptions could be used for example with a barcode reader system at a
supermarket to send information to a source database.
Upload subscriptions need no additional tables on the backend database. The table on the device
will be created during the first synchronization. A DB2 Everyplace specific column on the table
controls the synchronization status of each row (shown in Figure 4).
Figure 4: Upload subscription
3.2.3.2 JDBC subscription
Figure 5 provides an overview of how JDBC subscriptions are implemented on the server side.
There are some tables specific to each table on the source side to store history information.
Additionally you have one table for information on all subscribed tables on the backend database.
This table contains for example information about the suffix of the table specific additional
tables. There is a similar situation on the mirror side. There are three table-specific tables and
some additional tables per mirror database. These additional tables either manage replication,
contain static mapping information, or handle client synchronization-specific information.
16
Figure 5: JDBC subscription
JDBC subscriptions use triggers (update/insert/delete) to get information about changes in the
source or mirror database. A trigger is a set of actions that are defined for specific events and will
be executed when the defined event occurs. With JDBC subscriptions your data sources can
include DB2, Informix, Cloudscape, Oracle, Microsoft SQL Server, Sybase or any JDBCcompliant database that supports triggers. Sync Server calls a replication process according to
the time setting in the JDBC subscription to exchange data between the mirror database and the
source database.
3.2.3.3 DataPropagator subscription
In some situations, data propagation techniques are appropriate rather than triggers, because
triggers are part of transactions. DataPropagator is included as the replication function in DB2 on
the distributed platforms (Linux, UNIX® and Windows). On OS/390 DataPropagator is an extra
feature. DB2 Everyplace Sync Server has adopted it as a proven method to replicate data
between source and mirror databases. For this environment, a special configuration of
DataPropagator is used which is called update anywhere. The source table is the base or master
table for the process. Tables created at the mirror database side during subscription definition are
treated as replicas.
In V8.1.4 the administrator is required to set up the DataPropagator subscription in the DB2
Replication Center and then create the DB2 Everyplace subscription and associate it to the
DataPropagator subscription using the XML tool (dsyadminxml.bat). With DB2 V8.2 and DB2
Everyplace V8.2, both the DataPropagator and DB2 Everyplace subscription can be created using
the XML tool, eliminating the need to use the DB2 Replication Center.
During mobile data synchronization, the mirror and backend databases can serve both as source
and mirror databases in replication terms. DataPropagator replicates client changes from the
mirror to the remote database and also replicates changes from the backend database to the mirror
database.
17
This processing is done with the DB2 DataPropagator Capture and Apply programs. Capture runs
on the source side. The Capture and Apply processes on the mirror database will be invoked by
Sync Server. Figure 6 shows a rough outline of these processes:
y Replication needs it's own database specific control tables which use per default the
Schema 'ASN' in each database.
y Each table which is included in a replication scenario needs to be registered and needs its
own History table (CD..). This table is necessary for the capture process to write changes
made to source.
y In an update anywhere scenario, we define one table we want to replicate as master or
base table. This table resides in Figure 6 in the backend database. The table in the mirror
database as counterpart is named Replica .
y The Apply process handles the exchange of data between backend and mirror database.
y Integrating Data Propagator replication to an DB2 Everyplace scenario adds additional
tables with the schema 'DSY' to the mirror database. These tables contain information similar
to that in the tables in the mirror database of a JDBC subscription.
Figure 6: DataPropagator subscription
3.3 Filtering
DB2 Everyplace Sync Server includes several filtering options to support horizontal, vertical and
join filtering methods. Filtering data from the server is an important part of controlling the data
available to the client. Filtering can also help control client database size by synchronizing the
minimum amount of data necessary for a specific client.
Figure 7 shows a scenario with different filtering options. From backend to mirror, only rows
with selection criteria 'A' in first selection column are replicated to the server. This is called
horizontal filtering. During synchronization to the client ,vertical filtering reduces the table by
one column, in this case the last column of the table. Additionally horizontal filtering reduces the
18
number of rows, synchronizing only rows with selection criteria '1' in the second selection
column to the first device.
Filters can be defined at the subscription, group or user level. There are dependencies between
the levels. Filtering always starts at the subscription level. You add a table to a subscription and
then you can apply vertical filters by selecting the columns you need to synchronize. In addition,
you can specify horizontal filtering, further reducing the amount of data replicated to the mirror
database, or you can add filters with parameters. For the parameters, you can set the defaults on
the group level and it can be overwritten if you specify a specific value on the user level during
the definition of the user.
Figure 7: Horizontal and vertical filtering
3.3.1 Vertical filtering
Vertical filtering can be applied on replication and synchronization. You can configure this
during subscription creation. If vertical filtering is applied to the replication process, it improves
performance by reducing the amount of data replicated to the mirror database. It also reduces the
amount of data synchronized to any user device, depending on the definition.
Vertical filtering is defined during subscription definition by unsubscribing columns. An
unsubscribed column is a column that is replicated but not synchronized to the users. Data
inserted to the data source from the client will be composed of the columns of data on the client
combined with default column values defined for the group to complete the rows of data inserted
to the data source.
Also, vertical filtering can be used as a security mechanism by restricting the availability of
specific columns to specific users.
19
3.3.2 Horizontal filtering
Horizontal filtering can be accomplished at the subscription level, group level or user level as
shown in Figure 8. The first level of horizontal filtering is applied on the subscription level. If no
additional filter restrictions is applied, each user would get all the rows passing the filter
condition on the subscription level. If additional filters are applied on the group level (as you can
see in Figure 9), then the number of qualified rows is further reduced. Finally, if you apply filter
conditions on the user level, they further restrict the number of rows sent to the device. Where
you do not apply any filter conditions, users will receive all rows passing the filter criteria of the
group where the users belong.
Figure 8: Different Levels where filters can be applied
Horizontal filtering uses a Standard Query Language (SQL) WHERE clause to select data from
the source data. In Figure 9, filters are applied on different levels to reduce the overall amount of
data received on the mobile device:
20
Figure 9: Horizontal filter example
Horizontal filtering is useful for:
•
•
Protecting your data: Only the rows needed are synchronized to the device. This reduces
the amount of data which might be compromised if the device is lost or stolen.
Improving synchronization time: A reduced amount of data which needs to be transferred
over the network reduces the time required for synchronization. This is especially
important on low bandwidth networks.
3.3.3 Join filtering
This filtering method refers to the use of the WHERE clause containing a subquery that accesses
another replicated table (see Figure 10) of the same subscription. Join filtering was significantly
enhanced in DB2 Everyplace V8.2, removing almost all the restrictions of the previous releases,
improving performance, and providing support for more filter conditions of this type.
The sample in Figure 10 shows all the levels where you add filter information for a table.
Specific for Join filtering is the select string in the WHERE clause of the subscription on the
business table. It delivers a list of zip codes out of the ZipTab table. With the list as selection
criteria we enter the business table and deliver during synchronization only rows which match the
selection criteria. So we get only two rows of the business table on the client device, because
these are the only rows that have a matching zip code in the column Zip.
21
Figure 10: Join filtering
3.4 Conflict handling
If possible, you should avoid conflicts with your mobile solution design. The DB2 Everyplace
Synchronization Server on the mid-tier system handles conflicts during each replication cycle.
3.4.1 Basic conflict resolution
DB2 Everyplace handles or detects conflicts at the row level.
There are two types of conflicts:
y Conflicts between changes at the source and changes on a mobile device
y Conflicts that occur when at least two clients modify the same row within the same
replication cycle
For the first type of conflict, the default behavior rejects the client change, and the source update
is sent to the device. In the second case, by default the Sync Server resolves the conflict based on
the row version which is used by the Sync Server to keep track of the latest row versions and
obsolete row versions. In this case the client with the newer row version wins. Since conflict
resolution happens during replication, only on the first synchronization after the next replication
will the clients get the information regarding rejected rows. The client whose updates were
rejected receives, for each rejected row, the rejected row and the new row. The default of the
Sync Client API is to ignore the conflicts, meaning the new row is applied to the database, and
the rejected row is not processed further. However, if the Sync Client Callbacks are used, then
you can change this behavior by applying the old rejected record again to the database.
3.4.2 Custom logic
22
The conflict resolution rules can be overwritten using the new custom logic feature. This feature
allows you to write Java programs with new rules and tasks for conflict resolution. Your Java
program can be called before, during or after synchronization or replication. Custom logic creates
an overhead on synchronization and replication because it is called for each conflicting record.
Custom logic is available only for JDBC subscriptions.
4 Security questions
Data security is a major issue in the industry. Data must be secured against unauthorized access.
The database administrator must have the ability to control what data the mobile user can see or
change on the mobile device.
For a wired or wireless mobile solution with DB2 Everyplace, you have four points where
security issues must be considered: device, transport, synchronization server, and the source
server. We will not consider the security issues on the synchronization server or between the
synchronization server and the database source server because the data handling and transfer
between two DB2 installations is under the control of DB2's security mechanisms. So we will
just consider the security issues for the device and the transport layer in more detail.
4.1 Device
When controlling access to the local database you have three factors to consider:
y
y
y
Who will access the data on the mobile device?
What will be accessed?
Which type of access is allowed?
A single device normally belongs to a single mobile user. Lost or stolen device data is protected
by native device security functions (username, password). Access is protected using a username
and password for each user.
Group and user access is controlled by the MDAC tool on the Sync Server. Sync Server users
can only access the data subscriptions they are assigned and authorized to receive.
The Mobile Devices Administration Center allows you to define synchronization subscription
sets for groups of users who have the same needs for access to applications and data.
With the MDAC tool on the Sync Server, groups of users can be defined and each group can be
given access to different applications and data records according to the security level for the
group. For each group and user, changes are based on the user privileges for insert/update/delete
of the data tables as defined with the subscription object.
Additionally the access of data by different user groups can be specified using filter techniques.
Filtering is a method to partition data in such a way that a mobile user receives only the rows and
columns where a "need to know" exists. Applying filters to limit the data to the set where a "need
to know" exists also reduces the amount of data which might be compromised in case the device
is stolen or lost.
23
Additional protection on the mobile devices is accomplished by the DB2 Everyplace mobile
database using data encryption which can be set on a per table basis. If you use the IBM
Cloudscape database, you can also use database encryption to protect your data.
4.2 Transport layer
The data communication between device and server can be protected using various techniques:
y
y
y
Encryption of the messages exchanged between sync server and client
Encryption of the communication layer using SSL between sync server and client
Synchronizing through proxy configurations hiding the true location of the server
These techniques can be combined. For example, you can use message encryption parallel to
using SSL, in which case the encrypted messages are sent through a protected communication
layer.
For message encryption, the Sync Server supports across-the-wire data encryption using the
symmetric (shared secret) key encryption algorithm: the DES (Data Encryption Standard)
solution. The encryption level can be 56-bit or 128-bit data encryption standard.
The encryption level is defined when the subscription object is created with the MDAC tool on
the Sync Server. DB2 Everyplace uses HTTP for transporting the data for synchronization;
therefore, a firewall and a special port can be set up for synchronization purposes.
The data communication is compatible with existing network firewall and security technology
solutions, so the communication channel can additionally be protected using a Point-to-Point
Tunneling Protocol (PPTP) or a Virtual Private Network (VPN) connection. VPNs use advanced
encryption and tunneling to permit organizations to establish secure end-to-end private network
connections over third-party networks, such as the Internet or extranets.
Note that using security features like encryption will have a performance impact on your system.
The more features you use, the higher the impact will be.
Websphere Everyplace Communication Manager (WECM) is an IBM product you can use for
managing connections to mobile devices using VPN technology.
5 Programming
Since products are evolving fast (and DB2 Everyplace is no exception), we will not list the
precise version of any plugin or integrated development environment (IDE) supported in this
section, because it will be outdated very soon anyway. If you need to know if your version of an
IDE is supported or which DB2 Everyplace plugin versions are available for it, please see the
DB2 Everyplace Application Developer Guide (listed in the bibliography) of the latest DB2
24
Everyplace version for this information. The same will be true for the operating system versions
where we also just name the platform.
DB2 Everyplace supports applications written in C/C++, Java and .NET for the following
platforms (.NET only on Microsoft platforms): Palm OS, Symbian, Windows CE and PocketPC,
Win32®, QNX Neutrino, Linux and embedded Linux. You can test the applications on most
platforms with device emulators which are usually delivered with the development kits.
DB2 Everyplace implements a subset of the SQL 92 standard, DB2 Call Level Interface (CLI),
Open Database Connectivity (ODBC), .NET, and Java Database Connectivity (JDBC). JDBC is
supported on all platforms that have Java technology support. The IBM Synchronization Client
on the mobile device provides APIs to access synchronization functionality directly from a
program on the device.
DB2 Everyplace mobile database is available with the SDK (download location is listed in the
bibliography) for evaluation purposes.
Now let us take a look at the methods for developing applications.
5.1 C/C++ Applications
The basic steps to develop a DB2 Everyplace database application in C/C++ application are:
1. First install DB2 Everyplace on the development workstation.
2. Define the application and its data requirements.
3. Determine what data the end user will need to see or change and how that data will be
retrieved, stored, and updated in the DB2 Everyplace database.
4. Understand the DB2 CLI/ODBC interfaces and determine what DB2 CLI/ODBC functions to
use in the application.
5. Write a C/C++ application program using the DB2 CLI/ODBC functions supported in DB2
Everyplace mobile database and Sync Client.
6. Prepare, compile, and link the application code with the DB2 Everyplace header files and
platform libraries.
7. Test the application on an emulator or device.
It is not uncommon to test the application on the desktop first before deploying it to the device
for performing final testing there.
To write your C++ application you can use the following tools on these mobile platforms:
•
•
•
Palm OS (for example using IBM WorkPad®)
o GNU Software Developer Kit
o Metrowerks Codewarrior for Palm Computing Platform
Symbian OS Version (for example using Nokia 9210)
o Microsoft Visual C++, together with the EPOC or Symbian C++ Software
Developer's Kit (SDK) for Symbian OS
Windows CE (e.g. Compaq(R) iPaq Pocket PC)
25
•
•
•
o Microsoft eMbedded Visual Tools
Win32 (Microsoft Windows NT or Windows 2000)
o Microsoft Visual C++
QNX Neutrino
o Metrowerks Codewarrior for QNX Neutrino or QNX Neutrino SDK
Linux and embedded Linux (for example Compaq iPaq)
o Embedded Linux distribution's cross platform development tools. The embedded
Linux kernel should have support for ELF (Extended Link Format) binaries enabled.
Embedded Linux is the most advanced embedded operating system solution for the
consumer electronics industry.
In Figure 11 you see on overview of how the C++ Command Line Interface (CLI) is processed
for DB2 Everyplace.
5.2 Java Applications
DB2 Everyplace mobile database supports a subset of the JDBC methods of the JDBC 2.0 and
JDBC 3.0 standards. With DB2 Everyplace V8 there is now also a Java API for the
Synchronization Client available.
There is a DB2 Everyplace plugin available for WebSphere Studio Device Developer for rapid
application development. Using the WebSphere Studio Device Developer allows you also to use
the IBM J9 JVM, a J2ME compliant JVM which is available for Palm OS, Windows CE and
PocketPC, QNX Neutrino and embedded Linux. By Using WSDD and J9 JVM, you have the
following advantages:
• Remote debugging of your application running on J9 JVM on your mobile device from
your desktop or laptop computer
• Java performance tuning tools such as MicroAnalyzer and SmartLinker integrated in
WebSphere Studio Device Developer
26
Figure 11: Overview CLI processing for C/C++ applications
•
•
•
•
J9 as runtime environment with advanced options like ahead of time compilation (AOT)
among others for premium performance
Built-in update functionality for J9 JVM
A J2ME compliant JVM which can be used as cross platform application runtime
environment reducing development and testing efforts
SWT package available for GUI development
The basic steps to develop a DB2 Everyplace database application using Java are:
1. Import the appropriate Java packages and classes (java.sql.*) and load the DB2
Everyplace JDBC driver class (com.ibm.db2e.jdbc.app.DB2eDriver) in your Java application.
2. Connect to the database by specifying the location with a URL (as defined in Sun's JDBC
specification and using the DB2 Everyplace subprotocol).
3. Pass SQL statements to the database, receive the results, and close the connection.
4. After writing your program, compile it as you would any other Java program. There are no
special pre-compile or bind steps required.
27
5.3 .NET applications
If you intend to write .NET applications, you probably want to use Microsoft Visual Studio .NET
2003. Depending on your target platform, you either use the .NET Standard Framework for
Win32 operation systems (Windows 2000, Windows XP) or the .NET Compact Framework for
PocketPC OS. ADO.NET, the classes for accessing databases using .NET technology, is
important for your application development using DB2 Everyplace mobile database. If you use
Microsoft Visual Studio .NET 2003, there are multiple programming languages available for you
such as Visual C#, Visual Basic .NET and others. You can pick the programming language you
are most familiar with to develop your application.
The basic steps to develop a DB2 Everyplace application are:
1. Create a new project by selecting your programming language and selecting the type of
application you intend to create (Windows Application for Win32 operating systems,
Smart Device Application if you write an application for a PDA solution running a mobile
OS from Microsoft).
2. Add the namespace libraries with the option Add reference in the solution explorer view,
and then add the required binaries of DB2 Everyplace mobile database and sync client
using the option Add --> Add existing item in the same view.
3. Import the required DB2 Everyplace namespaces in each class where you need them. For
example, in C# for the .NET Standard Framework it would be:
a. using IBM.Data.DB2.DB2e,
b. using IBM.Data.Sync
c. using IBM.Data.Sync.DB2e
for DB2 Everyplace mobile database and sync client. Write your code, compile it and
deploy it using Microsoft Visual Studio .NET 2003 to your target device.
5.4 Sync Client – programming considerations
This subsection is intended to briefly outline what you need to take into consideration when you
develop the part of the mobile application related to Sync Client.
• Option to trigger sync from the application GUI: Without such an option, the mobile user
cannot trigger synchronization. Make sure you start the synchronization in an own thread;
otherwise your GUI will not respond until synchronization completes. This is especially
important if you intend to provide cancel functionality (see next item).
• Option to cancel synchronization: If for a reason the mobile user must abort
synchronization this is a very useful option.
• Synchronization progress bar: Synchronization is an “invisible” process for the user. By
handling the synchronization events you can implement a sync progress bar for the sync
progress events. This provides feedback for the user to see approximately how far the
synchronization has proceeded.
• Synchronization of different target directories: By using this feature of sync client you can
specify to which destination the Sync Client should synchronize the data. You can pick a
different location for different subscriptions.
28
•
•
Option to enable or disable subscription sets: If you provide the option to the mobile user
to decide which data based on the subscription sets should be synchronized you can
achieve:
o Shorter synchronization times (for example the mobile user can sync subscription sets
containing data with daily changes each day, whereas data with weekly changes in
another subscription set is enabled only once a week for synchronization)
o Lower costs if synchronizations are short in case you sync over telephone networks
where you need to pay connection time
o More clients can synchronize against Sync Server if the data load per client is smaller
because less resources are needed by the Server to process each sync request.
Options for the mobile user to set Sync Client properties: Implementing options for the
user to set different Sync Client settings you will be able to achieve for example:
o Higher service ability if trace can be turned on
o Better performance: Adjusting messagesize and timeout properties to reflect
bandwidth and quality of your network (compare for example a 100Mbit Ethernet
connection to a GSM phone network connection) you can tune synchronization
performance and recovery speed.
For an extensive overview how to implement Sync Client functionality please take the tutorial
“Synch mobile apps with DB2 Everyplace and .NET” available on developerWorks at
http://www.ibm.com/developerworks/edu/dm-dw-dm-0409oberhoferi.html?S_TACT=104AHW11&S_CMP=LIB%20.
6 Administration and Monitoring
The basic idea in terms of administration in a DB2 Everyplace environment is to have no
administration required on the clients. In this chapter we discuss issues you must consider when
you plan to implement a DB2 Everyplace environment. You must set up the environment and
perform some administrative tasks on the mid-tier server. Also, we include hints to help you with
monitoring and troubleshooting.
6.1 Administration tools and setup
The Mobile Device Administration Center (MDAC) is the central GUI tool to administer the
whole environment. Additionally, there is a command line tool (dsyadminxml.bat) which allows
you to read and apply the definitions. The definitions read from the control database dsyctldb are
stored in an xml file.
29
Figure 12: Mobile Device Administration Center (MDAC)
Each MDAC object has a tag associated with it which can be used to write the definition files.
The tool can also be used to extract all definitions from the control database, or to duplicate a
given configuration by extracting the configuration definition from one machine and applying it
to another.
Synchronization objects are users, groups, subscriptions, subscription sets, and adapters. A user
can belong in one group only. A group can have multiple subscription sets, and each subscription
set can be associated with different groups. Each subscription can be included in different
subscription sets.
Subscription objects are tables and files which allow clients to get and exchange information.
For the main administration tasks, you use the Mobile Device Administration Center. This is the
GUI tool where you perform most of the definitions. There are a few exceptions where you can
use provided scripts. You will find many of these utilities and programs in the directory “<DB2
Everyplace path>\Server\bin". When you want to duplicate the information you can use the
dsyadminxml tool to read and apply definitions.
There are additional properties which you can change either by using the dsysetproperty.bat
tool or the dsyadminxml.bat tool. These parameters include for example the number of
concurrent connections and the data type mappings as well as parameters for other tasks.
6.2 Regular administrative tasks
Because the amount of data increases over time, and you need to be able to recover in the event
of a problem with your database, you should perform some administrative tasks on a regular
basis. These tasks include the following:
• RUNSTATS/REORGCHK/REORG
These are tasks that DBAs commonly run to improve performance. The optimizer in DB2
requires certain statistics to make the right decisions when determining an access path.
When data changes frequently rows tend to lose their sequential order. In that case the
table may need to be reorganized to order the rows by the desired key. The need for
30
•
REORG can be checked from time to time using REORGCHK, and RUNSTATS can be
run to update the statistics in the catalog tables. These are tasks that can be scheduled on
a regular basis. With V8 of DB2 UDB you can use online tools to perform these tasks.
BACKUP/RESTORE
The recovery strategy must be carefully planned. DB2 installed out of the box performs
recovery only on the transaction level. This capability does not help if a server crashes.
Then you need the backup and log files to recover. DB2 offers several strategies that you
should consider so you can choose the strategy that meets your needs and works with your
acceptable down times. For those who require no down time, we describe a high
availability solution in section 9.
6.3 Monitoring
6.3.1 Basic monitoring information
DB2 Everyplace enables monitoring by writing certain events to the table DSY.LOG in the
control database DSYCTLDB. This database is created during Sync Server installation. The
following events will be written to this log table:
•
•
Start and end of a replication cycle
Begin and end of a synchronization step for each client
For basic monitoring you can use MDAC by reviewing the object named Logs. The Logs object
show the content of the DSY.LOG table.
There are several places to look at when you want to get information about your system running
DB2 Everyplace:
•
•
•
•
Table DSY.LOG:
DB2 Everyplace enables basic monitoring by writing certain events to the table
DSY.LOG in the control database DSYCTLDB. This database is created when you
install the Sync Server of the DB2 Everyplace Enterprise edition.
The following events will be written to this log table:
o Start and end of a replication cycle
o Begin and end of a synchronization step for each client
Table DSY.SESSIONMONITOR:
This table is located in each mirror database. It has only one entry per client and database
subscription. This entry always shows the subscription the client is currently working on
or has most recently worked on.
File system:
You should be aware of some places outside the control database where vital information
is stored:
Sync Server writes exceptions and other trace information to three files. The files are
DSYXXXX.trace (XXXX = number) and syncadapterinit.log. All files
are located under “<DB2 Everyplace path>\Server\logs\<Servername>”.
31
•
Web application and HTTP server:
For environments with a large number of users you should add an application server to
host the Sync Server servlet. This server drags an HTTP server along.
o The IBM HTTP server has its own log. This log gives information about the
clients, too. (see <IBM HTTP server>\logs\Access.log)
o The WebSphere application server itself also writes a logfile into the directory
<WebSphere>\appserver\logs\.
6.3.2 Advanced synchronization monitoring
DB2 Everyplace V8.2 introduces a new Sync Client Trace Upload feature. This new capability
has a Sync Server part and a Sync Client part. During synchronization, the Sync Client engine
writes information to three tables, which are then propagated to a source database called
DSYCSTAT on the mid-tier system through an upload subscription. This UPLOAD subscription
DSYCLIENTSTAT in the subscription set DSYCLIENTSTAT_SET must be assigned to all
user groups for which you intend to collect the synchronization information. The three tables in
the server source database contain the uploaded client information for traces, status, and statistics
of all synchronizations. The sample synchronization report located in
<DSYINSTDIR>\Server\syncreport uses only two of the three tables: status and statistics.
You can either modify the existing report in the above directory or write your own reporting
infrastructure by querying the database DSYCSTAT.
The sample synchronization report provides features ranging from administration to performance
monitoring and optimization. A synchronization report enables a DB2 Everyplace administrator
to manage all aspects of synchronizations including:
•
•
•
Administration
o User and device management: usage reports and synchronization statistics
Performance management
o Performance monitoring and optimization
Data recovery and error reporting
o Manage and administer synchronization failures to ensure data integrity
o Track errors and collect traces to assist troubleshooting and identify different types
of errors
6.4 Troubleshooting
In this section we describe what you can do in case you encounter problems.
6.4.1 MDAC object error situation
If an error occurs during subscription creation, there are two cases to distinguish as outlined in
6.4.1.1 and 6.4.1.2.
32
6.4.1.1 MDAC error situation during definition
If you receive an error during subscription creation, check the database connectivity first. For
more information check the files dsyadminXXXX.trace (XXXX = number) in the directory
“<DB2 Everyplace path>\Server\logs\<Servername>".
6.4.1.2 MDAC error situation during modification
Prior to editing a subscription, you should block it first. Otherwise clients might synchronize the
subscription when you apply the change, leading to unpredictable results. When this happens, it
might be the best solution to drop and recreate the subscription. Thus all internal structures for
this subscription are regenerated and any partial information from the clients related to this
subscription is deleted.
6.4.2 Sync Server traces
When you analyze error situations, first check the log information using MDAC. Other base
information about the servlet environment is stored under
"<DB2e>\WAS\logs\<IBMDB2eServer>". Addtional trace files are available in the file system
under "<DB2 Everyplace path>\Server\logs\<Servername>":
y dsyXXXX.trace (XXXX = number) contains sync and replication trace information
y dsyadminXXXX.trace (XXXX = number) contains MDAC and dsyadminxml tool trace
information
y syncadapterinit.log contains exceptions from Sync Server
If you need more detailed trace information, invoke the DSYTRACE utility. The command
DSYTRACE 1 will turn on the trace utility. All trace messages will be logged to the
dsy0000.trace file and to the console window. There are additional options available. You
can also set the trace parameters in the file DSYGdflt.properties. You will find the file in
the properties subdirectory of the server. The timestamp in the trace file is not automatically
converted, but there is a tool provided which does this offline.
6.4.3 DB2 database messages
DB2 error information is logged in two places:
• One for administrators called the Notify log. You will find this information in the event
viewer of Windows or under "<instancehome>\sqllib\db2dump" as a file with an
extension ".nfy". The level of information can be set in the database manager
configuration.
• The second file containing more in-depth information is db2diag.log. The
db2diag.log records DB2 errors and, depending on the DIAGLEVEL, warnings and
33
informational messages. The db2diag.log is an ASCII file and is located in the
directory specified by the DIAGPATH database manager configuration parameter.
6.4.4 Client access
When a client has problems during synchronization you first should check the following:
• Did the client ever reach the server?
o Look for error messages on your client device. If you see “6XX” errors, that
means there are communication problems. Write down the error for use in further
investigation.
o Verify that the Sync Server servlet is running. This can be checked with a Web
browser typing the following address: ‘http://<Serverip:port>/db2e/db2erdb’. The
servlet should answer. If it does, the servlet is running and you can end your
discovery for the moment. Otherwise you must access the server and use MDAC
to go ahead to the next step.
o Check entries in the synchronization object “Logs” in the MDAC. When you are
able to find an entry for the client in the timeframe matching your synchronization
time you can skip the next bullet.
• Does the user id exist and belong to a group that is enabled?
o Check if the client really exists under the “Users” object in MDAC.
o Check that the user belongs to the group.
o Check to see if the user is enabled. This is shown in column in the “Users” object.
You also should see the device type.
o Check to see that the group is enabled. You can check this in the “Groups”
object.
Increasing the timeout parameter on the client device in the advanced settings panel can often
solve communication problems if they have been caused by an unstable transportation layer
between the client device and the server.
6.5 Conflict information
Conflicts will be logged in the DSY.LOG table. See also chapter 3 for the different types of
conflicts and how to change the default conflict resolution behavior.
6.6 Duplicating a DB2 Everyplace installation
Scripts are a fast and easy way to duplicate installations. For duplicating installations, there are
basically two methods:
• Duplicating an existing installation on another machine using the same version of DB2
Everyplace
• Duplicating an existing installation on another machine using a different DB2 Everyplace
version. This could be the case if you want to test a new DB2 Everyplace version with your
existing configuration prior to installing the new DB2 Everyplace version on your
production system.
34
The first option is relatively easy to achieve by making backups of all involved databases and
restoring them on the same system. In addition, you need to extract your Web server settings and
apply them to the Web server on the new host. Finally, make sure that the database password for
Sync Server is updated accordingly in the DSYCTLDB. This method can not be applied for the
second option because in the database there are internal tables for Sync Server with structures
which might have changed on the new release. The second option is described in full detail in the
DB2 Everyplace Performance Tuning Guide (see bibliography).
Here are some additional hints for duplicating your DB2 Everyplace installation:
y DB2 can be installed with a response file which includes environment variables that should
be set up front. If you generate a file that contains the db2set command, this process will also
be used to set the DB2 environment variables.
y Database schema for DSYCTLDB is provided. You will find it with the filename
dsyctldb.ddl.
y If you use WebSphere, there is a utility with the name XMLConfig to export the
configuration into a file that stores the information as XML. You can use the utility afterwards to
import the configuration again or start and stop the application server for database backup
purposes (the utility is case sensitive).
6.7 Disaster recovery and high availability
Because DB2 Everyplace relies on DB2, the same mechanisms for availability that apply for DB2
UDB apply here. We only have one additional challenge. A DB2 Everyplace solution has a
minimum of three databases (msg db, dsyctldb and mirror db) and many clients that must be
synchronized after a crash recovery. So you should plan for disaster recovery, high availability,
or both.
Disaster recovery:
•
•
•
Run database with archival logging.
Use a user exit to save the archived logs.
Use log mirroring additionally to save log files.
Normally it is up to the administrator to monitor for a crash and to take action. In addition you
can use monitoring software such as Tivoli to monitor databases or the whole machine. The
scenario affords manual intervention to set up a second machine where you restore the backup
and apply log files for the database.
High availability (HA):
High availability on the database side forces you to buy additional platform-specific products and
a bit more hardware. You will need have a second machine, a separate disk unit, and a second
network adapter.
35
•
•
With V8 of DB2 UDB you can use HADR feature of DB2 to reduce the number of
transactions you lose in a disaster recovery case to zero and run an additional image on
the second machine which applies the logs. To reach high availability you also need a
heartbeat monitor. If you want this level of availability, you will need high availability
software such as HACMP for AIX.
You can also just use high availability software to get a high availability cluster. There is
a difference in the recovery time only. The HA software is used to manage a DB2
resource group. This resource group is similar to a DB2 Instance. It consists of resources
like disks with data and configuration directory and an IP address.
7 Software distribution
In the following section we will discuss the methods used for distributing and configuring the
DB2 Everyplace software. When you want to deploy either the base software or the scripts
needed to run a DB2 Everyplace scenario, you need to differentiate between two targets:
•
•
The server, where DB2 Everyplace Sync Server, WebSphere and DB2 will be deployed
The clients, where the DB2 Everyplace database and the sync client will be deployed
7.1 Server
On the server side we will consider a number of tasks:
•
•
The distribution of software including DB2 and WebSphere
The distribution of definitions and configurations including instances, databases and their
configurations, database objects such as tables, and WebSphere configurations
The base software is standard distribution work. For the configuration we have to refer to the
product documentation. WebSphere uses XML to apply definitions. DB2 definitions can be
accomplished partly during installation. Other definitions and configurations can be applied as
batch procedures. DB2 Everyplace can be configured using the dsyadminxml tool.
Various mechanisms are available for software distribution, such as SMS for Windows
environments or Tivoli software distribution for mixed environments. With these mechanisms
you also will be able to distribute scripts to:
•
•
•
•
Create the mirror databases
Configure the databases and database manager
Configure WebSphere (XMLConfig -import <file> -adminNodeName ...)
Configure DB2 Everyplace with the XML file and tool
7.2 Clients
36
On the client side, the software distribution mechanism available will depend on the device
platform. Sync software like HotSync for Palm devices or MS ActiveSync for PocketPC and
WinCE can be used to copy files to devices or you can use hardware backup modules provided
by the hardware vendors. In both scenarios you must customize the client afterwards for
synchronization.
DB2 Everyplace V8 offers additional features such as autodeploy to distribute updates of its own
code to the clients. So you must deploy the code only once as described above. All additional
changes in the code can be delivered by our own synchronization.
For Windows clients you can zip the database including the code to send it or provide it for ftp.
You must personalize the configuration internally before you provide it or the clients will be
required to do it. When you customize upfront you can synchronize the first time to add the data
and zip it afterwards. An application for DB2 Everyplace can be provided via file subscription
with the DB2 Everyplace sync mechanism.
IBM and other vendors offer additional software to deploy software to devices and manage the
devices. These tools, such as WEDM (Websphere Everyplace Device Management), are
available under WESD (Websphere Everyplace service delivery).
8 Scalability and availability
Scalability and availability must be considered when planning deployment of a mobile solution.
The central focus point for these issues is the midtier server. We strongly recommend that you
also read the DB2 Everyplace Performance Tuning Guide (see bibliography) for greater
understanding of scalability and performance issues.
8.1 WebSphere
IBM WebSphere Application Server provides a rich e-business application deployment
environment with a complete set of application services including capabilities for transaction
management, security, clustering, high performance, availability, connectivity and scalability.
You can deploy Sync Server on the WebSphere Application Server (Application Server) to
increase your capability to administer and tune it.
8.2 Sync Server servlet
The DB2 Everyplace Sync Server is a servlet which comes embedded in a WebSphere servlet
engine extract. The servlet starts the listener which waits for requests from clients. In addition, it
controls the replication from the mirror database on the midtier server to the backend data source
and vice versa. Since the WebSphere servlet engine extract is only a servlet runner, it has
minimal configuration and monitoring facilities and tighter limitations on the number of
concurrent users.
37
8.3 First level of scalability
Configuring the Sync Server servlet under WebSphere Application Server is completely
independent of the Servlet Engine extract.
The DB2 Everyplace Sync Server is currently supported for Application Server 4.0 and 5.0 (for
details on the recommended FixPak levels see DB2 Everyplace product documentation). The
WebSphere installation package includes the IBM HTTP Server (which is based on Apache
server).
Performance measurements by IBM personnel on DB2 Everyplace have shown that DB2
Everyplace Sync Server performs best under the the control of WebSphere when there are more
than 60 users running synchronizations concurrently. This number was determined by
benchmarking under controlled conditions such as number of processors, amount of memory,
number of filter criteria, and accepted response time. Measurements also show that the resource
consumption per concurrent client, per number of subscriptions and for the size of sync data is
lower using the full WebSphere Application Server.
So if you want to reduce the response time, you will need to consider the investment for
additional resources such as processors or memory. This means that even if the client production
environment has less than 60 users, you should consider running synchronization with full
WebSphere. The total number of users supported can be increased by adding processors and
memory as well.
8.4 Second level of scalability
Instead of increasing the power of one central midtier server, think about the whole architecture.
With DB2 Everyplace V8 and WebSphere you can split the midtier server into many application
servers working with one control database server which allows you to share the DSYCTLDB
among multiple servers.
Scaling beyond the limitations of one application server can be achieved in one of two ways:
• Vertical cloning
• Horizontal cloning
Vertical cloning means that you clone and deploy multiple Sync Servers on the same physical
machine in the WebSphere Application Server environment. Before you decide to use this option,
you should measure resource utilization on your machine. The DB2 Everyplace performance
team recommends that you not deploy another clone if CPU and memory are already utilized by
85% or more. (For details see the Performance Tuning Guide.)
38
Horizontal cloning means adding additional physical machines on which you install additional
configurations of WebSphere Application Server and Sync Server to generate a cluster
environment. This scenario could be used, for example, if you have many regional sales teams.
Each team can run against its own midtier server which only contains the data for this regional
group. The advantage will be the even distribution of the load among multiple servers.
8.5 Availability
In a DB2 Everyplace environment the midtier server is the main resource that must be available.
Here are a couple of approaches to the availability issue for the midtier server:
•
Run more instances of WebSphere with DB2 Everyplace V8 sharing the same servlet. In
this case you must have a domain name server routing or WebSphere Edge Server
implemented. The scenario in the following picture shows a high availability solution
using WebSphere.
Figure 13: WebSphere cluster
To support Sync Server load balancing, WebSphere server affinity, Network Dispatcher
CBR/WET, or Network Dispatcher can be used. In terms of usability, WebSphere server
affinity is the best choice.
The sample shown in Figure 13 is a highly distributed scenario. Client requests are
distributed on the two Web servers through a network dispatcher. Web servers,
application servers and database servers are installed on physically separate machines.
All the requests from the synchronization client received by the Web server in Machine A
are redirected by the Web server plug-in, which is a component of WebSphere, to the
application server cluster for processing. Machines C and D require an Administrative
Server to manage their resources. The Administrative Server uses a repository located in a
DB HA cluster.
39
•
Make the database highly available using cluster software such as Microsoft Cluster
Server on Windows or HACMP on AIX. In the picture above the databases are placed on
a machine in a cluster. If this node fails, DB2 will start on the other node transparent to
the applications. The applications will have to reconnect.
For availability, you might need to duplicate existing configurations as mentioned in section 6.6
if you want to recover faster from a crash (see details in chapter 6.7).
9 Performance
In this chapter, we look at performance considerations for setting up and executing a DB2
Everyplace project. The location for the complete DB2 Everyplace Performance Tuning Guide
is listed in the bibliography and we strongly recommend that you read it prior to planning any
medium to large DB2 Everyplace installation.
Running a DB2 Everyplace sync solution requires proper tuning of the execution environment
(including the involved databases and WebSphere Application Server) and DB2 Everyplace.
Follow these steps to make sure that you have tuned for optimum performance:
1. Document your intended system configuration.
2. Document your projected workload and desired performance covering:
•
Number of mobile users on the system
•
Average amount of data for initial download
•
Average amount of data for delta sync
•
Average number of syncs per hour
•
Average number of syncs at peak times
•
Number of replication cycles
•
List intended features with significant performance impact (like filters)
•
Database layout of bufferpools, tablespaces, available disks and data model
3. Schedule a performance tuning period prior to going into production to reduce the risk of
using a poorly tuned setup on a production system. During this time, run extensive automated
multiuser tests based on your projected workload. Make sure you change only parameters in
one area at a time and iterate through all important areas.
4. In production, perform routine performance maintenance. Examples for this would be
periodic database RUNSTATS and the periodic capture of important system metrics (CPU,
memory, IO, network). Validate this periodically obtained information against your originally
projected workload and document the performance profiles in such a way that trends can be
identified before they become a problem.
9.1 Data design
40
The DB2 Everyplace sync process is a row level-based process. This means that if only one
column in a row is changed, the entire row will be synchronized. Therefore, a good data design
for performance requires separation of volatile and static data into different tables (see Figure
14). If this is done, fewer messages (due to smaller data load) are needed, and thus you will have
shorter sync times. If the sync time is shorter, more clients can synchronize per hour, leading to
higher concurrency and availability of the server to more users.
Another issue regarding data design for good performance is to separate data into different
subscriptions if the involved tables have to be replicated or synchronized with different
frequency. The gain of such a design could be twofold:
Figure 14: Good versus bad table design
• First of all, the sync time will be shorter since you can only synchronize the subscriptions sets
containing subscriptions with daily data most of the time. Perhaps only once a week the
subscription set containing the subscriptions with the weekly data will need to be synchronized.
• Second, replication time will benefit from this approach. Replication is a process per mirror
databases. If the data is separated into multiple subscriptions targeting different mirror
databases (see Figure 15 ), you can schedule different replication cycles:
41
Figure 15: Improving replication performance by separating data with different needs regarding
replication schedule
o For the replication of the daily data, you might want to schedule a replication cycle
twice a day or more, depending on your needs. This replication cycle will be shorter,
since the replication process does not process any work related to subscriptions on
other mirror databases, in our example the subscriptions containing the weekly data.
o For the replication of the weekly data, you might want to replicate only once a week.
Again, this replication cycle will be shorter since none of the daily data is replicated.
An example for such a design would be a service technician solution, where you might intend to
synchronize the material list only once a week because this data might not change at all in a
week. However, the service technician must synchronize the list of customers where an on-site
repair should be performed on a daily basis or even more frequently, in case a customer
postponed or cancelled the repair request earlier in the day.
The last point regarding the data design is the layout of the tables in the tablespaces. Note that
with DB2 Everyplace Sync Server V8.1.4 you can specify the table space of the DB2 UDB
mirror database where the table should be replicated. If you take advantage of this feature, you
can improve synchronization performance by parallelizing database I/O by distributing the tables
into different tablespaces laid out on multiple hard disks. With parallel I/O on the database level,
the Sync Server can read more data needed in concurrent synchronization scenarios in a smaller
amount of time.
9.2 DB2 Everyplace database performance
Using the mobile databases DB2 Everyplace or Cloudscape, there are two very important things
to consider regarding performance:
• Index usage
• Running the database on a memory card
The performance of insert/update/delete operations will suffer with each additional index created,
therefore degrading sync performance. However, on the other hand, your application querying the
database might not perform fast enough without indexes. Therefore, you need to balance
application versus sync performance regarding the number of indexes you create in the database.
For more details (prefix scanning, bidirectional index scanning, and so on) on the available
options please read the product documentation.
If you intend to run the mobile database from a memory card added to your PDA or smartphone
to have more disk space available, we strongly recommend that you benchmark the intended
solution first. The available memory cards vary greatly in I/O speed. This is the reason why due
to our experience, we recommend that you run benchmarks with your application on the intended
device with the intended memory card first, before you buy a certain card type for all of your
devices.
42
9.3 Sync client performance
Configuring the sync client, there are two very important considerations:
•
•
Average data size on sync
Network quality
The average data size during synchronization has impact on the timeout parameter. The timeout
value specifies how long the client will wait for a server reply. If the data load increases, the
timeout value should be adjusted accordingly. For example a more common timeout value for
synchronizations for 5-15 MB of data is 3-5 minutes. During peak hours, where Sync Server
might be very busy, this value might need to be increased. Adjust it until you achieve an
acceptable synchronization success rate.
The network (quality, speed, latency, reliability) affects the message size parameter. If the
network is not reliable, make the message size smaller to allow faster recovery. In such a
scenario, messages will be lost more frequently and the client will need to request/resend a
message more frequently. If you have a reliable, high quality network with high latency, you
should use larger message sizes to reduce the number of messages. In this scenario, sync
performance suffers from the high latency. Reducing the number of handshakes between client
and server by exchanging fewer messages means paying the latency price less often, and
therefore performance will be better.
Again, similar to the timeout setting, testing in your environment is needed to find the proper
setting for optimal performance.
9.4 Sync Server performance
Tuning Sync Server performance is a more complex task than tuning the other DB2 Everyplace
components in a sync solution. We will provide only a short list of recommended steps here,
since a full coverage of Sync Server performance tuning is beyond the scope of this article. You
should read the DB2 Everplace Performance Tuning Guide to get a more detailed understanding
of the topic prior to starting to implement a solution.
This would be the minimum list to consider during design and implementation:
• Minimize the number of subscriptions.
• Maximize the time between replication cycles (replication competes with
synchronizations on the machine hosting Sync Server for the same CPU, memory, I/O,
and other resources).
• Use data partitioning into different mirror databases to reduce data size in the mirror
databases for better query performance (this might be especially useful if groups of
mobile users work with different data).
43
•
•
•
•
•
•
•
Dedicate TCP/IP backbones between the mirror databases and the Sync Server for better
performance (apply the same approach between source and Sync Server if you use upload
subscriptions).
Design conflict free (with minimal conflicts) solutions because conflict resolution is very
expensive for various reasons.
If not needed, turn DeleteOutOfScope -Filtering off (using RowFilter.OutOfScope.Delete)
Adjust at least the following parameters to fit your needs:
o ThreadPoolCount (found in DSYGdflt.properties),
o Jdbc.MaxConnections, DB2ClientSession.Connections (both found in
DSYCTLDB in the dsy.properties table, for configuration use).
All three parameters will affect available concurrency of Sync Server. So if your
synchronization success rate is too small, you might want to see if increasing these
parameters solves the problem.
Tune the involved databases as outlined in the performance tuning guide.
Tune the involved Web Application Server as outlined in the performance tuning guide.
10 Summary
With DB2 Everyplace, mobile professionals such as sales people, inspectors, auditors, field
service technicians, doctors, realtors, insurance claim adjusters and many others can keep in
touch with vital data that they need, wherever they are and wherever the data is. Specifically,
organizations are now able to deliver their DB2 enterprise data to mobile and embedded devices.
With DB2 Everyplace, you can access and perform updates to a database on a mobile device.
Using the DB2 Everyplace Sync Server, you can synchronize data from the mobile device with
other data sources in your enterprise.
Additionally, DB2 Everyplace helps in collecting data that is structured, clean and complete.
There is no need for consolidation to be done as is necessary for data warehousing.
In the first part of this article we provided a technical overview of DB2 Everyplace. In the second
part we provided hints and tips for administrating and troubleshooting a DB2 Everyplace
solution. Finally, we outlined scalability and performance considerations.
Start your mobile solution with DB2 Everyplace now because:
•
•
•
•
Mobile computing technology has reached the level of performance and capacity needed
for enterprise applications
Storage has evolved from 512KB to 16MB and more (microdrives enables 4GB of storage
and more on a handheld device).
Cost of devices is declining.
Several mobile device manufacturers are aggressively pushing to expand the device
market (Palm, Handspring, Compaq, HP, Phillips, Psion, Sharp, Nokia, Ericsson, and
Motorola).
44
•
Growth in wireless access allows even greater flexibility in accessing enterprise data from
a mobile device. There are over 1 billion wireless subscribers worldwide.
Bibliography
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
DB2 Everyplace homepage:
http://www.ibm.com/software/data/db2/everyplace/new81.html
DB2 Everyplace library:
http://www.ibm.com/software/data/db2/everyplace/library.html
DB2 Everyplace Performance Tuning Guide:
http://www.ibm.com/software/data/db2/everyplace/library.html
DB2 Everyplace Application Developer Guide:
http://www.ibm.com/software/data/db2/everyplace/library.html
DB2 Everyplace Installation Guide:
http://www.ibm.com/software/data/db2/everyplace/library.html
DB2 Everyplace Sync Server Installation Guide:
http://www.ibm.com/software/data/db2/everyplace/library.html
DB2 Everyplace Success Stories:
http://www.ibm.com/software/success/cssdb.nsf/softwareL2VW?OpenView&Count=30&
RestrictToCategory=db2software_DB2Everyplace
FAQ for DB2 Everyplace:
http://www.ibm.com/software/data/db2/everyplace/support.html
DB2 Everyplace Mailing list:
http://groups.yahoo.com/group/db2everyplace/
DB2 Everyplace SDK:
http://www14.software.ibm.com/webapp/download/product.jsp?s=p&id=JPEN-4HNW2H
DB2 Everyplace .NET application development:
http://www-106.ibm.com/developerworks/edu/dm-dw-dm-0409oberhoferi.html?S_TACT=104AHW11&S_CMP=LIB%20
Cloudscape homepage:
http://www.ibm.com/software/data/cloudscape/
Cloudscape library: http:
http//www.ibm.com/software/data/cloudscape/pubs/
Cloudscape trial version:
http://www14.software.ibm.com/webapp/download/product.jsp?cat=data&S_TACT=&S_
CMP=&id=JSTN-57L7UQ&s=c
WebSphere Studio Device Developer homepage:
http://www.ibm.com/software/wireless/wsdd/
WebSphere Studio Device Developer library:
http://www.ibm.com/software/wireless/wsdd/library.html
Resources on .NET programming:
http://www.ondotnet.com/dotnet/
45
•
An Overview on HA and DR for DB2 UDB
http://www.ibm.com/developerworks/db2/library/techarticle/0304wright/0304wright.html
46