Db2 DBA Planning
Db2 DBA Planning
DB2 Version 9
for Linux, UNIX, and Windows
SC10-4223-00
DB2 ®
DB2 Version 9
for Linux, UNIX, and Windows
SC10-4223-00
Before using this information and the product it supports, be sure to read the general information under Notices.
Edition Notice
This document contains proprietary information of IBM. It is provided under a license agreement and is protected
by copyright law. The information contained in this publication does not include any product warranties, and any
statements provided in this manual should not be interpreted as such.
You can order IBM publications online or through your local IBM representative.
v To order publications online, go to the IBM Publications Center at www.ibm.com/shop/publications/order
v To find your local IBM representative, go to the IBM Directory of Worldwide Contacts at www.ibm.com/
planetwide
To order DB2 publications from DB2 Marketing and Sales in the United States or Canada, call 1-800-IBM-4YOU
(426-4968).
When you send information to IBM, you grant IBM a nonexclusive right to use or distribute the information in any
way it believes appropriate without incurring any obligation to you.
© Copyright International Business Machines Corporation 1993, 2006. All rights reserved.
US Government Users Restricted Rights – Use, duplication or disclosure restricted by GSA ADP Schedule Contract
with IBM Corp.
Contents
About this book . . . . . . . . . . . vii Database relationships . . . . . . . . . . . 54
Who should use this book . . . . . . . . . viii One-to-many and many-to-one relationships . . 54
How this book is structured . . . . . . . . viii Many-to-many relationships . . . . . . . . 55
One-to-one relationships . . . . . . . . . 55
Ensure that equal values represent the same
Part 1. Database concepts . . . . . . 1 entity . . . . . . . . . . . . . . . 56
Column definitions . . . . . . . . . . . . 56
Chapter 1. Basic relational database Primary keys . . . . . . . . . . . . . . 58
concepts . . . . . . . . . . . . . . 3 Identifying candidate key columns . . . . . 59
About databases . . . . . . . . . . . . . 3 Identity columns . . . . . . . . . . . . 60
Database objects . . . . . . . . . . . . . 3 Normalization . . . . . . . . . . . . . 61
Configuration parameters. . . . . . . . . . 12 First normal form . . . . . . . . . . . 62
Environment variables and the profile registry . . . 14 Second normal form . . . . . . . . . . 62
Business rules for data. . . . . . . . . . . 17 Third normal form . . . . . . . . . . . 63
Data security . . . . . . . . . . . . . . 20 Fourth normal form . . . . . . . . . . 64
Authentication . . . . . . . . . . . . . 20 Constraints . . . . . . . . . . . . . . 65
Authorization . . . . . . . . . . . . . 21 Unique constraints . . . . . . . . . . . 66
Units of work . . . . . . . . . . . . . 22 Referential constraints . . . . . . . . . . 66
High availability disaster recovery (HADR) feature Table check constraints . . . . . . . . . 69
overview . . . . . . . . . . . . . . . 23 Informational constraints . . . . . . . . . 69
Developing a backup and recovery strategy . . . 25 Triggers . . . . . . . . . . . . . . . 70
Additional database design considerations . . . . 71
Chapter 2. Automatic maintenance . . . 29
About automatic maintenance . . . . . . . . 29 Chapter 5. Physical database design 73
Automatic features enabled by default . . . . . 30 Database directories and files . . . . . . . . 73
Automatic database backup . . . . . . . . . 31 Space requirements for database objects . . . . . 75
Automatic reorganization . . . . . . . . . . 32 Space requirements for system catalog tables . . . 76
Automatic statistics collection by table . . . . . 33 Space requirements for user table data . . . . . 77
Automatic statistics profiling using automatic Space requirements for long field data . . . . . 78
statistics collection . . . . . . . . . . . . 34 Space requirements for large object data . . . . . 79
Storage used by automatic statistics collection and Space requirements for indexes . . . . . . . . 80
profiling . . . . . . . . . . . . . . . 35 Space requirements for log files. . . . . . . . 82
Maintenance windows . . . . . . . . . . . 35 Space requirements for temporary tables . . . . 83
Offline maintenance . . . . . . . . . . . 36 XML storage object overview . . . . . . . . 84
Online maintenance . . . . . . . . . . . 36 Guidelines for storage requirements for XML
documents. . . . . . . . . . . . . . . 84
Chapter 3. Parallel database systems 37 Database partition groups . . . . . . . . . 85
Database partition group design . . . . . . . 87
Parallelism . . . . . . . . . . . . . . 37
Distribution maps . . . . . . . . . . . . 88
Input/output parallelism . . . . . . . . . 37
Distribution keys . . . . . . . . . . . . 89
Query parallelism . . . . . . . . . . . 37
Table collocation . . . . . . . . . . . . . 91
Utility parallelism . . . . . . . . . . . 40
Database partition compatibility . . . . . . . 91
Partitioned database environments . . . . . . 41
Data partitions . . . . . . . . . . . . . 92
Database partition and processor environments . . 42
Table partitioning . . . . . . . . . . . . 93
Single database partition on a single processor . 42
Table partitioning keys . . . . . . . . . . 96
Single database partition with multiple
Data organization schemes . . . . . . . . . 99
processors . . . . . . . . . . . . . . 43
Partitioned tables . . . . . . . . . . . . 104
Multiple database partition configurations . . . 44
Data organization schemes in DB2 and Informix
Summary of parallelism best suited to each
databases . . . . . . . . . . . . . . . 105
hardware environment . . . . . . . . . 48
Replicated materialized query tables . . . . . . 111
Table space design . . . . . . . . . . . . 112
Part 2. Database design . . . . . . 51 SYSTOOLSPACE and SYSTOOLSTMPSPACE table
spaces . . . . . . . . . . . . . . . . 115
Chapter 4. Logical database design . . 53 System managed space . . . . . . . . . . 117
What to record in a database . . . . . . . . 53 SMS table spaces . . . . . . . . . . . . 119
Contents v
vi Administration Guide: Planning
About this book
The Administration Guide: Planning provides information necessary to use and
administer the DB2® relational database management system (RDBMS) products,
and includes information about database planning and design.
Many of the tasks described in this book can be performed using different
interfaces:
v The Command Line Processor, which allows you to access and manipulate
databases from a command-line interface. From this interface, you can also
execute SQL statements and DB2 utility functions. Most examples in this book
illustrate the use of this interface. For more information about using the
command line processor, see the Command Reference.
v The application programming interface, which allows you to execute DB2
utility functions within an application program. For more information about
using the application programming interface, see the Administrative API
Reference.
v The Control Center, which allows you to use a graphical user interface to
manage and administer your data and database components. You can invoke the
Control Center using the db2cc command on a Linux™ or Windows® command
line, or using the Start menu on Windows platforms. The Control Center
presents your database components as a hierarchy of objects in an object tree.
This Control Center tree includes your systems, instances, databases, tables,
views, triggers, and indexes. From the tree you can perform actions on your
database objects, such as creating new tables, reorganizing data, configuring and
tuning databases, and backing up and restoring table spaces. In many cases,
wizards and launchpads are available to help you perform these tasks more
quickly and easily.
The Control Center is available in three views:
– Basic. This view provides you with the core DB2 database functions. From
this view you can work with all the databases to which you have been
granted access, including their related objects such as tables and stored
procedures. It provides you with the essentials for working with your data.
– Advanced. This view provides you with all of the objects and actions
available in the Control Center. Use this view if you are working in an
enterprise environment and you want to connect to DB2 Version 9.1 for
z/OS® (DB2 for z/OS) or IMS.
– Custom. This view provides you with the ability to tailor the Control Center
to your needs. You select the objects and actions that you want to appear in
your view.
For help on using the Control Center, select Getting started from the Help
pull-down on the Control Center window.
There are other tools that you can use to perform administration tasks. They
include:
v The Command Editor which replaces the Command Center and is used to
generate, edit, run, and manipulate SQL statements; IMS and DB2 commands;
work with the resulting output; and to view a graphical representation of the
access plan for explained SQL statements.
Database Concepts
v Chapter 1, “Basic relational database concepts,” presents an overview of
database objects and database concepts.
v Chapter 3, “Parallel database systems,” provides an introduction to the types of
parallelism available with DB2 databases.
Database Design
v Chapter 4, “Logical database design,” discusses the concepts and guidelines for
logical database design.
v Chapter 5, “Physical database design,” discusses the guidelines for physical
database design, including space requirements and table space design.
v Chapter 6, “Designing partitioned databases,” discusses how you can access
multiple databases in a single transaction.
v Chapter 7, “Designing for XA-compliant transaction managers,” discusses how
you can use your databases in a distributed transaction processing environment.
Appendixes
v Appendix A, “Incompatibilities between releases,” presents the incompatibilities
introduced by Version 8 and Version 9, as well as planned future
incompatibilities.
You can:
v Create a database.
v Add a database to the Control Center.
v Drop a database from the Control Center.
v Back up a database.
v Restore a database.
v Configure a database.
v Catalog a database.
v Uncatalog a database.
v Connect to a database.
v Monitor a database with the event monitor.
v Work with partitioned databases.
v Work with federated systems.
For z/OS and OS/390® systems, the default database, DSNDB04, is predefined in
the DB2 installation process. This database has a default buffer pool (BP0), and a
default DB2 storage group (SYSDEFLT).
Related concepts:
v “Tables” in SQL Reference, Volume 1
Database objects
Systems:
You can:
v Add a system to the Control Center.
v Attach to a system.
v Remove a system from the Control Center.
Instances:
An instance (sometimes called a database manager) is DB2 code that manages data. It
controls what can be done to the data, and manages system resources assigned to
it. Each instance is a complete environment. It contains all the database partitions
defined for a given parallel database system. An instance has its own databases
(which other instances cannot access), and all its database partitions share the same
system directories. It also has security separate from other instances on the same
computer (system).
Databases:
Database partitions:
A database partition consists of its own data, indexes, configuration files, and
transaction key. It is sometimes referred to as a node or database node. Tables can
be located in one or more database partitions. When a table’s data is distributed
across multiple partitions, some of its rows are stored in one partition, and other
rows are stored in other partitions. Data retrieval and update requests are
decomposed automatically into sub-requests, and run in parallel among the
applicable database partitions. The fact that a database can be split across database
partitions is transparent to users.
A database partition group is a set of one or more database partitions. When you
want to create tables for the database, you first create the database partition group
where the table spaces will be stored, then you create the table space where the
tables will be stored.
Table spaces:
A database is organized into parts called table spaces. A table space is a place to
store tables. When creating a table, you can decide to have certain objects such as
indexes and large object (LOB) data kept separately from the rest of the table data.
A table space can also be spread over one or more physical storage devices. The
Table 1
Table 1 index
System catalog tables for definitions
of views, packages, functions,
datatypes, triggers, and so on.
Table 2 Table 3
Table 2 Table 3 index index
LOB
LOB
Table spaces reside in database partition groups. Table space definitions and
attributes are recorded in the database system catalog.
A table space can be either system managed space (SMS), or database managed
space (DMS). For an SMS table space, each container is a directory in the file space
of the operating system, and the operating system’s file manager controls the
storage space. For a DMS table space, each container is either a fixed size
pre-allocated file, or a physical device such as a disk, and the database manager
controls the storage space.
Database Equivalent
object or concept physical object
System
Instance
Database
Containers
Table spaces
• Tables System-managed
• Indexes space (SMS)
• Long data
Database-managed
space (DMS)
Figure 3 on page 7 shows the three table space types: regular, temporary, and large.
Tables containing user data exist in regular table spaces. The default user table
space is called USERSPACE1. The system catalog tables exist in a regular table
space. The default system catalog table space is called SYSCATSPACE.
Tables containing long field data or large object data, such as multimedia objects,
exist in large table spaces or in regular table spaces. The base column data for
these columns is stored in a regular table space, while the long field or large object
data can be stored in the same regular table space or in a specified large table
space.
Temporary table spaces are classified as either system or user. System temporary table
spaces are used to store internal temporary data required during SQL operations
such as sorting, reorganizing tables, creating indexes, and joining tables. These
operations require extra space to process the result set. Although you can create
any number of system temporary table spaces, it is recommended that you create
only one, using the page size that the majority of your tables use. The default
system temporary table space is called TEMPSPACE1. Any user and application
may use system temporary table spaces. User temporary table spaces are used to
store declared global temporary tables that store application temporary data. The
tables used within user temporary table spaces are created using the DECLARE
GLOBAL TEMPORARY TABLE statement. User temporary table spaces are not
created by default at database creation time. Access to user temporary table spaces
Database
Tables:
Views:
A view is an efficient way of representing data without the need to maintain it. A
view is not an actual table and requires no permanent storage. A ″virtual table″ is
created and used.
A view can include all or some of the columns or rows contained in the tables on
which it is based. For example, you can join a department table and an employee
table in a view, so that you can list all employees in a particular department.
Column
Table A Table B
Row 47 ABS
17 QRS
85 FCP
81 MLI
93 CJP
87 DJS
19 KMP
View A View AB
CREATE VIEW_A CREATE VIEW_AB
AS SELECT. . . AS SELECT. . .
FROM TABLE_A FROM TABLE_A, TABLE_B
WHERE. . . WHERE. . .
Indexes:
As data is added to a table, unless other actions have been carried out on the table
or the data being added, it is simply appended to the bottom of the table. There is
no order to the data. When searching for a particular row of data, each row of the
table from first to last must be checked. Indexes are used as a means to access the
data within the table in an order that might otherwise not be available.
A field or column from within a row of data may be used as a value that can
identify the entire row. One or more columns may be needed to identify the row.
This identifying column or columns is known as a key. A column may be used in
more than one key.
keys may be unique or non-unique. Each table should have at least one unique
key; but may also have other, non-unique keys. Each index has exactly one key.
For example, you might use the employee ID number (unique) as the key for one
index and the department number (non-unique) as the key for a different index.
An index is a set of one or more keys, each key pointing to a row in a table. For
example, table A in Figure 5 on page 9 has an index based on the employee
numbers in the table. This key value provides a pointer to the rows in the table.
For example, employee number 19 points to employee KMP. An index allows
efficient access to rows in a table by creating a path to the data through pointers.
The SQL optimizer automatically chooses the most efficient way to access data in
tables. The optimizer takes indexes into consideration when determining the fastest
access path to data.
Database
Column
Index A Table A
17 Row 47 ABC
19 17 QRS
47 85 FCP
81 81 MLI
85 93 CJP
87 87 DJS
93 19 KMP
Figure 6 illustrates the relationships among some database objects. It also shows
that tables, indexes, and long data are stored in table spaces.
System
Instance
Database
Table spaces
• Tables
• Indexes
• Long data
Schemas:
A schema is an identifier, such as a user ID, that helps group tables and other
database objects. A schema can be owned by an individual, and the owner can
control access to the data and the objects within it.
A schema name is used as the first part of a two-part object name. When an object
is created, you can assign it to a specific schema. If you do not specify a schema, it
is assigned to the default schema, which is usually the user ID of the person who
created the object. The second part of the name is the name of the object. For
example, a user named Smith might have a table named SMITH.PAYROLL.
Each database includes a set of system catalog tables, which describe the logical and
physical structure of the data. DB2 creates and maintains an extensive set of
system catalog tables for each database. These tables contain information about the
definitions of database objects such as user tables, views, and indexes, as well as
security information about the authority that users have on these objects. They are
created when the database is created, and are updated during the course of normal
operation. You cannot explicitly create or drop them, but you can query and view
their contents using the catalog views.
Containers:
A container is assigned to a table space. A single table space can span many
containers, but each container can belong to only one table space.
Figure 7 on page 11 illustrates the relationship between tables and a table space
within a database, and the associated containers and disks.
HUMANRES
table space
EMPLOYEE
table
DEPARTMENT
table
PROJECT
table
G:\DBASE1 H:\DBASE1
Container 3 Container 4
Data for any table will be stored on all containers in a table space in a round-robin
fashion. This balances the data across the containers that belong to a given table
space. The number of pages that the database manager writes to one container
before using a different one is called the extent size.
Buffer pools:
A buffer pool is the amount of main memory allocated to cache table and index data
pages as they are being read from disk, or being modified. The purpose of the
buffer pool is to improve system performance. Data can be accessed much faster
from memory than from disk; therefore, the fewer times the database manager
needs to read from or write to a disk (I/O), the better the performance. (You can
create more than one buffer pool, although for most situations only one is
required.)
The configuration of the buffer pool is the single most important tuning area,
because you can reduce the delay caused by slow I/O.
System Reserved
Containers
Instance
File
Database
Directory
Table
spaces
Device
Related concepts:
v “Indexes” in SQL Reference, Volume 1
v “Relational databases” in SQL Reference, Volume 1
v “Schemas” in SQL Reference, Volume 1
v “Table spaces and other storage structures” in SQL Reference, Volume 1
v “Tables” in SQL Reference, Volume 1
v “Views” in SQL Reference, Volume 1
Configuration parameters
When a DB2 database instance or a database is created, a corresponding
configuration file is created with default parameter values. You can modify these
parameter values to improve performance and other characteristics of the instance
or database.
Configuration files contain parameters that define values such as the resources
allocated to the DB2 database products and to individual databases, and the
diagnostic level. There are two types of configuration files:
v The database manager configuration file for each DB2 instance
v The database configuration file for each individual database.
The database manager configuration file is created when a DB2 instance is created.
The parameters it contains affect system resources at the instance level,
independent of any one database that is part of that instance. Values for many of
these parameters can be changed from the system default values to improve
performance or increase capacity, depending on your system’s configuration.
There is one database manager configuration file for each client installation as well.
This file contains information about the client enabler for a specific workstation. A
subset of the parameters available for a server are applicable to the client.
Most of the parameters either affect the amount of system resources that will be
allocated to a single instance of the database manager, or they configure the setup
of the database manager and the different communications subsystems based on
environmental considerations. In addition, there are other parameters that serve
informative purposes only and cannot be changed. All of these parameters have
global applicability independent of any single database stored under that instance
of the database manager.
A database configuration file is created when a database is created, and resides where
that database resides. There is one configuration file per database. Its parameters
specify, among other things, the amount of resource to be allocated to that
database. Values for many of the parameters can be changed to improve
performance or increase capacity. Different changes may be required, depending on
the type of activity in a specific database.
Instance
Database manager
configuration parameters
Database
Database
configuration parameters
Related concepts:
v “Configuration parameters that affect query optimization” in Performance Guide
Related tasks:
v “Configuring DB2 with configuration parameters” in Performance Guide
Prior to the introduction of the DB2 database profile registry, changing your
environment variables on Windows workstations (for example) required you to
change an environment variable and restart. Now, your environment is controlled,
with a few exceptions, by registry variables stored in the DB2 profile registries.
Users on UNIX operating systems with system administration (SYSADM) authority
for a given instance can update registry values for that instance. Windows users do
not need SYSADM authority to update registry variables. Use the db2set command
to update registry variables without restarting; this information is stored
immediately in the profile registries. The DB2 registry applies the updated
information to DB2 server instances and DB2 applications started after the changes
are made.
When updating the registry, changes do not affect the currently running DB2
applications or users. Applications started following the update use the new
values.
Note: There are DB2 environment variables DB2INSTANCE, and DB2NODE which might
not be stored in the DB2 profile registries. On some operating systems the
set command must be used in order to update these environment variables.
These changes are in effect until the next time the system is restarted. On
UNIX platforms, the export command might be used instead of the set
command.
DB2 configures the operating environment by checking for registry values and
environment variables and resolving them in the following order:
1. Environment variables set with the set command. (Or the export command on
UNIX platforms.)
2. Registry values set with the instance node level profile (using the db2set -i
<instance name> <nodenum> command).
3. Registry values set with the instance level profile (using the db2set -i
command).
4. Registry values set with the global level profile (using the db2set -g command).
There are a couple of UNIX and Windows differences when working with a
partitioned database environment. These differences are shown in the following
example.
or
db2set FOO=BAR (’-i’ is implied)
the value of FOO will be visible to all nodes of the current instance (that is, “red”,
“white”, and “blue”).
On UNIX platforms, the instance level profile registry is stored in a text file inside
the sqllib directory. In partitioned database environments, the sqllib directory is
located on the filesystem shared by all physical database partitions.
rah will remotely run the db2set command on “red”, “white”, and “blue”.
Using the example shown above, and assuming that “red” is the owning computer,
then one would set DB2REMOTEPREG on “white” and “blue” computers to share
the registry variables on “red” by doing the following:
(on red) do nothing
(on white and blue) db2set DB2REMOTEPREG=\\red
When the DB2 database manager reads the registry variables on Windows, it first
reads the DB2REMOTEPREG value. If DB2REMOTEPREG is set, it then opens the
registry on the remote computer whose computer name is specified in the
DB2REMOTEPREG variable. Subsequent reading and updating of the registry
variables will be redirected to the specified remote computer.
Accessing the remote registry requires that the Remote Registry Service is running
on the target computer. Also, the user logon account and all DB2 service logon
accounts have sufficient access to the remote registry. Therefore, to use
DB2REMOTEPREG, you should operate in a Windows domain environment so
that the required registry access can be granted to the domain account.
There are Microsoft® Cluster Server (MSCS) considerations. You should not use
DB2REMOTEPREG in an MSCS environment. When running in an MSCS
configuration where all computers belong to the same MSCS cluster, the registry
variables are maintained in the cluster registry. Therefore, they are already shared
between all computers in the same MSCS cluster and there is no need to use
DB2REMOTEPREG in this case.
Related concepts:
v “DB2 registry and environment variables” in Performance Guide
Related tasks:
v “Declaring, showing, changing, resetting, and deleting registry and environment
variables” in Administration Guide: Implementation
Department
number
001
004
005
The database manager enforces the constraint during insert and update
operations, ensuring data integrity.
primary key constraint
Each table can have one primary key. A primary key is a column or
combination of columns that has the same properties as a unique
constraint. You can use a primary key and foreign key constraints to define
relationships between tables.
Because the primary key is used to identify a row in a table, it should be
unique and have very few additions or deletions. A table cannot have more
than one primary key, but it can have multiple unique keys. Primary keys
Foreign
key
Department Employee
number name
001 John Doe
Invalid
record
Department table
Primary
key
Department Department
number name
001 Sales
002 Training
003 Communications
... ...
Program
015 development
check constraint
A check constraint is a database rule that specifies the values allowed in
one or more columns of every row of a table.
For example, in an EMPLOYEE table, you can define the Type of Job
column to be ″Sales″, ″Manager″, or ″Clerk″. With this constraint, any
record with a different value in the Type of Job column is not valid, and
would be rejected, enforcing rules about the type of data allowed in the
table.
informational constraint
An informational constraint is a rule that can be used by the SQL compiler
but is not enforced by the database manager. The purpose of the constraint
is not to have additional verification of data by the database manager,
rather it is to improve query performance.
Informational constraints are defined using the CREATE TABLE or ALTER
TABLE statements. You add referential integrity or check constraints but
then associate constraint attributes to them specifying whether the database
manager is to enforce the constraint or not; and, whether the constraint is
to be used for query optimization or not.
Related concepts:
v “Constraints” on page 65
v “Triggers” on page 70
Data security
Two security levels control access to DB2 Database for Linux, UNIX, and Windows
data and functions. Access to DB2 is managed by facilities specific to the operating
environment (authentication), whereas access within DB2 is managed by the
database manager (authorization).
Related concepts:
v “About databases” on page 3
Authentication
Authentication of a user is completed using a security facility outside of DB2
Database for Linux, UNIX, and Windows. The security facility can be part of the
operating system, a separate product or, in certain cases, may not exist at all. On
UNIX based systems, the security facility is in the operating system itself.
The security facility requires two items to authenticate a user: a user ID and a
password. The user ID identifies the user to the security facility. By supplying the
correct password, information known only to the user and the security facility, the
user’s identity (corresponding to the user ID) is verified.
Once authenticated:
v The user must be identified to DB2 using an SQL authorization name or authid.
This name can be the same as the user ID, or a mapped value. For example, on
DB2 V9.1 uses the security facility to authenticate users in one of two ways:
v DB2 uses a successful security system login as evidence of identity, and allows:
– Use of local commands to access local data
– Use of remote connections when the server trusts the client authentication.
v DB2 accepts a user ID and password combination. It uses successful validation
of this pair by the security facility as evidence of identity and allows:
– Use of remote connections where the server requires proof of authentication
– Use of operations where the user wants to run a command under an identity
other than the identity used for login.
DB2 on AIX® can log failed password attempts with the operating system, and
detect when a client has exceeded the number of allowable login tries, as specified
by the LOGINRETRIES parameter.
Related concepts:
v “Authentication methods for your server” in Administration Guide: Implementation
v “Authorization” on page 21
v “Authorization, privileges, and object ownership” in Administration Guide:
Implementation
Authorization
Authorization is the process whereby DB2 obtains information about an
authenticated DB2 user, indicating the database operations that user may perform,
and what data objects may be accessed. With each user request, there may be more
than one authorization check, depending on the objects and operations involved.
Authorization is performed using DB2 facilities. DB2 tables and configuration files
are used to record the permissions associated with each authorization name. When
an authenticated user tries to access data, the authorization name of the user, and
those of groups to which the user belongs, are compared with the recorded
permissions. Based on this comparison, DB2 decides whether to allow the
requested access.
There are three types of permissions recorded by DB2 Database for Linux, UNIX,
and Windows: privileges, authority levels, and LBAC credentials.
LBAC credentials are LBAC security labels and LBAC rule exemptions that allow
access to data protected by label-based access control (LBAC). LBAC credentials
are stored in the database catalogs.
Related concepts:
v “Authorization and privileges” in SQL Reference, Volume 1
v “Authorization, privileges, and object ownership” in Administration Guide:
Implementation
v “Label-based access control (LBAC) overview” in Administration Guide:
Implementation
Units of work
A transaction is commonly referred to in DB2 Database for Linux, UNIX, and
Windows as a unit of work. A unit of work is a recoverable sequence of operations
within an application process. It is used by the database manager to ensure that a
database is in a consistent state. Any reading from or writing to the database is
done within a unit of work.
For example, a bank transaction might involve the transfer of funds from a savings
account to a checking account. After the application subtracts an amount from the
savings account, the two accounts are inconsistent, and remain so until the amount
is added to the checking account. When both steps are completed, a point of
consistency is reached. The changes can be committed and made available to other
applications.
A unit of work is started implicitly when the first SQL statement is issued against
the database. All subsequent reads and writes by the same application are
considered part of the same unit of work. The application must end the unit of
work by issuing either a COMMIT or a ROLLBACK statement. The COMMIT
statement makes permanent all changes made within a unit of work. The
ROLLBACK statement removes these changes from the database. If the application
ends normally without either of these statements being explicitly issued, the unit
of work is automatically committed. If it ends abnormally in the middle of a unit
of work, the unit of work is automatically rolled back. Once issued, a COMMIT or
a ROLLBACK cannot be stopped. With some multi-threaded applications, or some
operating systems (such as Windows), if the application ends normally without
either of these statements being explicitly issued, the unit of work is automatically
rolled back. It is recommended that your applications always explicitly commit or
roll back complete units of work. If part of a unit of work does not complete
22 Administration Guide: Planning
successfully, the updates are rolled back, leaving the participating tables as they
were before the transaction began. This ensures that requests are neither lost nor
duplicated.
Related reference:
v “COMMIT statement” in SQL Reference, Volume 2
v “ROLLBACK statement” in SQL Reference, Volume 2
A complete site failure can occur when a disaster, such as a fire, causes the entire
site to be destroyed. Since HADR uses TCP/IP for communication between the
primary and standby databases, the two databases can be situated in different
locations. For example, your primary database might be located at your head office
in one city, while your standby database is located at your sales office in another
city. If a disaster occurs at the primary site, data availability is maintained by
having the remote standby database take over as the primary database with full
DB2 functionality. After a takeover operation occurs, you can bring the original
primary database back up and return it to its status of primary database; this is
known as failback.
With HADR, you can choose the level of protection you want from potential loss
of data by specifying one of three synchronization modes: synchronous (SYNC),
near synchronous (NEARSYNC), and asynchronous (ASYNC). These modes
indicate how data changes are propagated between the two systems. The
synchronization mode selected will determine how close to being a replica the
standby database will be when compared to the primary database. For example,
using synchronous mode, HADR can guarantee that any transaction committed on
the primary is also committed on the standby.
Synchronization allows you to have failover and failback between the two systems.
Data changes are recorded in database log records which are shipped from the
primary system to the standby system. HADR is tightly-coupled with DB2 logging
and recovery.
HADR requires that both systems have the same hardware, operating system, and
DB2 software. (There may be some minor differences during times when the
systems are being upgraded.)
When a failure occurs on the primary database, you can then easily fail over to the
standby database. Once you have failed over to the standby database, it becomes
the new primary database. Because the standby database server is already online,
failover can be completed very quickly. This keeps your time without database
activity to a minimum.
HADR can also be used to maintain database availability across certain hardware
or software release upgrades. You can upgrade your hardware, operating system,
or DB2 FixPak level on the standby while the primary is available to applications.
You can then transfer the applications to the upgraded system while the original
primary is upgraded.
The performance of the new primary database immediately after failover may not
be exactly the same as on the old primary database before the failure. The new
primary database needs some time to populate the statement cache, the buffer
pool, and other memory locations used by the database manager. Although the
replaying of the log data from the old primary partly places data in the buffer pool
and system catalog caches, it is not complete because it is only based on write
activity. Frequently accessed index pages, catalog information for tables that is
queried but not updated, statement caches, and access plans will all be missing
from the caches. However, the whole process is faster than if you were starting up
a new DB2 database.
The HADR feature is available only on DB2 Enterprise Server Edition (ESE). It is
disabled in other editions such as Personal Edition, and ESE with the database
partitioning feature (DPF).
HADR takes place at the database level, not at the instance level. This means that a
single instance could include the primary database (A), the standby database (B),
and a standard (non-HADR) database (C). However, an instance cannot contain
both the primary and standby for a single database because HADR requires that
each copy of the database has the same database name.
Related concepts:
v “High availability” in Data Recovery and High Availability Guide and Reference
A database recovery strategy should ensure that all information is available when
it is required for database recovery. It should include a regular schedule for taking
database backups and, in the case of partitioned database environments, include
backups when the system is scaled (when database partition servers or nodes are
added or dropped). Your overall strategy should also include procedures for
recovering command scripts, applications, user-defined functions (UDFs), stored
procedure code in operating system libraries, and load copies.
Different recovery methods are discussed in the sections that follow, and you will
discover which recovery method is best suited to your business environment.
The concept of a database backup is the same as any other data backup: taking a
copy of the data and then storing it on a different medium in case of failure or
damage to the original. The simplest case of a backup involves shutting down the
database to ensure that no further transactions occur, and then simply backing it
up. You can then recreate the database if it becomes damaged or corrupted in some
way.
The recreation of the database is called recovery. Version recovery is the restoration of
a previous version of the database, using an image that was created during a
backup operation. Rollforward recovery is the reapplication of transactions recorded
in the database log files after a database or a table space backup image has been
restored.
Crash recovery is the automatic recovery of the database if a failure occurs before all
of the changes that are part of one or more units of work (transactions) are
completed and committed. This is done by rolling back incomplete transactions
and completing committed transactions that were still in memory when the crash
occurred.
Recovery log files and the recovery history file are created automatically when a
database is created (Figure 12 on page 26). These log files are important if you
need to recover data that is lost or damaged.
The recovery history file contains a summary of the backup information that can be
used to determine recovery options, if all or part of the database must be
recovered to a given point in time. It is used to track recovery-related events such
as backup and restore operations, among others. This file is located in the database
directory.
The table space change history file, which is also located in the database directory,
contains information that can be used to determine which log files are required for
the recovery of a particular table space.
You cannot directly modify the recovery history file or the table space change
history file; however, you can delete entries from the files using the PRUNE
HISTORY command. You can also use the rec_his_retentn database configuration
parameter to specify the number of days that these history files will be retained.
Database Equivalent
object or concept physical object
System Recovery
log files
Instance
Recovery
history file
Database
Table space
change history file
If you have a recoverable database, you can back up, restore, and roll individual
table spaces forward, rather than the entire database. When you back up a table
space online, it is still available for use, and simultaneous updates are recorded in
the logs. When you perform an online restore or rollforward operation on a table
space, the table space itself is not available for use until the operation completes,
but users are not prevented from accessing tables in other table spaces.
Note: You can still perform manual backup operations when automatic
maintenance is configured. DB2 will only perform automatic backup
operations if they are required.
Related concepts:
v “Crash recovery” in Data Recovery and High Availability Guide and Reference
v “High availability disaster recovery overview” in Data Recovery and High
Availability Guide and Reference
v “Rollforward recovery” in Data Recovery and High Availability Guide and Reference
v “Version recovery” in Data Recovery and High Availability Guide and Reference
Related reference:
v “logarchmeth1 - Primary log archive method configuration parameter” in
Performance Guide
v “rec_his_retentn - Recovery history retention period configuration parameter” in
Performance Guide
Related concepts:
v “Introduction to the health monitor” in System Monitor Guide and Reference
v “Automatic storage databases” in Administration Guide: Implementation
v “Quick-start tips for performance tuning” in Performance Guide
v “Self tuning memory” in Performance Guide
v “Automatic statistics collection” in Performance Guide
Related reference:
v “db2AutoConfig API - Access the Configuration Advisor” in Administrative API
Reference
v “SET UTIL_IMPACT_PRIORITY command” in Command Reference
v “util_impact_lim - Instance impact policy configuration parameter” in
Performance Guide
v “auto_maint - Automatic maintenance configuration parameter” in Performance
Guide
If backup to disk is selected, the automatic backup feature will regularly delete
backup images from the directory specified in the Configure Automatic
Maintenance wizard. Only the most recent backup image is guaranteed to be
available at any given time. It is recommended that this directory be kept
exclusively for the automatic backup feature and not be used to store other backup
images.
The automatic database backup feature can be enabled or disabled by using the
auto_db_backup and auto_maint database configuration parameters. In a
partitioned database environment, the automatic database backup runs on each
database partition if the database configuration parameters are enabled on that
database partition.
Related concepts:
v “Developing a backup and recovery strategy” on page 25
v “Automatic statistics collection” in Performance Guide
v “Catalog statistics” in Performance Guide
v “Table and index management for MDC tables” in Performance Guide
v “Table and index management for standard tables” in Performance Guide
v “Table reorganization” in Performance Guide
v “Health monitor” in System Monitor Guide and Reference
Related reference:
v “auto_maint - Automatic maintenance configuration parameter” in Performance
Guide
Automatic reorganization
After many changes to table data, logically sequential data may be on
non-sequential physical pages so the database manager has to perform additional
read operations to access data.
If you are unsure about when and how to reorganize your tables and indexes, you
can incorporate automatic reorganization as part of your overall database
maintenance plan.
Tables considered for automatic reorganization are configurable by you using the
Automatic Maintenance wizard from the Control Center or Health Center.
Related concepts:
v “Table reorganization” in Performance Guide
Related tasks:
v “Choosing a table reorganization method” in Performance Guide
v “Determining when to reorganize tables” in Performance Guide
v “Enabling automatic table and index reorganization” in Performance Guide
Normal database maintenance activities such as when you might use the
RUNSTATS utility, the REORG utility, or altering or dropping a table, are not
affected by the enablement of this feature.
The automatic statistics collection feature can be enabled or disabled by using the
auto_runstats, auto_tbl_maint, and auto_maint database configuration parameters.
Or, you can use the Configure Automatic Maintenance wizard from the Control
Center or Health Center to enable automatic statistics collection.
Related concepts:
v “Catalog statistics” in Performance Guide
Related tasks:
v “Collecting catalog statistics” in Performance Guide
If suitable to your needs, you may incorporate the automatic statistics profiling
feature as part of your overall database maintenance plan.
The automatic statistics profiling feature can be enabled or disabled by using the
auto_stats_prof, auto_tbl_maint and auto_maint database configuration
Related concepts:
v “Catalog statistics” in Performance Guide
Related tasks:
v “Collecting catalog statistics” in Performance Guide
Maintenance windows
A maintenance window is a user-defined time period for the running of automatic
maintenance activities. This is different than a task schedule. When a maintenance
window occurs, each automatic maintenance activity is not necessarily run.
Instead, the DB2 database manager evaluates the system based on the need for
each maintenance activity to be run. If the maintenance requirements are not met,
then the maintenance activity is run. If the database is already well maintained, the
maintenance activity is not run.
You may need to think about when you would like the automatic maintenance
activities to be run. The automatic maintenance activities (backup, statistics
collection, statistics profiling, and reorganization) consume resources on your
system and may affect the performance of your database when they are run.
Automatic reorganization and offline database backup also restrict access to the
tables and database when these utilities are run. It is therefore necessary to provide
appropriate periods of time when these maintenance activities can be internally
scheduled to be run by the DB2 database manager. These can be specified as
offline and online maintenance time periods using the automatic maintenance
wizard from the Control Center or Health Center.
Offline database backups and table and index reorganization are run in the offline
maintenance time period. These features run to completion even if they go beyond
the time period specified. The internal scheduling mechanism learns over time and
estimates job completion times. If the offline time period is too small for a
particular database backup or reorganization activity, the scheduler will not start
the job the next time around and relies on the health monitor to provide
notification of the need to increase the offline maintenance time period.
Related concepts:
v “About automatic maintenance” on page 29
v “Offline maintenance” on page 36
v “Online maintenance” on page 36
Offline maintenance
Offline maintenance activities are maintenance activities that can occur only when
there is some interruption of user access to the database. The extent to which user
access is affected depends on which maintenance activity is running.
v During an offline backup, no applications can connect to the database. Any
currently connected applications will be forced off.
v During an offline data defragmentation (table or index reorganization),
applications can access the data in tables in the database but cannot make
updates.
Note: Data access optimization maintenance activities (running statistics) can only
be performed online.
Related concepts:
v “About automatic maintenance” on page 29
v “Maintenance windows” on page 35
v “Online maintenance” on page 36
Online maintenance
Online maintenance activities are maintenance activities that can occur while users
are connected to the database. When online maintenance activities run, any
currently connected applications are allowed to remain connected, and new
connections can be established.
Related concepts:
v “About automatic maintenance” on page 29
v “Maintenance windows” on page 35
v “Offline maintenance” on page 36
Parallelism
Components of a task, such as a database query, can be run in parallel to
dramatically enhance performance. The nature of the task, the database
configuration, and the hardware environment, all determine how the DB2 database
product will perform a task in parallel. These considerations are interrelated, and
should be considered together when you work on the physical and logical design
of a database. The following types of parallelism are supported by the DB2
database system:
v I/O
v Query
v Utility
Input/output parallelism
When there are multiple containers for a table space, the database manager can
exploit parallel I/O. Parallel I/O refers to the process of writing to, or reading from,
two or more I/O devices simultaneously; it can result in significant improvements
in throughput.
Query parallelism
There are two types of query parallelism: interquery parallelism and intraquery
parallelism.
Interquery parallelism refers to the ability of the database to accept queries from
multiple applications at the same time. Each query runs independently of the
others, but DB2 runs all of them at the same time. DB2 database products have
always supported this type of parallelism.
Intrapartition parallelism
Intrapartition parallelism refers to the ability to break up a query into multiple parts.
Some DB2 utilities also perform this type of parallelism.
Figure 13 on page 38 shows a query that is broken into four pieces that can be run
in parallel, with the results returned more quickly than if the query were run in
serial fashion. The pieces are copies of each other. To utilize intrapartition
parallelism, you must configure the database appropriately. You can choose the
SELECT... FROM...
Query
Database partition
Data
Interpartition parallelism
Interpartition parallelism refers to the ability to break up a query into multiple parts
across multiple partitions of a partitioned database, on one machine or multiple
machines. The query is run in parallel. Some DB2 utilities also perform this type of
parallelism.
Figure 14 on page 39 shows a query that is broken into four pieces that can be run
in parallel, with the results returned more quickly than if the query were run in
serial fashion on a single database partition.
Query
Query
Database Database
partition partition
Data Data
Utility parallelism
DB2 utilities can take advantage of intrapartition parallelism. They can also take
advantage of interpartition parallelism; where multiple database partitions exist,
the utilities execute in each of the database partitions in parallel.
The load utility can take advantage of intrapartition parallelism and I/O
parallelism. Loading data is a CPU-intensive task. The load utility takes advantage
of multiple processors for tasks such as parsing and formatting data. It can also
use parallel I/O servers to write the data to containers in parallel.
During index creation, the scanning and subsequent sorting of the data occurs in
parallel. The DB2 system exploits both I/O parallelism and intrapartition
parallelism when creating an index. This helps to speed up index creation when a
CREATE INDEX statement is issued, during restart (if an index is marked invalid),
and during the reorganization of data.
Backing up and restoring data are heavily I/O-bound tasks. The DB2 system
exploits both I/O parallelism and intrapartition parallelism when performing
Related concepts:
v “Database partition and processor environments” on page 42
A single-partition database is a database having only one database partition. All data
in the database is stored in that single database partition. In this case database
partition groups, while present, provide no additional capability.
Usually, a single database partition exists on each physical machine, and the
processors on each system are used by the database manager at each database
partition to manage its part of the total data in the database.
Because data is distributed across database partitions, you can use the power of
multiple processors on multiple physical machines to satisfy requests for
information. Data retrieval and update requests are decomposed automatically into
sub-requests, and executed in parallel among the applicable database partitions.
The fact that databases are split across database partitions is transparent to users
issuing SQL statements.
User interaction occurs through one database partition, known as the coordinator
partition for that user. The coordinator partition runs on the same database
partition as the application, or in the case of a remote application, the database
partition to which that application is connected. Any database partition can be
used as a coordinator partition.
DB2 allows you to store data across several database partitions in the database.
This means that the data is physically stored across more than one database
partition, and yet can be accessed as though it were located in the same place.
Applications and users accessing data in a multi-partition database do not need to
be aware of the physical location of the data.
The data, while physically split, is used and managed as a logical whole. Users can
choose how to distribute their data by declaring distribution keys. Users can also
determine across which and over how many database partitions their data is
distributed by selecting the table space and the associated database partition group
in which the data should be stored. Suggestions for distribution and replication can
be done using the DB2 Design Advisor. In addition, an updatable distribution map
You are not restricted to having all tables divided across all database partitions in
the database. DB2 supports partial declustering, which means that you can divide
tables and their table spaces across a subset of database partitions in the system.
Capacity and scalability are discussed for each environment. Capacity refers to the
number of users and applications able to access the database. This is in large part
determined by memory, agents, locks, I/O, and storage management. Scalability
refers to the ability of a database to grow and continue to exhibit the same
operating characteristics and response times.
The database in this environment serves the needs of a department or small office,
where the data and system resources (including a single processor or CPU) are
managed by a single database manager.
Database partition
CPU
Memory
Disks
Database partition
CPU CPU
CPU CPU
Memory
Disks
You can increase the I/O capacity of the database partition associated with your
processor by increasing the number of disks. You can establish I/O servers to
specifically deal with I/O requests. Having one or more I/O servers for each disk
allows for more than one I/O operation to take place at the same time.
If you have reached maximum capacity or scalability, you can consider moving to
a system with multiple database partitions.
Communications
facility
...
CPU CPU CPU
Capacity and scalability: In this environment you can add more database
partitions (nodes) to your configuration. On some platforms, for example the
RS/6000® SP™, the maximum number is 512 nodes. However, there may be
practical limits on managing a high number of machines and instances.
If you have reached maximum capacity or scalability, you can consider moving to
a system where each database partition has multiple processors.
This configuration combines the advantages of SMP and MPP parallelism. This
means that a query can be performed in a single database partition across multiple
processors. It also means that a query can be performed in parallel across multiple
database partitions.
Memory Memory
Disks Disks
Capacity and scalability: In this environment you can add more database
partitions, and you can add more processors to existing database partitions.
Communications
facility
Database Database
partition 1 partition 2
CPU CPU
CPU CPU
Memory Memory
Disks Disks
Figure 21 on page 48 illustrates that you can multiply the configuration shown in
Figure 20 to increase processing power.
Communications Communications
facility facility
Note: The ability to have two or more database partitions coexist on the same
machine (regardless of the number of processors) allows greater flexibility in
designing high availability configurations and failover strategies. Upon
machine failure, a database partition can be automatically moved and
restarted on a second machine that already contains another database
partition of the same database.
Related concepts:
v “Parallelism” on page 37
In the sample employee table, the entity ″employee″ has attributes, or properties,
such as employee number, name, work department, and job description. Those
properties appear as the columns EMPNO, FIRSTNME, LASTNAME, WORKDEPT,
and JOB.
An occurrence of the entity ″employee″ consists of the values in all of the columns
for one employee. Each employee has a unique employee number (EMPNO) that
can be used to identify an occurrence of the entity ″employee″. Each row in a table
represents an occurrence of an entity or relationship. For example, in the following
table the values in the first row describe an employee named Haas.
Table 4. Occurrences of Employee Entities and their Attributes
EMPNO FIRSTNME LASTNAME WORKDEPT JOB
000010 Christine Haas A00 President
000020 Michael Thompson B01 Manager
000120 Sean O’Connell A00 Clerk
000130 Dolores Quintana C01 Analyst
000030 Sally Kwan C01 Manager
000140 Heather Nicholls C01 Analyst
000170 Masatoshi Yoshimura D11 Designer
Within a table, each column of a row is related in some way to all the other
columns of that row. Some of the relationships expressed in the sample tables are:
v Employees are assigned to departments
In addition to identifying the entity relationships within your enterprise, you also
need to identify other types of information, such as the business rules that apply to
that data.
Related concepts:
v “Column definitions” on page 56
v “Database relationships” on page 54
Database relationships
Several types of relationships can be defined in a database. Consider the possible
relationships between employees and departments.
In the following example, the ″many″ side of the first and second relationships is
″employees″ so an employee table, EMPLOYEE, is defined.
Table 5. Many-to-One Relationships
Entity Relationship Entity
Employees are assigned to departments
Employees work at jobs
Departments report to (administrative) departments
DEPTNO ADMRDEPT
C01 A00
D01 A00
D11 D01
Many-to-many relationships
A relationship that is multi-valued in both directions is a many-to-many
relationship. An employee can work on more than one project, and a project can
have more than one employee. The questions ″What does Dolores Quintana work
on?″, and ″Who works on project IF1000?″ both yield multiple answers. A
many-to-many relationship can be expressed in a table with a column for each
entity (″employees″ and ″projects″), as shown in the following example.
The following table shows how a many-to-many relationship (an employee can
work on many projects, and a project can have many employees working on it) is
represented.
EMPNO PROJNO
000030 IF1000
000030 IF2000
000130 IF1000
000140 IF2000
000250 AD3112
One-to-one relationships
One-to-one relationships are single-valued in both directions. A manager manages
one department; a department has only one manager. The questions, ″Who is the
manager of Department C01?″, and ″What department does Sally Kwan manage?″
both have single answers. The relationship can be assigned to either the
DEPARTMENT table or the EMPLOYEE table. Because all departments have
DEPTNO MGRNO
A00 000010
B01 000020
D11 000060
When you retrieve information about an entity from more than one table, ensure
that equal values represent the same entity. The connecting columns can have
different names (like WORKDEPT and DEPTNO in the previous example), or they
can have the same name (like the columns called DEPTNO in the department and
project tables).
Related concepts:
v “Column definitions” on page 56
v “What to record in a database” on page 53
Column definitions
Within a relational table, each row of data in the table is a collection of related data
values. There are characteristics to each piece of data in each row. Columns are
used to identify and classify each piece of data.
Each column in a table must have a name that is unique for that table.
Examples of data type categories are: numeric, character string, double-byte (or
graphic) character string, date-time, and binary string.
Large object (LOB) data types support multi-media objects such as documents,
video, image and voice. These objects are implemented using the following data
types:
v A binary large object (BLOB) string. Examples of BLOBs are photographs of
employees, voice, and video.
v A character large object (CLOB) string, where the sequence of characters can be
either single- or multi-byte characters, or a combination of both. An example of
a CLOB is an employee’s resume.
v A double-byte character large object (DBCLOB) string, where the sequence of
characters is double-byte characters. An example of a DBCLOB is a Japanese
resume.
A user-defined type (UDT), is a data type that is derived from an existing type. You
may need to define types that are derived from and share characteristics with
existing data types, but that are nevertheless considered to be separate from them
and incompatible with them.
A structured type may be used as the type of a table or a view. The names and
data types of the attributes of the structured types, together with the object
identifier, become the names and data types of the columns of this typed table or
typed view. Rows of the typed table or typed view can be thought of as a
representation of instances of the structured type.
A structured type cannot be used as the data type of a column of a table or a view.
There is also no support for retrieving a whole structured type instance into a host
variable in an application program.
For example, two numeric data types are European Shoe Size and American Shoe
Size. Both types represent shoe size, but they are incompatible, because the
measurement base is different and cannot be compared. A user-defined function
can be invoked to convert one shoe size to another.
In both situations, you can choose between allowing a NULL value (a special value
indicating that the column value is unknown or not applicable), or allowing a
non-NULL default value to be assigned by the database manager or by the
application.
Primary keys
A key is a set of columns that can be used to identify or access a particular row or
rows. The key is identified in the description of a table, index, or referential
constraint. The same column can be part of more than one key.
A unique key is a key that is constrained so that no two of its values are equal. The
columns of a unique key cannot contain NULL values. For example, an employee
number column can be defined as a unique key, because each value in the column
identifies only one employee. No two employees can have the same employee
number.
The mechanism used to enforce the uniqueness of the key is called a unique index.
The unique index of a table is a column, or an ordered collection of columns, for
which each value identifies (functionally determines) a unique row. A unique index
can contain NULL values.
The primary key is one of the unique keys defined on a table, but is selected to be
the key of first importance. There can be only one primary key on a table.
A primary index is automatically created for the primary key. The primary index is
used by the database manager for efficient access to table rows, and it allows the
database manager to enforce the uniqueness of the primary key. (You can also
define indexes on non-primary key columns to efficiently access data when
processing queries.)
The following example shows part of the PROJECT table, including its primary
key column.
Table 6. A Primary Key on the PROJECT Table
PROJNO (Primary Key) PROJNAME DEPTNO
MA2100 Weld Line Automation D01
MA2110 Weld Line Programming D11
If every column in a table contains duplicate values, you cannot define a primary
key with only one column. A key with more than one column is a composite key.
The combination of column values should define a unique entity. If a composite
key cannot be defined easily, you may consider creating a new column that has
unique values.
The following example shows a primary key containing more than one column (a
composite key):
Table 7. A Composite Primary Key on the EMP_ACT Table
EMPNO PROJNO ACTNO EMSTDATE
(Primary Key) (Primary Key) (Primary Key) EMPTIME (Primary Key)
000250 AD3112 60 1.0 1982-01-01
000250 AD3112 60 .5 1982-02-01
000250 AD3112 70 .5 1982-02-01
The criteria for selecting a primary key from a pool of candidate keys should be
persistence, uniqueness, and stability:
v Persistence means that a primary key value for each row always exists.
v Uniqueness means that the key value for each row is different from all the
others.
v Stability means that primary key values never change.
Of the three candidate keys in the example, only EMPNO satisfies all of these
criteria. An employee may not have a phone number when joining a company.
Last names can change, and, although they may be unique at one point, are not
guaranteed to be so. The employee number column is the best choice for the
primary key. An employee is assigned a unique number only once, and that
number is generally not updated as long as the employee remains with the
company. Since each employee must have a number, values in the employee
number column are persistent.
Related concepts:
v “Identity columns” on page 60
Identity columns
An identity column provides a way for DB2 Database for Linux, UNIX, and
Windows to automatically generate a unique numeric value for each row in a
table. A table can have a single column that is defined with the identity attribute.
Examples of an identity column include order number, employee number, stock
number, and incident number.
Identity columns are ideally suited to the task of generating unique primary key
values. Applications can use identity columns to avoid the concurrency and
performance problems that can result when an application generates its own
unique counter outside of the database. For example, one common
application-level implementation is to maintain a 1-row table containing a counter.
Each transaction locks this table, increments the number, and then commits; that is,
The sequential numbers that are generated by the identity column have the
following additional properties:
v The values can be of any exact numeric data type with a scale of zero; that is,
SMALLINT, INTEGER, BIGINT, or DECIMAL with a scale of zero. (Single- and
double-precision floating-point are considered to be approximate numeric data
types.)
v Consecutive values can differ by any specified integer increment. The default
increment is 1.
v The counter value for the identity column is recoverable. If a failure occurs, the
counter value is reconstructed from the logs, thereby guaranteeing that unique
values continue to be generated.
v Identity column values can be cached to give better performance.
Related concepts:
v “Primary keys” on page 58
Normalization
Normalization helps eliminate redundancies and inconsistencies in table data. It is
the process of reducing tables to a set of columns where all the non-key columns
depend on the primary key column. If this is not the case, the data can become
inconsistent during updates.
This section briefly reviews the rules for first, second, third, and fourth normal
form. The fifth normal form of a table, which is covered in many books on
database design, is not described here.
Form Description
First At each row and column position in the table, there exists one value, never
a set of values.
Second Each column that is not part of the key is dependent upon the key.
Third Each non-key column is independent of other non-key columns, and is
dependent only upon the key.
For example, the following table violates first normal form because the
WAREHOUSE column contains several values for each occurrence of PART.
Table 9. Table Violating First Normal Form
PART (Primary Key) WAREHOUSE
P0010 Warehouse A, Warehouse B, Warehouse C
P0020 Warehouse B, Warehouse D
The following example shows the same table in first normal form.
Table 10. Table Conforming to First Normal Form
WAREHOUSE (Primary
PART (Primary Key) Key) QUANTITY
P0010 Warehouse A 400
P0010 Warehouse B 543
P0010 Warehouse C 329
P0020 Warehouse B 200
P0020 Warehouse D 278
Second normal form is violated when a non-key column is dependent upon part of
a composite key, as in the following example:
Table 11. Table Violating Second Normal Form
PART (Primary WAREHOUSE
Key) (Primary Key) QUANTITY WAREHOUSE_ADDRESS
P0010 Warehouse A 400 1608 New Field Road
P0010 Warehouse B 543 4141 Greenway Drive
P0010 Warehouse C 329 171 Pine Lane
P0020 Warehouse B 200 4141 Greenway Drive
P0020 Warehouse D 278 800 Massey Street
The primary key is a composite key, consisting of the PART and the WAREHOUSE
columns together. Because the WAREHOUSE_ADDRESS column depends only on
the value of WAREHOUSE, the table violates the rule for second normal form.
The solution is to split the table into the following two tables:
Table 12. PART_STOCK Table Conforming to Second Normal Form
WAREHOUSE (Primary
PART (Primary Key) Key) QUANTITY
P0010 Warehouse A 400
P0010 Warehouse B 543
P0010 Warehouse C 329
P0020 Warehouse B 200
P0020 Warehouse D 278
The first table in the following example contains the columns EMPNO and
WORKDEPT. Suppose a column DEPTNAME is added (see Table 15 on page 64).
The new column depends on WORKDEPT, but the primary key is EMPNO. The
table now violates third normal form. Changing DEPTNAME for a single
employee, John Parker, does not change the department name for other employees
in that department. There are now two different department names used for
department number E11. The inconsistency that results is shown in the updated
version of the table.
The table can be normalized by creating a new table, with columns for
WORKDEPT and DEPTNAME. An update like changing a department name is
now much easier; only the new table needs to be updated.
An SQL query that returns the department name along with the employee name is
more complex to write, because it requires joining the two tables. It will probably
also take longer to run than a query on a single table. Additional storage space is
required, because the WORKDEPT column must appear in both tables.
Consider these entities: employees, skills, and languages. An employee can have
several skills and know several languages. There are two relationships, one
between employees and skills, and one between employees and languages. A table
is not in fourth normal form if it represents both relationships, as in the following
If, however, the attributes are interdependent (that is, the employee applies certain
languages only to certain skills), the table should not be split.
A good strategy when designing a database is to arrange all data in tables that are
in fourth normal form, and then to decide whether the results give you an
acceptable level of performance. If they do not, you can rearrange the data in
tables that are in third normal form, and then reassess performance.
Constraints
A constraint is a rule that the database manager enforces.
Unique constraints
A unique constraint is the rule that the values of a key are valid only if they are
unique within a table. Unique constraints are optional and can be defined in the
CREATE TABLE or ALTER TABLE statement using the PRIMARY KEY clause or
the UNIQUE clause. The columns specified in a unique constraint must be defined
as NOT NULL. The database manager uses a unique index to enforce the
uniqueness of the key during changes to the columns of the unique constraint.
A table can have an arbitrary number of unique constraints, with at most one
unique constraint defined as the primary key. A table cannot have more than one
unique constraint on the same set of columns.
Note that there is a distinction between defining a unique constraint and creating a
unique index. Although both enforce uniqueness, a unique index allows nullable
columns and generally cannot be used as a parent key.
Referential constraints
Referential integrity is the state of a database in which all values of all foreign keys
are valid. A foreign keyis a column or a set of columns in a table whose values are
required to match at least one primary key or unique key value of a row in its
parent table. A referential constraint is the rule that the values of the foreign key are
valid only if one of the following conditions is true:
v They appear as values of a parent key.
v Some component of the foreign key is null.
The table containing the parent key is called the parent table of the referential
constraint, and the table containing the foreign key is said to be a dependent of that
table.
Note that referential constraints, check constraints, and triggers can be combined.
Insert rule
The insert rule of a referential constraint is that a non-null insert value of the
foreign key must match some value of the parent key of the parent table. The
value of a composite foreign key is null if any component of the value is null. This
rule is implicit when a foreign key is specified.
In the case of a parent row, when a value in a column of the parent key is
updated, the following rules apply:
v If any row in the dependent table matches the original value of the key, the
update is rejected when the update rule is RESTRICT.
v If any row in the dependent table does not have a corresponding parent key
when the update statement is completed (excluding AFTER triggers), the update
is rejected when the update rule is NO ACTION.
In the case of a dependent row, the NO ACTION update rule is implicit when a
foreign key is specified. NO ACTION means that a non-null update value of a
foreign key must match some value of the parent key of the parent table when the
update statement is completed.
The value of a composite foreign key is null if any component of the value is null.
Delete rule
The delete rule of a referential constraint is specified when the referential
constraint is defined. The choices are NO ACTION, RESTRICT, CASCADE, or SET
NULL. SET NULL can be specified only if some column of the foreign key allows
null values.
The delete rule of a referential constraint applies when a row of the parent table is
deleted. More precisely, the rule applies when a row of the parent table is the
object of a delete or propagated delete operation (defined below), and that row has
dependents in the dependent table of the referential constraint. Consider an
example where P is the parent table, D is the dependent table, and p is a parent
row that is the object of a delete or propagated delete operation. The delete rule
works as follows:
v With RESTRICT or NO ACTION, an error occurs and no rows are deleted.
v With CASCADE, the delete operation is propagated to the dependents of p in
table D.
v With SET NULL, each nullable column of the foreign key of each dependent of p
in table D is set to null.
Each referential constraint in which a table is a parent has its own delete rule, and
all applicable delete rules are used to determine the result of a delete operation.
Thus, a row cannot be deleted if it has dependents in a referential constraint with a
delete rule of RESTRICT or NO ACTION, or the deletion cascades to any of its
descendents that are dependents in a referential constraint with the delete rule of
RESTRICT or NO ACTION.
The deletion of a row from parent table P involves other tables and can affect rows
of these tables:
v If table D is a dependent of P and the delete rule is RESTRICT or NO ACTION,
then D is involved in the operation but is not affected by the operation.
v If D is a dependent of P and the delete rule is SET NULL, then D is involved in
the operation, and rows of D can be updated during the operation.
v If D is a dependent of P and the delete rule is CASCADE, then D is involved in
the operation and rows of D can be deleted during the operation.
A table can have an arbitrary number of table check constraints. A table check
constraint is enforced by applying its search condition to each row that is inserted
or updated. An error occurs if the result of the search condition is false for any
row.
When one or more table check constraints is defined in the ALTER TABLE
statement for a table with existing data, the existing data is checked against the
new condition before the ALTER TABLE statement completes. The SET
INTEGRITY statement can be used to put the table in set integrity pending state,
which allows the ALTER TABLE statement to proceed without checking the data.
Informational constraints
An informational constraint is a rule that can be used by the SQL compiler to
improve the access path to data. Informational constraints are not enforced by the
database manager, and are not used for additional verification of data; rather, they
are used to improve query performance.
Use the CREATE TABLE or ALTER TABLE statement to define a referential or table
check constraint, specifying constraint attributes that determine whether or not the
database manager is to enforce the constraint and whether or not the constraint is
to be used for query optimization.
Triggers
A trigger defines a set of actions that are performed in response to an insert,
update, or delete operation on a specified table. When such an SQL operation is
executed, the trigger is said to have been activated.
Triggers are optional and are defined using the CREATE TRIGGER statement.
Triggers can be used, along with referential constraints and check constraints, to
enforce data integrity rules. Triggers can also be used to cause updates to other
tables, automatically generate or transform values for inserted or updated rows, or
invoke functions to perform tasks such as issuing alerts.
Triggers are a useful mechanism for defining and enforcing transitional business
rules, which are rules that involve different states of the data (for example, a salary
that cannot be increased by more than 10 percent).
Using triggers places the logic that enforces business rules inside the database. This
means that applications are not responsible for enforcing these rules. Centralized
logic that is enforced on all of the tables means easier maintenance, because
changes to application programs are not required when the logic changes.
The statement that causes a trigger to be activated includes a set of affected rows.
These are the rows of the subject table that are being inserted, updated, or deleted.
The trigger granularity specifies whether the actions of the trigger are performed
once for the statement or once for each of the affected rows.
The triggered action consists of an optional search condition and a set of SQL
statements that are executed whenever the trigger is activated. The SQL statements
are only executed if the search condition evaluates to true. If the trigger activation
time is before the trigger event, triggered actions can include statements that select,
set transition variables, or signal SQLstates. If the trigger activation time is after
the trigger event, triggered actions can include statements that select, insert,
update, delete, or signal SQLstates.
The triggered action can refer to the values in the set of affected rows using
transition variables. Transition variables use the names of the columns in the subject
table, qualified by a specified name that identifies whether the reference is to the
old value (before the update) or the new value (after the update). The new value
can also be changed using the SET Variable statement in before, insert, or update
triggers.
The activation of a trigger might cause trigger cascading, which is the result of the
activation of one trigger that executes SQL statements that cause the activation of
other triggers or even the same trigger again. The triggered actions might also
cause updates resulting from the application of referential integrity rules for
deletions that can, in turn, result in the activation of additional triggers. With
trigger cascading, a chain of triggers and referential integrity delete rules can be
activated, causing significant change to the database as a result of a single INSERT,
UPDATE, or DELETE statement.
When multiple triggers have insert, update, or delete actions against the same
object, temporary tables are used to avoid access conflicts, and this can have a
noticeable impact on performance, particularly in partitioned database
environments.
Related concepts:
v “Triggers in application development” in Developing SQL and External Routines
Related tasks:
v “Creating triggers” in Administration Guide: Implementation
Related reference:
v “Interaction of triggers and constraints” in SQL Reference, Volume 1
For audit purposes, you may have to record every update made to your data for a
specified period. For example, you may want to update an audit table each time an
employee’s salary is changed. Updates to this table could be made automatically if
an appropriate trigger is defined. Audit activities can also be carried out through
the DB2 Database for Linux, UNIX, and Windows audit facility.
For performance reasons, you may only want to access a selected amount of data,
while maintaining the base data as history. You should include within your design,
the requirements for maintaining this historical data, such as the number of
months or years of data that is required to be available before it can be purged.
You may also want to make use of summary information. For example, you may
have a table that has all of your employee information in it. However, you would
Chapter 4. Logical database design 71
like to have this information divided into separate tables by division or
department. In this case, a materialized query table for each division or
department based on the data in the original table would be helpful.
Security implications should also be identified within your design. For example,
you may decide to support user access to certain types of data through security
tables. You can define access levels to various types of data, and who can access
this data. Confidential data, such as employee and payroll data, would have
stringent security restrictions.
You can create tables that have a structured type associated with them. With such
typed tables, you can establish a hierarchical structure with a defined relationship
between those tables called a type hierarchy. The type hierarchy is made up of a
single root type, supertypes, and subtypes.
A reference type representation is defined when the root type of a type hierarchy is
created. The target of a reference is always a row in a typed table or view.
It is recommended that you explicitly state where you would like the database
created.
The database directory contains the following files that are created as part of the
CREATE DATABASE command.
v The files SQLBP.1 and SQLBP.2 contain buffer pool information. Each file has a
duplicate copy to provide a backup.
v The files SQLSPCS.1 and SQLSPCS.2 contain table space information. Each file
has a duplicate copy to provide a backup.
v The files SQLSGF.1 and SQLSGF.2 contain storage path information associated
with the database’s automatic storage. Each file has a duplicate copy to provide
a backup.
v The SQLDBCON file contains database configuration information. Do not edit
this file. To change configuration parameters, use either the Control Center or
the command-line statements UPDATE DATABASE CONFIGURATION and
RESET DATABASE CONFIGURATION.
Note: You should ensure the log subdirectory is mapped to different disks than
those used for your data. A disk problem could then be restricted to your
data or the logs but not both. This can provide a substantial performance
benefit because the log files and database containers do not compete for
movement of the same disk heads. To change the location of the log
subdirectory, change the newlogpath database configuration parameter.
v The SQLINSLK file helps to ensure that a database is used by only one instance
of the database manager.
At the same time a database is created, a detailed deadlocks event monitor is also
created. The detailed deadlocks event monitor files are stored in the database
directory of the catalog node. When the event monitor reaches its maximum
number of files to output, it will deactivate and a message is written to the
notification log. This prevents the event monitor from consuming too much disk
space. Removing output files that are no longer needed will allow the event
monitor to activate again on the next database activation.
The SQLT* subdirectories contain the default System Managed Space (SMS) table
spaces required for an operational database. Three default table spaces are created:
v SQLT0000.0 subdirectory contains the catalog table space with the system catalog
tables.
v SQLT0001.0 subdirectory contains the default temporary table space.
v SQLT0002.0 subdirectory contains the default user data table space.
In addition, a file called SQL*.DAT stores information about each table that the
subdirectory or container contains. The asterisk (*) is replaced by a unique set of
digits that identifies each table. For each SQL*.DAT file there might be one or more
of the following files, depending on the table type, the reorganization status of the
table, or whether indexes, LOB, or LONG fields exist for the table:
v SQL*.BKM (contains block allocation information if it is an MDC table)
v SQL*.LF (contains LONG VARCHAR or LONG VARGRAPHIC data)
v SQL*.LB (contains BLOB, CLOB, or DBCLOB data)
Related concepts:
v “Comparison of SMS and DMS table spaces” on page 140
v “Database managed space” on page 120
v “DMS device considerations” on page 124
v “DMS table spaces” on page 123
v “SMS table spaces” on page 119
v “Understanding the recovery history file” in Data Recovery and High Availability
Guide and Reference
Related reference:
v “CREATE DATABASE command” in Command Reference
From the Control Center, you can access a number of utilities that are designed to
assist you in determining the size requirements of various database objects:
v You can select an object and then use the ″Estimate Size″ utility. This utility can
tell you the current size of an existing object, such as a table. You can then
change the object, and the utility will calculate new estimated values for the
object. The utility will help you approximate storage requirements, taking future
growth into account. It provides possible size ranges for the object: both the
smallest size, based on current values, and the largest possible size.
v You can determine the relationships between objects by using the “Show
Related” window.
v You can select any database object on the instance and request “Generate DDL”.
This function uses the db2look utility to generate data definition statements for
the database.
In each of these cases, either the “Show SQL” or the “Show Command” button is
available to you. You can save the resulting SQL statements or commands in script
files to be used later. All of these utilities have online help to assist you.
When estimating the size of a database, the contribution of the following must be
considered:
Related concepts:
v “Space requirements for indexes” on page 80
v “Space requirements for large object data” on page 79
v “Space requirements for log files” on page 82
v “Space requirements for long field data” on page 78
v “Space requirements for system catalog tables” on page 76
v “Space requirements for temporary tables” on page 83
v “Space requirements for user table data” on page 77
Related reference:
v “db2look - DB2 statistics and DDL extraction tool command” in Command
Reference
The amount of space allocated for the catalog tables depends on the type of table
space, and the extent size of the table space containing the catalog tables. For
example, if a DMS table space with an extent size of 32 is used, the catalog table
space is initially allocated 20 MB of space.
Note: For databases with multiple partitions, the catalog tables reside only on the
database partition from which the CREATE DATABASE command was
issued. Disk space for the catalog tables is only required for that database
partition.
Related concepts:
v “Space requirements for database objects” on page 75
v “System catalog tables” in Administration Guide: Implementation
Table data pages do not contain the data for columns defined with LONG
VARCHAR, LONG VARGRAPHIC, BLOB, CLOB, or DBCLOB data types. The
rows in a table data page do, however, contain a descriptor for these columns.
Rows are usually inserted into a regular table in first-fit order. The file is searched
(using a free space map) for the first available space that is large enough to hold
the new row. When a row is updated, it is updated in place, unless there is
insufficient space left on the page to contain it. If this is the case, a record is
created in the original row location that points to the new location in the table file
of the updated row.
If the table has a clustering index defined on it, DB2 Database for Linux, UNIX,
and Windows will attempt to physically cluster the data according to the key order
of that clustering index. When a row is inserted into the table, DB2 will first look
up its key value in the clustering index. If the key value is found, DB2 attempts to
insert the record on the data page pointed to by that key; if the key value is not
found, the next higher key value is used, so that the record is inserted on the page
containing records having the next higher key value. If there is insufficient space
on the “target” page in the table, the free space map is used to search neighboring
pages for space. Over time, as space on the data pages is completely used up,
records are placed further and further from the “target” page in the table. The
table data would then be considered unclustered, and a table reorganization can be
used to restore clustered order.
If the table is a multidimensional clustering (MDC) table, DB2 will guarantee that
records are always physically clustered along one or more defined dimensions, or
clustering indexes. When an MDC table is defined with certain dimensions, a block
index is created for each of the dimensions, and a composite block index is created
which maps cells (unique combinations of dimension values) to blocks. This
composite block index is used to determine to which cell a particular record
belongs, and exactly which blocks or extents in the table contains records
belonging to that cell. As a result, when inserting records, DB2 searches the
composite block index for the list of blocks containing records having the same
dimension values, and limits the search for space to those blocks only. If the cell
does not yet exist, or if there is insufficient space in the cell’s existing blocks, then
another block is assigned to the cell and the record is inserted into it. A free space
map is still used within blocks to quickly find available space in the blocks.
The number of 4 KB pages for each user table in the database can be estimated by
calculating:
ROUND DOWN(4028/(average row size + 10)) = records_per_page
Note: This formula provides only an estimate. The estimate’s accuracy is reduced
if the record length varies because of fragmentation and overflow records.
You also have the option to create buffer pools or table spaces that have an 8 KB,
16 KB, or 32 KB page size. All tables created within a table space of a particular
size have a matching page size. A single table or index object can be as large as 512
GB, assuming a 32 KB page size. You can have a maximum of 1012 columns when
using an 8 KB, 16 KB, or 32 KB page size. The maximum number of columns is
500 for a 4 KB page size. Maximum row lengths also vary, depending on page size:
v When the page size is 4 KB, the row length can be up to 4005 bytes.
v When the page size is 8 KB, the row length can be up to 8101 bytes.
v When the page size is 16 KB, the row length can be up to 16 293 bytes.
v When the page size is 32 KB, the row length can be up to 32 677 bytes.
A larger page size facilitates a reduction in the number of levels in any index. If
you are working with OLTP (online transaction processing) applications, that
perform random row reads and writes, a smaller page size is better, because it
wastes less buffer space with undesired rows. If you are working with DSS
(decision support system) applications, which access large numbers of consecutive
rows at a time, a larger page size is better because it reduces the number of I/O
requests required to read a specific number of rows. An exception occurs when the
row size is smaller than the page size divided by 255. In such a case, there is
wasted space on each page. (There is a maximum of only 255 rows per page.) To
reduce this wasted space, a smaller page size may be appropriate.
You cannot import IXF data files that represent more than 755 columns.
Declared temporary tables can be created only in their own “user temporary” table
space type. There is no default user temporary table space. Temporary tables
cannot have LONG data. The tables are dropped implicitly when an application
disconnects from the database, and estimates of the space requirements for their
tables should take this into account.
Related concepts:
v “Space requirements for database objects” on page 75
Data is stored in 32 KB areas that are broken up into segments whose sizes are
″powers of two″ times 512 bytes. (Hence these segments can be 512 bytes, 1024
bytes, 2048 bytes, and so on, up to 32 768 bytes.)
Long field data types (LONG VARCHAR or LONG VARGRAPHIC) are stored in a
way that enables free space to be reclaimed easily. Allocation and free space
information is stored in 4 KB allocation pages, which appear infrequently
throughout the object.
If character data is less than the page size, and it fits into the record along with the
rest of the data, the CHAR, GRAPHIC, VARCHAR, or VARGRAPHIC data types
should be used instead of LONG VARCHAR or LONG VARGRAPHIC.
Related concepts:
v “Space requirements for database objects” on page 75
To estimate the space required by LOB data, you need to consider the two table
objects used to store data defined with these data types:
v LOB Data Objects
Data is stored in 64 MB areas that are broken up into segments whose sizes are
″powers of two″ times 1024 bytes. (Hence these segments can be 1024 bytes,
2048 bytes, 4096 bytes, and so on, up to 64 MB.)
To reduce the amount of disk space used by LOB data, you can specify the
COMPACT option on the lob-options clause of the CREATE TABLE and the
ALTER TABLE statements. The COMPACT option minimizes the amount of disk
space required by allowing the LOB data to be split into smaller segments. This
process does not involve data compression, but simply uses the minimum
amount of space, to the nearest 1 KB boundary. Using the COMPACT option
may result in reduced performance when appending to LOB values.
The amount of free space contained in LOB data objects is influenced by the
amount of update and delete activity, as well as the size of the LOB values being
inserted.
v LOB Allocation Objects
Allocation and free space information is stored in 4 KB allocation pages that are
separated from the actual data. The number of these 4 KB pages is dependent on
the amount of data, including unused space, allocated for the large object data.
The overhead is calculated as follows: one 4 KB page for every 64 GB, plus one
4 KB page for every 8 MB.
If character data is less than the page size, and it fits into the record along with the
rest of the data, the CHAR, GRAPHIC, VARCHAR, or VARGRAPHIC data types
should be used instead of BLOB, CLOB, or DBCLOB.
Related concepts:
v “Space requirements for database objects” on page 75
Related reference:
v “Large objects (LOBs)” in SQL Reference, Volume 1
where:
v The “average index key size” is the byte count of each column in the index key.
(When estimating the average column size for VARCHAR and VARGRAPHIC
columns, use an average of the current data size, plus two bytes. Do not use the
maximum declared size.)
v The factor of “2” is for overhead, such as non-leaf pages and free space.
Notes:
1. For every column that allows NULLs, add one extra byte for the null indicator.
2. For block indexes created internally for multidimensional clustering (MDC)
tables, the “number of rows” would be replaced by the “number of blocks”.
Indexes created before Version 8 (type-1 indexes) are different from those created at
version 8 (type-2 indexes) and following. To find out what type of index exists for
a table, use the INSPECT command. To convert type-1 indexes to type-2 indexes,
use the REORG INDEXES commmand.
When using the REORG INDEXES command, ensure that you have sufficient free
space in the table space where the indexes are stored. The amount of free space
should be equal to the current size of the index. Additional space may be required
if you choose to reorganize the indexes with the ALLOW WRITE ACCESS option.
The additional space is for the logs of the activity affecting the indexes during the
reorganization of the indexes.
Temporary space is required when creating the index. The maximum amount of
temporary space required during index creation can be estimated as:
(average index key size + 9) * number of rows * 3.2
where the factor of “3.2” is for index overhead, and space required for sorting
during index creation.
Note: In the case of non-unique indexes, only five bytes are required to store
duplicate key entries. The estimate shown above assumes no duplicates. The
space required to store an index may be over-estimated by the formula
shown above.
The following two formulas can be used to estimate the number of keys per leaf
page (the second provides a more accurate estimate). The accuracy of these
estimates depends largely on how well the averages reflect the actual data.
Note: For SMS table spaces, the minimum required space for leaf pages is 12 KB.
For DMS table spaces, the minimum is an extent.
v A rough estimate of the average number of keys per leaf page is:
(.9 * (U - (M*2))) * (D + 1)
----------------------------
K + 7 + (5 * D)
where:
where:
– U, the usable space on a page, is approximately equal to the page size minus
100. For a page size of 4096, U is 3996.
– D is the average number of duplicates per key value on non-leaf pages (this
will be much smaller than on leaf pages, and you may want to simplify the
calculation by setting the value to 0).
– M = U / (9 + minimumKeySize for non-leaf pages)
– K = averageKeySize for non-leaf pages
The minimumKeySize and the averageKeySize for non-leaf pages will be the same
as for leaf pages, except when there are include columns. Include columns are
not stored on non-leaf pages.
You should not replace .9 with (100 - pctfree)/100, unless this value is greater
than .9, because a maximum of 10 percent free space will be left on non-leaf
pages during index creation.
The number of non-leaf pages can be estimated as follows:
if L > 1 then {P++; Z++}
While (Y > 1)
{
P = P + Y
Y = Y / N
Z++
}
The additional 0.02 percent is for overhead, including space map pages.
The amount of space required to create the index is estimated as:
T * pagesize
Related concepts:
v “Indexes” in SQL Reference, Volume 1
v “Index cleanup and maintenance” in Performance Guide
v “Space requirements for database objects” on page 75
You will also need at least enough space for your active log configuration, which
you can calculate as
(logprimary + logsecond) * (logfilsiz + 2 ) * 4096
where:
v logprimary is the number of primary log files, defined in the database
configuration file
v logsecond is the number of secondary log files, defined in the database
configuration file; in this calculation, logsecond cannot be set to -1. (When
logsecond is set to -1, you are requesting an infinite active log space.)
v logfilsiz is the number of pages in each log file, defined in the database
configuration file
v 2 is the number of header pages required for each log file
v 4096 is the number of bytes in one page.
If the database is enabled for circular logging, the result of this formula will
provide a sufficient amount of disk space.
If the database is enabled for roll-forward recovery, special log space requirements
should be taken into consideration:
v With the logretain configuration parameter enabled, the log files will be archived
in the log path directory. The online disk space will eventually fill up, unless
you move the log files to a different location.
v With the userexit configuration parameter enabled, a user exit program moves
the archived log files to a different location. Extra log space is still required to
allow for:
– Online archived logs that are waiting to be moved by the user exit program
– New log files being formatted for future use
If you are mirroring the log path, you will need to double the estimated log file
space requirements.
Related concepts:
v “Space requirements for database objects” on page 75
v “Log mirroring” in Data Recovery and High Availability Guide and Reference
v “Understanding recovery logs” in Data Recovery and High Availability Guide and
Reference
Related reference:
v “mirrorlogpath - Mirror log path configuration parameter” in Performance Guide
v “logprimary - Number of primary log files configuration parameter” in
Performance Guide
v “logsecond - Number of secondary log files configuration parameter” in
Performance Guide
v “logfilsiz - Size of log files configuration parameter” in Performance Guide
You can use the database system monitor and the query table space APIs to track
the amount of work space being used during the normal course of operations.
You can use the DB2_OPT_MAX_TEMP_SIZE registry variable to limit the amount
of temporary table space used by queries.
Related concepts:
v “Space requirements for database objects” on page 75
Related reference:
v “sqlbmtsq API - Get the query data for all table spaces” in Administrative API
Reference
v “Query compiler variables” in Performance Guide
XML storage objects are separate from, but dependent upon their parent table
objects. For each XML value stored in a row of an XML table column, DB2
maintains a record, called an XML data specifier (XDS), which specifies where to
retrieve the XML data stored on disk from the associated XML storage object.
Related concepts:
v “Preference of database managed table spaces for native XML data store
performance” in Performance Guide
v “Guidelines for storage requirements for XML documents” on page 84
v “Native XML data store overview” in XML Guide
v “XML data specifier” in Data Movement Utilities Guide and Reference
Related reference:
v “Buffer pool activity monitor elements” in System Monitor Guide and Reference
Related concepts:
v “XML storage object overview” on page 84
You can define named subsets of one or more database partitions in a database.
Each subset you define is known as a database partition group. Each subset that
contains more than one database partition is known as a multipartition database
partition group. Multipartition database partition groups can only be defined with
database partitions that belong to the same instance. A database partition group
can contain as few as one database partition, or span all of the database partitions
in the database.
Database
partition group 1
Database Database
partition group 2 partition group 3
Database Database
partition partition
Database Database
partition partition
Database
partition
You create a new database partition group using the CREATE DATABASE
PARTITION GROUP statement. You can modify it using the ALTER DATABASE
PARTITION GROUP statement. Data is divided across all the database partitions in
a database partition group, and you can add or drop one or more database
partitions from a database partition group. If you are using a multipartition
database partition group, you must look at several database partition group design
considerations.
Each database partition that is part of the database system configuration must
already be defined in a database partition configuration file called db2nodes.cfg. A
database partition group can contain as few as one database partition, or as many
as the entire set of database partitions defined for the database system.
Related reference:
v “ALTER DATABASE PARTITION GROUP statement” in SQL Reference, Volume 2
v “CREATE DATABASE PARTITION GROUP statement” in SQL Reference, Volume
2
The DB2 Design Advisor is a tool that can be used to recommend database
partition groups. The DB2 Design Advisor can be accessed from the Control Center
and using db2advis from the command line processor.
If you are using a multiple partition database partition group, consider the
following design points:
v In a multipartition database partition group, you can only create a unique index
if it is a superset of the distribution key.
v Depending on the number of database partitions in the database, you may have
one or more single-partition database partition groups, and one or more
multipartition database partition groups present.
v Each database partition must be assigned a unique number. The same database
partition may be found in one or more database partition groups.
v To ensure fast recovery of the database partition containing system catalog
tables, avoid placing user tables on the same database partition. This is
accomplished by placing user tables in database partition groups that do not
include the database partition in the IBMCATGROUP database partition group.
You should place small tables in single-partition database partition groups, except
when you want to take advantage of collocation with a larger table. Collocation is
the placement of rows from different tables that contain related data in the same
database partition. Collocated tables allow DB2 Database for Linux, UNIX, and
Windows to utilize more efficient join strategies. Collocated tables can reside in a
single-partition database partition group. Tables are considered collocated if they
reside in a multipartition database partition group, have the same number of
columns in the distribution key, and if the data types of the corresponding
columns are compatible. Rows in collocated tables with the same distribution key
value are placed on the same database partition. Tables can be in separate table
spaces in the same database partition group, and still be considered collocated.
You should avoid extending medium-sized tables across too many database
partitions. For example, a 100 MB table may perform better on a 16-partition
database partition group than on a 32-partition database partition group.
You can use database partition groups to separate online transaction processing
(OLTP) tables from decision support (DSS) tables, to ensure that the performance
of OLTP transactions is not adversely affected.
Related reference:
v “db2advis - DB2 design advisor command” in Command Reference
Distribution maps
In a partitioned database environment, the database manager must know where to
find the data it needs. The database manager uses a map, called a distribution map,
to find the data.
For example, assume that you have a database created on four database partitions
(numbered 0–3). The distribution map for the IBMDEFAULTGROUP database
partition group of this database would be:
0 1 2 3 0 1 2 ...
If a database partition group had been created in the database using database
partitions 1 and 2, the distribution map for that database partition group would be:
1 2 1 2 1 2 1 ...
If the distribution key for a table to be loaded into the database is an integer with
possible values between 1 and 500 000, the distribution key is hashed to a number
between 0 and 4 095. That number is used as an index into the distribution map to
select the database partition for that row.
Figure 23 on page 89 shows how the row with the distribution key value (c1, c2,
c3) is mapped to number 2, which, in turn, references database partition n5.
You can use the sqlugtpi API - Get table distribution information) to obtain a
copy of a distribution map that you can view.
Related concepts:
v “Database partition group design” on page 87
v “Database partition groups” on page 85
v “Distribution keys” on page 89
Related reference:
v “sqlugtpi API - Get table distribution information” in Administrative API
Reference
Distribution keys
A distribution key is a column (or group of columns) that is used to determine the
database partition in which a particular row of data is stored. A distribution key is
defined on a table using the CREATE TABLE statement. If a distribution key is not
defined for a table in a table space that is divided across more than one database
partition in a database partition group, one is created by default from the first
column of the primary key. If no primary key is specified, the default distribution
key is the first non-long field column defined on that table. (Long includes all long
data types and all large object (LOB) data types). If you are creating a table in a
table space associated with a single-partition database partition group, and you
want to have a distribution key, you must define the distribution key explicitly.
One is not created by default.
If no columns satisfy the requirement for a default distribution key, the table is
created without one. Tables without a distribution key are only allowed in
single-partition database partition groups. You can add or drop distribution keys
later, using the ALTER TABLE statement. Altering the distribution key can only be
done to a table whose table space is associated with a single-partition database
partition group.
Choosing a good distribution key is important. You should take into consideration:
If collocation is not a major consideration, a good distribution key for a table is one
that spreads the data evenly across all database partitions in the database partition
group. The distribution key for each table in a table space that is associated with a
database partition group determines if the tables are collocated. Tables are
considered collocated when:
v The tables are placed in table spaces that are in the same database partition
group
v The distribution keys in each table have the same number of columns
v The data types of the corresponding columns are partition-compatible.
These characteristics ensure that rows of collocated tables with the same
distribution key values are located on the same database partition.
Database partitioning is the method by which the placement of each row in the table
is determined. The method works as follows:
1. A hashing algorithm is applied to the value of the distribution key, and
generates a number between zero (0) and 4095.
2. The distribution map is created when a database partition group is created.
Each of the numbers is sequentially repeated in a round-robin fashion to fill the
distribution map.
Related concepts:
v “Database partition group design” on page 87
v “Database partition groups” on page 85
v “Distribution maps” on page 88
v “The Design Advisor” in Performance Guide
Related reference:
v “ALTER TABLE statement” in SQL Reference, Volume 2
Table collocation
You may discover that two or more tables frequently contribute data in response to
certain queries. In this case, you will want related data from such tables to be
located as close together as possible. In an environment where the database is
physically divided among two or more database partitions, there must be a way to
keep the related pieces of the divided tables as close together as possible. The
ability to do this is called table collocation.
Tables are collocated when they are stored in the same database partition group,
and when their distribution keys are compatible. Placing both tables in the same
database partition group ensures a common distribution map. The tables may be in
different table spaces, but the table spaces must be associated with the same
database partition group. The data types of the corresponding columns in each
distribution key must be partition-compatible.
DB2 Database for Linux, UNIX, and Windows can recognize, when accessing more
than one table for a join or a subquery, that the data to be joined is located at the
same database partition. When this happens, DB2 can perform the join or subquery
at the database partition where the data is stored, instead of having to move data
between database partitions. This ability has significant performance advantages.
Related concepts:
v “Database partition group design” on page 87
v “Database partition groups” on page 85
v “Database partition compatibility” on page 91
v “Distribution keys” on page 89
Related concepts:
v “Database partition group design” on page 87
v “Database partition groups” on page 85
v “Distribution keys” on page 89
Data partitions
A data partition is a set of table rows, stored separately from other sets of rows,
and grouped by the specifications provided in the PARTITION BY clause of the
CREATE TABLE statement. If a table is created using the PARTITION BY clause,
then the table is partitioned.
A partitioned table uses a data organization scheme in which table data is divided
across multiple storage objects, called data partitions or ranges, according to values
in one or more table partitioning key columns of the table. Data from a given table
is partitioned into multiple storage objects based on the specifications provided in
the PARTITION BY clause of the CREATE TABLE statement. These storage objects
can be in different table spaces, in the same table space, or a combination of both.
All the table spaces specified must have the same: pagesize, extensize, storage
mechanism (DMS, SMS), and type (REGULAR or LARGE) and all the table spaces
must be in the same database partition group.
A partitioned table simplifies the rolling in and rolling out of table data and a
partitioned table can contain vastly more data than an ordinary table. You can
create a partitioned table with a maximum of 32767 data partitions. Data partitions
can be added to, attached to, and detached from a partitioned table, and you can
store multiple data partition ranges from a table in one table space.
The ranges specified for each data partition can be generated automatically or
manually when creating a table.
Data partitions are referred to in various ways throughout the DB2 library. The
following list represents the most common references:
Related concepts:
v “Data organization schemes in DB2 and Informix databases” on page 105
v “Optimization strategies for partitioned tables” in Performance Guide
v “Partitioned tables” on page 104
v “Table partitioning” on page 93
Related tasks:
v “Adding data partitions to partitioned tables” in Administration Guide:
Implementation
v “Altering partitioned tables” in Administration Guide: Implementation
v “Creating partitioned tables” in Administration Guide: Implementation
v “Dropping a data partition” in Administration Guide: Implementation
v “Approaches to migrating existing tables and views to partitioned tables” in
Administration Guide: Implementation
v “Attaching a data partition” in Administration Guide: Implementation
v “Detaching a data partition” in Administration Guide: Implementation
v “Rotating data in a partitioned table” in Administration Guide: Implementation
v “Approaches to defining ranges on partitioned tables” in Administration Guide:
Implementation
Related reference:
v “Examples of rolling in and rolling out partitioned table data” in Administration
Guide: Implementation
v “CREATE TABLE statement” in SQL Reference, Volume 2
v “Guidelines and restrictions on altering partitioned tables with attached or
detached data partitions” in Administration Guide: Implementation
Table partitioning
Table partitioning is a data organization scheme in which table data is divided
across multiple storage objects called data partitions or ranges according to values
in one or more table columns. Each data partition is stored separately. These
storage objects can be in different table spaces, in the same table space, or a
combination of both.
Storage objects behave much like individual tables, making it easy to accomplish
fast roll-in by incorporating an existing table into a partitioned table using the
ALTER TABLE ...ATTACH statement. Likewise, easy roll-out is accomplished with
Table partitioning functionality is available with DB2 Version 9.1 Enterprise Server
Edition for Linux, UNIX, and Windows.
If any of the following circumstances apply to you and your organization, consider
the numerous benefits of table partitioning:
v You have a data warehouse that would benefit from easier roll-in and roll-out of
table data
v You have a data warehouse that includes large tables
v You are considering a migration to a DB2 V9.1 database from a previous release
or a competitive database product
v You need to use Hierarchical Storage Management (HSM) solutions more
effectively
Table partitioning offers easy roll-in and roll-out of table data, easier
administration, flexible index placement and better query processing.
Efficient roll-in and roll-out
Table partitioning allows for the efficient roll-in and roll-out of table data.
You can achieve this by using the ATTACH PARTITION and DETACH
PARTITION clauses of the ALTER TABLE statement. Rolling in partitioned
table data allows a new range to be easily incorporated into a partitioned
table as an additional data partition. Rolling out partitioned table data
allows you to easily separate ranges of data from a partitioned table for
subsequent purging or archiving.
Easier administration of large tables
Table level administration is more flexible because you can perform
administrative tasks on individual data partitions. These tasks include:
detaching and reattaching of a data partition, backing up and restoring
individual data partitions, and reorganizing individual indexes. Time
consuming maintenance operations can be shortened by breaking them
down into a series of smaller operations. For example, backup operations
can work data partition by data partition when the data partitions are
placed in separate table spaces. Thus, it is possible to backup one data
partition of a partitioned table at a time.
The following example creates a table customer where rows with l_shipdate >=
’01/01/2006’ and l_shipdate <= ’03/31/2006’ are stored in table space ts1, rows
with l_shipdate >= ’04/01/2006’ and l_shipdate <= ’06/30/2006’ are in table space
ts2, etc.
CREATE TABLE customer (l_shipdate, l_name CHAR(30))
IN ts1, ts2, ts3, ts4, ts5
PARTITION BY RANGE(l_shipdate) (STARTING FROM (’01/01/2006’)
ENDING AT (’12/31/2006’) EVERY (3 MONTHS))
Related concepts:
v “Data organization schemes” on page 99
v “Data partitions” on page 92
v “Partitioned materialized query table behavior” in Administration Guide:
Implementation
v “Partitioned tables” on page 104
v “Understanding index behavior on partitioned tables” in Performance Guide
v “Optimization strategies for partitioned tables” in Performance Guide
v “Understanding clustering index behavior on partitioned tables” in Performance
Guide
Related tasks:
v “Altering partitioned tables” in Administration Guide: Implementation
v “Adding data partitions to partitioned tables” in Administration Guide:
Implementation
v “Approaches to defining ranges on partitioned tables” in Administration Guide:
Implementation
v “Approaches to migrating existing tables and views to partitioned tables” in
Administration Guide: Implementation
v “Attaching a data partition” in Administration Guide: Implementation
Related reference:
v “Examples of rolling in and rolling out partitioned table data” in Administration
Guide: Implementation
v “CREATE TABLE statement” in SQL Reference, Volume 2
v “Command Line Processor (CLP) samples” in Samples Topics
To define the table partitioning key on a table use the CREATE TABLE statement
with the PARTITION BY clause.
The following data types (including synonyms) are supported for use as a table
partitioning key column:
SMALLINT INTEGER
INT BIGINT
FLOAT REAL
DOUBLE DECIMAL
DEC NUMERIC
NUM CHARACTER
CHAR VARCHAR
DATE TIME
GRAPHIC VARGRAPHIC
CHARACTER VARYING TIMESTAMP
CHAR VARYING CHARACTER FOR BIT DATA
CHAR FOR BIT DATA VARCHAR FOR BIT DATA
CHARACTER VARYING FOR BIT DATA CHAR VARYING FOR BIT DATA
User defined types (distinct)
The following data types can appear in a partitioned table, but are not supported
for use as a table partitioning key column:
v User defined types (structured)
v LONG VARCHAR
v LONG VARCHAR FOR BIT DATA
v BLOB
v BINARY LARGE OBJECT
v CLOB
v CHARACTER LARGE OBJECT
v DBCLOB
v LONG VARGRAPHIC
v REF
v Varying length string for C
v Varying length string for Pascal
If you choose to automatically generate data partitions using the EVERY clause of
the CREATE TABLE statement, only one column can be used as the table
partitioning key. If you choose to manually generate data partitions by specifying
each range in the PARTITION BY clause of the CREATE TABLE statement,
multiple columns can be used as the table partitioning key, as shown in the
following example:
CREATE TABLE sales (year INT, month INT)
IN tbsp1, tbsp2, tbsp3, tbsp4, tbsp5, tbsp6, tbsp7, tbsp8
PARTITION BY RANGE(year, month)
(STARTING FROM (2001, 1) ENDING (2001,3) IN tbsp1,
ENDING (2001,6) IN tbsp2, ENDING (2001,9)
IN tbsp3, ENDING (2001,12) IN tbsp4,
ENDING (2002,3) IN tbsp5, ENDING (2002,6)
IN tbsp6, ENDING (2002,9) IN tbsp7,
ENDING (2002,12) IN tbsp8)
This results in eight data partitions, one for each quarter in year 2001 and 2002.
Note:
1. When multiple columns are used as the table partitioning key, they are
treated as a composite key (which are similar to composite keys in an
index), in the sense that trailing columns are dependent on the leading
columns. Each starting or ending value (all of the columns, together)
must be specified in 512 characters or less. This limit corresponds to the
size of the LOWVALUE and HIGHVALUE columns of the
SYSCAT.DATAPARTITIONS catalog view. A starting or ending value
specified with more than 512 characters will result in error SQL0636N,
reason code 9.
2. Table partitioning is multicolumn not multidimension. In table
partitioning, all columns used are part of a single dimension.
Generated columns can be used as table partitioning keys. This example creates a
table with twelve data partitions, one for each month. All rows for January of any
year will be placed in the first data partition, rows for February in the second, and
so on.
Example 1
CREATE TABLE monthly_sales (sales_date date,
sales_month int GENERATED ALWAYS AS (month(sales_date)))
PARTITION BY RANGE (sales_month)
(STARTING FROM 1 ENDING AT 12 EVERY 1);
Note:
1. You cannot alter or drop the expression of a generated column that is
used in the table partitioning key. Adding a generated column expression
on a column that is used in the table partitioning key is not permitted.
Attempting to add, drop or alter a generated column expression for a
column used in the table partitioning key results in error (SQL0270N
rc=52).
2. Data partition elimination will not be used for range predicates if the
generated column is not monotonic, or the optimizer can not detect that
it is monotonic. In the presence of non-monotonic expressions, data
partition elimination can only take place for equality or IN predicates.
For a detailed discussion and examples of monotonicity see
Multidimensional clustering (MDC) table creation, placement, and use.
Related concepts:
v “Table partitioning” on page 93
v “Data partitions” on page 92
v “Optimization strategies for partitioned tables” in Performance Guide
v “Partitioned tables” on page 104
Related tasks:
v “Approaches to defining ranges on partitioned tables” in Administration Guide:
Implementation
v “Adding data partitions to partitioned tables” in Administration Guide:
Implementation
v “Creating partitioned tables” in Administration Guide: Implementation
v “Dropping a data partition” in Administration Guide: Implementation
v “Approaches to migrating existing tables and views to partitioned tables” in
Administration Guide: Implementation
v “Attaching a data partition” in Administration Guide: Implementation
v “Detaching a data partition” in Administration Guide: Implementation
v “Rotating data in a partitioned table” in Administration Guide: Implementation
Related reference:
v “SYSCAT.DATAPARTITIONS catalog view” in SQL Reference, Volume 1
v “Examples of rolling in and rolling out partitioned table data” in Administration
Guide: Implementation
v “CREATE TABLE statement” in SQL Reference, Volume 2
v “DESCRIBE command” in Command Reference
This syntax allows consistency between the clauses as well as allowing for future
algorithms of data organization. Each of these clauses can be used in isolation or in
combination with one another. By combining the DISTRIBUTE BY and PARTITION
BY clauses of the CREATE TABLE statement data can be spread across database
partitions spanning multiple table spaces. This approach allows for similar
behavior to the Informix® Dynamic Server and Informix Extended Parallel Server
hybrid functionality.
In a single table, you can combined the clauses used in each data organization
scheme to create more sophisticated partitioning schemes. For example, DB2
Database Partitioning Feature (DPF) is not only compatible, but also
complementary to table partitioning.
Understanding the benefits of each data organization scheme can help you to
determine the best approach when planning, designing, or reassessing your
database system requirements. Table 21 provides a high-level view of common
customer requirements and shows how the various data organization schemes can
help you to meet those requirements.
Table 21. Using table partitioning with the Database Partitioning Feature
Issue Recommended scheme Explanation
Data roll-out Table partitioning Uses detach to roll-out large
amounts of data with
minimal disruption
Parallel query execution Database Partitioning Feature Provides query parallelism
(query performance) for improved query
performance
Data partition elimination Table partitioning Provides data partition
(query performance) elimination for improved
query performance
Maximization of query Both Maximum query performance
performance when used together: query
parallelism and data partition
elimination are
complementary
Heavy administrator Database Partitioning Feature Execute many tasks for each
workload database partition
Related concepts:
v “Data organization schemes in DB2 and Informix databases” on page 105
v “Data partitions” on page 92
v “Database partition group design” on page 87
v “Designing multidimensional clustering (MDC) tables” on page 189
v “Multidimensional clustering (MDC) table creation, placement, and use” on page
197
v “Multidimensional clustering tables” on page 172
v “Range-clustered tables” on page 168
v “Table partitioning” on page 93
v “Database database partition group impact on query optimization” in
Performance Guide
v “Optimization strategies for partitioned tables” in Performance Guide
v “Examples of range-clustered tables” in Administration Guide: Implementation
v “Guidelines for using range-clustered tables” in Administration Guide:
Implementation
v “Database partitioning across multiple database partitions” in SQL Reference,
Volume 1
Related tasks:
v “Creating partitioned tables” in Administration Guide: Implementation
v “Creating a table in a partitioned database environment” in Administration Guide:
Implementation
v “Creating a table in multiple table spaces” in Administration Guide: Implementation
v “Attaching a data partition” in Administration Guide: Implementation
v “Detaching a data partition” in Administration Guide: Implementation
v “Rotating data in a partitioned table” in Administration Guide: Implementation
Related reference:
v “CREATE TABLE statement” in SQL Reference, Volume 2
Partitioned tables
Partitioned tables use a data organization scheme in which table data is divided
across multiple storage objects, called data partitions or ranges, according to values
in one or more table partitioning key columns of the table. Data from a given table
is partitioned into multiple storage objects based on the specifications provided in
Table partitioning offers easy roll-in and roll-out of table data, easier
administration, flexible index placement and better query processing.
The following column types are not supported for use in partitioned tables:
v XML
v DATALINK
Related concepts:
v “Table partitioning” on page 93
v “Table partitioning keys” on page 96
v “Data partitions” on page 92
v “Data organization schemes in DB2 and Informix databases” on page 105
Related tasks:
v “Adding data partitions to partitioned tables” in Administration Guide:
Implementation
v “Altering partitioned tables” in Administration Guide: Implementation
v “Altering a table” in Administration Guide: Implementation
v “Creating partitioned tables” in Administration Guide: Implementation
v “Dropping a data partition” in Administration Guide: Implementation
v “Attaching a data partition” in Administration Guide: Implementation
v “Detaching a data partition” in Administration Guide: Implementation
v “Rotating data in a partitioned table” in Administration Guide: Implementation
v “Approaches to defining ranges on partitioned tables” in Administration Guide:
Implementation
Related reference:
v “Examples of rolling in and rolling out partitioned table data” in Administration
Guide: Implementation
v “CREATE TABLE statement” in SQL Reference, Volume 2
v “Command Line Processor (CLP) samples” in Samples Topics
DB2 database provides a rich set of complementary features that map directly to
the Informix data organization schemes, making it relatively easy for customers to
convert from the Informix syntax to the DB2 syntax. The DB2 database manager
handles complicated Informix schemes using a combination of generated columns
and the PARTITION BY RANGE clause of the CREATE TABLE statement. Table 23
compares data organizations schemes used in Informix and DB2 database products.
Table 23. A mapping of all Informix and DB2 data organization schemes
Data organization scheme Informix syntax DB2 Version 9.1 syntax
Examples:
The following examples provide details on how to accomplish DB2 database
equivalent outcomes for any Informix fragment by expression scheme.
Example 1: The following basic create table statement shows Informix fragmentation
and the equivalent table partitioning syntax for a DB2 database system:
Informix syntax:
CREATE TABLE demo(a INT) FRAGMENT BY EXPRESSION
a = 1 IN db1,
a = 2 IN db2,
a = 3 IN db3;
DB2 syntax:
The DB2 database system achieves the equivalent organization scheme to the
Informix hybrid using a combination of the DISTRIBUTE BY and PARTITION BY
clauses of the CREATE TABLE statement.
Example 2:The following example shows the syntax for the combined clauses:
Informix syntax
CREATE TABLE demo(a INT, b INT) FRAGMENT BY HYBRID HASH(a)
EXPRESSION b = 1 IN dbsl1,
b = 2 IN dbsl2;
DB2 syntax
CREATE TABLE demo(a INT, b INT) IN dbsl1, dbsl2
DISTRIBUTE BY HASH(a),
PARTITION BY RANGE(b) (STARTING 1 ENDING 2 EVERY 1);
In addition, you can use multidimensional clustering to gain an extra level of data
organization:
CREATE TABLE demo(a INT, b INT, c INT) IN dbsl1, dbsl2
DISTRIBUTE BY HASH(a),
PARTITION BY RANGE(b) (STARTING 1 ENDING 2 EVERY 1)
ORGANIZE BY DIMENSIONS(c);
Thus, all rows with the same value of column a are in the same database partition.
All rows with the same value of column b are in the same table space. For a given
value of a and b, all rows with the same value c are clustered together on disk.
This approach is ideal for OLAP-type drill-down operations, because only one or
several extents (blocks)in a single table space on a single database partition must
be scanned to satisfy this type of query.
The following sections discuss how to apply the various features of DB2 table
partitioning to common application problems. In each section, particular attention
is given to best practices for mapping various Informix fragmentation schemes into
equivalent DB2 table partitioning schemes.
Examples:
This creates 24 ranges, one for each month in 1992-1993. Attempting to insert a row
with l_shipdate outside of that range results in an error.
Notice that the Informix syntax provides an open ended range at the top and
bottom to catch dates that are not in the expected range. The DB2 syntax can be
modified to match the Informix syntax by adding ranges that make use of
MINVALUE and MAXVALUE.
Consider the following usage guidelines before deciding whether to use this
approach:
v The generated column is a real column that occupies physical disk space. Tables
that make use of a generated column can be slightly larger.
v Altering the generated column expression for the column on which a partitioned
table is partitioned is not supported. Attempting to do so will result in the
message SQL0190. Adding a new data partition to a table that uses generated
columns in the manner described in the next section generally requires you to
alter the expression that defines the generated column. Altering the expression
that defines a generated column is not currently supported.
v There are limitations on when you can apply data partition elimination when a
table uses generated columns.
Examples:
Example 2: In this example, the DB2 table is partitioned using a generated column:
CREATE TABLE customer (
cust_id INT,
cust_prov CHAR(2),
cust_prov_gen GENERATED ALWAYS AS (CASE
WHEN cust_prov = ’AB’ THEN 1
WHEN cust_prov = ’BC’ THEN 2
WHEN cust_prov = ’MB’ THEN 3
...
WHEN cust_prov = ’YT’ THEN 13
ELSE 14 END))
IN tbspace_ab, tbspace_bc, tbspace_mb, .... tbspace_remainder
PARTITION BY RANGE (cust_prov_gen)
(STARTING 1 ENDING 14 EVERY 1);
Here the expressions within the case statement match the corresponding
expressions in the FRAGMENT BY EXPRESSION clause. The case statement maps
each original expression to a number, which is stored in the generated column
(cust_prov_gen in this example). This column is a real column stored on disk, so
the table could occupy slightly more space than would be necessary if DB2
supported partition by expression directly. This example uses the short form of the
syntax. Therefore, the table spaces in which to place the data partitions must be
listed in the IN clause of the CREATE TABLE statement. Using the long form of
the syntax requires a separate IN clause for each data partition.
Related concepts:
v “Data partitions” on page 92
v “Partitioned database environments” on page 41
v “Partitioned tables” on page 104
v “Table partitioning” on page 93
v “Optimization strategies for partitioned tables” in Performance Guide
v “Understanding clustering index behavior on partitioned tables” in Performance
Guide
v “Understanding index behavior on partitioned tables” in Performance Guide
v “Attributes of detached data partitions” in Administration Guide: Implementation
v “Database partitioning across multiple database partitions” in SQL Reference,
Volume 1
v “Large object behavior in partitioned tables” in SQL Reference, Volume 1
Related tasks:
v “Adding data partitions to partitioned tables” in Administration Guide:
Implementation
v “Altering partitioned tables” in Administration Guide: Implementation
v “Creating partitioned tables” in Administration Guide: Implementation
v “Dropping a data partition” in Administration Guide: Implementation
v “Enabling database partitioning in a database” in Administration Guide:
Implementation
v “Approaches to migrating existing tables and views to partitioned tables” in
Administration Guide: Implementation
v “Attaching a data partition” in Administration Guide: Implementation
v “Detaching a data partition” in Administration Guide: Implementation
v “Rotating data in a partitioned table” in Administration Guide: Implementation
v “Approaches to defining ranges on partitioned tables” in Administration Guide:
Implementation
Related reference:
v “Examples of rolling in and rolling out partitioned table data” in Administration
Guide: Implementation
v “CREATE TABLE statement” in SQL Reference, Volume 2
v “Guidelines and restrictions on altering partitioned tables with attached or
detached data partitions” in Administration Guide: Implementation
By using replicated materialized query tables, you can obtain collocation between
tables that are not typically collocated. Replicated materialized query tables are
particularly useful for joins in which you have a large fact table and small
dimension tables. To minimize the extra storage required, as well as the impact of
having to update every replica, tables that are to be replicated should be small and
updated infrequently.
Note: You should also consider replicating larger tables that are updated
infrequently: the one-time cost of replication is offset by the performance
benefits that can be obtained through collocation.
Related concepts:
v “Database partition group design” on page 87
v “The Design Advisor” in Performance Guide
Related tasks:
v “Creating a materialized query table” in Administration Guide: Implementation
Related reference:
v “CREATE TABLE statement” in SQL Reference, Volume 2
Since table spaces reside in database partition groups, the table space selected to
hold a table defines how the data for that table is distributed across the database
partitions in a database partition group. A single table space can span several
containers. It is possible for multiple containers (from one or more table spaces) to
be created on the same physical disk (or drive). For improved performance, each
container should use a different disk. Figure 27 illustrates the relationship between
tables and table spaces within a database, and the containers associated with that
database.
Database
Database partition group
HUMANRES SCHED
table space table space
The database manager attempts to balance the data load across containers. As a
result, all containers are used to store data. The number of pages that the database
manager writes to a container before using a different container is called the extent
size. The database manager does not always start storing table data in the first
container.
Figure 28 shows the HUMANRES table space with an extent size of two 4 KB
pages, and four containers, each with a small number of allocated extents. The
DEPARTMENT and EMPLOYEE tables both have seven pages, and span all four
containers.
In a partitioned database environment, the catalog node will contain all three
default table spaces, and the other database partitions will each contain only
TEMPSPACE1 and USERSPACE1.
There are two types of table space, both of which can be used in a single database:
v System managed space, in which the operating system’s file manager controls
the storage space.
v Database managed space, in which the database manager controls the storage
space.
Related concepts:
v “Catalog table space design” on page 163
v “Comparison of SMS and DMS table spaces” on page 140
v “Database managed space” on page 120
v “Extent size” on page 144
v “Relationship between table spaces and buffer pools” on page 145
Related tasks:
v “Optimizing table space performance when data is on RAID devices” on page
164
v “Creating a table space” in Administration Guide: Implementation
Related reference:
v “CREATE TABLE statement” in SQL Reference, Volume 2
v “CREATE TABLESPACE statement” in SQL Reference, Volume 2
The SYSTOOLSPACE table space is created the first time any of the above are used
(except for DB2LOOK, ALTOBJ, ADMIN_COPY_SCHEMA and
ADMIN_DROP_SCHEMA).
The SYSTOOLSTMPSPACE table space is a user temporary table space used by the
REORGCHK_TB_STATS, REORGCHK_IX_STATS and the ADMIN_CMD stored
procedures for storing temporary data. The SYSTOOLSTMPSPACE table space will
be created the first time any of these stored procedures is invoked (except for
ADMIN_CMD).
If the default definition for either table space is not preferred, you can create the
table spaces manually (or drop and recreate them if they have already been created
automatically). The table space definitions may vary (for example, you can use a
DMS or SMS table space, or you can enable or disable automatic storage), however
the table spaces must be created in the IBMCATGROUP database partition group.
If you attempt to create them in any other database partition group, error
SQL1258N will be returned.
Related concepts:
v “The Design Advisor” in Performance Guide
v “Automatic reorganization” on page 32
Related tasks:
v “Using automatic statistics collection” in Performance Guide
Related reference:
v “ADMIN_COPY_SCHEMA procedure – Copy a specific schema and its objects”
in Administrative SQL Routines and Views
v “ADMIN_DROP_SCHEMA procedure – Drop a specific schema and its objects”
in Administrative SQL Routines and Views
v “ALTOBJ procedure” in Administrative SQL Routines and Views
v “db2look - DB2 statistics and DDL extraction tool command” in Command
Reference
v “Health indicators summary” in System Monitor Guide and Reference
v “Storage management view” on page 146
v “GET_DBSIZE_INFO procedure” in Administrative SQL Routines and Views
v “SYSINSTALLOBJECTS procedure” in Administrative SQL Routines and Views
Each table has at least one SMS physical file associated with it.
The data in the table spaces is striped by extent across all the containers in the
system. An extent is a group of consecutive pages defined to the database. The file
extension denotes the type of the data stored in the file. To distribute the data
evenly across all containers in the table space, the starting extents for tables are
placed in round-robin fashion across all containers. Such distribution of extents is
particularly important if the database contains many small tables.
In an SMS table space, space for tables is allocated on demand. The amount of
space that is allocated is dependent on the setting of the multipage_alloc database
configuration parameter. If this configuration parameter is set to YES, then a full
extent (typically made up of two or more pages) will be allocated when space is
required. Otherwise, space will be allocated one page at a time.
Multi-page file allocation only affects the data and index portions of a table. This
means that the .LF, .LB, and .LBA files are not extended one extent at a time.
When all space in a single container in an SMS table space is allocated to tables,
the table space is considered full, even if space remains in other containers. You
can add containers to an SMS table space only on a database partition that does
not yet have any containers.
SMS table spaces are defined using the MANAGED BY SYSTEM option on the
CREATE DATABASE command, or on the CREATE TABLESPACE statement. You
must consider two key factors when you design your SMS table spaces:
v Containers for the table space.
You must specify the number of containers that you want to use for your table
space. It is very important to identify all the containers you want to use, because
you cannot add or delete containers after an SMS table space is created. In a
partitioned database environment, when a new database partition is added to
the database partition group for an SMS table space, the ALTER TABLESPACE
statement can be used to add containers to the new database partition.
Each container used for an SMS table space identifies an absolute or relative
directory name. Each of these directories can be located on a different file system
(or physical disk). The maximum size of the table space can be estimated by:
number of containers * (maximum file system size
supported by the operating system)
This formula assumes that there is a distinct file system mapped to each
container, and that each file system has the maximum amount of space available.
In practice, this may not be the case, and the maximum table space size may be
much smaller. There are also SQL limits on the size of database objects, which
may affect the maximum size of a table space.
Note: Care must be taken when defining the containers. If there are existing files
or directories on the containers, an error (SQL0298N) is returned.
v Extent size for the table space.
The extent size can be specified only when the table space is created. Because it
cannot be changed later, it is important to select an appropriate value for the
extent size.
If you do not specify the extent size when creating a table space, the database
manager will create the table space using the default extent size, defined by the
dft_extent_sz database configuration parameter. This configuration parameter is
initially set based on information provided when the database is created. If the
dft_extent_sz parameter is not specified on the CREATE DATABASE command,
the default extent size will be set to 32.
To choose appropriate values for the number of containers and the extent size for
the table space, you must understand:
v The limitation that your operating system imposes on the size of a logical file
system.
For example, some operating systems have a 2 GB limit. Therefore, if you want a
64 GB table object, you will need at least 32 containers on this type of system.
When you create the table space, you can specify containers that reside on
different file systems and, as a result, increase the amount of data that can be
stored in the database.
v How the database manager manages the data files and containers associated
with a table space.
The first table data file (SQL00001.DAT) is created in the first container specified
for the table space, and this file is allowed to grow to the extent size. After it
reaches this size, the database manager writes data to SQL00001.DAT in the next
container. This process continues until all of the containers contain SQL00001.DAT
files, at which time the database manager returns to the first container. This
process (known as striping) continues through the container directories until a
Note: The SMS table space is full as soon as any one of its containers is full.
Thus, it is important to have the same amount of space available to each
container.
To help distribute data across the containers more evenly, the database manager
determines which container to use first by taking the table identifier
(SQL00001.DAT in the above example) and factoring into account the number of
containers. Containers are numbered sequentially, starting at 0.
Related concepts:
v “Comparison of SMS and DMS table spaces” on page 140
v “Database managed space” on page 120
v “Table space design” on page 112
Related reference:
v “db2empfa - Enable multipage file allocation command” in Command Reference
v “multipage_alloc - Multipage file allocation enabled configuration parameter” in
Performance Guide
In an SMS table space, space for tables is allocated on demand. The amount of
space that is allocated is dependent on the setting of the multipage_alloc database
configuration parameter. If this configuration parameter is set to YES, then a full
extent (typically made up of two or more pages) will be allocated when space is
required. Otherwise, space will be allocated one page at a time. Multipage file
allocation is enabled by default. Prior to version 8.2, the default setting of the
configuration parameter was NO which caused one page to be allocated at a time.
This default could be changed with the db2empfa tool which allows you to enable
multipage file allocation. When you run db2empfa, the multipage_alloc database
configuration parameter is set to YES.
Multi-page file allocation only affects the data and index portions of a table. This
means that the .LF, .LB, and .LBA files are not extended one extent at a time.
When all space in a single container in an SMS table space is allocated to tables,
the table space is considered full, even if space remains in other containers. You
can add containers to an SMS table space only on a database partition that does
not yet have any containers.
Related concepts:
v “Comparison of SMS and DMS table spaces” on page 140
v “Table space design” on page 112
Related tasks:
v “Adding a container to an SMS table space on a database partition” in
Administration Guide: Implementation
Related reference:
v “db2empfa - Enable multipage file allocation command” in Command Reference
v “multipage_alloc - Multipage file allocation enabled configuration parameter” in
Performance Guide
DMS table spaces are different from SMS table spaces in that space for DMS table
spaces is allocated when the table space is created. For SMS table spaces, space is
allocated as needed. A DMS table space containing user defined tables and data
can be defined as a regular or large table space that stores any table data or index
data.
When designing your DMS table spaces and containers, you should consider the
following:
v The database manager uses striping to ensure an even distribution of data across
all containers.
v The maximum size of a regular table space is 512 GB for 32 KB pages. The
maximum size of a large table space is 16TB. See SQL and XQuery limits for the
maximum size of regular table spaces for other page sizes.
v Unlike SMS table spaces, the containers that make up a DMS table space do not
need to be the same size; however, this is not normally recommended, because it
results in uneven striping across the containers, and sub-optimal performance. If
any container is full, DMS table spaces use available free space from other
containers.
v Because space is pre-allocated, it must be available before the table space can be
created. When using device containers, the device must also exist with enough
space for the definition of the container. Each device can have only one
container defined on it. To avoid wasted space, the size of the device and the
size of the container should be equivalent. If, for example, the device is allocated
with 5 000 pages, and the device container is defined to allocate 3 000 pages,
2 000 pages on the device will not be usable.
v By default, one extent in every container is reserved for overhead. Only full
extents are used, so for optimal space management, you can use the following
formula to determine an appropriate size to use when allocating a container:
where extent_size is the size of each extent in the table space, and n is the
number of extents that you want to store in the container.
v The minimum size of a DMS table space is five extents. Attempting to create a
table space smaller than five extents will result in an error (SQL1422N).
– Three extents in the table space are reserved for overhead.
– At least two extents are required to store any user table data. (These extents
are required for the regular data for one table, and not for any index, long
field or large object data, which require their own extents.)
v Device containers must use logical volumes with a “character special interface,”
not physical volumes.
v You can use files instead of devices with DMS table spaces. No operational
difference exists between a file and a device; however, a file can be less efficient
because of the run-time overhead associated with the file system. Files are useful
when:
– Devices are not directly supported
– A device is not available
– Maximum performance is not required
– You do not want to set up devices.
v If your workload involves LOBs or LONG VARCHAR data, you may derive
performance benefits from file system caching.
Note: LOBs and LONG VARCHARs are not buffered by the database manager’s
buffer pool.
v Some operating systems allow you to have physical devices greater than 2 GB in
size. You should consider dividing the physical device into multiple logical
devices, so that no container is larger than the size allowed by the operating
system.
Note: Like SMS table spaces, DMS file containers can take advantage of file system
prefetching and caching. However, DMS table spaces that use raw device
containers cannot.
When working with DMS table spaces, you should consider associating each
container with a different disk. This allows for a larger table space capacity and the
ability to take advantage of parallel I/O operations.
The CREATE TABLESPACE statement creates a new table space within a database,
assigns containers to the table space, and records the table space definition and
attributes in the catalog. When you create a table space, the extent size is defined
as a number of contiguous pages. The extent is the unit of space allocation within
a table space. Only one table or object, such as an index, can use the pages in any
The first extent in the logical table space address map is a header for the table
space containing internal control information. The second extent is the first extent
of Space Map Pages (SMP) for the table space. SMP extents are spread at regular
intervals throughout the table space. Each SMP extent is a bit map of the extents
from the current SMP extent to the next SMP extent. The bit map is used to track
which of the intermediate extents are in use.
The next extent following the SMP is the object table for the table space. The object
table is an internal table that tracks which user objects exist in the table space and
where their first Extent Map Page (EMP) extent is located. Each object has its own
EMPs which provide a map to each page of the object that is stored in the logical
table space address map. Figure 29 shows how extents are allocated in a logical
table space address map.
Related concepts:
v “Comparison of SMS and DMS table spaces” on page 140
v “How containers are added and extended in DMS table spaces” on page 129
v “System managed space” on page 117
v “Table space design” on page 112
v “Table space maps” on page 125
DMS table spaces differ from SMS table spaces in that for DMS table spaces, space
is allocated when the table space is created and not allocated when needed.
Also, placement of data can differ on the two types of table spaces. For example,
consider the need for efficient table scans: it is important that the pages in an
extent are physically contiguous. With SMS, the file system of the operating system
decides where each logical file page is physically placed. The pages may, or may
not, be allocated contiguously depending on the level of other activity on the file
system and the algorithm used to determine placement. With DMS, however, the
database manager can ensure the pages are physically contiguous because it
interfaces with the disk directly.
Note: Like SMS table spaces, DMS file containers can take advantage of file-system
prefetching and caching. However, DMS table spaces cannot.
Unlike SMS table spaces, the containers that make up a DMS table space do not
need to be close to being equal in their capacity. However, it is recommended that
the containers are equal, or close to being equal, in their capacity. Also, if any
container is full, any available free space from other containers can be used in a
DMS table space.
When working with DMS table spaces, you should consider associating each
container with a different disk. This allows for a larger table space capacity and the
ability to take advantage of parallel I/O operations.
The CREATE TABLESPACE statement creates a new table space within a database,
assigns containers to the table space, and records the table space definition and
attributes in the catalog. When you create a table space, the extent size is defined
as a number of contiguous pages. The extent is the unit of space allocation within
a table space. Only one table or other object, such as an index, can use the pages in
any single extent. All objects created in the table space are allocated extents in a
logical table space address map. Extent allocation is managed through Space Map
Pages (SMP).
The first extent in the logical table space address map is a header for the table
space containing internal control information. The second extent is the first extent
The next extent following the SMP is the object table for the table space. The object
table is an internal table that tracks which user objects exist in the table space and
where their first Extent Map Page (EMP) extent is located. Each object has its own
EMPs which provide a map to each page of the object that is stored in the logical
table space address map.
Related concepts:
v “Comparison of SMS and DMS table spaces” on page 140
v “Database directories and files” on page 73
v “Database managed space” on page 120
v “DMS device considerations” on page 124
v “SMS table spaces” on page 119
v “Table space design” on page 112
Related tasks:
v “Adding a container to a DMS table space” in Administration Guide:
Implementation
Related reference:
v “CREATE TABLESPACE statement” in SQL Reference, Volume 2
Related concepts:
v “DMS table spaces” on page 123
v “SMS table spaces” on page 119
v “Database directories and files” on page 73
In a DB2 Database for Linux, UNIX, and Windows database, pages in a DMS table
space are logically numbered from 0 to (N-1), where N is the number of usable
pages in the table space.
The pages in a DMS table space are grouped into extents, based on the extent size,
and from a table space management perspective, all object allocation is done on an
extent basis. That is, a table might use only half of the pages in an extent but the
whole extent is considered to be in use and owned by that object. By default, one
extent is used to hold the container tag, and the pages in this extent cannot be
used to hold data. However, if the DB2_USE_PAGE_CONTAINER_TAG registry
variable is turned on, only one page is used for the container tag.
The following figure shows the logical address map for a DMS table space.
Within the table space address map there are two types of map pages: extent map
pages (EMP) and space map pages (SMP).
The object table is an internal relational table that maps an object identifier to the
location of the first EMP extent in the table. This EMP extent, directly or indirectly,
maps out all extents in the object. Each EMP contains an array of entries. Each
entry maps an object-relative extent number to a table space-relative page number
where the object extent is located. Direct EMP entries directly map object-relative
addresses to table space-relative addresses. The last EMP page in the first EMP
extent contains indirect entries. Indirect EMP entries map to EMP pages which
then map to object pages. The last 16 entries in the last EMP page in the first EMP
extent contain double-indirect entries.
The extents from the logical table-space address map are striped in round-robin
order across the containers associated with the table space.
Because space in containers is allocated by extent, pages that do not make up a full
extent will not be used. For example, if you have a 205-page container with an
extent size of 10, one extent will be used for the tag, 19 extents will be available for
data, and the five remaining pages are wasted.
If a DMS table space contains a single container, the conversion from logical page
number to physical location on disk is a straightforward process where pages 0, 1,
2, are located in that same order on disk.
It is also a fairly straightforward process when there is more than one container
and each of the containers is the same size. The first extent in the table space,
containing pages 0 to (extent size - 1), is located in the first container, the second
extent will be located in the second container, and so on. After the last container,
the process repeats starting back at the first container. This cyclical process keeps
the data balanced.
126 Administration Guide: Planning
For table spaces containing containers of different sizes, a simple approach that
proceeds through each container in turn cannot be used as it will not take
advantage of the extra space in the larger containers. This is where the table space
map comes in – it dictates how extents are positioned within the table space,
ensuring that all of the extents in the physical containers are available for use.
Note: In the following examples, the container sizes do not take the size of the
container tag into account. The container sizes are very small, and are just
used for the purpose of illustration, they are not recommended container
sizes. The examples show containers of different sizes within a table space,
but you are advised to use containers of the same size.
Example 1:
There are 3 containers in a table space, each container contains 80 usable pages,
and the extent size for the table space is 20. Each container therefore has 4 extents
(80 / 20) for a total of 12 extents. These extents are located on disk as shown in
Figure 31.
Table space
Container 0 Container 1 Container 2
To see a table space map, take a table space snapshot using the snapshot monitor.
In Example 1, where the three containers are of equal size, the table space map
looks like this:
A range is the piece of the map in which a contiguous range of stripes all contain
the same set of containers. In Example 1, all of the stripes (0 to 3) contain the same
set of 3 containers (0, 1, and 2) and therefore this is considered a single range.
The headings in the table space map are Range Number, Stripe Set, Stripe Offset,
Maximum extent number addressed by the range, Maximum page number
addressed by the range, Start Stripe, End Stripe, Range adjustment, and Container
list. These will be explained in more detail for Example 2.
Containers
0 1 2
Figure 32. Table space with three containers and 12 extents, with stripes highlighted
Example 2:
There are two containers in the table space: the first is 100 pages in size, the
second is 50 pages in size, and the extent size is 25. This means that the first
container has four extents and the second container has two extents. The table
space can be diagrammed as shown in Figure 33.
Containers
0 1
0 Extent 0 Extent 1
Range 0
1 Extent 2 Extent 3
Stripes
2 Extent 4
Range 1
3 Extent 5
Figure 33. Table space with two containers, with ranges highlighted
Stripes 0 and 1 contain both of the containers (0 and 1) but stripes 2 and 3 only
contain the first container (0). Each of these sets of stripes is a range. The table
space map, as shown in a table space snapshot, looks like this:
There are two extents in the second range and because the maximum extent
number addressed in the previous range is 3, the maximum extent number
addressed in this range is 5. There are 50 pages (2 extents * 25 pages) in the second
range and because the maximum page number addressed in the previous range is
99, the maximum page number addressed in this range is 149. This range starts at
stripe 2 and ends at stripe 3.
Related concepts:
v “Snapshot monitor” in System Monitor Guide and Reference
v “Database managed space” on page 120
v “How containers are added and extended in DMS table spaces” on page 129
v “How containers are dropped and reduced in DMS table spaces” on page 137
Related reference:
v “GET SNAPSHOT command” in Command Reference
The ALTER TABLESPACE statement lets you add a container to an existing table
space or extend a container to increase its storage capacity.
When new containers are added to a table space or existing containers are
extended, a rebalance of the table space data may occur.
Rebalancing
The process of rebalancing when adding or extending containers involves moving
table space extents from one location to another, and it is done in an attempt to
keep data striped within the table space.
Access to the table space is not restricted during rebalancing; objects can be
dropped, created, populated, and queried as usual. However, the rebalancing
operation can have a significant impact on performance. If you need to add more
than one container, and you plan to rebalance the containers, you should add them
The table space high-water mark plays a key part in the rebalancing process. The
high-water mark is the page number of the highest allocated page in the table
space. For example, a table space has 1000 pages and an extent size of 10, resulting
in 100 extents. If the 42nd extent is the highest allocated extent in the table space,
then the high-water mark is 42 * 10 = 420 pages. This is not the same as used
pages because some of the extents below the high-water mark may have been
freed up so that they are available for reuse.
Before the rebalance starts, a new table space map is built based on the container
changes made. The rebalancer moves extents from their location determined by the
current map into the location determined by the new map. The rebalancer starts at
extent 0, moving one extent at a time until the extent holding the high-water mark
has been moved. As each extent is moved, the current map is altered, one piece at
a time, to look like the new map. When the rebalance is complete, the current map
and new map should look identical up to the stripe holding the high-water mark.
The current map is then made to look completely like the new map and the
rebalancing process is complete. If the location of an extent in the current map is
the same as its location in the new map, then the extent is not moved and no I/O
takes place.
When adding a new container, the placement of that container within the new map
depends on its size and the size of the other containers in its stripe set. If the
container is large enough such that it can start at the first stripe in the stripe set
and end at (or beyond) the last stripe in the stripe set, then it will be placed that
way (see “Example 2” on page 131). If the container is not large enough to do this,
it will be positioned in the map such that it ends in the last stripe of the stripe set
(see “Example 4” on page 133.) This is done to minimize the amount of data that
needs to be rebalanced.
Note: In the following examples, the container sizes do not take the size of the
container tag into account. The container sizes are very small, and are just
used for the purpose of illustration, they are not recommended container
sizes. The examples show containers of different sizes within a table space,
but you are advised to use containers of the same size.
Example 1:
If you create a table space with three containers and an extent size of 10, and the
containers are 60, 40, and 80 pages respectively (6, 4, and 8 extents), the table space
is created with a map that can be diagrammed as shown in Figure 34 on page 131.
0 1 2
5 Extent 14 Extent 15
6 Extent 16
7 Extent 17
The corresponding table space map, as shown in a table space snapshot, looks like
this:
The headings in the table space map are Range Number, Stripe Set, Stripe Offset,
Maximum extent number addressed by the range, Maximum page number
addressed by the range, Start Stripe, End Stripe, Range adjustment, and Container
list.
Example 2:
0 1 2 3
6 Extent 22 Extent 23
7 Extent 24 Extent 25
The corresponding table space map, as shown in a table space snapshot, will look
like this:
If the high-water mark is within extent 14, the rebalancer starts at extent 0 and
moves all of the extents up to and including 14. The location of extent 0 within
both of the maps is the same so this extent does not need to move. The same is
true for extents 1 and 2. Extent 3 does need to move so the extent is read from the
old location (second extent within container 0) and is written to the new location
(first extent within container 3). Every extent after this up to and including extent
14 is moved. Once extent 14 is moved, the current map looks like the new map
and the rebalancer terminates.
If the map is altered such that all of the newly added space comes after the
high-water mark, then a rebalance is not necessary and all of the space is available
immediately for use. If the map is altered such that some of the space comes after
the high-water mark, then the space in the stripes above the high-water mark is
available for use. The rest is not available until the rebalance is complete.
Example 3:
Consider the table space from Example 1. If you extend container 1 from 40 pages
to 80 pages, the new table space looks like Figure 36.
Containers
0 1 2
6 Extent 18 Extent 19
7 Extent 20 Extent 21
The corresponding table space map, as shown in a table space snapshot, looks like
this:
Example 4:
Consider the table space from “Example 1” on page 130. If a 50-page (5-extent)
container is added to it, the container will be added to the new map in the
following way. The container is not large enough to start in the first stripe (stripe
0) and end at or beyond the last stripe (stripe 7), so it is positioned such that it
ends in the last stripe. (See Figure 37 on page 134.)
0 1 2 3
6 Extent 19 Extent 20
7 Extent 21 Extent 22
The corresponding table space map, as shown in a table space snapshot, will look
like this:
Any change to a stripe set may cause a rebalance to occur to that stripe set and
any others following it.
You can monitor the progress of a rebalance by using table space snapshots. A
table space snapshot can provide information about a rebalance such as the start
time of the rebalance, how many extents have been moved, and how many extents
need to move.
Adding a container will almost always add space below the high-water mark. In
other words, a rebalance is often necessary when you add a container. There is an
option to force new containers to be added above the high-water mark, which
allows you to choose not to rebalance the contents of the table space. An
advantage of this method is that the new container will be available for immediate
use. The option not to rebalance applies only when you add containers, not when
you extend existing containers. When you extend containers you can only avoid
rebalancing if the space you add is above the high-water mark. For example, if you
have a number of containers that are the same size, and you extend each of them
by the same amount, the relative positions of the extents will not change, and a
rebalance will not occur.
To add containers without rebalancing, use the BEGIN NEW STRIPE SET option
on the ALTER TABLESPACE statement.
Example 5:
If you have a table space with three containers and an extent size of 10, and the
containers are 30, 40, and 40 pages (3, 4, and 4 extents respectively), the table space
can be diagrammed as shown in Figure 38.
Containers
0 1 2
3 Extent 9 Extent 10
The corresponding table space map, as shown in a table space snapshot, will look
like this:
Example 6:
When you add two new containers that are 30 pages and 40 pages (3 and 4 extents
respectively) with the BEGIN NEW STRIPE SET option, the existing ranges are not
affected; instead, a new set of ranges is created. This new set of ranges is a stripe
set and the most recently created one is called the current stripe set. After the two
new containers is added, the table space looks like Figure 39.
Containers
0 1 2 3 4
3 Extent 9 Extent 10
Stripes
4 Extent 11 Extent 12
5 Extent 13 Extent 14
Stripe
set #1
6 Extent 15 Extent 16
7 Extent 17
The corresponding table space map, as shown in a table space snapshot, looks like
this:
If you add new containers to a table space, and you do not use the TO STRIPE SET
option with the ADD clause, the containers are added to the current stripe set (the
highest stripe set). You can use the ADD TO STRIPE SET clause to add containers
to any stripe set in the table space. You must specify a valid stripe set.
Related concepts:
v “Table space maps” on page 125
Related tasks:
v “Adding a container to a DMS table space” in Administration Guide:
Implementation
v “Modifying containers in a DMS table space” in Administration Guide:
Implementation
Related reference:
v “Table space activity monitor elements” in System Monitor Guide and Reference
v “ALTER TABLESPACE statement” in SQL Reference, Volume 2
v “GET SNAPSHOT command” in Command Reference
The high-water mark is the page number of the highest allocated page in the table
space. For example, a table space has 1000 pages and an extent size of 10, resulting
in 100 extents. If the 42nd extent is the highest allocated extent in the table space
that means that the high-water mark is 42 * 10 = 420 pages. This is not the same as
used pages because some of the extents below the high-water mark may have been
freed up such that they are available for reuse.
When containers are dropped or reduced, a rebalance will occur if data resides in
the space being dropped from the table space. Before the rebalance starts, a new
table space map is built based on the container changes made. The rebalancer will
move extents from their location determined by the current map into the location
determined by the new map. The rebalancer starts with the extent that contains the
high-water mark, moving one extent at a time until extent 0 has been moved. As
each extent is moved, the current map is altered one piece at a time to look like the
new map. If the location of an extent in the current map is the same as its location
in the new map, then the extent is not moved and no I/O takes place. Because the
rebalance moves extents starting with the highest allocated one, ending with the
When containers are dropped, the remaining containers are renumbered such that
their container IDs start at 0 and increase by 1. If all of the containers in a stripe
set are dropped, the stripe set will be removed from the map and all stripe sets
following it in the map will be shifted down and renumbered such that there are
no gaps in the stripe set numbers.
Note: In the following examples, the container sizes do not take the size of the
container tag into account. The container sizes are very small, and are just
used for the purpose of illustration, they are not recommended container
sizes. The examples show containers of different sizes within a table space,
but this is just for the purpose of illustration; you are advised to use
containers of the same size.
For example, consider a table space with three containers and an extent size of 10.
The containers are 20, 50, and 50 pages respectively (2, 5, and 5 extents). The table
space diagram is shown in Figure 40.
Containers
0 1 2
3 x x
4 x x
Figure 40. Table space with 12 extents, including four extents with no data
If you want to drop container 0, which has two extents, there must be at least two
free extents above the high-water mark. The high-water mark is in extent 7,
leaving four free extents, therefore you can drop container 0.
The corresponding table space map, as shown in a table space snapshot, will look
like this:
Containers
0 1
0 Extent 0 Extent 1
1 Extent 2 Extent 3
3 Extent 6 Extent 7
4 x x
The corresponding table space map, as shown in a table space snapshot, will look
like this:
If you want to reduce the size of a container, the rebalancer works in a similar
way.
Related concepts:
v “Table space maps” on page 125
Related tasks:
v “Modifying containers in a DMS table space” in Administration Guide:
Implementation
Related reference:
v “ALTER TABLESPACE statement” in SQL Reference, Volume 2
v “GET SNAPSHOT command” in Command Reference
v “Table space activity monitor elements” in System Monitor Guide and Reference
Also, placement of data can differ on the two types of table spaces. For example,
consider the need for efficient table scans: it is important that the pages in an
extent are physically contiguous. With SMS, the file system of the operating system
decides where each logical file page is physically placed. The pages might be
allocated contiguously depending on the level of other activity on the file system
and the algorithm used to determine placement. With DMS, however, the database
manager can ensure the pages are physically contiguous because it interfaces with
the disk directly.
If you choose to use DMS table spaces with device containers, you must be willing
to tune and administer your environment.
Related concepts:
v “Database managed space” on page 120
v “System managed space” on page 117
v “Table space design” on page 112
How the extent is stored on disk affects I/O efficiency. In a DMS table space using
device containers, the data tends to be contiguous on disk, and can be read with a
minimum of seek time and disk latency. If files are being used, a large file that has
been pre-allocated for use by a DMS table space also tends to be contiguous on
disk, especially if the file was allocated in a clean file space. However, the data
may have been broken up by the file system and stored in more than one location
on disk. This occurs most often when using SMS table spaces, where files are
extended one page at a time, making fragmentation more likely.
You can control the degree of prefetching by changing the PREFETCHSIZE option
on the CREATE TABLESPACE or ALTER TABLESPACE statements. (The default
value for all table spaces in the database is set by the dft_prefetch_sz database
configuration parameter.) The PREFETCHSIZE parameter tells DB2 how many
pages to read whenever a prefetch is triggered. By setting PREFETCHSIZE to be a
multiple of the EXTENTSIZE parameter on the CREATE TABLESPACE statement,
you can cause multiple extents to be read in parallel. (The default value for all
table spaces in the database is set by the dft_extent_sz database configuration
parameter.) The EXTENTSIZE parameter specifies the number of 4 KB pages that
will be written to a container before skipping to the next container.
For example, suppose you had a table space that used three devices. If you set the
PREFETCHSIZE to be three times the EXTENTSIZE, DB2 can do a big-block read
from each device in parallel, thereby significantly increasing I/O throughput. This
assumes that each device is a separate physical device, and that the controller has
sufficient bandwidth to handle the data stream from each device. Note that DB2
may have to dynamically adjust the prefetch parameters at run time based on
query speed, buffer pool utilization, and other factors.
Some file systems use their own prefetching method (such as the Journaled File
System on AIX). In some cases, file system prefetching is set to be more aggressive
than DB2 prefetching. This may cause prefetching for SMS and DMS table spaces
with file containers to appear to outperform prefetching for DMS table spaces with
devices. This is misleading, because it is likely the result of the additional level of
prefetching that is occurring in the file system. DMS table spaces should be able to
outperform any equivalent configuration.
For prefetching (or even reading) to be efficient, a sufficient number of clean buffer
pool pages must exist. For example, there could be a parallel prefetch request that
reads three extents from a table space, and for each page being read, one modified
page is written out from the buffer pool. The prefetch request may be slowed
down to the point where it cannot keep up with the query. Page cleaners should
be configured in sufficient numbers to satisfy the prefetch request.
Related concepts:
v “Prefetching data into the buffer pool” in Performance Guide
v “Table space design” on page 112
Related reference:
v “ALTER TABLESPACE statement” in SQL Reference, Volume 2
v “CREATE TABLESPACE statement” in SQL Reference, Volume 2
DMS table spaces using device containers perform best in this situation. DMS table
spaces with file containers, or SMS table spaces, are also reasonable choices for
OLTP workloads if maximum performance is not required. With little or no
sequential I/O expected, the settings for the EXTENTSIZE and the PREFETCHSIZE
parameters on the CREATE TABLESPACE statement are not important for I/O
efficiency. However, setting a sufficient number of page cleaners, using the
chngpgs_thresh configuration parameter, is important.
A reasonable alternative for a query workload is to use files, if the file system has
its own prefetching. The files can be either of DMS type using file containers, or of
SMS type. Note that if you use SMS, you need to have the directory containers
map to separate physical disks to achieve I/O parallelism.
Your goal for a mixed workload is to make single I/O requests as efficient as
possible for OLTP workloads, and to maximize the efficiency of parallel I/O for
query workloads.
The considerations for determining the page size for a table space are as follows:
v For OLTP applications that perform random row read and write operations, a
smaller page size is usually preferable because it does not waste buffer pool
space with unwanted rows.
v For decision-support system (DSS) applications that access large numbers of
consecutive rows at a time, a larger page size is usually better because it reduces
the number of I/O requests that are required to read a specific number of rows.
There is, however, an exception to this. If your row size is smaller than:
pagesize / 255
there will be wasted space on each page (there is a maximum of 255 rows per
page). In this situation, a smaller page size may be more appropriate.
v Larger page sizes may allow you to reduce the number of levels in the index.
v Larger pages support rows of greater length.
v On default 4 KB pages, tables are restricted to 500 columns, while the larger
page sizes (8 KB, 16 KB, and 32 KB) support 1012 columns.
Related concepts:
v “Database managed space” on page 120
v “System managed space” on page 117
Related reference:
v “ALTER TABLESPACE statement” in SQL Reference, Volume 2
v “CREATE TABLESPACE statement” in SQL Reference, Volume 2
v “SQL and XQuery limits” in SQL Reference, Volume 1
v “chngpgs_thresh - Changed pages threshold configuration parameter” in
Performance Guide
Extent size
The extent size for a table space represents the number of pages of table data that
will be written to a container before data will be written to the next container.
When selecting an extent size, you should consider:
v The size and type of tables in the table space.
Space in DMS table spaces is allocated to a table one extent at a time. As the
table is populated and an extent becomes full, a new extent is allocated. DMS
table space container storage is prereserved which means that new extents are
allocated until the container is completely used.
Space in SMS table spaces is allocated to a table either one extent at a time or
one page at a time. As the table is populated and an extent or page becomes
full, a new extent or page is allocated until all of the extents or pages in the file
system are used. When using SMS table spaces, multipage file allocation is
allowed. Multipage file allocation allows extents to be allocated instead of a
page at a time.
Multipage file allocation is enabled by default. The value of the multipage_alloc
database configuration parameter will indicate if multipage file allocation is
enabled.
Related concepts:
v “Table space design” on page 112
Related reference:
v “CREATE TABLESPACE statement” in SQL Reference, Volume 2
v “db2empfa - Enable multipage file allocation command” in Command Reference
v “multipage_alloc - Multipage file allocation enabled configuration parameter” in
Performance Guide
Having more than one buffer pool allows you to configure the memory used by
the database to improve overall performance. For example, if you have a table
space with one or more large (larger than available memory) tables that are
accessed randomly by users, the size of the buffer pool can be limited, because
caching the data pages might not be beneficial. The table space for an online
transaction application might be associated with a larger buffer pool, so that the
data pages used by the application can be cached longer, resulting in faster
response times. Care must be taken in configuring new buffer pools.
Note: If you have determined that a page size of 8 KB, 16 KB, or 32 KB is required
by your database, each table space with one of these page sizes must be
mapped to a buffer pool with the same page size.
The storage required for all the buffer pools must be available to the database
manager when the database is started. If DB2 Database for Linux, UNIX, and
Windows is unable to obtain the required storage, the database manager will start
up with default buffer pools (one each of 4 KB, 8 KB, 16 KB, and 32 KB page
sizes), and issue a warning.
Related concepts:
v “Table spaces and other storage structures” in SQL Reference, Volume 1
Related reference:
v “ALTER BUFFERPOOL statement” in SQL Reference, Volume 2
v “ALTER TABLESPACE statement” in SQL Reference, Volume 2
v “CREATE BUFFERPOOL statement” in SQL Reference, Volume 2
v “CREATE TABLESPACE statement” in SQL Reference, Volume 2
You cannot change the association between table space and database partition
group using the ALTER TABLESPACE statement. You can only change the table
space specification for individual database partitions within the database partition
group. In a single-partition environment, each table space is associated with the
default database partition group. The default database partition group, when
defining a table space, is IBMDEFAULTGROUP, unless a system temporary table
space is being defined; then IBMTEMPGROUP is used.
Related concepts:
v “Table spaces and other storage structures” in SQL Reference, Volume 1
v “Database partition groups” on page 85
v “Table space design” on page 112
Related reference:
v “CREATE DATABASE PARTITION GROUP statement” in SQL Reference, Volume
2
v “CREATE TABLESPACE statement” in SQL Reference, Volume 2
The Storage Management view also enables you to set thresholds for data skew,
space usage, and index cluster ratio. If a target object exceeds a specified threshold,
the icons beside the object and its parent object in the Storage Management view
are marked with a warning flag or an alarm flag.
Note: You can only set data skew thresholds for partitioned databases.
Use the Storage Management launchpad to guide you through the tasks necessary
to set up the Storage Management tool. The Storage Management tool provides
you with the ability to manage the storage of a specific database or database
partition over the long term. It also allows you to capture data distribution
snapshots and to view storage history. Three stored procedure functions are
automatically created for the storage management tool when the database is
created: SYSPROC.CREATE_STORAGEMGMT_TABLES,
SYSPROC.DROP_STORAGEMGMT_TABLES, and
SYSPROC.CAPTURE_STORAGEMGMT_INFO. Their respective packages are
bound on demand.
Note: You can open the Storage Management Setup launchpad from a database,
database partition group, or table space object in the Control Center. The
launchpad will lead you through the one-time-only setup process for using
the Storage Management tool. After you have captured a snapshot for the
selected object or its parent object using the Storage Management Setup
launchpad, you will be able to open the Storage Management view.
Related reference:
v “CAPTURE_STORAGEMGMT_INFO procedure – Retrieve storage-related
information for a given root object” in Administrative SQL Routines and Views
v “CREATE_STORAGEMGMT_TABLES procedure – Create storage management
tables” in Administrative SQL Routines and Views
v “DROP_STORAGEMGMT_TABLES procedure – Drop all storage management
tables” in Administrative SQL Routines and Views
v “Storage management view tables” on page 148
Related reference:
v “Storage management view” on page 146
The STMG_OBJECT_TYPE table contains one row for each supported storage type
that can be monitored.
STMG_THRESHOLD_REGISTRY table:
The STMG_THRESHOLD_REGISTRY table contains one row for each storage
threshold type. The enabled thresholds are used by the analysis process when a
storage snapshot is taken. If a threshold type is enabled, the threshold analysis will
be performed on the data being monitored and threshold exceeded columns will
be updated with the appropriate values for the specified threshold type.
Example::
To disable threshold analysis for table space space usage:
db2 UPDATE SYSTOOLS.STMG_THRESHOLD_REGISTRY SET ENABLED = ’N’
WHERE STMG_TH_TYPE = 1
Table 26. STMG_THRESHOLD_REGISTRY table
Column name Data type Nullable Description
STMG_TH_TYPE INTEGER N Integer value corresponds to a storage
threshold type
1 = STMG SPACE USAGE
THRESHOLD
2 = STMG DATA SKEW
THRESHOLD
3 = STMG CLUSTER RATIO
THRESHOLD
ENABLED CHARACTER N Y = the threshold is enabled
STMG_CURR_THRESHOLD table:
The STMG_CURR_THRESHOLD table contains one row for each threshold type
which is explicitly set for a storage object. When a new storage snapshot is taken,
and threshold analysis is enabled for the objects being captured (see the Table 26),
the values in this table are used to determine the warning and alarm thresholds
that are set for each type of threshold being monitored. If an object under analysis
does not have thresholds explicitly set in this table, the thresholds for the parent
STMG_ROOT_OBJECT table:
The STMG_ROOT_OBJECT table contains one row for the root object of each
storage snapshot. Complete storage snapshots can be deleted by deleting entries
from this table.
Examples::
1. Delete all storage management snapshots:
db2 DELETE FROM SYSTOOLS.STMG_ROOT_OBJECT
2. Delete all table space snapshots:
db2 DELETE FROM SYSTOOLS.STMG_ROOT_OBJECT WHERE OBJ_TYPE = 2
The STMG_OBJECT table contains one row for each storage object that is analyzed
by the storage snapshots taken so far.
STMG_HIST_THRESHOLD table:
The STMG_HIST_THRESHOLD table contains one row for each threshold used for
the analyzing the storage objects at the time the storage snapshots are taken. This
is basically a snapshot of what was in the SYSTOOLS.STMG_CURR_THRESHOLD
table at the time of the snapshot.
STMG_DATABASE table:
The STMG_DATABASE table contains one row for each detailed entry of database
storage snapshots.
Table 31. STMG_DATABASE table
Column name Data type Nullable Description
STMG_TIMESTAMP (PK) TIMESTAMP N The timestamp of the storage
snapshot. It indicates when the data
capturing process started.
OBJ_ID (PK) VARCHAR N The unique identifier for each storage
object under a given storage snapshot
timestamp.
COMPLETE_TIMESTAMP TIMESTAMP Y The timestamp of when the data
capturing process has completed for
the database, identified by OBJ_ID
column.
REMARKS VARCHAR Y User-specified remarks.
STMG_DBPGROUP table:
The STMG_DBPGROUP table contains one row for each detailed entry of database
partition group storage snapshots.
STMG_DBPARTITION table:
The STMG_DBPARTITION table contains one row for each detailed entry of
database partition storage snapshots. This is meant to be used along with the
STMG_DBPGROUP table.
STMG_TABLESPACE table:
The STMG_TABLESPACE table contains one row for each detailed entry of table
space storage snapshots.
STMG_CONTAINER table:
The STMG_CONTAINER table contains one row for each detailed entry of
container storage snapshots.
STMG_TABLE table:
The STMG_TABLE table contains one or more rows for each table included in the
specified snapshot type. A database snapshot would insert entries for each table in
the database. A table space snapshot would insert one or more rows for each table
in the specified table space, a table snapshot would insert entries for the table
specified in the snapshot command.
For non-partitioned tables, there would be exactly one row per table. For
partitioned tables, there would one row per table space that the table resides in.
For example, if a partitioned table was spread over 5 table spaces, there would be
5 rows in the STMG_TABLE for that table. Each row would contain information
specific to a table space with one exception: Information that relates to table totals
for partitioned tables are a summation of values taken from all the table spaces;
each row would show the same value where a table total is kept.
STMG_TBPARTITION table:
The STMG_TBPARTITION table contains one row for each detailed entry of table
partition storage snapshots.
STMG_INDEX table:
The STMG_INDEX table contains one row for each detailed entry of index storage
snapshots.
STMG_OBJ_HISTORICAL_THRESHOLDS view:
Related reference:
v “Storage management view” on page 146
Thresholds
For storage management, thresholds are used to monitor the storage usage of your
database. In the Storage Management view, you can set warning and alarm
thresholds for the Storage Management tool to compare against the real time
readings of the system. If an object’s storage state exceeds the safe levels, or
thresholds, that you have set for it, an alert flag will be shown beside the object in
the Storage Management view.
When a database is created, there are default thresholds set for the database object.
All of its children (objects within the database scope) inherent the default
threshold. However, you can overwrite the default thresholds by providing specific
values for any of the objects. Once a threshold is set for an object, all the objects
defined under its scope will inherit its threshold setting, unless otherwise specified.
The Storage Management view monitors three types of thresholds: space usage,
data skew, and cluster ratio.
v Space usage measures the percentage of available storage space that is used by
an object. Space usage is monitored through table spaces. The space usage of an
object is represented as a percentage of total storage space, with a value of 0 to
100.
v Data skew measures the distribution of data by measuring an object’s deviation
from the average data level, as a percentage. The data skew is monitored
through tables and database partition groups. When a data skew threshold is
exceeded, the Redistribute Data wizard can be used to even out data distribution
differences among the database partitions in the database partition group. The
disk skew of an object is represented as a percentage showing the object’s
deviation from the average data level, ranging from -100 to 100. A negative
integer indicates that the data level is less that the average data level; an positive
data level indicates that the data level is greater than the average.
v Cluster ratio measures the degree to which the rows in a table are arranged in
the same order specified by a given index. A higher cluster ratio indicates that
the data rows are stored in the same physical sequence as the index. A low
cluster ratio indicates the index and data rows are stored in a different physical
sequence. Cluster ratio is represented as a percentage, with a value of 0 to 100.
Related reference:
v “Storage management view” on page 146
User temporary table spaces hold temporary data from tables created with a
DECLARE GLOBAL TEMPORARY TABLE statement. To allow the definition of
declared temporary tables, at least one user temporary table space should be
created with the appropriate USE privileges. USE privileges are granted using the
GRANT statement. A user temporary table spaces is not created by default at
database creation time.
It is recommended that you define a single SMS temporary table space with a page
size equal to the page size used in the majority of your regular table spaces. This
should be suitable for typical environments and workloads. However, it can be
advantageous to experiment with different temporary table space configurations
and workloads. The following points should be considered:
v Temporary tables are in most cases accessed in batches and sequentially. That is,
a batch of rows is inserted, or a batch of sequential rows is fetched. Therefore, a
larger page size typically results in better performance, because fewer logical or
physical page I/O requests are required to read a given amount of data. This is
not always the case when the average temporary table row size is smaller than
the page size divided by 255. A maximum of 255 rows can exist on any page,
regardless of the page size. For example, a query that requires a temporary table
with 15-byte rows would be better served by a 4 KB temporary table space page
size, because 255 such rows can all be contained within a 4 KB page. An 8 KB
(or larger) page size would result in at least 4 KB (or more) bytes of wasted
space on each temporary table page, and would not reduce the number of
required I/O requests.
v If more than fifty percent of the regular table spaces in your database use the
same page size, it can be advantageous to define your temporary table spaces
with the same page size. The reason for this is that this arrangement enables
your temporary table space to share the same buffer pool space with most or all
of your regular table spaces. This, in turn, simplifies buffer pool tuning.
v When reorganizing a table using a temporary table space, the page size of the
temporary table space must match that of the table. For this reason, you should
ensure that there are temporary table spaces defined for each different page size
used by existing tables that you may reorganize using a temporary table space.
Related concepts:
v “System managed space” on page 117
v “Table space design” on page 112
v “Temporary tables in SMS table spaces” on page 162
Related reference:
v “REORG INDEXES/TABLE command” in Command Reference
By default, files that hold temporary tables are truncated to a zero length or to the
extent size specified in the DB2_SMS_TRUNC_TMPTABLE_THRESH registry
variable once they are no longer needed. You can set the number of extents to be
used by specifying a value for the DB2_SMS_TRUNC_TMPTABLE_THRESH
registry variable. You should increase the value associated with this registry
variable if your workload repeatedly uses large SMS temporary tables and you can
afford to leave space allocated between uses.
You can turn off this feature by specifying a value of 0 for the
DB2_SMS_TRUNC_TMPTABLE_THRESH registry variable. You might want to do
this if your system has restrictive space limitations and you are experiencing
repeated out of disk errors for SMS temporary table spaces.
The first connection to the database deletes any previously allocated files. If you
want to clear out existing temporary tables, you should drop all database
connections and reconnect, or deactivate the database and reactivate it. If you want
to ensure that space for temporary tables stays allocated, use the ACTIVATE
DATABASE command to start the database. This will avoid the repeated cost of
startup on the first connect to the database.
Related concepts:
v “Temporary table space design” on page 161
Given these considerations, an SMS table space is a somewhat better choice for the
catalogs.
Another factor to consider is whether you will need to enlarge the catalog table
space in the future. While some platforms have support for enlarging the
underlying storage for SMS containers, and while you can use redirected restore to
enlarge an SMS table space, the use of a DMS table space facilitates the addition of
new containers.
Related concepts:
v “Database managed space” on page 120
v “System managed space” on page 117
v “Table space design” on page 112
v “System catalog tables” in Administration Guide: Implementation
DB2_PARALLEL_IO:
When reading data from, or writing data to table space containers, DB2 Database
for Linux, UNIX, and Windows may use parallel I/O if the number of containers
in the database is greater than 1. However, there are situations when it would be
beneficial to have parallel I/O enabled for single container table spaces. For
example, if the container is created on a single RAID device that is composed of
more than one physical disk, you may want to issue parallel read and write calls.
To force parallel I/O for a table space that has a single container, you can use the
DB2_PARALLEL_IO registry variable. This variable can be set to ″*″ (asterisk),
meaning every table space, or it can be set to a list of table space IDs separated by
commas. For example:
db2set DB2_PARALLEL_IO=* {turn parallel I/O on for all table spaces}
db2set DB2_PARALLEL_IO=1,2,4,8 {turn parallel I/O on for table spaces 1, 2,
4, and 8}
After setting the registry variable, DB2 must be stopped (db2stop), and then
restarted (db2start), for the changes to take effect.
DB2_PARALLEL_IO also affects table spaces with more than one container
defined. If you do not set the registry variable, the I/O parallelism is equal to the
number of containers in the table space. If you set the registry variable, the I/O
For example, a table space has two containers and the prefetch size is four times
the extent size. If the registry variable is not set, a prefetch request for this table
space will be broken into two requests (each request will be for two extents).
Provided that the prefetchers are available to do work, two prefetchers can be
working on these requests in parallel. In the case where the registry variable is set,
a prefetch request for this table space will be broken into four requests (one extent
per request) with a possibility of four prefetchers servicing the requests in parallel.
In this example, if each of the two containers had a single disk dedicated to it,
setting the registry variable for this table space might result in contention on those
disks since two prefetchers will be accessing each of the two disks at once.
However, if each of the two containers was striped across multiple disks, setting
the registry variable would potentially allow access to four different disks at once.
DB2_USE_PAGE_CONTAINER_TAG:
By default, DB2 uses the first extent of each DMS container (file or device) to store
a container tag. The container tag is DB2’s metadata for the container. In earlier
versions of the DB2 database system, the first page was used for the container tag,
instead of the first extent, and as a result less space in the container was used to
store the tag. (In earlier versions of the DB2 database system, the
DB2_STRIPED_CONTAINERS registry variable was used to create table spaces
with an extent sized tag. However, because this is now the default behavior, this
registry variable no longer has any affect.)
Setting this registry variable to ON is not recommended unless you have very tight
space constraints, or you require behavior consistent with pre-Version 8 databases.
Procedure:
To create containers with one-page container tags, set this registry variable to ON,
and then stop and restart the instance:
db2set DB2_USE_PAGE_CONTAINER_TAG=ON
db2stop
db2start
To stop creating containers with one-page container tags, reset this registry
variable, and then stop and restart the instance.
The Control Center, the LIST TABLESPACE CONTAINERS command, and the GET
SNAPSHOT FOR TABLESPACES command do not show whether a container has
been created with a page or extent sized tag. They use the label “file” or “device,”
depending on how the container was created. To verify whether a container was
created with a page- or extent-size tag, you can use the /DTSF option of
DB2DART to dump table space and container information, and then look at the
type field for the container in question. The query container APIs (sqlbftcq and
sqlbtcq), can be used to create a simple application that will display the type.
Related concepts:
v “Table space design” on page 112
Related reference:
v “System environment variables” in Performance Guide
Related concepts:
v “Comparison of SMS and DMS table spaces” on page 140
v “Database managed space” on page 120
v “Database partition groups” on page 85
v “System managed space” on page 117
Each type of table has characteristics that make it useful when working in a
particular business environment. For each table that you use, consider which table
types would best suit your needs.
Regular tables with indexes are the “general purpose” table choice.
Regular tables are placed into append mode through an ALTER TABLE statement.
Append mode tables are suitable where you need to add new data and retrieve
existing data such as where you are dealing with customer accounts in a banking
environment. There you record each change to the account through debits, credits,
and transfers. You also have customers who want to review the history of changes
to that account.
Range-clustered tables are used where the data is tightly clustered across one or
more columns in the table. The largest and smallest values in the columns define
the range of possible values. You use these columns to access records in the table.
Partitioned tables allow easier roll-in and roll-out of table data, easier
administration, flexible index placement, and better query processing than regular
tables.
Related concepts:
v “Multidimensional clustering tables” on page 172
v “Range-clustered tables” on page 168
Related tasks:
v “Creating a materialized query table” in Administration Guide: Implementation
v “Creating and populating a table” in Administration Guide: Implementation
Range-clustered tables
A range-clustered table (RCT) is a table layout scheme where each record in the
table has a predetermined record ID (RID) which is an internal identifier used to
locate a record in a table.
For each table that holds your data, consider which of the possible table types
would best suit your needs. For example, if you have data records that will be
loosely clustered (not monotonically increasing), consider using a regular table and
indexes. If you have data records that will have duplicate (not unique) values in
the key, you should not use a range-clustered table. If you cannot afford to
preallocate a fixed amount of storage on disk for the range-clustered tables you
might want, you should not use this type of table. These factors will help you to
determine whether you have data that can be used as a range-clustered table.
An algorithm is used to equate the value of the key for the record with the
location of a specific row within a table. The basic algorithm is fairly simple. In its
most basic form (using a single column instead of two or more columns to make
up the key), the algorithm maps a sequence number to a logical row number. The
algorithm also uses the record’s key to determine the logical page number and slot
number. This process provides exceptionally fast access to records; that is, to
specific rows in the table.
The algorithm does not involve hashing because hashing does not preserve
key-value ordering. Preserving key-value ordering is essential because it eliminates
the need to reorganize the table data over time.
Each record key in the table should have the following characteristics:
v Unique
v Not null
v An integer (SMALLINT, INTEGER, or BIGINT)
v Monotonically increasing
Applications where tightly clustered (dense) sequence key ranges are likely are
excellent candidates for range-clustered tables. When using this type of key to
create a range-clustered table, the key is used to generate the logical location of a
row in a table. This process avoids the need for a separate index.
Related concepts:
v “Range-clustered tables and out-of-range record key values” on page 171
v “Examples of range-clustered tables” in Administration Guide: Implementation
Related reference:
v “Restrictions on native XML data store” in XML Guide
Once created, any records with keys that fall into the defined range work the same
way, regardless of whether the table is created with the overflow option allowed or
disallowed. The difference occurs when there is a record with a key that falls
outside of the defined range. In this case, when the table allows overflow records,
the record is placed in the overflow area, which is dynamically allocated. As more
records are added from outside the defined range, they are placed into the
growing overflow area. Actions against the table that involve this overflow area
will require longer processing time because the overflow area must be accessed as
part of the action. The larger the overflow area, the longer it will take to access the
overflow area. After prolonged use of the overflow area, consider reducing its size
by exporting the data from the table to a new range-clustered table that you have
defined using new, extended ranges.
There might be times when you do not want records placed into a range-clustered
table to have record key values falling outside of an allowed or defined range. For
this type of RCT to exist, you must use the DISALLOW OVERFLOW option on the
Related reference:
v “CREATE TABLE statement” in SQL Reference, Volume 2
Qualifying rows in range-clustered tables that are currently empty but have been
preallocated are locked. This avoids the need for next-key locking. As a result,
fewer locks are required for a dense, range-clustered table.
Related concepts:
v “Locks and concurrency control” in Performance Guide
Related concepts:
v “Indexes” in SQL Reference, Volume 1
v “Block index considerations for MDC tables” on page 188
v “Block indexes” on page 175
v “Optimization strategies for MDC tables” in Performance Guide
v “Table and index management for MDC tables” in Performance Guide
v “Block indexes and query performance” on page 180
v “Block maps” on page 185
v “Comparison of regular and MDC tables” on page 173
v “Deletion from an MDC table” on page 187
v “Designing multidimensional clustering (MDC) tables” on page 189
v “Load considerations for MDC tables” on page 188
v “Logging considerations for MDC tables” on page 188
v “Maintaining clustering automatically during INSERT operations” on page 183
v “Multidimensional clustering (MDC) table creation, placement, and use” on page
197
v “Updating an MDC table” on page 187
Related reference:
v “Lock modes for table and RID index scans of MDC tables” in Performance Guide
v “Locking for block index scans for MDC tables” in Performance Guide
Data clustering using a clustering index has some drawbacks, however. First,
because space is filled up on data pages over time, clustering is not guaranteed.
An insert operation will attempt to add a record to a page nearby to those having
the same or similar clustering key values, but if no space can be found in the ideal
location, it will be inserted elsewhere in the table. Therefore, periodic table
reorganizations may be necessary to re-cluster the table and to setup pages with
additional free space to accommodate future clustered insert requests.
Second, only one index can be designated as the “clustering” index, and all other
indexes will be unclustered, because the data can only be physically clustered
along one dimension. This limitation is related to the fact that the clustering index
is record-based, as all indexes have been prior to Version 8.1.
Third, because record-based indexes contain a pointer for every single record in the
table, they can be very large in size.
Clustering
Region index
Table
Year Unclustered
index
The “Region” index is a clustering index which means that as keys are scanned in
the index, the corresponding records should be found for the most part on the
same or neighboring pages in the table. In contrast, the “Year” index is unclustered
which means that as keys are scanned in that index, the corresponding records will
likely be found on random pages throughout the table. Scans on the clustering
index will exhibit better I/O performance and will benefit more from sequential
prefetching, the more clustered the data is to that index.
MDC introduces indexes that are block-based. “Block indexes” point to blocks or
groups of records instead of to individual records. By physically organizing data in
an MDC table into blocks according to clustering values, and then accessing these
blocks using block indexes, MDC is able not only to address all of the drawbacks
of clustering indexes, but to provide significant additional performance benefits.
First, MDC enables a table to be physically clustered on more than one key, or
dimension, simultaneously. With MDC, the benefits of single-dimensional
clustering are therefore extended to multiple dimensions, or clustering keys. Query
performance is improved where there is clustering of one or more specified
dimensions of a table. Not only will these queries access only those pages having
records with the correct dimension values, these qualifying pages will be grouped
into blocks, or extents.
Second, although a table with a clustering index can become unclustered over
time, an MDC table is able to maintain and guarantee its clustering over all
dimensions automatically and continuously. This eliminates the need to reorganize
MDC tables to restore the physical order of the data.
Third, in MDC the clustering indexes are block-based. These indexes are drastically
smaller than regular record-based indexes, so take up much less disk space and are
faster to scan.
Block
Region index
97 99 98 99 00
Block
Year
Note: An MDC table defined with even just a single dimension can benefit from
these MDC attributes, and can be a viable alternative to a regular table with
a clustering index. This decision should be based on many factors, including
the queries that make up the workload, and the nature and distribution of
the data in the table. Refer to “Considerations when choosing dimensions”
and “MDC Advisor Feature on the DB2 Advisor”.
When you create a table, you can specify one or more keys as dimensions along
which to cluster the data. Each of these MDC dimensions can consist of one or
more columns similar to regular index keys. A dimension block index will be
automatically created for each of the dimensions specified, and it will be used by
the optimizer to quickly and efficiently access data along each dimension. A
composite block index will also automatically be created, containing all columns
across all dimensions, and will be used to maintain the clustering of data over
insert and update activity. A composite block index will only be created if a single
dimension does not already contain all the dimension key columns. The composite
block index may also be selected by the optimizer to efficiently access data that
satisfies values from a subset, or from all, of the column dimensions.
Note: The usefulness of this index during query processing depends on the order
of its key parts. The key part order is determined by the order of the
columns encountered by the parser when parsing the dimensions specified
in the ORGANIZE BY clause of the CREATE TABLE statement. Refer to
section “Block index considerations for MDC tables” for more information.
Block indexes are structurally the same as regular indexes, except that they point
to blocks instead of records. Block indexes are smaller than regular indexes by a
factor of the block size multiplied by the average number of records on a page.
The number of pages in a block is equal to the extent size of the table space, which
can range from 2 to 256 pages. The page size can be 4 KB, 8 KB, 16 KB, or 32 KB.
As seen in Figure 44, in a block index there is a single index entry for each block
compared to a single entry for each row. As a result, a block index provides a
significant reduction in disk usage and significantly faster data access.
Related concepts:
v “Block index considerations for MDC tables” on page 188
v “Block indexes and query performance” on page 180
v “Block maps” on page 185
Related reference:
v “Restrictions on native XML data store” in XML Guide
Region
Northwest Southwest South-central Northeast
1 12 9 42 11
6 19
9901
39
41
5 14 2 31 18
7 32 15 33
9902
YearAndMonth
8 17 43
3 4 16 20
10 22 26
9903
30 36
13 34 50 24 45 54
38 25 51 56
9904
44 53
Legend
1 = block 1
Figure 45. Multidimensional table with dimensions of ’Region’ and ’YearAndMonth’ that is
called Sales
Region
Northwest Southwest South-central Northeast
1 12 9 42 11
6 19
9901
39
41
5 14 2 31 18
7 32 15 33
9902
YearAndMonth
8 17 43
Dimension
block index on
YearAndMonth
3 4 16 20
10 22 26
9903
30 36
13 34 50 24 45 54
38 25 51 56
9904
44 53
Dimension block
index on Region
Legend
1 = block 1
Figure 46. Sales table with dimensions of ’Region’ and ’YearAndMonth’ showing dimension
block indexes
Figure 47 shows how a key from the dimension block index on “Region” would
appear. The key is made up of a key value, namely ’South-central’, and a list of
BIDs. Each BID contains a block location. In Figure 47, the block numbers listed are
the same that are found in the ’South-central’ slice found in the grid for the Sales
table (see Figure 45 on page 178).
Block ID (BID)
South-central 9 16 18 19 22 24 25 30 36 39 41 42
Block ID (BID)
9902 2 5 7 8 14 15 17 18 31 32 33 43
Related concepts:
v “Multidimensional clustering (MDC) table creation, placement, and use” on page
197
v “Multidimensional clustering tables” on page 172
Queries that take advantage of block index access can benefit from a number of
factors that improve performance. First, the block index is so much smaller than a
regular index, the block index scan is very efficient. Second, prefetching of the data
pages does not rely on sequential detection when block indexes are used. DB2
looks ahead in the index, prefetching the data pages of the blocks into memory
using big-block I/O, and ensuring that the scan does not incur the I/O when the
data pages are accessed in the table. Third, the data in the table is clustered on
sequential pages, optimizing I/O and localizing the result set to a selected portion
of the table. Fourth, if a block-based buffer pool is used with its block size being
the extent size, then MDC blocks will be prefetched from sequential pages on disk
into sequential pages in memory, further increasing the effect of clustering on
performance. Finally, the records from each block are retrieved using a
mini-relational scan of its data pages, which is often a faster method of scanning
data than through RID-based retrieval.
Queries use can use block indexes to narrow down a portion of the table having a
particular dimension value or range of values. This provides a fine-grained form of
“database partition elimination”, that is, block elimination. This can translate into
better concurrency for the table, because other queries, loads, inserts, updates and
deletes may access other blocks in the table without interacting with this query’s
data set.
If the Sales table is clustered on three dimensions, the individual dimension block
indexes can also be used to find the set of blocks containing records which satisfy
a query on a subset of all of the dimensions of the table. If the table has
dimensions of “YearAndMonth”, “Region” and “Product”, this can be thought of
as a logical cube, as illustrated in Figure 49 on page 181.
1 12 9 42 11
6 19
9901
39 27
41 35
47
5 14 2 31 18
7 32 15 33
9902 37
YearAndMonth
8 17 43
40
3 4 16 20
10 22 26
9903
30 36 28
46
13 34 50 24 45 54
38 25 51 56
9904
44 53
1 = block 1
Figure 49. Multidimensional table with dimensions of ’Region’, ’YearAndMonth’, and ’Product’
Four block indexes will be created for the MDC table shown in Figure 49: one for
each of the individual dimensions, “YearAndMonth”, “Region”, and “Product”;
and another with all of these dimension columns as its key. To retrieve all records
having a “Product” equal to “ProductA” and “Region” equal to “Northeast”, DB2
would first search for the ProductA key from the “Product” dimension block index.
(See Figure 50.) DB2 then determines the blocks containing all records having
“Region” equal to “Northeast”, by looking up the “Northeast” key in the “Region”
dimension block index. (See Figure 51.)
Northeast 11 20 23 26 27 28 35 37 40 45 46 47 51 53 54 56
Using the example above, in order to find the set of blocks containing all records
having both dimension values, you have to find the intersection of the two slices.
This is done by using the logical AND operation on the BID lists from the two
block index keys. The common BID values are 11, 20, 26, 45, 54, 51, 53, and 56.
The following example illustrates how using the logical OR operation with block
indexes to satisfy a query having predicates that involve two dimensions. Figure 52
assumes an MDC table where the two dimensions are “Color” and “Nation”. The
goal is to retrieve all those records in the MDC table that meet the conditions of
having “Color” of “blue” or having a “Nation” name “USA”.
(OR)
Key from the dimension block index on Nation
4,0 12,0 48,0 52,0 76,0 92,0 100,0 112,0 216,0 276,0
Figure 52. How the logical OR operation can be used with block indexes
This diagram shows how the result of two separate block index scans are
combined to determine the range of values that meet the predicate restrictions.
Once DB2 has list of blocks to scan, DB2 can do a mini-relational scan of each
block. Prefetching of the blocks can be done, and will involve just one I/O per
block, as each block is stored as an extent on disk and can be read into the buffer
pool as a unit. If predicates need to be applied to the data, dimension predicates
need only be applied to one record in the block, because all records in the block
are guaranteed to have the same dimension key values. If other predicates are
present, DB2 only needs to check these on the remaining records in the block.
MDC tables also support regular RID-based indexes. Both RID and block indexes
can be combined using a logical AND operation, or a logical OR operation, with
the index. Block indexes provide the optimizer with additional access plans to
choose from, and do not prevent the use of traditional access plans (RID scans,
joins, table scans, and others). Block index plans will be costed by the optimizer
along with all other possible access plans for a particular query, and the most
inexpensive plan will be chosen.
The DB2 Design Advisor can help to recommend RID-based indexes on MDC
tables, or to recommend MDC dimensions for a table.
Related concepts:
v “Block index considerations for MDC tables” on page 188
v “Block indexes” on page 175
v “Block maps” on page 185
1 12 9 42 11 5 14 2 31 18 3
6 19 7 32 15 33 10 …
39 8 17 43
41
Legend
1 = block 1
The following example illustrates how the composite block index can be used for
query processing. If you want to find all records in the Sales table having “Region”
of ’Northwest’ and “YearAndMonth” of ’9903’, DB2 would look up the key value
9903, Northwest in the composite block index, as shown in Figure 54 on page 185.
The key is made up a key value, namely ’9903, Northwest’, and a list of BIDs. You
can see that the only BIDs listed are 3 and 10, and indeed there are only two
blocks in the Sales table containing records having these two particular values.
9903, Northwest 3 10
To illustrate the use of the composite block index during insert, take the example
of inserting another record with dimension values 9903 and Northwest. DB2 would
look up this key value in the composite block index and find BIDs for blocks 3 and
10. These blocks contain all records and the only records having these dimension
key values. If there is space available, DB2 inserts the new record into one of these
blocks. If there is no space on any pages in these blocks, DB2 allocates a new block
for the table, or uses a previously emptied block in the table. Note that, in this
example, block 48 is currently not in use by the table. DB2 inserts the record into
the block and associates this block to the current logical cell by adding the BID of
the block to the composite block index and to each dimension block index. See
Figure 55 for an illustration of the keys of the dimension block indexes after the
addition of Block 48.
9903 3 4 10 16 20 22 26 30 36 48
Northwest 1 3 5 6 7 8 10 12 13 14 32 48
9903, Northwest 3 10 48
Figure 55. Keys from the dimension block indexes after addition of Block 48
Related concepts:
v “Block maps” on page 185
v “Block indexes” on page 175
Block maps
When a block is emptied, it is disassociated from its current logical cell values by
removing its BID from the block indexes. The block can then be reused by another
logical cell. This reduces the need to extend the table with new blocks. When a
new block is needed, previously emptied blocks need to be found quickly without
having to search the table for them.
The block map is a new structure used to facilitate locating empty blocks in the
MDC table. The block map is stored as a separate object:
v In SMS, as a separate .BKM file
v In DMS, as a new object descriptor in the object table.
The block map is an array containing an entry for each block of the table. Each
entry comprises a set of status bits for a block. The status bits include:
Block
map Extents in the table
0 X 0
1 F 1
2 U 2 East, 1996
North,
1996
3 U 3
5 F 5
6 U 6 South, 1999
… …
Legend
In Figure 56, the left side shows the block map array with different entries for each
block in the table. The right side shows how each extent of the table is being used:
some are free, most are in use, and records are only found in blocks marked in use
in the block map. For simplicity, only one of the two dimension block indexes is
shown in the diagram.
Notes:
1. There are pointers in the block index only to blocks which are marked IN USE
in the block map.
2. The first block is reserved. This block contains system records for the table.
Free blocks are found easily for use in a cell, by scanning the block map for FREE
blocks, that is, those without any bits set.
Table scans also use the block map to access only extents currently containing data.
Any extents not in use do not need to be included in the table scan at all. To
illustrate, a table scan in this example (Figure 56) would start from the third extent
Related concepts:
v “Block index considerations for MDC tables” on page 188
v “Block indexes” on page 175
v “Block indexes and query performance” on page 180
Note: Therefore, block index entries need only be removed once per entire block
and only if the block is completely emptied, instead of once per deleted row
in a record-based index.
Related concepts:
v “Multidimensional clustering tables” on page 172
Updates of dimension values are treated as a delete of the current record followed
by an insert of the changed record, because the record is changing the logical cell
to which it belongs. If the deletion of the current record causes a block to be
emptied, the block index needs to be updated. Similarly, if the insert of the new
record requires it to be inserted into a new block, the block index needs to be
updated.
Block indexes only need to be updated when inserting the first record into a block
or when deleting the last record from a block. Index overhead associated with
block indexes for maintenance and logging is therefore much less than the index
overhead associated with regular indexes. For every block index that would have
otherwise been a regular index, the maintenance and logging overhead is greatly
reduced.
MDC tables are treated like any existing table; that is, triggers, referential integrity,
views, and materialized query tables can all be defined upon them.
Related concepts:
When loading data into MDC tables, the input data can be either sorted or
unsorted. If unsorted, consider doing the following:
v Increase the util_heap configuration parameter.
Increasing the utility heap size will affect all load operations in the database (as
well as backup and restore operations).
v Increase the value given with the DATA BUFFER clause of the LOAD command.
Increasing this value will affect a single load request. The utility heap size must
be large enough to accommodate the possibility of multiple concurrent load
requests.
v Ensure the page size used for the buffer pool is the same as the largest page size
for the temporary table space.
Load begins at a block boundary, so it is best used for data belonging to new cells
or for the initial populating of a table.
Related concepts:
v “Multidimensional clustering tables” on page 172
Related concepts:
v “Multidimensional clustering tables” on page 172
The composite block index is also used in query processing to access data in the
table having specific dimension values. Note that the order of key parts in the
composite block index may affect its use or applicability for query processing. The
order of its key parts is determined by the order of columns found in the entire
ORGANIZE BY DIMENSIONS clause used when creating the MDC table. For
example, if a table is created using the statement
then the composite block index will be created on columns (c1,c4,c3,c2). Note that
although c1 is specified twice in the dimensions clause, it is used only once as a
key part for the composite block index, and in the order in which it is first found.
The order of key parts in the composite block index makes no difference for insert
processing, but may do so for query processing. Therefore, if it is more desirable to
have the composite block index with column order (c1,c2,c3,c4), then the table
should be created using the statement
CREATE TABLE t1 (c1 int, c2 int, c3 int, c4 int)
ORGANIZE BY DIMENSIONS (c1, c2, (c3,c1), c4)
Related concepts:
v “Block indexes” on page 175
v “Block indexes and query performance” on page 180
v “Block maps” on page 185
The first consideration when choosing clustering dimensions for your table is the
determination of which queries will benefit from clustering at a block level.
Typically, there will be several candidates when choosing dimensions based on the
queries that make up the work to be done on the data. The ranking of these
candidates is important. Columns, especially those with low cardinalities, that are
involved in equality or range predicate queries will show the greatest benefit from,
and should be considered as candidates for, clustering dimensions. You will also
want to consider creating dimensions for foreign keys in an MDC fact table
involved in star joins with dimension tables. You should keep in mind the
performance benefits of automatic and continuous clustering on more than one
dimension, and of clustering at an extent or block level.
Example 1:
SELECT .... FROM t1 WHERE c3 < 5000
Example 2:
SELECT .... FROM t1 WHERE c2 IN (1,2037)
This query involves an IN predicate on a single dimension, and can trigger block
index based scans. This query can be internally rewritten to access the table using
the dimension block index on c2. The index is scanned for BIDs of keys having
values of 1 and 2037, and a mini-relational scan is applied to the resulting set of
blocks to retrieve the actual records.
Example 3:
SELECT * FROM MDCTABLE WHERE COLOR=’BLUE’ AND NATION=’USA’
(AND)
Key from the dimension block index on Nation
Figure 57. A query request that uses a logical AND operation with two block indexes
To carry out this query request, the following is done (and is shown in Figure 57):
v A dimension block index lookup is done: one for the Blue slice and another for
the USA slice.
v A block logical AND operation is carried out to determine the intersection of the
two slices. That is, the logical AND operation determines only those blocks that
are found in both slices.
v A mini-relation scan of the resulting blocks in the table is carried out.
Example 4:
SELECT ... FROM t1
WHERE c2 > 100 AND c1 = ’16/03/1999’ AND c3 > 1000 AND c3 < 5000
This query involves range predicates on c2 and c3 and an equality predicate on c1,
along with a logical AND operation. This can be internally rewritten to access the
table on each of the dimension block indexes:
v A scan of the c2 block index is done to find BIDs of keys having values greater
than 100
A logical AND operation is then done on the resulting BIDs from each block scan,
to find their intersection, and a mini-relational scan is applied to the resulting set
of blocks to find the actual records.
Example 5:
SELECT * FROM MDCTABLE WHERE COLOR=’BLUE’ OR NATION=’USA’
Example 6:
SELECT .... FROM t1 WHERE c1 < 5000 OR c2 IN (1,2,3)
Example 7:
SELECT .... FROM t1 WHERE c1 = 15 AND c4 < 12
This query involves an equality predicate on the c1 dimension and another range
predicate on a column that is not a dimension, along with a logical AND
operation. This can be internally rewritten to access the dimension block index on
c1, to get the list of blocks from the slice of the table having value 15 for c1. If
there is a RID index on c4, an index scan can be done to retrieve the RIDs of
records having c4 less than 12, and then the resulting list of blocks undergoes a
logical AND operation with this list of records. This intersection eliminates RIDs
not found in the blocks having c1 of 15, and only those listed RIDs found in the
blocks that qualify are retrieved from the table.
If there is no RID index on c4, then the block index can be scanned for the list of
qualifying blocks, and during the mini-relational scan of each block, the predicate
c4 < 12 can be applied to each record found.
Example 8:
Given a scenario where there are dimensions for color, year, nation and a row ID
(RID) index on the part number, the following query is possible.
SELECT * FROM MDCTABLE WHERE COLOR=’BLUE’ AND PARTNO < 1000
(AND)
Row IDs (RID) from RID index on Partno
Figure 58. A query request that uses a logical AND operation on a block index and a row ID
(RID) index
To carry out this query request, the following is done (and is shown in Figure 58):
v A dimension block index lookup and a RID index lookup are done.
v A logical AND operation is used with the blocks and RIDs to determine the
intersection of the slice and those rows meeting the predicate condition.
v The result is only those RIDs that also belong to the qualifying blocks.
Example 9:
SELECT * FROM MDCTABLE WHERE COLOR=’BLUE’ OR PARTNO < 1000
(OR)
Figure 59. How block index and row ID using a logical OR operation works
To carry out this query request, the following is done (and is shown in Figure 59):
v A dimension block index lookup and a RID index lookup are done.
v A logical OR operation is used with the blocks and RIDs to determine the union
of the slice and those rows meeting the predicate condition.
v The result is all of the rows in the qualifying blocks, plus additional RIDs that
fall outside the qualifying blocks that meet the predicate condition. A
mini-relational scan of each of the blocks is performed to retrieve their records,
and the additional records outside these blocks are retrieved individually.
Example 10:
SELECT ... FROM t1 WHERE c1 < 5 OR c4 = 100
Example 11:
SELECT .... FROM t1,d1,d2,d3
WHERE t1.c1 = d1.c1 and d1.region = ’NY’
AND t2.c2 = d2.c3 and d2.year=’1994’
AND t3.c3 = d3.c3 and d3.product=’basketball’
This query involves a star join. In this example, t1 is the fact table and it has
foreign keys c1, c2, and c3, corresponding to the primary keys of d1, d2, and d3,
the dimension tables. The dimension tables do not have to be MDC tables. Region,
year, and product are columns of the respective dimension tables which can be
indexed using regular or block indexes (if the dimension tables are MDC tables).
When accessing the fact table on c1, c2, and c3 values, block index scans of the
dimension block indexes on these columns can be done, followed by a logical
AND operation using the resulting BIDs. When there is a list of blocks, a
mini-relational scan can be done on each block to get the records.
Density of cells:
The choices made for the appropriate dimensions and for the extent size are of
critical importance to MDC design. These factors determine the table’s expected
cell density. They are important because an extent is allocated for every existing
cell, regardless of the number of records in the cell. The right choices will take
advantage of block-based indexing and multidimensional clustering, resulting in
performance gains. The goal is to have densely-filled blocks to get the most benefit
from multidimensional clustering, and to get optimal space utilization.
There are several design factors that can contribute to optimal cell density:
v Varying the number of dimensions.
v Varying the granularity of one or more dimensions.
v Varying the block (extent) size and page size of the table space.
Carry out the following steps to achieve the best design possible:
1. Identify candidate dimensions.
Related concepts:
v “The Design Advisor” in Performance Guide
v “Multidimensional clustering (MDC) table creation, placement, and use” on page
197
v “Multidimensional clustering tables” on page 172
If you plan to store MDC tables in an SMS table space, we strongly recommend
that you use multipage file allocation.
Note: Multipage file allocation is the default for newly created databases in
Version 8.2 and later.
The reason for this recommendation is that MDC tables are always extended by
whole extents, and it is important that all the pages in these extents are physically
consecutive. Therefore, there are no space advantage to disabling multipage file
allocation; and furthermore, enabling it will significantly increase the chances that
the pages in each extent are physically consecutive.
The DB2 Design Advisor (db2advis), formerly known as the Index Advisor, has an
MDC feature. This feature recommends clustering dimensions for use in an MDC
table, including coarsifications on base columns in order to improve workload
performance. The term coarsification refers to a mathematic expression to reduce the
cardinality (the number of distinct values) of a clustering dimension. A common
example of a coarsification is the date where coarsification could be by date, week
of the date, month of the date, or quarter of the year.
A requirement to use the MDC feature of the DB2 Design Advisor is the existence
of at least several extents of data within the database. The DB2 Design Advisor
uses the data to model data density and cardinality.
If the database does not have data in the tables, the DB2 Design Advisor will not
recommend MDC, even if the database contains empty tables but has a mocked up
set of statistics to imply a populated database.
The analysis operation within the advisor includes not only the benefits of block
index access but also the impact of MDC on insert, update, and delete operations
against dimensions of the table. These actions on the table have the potential to
cause records to be moved between cells. The analysis operation also models the
potential performance impact of any table expansion resulting from the
organization of data along particular MDC dimensions.
The MDC feature is enabled using the -m <advise type> flag on the db2advis
utility. The “C” advise type is used to indicate multidimensional clustering tables.
The advise types are: “I” for index, “M” for materialized query tables, “C” for
MDC, and “P” for partitioned database environment. The advise types can be used
in combination with each other.
Note: The DB2 Design Advisor will not explore tables that are less than 12 extents
in size.
The advisor will analyze both MQTs and regular base tables when coming up with
recommendations.
The recommendations are reported both to stdout and to the ADVISE tables that
are part of the explain facility.
The reason for distributing a table is independent of whether the table is an MDC
table or a regular table. For example, the rules for the selection of columns to make
up the distribution key are the same. The distribution key for an MDC table can
involve any column, whether those columns make up part of a dimension of the
table or not.
If the distribution key is identical to a dimension from the table, then each
database partition will contain a different portion of the table. For instance, if our
example MDC table is distributed by color across two database partitions, then the
Color column will be used to divide the data. As a result, the Red and Blue slices
may be found on one database partition and the Yellow slice on the other. If the
distribution key is not identical to the dimensions from the table, then each
If you know that certain predicates will be heavily used in queries, you can cluster
the table on the columns involved, using the ORGANIZE BY DIMENSIONS clause.
Example 1:
CREATE TABLE T1 (c1 DATE, c2 INT, c3 INT, c4 DOUBLE)
ORGANIZE BY DIMENSIONS (c1, c3, c4)
The table in Example 1 is clustered on the values within three native columns
forming a logical cube (that is, having three dimensions). The table can now be
logically sliced up during query processing on one or more of these dimensions
such that only the blocks in the appropriate slices or cells will be processed by the
relational operators involved. Note that the size of a block (the number of pages)
will be the extent size of the table.
Each dimension can be made up of one or more columns. As an example, you can
create a table that is clustered on a dimension containing two columns.
Example 2:
CREATE TABLE T1 (c1 DATE, c2 INT, c3 INT, c4 DOUBLE)
ORGANIZE BY DIMENSIONS (c1, (c3, c4))
In Example 2, the table will be clustered on two dimensions, c1 and (c3,c4). Thus,
in query processing, the table can be logically sliced up on either the c1 dimension,
or on the composite (c3, c4) dimension. The table will have the same number of
blocks as the table in Example 1, but one less dimension block index. In Example
1, there will be three dimension block indexes, one for each of the columns c1, c3,
and c4. In Example 2, there will be two dimension block indexes, one on the
column c1 and the other on the columns c3 and c4. The main differences between
these two approaches is that, in Example 1, queries involving just c4 can use the
dimension block index on c4 to quickly and directly access blocks of relevant data.
In Example 2, c4 is a second key part in a dimension block index, so queries
involving just c4 involve more processing. However, in Example 2 DB2 Database
for Linux, UNIX, and Windows will have one less block index to maintain and
store.
The DB2 Design Advisor does not make recommendations for dimensions
containing more than one column.
Column expressions can also be used for clustering dimensions. The ability to
cluster on column expressions is useful for rolling up dimensions to a coarser
granularity, such as rolling up an address to a geographic location or region, or
rolling up a date to a week, month, or year. In order to implement the rolling up
of dimensions in this way, you can use generated columns. This type of column
Example 3:
CREATE TABLE T1(c1 DATE, c2 INT, c3 INT, c4 DOUBLE,
c5 DOUBLE GENERATED ALWAYS AS (c3 + c4),
c6 INT GENERATED ALWAYS AS (MONTH(C1))
ORGANIZE BY DIMENSIONS (c2, c5, c6)
The compiler generates additional predicates to be used in the block index scan.
For example, with the query:
SELECT * FROM MDCTABLE WHERE DATE > "19999/03/03" AND DATE < "2000/01/15"
the compiler generates the additional predicates: “month >= 199903” and “month <
200001” which can be used as predicates for a dimension block index scan. When
scanning the resulting blocks, the original predicates are applied to the rows in the
blocks.
To make this function monotonic, you would have to include the year as the high
order part of the month. DB2 V9.1 provides an extension to the INTEGER built-in
function to help in defining a monotonic expression on date. INTEGER(date)
returns an integer representation of the date, which then can be divided to find an
integer representation of the year and month. For example, INTEGER(date(’2000/
05/24’)) returns 20000524, and therefore INTEGER(date(’2000/05/24’))/100 =
200005. The function INTEGER(date)/100 is monotonic.
Similarly, the built-in functions DECIMAL and BIGINT also have extensions so that
you can derive monotonic functions. DECIMAL(timestamp) returns a decimal
representation of a timestamp, and this can be used in monotonic expressions to
derive increasing values for month, day, hour, minute, and so on. BIGINT(date)
returns a big integer representation of the date, similar to INTEGER(date).
Related concepts:
v “Multidimensional clustering considerations when loading data” in Data
Movement Utilities Guide and Reference
v “Designing multidimensional clustering (MDC) tables” on page 189
v “Extent size” on page 144
v “Multidimensional clustering tables” on page 172
Related tasks:
v “Defining dimensions on a table” in Administration Guide: Implementation
Related reference:
v “CREATE TABLE statement” in SQL Reference, Volume 2
v “db2empfa - Enable multipage file allocation command” in Command Reference
Figure 60 shows a database client running a funds transfer application that accesses
a database containing checking and savings account tables, as well as a banking
fee schedule. The application must:
v Accept the amount to transfer from the user interface
v Subtract the amount from the savings account, and determine the new balance
v Read the fee schedule to determine the transaction fee for a savings account
with the given balance
v Subtract the transaction fee from the savings account
v Add the amount of the transfer to the checking account
v Commit the transaction (unit of work).
Procedure:
Related concepts:
v “Units of work” on page 22
Related tasks:
v “Updating a single database in a multi-database transaction” on page 204
v “Updating multiple databases in a transaction” on page 205
Related reference:
v “PRECOMPILE command” in Command Reference
Database
Savings account
Update
Update
Checking account
Database client
Database
Figure 61 shows a database client running a funds transfer application that accesses
two database servers: one containing the checking and savings accounts, and
another containing the banking or transaction fee payment table.
Procedure:
If databases are located on a host or iSeries database server, you require DB2
Connect™ for connectivity to these servers.
Related concepts:
v “Units of work” on page 22
Related tasks:
v “Updating a single database in a transaction” on page 203
v “Updating multiple databases in a transaction” on page 205
Related reference:
v “PRECOMPILE command” in Command Reference
Database
Database
Database
Procedure:
To set up a funds transfer application for this environment, you have two options:
1. With the DB2 transaction manager (TM):
a. Create the necessary tables in the appropriate databases
b. If physically remote, set up the database servers to use the appropriate
communications protocols
c. If physically remote, catalog the nodes and the databases to identify the
databases on the database servers
d. Precompile your application program to specify a type 2 connection (that is,
specify CONNECT 2 on the PRECOMPILE PROGRAM command), and
two-phase commit (that is, specify SYNCPOINT TWOPHASE on the
PRECOMPILE PROGRAM command)
e. Configure the DB2 transaction manager (TM).
2. Using an XA-compliant transaction manager:
a. Create the necessary tables in the appropriate databases
b. If physically remote, set up the database servers to use the appropriate
communications protocols
c. If physically remote, catalog the nodes and the databases to identify the
databases on the database servers
d. Precompile your application program to specify a type 2 connection (that is,
specify CONNECT 2 on the PRECOMPILE PROGRAM command), and
one-phase commit (that is, specify SYNCPOINT ONEPHASE on the
PRECOMPILE PROGRAM command)
e. Configure the XA-compliant transaction manager to use the DB2 databases.
Related concepts:
v “DB2 transaction manager” on page 206
v “Units of work” on page 22
Related tasks:
v “Updating a single database in a multi-database transaction” on page 204
v “Updating a single database in a transaction” on page 203
Related reference:
v “PRECOMPILE command” in Command Reference
The database manager provides transaction manager functions that can be used to
coordinate the updating of several databases within a single unit of work. The
You can use the DB2 transaction manager with DB2 databases. If you have
resources other than DB2 databases that you want to participate in a two-phase
commit transaction, you can use an XA-compliant transaction manager.
Related concepts:
v “DB2 Database transaction manager configuration” on page 207
v “Two-phase commit” on page 210
v “Units of work” on page 22
When using DB2 Database for Linux, UNIX, and Windows to coordinate your
transactions, you must fulfill certain configuration requirements. Configuration is
straightforward if you use TCP/IP exclusively for communications and DB2
Database for Linux, UNIX, and Windows or DB2 Universal Database for iSeries V5,
z/OS or OS/390 are the only database servers involved in your transactions.
DB2 Connect no longer supports SNA two phase commit access to host or iSeries
servers.
DB2 Database for Linux, UNIX, and Windows and DB2 Universal
Database for z/OS, OS/390, and iSeries V5 using TCP/IP
Connectivity
If each of the following statements is true for your environment, the configuration
steps for multisite update are straightforward.
v All communications with remote database servers (including DB2 UDB for
z/OS, OS/390, and iSeries V5) use TCP/IP exclusively.
v DB2 Database for Linux, UNIX, and Windows or DB2 Universal Database for
z/OS, OS/390 or iSeries V5 are the only database servers involved in the
transaction.
The database that will be used as the transaction manager database is determined
at the database client by the database manager configuration parameter
tm_database. Consider the following factors when setting this configuration
parameter:
v The transaction manager database can be:
– A DB2 Universal Database for UNIX or Windows Version 8 database
– A DB2 for z/OS and OS/390 Version 7 database or a DB2 for OS/390 Version
5 or 6 database
– A DB2 for iSeries V5 database
DB2 for z/OS, OS/390, and iSeries V5 are the recommended database servers
to use as the transaction manager database. z/OS, OS/390, and iSeries V5
systems are, generally, more secure than workstation servers, reducing the
possibility of accidental power downs, reboots, and so on. Therefore the
recovery logs, used in the event of resynchronization, are more secure.
Related concepts:
v “DB2 transaction manager” on page 206
Related tasks:
v “Configuring BEA Tuxedo” on page 238
v “Configuring IBM TXSeries CICS” on page 236
v “Configuring IBM TXSeries Encina” on page 236
v “Configuring IBM WebSphere Application Server” on page 236
Related reference:
v “autorestart - Auto restart enable configuration parameter” in Performance Guide
v “maxappls - Maximum number of active applications configuration parameter”
in Performance Guide
v “spm_log_path - Sync point manager log file path configuration parameter” in
Performance Guide
v “spm_log_file_sz - Sync point manager log file size configuration parameter” in
Performance Guide
v “spm_name - Sync point manager name configuration parameter” in Performance
Guide
v “spm_max_resync - Sync point manager resync agent limit configuration
parameter” in Performance Guide
v “tm_database - Transaction manager database name configuration parameter” in
Performance Guide
v “resync_interval - Transaction resync interval configuration parameter” in
Performance Guide
Previous to version 8, TCP/IP access from host or iSeries clients only supported
one-phase commit access. DB2 Database for Linux, UNIX, and Windows now
allows TCP/IP two-phase commit access from host or iSeries clients. There is no
need to use the Syncpoint Manager (SPM) when using TCP/IP two-phase commit
access.
The DB2 TCP/IP listener must be active on the server to be accessed by the host or
iSeries client. You can check that the TCP/IP listener is active by using the db2set
command to validate that the registry variable DB2COMM has a value of “tcpip”;
and that the database manager configuration parameter svcename is set to the
service name by using the GET DBM CFG command. If the listener is not active, it
can be made active by using the db2set command and the UPDATE DBM CFG
command.
Related reference:
v “spm_name - Sync point manager name configuration parameter” in Performance
Guide
v “Communications variables” in Performance Guide
Two-phase commit
Figure 63 on page 211 illustrates the steps involved in a multisite update.
Understanding how a transaction is managed will help you to resolve the problem
if an error occurs during the two-phase commit process.
Connect 1
Update
3
4
5
Connect 6
Select 7
Connect 8
Update
Connect 9
Update
Commit 10
11
12
13
Related concepts:
v “DB2 transaction manager” on page 206
v “Units of work” on page 22
If, for some reason, you cannot wait for the transaction manager to automatically
resolve indoubt transactions, there are actions you can take to manually resolve
them. This manual process is sometimes referred to as ″making a heuristic
decision″.
Related concepts:
v “Two-phase commit” on page 210
Related tasks:
v “Resolving indoubt transactions manually” on page 227
Related reference:
v “autorestart - Auto restart enable configuration parameter” in Performance Guide
v “LIST INDOUBT TRANSACTIONS command” in Command Reference
v “RESTART DATABASE command” in Command Reference
v “TERMINATE command” in Command Reference
The topics in this chapter will assist you in using the database manager with an
XA-compliant transaction manager, such as IBM WebSphere or BEA Tuxedo.
If you are looking for information about Microsoft Transaction Server, see the Call
Level Interface Guide and Reference, Volume 1.
Once there, choose ″DB2″, then search the web site using the keyword ″XA″ for the
latest available information on XA-compliant transaction managers.
Figure 64 on page 216 illustrates this model, and shows the relationship among
these components.
1 2
3
Transaction
Resource
manager (TM)
managers (RMs)
Legend
For example, a CICS® application program might want to access resource managers
(RMs), such as a database and a CICS Transient Data Queue, and use
programming logic to manipulate the data. Each access request is passed to the
appropriate resource managers through function calls specific to that RM. In the
case of DB2 products, these could be function calls generated by the DB2 database
precompiler for each SQL statement, or database calls coded directly by the
programmer using the APIs.
After a TP monitor is started, it asks the TM to open all the RMs that a set of
application servers have defined. The TM passes xa_open calls to the RMs, so that
they can be initialized for DTP processing. As part of this startup procedure, the
TM performs a resync to recover all indoubt transactions. An indoubt transaction is
a global transaction that was left in an uncertain state. This occurs when the TM
(or at least one RM) becomes unavailable after successfully completing the first
phase (that is, the prepare phase) of the two-phase commit protocol. The RM will
not know whether to commit or roll back its branch of the transaction until the TM
can reconcile its own log with the RM logs when they become available again. To
perform the resync operation, the TM issues a xa_recover call one or more times to
each of the RMs to identify all the indoubt transactions. The TM compares the
replies with the information in its own log to determine whether it should inform
the RMs to xa_commit or xa_rollback those transactions. If an RM has already
When a user application requests a commit or a rollback, it must use the API
provided by the TP monitor or TM, so that the TM can coordinate the commit and
rollback among all the RMs involved. For example, when a CICS application issues
the CICS SYNCPOINT request to commit a transaction, the CICS XA TM
(implemented in the Encina Server) will in turn issue XA calls, such as xa_end,
xa_prepare, xa_commit, or xa_rollback to request the RM to commit or roll back
the transaction. The TM could choose to use one-phase instead of two-phase
commit if only one RM is involved, or if an RM replies that its branch is read-only.
There are two methods by which the RM can register its participation in each
global transaction: static registration and dynamic registration:
v Static registration requires the TM to issue (for every transaction) the xa_start,
xa_end, and xa_prepare series of calls to all the RMs defined for the server
application, regardless of whether a given RM is used by the transaction. This is
inefficient if not every RM is involved in every transaction, and the degree of
inefficiency is proportional to the number of defined RMs.
v Dynamic registration (used by DB2) is flexible and efficient. An RM registers
with the TM using an ax_reg call only when the RM receives a request for its
resource. Note that there is no performance disadvantage with this method, even
when there is only one RM defined, or when every RM is used by every
transaction, because the ax_reg and the xa_start calls have similar paths in the
TM.
Related concepts:
v “Security considerations for XA transaction managers” on page 231
v “X/Open XA Interface programming considerations” in Developing SQL and
External Routines
v “XA function supported by DB2 Database for Linux, UNIX, and Windows” on
page 233
When setting up a database as a resource manager, you do not need the xa_close
string. If provided, this string will be ignored by the database manager.
Data consistency between the failed primary database and the ″failed to″ standby
database when using ACR is very dependent upon the state of the database logs in
the database to which the connection has been rerouted. For the purposes of this
discussion, we will call this database the ″standby database″ and the server on
which this standby database resides the ″standby server″. If the standby database
is an exact copy of the failed primary database at the point in time of the failure
then the data at the standby database will be consistent and there will be no data
integrity issues. However, if the standby database is not an exact copy of the failed
primary database then there may be data integrity issues resulting from
inconsistent transaction outcomes for transactions which have been prepared by
the XA Transaction Manager but yet to be committed. These are known as indoubt
transactions. The Database Administrator and application developers who are
using the ACR function must be aware of the risk of data integrity problems when
using this capability.
The following sections describe the various DB2 Database for Linux, UNIX, and
Windows environments and the risks of data integrity problems in each.
DB2’s High Availability Disaster Recovery feature (HADR) can be used to control
the level of log duplication between the primary and standby databases when the
application regains connectivity after a primary database failure. The database
configuration parameter which controls the level of log duplication is called
hadr_syncmode. There are three possible values for this parameter:
v SYNC
This mode provides the greatest protection against transaction loss at the cost of
longest transaction response time among the three modes. As the name of this
The use of ACR in partitioned database environments can also lead to data
integrity issues. If the standby database is defined to be a different database
partition of the same database, then recovery of indoubt transactions in scenarios
as described in the High Availability Disaster Recovery NEARSYNC section above,
may result in data integrity problems. This occurs because the database partitions
do not share database transaction logs. Therefore the standby database (database
partition B) will have no knowledge of indoubt transactions that exist at the
primary database (database partition A).
The use of ACR in non-partitioned database environments can also lead to data
integrity issues. Assuming disk failover technology, such as IBM AIX High
Availability Cluster Multiprocessor (HACMP™), Microsoft Cluster Service (MSCS),
or HP’s Service Guard, is not in use then the standby database will not have the
database transaction logs that existed on the primary database when it failed.
Therefore, the recovery of indoubt transactions in scenarios as described in the
High Availability Disaster Recovery NEARSYNC section above, can result in data
integrity problems.
Related concepts:
v “X/Open distributed transaction processing model” on page 215
v “High availability disaster recovery overview” in Data Recovery and High
Availability Guide and Reference
Related reference:
v “xa_open string formats” on page 221
Note: Unless explicitly stated, these parameters are not case sensitive and have no
default value.
AXLIB
Library that contains the TP monitor’s ax_reg and ax_unreg functions. This
value is used by DB2 to obtain the addresses of the required ax_reg and
ax_unreg functions. It can be used to override assumed values based on the
TPM parameter, or it can be used by TP monitors that do not appear on the
list for TPM. On AIX, if the library is an archive library, the archive member
should be specified in addition to the library name. For example:
AXLIB=/usr/mqm/lib/libmqmax_r.a(libmqmax_r.o). This parameter is optional.
CHAIN_END
xa_end chaining flag. Valid values are T, F, or no value. XA_END chaining is
an optimization that can be used by DB2 to reduce network flows. If the TP
monitor environment is such that it can be guaranteed that xa_prepare will be
invoked within the same thread or process immediately following the call to
xa_end, and if CHAIN_END is on, the xa_end flag will be chained with the
xa_prepare command, thus eliminating one network flow. A value of T means
that CHAIN_END is on; a value of F means that CHAIN_END is off; no
specified value means that CHAIN_END is on. This parameter can be used to
override the setting derived from a specified TPM value. If this parameter is
not specified, the default value of F is used.
CREG
xa_start chaining flag. Valid values are T, or F, or no value.xa_start chaining is
an optimization that is used by DB2 to reduce network flows. The parameter is
only valid if the TP monitor is using static registration (see SREG). The TP
monitor environment is such that it can guarantee that an SQL statement will
be invoked immediately after the call to the XA API xa_start. If CREG is set to
T, the SQL statement is chained to the xa_start request, thus eliminating one
network flow. This parameter can be used to override the setting derived from
a specified TPM value. If this parameter is not specified, the default value of F
is used.
CT
Connect Timeout. Valid values are 0 - 32767. CT specifies the amount of time,
in seconds, that an application will wait when attempting to establish a
connection with the server. If a connection is not established in the amount of
time specified, an error will be returned. Specifying a value of 0 means that the
application will attempt to wait until a connection is established regardless of
how long it takes. However, it is possible that the connection attempt will be
terminated by the default TCP/IP timeout setting. If this parameter is not
specified, the default value of 0 is used.
DB
Database alias. Database alias used by the application to access the database.
This parameter must be specified.
HOLD_CURSOR
Specifies whether cursors are held across transaction commits. Valid values are
T, F, or no value. TP monitors typically reuse threads or processes for multiple
applications. To ensure that a newly loaded application does not inherit cursors
opened by a previous application, cursors are closed after a commit. If
HOLD_CURSORS is on, cursors with hold attributes are not closed, and will
persist across transaction commit boundaries. When using this option, the
The xa_open string TPM parameter and the tp_mon_name database manager
configuration parameter are used to indicate to DB2 which TP monitor is being
used. The tp_mon_name value applies to the entire DB2 instance. The TPM
parameter applies only to the specific XA resource manager. The TPM value
overrides the tp_mon_name parameter. Valid values for the TPM and tp_mon_name
parameters are as follows:
Table 40. Valid Values for TPM and tp_mon_name
TPM Value TP Monitor Product Internal Settings
CICS IBM TxSeries CICS AXLIB=libEncServer (for Windows)
=/usr/lpp/encina/lib/libEncServer
(for UNIX based systems)
HOLD_CURSOR=T
CHAIN_END=T
SUSPEND_CURSOR=F
TOC=T
ENCINA IBM TxSeries Encina® AXLIB=libEncServer (for Windows)
Monitor =/usr/lpp/encina/lib/libEncServer
(for UNIX based systems)
HOLD_CURSOR=F
CHAIN_END=T
SUSPEND_CURSOR=F
TOC=T
MQ IBM MQSeries® AXLIB=mqmax
(for Windows)
=/usr/mqm/lib/libmqmax_r.a
(for AIX threaded applications)
=/usr/mqm/lib/libmqmax.a
(for AIX non-threaded applications)
=/opt/mqm/lib/libmqmax.so
(for Solaris)
=/opt/mqm/lib/libmqmax_r.sl
(for HP threaded applications)
=/opt/mqm/lib/libmqmax.sl
(for HP non-threaded applications)
=/opt/mqm/lib/libmqmax_r.so
(for Linux threaded applications)
=/opt/mqm/lib/libmqmax.so
(for Linux non-threaded applications)
HOLD_CURSOR=F
CHAIN_END=F
SUSPEND_CURSOR=F
TOC=P
The database_alias is required to specify the alias name of the database. The alias
name is the same as the database name unless you have explicitly cataloged an
alias name after you created the database. The user name and password are
optional and, depending on the authentication method, are used to provide
authentication information to the database.
Examples:
1. You are using IBM TxSeries CICS on Windows. The TxSeries documentation
indicates that you need to configure tp_mon_name with a value of
libEncServer:C. This is still an acceptable format; however, with DB2 Database
for Linux, UNIX, and Windows or DB2 Connect Version 8 FixPak 3 and later,
you have the option of:
v Specifying a tp_mon_name of CICS (recommended for this scenario):
db2 update dbm cfg using tp_mon_name CICS
and, for each database defined to the XA TM, specifying an xa_open string:
db=dbalias,uid=userid,pwd=password
v For each database defined to the XA TM, specifying an xa_open string:
db=dbalias,uid=userid,pwd=password,axlib=myaxlib
5. You are developing your own XA-compliant transaction manager (XA TM) on
Windows, and you want to tell DB2 that library ″myaxlib″ has the required
functions ax_reg and ax_unreg. Library ″myaxlib″ is in a directory specified in
the PATH statement. You also want to enable XA END chaining. You have the
option of:
v For each database defined to the XA TM, specifying an xa_open string:
db=dbalias,uid=userid,pwd=password,axlib=myaxlib,chain_end=T
v For each database defined to the XA TM, specifying an xa_open string:
db=dbalias,uid=userid,pwd=password,axlib=myaxlib,chain_end
Related concepts:
v “X/Open distributed transaction processing model” on page 215
Related reference:
Procedure:
You will also require DB2 Connect with the DB2 sync point manager (SPM)
configured.
Related reference:
v “maxagents - Maximum number of agents configuration parameter” in
Performance Guide
v “max_connections - Maximum number of client connections configuration
parameter” in Performance Guide
Errors similar to those that occur for the DB2 transaction manager can occur when
using an XA-compliant transaction manager. Similar to the DB2 transaction
manager, an XA-compliant transaction manager will attempt to resynchronize
indoubt transactions.
If you cannot wait for the transaction manager to automatically resolve indoubt
transactions, you can manually resolve them. This manual process is sometimes
referred to as “making a heuristic decision”.
Restrictions:
Manually resolve indoubt transactions by using these commands (or related APIs)
with extreme caution, and only as a last resort. The best strategy is to wait for the
If you cannot wait for the transaction manager to initiate the resynchronization
process, and you must release the resources tied up by an indoubt transaction,
heuristic operations are necessary. This situation could occur if the transaction
manager will not be available for an extended period of time to perform the
resynchronization, and the indoubt transaction is tying up resources that are
urgently needed. An indoubt transaction ties up the resources that were associated
with this transaction before the transaction manager or resource managers became
unavailable. For the database manager, these resources include locks on tables and
indexes, log space, and storage taken up by the transaction. Each indoubt
transaction also decreases (by one) the maximum number of concurrent
transactions that can be handled by the database. Moreover, an offline backup
cannot be taken unless all indoubt transactions have been resolved.
The heuristic forget function releases the log space occupied by an indoubt
transaction. The implication is that if a transaction manager eventually performs a
resynchronization operation for this indoubt transaction, it could potentially make
the wrong decision to commit or roll back other resource managers, because there
is no log record for the transaction in this resource manager. In general a “missing”
log record implies that the resource manager has rolled back the transaction.
Procedure:
Related concepts:
v “Indoubt transaction management APIs” on page 230
v “Two-phase commit” on page 210
Related reference:
v “LIST DRDA INDOUBT TRANSACTIONS command” in Command Reference
v “LIST INDOUBT TRANSACTIONS command” in Command Reference
v “db2XaListIndTrans API - List indoubt transactions” in Administrative API
Reference
v “sqlcspqy API - List DRDA indoubt transactions” in Administrative API Reference
v “sqlxhfrg API - Forget transaction status” in Administrative API Reference
v “sqlxphcm API - Commit an indoubt transaction” in Administrative API Reference
v “sqlxphrl API - Roll back an indoubt transaction” in Administrative API Reference
Related samples:
v “dbxamon.c -- Show and roll back indoubt transactions.”
A set of APIs is provided for tool writers to perform heuristic functions on indoubt
transactions when the resource owner (such as the database administrator) cannot
wait for the Transaction Manager (TM) to perform the re-sync action. This condition
may occur if, for example, the communication line is broken, and an indoubt
transaction is tying up needed resources. For the database manager, these resources
include locks on tables and indexes, log space, and storage used by the transaction.
Each indoubt transaction also decreases, by one, the maximum number of
concurrent transactions that could be processed by the database manager.
The heuristic APIs have the capability to query, commit, and roll back indoubt
transactions, and to cancel transactions that have been heuristically committed or
rolled back, by removing the log records and releasing log pages.
Attention: The heuristic APIs should be used with caution and only as a last
resort. The TM should drive the re-sync events. If the TM has an operator
command to start the re-sync action, it should be used. If the user cannot wait for
a TM-initiated re-sync, heuristic actions are necessary.
Although there is no set way to perform these actions, the following guidelines
may be helpful:
v Use the db2XaListIndTrans function to display the indoubt transactions. They
have a status = ’P’ (prepared), and are not connected. The gtrid portion of an xid
is the global transaction ID that is identical to that in other resource managers
(RM) that participate in the global transaction.
v Use knowledge of the application and the operating environment to identify the
other participating RMs.
v If the transaction manager is CICS, and the only RM is a CICS resource, perform
a heuristic rollback.
v If the transaction manager is not CICS, use it to determine the status of the
transaction that has the same gtrid as does the indoubt transaction.
v If at least one RM has committed or rolled back, perform a heuristic commit or a
rollback.
v If they are all in the prepared state, perform a heuristic rollback.
v If at least one RM is not available, perform a heuristic rollback.
If the transaction manager is available, and the indoubt transaction is due to the
RM not being available in the second phase, or in an earlier re-sync, the DBA
should determine from the TM’s log what action has been taken against the other
RMs, and then do the same. The gtrid is the matching key between the TM and the
RMs.
decision to commit or to roll back other RMs, because no record was found in this
RM. In general, a missing record implies that the RM has rolled back.
Related reference:
v “db2XaListIndTrans API - List indoubt transactions” in Administrative API
Reference
v “sqlcspqy API - List DRDA indoubt transactions” in Administrative API Reference
v “sqlxhfrg API - Forget transaction status” in Administrative API Reference
v “sqlxphcm API - Commit an indoubt transaction” in Administrative API Reference
v “sqlxphrl API - Roll back an indoubt transaction” in Administrative API Reference
For example, in an AIX environment using CICS, when a TXSeries® CICS region is
started, it is associated with the AIX user name under which it is defined. All the
CICS Application Server processes are also being run under this TXSeries CICS
″master″ ID, which is usually defined as ″cics″. CICS users can invoke CICS
transactions under their DCE login ID, and while in CICS, they can also change
their ID using the CESN signon transaction. In either case, the end user’s ID is not
available to the RM. Consequently, a CICS Application Process might be running
transactions on behalf of many users, but they appear to the RM as a single
program with many units of work from the same ″cics″ ID. Optionally, you can
specify a user ID and password on the xa_open string, and that user ID will be
used, instead of the ″cics″ ID, to connect to the database.
There is not much impact on static SQL statements, because the binder’s privileges,
not the end user’s privileges, are used to access the database. This does mean,
however, that the EXECUTE privilege of the database packages must be granted to
the server ID, and not to the end user ID.
For dynamic statements, which have their access authentication done at run time,
access privileges to the database objects must be granted to the server ID and not
to the actual user of those objects. Instead of relying on the database to control the
access of specific users, you must rely on the TP monitor system to determine
which users can run which programs. The server ID must be granted all privileges
that its SQL users require.
To determine who has accessed a database table or view, you can perform the
following steps:
1. From the SYSCAT.PACKAGEDEP catalog view, obtain a list of all packages that
depend on the table or view.
2. Determine the names of the server programs (for example, CICS programs) that
correspond to these packages through the naming convention used in your
installation.
3. Determine the client programs (for example, CICS transaction IDs) that could
invoke these programs, and then use the TP monitor’s log (for example, the
CICS log) to determine who has run these transactions or programs, and when.
Related concepts:
v “X/Open distributed transaction processing model” on page 215
Related concepts:
v “X/Open distributed transaction processing model” on page 215
Related reference:
v “tpname - APPC transaction program name configuration parameter” in
Performance Guide
232 Administration Guide: Planning
Indoubt transaction management APIs
With either method, you must link your application with libdb2.
Windows
The pointer to the xa_switch structure, db2xa_switch_std, or db2xa_switch_static_std is
exported as DLL data. This implies that a Windows application using this structure
must reference it in one of three ways:
v Through one additional level of indirection. In a C program, this can be
accomplished by defining the macro:
#define db2xa_switch_std (*db2xa_switch_std)
#define db2xa_switch_static_std (*db2xa_switch_std)
With any of these methods, you must link your application with db2api.lib.
Example C Code
The following code illustrates the different ways in which the db2xa_switch_std or
db2xa_switch_static_std can be accessed via a C program on any DB2 V9.1 platform.
Be sure to link your application with the appropriate library.
#include <stdio.h>
#include <xa.h>
#ifdef DECLSPEC_DEFN
extern __declspec(dllimport) struct xa_switch_t db2xa_switch_std;
#else
#define db2xa_switch_std (*db2xa_switch_std)
extern struct xa_switch_t db2xa_switch_std;
#endif
main( )
{
struct xa_switch_t *foo;
printf ( "%s \n", db2xa_switch_std.name );
foo = db2xacic_std();
printf ( "%s \n", foo—>name );
return ;
}
Related concepts:
v “X/Open distributed transaction processing model” on page 215
You should also consult the console message, TM error file, or other
product-specific information about the external transaction processing software that
you are using.
The database manager writes all XA-specific errors to the First Failure Service Log
with SQLCODE -998 (transaction or heuristic errors) and the appropriate reason
codes. Following are some of the more common errors:
v Invalid syntax in the xa_open string.
v Failure to connect to the database specified in the open string as a result of one
of the following:
– The database has not been cataloged.
– The database has not been started.
– The server application’s user name or password is not authorized to connect
to the database.
v Communications error.
Related concepts:
v “X/Open distributed transaction processing model” on page 215
Related reference:
v “xa_open string formats” on page 221
There is one resource manager configuration for each DB2 database, and each
resource manager configuration must have an rm name (″logical RM name″). To
simplify the situation, you should make it identical to the database name.
If you are accessing DB2 for z/OS and OS/390, DB2 for iSeries, or DB2 for VSE &
VM, you must use the DB2 Syncpoint Manager.
Related concepts:
v “DB2 Connect and transaction processing monitors” in DB2 Connect User’s Guide
Related reference:
v “tp_mon_name - Transaction processor monitor name configuration parameter”
in Performance Guide
v “xa_open string formats” on page 221
Note: There are new names for the XA switch data structures: db2xa_switch_std and
db2xa_switch_static_std. There are also new names for the APIs: db2xacic and
db2xacicst. The old switch data structure and API names can be used but
only when working with a 32-bit instance of DB2 Database for Linux, UNIX,
and Windows.
Procedure:
To configure Tuxedo to use DB2 Database for Linux, UNIX, and Windows as a
resource manager, perform the following steps:
1. Install Tuxedo as specified in the documentation for that product. Ensure that
you perform all basic Tuxedo configuration, including the log files and
environment variables.
You also require a compiler and the DB2 Application Development Client.
Install these if necessary.
2. At the Tuxedo server ID, set the DB2INSTANCE environment variable to
reference the instance that contains the databases that you want Tuxedo to use.
Set the PATH variable to include the DB2 program directories. Confirm that the
Tuxedo server ID can connect to the DB2 databases.
3. Update the tp_mon_name database manager configuration parameter with the
value TUXEDO.
4. Add a definition for DB2 V9.1 to the Tuxedo resource manager definition file.
In the examples that follow, UDB_XA is the locally-defined Tuxedo resource
manager name for DB2 V9.1, and db2xa_switch_std is the DB2-defined name for
a structure of type xa_switch_t:
v For AIX. In the file ${TUXDIR}/udataobj/RM, add the definition:
# DB2 UDB
UDB_XA:db2xa_switch_std:-L${DB2DIR} /lib -ldb2
where {TUXDIR} is the directory where you installed Tuxedo, and {DB2DIR} is
the DB2 instance directory.
v For Windows. In the file %TUXDIR%\udataobj\rm, add the definition:
# DB2 UDB
UDB_XA;db2xa_switch_std;%DB2DIR%\lib\db2api.lib
where %TUXDIR% is the directory where you installed Tuxedo, and %DB2DIR% is
the DB2 instance directory.
5. Build the Tuxedo transaction monitor server program for DB2:
v For AIX:
${TUXDIR}/bin/buildtms -r UDB_XA -o ${TUXDIR}/bin/TMS_UDB
After the command completes, Tuxedo messages should indicate that the
servers are started. In addition, if you issue the DB2 command LIST
APPLICATIONS ALL, you should see two connections (in this situation)
specified by the TMSCOUNT parameter in the UDB group in the Tuxedo
configuration file, UDBCONFIG.
Related concepts:
v “DB2 Connect and transaction processing monitors” in DB2 Connect User’s Guide
Related reference:
v “LIST APPLICATIONS command” in Command Reference
v “tp_mon_name - Transaction processor monitor name configuration parameter”
in Performance Guide
For example, in the reference material you will see the new parameters in the
command or SQL statement syntax and description with a note that says that this
new parameter is replacing another parameter. However, that other, older
parameter will continue to be recognized for a period of time. The actual time for
this continued support of the older parameter is not explicitly stated because it is
There are also new functions or features for the product that are first discussed in
the ″What’s New″ document.
Some of these deprecated function or features, or the new functions and features,
will have an impact for you if you are a current customer of our product. The
impacts are outlined as part of the discussion on migration.
What follows is a list of those differences in the current release from the previous
release of DB2.
Change:
Symptom:
Explanation:
Resolution:
Change:
This column will only contain valid information if the column names are less than
or equal to 30 bytes, and if there are less than or equal to 16 columns in the index.
Either a blank or a NULL value is returned if any column name exceeds 30 bytes,
or if there are greater than 16 columns.
Explanation:
Resolution:
Application programming:
Change:
Explanation:
Note: The set integrity pending state replaces the check pending state. They are
equivalent states.
Resolution:
Use the iSetIntegrityPending parameter with the db2Load API. The values to use
with this new parameter are: SQLU_SI_PENDING_CASCADE_IMMEDIATE or
SQLU_SI_PENDING_CASCADE_DEFERRED.
Change:
Deprecating these routines means that there will be no further investment in the
routines. The documentation for the routines is updated to indicate that the routine
is deprecated, but is being maintained for compatibility. At some point in the
future these UDFs and routines will be removed from the catalogs and
documentation.
Explanation:
New routines based on the SQL Administrative API standards, are replacing old
functions created before the standards were implemented.
Resolution:
New equivalent functions with similar names beginning with SNAP_GET_ are
available. Different parameters and additional columns may be associated with the
new functions. You should review the differences before using the replacement
functions within your applications.
For additional information on the deprecated UDFs and procedures, and the new
equivalent functions and views, refer to “Deprecated SQL administative routines
and their replacement routines or views”.
Use the new functions, routines and views; applications using the old functions
and procedures should consider a plan to update the applications by moving to
the new functions and routines. The old functions and procedures will continue to
be supported for compatibility. However, this support will be removed in a future
version or release of the product.
Change:
Within the AIX and Windowsoperating system environments, support for the
default function entry points in external routine libraries is deprecated.
Explanation:
There is a risk of instance failure when only specifying the library name and using
the default entry point when routines are run in trusted (not fenced) mode.
Resolution:
Change:
Explanation:
A new type of index was introduced in Version 8, called a type-2 index. With
type-1 indexes, that is indexes created prior to Version 8, a key is physically
removed from a leaf page as part of the deletion or update of a table row. With
type-2 indexes, keys are marked as deleted when a row is deleted or updated, but
they are not physically removed until after the deletion or update is committed.
When support for re-creation of type-1 indexes is removed, you will not have to
rebuild your indexes manually. Type-1 indexes will continue to function correctly.
All actions that result in the re-creation of indexes will automatically convert
type-1 indexes to type-2 indexes. In a future version, support for type-1 indexes
will be removed.
Resolution:
Use the newer type-2 indexes. This can be done by converting the older indexes
manually (by request during a REORG of the indexes). All new indexes use the
new type-2 indexes.
Change:
The DB2 JDBC type 2 driver was deprecated in version 8.2, and remains
deprecated in version 9.1. Support for the driver will be removed in a future
release.
Resolution:
Change:
Explanation:
Resolution:
Change:
Explanation:
Resolution:
Stubs for the db2util.dll, db2abind.dll, and db2cli.dll libraries are still available for
backwards compatibility. These stubs will be removed in a future version or release
of the product.
SQL:
Change:
Some of the existing administrative routines have been replaced by newer, more
comprehensive routines or views.
Explanation:
Resolution:
Applications that use Version 8 table functions should be modified to use the new
functions or administrative views. The new table functions have the same base
names as the original functions but are suffixed with “_Vxx” to identify the version
of the product in which they were added. However, the administrative views will
always be based on the most current version of the table functions, and therefore
allow for more application portability.
Change:
Explanation:
Resolution:
The term “distribution key” is used in the documentation where it once was
“partitioning key”.
Change:
The ADD PARTITIONING KEY clause of the ALTER TABLE statement is being
deprecated. This clause is being replaced by the ADD DISTRIBUTE BY HASH
clause.
The DROP PARTITIONING KEY clause of the ALTER TABLE statement is being
deprecated. This clause is being replaced by the DROP DISTRIBUTION clause.
Explanation:
Resolution:
The old PARTITIONING KEY clause in the syntax is supported for backwards
compatibility. However, the clause not be supported in a future release of the
product. Therefore, you should plan to convert applications that use this old
syntax to the new syntax.
Change:
Following your migration to DB2 Version 9, values in the catalog views will
change. Fore example, the ESTORE column within the SYSCAT.BUFFERPOOLS
catalog view will always be “N”. Any data definition language (DDL) that may be
run to attempt to change this value will be tolerated but will have not effect.
There are monitor elements that are still present, but are deprecated in Version 9.
The four monitor elements are:
v pool_data_to_estore
v pool_index_to_estore
v pool_data_from_estore
v pool_index_from_estore
In a future release or version of DB2 products, using the monitor elements relating
to extended storage, and the output generated by the contents of those elements
when requesting a GET SNAPSHOT command, will no longer be available.
Explanation:
Extended storage acted as an extended look-aside buffer for the main buffer pools.
It allowed for memory performance improvements which took advantage of
computers with large amounts of main memory. For computers with 64-bit
environments, extended storage and other similar methods are no longer needed.
Resolution:
Change:
This release no longer includes a set of utilities for the creation of DB2 desktop
folders and icons for launching commonly used product tools on the Gnome and
KDE desktops for supported Intel®-based Linux distributions.
Only the Linux and supported UNIX operating systems are affected.
Change:
Explanation:
In the past, the db2ilist command could be used to list all available instances on a
system. Now, the db2ilist command only lists the instances related to the current
installation path and only one type of instance on each UNIX or Linux platform.
Resolution:
The db2ilist command can still be used. The deprecated options on the command
should not be used.
db2reg2large utility for converting DMS table space size is no longer available:
Change:
The db2reg2large utility, which is used for converting Regular DMS table spaces to
Large DMS tale spaces has been discontinued in DB2 Version 9.
Resolution:
Change:
Explanation:
The DB2 JDBC Type 2 Driver originally used the name db2profc for the SQLJ
profile customizer command, and the name db2profp for the SQLJ profile printer
command.
Resolution:
For the IBM DB2 Driver for JDBC and SQKJ, the SQLJ profile customizer command
is named db2sqljcustomize, and the SQLJ profile printer command is name
db2sqljprint. Use these commands instead of db2profc and db2profp.
Change:
Explanation:
The name of the command suggested that it was only for use with Version 8.2 of
the product (db2secv82). The new name will be for use in the current release and
in future releases.
Resolution:
Use the set permissions for database objects (db2extsec) command in place of the
set permissions for database objects (db2secv82) command. You should locate and
change references to the db2secv82 command in your applications and scripts and
develop a plan to replace those references with ones to the db2extsec command.
On systems using the Database Partitioning Feature (DPF), table space data
definition language (DDL) may not be complete if some database partitions are not
active. When requesting DDL on systems using DPF, a warning message is
displayed in place of the DDL for table spaces that exist on inactive database
partitions.
Explanation:
The use of automatic re-sizing and automatic storage across databases partitions,
and the resulting need to gather data using a snapshot approach, requires that each
database partition be active.
Resolution:
To ensure proper DDL is produced for all table spaces, all database partitions must
be activated.
Change:
The WordWidth (-w) option of the db2icrt, db2ilist, and db2iupdt commands is
ignored when used and is being deprecated. This option provided the instance
width in bits.
Resolution:
There is no effect if this option continues to be specified. The option is only valid
on AIX 5L™, HP-UX, Linux, and the Solaris operating systems.
Manual installation:
Change:
Explanation:
Resolution:
Change:
The Lock Object Name that is part of the snapshot monitor sample ouput provides
no value and contains redundant information from the Lock Name part of the
output. The monitor element “lock_object_name” will be deprecated in a future
release.
Explanation:
The output report from the snapshot monitor produces a list of locks. The Lock
Name is the first item in the list. This information is taken from the monitor
element “lockname”. Later in the report, the Lock Object Name is shown. This
information is taken from the monitor element “lock_object_name”. The
information presented as part of this item could also have been extracted from the
value given for the monitor element “lockname”.
Resolution:
You should plan not to use the GET SNAPSHOT FOR LOCKS ON <dbname>
command to return the “Lock Object Name” in any new or revised applications.
Change:
Explanation:
Resolution:
Do not use raw devices for logging. You may need to change the newlogpath
database configuration parameter setting to a disk device instead of a raw device.
Remember to stop and restart the database manager to make the new setting for
the configuration parameter effective.
Symptom:
The db2batch command now runs only in CLI mode. CLI mode used to be
specified using the -cli option. Embedded dynamic SQL was the default mode, but
this has been changed so that the command only runs in CLI mode. Also, scripts
that perform REBIND or BIND on db2batch.bnd will fail because a “bnd” file is no
longer shipped.
Explanation:
Resolution:
You can continue to use the -cli option for backward compatibility only, but it has
no effect. You can change the default isolation level by specifying the TxnIsolation
configuration keyword in the db2cli.ini file. The new -iso option is used to
specify the isolation level.
Change:
Explanation:
In DB2 Universal Database (UDB) Version 5, the semantics of unique indexes were
changed to deferred unique. To support this change, the db2uiddl tool was
introduced to convert unique indexes to the new semantics. When databases using
pre-Version 5 unique index semantics are migrated, all unique indexes are not
automatically changed to Version 5 semantics because converting unique indexes is
a very time-consuming operation, and you will want to manage the conversion
based on your business needs.
Resolution:
Develop a plan to convert all unique indexes created prior to DB2 UDB Version 5
to the new deferred unique index semantics before support for db2uiddl is
removed. The db2uiddl tool searches the system catalogs for indexes without
Change:
Explanation:
Resolution:
Develop a plan to revoke the EXECUTE privilege from the PUBLIC group before
the db2undgp tool is deprecated.
Change:
A new type of index was introduced in Version 8, called a type-2 index. With
type-1 indexes, that is indexes created prior to Version 8, a key is physically
removed from a leaf page as part of the deletion or update of a table row. With
type-2 indexes, keys are marked as deleted when a row is deleted or updated, but
they are not physically removed until after the deletion or update is committed.
When support for re-creation of type-1 indexes is removed, you will not have to
rebuild your indexes manually. Type-1 indexes will continue to function correctly.
All actions that result in the re-creation of indexes will automatically convert
type-1 indexes to type-2 indexes. In a future version, support for type-1 indexes
will be removed.
Explanation:
Resolution:
Develop a plan to convert your existing indexes to type-2 indexes over time. The
Online Index Reorganization capability can help do this while minimizing
availability outages. Increase index table space size if needed. Consider creating
new indexes in large table spaces and moving existing indexes to large table
spaces.
Note: If you convert pre-Version 5 indexes to type-2, you do not need to run the
db2uiddl tool.
Change:
For DB2 clients connecting to DB2 for Linux, UNIX, and Windows DB2 database
servers, the CLISchema keyword is deprecated.
For DB2 clients connecting to DB2 for z/OS database servers, the CLISchema
keyword is dropped.
Resolution:
DB2 clients should no longer use the CLISchema keyword. One keyword that is
similar to CLISchema is SysSchema.
Change:
The DB2 Warehouse Manager Standard Edition is not available for this release. The
Data Warehouse Center and the Information Catalog Center are not included in
this release.
Resolution:
These products and centers are being developed and released separately from the
base DB2 Version 9 product.
Change:
Resolution:
A direct replacement function is not available. However, there are other full-text
search products capable of performing similar tasks. For example, there are DB2
Net Search Extender that is very like the Text Extender; and, WebSphere
Information Integrator OmniFind™ Edition that provides an enterprise search
solution for finding the most relevant corporate information. The information can
be found not only in a relational database but searched across intranets, extranets,
corporate public Web sites, and a wide range of content repositories.
Change:
Audio, Image, and Video (AIV) Extenders are no longer supported in this release.
Resolution:
You might consider implementing your own extensions similar to the AIV
Extenders to enhance the DB2 functionality using DB2 user-defined functions and
third party software.
Change:
In previous releases, the DB2 Administration Tools, including the Control Center,
were supported on all platforms. In Version 9, the DB2 Administration Tools, are
supported only on Windows x86, Windows x64 (AMD64 or EM64T), Linux on x86,
and Linux on AMD64 or EM64T.
Change:
Change:
A value may be set for each of these configuration parameters but the value is
ignored. (That is, the value will have no effect.)
Change:
Related reference:
v “Deprecated SQL administrative routines and their replacement routines or
views” in Administrative SQL Routines and Views
Note: Although an attempt has been made to list all of the currently known
product incompatibilities, there may be more recent incompatibilities
documented in the product release notes.
Windows UNIX
Change:
There is a change in type (and length) of the SETTING fields in specific catalogs.
Symptom:
Explanation:
The SETTING files in the following catalogs have changed from VARCHAR(255) to
CLOB(32K):
v SYSCAT.TABOPTIONS
v SYSCAT.COLOPTIONS
Application programs that SELECT the SETTING fields from these catalogs will
need to be rewritten because of the restrictions on large objects (LOBs) for SQL
statements.
Resolution:
Rewrite your application programs that SELECT the SETTING fields from the
catalogs specified.
Application Programming:
Windows UNIX
Change:
Explanation:
The new format presents the port number and IP address in a readable form that
also accommodates the longer IPv6 addresses.
Resolution:
If you have scripts that parse output that contains the application ID, you will
need to modify the parsing conditions to account for the new format. For example,
you may parse the output from the LIST APPLICATIONS command.
Windows UNIX
Change:
The DB2 Embedded Application Server enables you to run the Web applications
supplied with DB2 without needing to purchase an application server. In Version 8,
the DB2 Embedded Application Server was also referred to as the application server
for DB2 UDB.
The XML Metadata Repository (XMR) application is not longer supported as one
of the applications with DB2 Embedded Application Server.
Resolution:
For users of the XMR application in Version 8, it is necessary to uninstall XMR and
find a replacement product. WebSphere offers several suitable replacement
products.
IBM Software Development Kit (SDK) for Java 5.x is now supported:
Windows UNIX
Change:
The IBM Software Development Kit (SDK) for Java 5.x is now supported on the
following operating system platforms: AIX 5, Linux on x86, Linux on
AMD64/EM64T, Linux on zSeries®, Linux on POWER™, Windows x86 and
Windows x64.
Resolution:
Windows UNIX
Change:
The removal of support for most 32-bit database instances has resulted in changes
in support for application and routines.
Symptom:
There are new environment variable values within the client application
environment.
SQL procedures that you created for 32-bit instances of DB2 Universal Database
Version 8 with any of FixPak 1 through FixPak 6 will not run on 64-bit instances of
DB2 Version 9. To successfully migrate these SQL procedures to DB2 Version 9, you
must drop and recreate the SQL procedures using the target 64-bit database server.
SQL procedures created for 32-bit instances of DB2 Universal Database Version 7 or
Version 8 with any FixPak will continue to work on the supported 32-bit instances
of DB2 Version 9.
Explanation:
The removal of support for most 32-bit database instances has resulted in changes
in support for application and routines.
Resolution:
You will need to consider whether you need to remain using a 32-bit database
instance as a result of the product changes, or if you should move to a 64-bit
database instance.
For example, only a 64-bit JVM is provided with 64-bit DB2 database servers. A
32-bit JVM is provided only for the Linux x86 and Windows on x86 operating
systems. Finally, Java external routines require a 32-bit JVM for 32-bit DB2 database
servers and a 64-bit JVM for 64-bit DB2 database servers.
Windows UNIX
New functions, function signatures for existing functions, or procedures have been
added to the set of routines shipped with the product.
Symptom:
Explanation:
The default SQL path contains the schemas SYSIBM, SYSFUN, SYSPROC, and
SYSIBMADM before the schema name which is the value of the USER special
register. These system schemas are also usually included in the SQL path when it
is explicitly set using the SET PATH statement or the FUNCPATH bind option.
When function resolution and procedure resolution is performed, the shipped
functions and procedures in these schemas will be considered before user-defined
functions and user-defined procedures.
In Version 9, the following functions and procedures were added to the set of
shipped functions and procedures:
CHARACTER_LENGTH
OCTET_LENGTH
POSITION
SECLABEL
SECLABEL_BY_NAME
SECLABEL_TO_CHAR
STRIP
SUBSTRING
TRIM
XMLCOMMENT
XMLDOCUMENT
XMLQUERY
XMLTEXT
XMLVALIDATE
XMLXSROBJECTID
In Version 9, new administrative functions and procedures were added. Since the
naming convention used for these functions and procedures make it more unlikely
that a user-defined function or user-defined procedure would have the same name,
they are not listed here. See the Administrative SQL Routines and Views for a list of
these functions and procedures.
Resolution:
Windows UNIX
Change:
There are two new agents that will be included as part of the LIST
APPLICATIONS command.
Explanation:
There are two new agents (db2stmm and db2taskd) requiring connection to the
database at all times. As a result, there are two new agents that will be included as
part of the LIST APPLICATIONS command. If you have any scripts designed to
monitor the output from the LIST APPLICATIONS command, they will need to be
modified based on these two new agents.
Resolution:
Modify any scripts designed to monitor the output from the LIST APPLICATIONS
command to account for the presence of the two new agents.
Windows UNIX
Change:
Symptom:
There may be an increase in the amount of storage used if you have scripts that
are used to create DMS table spaces and that do not explicitly specify the size
(whether regular or large). The old default was “regular”, the new default is
“large”.
Explanation:
The default size for DMS table spaces is “large” which takes up more space than a
“regular” table space.
Resolution:
For those scripts which you use to create table spaces and have, in the past, simply
accepted the default, you should consider modifying the scripts by adding explicit
requests for a “regular” table space size if that is what you wish.
Windows UNIX
Change:
Cursor blocking can no longer be used for SQL procedures, regardless of the value
that you specify for the BLOCKING bind option. The data is always received one
row at a time.
Explanation:
Resolution:
Reveiw those applications where you use cursor blocking. These applications
might need to be modified based on this change in behavior.
Windows UNIX
Change:
The space required by each lock in a lock list has changed such that a lock list of a
given size can no longer represent as many locks as it once did.
Explanation:
Resolution:
Windows UNIX
Change:
Explanation:
One such case occurs when a search is performed on a graphic string data type. In
releases before Version 9.1, in a Unicode database, graphic strings would be
converted to character strings before the function was invoked. The position at
which the search succeeded is counted in terms of bytes for SYSFUN.LOCATE,
whereas it is counted in terms of units of TWO bytes for SYSIBM.LOCATE when
no CODEUNITS specification is specified.
Another difference occurs when a 2-byte graphic character search string that may
occur as a byte pattern that spans two “real characters” in the source string. For
example searching for GX'2233 in a string GX'11223344 succeeds with
SYSFUN.LOCATE, but returns 0 (NOT FOUND) with SYSIBM.LOCATE. This is
because SYSFUN.LOCATE does a byte-based search and SYSIBM.LOCATE does a
character-based search. The characters in the source string are “1122” and “3344”.
There is no character “2233”, it is just a byte pattern that is present; but straddles
two characters.
Resolution:
If the difference in results caused by illegal characters is acceptable, users can use
OCTETS as the codeunit specification to get the same behavior as
SYSFUN.LOCATE. If the exact behavior of the SYSFUN.LOCATE function is
required, applications can use the function name qualified with the schema name.
Our recommendation is to adapt the application to use the new SYSIBM.LOCATE
as it offers more functionality.
Windows UNIX
Not all SQL functions that operate on character strings are limited to processing
“bytes”.
Explanation:
Resolution:
Take some care in the selection of the functions you use when you may encounter
illegal characters in the data being processed. Different results could be expected
based on the function used.
Windows UNIX
Change:
When creating new primary keys, unique keys, or indexes (except extended index),
ALLOW REVERSE SCANS is the default. Consequently, the access plan may
change and query execution times may improve because the optimizer may be able
to use the reverse index scan in some SQL statements. The exception is when
working with extended index types. In the previous release, the default used to be
DISALLOW REVERSE SCANS.
Explanation:
The new default allows the optimizer to consider both forward and reverse scans
through the index.
Note: If you create two indexes on the same table, one specifying ascending order
(ASC) and the other specifying descending order (DESC), and if you do not
specify the DISALLOW REVERSE SCANS option in the CREATE INDEX
statement, the two indexes will default to ALLOW REVERSE SCANS. As a
result, the latter index will not be created and a duplicate index warning
message is issued.
Resolution:
In prior versions, you may have created one forward scan index and one reverse
scan index to speed up the application. Unfortunately, this requires the
maintenance of two indexes. Now that reverse scans is enabled by default, the two
indexes can be replaced with a single one that is enabled for reverse scans.
Windows UNIX
Change:
When a new database is created, self tuning memory, the Configuration Advisor,
and automated RUNSTATS are enabled by default.
Explanation:
After creating a new database, you may see different query plans or workload
behavior resulting from changes caused by the new defaults for these autonomic
features. Existing applications or scripts that rely on previous DB2 default behavior
and database configuration values, may see changes because some configuration
values will have changed.
Resolution:
Disallowing multiple changes to the same buffer pool within one unit:
Windows UNIX
Change:
No longer allow multiple ALTER BUFFERPOOL statements within the same unit
of work.
Explanation:
The addition of the self tuning memory manager in Version 9, increases the
complexity in the actions that may be made on the characteristics of buffer pools.
To limit this complexity, multiple alterations to the characteristics of the same
buffer pool within a single unit of work is disallowed.
Resolution:
Windows UNIX
Change:
In DB2 Version 9, changing the session authorization ID to a new value using the
SET SESSION AUTHORIZATION statement requires that the authorization ID of
the SQL statement have the SETSESSIONUSER privilege. This privilege can be
granted by a security administrator (SECADM) using the new GRANT
SETSESSIONUSER statement.
Explanation:
In DB2 UDB Version 8, users with DBADM or SYSADM authority could assume
different authorization IDs on the same connection using the SET SESSION
AUTHORIZATION statement. In DB2 Version 9, the new SETSESSIONUSER
privilege, which can only be granted by a security administrator (SECADM), is
required to perform this task.
Resolution:
For backward compatibility, and to avoid loss of existing user privileges, any
authorization ID that explicitly holds DBADM authority (as recorded in the
SYSCAT.DBAUTH catalog view) is automatically granted the SETSESSIONUSER
privilege upon migration to DB2 Version 9. A user who acquires DBADM authority
after migration to DB2 Version 9 will not be able to change the session
authorization ID unless they are explicitly granted the SETSESSIONUSER privilege.
Windows UNIX
Change:
Prior to DB2 Version 9, restore and log retrieval could search for objects based on a
management class, if it was specified. Because the management class can change,
filtering based on management class could produce incorrect results. Consequently,
management class is no longer used as a basis for filtering.
Explanation:
Management class is a Tivoli Storage Manager (TSM) concept that helps with the
management of objects according to defined storage policies. When a backup
image, a load copy image, or a log file is written to TSM, a particular management
class is associated with that object. After a log file is written to, or a backup image
is stored, the management class may be changed through TSM.
Resolution:
Windows UNIX
Change:
The SET INTEGRITY and REFRESH TABLE statements require specific authorities
and privileges to work on the tables affected by these statements. The list of
authorities and privileges that may be held by the authorization ID has changed
from Version 8 to Version 9.
Resolution:
Bringing tables out of the set integrity pending state and performing the needed
integrity processing requires specific authorities and privileges. The authorities and
privileges held by the authorization ID of the statement must include at least one
of the following:
v CONTROL privilege on:
– The tables on which integrity processing is performed and, if exception tables
are provided for one or more of those tables, INSERT privilege on the
exception tables
– All descendent foreign key tables, descendent immediate materialized query
tables, and descendent immediate staging tables that will implicitly be placed
in set integrity pending state by the statement
v LOAD authority (with conditions). The following conditions must all be met
before LOAD authority can be considered as providing valid privileges:
– The required integrity processing does not involve the following actions:
- Refreshing a materialized query table
- Propagation to a staging table
- Updates of a generated or identity column
– If exception tables are provided for one or more tables, the required access is
granted for the duration of the integrity processing to the tables on which
integrity processing is performed, and to the associated exception tables. That
is:
- SELECT and DELETE privilege on each table on which integrity processing
is performed; and,
- INSERT privilege on the exception tables
v SYSADM or DBADM authority
Windows UNIX
Change:
The maximum number of columns in an index has been increased from 16 to 64;
and so has the maximum size of an index key which depends on the index page
size. Sort heap overflows require a system temporary table space that has a large
enough page size to be used by the sort.
Explanation:
Resolution:
Applications that may encounter this error message should be updated to detect it
and to react in accordance with the message.
Windows UNIX
Change:
Explanation:
Extended storage acted as an extended look-aside buffer for the main buffer pools.
It allowed for memory performance improvements which took advantage of
computers with large amounts of main memory. For computers with 64-bit
environments, extended storage and other similar methods are no longer needed.
Resolution:
Extended storage should no longer be used. If you are using Windows and you
want to use more memory, you should consider moving to a 64-bit operating
system. However, if you have to stay on a Windows 32-bit operating system, you
can use Address Windowing Extensions (AWE) to overcome the 32-bit space
limitation. AWE is controlled by the registry variable DB2_AWE.
Windows UNIX
Change:
The CREATE DATABASE command and sqlecrea() API have been changed in
Version 9. They will now create automatic storage-enabled databases by default.
You will have to explicitly specify non-automatic storage to use the old behavior.
Symptom:
Explanation:
Due to the change of table space type, disk requirements will increase. By default,
non-temporary automatic storage table spaces increase by 32 MB at a time, so
small databases may take more disk space. This space will be used as the database
grows. Similarly, empty tables will consume more space. An empty table and index
will consume 512 KB. This can be reduced by changing the extent size for the table
space, either explicitly or by modifying the default extent size (DFT_EXTENT_SZ)
in the database configuration. For small databases, an extent size of 4 is suggested.
The extent size can only be chosen when the table space is created.
Resolution:
Windows UNIX
Change:
Explanation:
The load utility is now recommended for distributing and loading data within
partitioned database environments.
Resolution:
Use the load utility for distributing and loading data within partitioned database
environments.
Windows UNIX
Change:
You cannot use the distributed data files from a previous release when performing
a load operation using the CURSOR file type and the PARTITION_ONLY
partitioned database configuration load option in the current release.
Explanation:
Resolution:
When performing a load operation on a Version 9 DB2 server using the CURSOR
file type and the PARTITION_ONLY partitioned database configuration load
option, you must use the set of distributed data files created using DB2 Version 9.
Windows UNIX
Change:
Explanation:
The load utility is now recommended for distributing and loading data.
Resolution:
The load utility is the only supported bulk loader. The load utility can be run
using the db2Load API.
Changes to db2batch:
Windows UNIX
Change:
Embedded dynamic SQL was the default mode, but this has been changed so that
the command only runs in CLI mode. The output provided by the db2batch
command is improved by including additional information such as time stamps
and clearer messages. The output is also in a new format.
Explanation:
Resolution:
You can continue to use the -cli option for backward compatibility only, but it has
no effect. You can change the default isolation level by specifying the TxnIsolation
configuration keyword in the db2cli.ini file. The new -iso option is used to
specify the isolation level.
Windows UNIX
Change:
The created set of distributed data files created using a LOAD command in a
previous version using the CURSOR file type and the PARTITION_ONLY
partitioned database configuration load option is specified cannot be used as input
to the LOAD command in Version 9. That is, the distributed data files created
previously are not compatible with a LOAD command using the CURSOR file type
and the LOAD_ONLY partitioned database configuration load option.
Explanation:
Resolution:
When creating a set of distributed data files, you should partition the data and
load the data using the same version of the DB2 product.
Windows UNIX
Change:
If an SQLCODE exists for messages returned by the db2ckmig tool, the db2ckmig
log file now includes both the SQLCODE and the SQL message text.
Explanation:
In previous releases, the db2ckmig tool reported errors using message text from its
own message file. However, in some cases, existing SQLCODEs also describe the
errors. Having the SQLCODE in the db2ckmig log file, means that you can refer to
the messages documentation for a more detailed explanation of the problem and
possible user responses.
Resolution:
Any tools built on the exact message text of the db2ckmig log file might require
changes to parse SQLCODEs.
Windows UNIX
Change:
The output generated as part of the REORGCHK command is changed for Version
9.
Resolution:
You may have to take into account the changes made to the output from the
REORGCHK command.
Windows UNIX
Change:
The database tools, utilities, and commands that are provided support migration
from Version 8 but not from Version 7.
Explanation:
The breadth and complexity of the changes from Version 7 to Version 8; and from
Version 8 to Version 9 make the migration path from Version 7 to Version 9 too
difficult to be done with one set of migration tools and commands.
Resolution:
Use the migration information to plan for your migration to the current version
and release. This may involve migrating to Version 8 before attempting to migrate
to the current version and release.
Windows UNIX
Change:
The naming convention for backup images stored on Windows operating systems
has changed to match the naming convention used for all other operating systems.
Explanation:
File names for backup images created on disk will now consist of a concatenation
of several elements, separated by periods:
DB_alias.Type.Inst_name.NODEnnnn.CATNnnnn.timestamp.Seq_num
Resolution:
Note: Backup images from earlier versions of the product that use the previous
naming structure can still be restored on V9.1 DB2 database systems.
Linux UNIX
Change:
In the output generated by the db2look command, the value displayed for the
identity collating sequence is now IDENTITY.
Explanation:
In previous releases, the value BINARY was displayed for the identity collating
sequence in the output generated by the db2look command and the GET
DATABASE CONFIGURATION command. The collating sequence itself has not
changed.
Linux UNIX
Change:
The following changes have been made to the load, import, and export utilities:
v When recreating tables using the IXF file format, if a feature cannot be recreated
during the import process using the CREATE option, you will receive a warning
during the export process and an error during the import process. In some cases,
you can force the creation of tables from IXF files by specifying the file type
modifier FORCECREATE. This new behavior only affects files exported using
DB2 Version 9.1.
v The extension for an exported LOB file is now .lob. For example,
filename.001.lob, filename.002.lob. The default name of the lob file is the input
data file name. For example, <datafile>.001.lob, <datafile>.002.lob. If the input
data file is generated in DB2 UDB Version 8, the DB2 Version 9.1 import utility
can read it correctly.
v When moving LOB data, the default paths and the order in which the load,
import, and export utilities search for these paths have changed.
v When exporting and importing LOB data, the LOBSINFILE keyword is specified
automatically if you specify the LOBS TO or LOBFILE options in the EXPORT
command, or the LOBS FROM option in the IMPORT command. In DB2 UDB
Version 8, if the LOBSINFILE file type modifier was not specified, the LOBS TO,
LOBS FROM, and LOBFILE options were ignored.
Linux UNIX
Change:
The -d option, which shows database level memory, is now supported on Windows
platforms. The -i option, which shows instance level memory, no longer shows the
database level memory.
Explanation:
Resolution:
On Windows platforms, use the -d option of the db2mtrk command to see the
database level memory.
Linux UNIX
Change:
The following changes have been made to the diagnostic level and location of
messages related to automatic maintenance:
v A diagnostic record is written in the db2diag.log file whenever automatic
maintenance health indicators are evaluated. If a maintenance operation occurs
as a result of these evaluations, a diagnostic record is written in both the
db2diag.log file and the notification log.
v The diagnostic records associated with automatic maintenance are classified as
″info″ records.
v These diagnostic records will only be written when the diagnostic level
(diaglevel) or notification level (notifylevel) of the instance is set to a value of 4.
Explanation:
Resolution:
To ensure that diagnostic records (″event″ records) appear in the db2diag.log file
and the notification log, set the diagnostic level (diaglevel) or notification level
(notifylevel) of the instance to 4.
Linux UNIX
Change:
For DB2 Version 9 clients, all table space rollforward recovery operation must be
done to a point in time.
Resolution:
Linux UNIX
Change:
Explanation:
In earlier versions of DB2, the event monitor would be active and would appear as
an active event monitor process on these database partitions but would not write
any data.
Linux UNIX
Change:
Record identifier (RID) size was increased to support LARGE table spaces. The
growth rate for log files and the size of log records also increases. Each RID now
requires 8 bytes of memory in a single-partition environment and 16 bytes of
memory in a partitioned database environment.
Explanation:
With the related change concerned with larger record identifiers (RID), there are
increased requirements for logs, table spaces, and memory. Larger record
identifiers (RID) allow more data pages per table object and more records per
page. This increase in the number of pages and records also changes the required
amount of memory and space used by log files and system temporary table spaces.
Resolution:
If the row size in your results sets is close to the maximum row length limit for
your existing system temporary table space with the largest page size, you might
need to create a system temporary table space with a larger page size. Another
alternative is to reduce the length of the information retrieved by your query, or to
split the query.
Linux UNIX
To accommodate changes in the DB2 product requires that you allocate more space
for database objects when compared to the same objects in a prior version.
Explanation:
Changes in this version of the DB2 product means that additional space is required
for logs, table spaces, indexes, system catalog tables, and user table data.
Resolution:
Review the changes to the database objects so that you will understand the
increased space requirements before creating those objects.
DB2 install images on Linux and UNIX have package format changes:
Linux UNIX
Change:
The DB2 install images on Linux and UNIX not longer use the operating system
formats.
You can no longer use Linux and UNIX operating system utilities such as pkgadd,
rpm, SMIT, or swinstall.
Explanation:
To enable you to install multiple DB2 copies on the same system, all DB2 install
images for Linux and UNIX are compressed in a tar.gz format.
Resolution:
You should use the DB2 installation programs to ensure that your DB2 products
are deployed and set up correctly. If you have scripts that you used in the past to
install DB2 products using operating system commands, you must modify them to
call DB2 installation programs (db2setup or db2_install) instead.
You can only use the db2ls command to query the installation of a DB2 product. If
you used scripts containing operating system commands to query DB2 installation
packages, you must modify them to use db2ls.
Windows UNIX
Change:
Explanation:
Windows UNIX
Change:
Explanation:
Resolution:
Also, any database objects created by these products (such as user-defined types,
user-defined functions, and stored procedures) will remain in the database
following the uninstall of the DB2 products. You should remove these objects from
the databases before migration because they may cause the migration to fail.
Windows UNIX
Change:
Explanation:
Resolution:
Windows UNIX
Change:
From the DB2 Control Center you can no longer connect or disconnect from
VM/VSE databases. You can only display the cataloged VM and VSE databases.
When adding an instance, the VM and VSE operating systems will no longer be
available for selection.
Resolution:
Although you may display the cataloged VM and VSE databases, you will have to
connect to them independent of the DB2 Control Center.
Windows UNIX
Change:
There are two new agents requiring connection to the database at all times.
Explanation:
There are two new agents (db2stmm and db2taskd) requiring connection to the
database at all times. There connection requirements will mean that in a tightly
configured environment, two of the connections identified by the max_connections
database manager configuration parameter will always be in use. As a result, you
may run out of available connections.
Resolution:
Windows UNIX
Change:
The default values for the following configuration parameters have changed
between Version 8.2 and Version 9 of the DB2 database.
Windows UNIX
Change:
The following configuration parameters are no longer valid in Version 9:
v estore_seg_sz
v num_estore_segs
v min_priv_mem (Windows only)
v priv_mem_thresh (Windows only)
v fcm_num_rqb
v fcm_num_anchors
v fcm_num_connect
The following changes have been made to configuration parameter content and
meaning:
The following changes have been made to registry variable content and meaning:
v DB2_ALLOCATION_SIZE; the default value is changed from 8388608 to 131072.
This registry variable specifies the size of the memory allocation for buffer pools.
v DB2_FORCE_FCM_BP; the default value is changed from “No” to “Yes”. This
registry variable specifies the memory allocation for FCM buffers.
Related concepts:
v “Migration overview for DB2 servers” in Migration Guide
v “Migration recommendations for DB2 servers” in Migration Guide
v “Migration essentials for DB2 clients” in Migration Guide
v “About the Release Notes” in Release notes
v “What's new for V9.1: Administration changes summary” in What’s New
Related reference:
v “Deprecated and discontinued features” on page 243
Windows UNIX
Change:
Resolution:
Windows UNIX
Change:
Resolution:
Windows UNIX
Change:
Symptom:
The SYSSTAT views are the recommended way to update the system catalog
information. Some SYSCAT views were unintentionally updatable and this has
now been fixed.
Resolution:
Application programming:
Windows UNIX
Change:
Symptom:
The audit context record statement text is too large to fit into the table.
Explanation:
The existing tables used to record auditing context records only allow 32 KB for
the statement text. The new statement limit is 2 MB. If you do not use long
statement lengths, this will not affect you.
Resolution:
Create a new table to hold audit context records with a CLOB(2M) value for the
statement text column. If desired, populate the new table with data from the old
table, then drop the old table and use the new one. The new table may be renamed
to the same name as the old table. Rebind any applications that use the new table.
Windows UNIX
Change:
Explanation:
Windows UNIX
Change:
If you use the new VERSION option on the PRECOMPILE, BIND, REBIND, and
DROP PACKAGE commands, requests to execute may now return an SQL0805N
error instead of an SQL0818N error.
Symptom:
Resolution:
SQL0306N error not returned to the precompiler when a host variable is not
defined:
Windows UNIX
Change:
If a host variable is not declared in the BEGIN DECLARE section and is used in
the EXEC SQL section, SQL0306N will not be returned by the precompiler. If the
variable is declared elsewhere in the application, application runtime will return
SQL0804N. If the variable is not declared anywhere in the application, the compiler
will return an error at compilation time.
Symptom:
Resolution:
Windows UNIX
Change:
Symptom:
If any columns with these data types are specified in the select list of a scrollable
cursor, SQL0270N Reason Code 53 is returned.
Resolution:
Modify the select-list of the scrollable cursor so it does not include a column with
any of these types.
Windows UNIX
Change:
The Version 8 code page conversion tables, which provide support for the euro
symbol, are slightly different from the conversion tables supplied with previous
versions of DB2.
Resolution:
If you want to use the pre-Version 8 code page conversion tables, they are
provided in the directory sqllib/conv/v7.
Windows UNIX
Change:
The ability to switch between a large object (LOB) locator and a LOB value has
been changed during bindout on a cursor statement. When an application is bound
with SQLRULES DB2 (the default behavior), the user will not be able to switch
between LOB locators and LOB values.
Resolution:
If you want to switch between a LOB locator and a LOB value during bindout of a
cursor statement, precompile your application with SQLRULES STD.
UNIX
Change:
Resolution:
In order to ensure that transactions are committed, the application should perform
either an explicit COMMIT or a CONNECT RESET before terminating.
Windows UNIX
Change:
Symptom:
Creating a savepoint with a name that starts with ″SYS″ will fail with error
SQL0707N.
Explanation:
Savepoint names that start with ″SYS″ are reserved for use by the system.
Resolution:
Rename any savepoints that start with ″SYS″ to another name that does not start
with ″SYS″.
Windows UNIX
Change:
Character data in input host variables will be converted to the database code page,
when necessary, before being used in the SQL statement where the host variable
appears. During code page conversion, data expansion may occur. Previously,
when code page conversion was detected for data in a host variable, the actual
length assumed for the host variable was increased to handle the expansion. This
assumed increase in length is no longer performed, to mitigate the impact of the
change of the data type length on other SQL operations.
Note: None of this applies to host variables that are used in the context of FOR
BIT DATA. The data in these host variables will not be converted before
being used as for bit data.
If the host variable is not large enough to hold the expanded length after code
page conversion, an error is returned (SQLSTATE 22001, SQLCODE -302).
Explanation:
Since expansion or contraction can occur during code page conversion, operations
that depend on the length of the data in the host variable can produce different
results or an error situation.
Resolution:
Windows UNIX
Change:
Code page conversion, when necessary, will now be performed during the bind in
phase.
Symptom:
Different results.
Explanation:
Now that code page conversion, when necessary, will always be done for host
variables, predicate evaluation will always occur in the database code page and not
the application code page. For example,
SELECT * FROM table WHERE :hv1 > :hv2
will be done using the database code page rather than the application code page.
The collation used continues to be the database collation.
Resolution:
Verify that the results in previous versions were indeed the desired results. If they
were, then change the predicate to produce the desired result given that the
database collation and code page are used. Alternatively, change the application
code page or the database code page.
Windows UNIX
Code page conversion, when necessary, will now be performed during a bind
operation.
Symptom:
Explanation:
Since expansion or contraction can occur during code page conversion, operations
that depend on the length of the data in the host variable can produce different
results or an error situation.
Resolution:
Change the data, the application code page or the database code page so that code
page conversion does not produce changes in length of the converted data, or code
the application to handle the possibility of code page conversion causing the length
of the data to change.
Windows UNIX
Change:
Code page conversion will no longer cause result length to increase for host
variables or parameter markers due to expansion.
Symptom:
Explanation:
The length of the character data type determined for the untyped parameter
marker is no longer increased to account for potential expansion from code page
conversion. The result length will be shorter for operations that determine result
length using the length of the untyped parameter marker. For example, given that
C1 is a CHAR(10) column:
VALUES CONCAT (?, C1)
no longer has a result data type and length of CHAR(40) for a database where 3
times expansion is possible when converting from the application code page to the
database code page, but will have a result data type and length of CHAR(20).
Resolution:
Use a CAST to give the untyped parameter marker the type desired or change the
operand that determines the type of the untyped parameter marker to a data type
or length that would accommodate the expansion of the data due to code page
conversion.
Windows UNIX
Change:
Code page conversion will no longer cause result length to increase for host
variables or parameter markers due to expansion.
Symptom:
Explanation:
Since the result length is not increased due to potential expansion on code page
conversion, the output of a DESCRIBE statement that describes such a result length
will now be different.
Resolution:
If necessary, change the application to handle the new values returned from the
DESCRIBE statement.
Windows UNIX
Change:
Code page conversion will no longer cause result length to increase for host
variables or parameter markers due to expansion.
Symptom:
Explanation:
Potential expansion due to code page conversion was taken into account by
increasing the length set aside for the host variable. This allowed, for example,
SUBSTR (:hv,19,1) to work successfully for a host variable with a length of 10.
This will no longer work.
Resolution:
Increase the length of the host variable to account for the length of the converted
data or change the SUBSTR invocation to specify positions within the length of the
host variable.
UNIX
Symptom:
Explanation:
Since support for the obsolete non-thread safe libraries is no longer required, the
libdb2_noth.so library is not included with IBM DB2 Version 9.1 for Solaris.
Resolution:
Change the tool or application to use the thread-safe libdb2.so library instead.
Re-link your applications with the -mt parameter.
Windows UNIX
Change:
Prior to Version 8, if you exported data that contained a DBCLOB from a Unicode
database (UTF-8), and used the LOBSINFILE file type modifier, the DBCLOB
would be exported in code page 1200 (the Unicode graphic code page). If you
imported data that contained a DBCLOB, and used the LOBSINFILE file type
modifier, the DBCLOB would be imported in code page 1200 (the Unicode graphic
code page). This behavior is maintained in Version 8 if you set the
DB2GRAPHICUNICODESERVER registry variable to ON.
Symptom:
When importing data with the LOBSINFILE file type modifier into a Unicode
database, the character data will be converted correctly, but the DBCLOB data is
corrupted.
Resolution:
If you are moving data between a Version 8 database and an earlier database, set
the DB2GRAPHICUNICODESERVER registry variable to ON to retain the previous
behavior.
Windows UNIX
Change:
The DROPPED TABLE RECOVERY default changed for the CREATE TABLESPACE
statement from OFF to ON.
Symptom:
Resolution:
If you will be dropping many tables, and if you are either using circular logging or
do not wish to recovery those tables, then you should consider disabling this
feature. To disable the feature for new table spaces, you can use the CREATE
TABLESPACE statement and explicitly use the DROPPED TABLE RECOVERY
clause with the value set to OFF. For existing table spaces, you can use the ALTER
TABLESPACE statement and explicitly use the DROPPED TABLE RECOVERY
clause to change the value from the default (ON) to OFF. Dropped tables will no
longer be recovered as part of the forward recovery process.
Windows UNIX
Change:
The name space for SPECIFICNAME has been unified. Previous versions of DB2
would allow a function and a procedure to have the same specific name, but
Version 8 does not allow this.
Symptom:
If you are migrating a database to Version 8, the db2ckmig utility will check for
functions and procedures with the same specific name. If duplicate names are
encountered during migration, the migration will fail.
Resolution:
Windows UNIX
Change:
Previously, a user only had to create a routine for others to be able to use it. Now
after creating a routine, a user has to GRANT EXECUTE on it first before others
can use it.
Symptom:
1. An application may not work correctly.
2. An existing procedure that is made up of multiple packages, and for which the
definer of the procedure does not have access to all the packages, will not work
correctly.
Resolution:
1. Issue the required GRANT EXECUTE statements. If all the routines are in a
single schema, the privileges for each type of routine can be granted with a
single statement, for example:
GRANT EXECUTE ON FUNCTION schema1.* TO PUBLIC
2. If one package is usable by everyone but another package is restricted to a few
privileged users, a stored procedure that uses both packages will watch for an
authority error when it tries to access the second package. If it sees the
authority error, it knows that the user is not a privileged user and the
procedure bypasses part of its logic.
You can resolve this in several ways:
a. When precompiling a program, CALL_RESOLUTION DEFERRED should
be set to indicate that the program will be executed as an invocation of the
deprecated sqleproc() API when the precompiler fails to resolve a procedure
on a CALL statement.
b. The CLI keyword UseOldStpCall can be added to the db2cli.ini file to
control the way in which procedures are invoked. It can have two values: A
value of 0 means procedures will not be invoked using the old call method,
while a value of 1 means procedures will be invoked using the old call
method.
c. Grant EXECUTE privilege to everyone who executes the package.
Windows UNIX
Change:
Resolution:
Use the SET INTEGRITY ... IMMEDIATE CHECKED statement to turn on integrity
checking for the table that is in check pending state, before adding the foreign key
that references the table.
Windows UNIX
Change:
In previous releases, a table that had the SET INTEGRITY ... UNCHECKED
statement issued on it (i.e. with some ’U’ bytes in the const_checked column of
SYSCAT.TABLES) would by default be fully processed upon the next SET
INTEGRITY ... IMMEDIATE CHECKED statement, meaning all records would be
checked for constraint violations. You had to explicitly specify INCREMENTAL to
avoid full processing.
Explanation:
This change is made to avoid having the default behavior be a constraint check of
all records, which usually consumes more resources.
Resolution:
You will have to explicitly specify NOT INCREMENTAL to force full processing.
Windows UNIX
Change:
Dynamic applications that run on servers with a locale that uses the comma as the
decimal separator and include unqualified invocations of the CHAR function with
an argument of type REAL or DOUBLE, will return a period as the separator
Explanation:
Resolution:
To maintain the behavior from earlier versions of DB2, the application will need to
explicitly invoke the function with SYSFUN.CHAR instead of allowing function
resolution to select the SYSIBM.CHAR signature.
Windows UNIX
Change:
Resolution:
Windows UNIX
Change:
Resolution:
If you want to continue the pre-Version 8 behavior, change the definition of the
returned value from CHAR(n) to CHAR(n) FOR BIT DATA. There is no method to
continue the pre-Version 8 behavior for GRAPHIC data.
Windows UNIX
Change:
In Version 7, if you use embedded SQL to connect to a database, and then attempt
a connection to a non-existent database, the attempt to connect to the non-existent
database will fail with SQL1013N. The connection to the first database still exists.
In Version 8, the attempt to connect to the non-existent database will result in a
disconnection from the first database. This will result in the application being left
with no connection.
Resolution:
Windows UNIX
Change:
A user can grant privileges on a package using the CONTROL privilege. In DB2
UDB Version 8, the WITH GRANT OPTION provides a mechanism to determine a
user’s authorization to grant privileges on packages to other users. This mechanism
is used in place of CONTROL to determine whether a user may grant privileges to
others. When CONTROL is revoked, users will continue to be able to grant
privileges to others.
Symptom:
Resolution:
Windows UNIX
Casting a character string defined as FOR BIT DATA to a CLOB (using the CAST
specification or the CLOB function) now returns an error (SQLSTATE 42846).
Symptom:
Explanation:
FOR BIT DATA is not supported for the CLOB data type. The result of using the
CAST specification or the CLOB function when a FOR BIT DATA string is given as
an argument is not defined. This situation in now caught as an error.
Resolution:
Change the argument to the CAST specification or the CLOB function so that it is
not a FOR BIT DATA string. This can be done by using the CAST specification to
cast the FOR BIT DATA string to a FOR SBCS DATA string or a FOR MIXED
DATA string. For example, if C1FBD is a VARCHAR(20) column declared as FOR
BIT DATA, in a non-DBCS database, the following would be a valid argument to
the CLOB function:
CAST (C1FBD AS VARCHAR(20) FOR SBCS DATA)
Windows UNIX
Change:
CHR(0) returns a blank (X’20’) instead of the character with code point X’00’.
Symptom:
Output from the CHR function with X’00’ as the argument returns different results.
Explanation:
Resolution:
Change the application code to handle the new output value. Alternatively, define
a user-defined function that returns CHAR(1) FOR BIT DATA which is sourced
from the definition of the SYSFUN CHR function, and place this function before
SYSFUN on the SQL path.
For example, to find the source definition for SYSFUN.CHR located in column
IMPLEMENTATION:
IMPLEMENTATION ROUTINENAME
-------------- -----------
db2clifn!CLI_udfCHAR CHR
Then, you could create a new user-defined function from the definition
db2clifn!CLI_udfCHAR returned above.
CREATE FUNCTION DBS.CHR(INTEGER) RETURNS CHARACTER(1) FOR BIT DATA NOT FENCED
LANGUAGE C PARAMETER STYLE DB2SQL NO DBINFO EXTERNAL NAME ’db2clifn!CLI_udfCHAR’
Windows UNIX
Change:
The definitions for the TABLE_NAME and TABLE_SCHEMA functions have been
corrected, and can now not be used in generated columns or check constraints.
Symptom:
The bind will fail with an SQLCODE -548/SQLSTATE 42621 stating that
TABLE_NAME or TABLE_SCHEMA is invalid in the context of a check constraint.
Explanation:
Resolution:
Update any columns that contain generated column expressions and check
constraints to remove the use of TABLE_NAME and TABLE_SCHEMA. To alter a
generated column, use the ALTER TABLE statement to SET a new expression. To
remove a check constraint, use the ALTER TABLE statement with the DROP
CONSTRAINT clause. This will allow you to BIND and continue accessing the
tables that contain the affected columns.
Windows UNIX
Change:
Symptom:
Resolution:
Windows UNIX
Symptom:
When migrating, errors occurred and were recorded in the db2diag.log at DB2
startup.
Explanation:
In Version 7, the DB2 Administration Server (DAS) was its own instance. In
Version 8, the DAS is no longer an instance but is a control point used to assist
with DB2 server tasks.
Resolution:
Windows UNIX
Symptom:
When looking within the Control Center, you do not find any references to the
performance monitor.
Explanation:
Resolution:
When working with IBM DB2 Version 9.1 for Windows, there are tools that can be
used to monitor performance:
v DB2 Performance Expert
The separately purchased DB2 Performance Expert for Multiplatforms, Version
1.1 consolidates, reports, analyzes and recommends self-managing and resource
tuning changes based on DB2 performance-related information.
Windows UNIX
Symptom:
When online utilities are used at the same time, the utilities may take a long time
to complete.
Explanation:
The locks required by one utility affect the progress of the other utilities running at
the same time.
Resolution:
When there is a potential for conflict between the locking requirements of utilities
that are being run at the same time, you should consider altering your scheduling
for the utilities you wish to run. The utilities (like online backup table space, load
table, or inplace reorganization of tables) use locking mechanisms to prevent
conflicts between the utilities. The utilities use table locks, table space locks, and
table space states at different times to control what needs to be done in the
database. When locks are held by a utility, the other utilities requesting similar or
related locks must wait until the locks are released.
For example, the last phase of an inplace table reorganization cannot start while an
online backup is running that includes the table being reorganized. You can pause
the reorganization request if you require the backup to complete.
In another example, the online load utility will not work with another online load
request on the same table. If different tables are being loaded, then the load
requests will not block each other.
Windows UNIX
Change:
Symptom:
Explanation:
When db2move is run with the “IMPORT” option, the old output appeared as:
IMPORT: -Rows read: 5; -Rows committed: 5; Table "DSCIARA2"."T20"
When db2move is run with the “LOAD” option, the old output appeared as:
* LOAD: table "DSCIARA2"."T20"
-Rows read: 5; -Loaded: 4; -Rejected 1 -Deleted 0 -Committed 5
Resolution:
Your script used to analyze the db2move output will need to be modified to
account for the changes in the layout and content.
Windows UNIX
Change:
In Version 8, there are changes to the existing explain facility tables including two
new tables: ADVISE_MQT and ADVISE_PARTITION.
Symptom:
The DB2 Design Advisor, when asked to make recommendations for materialized
query tables (MQTs), or for database partitions, will return error messages if the
explain tables have not been created.
Explanation:
Resolution:
Use the db2exmig command to move the Version 7 and Version 8.1 explain tables
to Version 8.2. This command has the necessary EXPLAIN DLL to create all of the
needed explain facility tables.
Windows UNIX
Change:
Symptom:
You will notice that the format has changed when reviewing the db2diag.log
messages. The changes include the following examples: each message will have a
diagnostic log record header, record fields will be preceded by the field name and
column, and message and data portions of the logging record will be clearly
marked. All of the changes to the format will make the logging record easier to use
and to understand.
Explanation:
The DB2 diagnostic logs are being reworked. The db2diag.log file will be parsable.
Windows UNIX
Change:
In Version 8, the CREATE DATABASE and DROP DATABASE commands are not
supported from downlevel clients or to downlevel servers.
Symptom:
You will receive error SQL0901N when you issue one of these commands.
Explanation:
The CREATE DATABASE and DROP DATABASE commands are both only
supported from Version 8 clients to Version 8 servers. You cannot issue these
commands from a Version 6 or Version 7 client to a Version 8 server. You cannot
issue these commands from a Version 8 client to a Version 7 server.
Resolution:
Windows UNIX
Change:
In previous versions, a table that has been loaded with the INSERT option and has
immediate materialized query tables (also known as summary tables) would be in
Normal (Full Access) state after a subsequent SET INTEGRITY IMMEDIATE
CHECKED statement on it. In Version 8, the table will be in No Data Movement
mode after the SET INTEGRITY IMMEDIATE CHECKED statement.
Explanation:
Resolution:
You can force the base table that has been loaded and has dependent immediate
summary tables to bypass the No Data Movement mode and to go directly into
Full Access mode by issuing a SET INTEGRITY ... IMMEDIATE CHECKED FULL
ACCESS statement on the base table. However, use of this option is not
recommended as it will force a full refresh of the dependent immediate
materialized query tables (also known as summary tables).
Windows UNIX
Change:
In previous versions, when using the load utility in insert or replace mode, the
default option was CASCADE IMMEDIATE when integrity checking was turned
off; when the table was put into check pending state, all of its dependent foreign
key tables and dependent materialized query tables (also known as summary
tables) were also immediately put into check pending state.
For Version 8, when using the load utility in insert or replace mode, the default is
CASCADE DEFERRED when integrity checking has been turned off.
Resolution:
You can put dependent foreign key tables and dependent materialized query tables
into check pending state along with their parent tables by using the CHECK
PENDING CASCADE IMMEDIATE option of the LOAD command.
Windows UNIX
Change:
Symptom:
If the result for a column has a non-negative value for COLCARD and
AVGCOLLEN but a value of -1 for SUB_COUNT and SUB_DELIM_LENGTH, this
indicates that basic statistics have been gathered for the column, but sub-element
statistics have not been gathered.
Resolution:
Windows UNIX
Change:
Resolution:
For Version 8 clients to work with Version 7 servers, you need to configure/enable
the use of DRDA Application Server capability on the Version 7 server. For
information on how to do this, refer to the Version 7 Installation and Configuration
Supplement.
To avoid the known restrictions and limitations, you should migrate all of your
servers to Version 8 before you migrate any of your client machines to Version 8. If
In addition to these limitations and restrictions for DB2 UDB Version 8 clients
working with DB2 UDB Version 7 servers, there are also similar limitations and
restrictions for DB2 UDB Version 8 tools working with DB2 UDB Version 7 servers.
The following DB2 UDB Version 8 tools support only DB2 UDB Version 8 servers:
v Control Center
v Task Center
v Journal
v Satellite Administration Center
v Information Catalog Center (including the Web-version of this center)
v Health Center (including the Web-version of this center)
v License Center
v Spatial Extender
v Tools Settings
v Development Center. You should use Stored Procedure Builder to develop server
objects on pre-Version 8 servers.
The following DB2 UDB Version 8 tools support DB2 UDB Version 7 servers (with
some restrictions) and DB2 UDB Version 8 servers:
v Configuration Assistant
It is possible to discover a DB2 UDB Version 7 server and catalog it. However,
even though cataloged, no function will work if attempting to access the DB2
UDB Version 7 server. Also, you are able to import a DB2 UDB Version 7 profile
to a DB2 UDB Version 8 server, or import a DB2 UDB Version 8 profile to a DB2
UDB Version 7 server. However, all other Configuration Assistant functions will
not work with DB2 UDB Version 7 servers.
v Data Warehouse Center
v Replication Center
v Command Editor (the replacement for the Command Center, including the
Web-version of this center)
Importing and saving scripts to and from DB2 UDB Version 7 servers is not
possible. Any utility requiring an ATTACH will not work.
v SQL Assist
v Visual Explain
In general, any DB2 UDB Version 8 tool that is only launched from within the
navigation tree of the Control Center, or any details view based on these tools, will
not be available or accessible to DB2 UDB Version 7 and earlier servers. You
should consider using the DB2 UDB Version 7 tools when working with DB2 UDB
Version 7 or earlier servers.
Windows UNIX
Resolution:
Windows UNIX
Change:
In Version 8, access from a DB2 UDB for Unix and Windows client to a Version 7
DB2 UDB server will not be supported through a Version 8 server, where the
functionality is provided either by DB2 Connect Enterprise Edition Version 8 or by
DB2 UDB Enterprise Server Edition Version 8.
Resolution:
Windows UNIX
Change:
In previous versions of DB2, when using the Command Line Processor (CLP) or
embedded SQL and connected to a database with a Type 1 connection, an attempt
to connect to another database during a unit of work would fail with an
SQL0752N error. In Version 8, the unit of work is committed, the connection is
reset, and the connection to the second database is allowed. The unit of work will
be committed and the connection will be reset even if AUTOCOMMIT is off.
Messages:
Windows UNIX
Change:
The messages affected by this change are related to bind, connection, or security
errors. SQL errors for queries and other SQL requests are not affected by this
change.
Examples:
v SQLCODE -30081 will be returned instead of SQLCODE -1224
v SQLCODE -30082 will be returned instead of SQLCODE -1403
v SQLCODE -30104 will be returned instead of SQLCODE -4930
Symptom:
Configuration parameters:
Windows UNIX
Change:
Resolution:
Windows UNIX
Change:
Resolution:
Related concepts:
v “Version 9 incompatibilities with previous releases and changed behaviors” on
page 260
Related reference:
v “Deprecated and discontinued features” on page 243
Related reference:
v “Supported territory codes and code pages” on page 313
Note: When creating a database, you can use any supported code page on any
supported platform.
Notes:
1. CCSIDs 1392 and 5488 (GB 18030) can only be used with the load or import
utilities to move data from CCSIDs 1392 and 5488 to a DB2 Unicode database,
or to export from a DB2 Unicode database to CCSIDs 1392 or 5488.
2. On AIX 4.3 or later the code page is 943. If you are using AIX 4.2 or earlier, the
code page is 932.
3. Code page 1394 (Shift JIS X0213) can only be used with the load or import
utilities to move data from code page 1394 to a DB2 Unicode database, or to
export from a DB2 Unicode database to code page 1394.
4. The following map to Arabic Countries/Regions (AA):
v Arabic (Saudi Arabia)
v Arabic (Iraq)
v Arabic (Egypt)
v Arabic (Libya)
v Arabic (Algeria)
v Arabic (Morocco)
v Arabic (Tunisia)
v Arabic (Oman)
v Arabic (Yemen)
v Arabic (Syria)
v Arabic (Jordan)
v Arabic (Lebanon)
v Arabic (Kuwait)
v Arabic (United Arab Emirates)
v Arabic (Bahrain)
v Arabic (Qatar)
Related tasks:
v “Installing the previous tables for converting between code page 1394 and
Unicode” on page 366
If you notice missing characters when you use the DB2 Setup wizard or the DB2
GUI tools (post-installation), install the necessary fonts provided with the DB2
product then re-run the db2setup command or restart the DB2 GUI tools you were
using. The Asian fonts are found in the java_fonts directory on the National
Language Pack CD-ROM (NLPACK CD) for your Linux operating system.
In this directory, there are two typefaces available: Times New Roman WorldType
and Monotype Sans Duospace WorldType. For each typeface, there is a country- or
region-specific font. The following table lists the eight fonts provided in
compressed format in the java_fonts directory.
To install a font:
1. Unzip the font package.
2. Copy the font package to the /opt/jre/lib/fonts directory. You need to create
the directory if it does not already exist.
3. Enter the following command: export JAVA_FONTS=/opt/jre/lib/fonts
Note: Optionally, you can copy the Asian font package into the java directory
in the DB2 installation path. For example, <DB2 installation
path>/java/jdk32/jre/lib/fonts, or <DB2 installation
path>/java/jdk64/jre/lib/fonts.
As a minimum you need to install one font of each typeface for your country or
region. If you are in either the China, Korea, or Taiwan territory, use the
territory-specific or region-specific versions; otherwise, use the Japanese version of
the fonts. If you have space on your system, it is recommended that you install all
eight fonts.
DB2 database manager supports the GBK code set natively and the GB18030 code
set only through Unicode. DB2 database manager will default the locale’s code set
to ISO 8859-1 (code page 819), and in some operations will also default the locale’s
territory to the United States (US). To work around this limitation, you have two
options:
1. You can override the locale’s code set from GB18030 to GBK; and the territory
from US to China (whose territory identifier is CN and territory code is 86).
2. You can use a different simplified Chinese locale.
If you choose to use the first option, issue the following commands:
db2set DB2CODEPAGE=1386
db2set DB2TERRITORY=86
db2 terminate
db2stop
db2start
If you choose to use the second option on AIX, issue either of the following
commands:
export LANG=zh_CN
export LANG=ZH_CN
The code set associated with zh_CN is eucCN (code page 1383), and with ZH_CN
is UTF-8 (code page 1208).
The code set associated with zh_CN is eucCN (code page 1383), and with
zh_CN.utf8 is UTF-8 (code page 1208).
DB2 has packaged the following IBM TrueType and OpenType proportional Indic
language fonts for your use. You can find these fonts in the java_fonts directory
on the National Language Pack CD-ROM (NLPACK CD) for the Linux and UNIX
operating systems.
These fonts are to be used in conjunction with DB2. You cannot engage in the
general or unrestricted sale or distribution of these fonts:
Table 99. Indic fonts packaged with DB2
Typeface Weight Font File Name
Devanagari MT for IBM Medium devamt.ttf
Devanagari MT for IBM Bold devamtb.ttf
Tamil Medium TamilMT.ttf
Tamil Bold TamilMTB.ttf
Telugu Medium TeluguMT.ttf
Telugu Bold TeleguMTB.ttf
Detailed instructions on how to install the fonts and modify the font.properties
file can be found in the Internationalization section of the Java documentation.
In addition, some Microsoft products also come with Indic fonts that can be used
with our GUI tools.
Microsoft ANSI code pages have been modified to include the euro currency
symbol in position X’80’. Code page 850 has been modified to replace the character
DOTLESS I (found at position X’D5’) with the euro currency symbol. DB2 internal
code page conversion routines use these revised code page definitions as the
default to provide euro symbol support.
However, if you want to use the non-euro definitions of the code page conversion
tables, follow the procedure below after installation is complete.
Prerequisites:
Procedure:
For code pages 819 (ISO 8859-1 Latin 1 ASCII) and 1047 (Latin 1 Open System
EBCDIC), the euro replacement code pages, 923 (ISO 8859-15 Latin 9 ASCII) and
924 (Latin 9 Open System EBCDIC) respectively, contain not just the euro symbol
but also several new characters. DB2 Database for Linux, UNIX, and Windows
continues to use the old (non-euro) definitions of these two code pages and
conversion tables, namely 819 and 1047, by default. There are two ways to activate
the new 923/924 code page and the associated conversion tables:
v Create a new database that uses the new code page. For example,
DB2 CREATE DATABASE dbname USING CODESET ISO8859-15 TERRITORY US
v Copy the 923 or 924 conversion table files from the sqllib/conv/alt/ directory
to the sqllib/conv/ directory and rename them to 819 or 1047, respectively.
Related concepts:
v “Character conversion” in SQL Reference, Volume 1
Related reference:
v “Conversion table files for euro-enabled code pages” on page 339
v “Conversion tables for code pages 923 and 924” on page 343
The conversion function and conversion tables or DBCS conversion APIs that the
database manager uses when it converts multi-byte code pages depends on the
operating system environment.
Note: Character string conversions between multi-byte code pages, such as DBCS
with EUC, might increase or decrease length of a string. In addition, code
points assigned to different characters in the PC DBCS, EUC, and UCS-2
code sets might produce different results when same characters are sorted.
Host variables that use graphic data in C or C++ applications require special
considerations that include special precompiler, application performance, and
application design issues.
Many characters in both the Japanese and Traditional Chinese EUC code pages
require special methods of managing database and client application support for
graphic data, which require double byte characters. Graphic data from these EUC
code pages is stored and manipulated using the UCS-2 code set.
Related concepts:
v “Guidelines for analyzing where a federated query is evaluated” in Performance
Guide
Related reference:
Arabic:
Baltic:
Cyrillic:
Estonia:
Greek:
Hebrew:
Latin-1:
Simplified Chinese:
Traditional Chinese:
Thailand:
Turkish:
Ukraine:
Vietnamese:
Related concepts:
v “Character conversion” in SQL Reference, Volume 1
Related tasks:
v “Enabling and disabling euro symbol support” on page 336
To activate a particular code page conversion table, copy the conversion table file
from the sqllib/conv/alt/ directory to the sqllib/conv/ directory and rename
that conversion table file as shown in the second column.
For example, to support the euro symbol when connecting a 8859-1/15 (Latin 1/9)
client to a Windows 1252 database, you need to copy and rename the following
code page conversion table files:
v sqllib/conv/alt/09231252.cnv to sqllib/conv/08191252.cnv
v sqllib/conv/alt/12520923.cnv to sqllib/conv/12520819.cnv
Related concepts:
v “Character conversion” in SQL Reference, Volume 1
Related tasks:
v “Enabling and disabling euro symbol support” on page 336
Another option is to store data in a Unicode database, which means that you do
not have to choose a specific language; Unicode encoding includes characters from
almost all of the living languages in the world.
If the LANG environment variable is not set in the user profile of the DB2
Administration Server, the DB2 Administration Server will be started with the
default system locale. If the default system locale is not defined, the DB2
Administration Server will be started with code page 819. If the DB2 instance uses
one of the DBCS locales, and the DB2 Administration Server is started with code
page 819, the instance will not be able to communicate with the DB2
Administration Server. The locale of the DB2 Administration Server and the locale
of the DB2 instance must be compatible.
Related tasks:
v “Changing the DB2 interface language (Linux and UNIX)” in Quick Beginnings
for DB2 Servers
v “Changing the DB2 interface language (Windows)” in Quick Beginnings for DB2
Servers
Restrictions:
When converting from one Arabic CCSID to another Arabic CCSID, DB2 employs
the following logic to deshape (or expand) the lam-alef ligature. Deshaping will
occur when the Text Shaping attribute of the source Arabic CCSID is shaped but
the Text Shaping attribute of the target Arabic CCSID is unshaped.
Conversely when converting from an Arabic CCSID whose Text Shaping attribute
is unshaped to an Arabic CCSID whose Text Shaping attribute is shaped, the
source lam and alef characters will be contracted to one ligature character, and a
blank character is inserted at the end of the target area data stream.
Procedure:
For DRDA environments, if the HOST EBCDIC platform also supports these
bidirectional CCSIDs, you only need to set the DB2CODEPAGE value. Note that
you must not further specify the same CCSID on the BIDI parameter in the
PARMS field of the DCS database directory entry for the server database,
otherwise an extra bidi layout conversion would occur, and render any Arabic data
to be incorrectly reversed. However, if the HOST platform does not support these
CCSIDs, you must also specify a CCSID override for the HOST database server to
which you are connecting. This is accomplished through the use of the BIDI
parameter in the PARMS field of the DCS database directory entry for the server
database. The override is necessary because, in a DRDA environment, code page
conversions and layout transformations are performed by the receiver of data.
However, if the HOST server does not support these bidirectional CCSIDs, it does
not perform layout transformation on the data that it receives from DB2. If you use
a CCSID override, the DB2 client performs layout transformation on the outbound
data as well.
Related concepts:
v “Bidirectional support with DB2 Connect” on page 349
v “Handling BiDi data” in DB2 Connect User’s Guide
Related reference:
v “Bidirectional-specific CCSIDs” on page 347
v “General registry variables” in Administration Guide: Implementation
Because default values on different platforms are not the same, problems can occur
when DB2 data is moved from one platform to another. For example, the Windows
operating system uses LOGICAL UNSHAPED data, while z/OS and OS/390
usually use SHAPED VISUAL data. Therefore, without support for bidirectional
attributes, data sent from DB2 Universal Database for z/OS and OS/390 to DB2 on
Windows 32-bit operating systems may display incorrectly.
DB2 Database for Linux, UNIX, and Windows supports bidirectional data
attributes through special bidirectional Coded Character Set Identifiers (CCSIDs).
The following bidirectional CCSIDs have been defined and are implemented with
DB2 as shown in Table 100. CDRA string types are defined as shown in Table 101
on page 349.
Table 100. Bidirectional CCSIDs
CCSID Code Page String Type
420 420 4
424 424 4
856 856 5
862 862 4
864 864 5
867 862 4
916 916 5
1046 1046 5
1089 1089 5
1200 1200 10
1208 1208 10
1255 1255 5
1256 1256 5
5351 1255 5
5352 1256 5
8612 420 5
8616 424 10
9048 856 5
9238 1046 5
12712 424 4
13488 13488 10
Note: * String orientation is left-to-right (LTR) when the first alphabetic character
is a Latin character, and right-to-left (RTL) when it is an Arabic or Hebrew
character. Characters are unshaped, but LamAlef ligatures are kept and are
not broken into constituents.
Related concepts:
v “Bidirectional support with DB2 Connect” on page 349
Related tasks:
v “Enabling bidirectional support” on page 345
Note: If you want DB2 Connect to perform layout transformation on the data it is
about to send to the DB2 host or iSeries database, even though you do not
have to override its CCSID, you must still add the BIDI parameter to the
PARMS field of the DCS database directory. In this case, the CCSID that you
should provide is the default DB2 host or iSeries database CCSID.
Note: The registry variable DB2BIDI must be set to YES for the BIDI parameter to
take effect.
Suppose you have a Hebrew DB2 client running CCSID 62213 (bidirectional string
type 5), and you want to access a DB2 host or iSeries database running CCSID
00424 (bidirectional string type 4). However, you know that the data contained in
the DB2 host or iSeries database is based on CCSID 08616 (bidirectional string type
6).
There are two problems here: The first is that the DB2 host or iSeries database does
not know the difference in the bidirectional string types with CCSIDs 00424 and
08616. The second problem is that the DB2 host or iSeries database does not
recognize the DB2 client CCSID (62213). It only supports CCSID 00862, which is
based on the same code page as CCSID 62213.
You will need to ensure that data sent to the DB2 host or iSeries database is in
bidirectional string type 6 format to begin with, and also let DB2 Connect know
that it has to perform bidirectional transformation on data it receives from the DB2
host or iSeries database. You will need to use following catalog command for the
DB2 host or iSeries database:
db2 catalog dcs database nydb1 as telaviv parms ",,,,,,,,BIDI=08616"
This command tells DB2 Connect to override the DB2 host or iSeries database
CCSID of 00424 with 08616. This override includes the following processing:
1. DB2 Connect connects to the DB2 host or iSeries database using CCSID 00862.
2. DB2 Connect performs bidirectional layout transformation on the data it is
about to send to the DB2 host or iSeries database. The transformation is from
CCSID 62213 (bidirectional string type 5) to CCSID 62221 (bidirectional string
type 6).
3. DB2 Connect performs bidirectional layout transformation on data it receives
from the DB2 host or iSeries database. This transformation is from CCSID 08616
(bidirectional string type 6) to CCSID 62213 (bidirectional string type 5).
Note: In some cases, use of a bidirectional CCSID may cause the SQL query itself
to be modified in such a way that it is not recognized by the DB2 server.
Specifically, you should avoid using IMPLICIT CONTEXTUAL and
IMPLICIT RIGHT-TO-LEFT CCSIDs when a different string type can be
used. CONTEXTUAL CCSIDs can produce unpredictable results if the SQL
query contains quoted strings. Avoid using quoted strings in SQL
statements; use host variables whenever possible.
Related concepts:
v “Handling BiDi data” in DB2 Connect User’s Guide
Collating sequences
The database manager compares character data using a collating sequence. This is an
ordering for a set of characters that determines whether a particular character sorts
higher, lower, or the same as another.
Note: Character string data defined with the FOR BIT DATA attribute, and BLOB
data, is sorted using the binary sort sequence.
For example, a collating sequence can be used to indicate that lowercase and
uppercase versions of a particular character are to be sorted equally.
For example, suppose the characters B and b have the code points X'42' and X'62',
respectively. If (according to the collating sequence table) they both have a sort
weight of X'42' (B), they collate the same. If the sort weight for B is X'9E', and the
sort weight for b is X'9D', b will be sorted before B. The collation sequence table
specifies the weight of each character. The table is different from a code page,
which specifies the code point of each character.
Consider the following example. The ASCII characters A through Z are represented
by X'41' through X'5A'. To describe a collating sequence in which these characters
are sorted consecutively (no intervening characters), you can write: X'41', X'42', ...
X'59', X'5A'.
The hexadecimal value of a multi-byte character is also used as the weight. For
example, suppose the code points for the double-byte characters A and B are
X'8260' and X'8261' respectively, then the collation weights for X'82', X'60', and X'61'
are used to sort these two characters according to their code points.
The weights in a collating sequence need not be unique. For example, you could
give uppercase letters and their lowercase equivalents the same weight.
In all cases, the DB2 database uses the collation table that was specified at database
creation time. If you want the multi-byte characters to be sorted the way that they
appear in their code point table, you must specify IDENTITY as the collation
sequence when you create the database.
Note: For Unicode databases, the various collating sequences supported are
described in the “Unicode implementation in the DB2 database” topic.
Once a collating sequence is defined, all future character comparisons for that
database will be performed with that collating sequence. Except for character data
defined as FOR BIT DATA or BLOB data, the collating sequence will be used for
all SQL comparisons and ORDER BY clauses, and also in setting up indexes and
statistics.
A final point to remember is that the results of any sort based on a direct
comparison of character code points will only match query results that are ordered
using an identity collating sequence.
Related concepts:
v “Character comparisons based on collating sequences” in Developing SQL and
External Routines
v “Character conversion” in SQL Reference, Volume 1
v “Unicode implementation in DB2 Database for Linux, UNIX, and Windows” on
page 357
Restrictions:
You must either create your database with a Thai locale and code set, or create a
Unicode database.
Procedure:
When you create a database using Thai and corresponding code set, use the
COLLATE USING NLSCHAR clause on the CREATE DATABASE command. When
you create a Unicode database, use the COLLATE USING UCA400_LTH clause on
the CREATE DATABASE command.
Related reference:
v “CREATE DATABASE command” in Command Reference
Following is a description of the input and output formats for date and time:
v Input Time Format
– There is no default input time format
– All time formats are allowed as input for all territory codes.
v Output Time Format
– The default output time format is equal to the local time format.
v Input Date Format
– There is no default input date format
– Where the local format for date conflicts with an ISO, JIS, EUR, or USA date
format, the local format is recognized for date input. For example, see the UK
entry in Table 102.
v Output Date Format
– The default output date format is shown in Table 102.
Note: Table 102 also shows a listing of the string formats for the various
territory codes.
Table 102. Date and Time Formats by Territory Code
Territory Code Local Date Local Time Default Output Input Date
Format Format Date Format Formats
355 Albania yyyy-mm-dd JIS LOC LOC, USA, EUR,
ISO
785 Arabic dd/mm/yyyy JIS LOC LOC, EUR, ISO
001 Australia (1) mm-dd-yyyy JIS LOC LOC, USA, EUR,
ISO
061 Australia dd-mm-yyyy JIS LOC LOC, USA, EUR,
ISO
032 Belgium dd/mm/yyyy JIS LOC LOC, EUR, ISO
055 Brazil dd.mm.yyyy JIS LOC LOC, EUR, ISO
359 Bulgaria dd.mm.yyyy JIS EUR LOC, USA, EUR,
ISO
001 Canada mm-dd-yyyy JIS USA LOC, USA, EUR,
ISO
002 Canada dd-mm-yyyy ISO ISO LOC, USA, EUR,
(French) ISO
Notes:
1. Countries/Regions using the default C locale are assigned territory code 001.
2. yyyy in Buddhist era is equivalent to Gregorian + 543 years (Thailand only).
Related reference:
v “BIND command” in Command Reference
v “PRECOMPILE command” in Command Reference
Information on Unicode can be found in the latest edition of The Unicode Standard
book, and from The Unicode Consortium web site (www.unicode.org).
Unicode uses two encoding forms: 8-bit and 16-bit. The default encoding form is
16-bit, that is, each character is 16 bits (two bytes) wide, and is usually shown as
U+hhhh, where hhhh is the hexadecimal code point of the character. While the
resulting 65 000+ code elements are sufficient for encoding most of the characters
of the major languages of the world, the Unicode standard also provides an
extension mechanism that allows the encoding of as many as one million more
characters. The extension mechanism uses a pair of high and low surrogate
characters to encode one extended or supplementary character. The first (or high)
surrogate character has a code value between U+D800 and U+DBFF, and the
second (or low) surrogate character has a code value between U+DC00 and
U+DFFF.
UCS-2
The International Standards Organization (ISO) and the International
Electrotechnical Commission (IEC) standard 10646 (ISO/IEC 10646) specifies the
Universal Multiple-Octet Coded Character Set (UCS) that has a 16-bit (two-byte)
version (UCS-2) and a 32-bit (four-byte) version (UCS-4). UCS-2 is identical to the
Unicode 16-bit form without surrogates. UCS-2 can encode all the (16-bit)
characters defined in the Unicode version 3.0 repertoire. Two UCS-2 characters — a
UTF-8
Sixteen-bit Unicode characters pose a major problem for byte-oriented ASCII-based
applications and file systems. For example, non-Unicode aware applications may
misinterpret the leading 8 zero bits of the uppercase character ’A’ (U+0041) as the
single-byte ASCII NULL character.
UTF-16
ISO/IEC 10646 also defines an extension technique for encoding some UCS-4
characters using two UCS-2 characters. This extension, called UTF-16, is identical
to the Unicode 16-bit encoding form with surrogates. In summary, the UTF-16
character repertoire consists of all the UCS-2 characters plus the additional one
million characters accessible via the surrogate pairs.
When serializing 16-bit Unicode characters into bytes, some processors place the
most significant byte in the initial position (known as big-endian order), while
others place the least significant byte first (known as little-endian order). The
default byte ordering for Unicode is big-endian.
The number of bytes for each UTF-16 character in UTF-8format can be determined
from Table 103.
Table 103. UTF-8 Bit Distribution
Code Value UTF-16 1st byte 2nd byte 3rd byte 4th byte
0xxxxxxx 0xxxxxxx
00000yyy 00000yyy 110yyyyy 10xxxxxx
yyxxxxxx yyxxxxxx
zzzzyyyy zzzzyyyy 1110zzzz 10yyyyyy 10xxxxxx
yyxxxxxx yyxxxxxx
uuuuu 110110ww 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx
Related concepts:
v “Unicode handling of data types” on page 360
v “Unicode implementation in DB2 Database for Linux, UNIX, and Windows” on
page 357
v “Unicode literals” on page 364
Related tasks:
v “Creating a Unicode database” on page 362
In versions of DB2 products prior to Version 7.2 FixPak 4, DB2 treats the two
characters in a surrogate pair as two independent Unicode characters. Therefore
transforming the pair from UTF-16/UCS-2 to UTF-8 results in two three-byte
sequences. Starting in DB2 Universal Database Version 7.2 FixPak 4, DB2
recognizes surrogate pairs when transforming between UTF-16/UCS-2 and UTF-8,
thus a pair of UTF-16 surrogates will become one UTF-8 four-byte sequence. In
other usages, DB2 continues to treat a surrogate pair as two independent UCS-2
characters. You can safely store supplementary characters in DB2 Unicode
databases, provided you know how to distinguish them from the
non-supplementary characters.
DB2 treats each Unicode character, including those (non-spacing) characters such as
the COMBINING ACUTE ACCENT character (U+0301), as an individual character.
Therefore DB2 would not recognize that the character LATIN SMALL LETTER A
WITH ACUTE (U+00E1) is canonically equivalent to the character LATIN SMALL
LETTER A (U+0061) followed by the character COMBINING ACUTE ACCENT
(U+0301).
The default collating sequence for a UCS-2 Unicode database is IDENTITY, which
orders the characters by their code points. Therefore, by default, all Unicode
characters are ordered and compared according to their code points. For
non-supplementary Unicode characters, their binary collation orders when encoded
in UTF-8 and UCS-2 are the same. But if you have any supplementary character
that requires a pair of surrogate characters to encode, then in UTF-8 encoding the
character will be collated towards the end, but in UCS-2 encoding the same
character will be collated somewhere in the middle, and its two surrogate
characters can be separated. The reason is the extended character, when encoded in
UTF-8, has a four-byte binary code value of 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx,
which is greater than the UTF-8 encoding of U+FFFF, namely X’EFBFBF’. But in
UCS-2, the same supplementary character is encoded as a pair of UCS-2 high and
A Unicode database can also be created with the IDENTITY_16BIT collation option.
The IDENTITY_16BIT collator implements the CESU-8 Compatibility Encoding
Scheme for UTF-16: 8-Bit algorithm as specified in the Unicode Technical Report #26
available at the Unicode Technical Consortium web site (www.unicode.org).
CESU-8 is binary identical to UTF-8 except for the Unicode supplementary
characters, that is, those characters that are defined outside the 16-bit Basic
Multilingual Plane (BMP or Plane 0). In UTF-8 encoding, a supplementary
character is represented by one four-byte sequence, but the same character in
CESU-8 requires two three-byte sequences. Using the IDENTITY_16BIT collation
option will yield the same collation order for both character and graphic data.
DB2 UDB Version 8.2 supports three new collation sequence keywords for Unicode
databases: UCA400_NO, UCA400_LSK, and UCA400_LTH. The UCA400_NO
collators implements the UCA (Unicode Collation Algorithm) based on the
Unicode Standard version 4.00 with normalization implicitly set to on. The
UCA400_LSK and UCA400_LTH collator also implement the UCA version 4.00.
UCA400_LSK will sort all Slovakian characters in the appropriate order, and
UCA400_LTH will sort all Thai characters as per the Royal Thai Dictionary order.
Details of the UCA can be found in the Unicode Technical Standard #10 available
at the Unicode Consortium web site (www.unicode.org).
All culturally sensitive parameters, such as date or time format, decimal separator,
and others, are based on the current territory of the client.
A Unicode database allows connection from every code page supported by DB2.
The database manager automatically performs code page conversion for character
and graphic strings between the client’s code page and Unicode.
Every client is limited by the character repertoire, the input method, and the fonts
supported by its environment, but the UCS-2 database itself accepts and stores all
UCS-2 characters. Therefore, every client usually works with a subset of UCS-2
characters, but the database manager allows the entire repertoire of UCS-2
characters.
When characters are converted from a local code page to Unicode, there may be
expansion in the number of bytes. Prior to Version 8, based on the semantics of
SQL statements, character data may have been marked as being encoded in the
client’s code page, and the database server would have manipulated the entire
statement in the client’s code page. This manipulation could have resulted in
potential expansion of the data. Starting in Version 8, once an SQL statement enters
the database server, it operates only on the database server’s code page. In this
case there is no size change. However, specifying string units for some string
functions might result in internal codepage conversions. If this occurs, the size of
the data string might change.
To determine the active code page the system is running on Linux, run:
locale
Not all of the information displayed from running this command is important or
relevant, however the DB2 database manager uses the following items in the order
presented to determine the active code page:
v LC_ALL
v LC_CTYPE
v LANG
and check the value for the “Database code page” parameter.
A specific version of the UCS standard, as defined by Unicode 2.0 and ISO/IEC
10646-1, has also been registered within IBM as CCSID 13488. This CCSID has been
used internally by DB2 for storing graphic string data in IBM eucJP (Japan) and
IBM eucTW (Taiwan) databases. CCSID 13488 and code page 1200 both refer to
UCS-2, and are handled the same way, except for the value of their ″double-byte″
(DBCS) space:
Regarding the conversion tables, since code page 1200 is a superset of CCSID
13488, the same (superset) tables are used for both.
Within IBM, UTF-8 has been registered as CCSID 1208 with growing character set
(sometimes also referred to as code page 1208). As new characters are added to the
standard, this number (1208) will not change.
The MBCS code page number is 1208, which is the database code page number,
and the code page of character string data within the database. The double-byte
code page number for UCS-2 is 1200, which is the code page of graphic string data
within the database.
More information on Thai characters can be found in chapter 10.1 Thai of the
Unicode Standard book, version 4.0, ISBN 0-321-18578-1.
Related concepts:
v “Unicode character encoding” on page 355
v “Unicode handling of data types” on page 360
v “Unicode literals” on page 364
Related tasks:
v “Creating a Unicode database” on page 362
Related reference:
v “Character strings” in SQL Reference, Volume 1
A UCS-2 database is like any MBCS database where character string data is
measured in number of bytes. When working with character string data in UTF-8,
one should not assume that each character is one byte. In multibyte UTF-8
encoding, each ASCII character is one byte, but non-ASCII characters take two to
four bytes each. This should be taken into account when defining CHAR fields.
Depending on the ratio of ASCII to non-ASCII characters, a CHAR field of size n
bytes can contain anywhere from n/4 to n characters.
Note: Not all SQL functions that operate on character strings are limited to
processing ″bytes″. The CHARACTER_LENGTH, LENGTH, LOCATE,
POSITION, and SUBSTRING functions include a parameter that allows you
to specify a predefined set of string units. This means that the functions can
process strings using the specified units instead of bytes or double bytes.
SQL CHAR data types are supported (in the C language) by the char data type in
user programs. SQL GRAPHIC data types are supported by sqldbchar in user
programs. Note that, for a UCS-2 database, sqldbchar data is always in big-endian
(high byte first) format. When an application program is connected to a UCS-2
database, character string data is converted between the application code page and
UTF-8, and graphic string data is converted between the application graphic code
page and UCS-2 by DB2.
When retrieving data from a Unicode database to an application that does not use
an SBCS, EUC, or Unicode code page, the defined substitution character is
returned for each blank padded to a graphic column. DB2 pads fixed-length
Unicode graphic columns with ASCII blanks (U+0200), a character that has no
equivalent in pure DBCS code pages. As a result, each ASCII blank used in the
padding of the graphic column is converted to the substitution character on
retrieval. Similarly, in a DATE, TIME or TIMESTAMP string, any SBCS character
that does not have a pure DBCS equivalent is also converted to the substitution
character when retrieved from a Unicode database to an application that does not
use an SBCS, EUC, or Unicode code page.
Note: Prior to Version 8, graphic string data was always assumed to be in UCS-2.
To provide backward compatibility to applications that depend on the
previous behavior of DB2, the registry variable
DB2GRAPHICUNICODESERVER has been introduced. Its default value is
OFF. Changing the value of this variable to ON will cause DB2 to use its
earlier behavior and assume that graphic string data is always in UCS-2.
Additionally, the DB2 server will check the version of DB2 running on the
client, and will simulate DB2 Universal Database Version 7 behavior if the
client is running DB2 UDB Version 7.
In a future release of the DB2 database manager, the default code set will be
changed to UTF-8 when creating a database, regardless of the application code
page.
Procedure:
To create a Unicode database with the territory code for the United States of
America:
DB2 CREATE DATABASE dbname USING CODESET UTF-8 TERRITORY US
To create a Unicode database using the sqlecrea API, you should set the values in
sqledbterritoryinfo accordingly. For example, set SQLDBCODESET to UTF-8, and
SQLDBLOCALE to any valid territory code (for example, US).
Related concepts:
v “Unicode implementation in DB2 Database for Linux, UNIX, and Windows” on
page 357
Related tasks:
v “Converting non-Unicode databases to Unicode” on page 362
Related reference:
v “sqlecrea API - Create database” in Administrative API Reference
v “CREATE DATABASE command” in Command Reference
v “Supported territory codes and code pages” on page 313
Prerequisites:
You must have enough free disk space to export the data from the non-Unicode
database. Also, if you are not reusing the existing table spaces, you will need
enough free disk space to create new table spaces for the data.
XML data can only be stored in single-partition databases defined with the UTF-8
code set.
Procedure:
where <export-dir> is the directory to which you want to export your data
and SAMPLE is the existing database name.
2. Generate a DDL script for your existing database using the db2look command:
db2look -d sample -e -o unidb.ddl -l -x -f
where SAMPLE is the existing database name and unidb.ddl is the file name
for the generated DDL script. The -l option generates DDL for user defined
table spaces, database partition groups and buffer pools, the -x option
generates authorization DDL, and the -f option generates an update command
for database configuration parameters.
3. Create the Unicode database:
CREATE DATABASE UNIDB USING CODESET UTF-8 TERRITORY US
To keep the existing database, you must also change the file name specification
for table spaces in the unidb.ddl file. Otherwise, you can drop the existing
database and use the same table space files:
DROP DATABASE SAMPLE
5. Recreate your database structure by running the DDL script that you edited:
db2 -tvf unidb.ddl
6. Import your data into the new Unicode database using the db2move command:
cd <export-dir>
db2move unidb import
where <export-dir> is the directory where you exported your data and UNIDB
is the Unicode database name.
Related concepts:
v “Unicode implementation in DB2 Database for Linux, UNIX, and Windows” on
page 357
v “Native XML data store overview” in XML Guide
v “XML data type” in XML Guide
Related tasks:
v “Creating a Unicode database” on page 362
Unicode literals
Unicode literals can be specified in two ways:
v As a graphic string constant, using the G’...’ or N’....’ format. Any literal
specified in this way will be converted by the database manager from the
application code page to 16-bit Unicode.
v As a Unicode hexadecimal string, using the UX’....’ or GX’....’ format. The
constant specified between the quotation marks after UX or GX must be a
multiple of four hexadecimal digits in big-endian order. Each four-digit group
represents one 16-bit Unicode code point. Note that surrogate characters always
appear in pairs, therefore you need two four-digit groups to represent the high
and low surrogate characters.
When using the command line processor (CLP), the first method is easier if the
UCS-2 character exists in the local application code page (for example, when
entering any code page 850 character from a terminal that is using code page 850).
The second method should be used for characters that are outside of the
application code page repertoire (for example, when specifying Japanese characters
from a terminal that is using code page 850).
Related concepts:
v “Unicode character encoding” on page 355
v “Unicode implementation in DB2 Database for Linux, UNIX, and Windows” on
page 357
Related reference:
v “Constants” in SQL Reference, Volume 1
For MBCS databases in DB2 Database for Linux, UNIX, and Windows, the current
behavior is as follows: If the match-expression contains MBCS data, the pattern can
include both SBCS and non-SBCS characters. The special characters in the pattern
are interpreted as follows:
v An SBCS halfwidth underscore refers to one SBCS character.
v A non-SBCS fullwidth underscore refers to one non-SBCS character.
v A percent (either SBCS halfwidth or non-SBCS fullwidth) refers to zero or more
SBCS or non-SBCS characters.
Related concepts:
v “Unicode character encoding” on page 355
v “Unicode implementation in DB2 Database for Linux, UNIX, and Windows” on
page 357
Related reference:
v “Character strings” in SQL Reference, Volume 1
v “Graphic strings” in SQL Reference, Volume 1
Procedure:
To install the previous definitions for converting between Shift JIS X0213 and
Unicode:
1. Stop the DB2 Database for Linux, UNIX, and Windows instance.
2. Point your Web browser to ftp://ftp.software.ibm.com/ps/products/db2/
info/vr8/conv/ or use FTP to connect to the ftp.software.ibm.com site. This
FTP server is anonymous.
3. If you are connecting via the command line, log in by entering anonymous as
your user ID and your e-mail address as your password.
4. After logging in, change to the conversion tables directory:
cd ps/products/db2/info/vr8/conv
5. Copy the two files, 1394ucs4.cnv and ucs41394.cnv, in binary form to your
sqllib/conv/ directory.
6. Restart the DB2 instance.
Related concepts:
v “Unicode implementation in DB2 Database for Linux, UNIX, and Windows” on
page 357
Related reference:
v “Supported territory codes and code pages” on page 313
Problem 1::
For historical reasons, over 300 characters in the CCSID 943 code page are
represented by two or three code points each. The use of input method editors
(IMEs) and code page conversion tables cause only one of these equivalent code
points to be entered. For example, the lower case character for Roman numeral one
(“i”) has two equivalent code points: X’EEEF’ and X’FA40’. Microsoft Windows
IMEs always generate X’FA40’ when “i” is entered. In general, IBM and Microsoft
use the same primary code point to represent the character, except for the
following 13 characters:
IBM products such as DB2 database manager primarily use IBM code points, for
example X’FA4A’, to present the upper case Roman numeral “I”, but Microsoft
products use X’8754’ to represent the same character. A Microsoft ODBC
application can insert the “I” character as X’8754’ into a DB2 database of CCSID
943, and the DB2 Control Center can insert the same character as X’FA4A’ into the
same CCSID 943 database. However, Microsoft ODBC applications can find only
those rows that have “I” encoded as X’8754’, and the DB2 Control Center can
locate only those rows that have encoded “I” as X’FA4A’. To enable the DB2
Control Center to select “I” as X’8754’, you need to replace the default IBM
conversion tables from Unicode to CCSID 943 with the alternate Microsoft
conversion table provided by the DB2 database manager.
Problem 2::
The following list of characters, when converted from CCSID 943 to Unicode, will
result in different code points depending on whether the IBM conversion table or
the Microsoft conversion table is used. For these characters, the IBM conversion
table conforms to the character names as specified in the Japanese Industry
Standard JISX0208, JISX0212, and JISX0221.
Table 105. CCSID 943 to Unicode code point conversion
Shift-JIS code point IBM primary code point Microsoft primary code
(character name) (Unicode name) point (Unicode name)
X’815C’ (EM Dash) U+2014 (EM Dash) U+2015 (Horizontal Bar)
For example, the character EM dash with the CCSID 943 code point of X’815C’ is
converted to the Unicode code point U+2014 when using the IBM conversion table,
but is converted to U+2015 when using the Microsoft conversion table. This can
create potential problems for Microsoft ODBC applications because they would
treat U+2014 as an invalid code point. To avoid these potential problems, you need
to replace the default IBM conversion table from CCSID 943 to Unicode with the
alternate Microsoft conversion table provided by the DB2 database manager.
The use of the alternate Microsoft conversion tables between CCSID 943 and
Unicode should be restricted to closed environments, where the DB2 clients and
the DB2 databases that are running CCSID 943 and are all using the same alternate
Microsoft conversion tables. If you have a DB2 client using the default IBM
conversion tables and another client using the alternate Microsoft conversion
tables, and both clients are inserting data to the same DB2 database of CCSID 943,
the same character may be stored as different code points in the database.
Related concepts:
v “Unicode character encoding” on page 355
Related tasks:
v “Replacing the Unicode conversion tables for coded character set identifier
(CCSID) 943 with Microsoft conversion tables” on page 368
Prerequisites:
If the code page conversion table file you want to override already exists in the
conv subdirectory of the sqllib directory, you should back up that file in case you
want to revert to the default table.
Restrictions:
To replace the DB2 default conversion tables for converting between CCSID 943
and Unicode:
1. When replacing conversion tables on the client, stop all the applications that are
using the database. If you have any CLP sessions running, issue the
TERMINATE command for each session. When replacing conversion tables on
the database server, stop all instances on all nodes by issuing the db2stop
command.
2. Copy sqllib/conv/ms/0943ucs2.cnv to sqllib/conv/0943ucs2.cnv.
3. Copy sqllib/conv/ms/ucs20943.cnv to sqllib/conv/ucs20943.cnv.
4. Restart all the applications.
Related concepts:
v “Alternative Unicode conversion table for the coded character set identifier
(CCSID) 943” on page 366
The following list of characters, when converted from CCSID 954 to Unicode, will
result in different code points depending on which conversion table (IBM or
Microsoft) is used. For these characters, the IBM conversion table conforms to the
character names as specified in the Japanese Industry Standard (JIS) JISX0208,
JISX0212, and JISX0221.
Table 106. CCSID 954 to Unicode code point conversion
EUC-JP code point IBM primary code point Microsoft primary code
(character name) (Unicode name) point (Unicode name)
X’A1BD’ (EM Dash) U+2014 (EM Dash) U+2015 (Horizontal Bar)
X’A1C1’ (Wave Dash) U+301C (Wave Dash) U+FF5E (Fullwidth Tilde)
X’A1C2’ (Double vertical U+2016 (Double vertical line) U+2225 (Parallel To)
line)
X’A1DD’ (Minus sign) U+2212 (Minus sign) U+FF0D (Fullwidth
hyphen-minus)
X’8FA2C3’ (Broken bar) U+00A6 (Broken bar) U+FFE4 (Fullwidth broken
bar)
For example, the character EM dash with the CCSID 954 code point of X’A1BD’ is
converted to the Unicode code point U+2014 when using the IBM conversion table,
but is converted to U+2015 when using the Microsoft conversion table. This can
create potential problems for Microsoft ODBC applications because they would
treat U+2014 as an invalid code point. To avoid these potential problems, you need
Related concepts:
v “Replacing the Unicode conversion table for coded character set identifier
(CCSID) 954 with the Microsoft conversion table” on page 370
v “Unicode character encoding” on page 355
Prerequisites::
If the code page conversion table file you want to override already exists in the
conv subdirectory of the sqllib directory, you should back up that file in case you
want to revert to the default table.
Restrictions::
For conversion table replacement to be effective, every DB2 client that connects to
the same database must have its conversion table changed. If your client is
Japanese Windows whose ANSI code page is Shift-JIS (CCSID 943), you will also
need to change the default conversion tables between CCSID 943 and Unicode to
the Microsoft version. Otherwise, the different clients might store the same
character using different code points.
Procedure::
To replace the DB2 default conversion table for converting from CCSID 954 to
Unicode, follow these steps:
1. When replacing conversion tables on the client, stop all the applications that are
using the database. If you have any CLP sessions running, issue the
TERMINATE command for each session. When replacing conversion tables on
the database server, stop all instances on all nodes by issuing the db2stop
command.
2. Copy sqllib/conv/ms/0954ucs2.cnv to sqllib/conv/0954ucs2.cnv.
3. Restart all the applications.
To replace the DB2 default conversion tables for converting between CCSID 943
and Unicode, follow these steps:
1. When replacing conversion tables on the client, stop all the applications that are
using the database. If you have any CLP sessions running, issue the
TERMINATE command for each session. When replacing conversion tables on
the database server, stop all instances on all nodes by issuing the db2stop
command.
2. Copy sqllib/conv/ms/0943ucs2.cnv to sqllib/conv/0943ucs2.cnv.
3. Copy sqllib/conv/ms/ucs20943.cnv to sqllib/conv/ucs20943.cnv.
4. Restart all the applications.
For example, the character EM dash with the CCSID 5026 code point of X’444A’ is
converted to the Unicode code point U+2014 when using the IBM conversion table,
but is converted to U+2015 when using the Microsoft conversion table. This can
create potential problems for Microsoft ODBC applications because they would
treat U+2014 as an invalid code point. To avoid these potential problems, you need
to replace the default IBM conversion table from CCSID 5026 to Unicode with the
alternate Microsoft conversion table provided by the DB2 database manager.
Related concepts:
v “Replacing the Unicode conversion table for coded character set identifier
(CCSID) 5026 with the Microsoft conversion table” on page 371
v “Unicode character encoding” on page 355
If the code page conversion table file you want to override already exists in the
conv subdirectory of the sqllib directory, you should back up that file in case you
want to revert to the default table.
Restrictions::
For conversion table replacement to be effective, every DB2 client that connects to
the same database must have its conversion table changed.
This Microsoft conversion table is only for data encoded in CCSID 5026 or 930, and
cannot be used for data encoded in CCSID 1390. Since the DB2 database manager
uses the same conversion table for data encoded in CCSIDs 5026, 930, and 1390,
this means that once the default IBM conversion table has been replaced with the
Microsoft conversion table, you should not select any data that is encoded in
CCSID 1390.
Activating this alternate Microsoft conversion table does not change the code page
conversion behavior of graphic data encoded in 5026 to Unicode. To enable graphic
data encoded in 5026 conversion to Unicode using the alternate Microsoft
conversion table, you must also copy the file sqllib/conv/ms/0939ucs2.cnv to
sqllib/conv/1399ucs2.cnv in addition to the procedure outlined below. Once you
complete these steps, the conversion of both character data and graphic data to
Unicode from the following CCSIDs will also use the Microsoft conversion table:
5026, 930, 1390, 5035, 939, and 1399.
Procedure::
To replace the DB2 default conversion table for converting from CCSID 5026 to
Unicode, follow these steps:
1. When replacing conversion tables on the client, stop all the applications that are
using the database. If you have any CLP sessions running, issue the db2
terminate command for each session.
2. Copy sqllib/conv/ms/0930ucs2.cnv to sqllib/conv/1390ucs2.cnv.
3. Restart all the applications.
Related concepts:
v “Alternative Unicode conversion table for the coded character set identifier
(CCSID) 5026” on page 371
For example, the character EM dash with the CCSID 5035 code point of X’444A’ is
converted to the Unicode code point U+2014 when using the IBM conversion table,
but is converted to U+2015 when using the Microsoft conversion table. This can
create potential problems for Microsoft ODBC applications because they would
treat U+2014 as an invalid code point. To avoid these potential problems, you need
to replace the default IBM conversion table from CCSID 5035 to Unicode with the
alternate Microsoft conversion table provided by the DB2 database manager.
Related concepts:
v “Unicode character encoding” on page 355
v “Replacing the Unicode conversion table for coded character set identifier
(CCSID) 5035 with the Microsoft conversion table” on page 373
Prerequisites::
If the code page conversion table file you want to override already exists in the
conv subdirectory of the sqllib directory, you should back up that file in case you
want to revert to the default table.
Restrictions::
For conversion table replacement to be effective, every DB2 client that connects to
the same database must have its conversion table changed.
This Microsoft conversion table is only for data encoded in CCSID 5039 or 939, and
cannot be used for data encoded in CCSID 1399. Since the DB2 database manager
uses the same conversion table for data encoded in CCSIDs 5035, 939, and 1399,
this means that once the default IBM conversion table has been replaced with the
Microsoft conversion table, you should not select any data that is encoded in
CCSID 1399.
Procedure::
To replace the DB2 default conversion table for converting from CCSID 5035 to
Unicode, follow these steps:
1. When replacing conversion tables on the client, stop all the applications that are
using the database. If you have any CLP sessions running, issue the
TERMINATE command for each session.
2. Copy sqllib/conv/ms/0939ucs2.cnv to sqllib/conv/1399ucs2.cnv.
3. Restart all the applications.
Related concepts:
v “Alternative Unicode conversion table for the coded character set identifier
(CCSID) 5035” on page 372
v “Unicode character encoding” on page 355
The following list of characters, when converted from CCSID 5039 to Unicode, will
result in different code points depending on which conversion table (IBM or
Microsoft) is used. For these characters, the IBM conversion table conforms to the
character names as specified in the Japanese Industry Standard (JIS) JISX0208, and
JISX0221.
Table 109. CCSID 5039 to Unicode code point conversion
Shift-JIS code point IBM primary code point Microsoft primary code
(character name) (Unicode name) point (Unicode name)
X’815C’ (EM Dash) U+2014 (EM Dash) U+2015 (Horizontal Bar)
X’8160’ (Wave Dash) U+301C (Wave Dash) U+FF5E (Fullwidth Tilde)
X’8161’ (Double vertical line) U+2016 (Double vertical line) U+2225 (Parallel To)
X’817C’ (Minus sign) U+2212 (Minus sign) U+FF0D (Fullwidth
hyphen-minus)
For example, the character EM dash with the CCSID 5039 code point of X’815C’ is
converted to the Unicode code point U+2014 when using the IBM conversion table,
but is converted to U+2015 when using the Microsoft conversion table. This can
create potential problems for Microsoft ODBC applications because they would
treat U+2014 as an invalid code point. To avoid these potential problems, you need
Related concepts:
v “Replacing the Unicode conversion table for coded character set identifier
(CCSID) 5039 with the Microsoft conversion table” on page 375
v “Unicode character encoding” on page 355
Prerequisites::
If the code page conversion table file you want to override already exists in the
conv subdirectory of the sqllib directory, you should back up that file in case you
want to revert to the default table.
Restrictions::
For conversion table replacement to be effective, every DB2 client that connects to
the same database must have its conversion table changed.
Procedure::
To replace the DB2 default conversion table for converting from CCSID 5039 to
Unicode, follow these steps:
1. When replacing conversion tables on the client, stop all the applications that are
using the database. If you have any CLP sessions running, issue the
TERMINATE command for each session.
2. Copy sqllib/conv/ms/5039ucs2.cnv to sqllib/conv/5039ucs2.cnv.
3. Restart all the applications.
Related concepts:
v “Alternative Unicode conversion table for the coded character set identifier
(CCSID) 5039” on page 374
v “Unicode character encoding” on page 355
IBM periodically makes documentation updates available. If you access the online
version on the DB2 Information Center at ibm.com®, you do not need to install
documentation updates because this version is kept up-to-date by IBM. If you have
installed the DB2 Information Center, it is recommended that you install the
documentation updates. Documentation updates allow you to update the
information that you installed from the DB2 Information Center CD or downloaded
from Passport Advantage as new information becomes available.
Note: The DB2 Information Center topics are updated more frequently than either
the PDF or the hard-copy books. To get the most current information, install
the documentation updates as they become available, or refer to the DB2
Information Center at ibm.com.
You can access additional DB2 technical information such as technotes, white
papers, and Redbooks™ online at ibm.com. Access the DB2 Information
Management software library site at http://www.ibm.com/software/data/sw-
library/.
Documentation feedback
We value your feedback on the DB2 documentation. If you have suggestions for
how we can improve the DB2 documentation, send an e-mail to
[email protected]. The DB2 documentation team reads all of your feedback, but
cannot respond to you directly. Provide specific examples wherever possible so
that we can better understand your concerns. If you are providing feedback on a
specific topic or help file, include the topic title and URL.
Do not use this e-mail address to contact DB2 Customer Support. If you have a
DB2 technical issue that the documentation does not resolve, contact your local
IBM service center for assistance.
Related tasks:
v “Invoking command help from the command line processor” in Command
Reference
v “Invoking message help from the command line processor” in Command
Reference
v “Updating the DB2 Information Center installed on your computer or intranet
server” on page 383
Related reference:
v “DB2 technical library in hardcopy or PDF format” on page 378
Although the tables identify books available in print, the books might not be
available in your country or region.
The information in these books is fundamental to all DB2 users; you will find this
information useful whether you are a programmer, a database administrator, or
someone who works with DB2 Connect or other DB2 products.
Table 110. DB2 technical information
Name Form Number Available in print
Administration Guide: SC10-4221 Yes
Implementation
Administration Guide: Planning SC10-4223 Yes
Administrative API Reference SC10-4231 Yes
Administrative SQL Routines and SC10-4293 No
Views
Call Level Interface Guide and SC10-4224 Yes
Reference, Volume 1
Call Level Interface Guide and SC10-4225 Yes
Reference, Volume 2
Command Reference SC10-4226 No
Data Movement Utilities Guide SC10-4227 Yes
and Reference
Data Recovery and High SC10-4228 Yes
Availability Guide and Reference
Developing ADO.NET and OLE SC10-4230 Yes
DB Applications
Developing Embedded SQL SC10-4232 Yes
Applications
Note: The DB2 Release Notes provide additional information specific to your
product’s release and fix pack level. For more information, see the related
links.
Related concepts:
v “Overview of the DB2 technical information” on page 377
v “About the Release Notes” in Release notes
Related tasks:
v “Ordering printed DB2 books” on page 380
Printed versions of many of the DB2 books available on the DB2 PDF
Documentation CD can be ordered for a fee from IBM. Depending on where you
are placing your order from, you may be able to order books online, from the IBM
Publications Center. If online ordering is not available in your country or region,
you can always order printed DB2 books from your local IBM representative. Note
that not all books on the DB2 PDF Documentation CD are available in print.
Procedure:
Related concepts:
v “Overview of the DB2 technical information” on page 377
Related reference:
v “DB2 technical library in hardcopy or PDF format” on page 378
Procedure:
To invoke SQL state help, open the command line processor and enter:
? sqlstate or ? class code
where sqlstate represents a valid five-digit SQL state and class code represents the
first two digits of the SQL state.
For example, ? 08003 displays help for the 08003 SQL state, and ? 08 displays help
for the 08 class code.
Related tasks:
v “Invoking command help from the command line processor” in Command
Reference
v “Invoking message help from the command line processor” in Command
Reference
For DB2 Version 8 topics, go to the Version 8 Information Center URL at:
http://publib.boulder.ibm.com/infocenter/db2luw/v8/.
Related tasks:
v “Updating the DB2 Information Center installed on your computer or intranet
server” on page 383
Procedure:
Note: Adding a language does not guarantee that the computer has the fonts
required to display the topics in the preferred language.
v To move a language to the top of the list, select the language and click the
Move Up button until the language is first in the list of languages.
3. Clear the browser cache and then refresh the page to display the DB2
Information Center in your preferred language.
On some browser and operating system combinations, you might have to also
change the regional settings of your operating system to the locale and language of
your choice.
To determine if there is an update available for the entire DB2 Information Center,
look for the 'Last updated' value on the Information Center home page. Compare
the value in your locally installed home page to the date of the most recent
downloadable update at http://www.ibm.com/software/data/db2/udb/support/
icupdate.html. You can then update your locally-installed Information Center if a
more recent downloadable update is available.
Note: Updates are also available on CD. For details on how to configure your
Information Center to install updates from CD, see the related links.
If update packages are available, use the Update feature to download the
packages. (The Update feature is only available in stand-alone mode.)
3. Stop the stand-alone Information Center, and restart the DB2 Information
Center service on your computer.
Procedure:
Note: The help_end batch file contains the commands required to safely
terminate the processes that were started with the help_start batch file.
Do not use Ctrl-C or any other method to terminate help_start.bat.
v On Linux, run the help_end script using the fully qualified path for the DB2
Information Center:
<DB2 Information Center dir>/doc/bin/help_end
Related concepts:
v “DB2 Information Center installation options” in Quick Beginnings for DB2 Servers
Related tasks:
v “Installing the DB2 Information Center using the DB2 Setup wizard (Linux)” in
Quick Beginnings for DB2 Servers
v “Installing the DB2 Information Center using the DB2 Setup wizard (Windows)”
in Quick Beginnings for DB2 Servers
You can view the XHTML version of the tutorial from the Information Center at
http://publib.boulder.ibm.com/infocenter/db2help/.
Some lessons use sample data or code. See the tutorial for a description of any
prerequisites for its specific tasks.
DB2 tutorials:
Related concepts:
v “Visual Explain overview” in Administration Guide: Implementation
Related concepts:
v “Introduction to problem determination” in Troubleshooting Guide
v “Overview of the DB2 technical information” on page 377
Personal use: You may reproduce these Publications for your personal, non
commercial use provided that all proprietary notices are preserved. You may not
distribute, display or make derivative work of these Publications, or any portion
thereof, without the express consent of IBM.
Commercial use: You may reproduce, distribute and display these Publications
solely within your enterprise provided that all proprietary notices are preserved.
You may not make derivative works of these Publications, or reproduce, distribute
or display these Publications or any portion thereof outside your enterprise,
without the express consent of IBM.
IBM reserves the right to withdraw the permissions granted herein whenever, in its
discretion, the use of the Publications is detrimental to its interest or, as
determined by IBM, the above instructions are not being properly followed.
You may not download, export or re-export this information except in full
compliance with all applicable laws and regulations, including all United States
export laws and regulations.
IBM may have patents or pending patent applications covering subject matter
described in this document. The furnishing of this document does not give you
any license to these patents. You can send license inquiries, in writing, to:
IBM Director of Licensing
IBM Corporation
North Castle Drive
Armonk, NY 10504-1785
U.S.A.
For license inquiries regarding double-byte (DBCS) information, contact the IBM
Intellectual Property Department in your country/region or send inquiries, in
writing, to:
IBM World Trade Asia Corporation
Licensing
2-31 Roppongi 3-chome, Minato-ku
Tokyo 106, Japan
The following paragraph does not apply to the United Kingdom or any other
country/region where such provisions are inconsistent with local law:
INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS
PUBLICATION “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER
EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS
FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or
implied warranties in certain transactions; therefore, this statement may not apply
to you.
Any references in this information to non-IBM Web sites are provided for
convenience only and do not in any manner serve as an endorsement of those Web
sites. The materials at those Web sites are not part of the materials for this IBM
product, and use of those Web sites is at your own risk.
IBM may use or distribute any of the information you supply in any way it
believes appropriate without incurring any obligation to you.
The licensed program described in this document and all licensed material
available for it are provided by IBM under terms of the IBM Customer Agreement,
IBM International Program License Agreement, or any equivalent agreement
between us.
All statements regarding IBM’s future direction or intent are subject to change or
withdrawal without notice, and represent goals and objectives only.
This information may contain examples of data and reports used in daily business
operations. To illustrate them as completely as possible, the examples include the
names of individuals, companies, brands, and products. All of these names are
fictitious, and any similarity to the names and addresses used by an actual
business enterprise is entirely coincidental.
COPYRIGHT LICENSE:
Each copy or any portion of these sample programs or any derivative work must
include a copyright notice as follows:
Trademarks
Company, product, or service names identified in the documents of the DB2
Version 9 documentation library may be trademarks or service marks of
International Business Machines Corporation or other companies. Information on
the trademarks of IBM Corporation in the United States, other countries, or both is
located at http://www.ibm.com/legal/copytrade.shtml.
Microsoft, Windows, Windows NT®, and the Windows logo are trademarks of
Microsoft Corporation in the United States, other countries, or both.
Intel, Itanium®, Pentium®, and Xeon® are trademarks of Intel Corporation in the
United States, other countries, or both.
Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the
United States, other countries, or both.
UNIX is a registered trademark of The Open Group in the United States and other
countries.
Index 393
LIST INDOUBT TRANSACTIONS monotonicity 197 ordering DB2 books 380
command 227 moving a DBCLOB organizing data
literals incompatibility 285 approaches 99
Unicode 364 moving data
load utility to multidimensional tables 197
incompatibility 285
loading data
MPP environment 42
MQTs (materialized query tables)
P
parallelism
multidimensional clustering database design considerations 71
and different hardware
tables 188 replicated 111
environments 42
LOB (large object) data types multi-partition database partition
and index creation 37
caching behavior 124 group 85
database backup and restore
column definition 56 multidimensional clustering (MDC) tables
utilities 37
estimating size requirements 79 block index considerations 188
I/O 37, 164
LOB locator switching block maps 185
inter-partition 37
incompatibility 285 choosing dimensions 189
intra-partition
locale coding set creating 197
description 37
simplified chinese 335 deletion of records 187
load utility 37
locales density of values 189
overview 41
compatibility between DAS and in SMS table spaces 197
query 37
instance 344 load considerations 188
utility 37
locking logging considerations 188
parent key 65
discrete 172 moving data to 197
parent row 65
log file space table types 167
parent table 65
estimating size requirements 82 updating 187
partial declustering 41
logging using column expressions as
partitioned databases
MDC table updates 188 dimensions 197
description 41
logical database design working with 177
transaction access 219
deciding what data to record 53 multipage_alloc configuration parameter
partitioned tables
defining tables 54 effect on memory 119
description 104
relationships 54 setting for SMS table spaces 119
restrictions 104
logical database partitions 42 multiple partition configurations 42
table partitioning 93
long fields multisite updates
partitioning data
caching behavior 124 host or iSeries applications accessing a
table partitioning 93
estimating data size requirements DB2 server 210
partitioning keys, table
for 78 multiple databases 205
description 96
single database 204
guidelines 96
partitions
M compatibility 91
maintenance N with multiple processors 42
automatic 29 national language support (NLS) with one processor 42
maintenance windows bidirectional CCSIDs 347 partitions, data
about 35 national languages description 92
map pages available 313 pattern matching
extent 123 NLS (national language support) Unicode databases 364
space 123 bidirectional CCSIDs 347 performance
mapping node level profile registry 14 table space 164
table spaces to buffer pools 145 non-Unicode databases permissions 21
table spaces to database partition converting to Unicode 362 physical database design 73
groups 146 nonrecoverable databases precompiler and host variable
tables to table spaces 166 backup and recovery 25 incompatibility 285
maps nonthread safe library support, primary indexes 58
table space 125 incompatibilities 285 primary keys
materialized query tables (MQTs) normalizing tables 61 constraints 17
database design considerations 71 NOT NULL constraints 17 description 58
replicated 111 notices 387 generating unique values 60
MDC (multidimensional clustering) 172 NULL value printed books
MDC (multidimensional clustering) in column definitions 56 ordering 380
tables 197 privileges
choosing dimensions 189 planning 21
messages
incompatibility 285
O problem determination
online information 385
OBJCAT views
Microsoft conversion table tutorials 385
incompatibility 285
CCSID 5035 373 profile registry 14
offline maintenance
CCSID 5039 375
about 36
CCSID 954 370
online maintenance
mode change to tables
about 36
incompatibility 285
Index 395
SYSTOOLSTMPSPACE table spaces targets (continued) two-phase commit (continued)
uses 115 types 56 process 210
views 56 updating
temporary table spaces a single database in a
T design 112
recommendations 161
multi-database transaction 204
multiple databases 205
table partitioning
temporary tables TXSeries CICS 236
benefits 93
size requirements 83 TXSeries Encina 236
description 93
SMS table spaces 162 type 1 connection
table partitioning keys
temporary work spaces incompatibility 285
description 96
size requirements 83 type hierarchy 56
guidelines 96
TEMPSPACE1 table space 112 typed tables
table spaces
terms and conditions database design considerations 71
catalogs 112, 163
use of publications 386 description 56
choice by optimizer 112
territory codes typed views
database managed space (DMS) 120
DB2 supported 313 description 56
description 3
Thai characters
design
sorting 352
description 112
OLTP workload 143
third normal form 61
thresholds
U
query workload 143 UCS-2
about 160
workload considerations 143 see Unicode (UCS-2) 355
time
disk I/O considerations 141 UDFs (user-defined functions)
formats
DMS 123 description 56
description 353
mapping to buffer pools 145 uncommitted units of work on UNIX
TPM values 221
mapping to database partition incompatibility 285
TPMONNAME values 221
groups 146 Unicode (UCS-2) 355
transaction managers
maps 125 CCSID 357
BEA Tuxedo 238
OLTP workload 143 character strings 360
DB2 transaction manager 206
performance 164 code page 357
distributed transaction
query workload 143 constants 364
processing 215
SYSCATSPACE 112 conversion tables 368
IBM TXSeries CICS 236
system managed space (SMS) 117 converting code page 1394 to
IBM TXSeries Encina 236
temporary 112, 161 previous conversion tables 366
IBM WebSphere Application
TEMPSPACE1 112 converting Shift JIS X0213 to
Server 236
types previous conversion tables 366
multiple database updates 205
SMS or DMS 140 database 362
problem determination 235
user 112 DB2 supported 357
XA architecture 233
USERSPACE1 112 graphic strings 360
transaction processing monitors
workload considerations 143 literals 364
BEA Tuxedo 238
tables pattern matching 364
configuration considerations 232
append mode 167 string comparisons 364
IBM TXSeries CICS 236
check constraints surrogate characters 355
IBM TXSeries Encina 236
types 65 unicode conversion table
security considerations 231
collocation 91 CCSID 5035 372
transactions
dependent 65 CCSID 5039 374
accessing partitioned databases 219
descendent 65 CCSID 954 369
description 22
description 3 uniprocessor environment 42
global 215
estimating size requirements 75 unique constraints
loosely coupled 215
introduction 167 about 17
non-XA 215
mapping to table spaces 166 definition 65
tightly coupled 215
multidimensional clustering 167 unique keys
two-phase commit 215
multidimensional clustering description 58, 65
triggers
(MDC) 173 units of work (UOW) 22
business rules for data 17
normalization 61 remote 203
cascading 70
parent 65 update rule, with referential
description 70
partitioned 93, 167 constraints 65
troubleshooting
partitioned tables 104 updates
online information 385
range-clustered 167, 168 DB2 Information Center 383
tutorials 385
regular 167 Information Center 383
tutorials
self-referencing 65 user table page limits 77
troubleshooting and problem
system catalog 76 user table spaces 112
determination 385
temporary 162 user temporary table spaces
Visual Explain 385
transition 70 designing 112
Tuxedo
user 77 user-defined functions (UDFs)
configuring 238
targets description 56
two-phase commit
rows 56 incompatibility 285
error handling 213
tables 56
V
variables
transition 70
VERSION option
incompatibility 285
views
description 3
Visual Explain
tutorial 385
W
WebSphere Application Server
configuring 236
weight, definition 351
X
X/Open distributed transaction
processing (DTP) model 215
XA interface
distributed transaction processing
model 215
XA specification 233
XA switch 233
XA transaction managers
configuration considerations 232
security considerations 231
troubleshooting 235
updating host and iSeries
databases 227
XML documents
storage 84
storage requirements 84
XML storage object
overview 84
Index 397
398 Administration Guide: Planning
Contacting IBM
To contact IBM in your country or region, check the IBM Directory of Worldwide
Contacts at http://www.ibm.com/planetwide
Printed in USA
SC10-4223-00
Spine information: