Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
100% found this document useful (1 vote)
11 views

(Ebook) Foundation Db2 and Python: Access Db2 with Module-Based API Examples Using Python by W. David Ashley ISBN 9781484269428, 148426942X - The ebook is now available, just one click to start reading

The document provides information about various ebooks available for instant download at ebooknice.com, focusing on topics related to Db2 and Python programming. It highlights specific titles, authors, and ISBNs, along with links for purchasing or downloading the ebooks. Additionally, it includes a brief introduction to Db2 and its historical context, emphasizing its relevance for both administrators and programmers.

Uploaded by

haiekanchy
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
11 views

(Ebook) Foundation Db2 and Python: Access Db2 with Module-Based API Examples Using Python by W. David Ashley ISBN 9781484269428, 148426942X - The ebook is now available, just one click to start reading

The document provides information about various ebooks available for instant download at ebooknice.com, focusing on topics related to Db2 and Python programming. It highlights specific titles, authors, and ISBNs, along with links for purchasing or downloading the ebooks. Additionally, it includes a brief introduction to Db2 and its historical context, emphasizing its relevance for both administrators and programmers.

Uploaded by

haiekanchy
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 77

Instant Ebook Access, One Click Away – Begin at ebooknice.

com

(Ebook) Foundation Db2 and Python: Access Db2 with


Module-Based API Examples Using Python by W. David
Ashley ISBN 9781484269428, 148426942X

https://ebooknice.com/product/foundation-db2-and-python-
access-db2-with-module-based-api-examples-using-
python-33967966

OR CLICK BUTTON

DOWLOAD EBOOK

Get Instant Ebook Downloads – Browse at https://ebooknice.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

Start reading on any device today!

(Ebook) Foundation Db2 and Python: Access Db2 with Module-Based API Examples Using
Python by W. David Ashley ISBN 9781484269411, 1484269411

https://ebooknice.com/product/foundation-db2-and-python-access-db2-with-module-
based-api-examples-using-python-33794994

ebooknice.com

(Ebook) Foundation Dynamic Web Pages with Python: Create Dynamic Web Pages with
Django and Flask by David Ashley ISBN 9781484263389, 9781484263396, 1484263383,
1484263391

https://ebooknice.com/product/foundation-dynamic-web-pages-with-python-create-
dynamic-web-pages-with-django-and-flask-22417576

ebooknice.com

(Ebook) Foundations of PyGTK Development: GUI Creation with Python by W. David


Ashley, Andrew Krause ISBN 9781484241783, 9781484241790, 1484241789, 1484241797

https://ebooknice.com/product/foundations-of-pygtk-development-gui-creation-
with-python-7319602

ebooknice.com

(Ebook) Up and Running with DB2 on Linux by IBM ISBN 9780738485317, 0738485314

https://ebooknice.com/product/up-and-running-with-db2-on-linux-42975650

ebooknice.com
(Ebook) Understanding DB2(R): Learning Visually with Examples (2nd Edition) by Raul
F. Chong, Xiaomei Wang, Michael Dang, Dwaine R. Snow ISBN 9780131580183, 0131580183

https://ebooknice.com/product/understanding-db2-r-learning-visually-with-
examples-2nd-edition-1480140

ebooknice.com

(Ebook) Advanced Data Analytics Using Python: With Machine Learning, Deep Learning
and NLP Examples by Mukhopadhyay, Sayan ISBN 9781484234495, 1484234499

https://ebooknice.com/product/advanced-data-analytics-using-python-with-machine-
learning-deep-learning-and-nlp-examples-55670484

ebooknice.com

(Ebook) Practical Explainable AI Using Python: Artificial Intelligence Model


Explanations Using Python-based Libraries, Extensions, and Frameworks by Pradeepta
Mishra ISBN 9781484271575, 1484271572

https://ebooknice.com/product/practical-explainable-ai-using-python-artificial-
intelligence-model-explanations-using-python-based-libraries-extensions-and-
frameworks-36684612

ebooknice.com

(Ebook) Up and Running With DB2 for Linux by IBM Redbooks, Whei-Jen Chen ISBN
9780738427676, 0738427675

https://ebooknice.com/product/up-and-running-with-db2-for-linux-1383072

ebooknice.com

(Ebook) Supervised Learning with Python: Concepts and Practical Implementation Using
Python by Vaibhav Verdhan ISBN 9781484261569, 1484261569

https://ebooknice.com/product/supervised-learning-with-python-concepts-and-
practical-implementation-using-python-24688908

ebooknice.com
W. David Ashley

Foundation Db2 and Python


Access Db2 with Module-Based API Examples Using
Python
1st ed.
W. David Ashley
Austin, TX, USA

ISBN 978-1-4842-6941-1 e-ISBN 978-1-4842-6942-8


https://doi.org/10.1007/978-1-4842-6942-8

© W. David Ashley 2021

Apress Standard

The use of general descriptive names, registered names, trademarks,


service marks, etc. in this publication does not imply, even in the
absence of a specific statement, that such names are exempt from the
relevant protective laws and regulations and therefore free for general
use.

The publisher, the authors and the editors are safe to assume that the
advice and information in this book are believed to be true and accurate
at the date of publication. Neither the publisher nor the authors or the
editors give a warranty, expressed or implied, with respect to the
material contained herein or for any errors or omissions that may have
been made. The publisher remains neutral with regard to jurisdictional
claims in published maps and institutional affiliations.

This Apress imprint is published by the registered company APress


Media, LLC part of Springer Nature.
The registered company address is: 1 New York Plaza, New York, NY
10004, U.S.A.
This book is dedicated to teachers everywhere, but especially all those
who had me as a student.
Table of Contents
Chapter 1:​Introduction to Db2
What Is a Relational Database?​
The Relational Model
Domains
Keys and Indexes
Relationships
Transactions
Stored Procedures
Constraints
Normalization
SQL
Data Definition Language (DDL)
Data Query Language (DQL)
Data Control Language (DCL)
Data Manipulation Language (DML)
The ibm_​db Project
Summary
Chapter 2:​Installing Db2
My Development Environment
Installation Prerequisites
Planning the Db2 Install
Installing Db2
Db2 Post-install Tasks
Installing the Db2 Sample Database
Summary
Chapter 3:​Db2 Management
Db2 Instances
db2ilist
Instance Environment Commands
Creating an Instance
Arranging a Communication Port and Host for an Instance
Updating an Instance
Upgrading an Instance
Dropping an Instance
Using Other Commands with an Instance
Databases
Db2 Catalog Views
Locking Event Monitor
Tablespace Information
Storage Group Control Files
Global Configuration File
History Files
Logging Files
Automated Storage Containers
Creating a Database
Listing Databases
Activating a Database
Deactivating a Database
Connecting to a Database
Dropping a Database
Tables
Table Types
Built-in Data Types
Creating a Table
Alter a Table
Other Table SQL Statements
Dropping a Table
Summary
Chapter 4:​Database Physical Design
Phase 1:​Data Gathering and Normalization
Data Gathering
Data Normalization
Business Rules
Phase 2:​Physical Design of the Database
Backups
Summary
Chapter 5:​Db2 Utilities
Backup Command
What Is a Backup?​
Backup Verification
Advanced Backup Options
Backup Syntax
Export Command
Command syntax
Usage Notes
Import Command
Command Syntax
Load Command
Command Syntax
Restore Command
Command Syntax
Summary
Chapter 6:​Business Rules and Constraints
NOT NULL Attribute
Primary Key
Indexes
Foreign Keys
CHECK and Unique Constraints
DEFAULT Constraint
Triggers
Summary
Chapter 7:​Writing Good SQL for Db2
Relational Theory
Reduce Passes Through Data
Using Indexes to Increase Performance
Sorting and Grouping
Programs Containing SQL
Use Db2 Utilities Where Possible
Db2 Functions
Multiple Ways to Code SQL
Summary
Chapter 8:​Python and ibm_​db
Your First Python ibm_​db Program
Using Parameter Markers
More on Parameter Markers
Producing Multiple Reports with Parameter Markers
Using Parameter Markers Without Binding Variables
Joining Tables
Inserts, Updates, and Deletes
Some Other ibm_​db APIs
Creating Database Objects
Obtaining Attributes of an Existing Table
Obtaining Attributes of a Result Set
ibm_​db_​dbi and Python
Where Is the ibm_​db Module Going?​
The ibm_​db_​dbi Module
The Django Database Interface
The SQLAlchemy Adapter
The Alembic Adapter
The Future
Summary
Appendix A:​Python ibm_​db API
ibm_​db APIs
ibm_​db.​active
ibm_​db.​autocommit
ibm_​db.​bind_​param
ibm_​db.​callproc
ibm_​db.​client_​info
ibm_​db.​close
ibm_​db.​column_​privileges
ibm_​db.​columns
ibm_​db.​commit
ibm_​db.​conn_​error
ibm_​db.​conn_​errormsg
ibm_​db.​connect
ibm_​db.​createdb
ibm_​db.​createdbNX
ibm_​db.​cursor_​type
ibm_​db.​dropdb
ibm_​db.​exec_​immediate
ibm_​db.​execute
ibm_​db.​execute_​many
ibm_​db.​fetch_​tuple
ibm_​db.​fetch_​assoc
ibm_​db.​fetch_​both
ibm_​db.​fetch_​row
ibm_​db.​field_​display_​size
ibm_​db.​field_​name
ibm_​db.​field_​num
ibm_​db.​field_​precision
ibm_​db.​field_​scale
ibm_​db.​field_​type
ibm_​db.​field_​width
ibm_​db.​foreign_​keys
ibm_​db.​free_​result
ibm_​db.​free_​stmt
ibm_​db.​get_​option
ibm_​db.​next_​result
ibm_​db.​num_​fields
ibm_​db.​num_​rows
ibm_​db.​pconnect
ibm_​db.​prepare
ibm_​db.​primary_​keys
ibm_​db.​procedure_​columns
ibm_​db.​procedures
ibm_​db.​recreatedb
ibm_​db.​result
ibm_​db.​rollback
bm_​db.​server_​info
ibm_​db.​set_​option
ibm_​db.​special_​columns
ibm_​db.​statistics
ibm_​db.​stmt_​error
ibm_​db.​stmt_​errormsg
ibm_​db.​table_​privileges
ibm_​db.​tables
Summary
Index
About the Author
W. David Ashley
is a technical writer for Skillsoft where
he specializes in open source,
particularly Linux. As a member of the
Linux Fedora documentation team, he
recently led the Libvirt project
documentation and wrote the Python
programs included with it. He has
developed in 20 different programming
languages during his 30 years as a
software developer and IT consultant,
including more than 18 years at IBM and
12 years with American Airlines.
About the Technical Reviewer
Sourav Bhattacharjee
is a senior technical member for Oracle
Cloud Infrastructure. As part of IBM
Watson Health Lab, he has developed
many scalable systems, published a few
research papers, and applied some
patents to USPTO. He has an ample
amount of hands-on experience in
Python, Java, machine learning, and
many database systems. He earned his
master’s degree from the Indian Institute
of Technology, Kharagpur, India.
© The Author(s), under exclusive license to APress Media, LLC, part of Springer
Nature 2021
W. D. Ashley, Foundation Db2 and Python
https://doi.org/10.1007/978-1-4842-6942-8_1

1. Introduction to Db2
W. David Ashley1
(1) Austin, TX, USA

Welcome to this introduction to Db2. Since you are here, you are likely
looking for a place to get started with Db2. Our hope is that this book
will be that first step you are looking for. This book is meant to be an
introduction to the Db2 environment and to the Python interface. The
first half of the book will cover Db2 at a level that should be of interest
to both administrators and programmers. It will cover many aspects of
Db2 that you will make use of in either of the two roles. The last half of
the book will concentrate on using the Python programming language
to interface to Db2. While mainly oriented to programmers,
administrators will find it useful as well for some of their everyday
tasks.
Db2 has a long history and is the first relational database
implementation. It was first proposed by Edgar Frank “Ted” Codd in a
paper titled “A Relational Model of Data for Large Shared Data Banks” in
1969 while working at the IBM’s San Jose Research Laboratory in
California. In the next four years, IBM researchers worked to create a
system based on the principles described in Codd’s paper (called
System R). During this time, it became obvious that a new language was
needed to interact with the new system. Codd wrote a new paper “A
Data Base Sublanguage Founded on Relational Calculus,” which became
the basis for the new language called DSL/Alpha. This quickly went
through some name changes but eventually ended up being called SQL,
short for Structured Query Language.
Eventually there was an effort in the 1970s to port DSL/Alpha to the
370 mainframe environment. It was renamed to Database 2 in 1982.
The next year it was made available to the public with another name
change, DB2. This was a limited release but was highly regarded by the
customers that evaluated it. The customers actually pushed IBM to
deliver DB2 to a wider set of customers. IBM was somewhat reluctant
because they were trying to hold on to their IMS/DB market share. But
eventually the customers won out, and DB2 began to spread to other
platforms including OS/2, AIX/RS6000, and Windows.
Over the next two decades, the product went through a number of
name changes and several platform code bases. Recently with the
release of version 11.1, IBM rebranded the entire product line and
brought the code bases into a small number of code bases. The
following set of products are now the standard offerings:
Db2 (formerly DB2 LUW)
Db2 for z/OS (formerly DB2 for z/OS)
Db2 Hosted (formerly DB2 on Cloud)
Db2 on Cloud (formerly dashDB for Transactions)
Db2 Event Store (a new in-memory database for event-driven
transaction processing)
Db2 Warehouse on Cloud (formerly dashDB)
Db2 Warehouse (formerly dashDB Local)
IBM Integrated Analytics System (a new system platform that
combines analytic performance and functionality of the IBM
PureData System with IBM Netezza)
The code bases for today’s Db2 offerings share a common code base
that makes porting the code to another hardware/software platform a
relatively easy process. The SQL code base has been standardized so
that it is the same across all platforms, making moving to another
platform an easy task from a programming perspective.
There is also a current movement in programming applications with
embedded SQL. These types of applications are very hard to port from
one platform to another without major code modifications. Instead,
IBM is moving (where possible) to an API that can be called to process
SQL statements and make use of programming language variables for
values to be added to the SQL statement. This is the methodology used
for Python that we will explore later in this book.
In the past, Db2 was considered to be too large for most
applications. But as personal computers have become a lot more
powerful and then databases used by even a small number of people
have become extremely large, Db2 has become more attractive in the
management of this data. Also, the pricing model of Db2 on these
platforms has become more competitive. So if you need the
performance and the ability to manage large amounts of data, Db2 can
be a very attractive product.

What Is a Relational Database?


A relational database is actually hard to define because no relational
database system in today’s market actually implements E. F. Codd’s 12
rules defining the relational model. Instead, commercial relational
databases implement only about seven to nine of those rules. This is
enough to make their products commercially useful without the burden
of implementing the other rules. In fact, the other rules would not be
useful to most database users, so it is questionable whether or not they
will ever be implemented in a commercial product. In fact, most
commercial database vendors actually extend the relational model by
adding entities that are not really tables, such as BLOBs (which we will
discuss later).

The Relational Model


Roughly, relational databases implement the concept of entities
expressed as rows and columns. A customer records table would have a
single row representing a single customer. The columns (or tuples) of
the table would contain attributes of that customer. Each column would
contain a single attribute and would have a defined data type for
restricting the type of information it can contain. A typical customer
address table might be implemented as shown in Table 1-1.

Table 1-1 Sample Customer Table


CUSTNO FNAME LNAME STREET STATE ZIP
000000001 Bugs Bunny 1201 Looney Lane CA 77777
000000002 Marvin Martian 2342 Mars Avenue MA 30143
000000003 Daffy Duck 5462 Termite Terrace CA 77745
000000004 Elmer Fudd 23 Hunter Cove CA 77732
This table is a good example because it shows the kind of
relationships that can be expressed in a relational database. The
CUSTNO column holds a unique customer number for each customer
(or row). The column is the primary key for this table. The FNAME and
LNAME identify the first and last names of the customer. The STREET is
the address to be used for billing the customer. The STATE column is
the U.S. state the address is located. The ZIP column identifies the
mailing zip code.

Domains
Domains (or attributes) limit the data in a column to a particular type.
For instance, the data might be an integer of a particular type, a
monetary value, a character string of fixed or variable length, a date or
time value, or some other domain that has been defined.

Keys and Indexes


The STATE column in Table 1-1 is a foreign key – that is, a primary key
in another table. A rule can be set up so that when you add a new row
to the customer table, the system checks that the value in your
proposed STATE field is a valid entry in the state table. If it is not, the
record will not be inserted, and an error will be generated. Keys are
also known as indexes. When you create a primary key in a table, a
special index table is created to hold valid keys. This table is like any
other table in the system; it can be queried, added to, and deleted from.
Thus, all the valid keys can be inserted into and maintained in the table,
and it can be maintained just like any other table. Only the special rules
make the index table special.

Relationships
All of this shows just some of the kinds of relationships that can be
created (or derived) to properly maintain a set of tables. There are
probably other kinds of customer tables that could be created like a
table to maintain customer credit ratings, a customer shipping address
table, a customer contacts table, etc. All of these are specialized entities
that have relationships with the other customer tables. This is what a
relational database is all about. The idea is to express a relationship
with data organized so the data is only stored where needed and
hopefully only one time.
Relationships allow the user to create customized reports that can
express custom views of the data from the database. At first glance
these reports may look like they have no relation to the data contained
in the database, but they can give insights to the data not easily possible
by other means.

Transactions
Another aspect of relational databases is support for transactions. This
means providing a locking mechanism that can allow data to be
modified while others are reading the data or modifying other data at
the same time. This is known as the ACID test, which is an acronym for
the following tests:
Atomicity defines all the elements that make up a complete database
transaction. This might make up one or more SQL statements.
Consistency defines the rules for maintaining data points in the
correct state after a transaction. This is usually done through an SQL
statement such as COMMIT or ROLLBACK.
Isolation keeps the effect of a transaction invisible to others until it is
committed, to avoid confusion. This refers to the ability of the
database to keep multiple changes to a database from corrupting the
integrity of the database.
Durability ensures that data changes become permanent once the
transaction is committed. This is done by ensuring that writes are
made to all modified tables prior to committing the transaction.

Stored Procedures
A relational database typically implements stored procedures. These
are programs stored in the database to implement special processing
under several circumstances. These procedures usually involve
business logic that needs to be implemented the same across all the
database users. In many cases, only the stored procedure has the
proper permissions to modify, insert, delete, or access the data being
manipulated. This prevents users from making modifications to the
data if they do not have the correct permissions.

Constraints
Another property of relational databases are constraints. These make it
possible to further restrict an attribute. For instance, a column might be
defined as an integer. But the range of numbers might actually need to
be constrained to a particular range. This is what a constraint provides.
Constraints can come in many forms and are used for a number of
purposes. They are stored within the database and used when adding
or modifying data.

Normalization
Normalization is another attribute of a relational database. This design
process reduces the number of nonatomic values and the duplication of
data throughout the database, thus preventing anomalies and loss of
integrity. The process is known as normalization.
The process of normalization is performed by the administrator,
usually during the creation of the database. Users are not usually
involved in this activity.

SQL
Within the first few years of creating the first relational database, it
became very obvious that something was needed to actually
manipulate the data in a relational database. The language was
invented at IBM by Donald D. Chamberlin and Raymond F. Boyce in the
early 1970s. It was originally known as SEQUEL, but that name was
trademarked and it was changed to Structured Query Language (SQL).
SQL was later standardized by ANSI, but each relational database
product extended it as needed to conform to their product or hardware
platform.
SQL is divided into four categories of statements:
Data Definition Language (DDL)
Data Query Language (DQL)
Data Control Language (DCL)
Data Manipulation Language (DML)
Most SQL books spend most of their resources on the DML part of
SQL, but the other parts are just as important, especially to the
database administrator.

Data Definition Language (DDL)


The Data Definition Language subset consists of the CREATE, DROP,
ALTER, and TRUNCATE statements. These statements manipulate (or
reorganize) the data in the database.
The CREATE statement creates new entities in the database. This
can include tables, indexes, views, and procedures. Many database
systems include character sets, collations, transactions, and assertions
as well.
The DROP statement removes entities from the database. These
include all the entities that can be created with the CREATE statement.
Some databases include the users as an entity that can be dropped.
The ALTER statement can alter an existing entity, such as adding a
new column to a table.
The TRUNCATE statement removes all data from a table or index. It
is much faster than the DELETE SQL statement .

Data Query Language (DQL)


The Data Query Language subset consists of only the SELECT
statement. This is used for all queries of information in the database.
The syntax of the SELECT statement will be covered later in Chapter 7.

Data Control Language (DCL)


The Data Control Language subset consists of the GRANT and REVOKE
statements. These statements grant and revoke privileges to and from
users of the database. The database system specifies the type of
privileges that a user can be granted. Some database systems, such as
SQLite, depend on the operating system’s privilege mechanism and thus
do not support the GRANT and REVOKE statements.

Data Manipulation Language (DML)


The Data Manipulation Language subset consists of the INSERT,
UPDATE, and DELETE statements. Some systems also include the
SELECT statement in this subset, but since SELECT does not make
changes to the data, this would seem an odd place to place the SELECT
statement.
The INSERT statement adds new rows into a table. This new data
may also automatically alter the content of a view of the table data.
The UPDATE statement alters one or more rows in an existing table
(and any view dependent on the table). The statement does not add
new rows to a table, it only alters existing data.
The DELETE statement removes rows from a table (and any view
dependent on the table).

The ibm_db Project


The ibm_db project was started sometime in 2007 with the first code
commits to GitHub on February 9, 2008. The project was a joint effort
between IBM and the Python community to create a programming
interface to Db2 and Informix from Python. Informix had been
purchased by IBM around this same time, and this was part of the
project to integrate Informix into the Db2 line of products. Since then
the project has undergone steady progress with some recent major
fixes.
By establishing the project on GitHub, it was thought that with
community support the project would not only improve with time but
would benefit from community participation. This has proven to be the
case with many community volunteers contributing to the project
throughout the project lifetime.
Over time, the ibm_db_dbi module was added to the project, and
new projects were introduced based on the ibm_db module to support
other Python projects. These projects include ibm_db_django,
ibm_db_alembic, and ibm_db_sa.
For more information, see Chapter 8.

Summary
This chapter has presented some of the basic concepts that make up a
relational database and the SQL that supports it. This information is
common to almost all relational databases.
© The Author(s), under exclusive license to APress Media, LLC, part of Springer
Nature 2021
W. D. Ashley, Foundation Db2 and Python
https://doi.org/10.1007/978-1-4842-6942-8_2

2. Installing Db2
W. David Ashley1
(1) Austin, TX, USA

This chapter covers installing Db2 on Linux and Windows. Both


environments use the same installer to perform installation and
creation of userids and permissions. The installation process is pretty
easy and straightforward, but there are a number of questions you
might have before you start the installation that are not answered by
the install program. We will try to cover those questions as we come to
them.

My Development Environment
My development environment is not your typical Windows home
system. It consists of two Linux servers, one Windows client, and two
Linux client workstations. The Linux servers are not typical
workstations but actual dedicated servers that are usually used in small
business settings. I will try to describe each system so you have some
idea of what my environment is like.
The first system is a Lenovo ThinkSystem ST250 server with four 2
TB drives installed. It has 32 GB of memory and a six-core Xeon CPU.
This is my main server and hosts all my files. It is visible to the Internet
through my firewall via the Apache Web Server. The operating system is
Fedora 32. It is also hosting my Windows files via Samba as well as
hosting a number of Virtual Machines (VMs) via libvirt. This is the
system that hosts my main Db2 databases.
The second system is Lenovo ThinkStation P320 with 256 GB of SSD
and a 1 TB drive with 32 GB of memory and a six-core/six-thread Xeon
CPU. This is my development server and actually changes configuration
about twice a year. It currently runs CentOS Linux 8.2. This machine
also hosts my test Db2 environment.
The third machine is my Windows 10 workstation. It is connected to
the first Linux system via a shared drive (Samba) on the server. This is
where I do most of my writing as well as Windows development and
testing.
The fourth system is a Lenovo ThinkCentre M920 with 256 GB of
SSD and a 1 TB drive with 16 GB of memory. It has an i7 CPU. This is my
development workstation where I test all my Linux development and
remote access to servers. The operating system is Fedora 32.
The fifth system is a Lenovo ThinkPad T580 with 256 GB of SSD, 16
GB of memory, and an i7 CPU. It runs Fedora 32 and usually serves as
my travel machine but also as an auxiliary test device.

Installation Prerequisites
Before you even start the Db2 install program, there are a number of
prerequisites that need to be met before you can successfully install
everything. Our install environment for this book is CentOS 8.2. The
prerequisites for this OS should be the same for RHEL 8.2, but may be
different for other Linux environments. Windows environments have
their own prerequisites, but they are similar to the Linux prerequisites.
The first thing we need is the Db2 install program and support files.
To get the free version of Db2, just go to
www.ibm.com/account/reg/us-en/signup?formid=urx-
33669
This gets you to the account registration page. You can either log in
with an existing userid or create a new one. After you are logged in, the
website will present you a preferences page. Select your preferences
and select the Continue button. On the next web page, select the
download you need. Unless you need them, just ignore the pureScale
support downloads. Once the download is complete, move the
downloaded file to a safe location and then unzip or untar it. This will
create a new subdirectory in the current directory with the install files
exploded inside.

Caution! Do not move the downloaded file to the directory you


intend to place databases. You will have a mess of files on your hands
when you create your first database.

At the time this book was written, the version of Db2 that was available
was version 11.5.4. Older free versions of Db2 are not made available
when IBM introduces a new version.
Now that you have your evaluation version of Db2, you are probably
wondering what its limitations are. The evaluation version does not
ever expire. It has no limitation on the number of databases. The one
and only limitation is the total size of all databases, currently limited to
100 GB. This is more than enough space to perform your own
evaluation of the software unless you are trying to test a very large
system. If that is your plan, IBM will be more than glad to help with a
production version of Db2 and even some engineers.
At this point, we are now ready to find out what our prerequisites
are. To do this, simply run the install program. This program is located
in the untarred subdirectory we previously created. The expanded
directory is named server_dec. To run the install program, just run
the following commands:

$ cd server_dec
$ ./db2setup

If prerequisites are needed by Db2, the install program will list


them and then exit. Be sure to read everything output by the install
program. On our CentOS 8.2 system, it listed two prerequisites:
libpam.so* (32-bit)
libstdc++.so.6 (32-bit)
“Wait. Why does Db2 need 32-bit libraries?” you ask. Db2 is a
collection of a bunch of products, some of which have not changed in a
decade or more. Rather than possibly introducing new bugs into the
system, IBM has chosen to keep the older version of some of these
products. Thus, these prerequisite libraries are needed to support those
products.
Use your system’s software installer to install the prerequisite
packages. For Linux, this will be either the dnf or yum programs for
RPM-based packages. Once you have the prerequisites installed, you are
ready to proceed to really installing Db2. But before we do that, we
need to do a little planning.

Planning the Db2 Install


Before we get to the install, we need to understand what the result of
the install will be so we can plan ahead and avoid surprises afterward.
There are two major points to cover in this area.
The first result of the install is that you will have two new userids
created on the target machine. The default names of these IDs are
db2inst1 and db2fenc1. The db2inst1 ID will have some files
stored in its home directory, and you need to make sure there is enough
space to accommodate them. There are a limited number of files, but
you should make sure you are prepared for them. The db2fenc1 ID
only has a very limited number of files stored in its home directory.
The second result is not really a result of the install. It is more a
default that is set as a result of the install. This item is the location
where databases will be installed. The default location for databases is
in the db2inst1 home directory! THIS IS NOT WHERE YOU WANT TO
STORE DATABASES! You are probably going to store them on a different
drive/location. We will discuss this point again after we cover the
install process and before we create the sample database.
There are also a few minor points that are a result of the install, but
we will cover those as we get to them.

Installing Db2
We are now ready to install Db2. This process must be done by the
root (on Linux) or admin (on Windows) user, so start by becoming
the root/admin user. On Windows you will need to log out and log
back in as the admin user. On Linux just perform the following
command:
$ su - root
After this you need to change to the directory where you placed the
expanded files of the Db2 download package. Then run the db2setup
install package:

$ cd server_dec
$ ./db2setup

If you have installed all the prerequisites, this should show you the
Welcome page (Figure 2-1).

Figure 2-1 Db2 Install Welcome Page

After you click the New Install button, the next window appears to
allow you to select a product to install (Figure 2-2).
Figure 2-2 Db2 Install Choose a Product Page
This page has a number of products that you can select. The first
product is Db2 Server, and this is the product we will install. The second
product is Db2 with pureScale, which we did not download. The third
product is Db2 Connect Server, which is used for distributed databases.
The fourth product is Db2 Connect Client, which is used for building
compiled code that includes SQL statements. The last product is Db2
Runtime Client, which is used for running compiled code from the Db2
Connect Client version.
At this point you should select the top item in the list, Db2 Server
Editions. The version number may be different if you downloaded a
newer version of Db2. The other selections are not important at this
point in time. After clicking the Next button, the next page will appear.

Figure 2-3 Db2 Install Configuration Page


The Configuration page allows you to select either a Typical or a
Custom install. At this point, select a Typical install. You must also check
the box to agree to the IBM terms before you proceed. When finished,
click the Next button and the next page shown in Figure 2-4 will appear.
Figure 2-4 Db2 Install Instance Owner Page
You can check out the Custom install option for some items you may
want to change. Most users just perform a Typical install.
The Instance Owner page allows you to create the account that will
own the first instance of Db2 and the group name of the new user. Just
leave the db2inst1 information as it appears and then enter the
password and confirmation for the new account. This is the account
that will have new files installed in its home directory. When you have
entered in the new password and confirmed it for the account, click
Next and the page shown in Figure 2-5 will be displayed.
Figure 2-5 Db2 Install Fenced User Page
The db2fenc1 user will run user-defined functions and stored
procedures outside the address space of the Db2 database. Enter the
db2fenc1 password and confirm it. When finished, click Next which
will dosplay the page in Figure 2-6.
Figure 2-6 Db2 Install Response File and Summary Page
The next page is the Response File and Summary page. The
response file is a part of the installation set of files, so it does not have
to be created. Click the Finish button to start the install of Db2 as shown
in Figure 2-7.
Figure 2-7 Db2 Install Progress Page
The two status bars keep track of the progress of the installation of
all components. When finished, you will automatically be taken to next
page (Figure 2-8).
Figure 2-8 Db2 Install Finished Page
When the installation is complete, this is the page that will be
shown. You can choose to review the post-install steps, review the log
file, or just click the Finish button to exit the install.
At this point, the Db2 installation steps are complete, and we are
ready to look at the post-install tasks that will need to be considered.

Note With Ubuntu Linux, the Db2 instance owner and fenced user
that are created by the Db2 install are assigned the Dash shell by
default. This can cause scripts that begin with the line #!/bin/bash to
stop working. If you want to use Bash as the default shell when you
log into either of these users, execute the command csh -s
/bin/bash username (where username is the name of the Db2
instance owner or fenced user) before doing anything else.

Db2 Post-install Tasks


There are a few tasks that need to be performed after the Db2 install
has completed:
1. Try to log into the db2fenc1 userid using the password you set
from the db2setup command. Correct any problems you may find.

2. Try to log into the db2inst1 userid using the password you set
from the db2setup command. Correct any problems you may find.
You should note the location of the sqllib directory and its contents
as you may need to become familiar with them. This may or may
not be a link to another location.

3. If you do not want databases stored in the db2inst1 directory


tree, then now is the time to change that location. Log in as the
db2inst1 userid and run the following command:

$ db2 update dbm cfg using dftdbpath /your/db/path

This will update the path in the Db2 configuration so that all
databases belonging to db2inst1 will be stored in the new location.
At this point, we are now finished with our post-install tasks, and
we are ready to proceed to installing the sample database.

Installing the Db2 Sample Database


Db2 comes with a default database named sample. This database,
although small, is comprehensive enough to show how a database
should be constructed and is useful for demonstrating an array of
possible SQL commands. This book uses the sample database
extensively for demonstrating Db2 concepts, SQL usage, and Python
programming examples.
To install the sample database, follow these steps.
Log into the db2inst1 userid:

$ su - db2inst1

The Db2 database instance needs to be started, so that is our next


step:

$ db2start

Now we can actually install the sample database. This command


will take a few minutes, so be patient:

$ db2sampl -force -sql

The -force option ensures that if the database is already installed,


it will be overlaid with the default content. The -sql option tells Db2
not to install the XML data into the database.
Now we can connect to the database and test it:

$ db2 connect to sample

If successful, you should see some output that looks something like
this:

Database Connection Information

Database server = DB2/LINUXX8664 11.5.0.0


SQL authorization ID = DB2INST1
Local database alias = SAMPLE

Now we can run a test SQL command to query the database:

$ db2 "select * from department"

Important Be sure to include quotes around the text that follows


db2. If the quotes are omitted, the operating system will try to
process the command incorrectly, and an error will result.

You should see a total of 14 records displayed if everything works as


expected. We can now terminate our connection to the database with
the following command:

$ db2 connect reset

If successful, our connection to the database is now terminated.

Summary
This chapter has presented the steps to installing and verifying the
installation of Db2. Be sure to read the Caution, Note, and Important
sections presented in the chapter as they have valuable information for
some operating systems.
© The Author(s), under exclusive license to APress Media, LLC, part of Springer
Nature 2021
W. D. Ashley, Foundation Db2 and Python
https://doi.org/10.1007/978-1-4842-6942-8_3

3. Db2 Management
W. David Ashley1
(1) Austin, TX, USA

The management of Db2 is not an easy affair. It is not like any open
source relational database. It is a little like Oracle, but there are
differences. This is because Db2 for Linux, Unix, and Windows is a lot
like maintaining a mainframe database, just on a smaller and easier
scale. While there are many tools to help manage the Db2 environment
contained in the product itself, the key to proper management is
understanding the architecture of the product and how it manages
hardware resources. Without this knowledge, it is easy to get into
trouble and overextend the hardware of the machine. With proper
management, a single piece of hardware can manage either a few large
databases or many smaller ones without stretching the resources on
the machine too far.
This chapter will give you enough knowledge so that you can set up
the Db2 environment properly without overburdening you with facts
that have few, if any, consequences.

Db2 Instances
Instances are the top-level architectural structure in Db2. When you
installed Db2, you created the first Db2 Instance, which had the
default name of db2inst1. This is also the Instance that holds the
sample database we installed in the previous chapter.
Any number of databases can be installed in an Instance. But it is
possible to overload an Instance and cause performance problems.
This is because Db2 sets aside a fixed number of processes and threads
for each Instance, and it does not dynamically add or remove
resources during the active lifetime of an Instance. You must stop the
instance, adjust the number of resources, and then restart the
Instance. Of course, the databases owned by the Instance will
have to be stopped and restarted as well. That is the key: stopping and
starting an Instance can have impacts on availability and the
contained databases. If you are continually stopping and restarting
Instances, your users will not be very happy with your management
skills.
Instances are easy to describe, but harder to justify. You have to
know some history to be able to properly understand where they came
from as well as why they even exist. Instances were first introduced
just after the year 2000. Their justification came as the databases on
multi-drive machines started to become very large. They were so large
and had so many users that the network interface became a bottleneck
in processing database requests. It seems that the machines now far
outpaced the network in being able to handle database requests. Db2
had plenty of idle time while it waited on the network interface to
process the next request. This was in the days when the fastest
common networks were only 10 MB capacity. What was needed was a
way to divide the databases among multiple network ports. Thus,
instances were born.
Instances were not only given their own network port, they were
also given their own processes, threads, and semaphores. Thus, if a
database crashed for any reason, it would only disrupt the databases
within the containing Instance. The other Instances and databases
would continue to run normally while the database administrator dealt
with the downed Instance.
Instances can be used in many ways by the database
administrator, but the most common use is to prevent network port
congestion. The second most common use is to separate sets of
databases from each other for security purposes. Since each Instance
has its own set of administrators and users, this helps to enforce
security between Instances.
One other attribute of an instance is that it has no physical
presence on your disk system, or at least not much of one. It is very
hard to point to a place in the disk system and say, “This is where an
instance resides.” There are a few files created with the instance,
but these do not describe where the instance is. You should just
think of it as a logical entity and not a physical one.
There is a set of commands that administrators can use to manage
instances. The following are some example Db2 commands that
manage Instances.

Note All the commands used in this chapter can be run in one of
two ways. They can be run by logging into the db2inst1 user, or
they can be run by using the sudo db2inst1 prefix to the
command.

db2ilist
This command lists all the Instances that are available on a system:

db2ilist

Output:

db2inst1
db2inst2
db2inst3

Instance Environment Commands


These commands are useful to work with arrangement of instances in
the Db2 CLI.
The following command obtains the current instance:

db2 get instance


Output:

The current database manager instance is :


db2inst1

To start or stop the database manager of an instance on Db2 UDB,


the following command is executed for the current instance:

set db2instance=db2inst1

Using this command, you can start an Instance. Before this, you
need to run “set instance”:

db2start

Output:

SQL1063N DB2START processing was successful

This command is used to stop the current Instance:

db2stop

Output:

SQL1064N DB2STOP processing was successful.

Creating an Instance
Let us see how to create a new Instance .
If you want to create a new Instance, you need to log in with root.
An Instance ID is not a root ID or a root name.
Here are the steps to create a new Instance:
Step 1: Create an operating system user for an Instance.

useradd -u <ID> -g <group name> -m -d <user


location> <user name> -p <password>

Example:
useradd -u 1000 -g db2iadm1 -m -d /home/db2inst2
db2inst2 -p db2inst2
Step 2: Go to the Db2 Instance directory as a root user to create a
new Instance.
Location:

cd /opt/ibm/db2/v10.1/instance

Step 3: Create an instance using the following syntax.

./db2icrt -s ese -u <inst id> <instance name>

Example:

./db2icrt -s ese -u db2inst2 db2inst2

Output:

DBI1446I The db2icrt command is running, please


wait.
....
.....
DBI1070I Program db2icrt completed successfully.

Arranging a Communication Port and Host for an


Instance
Edit the /etc/services file and add the port number. In the following
syntax, “inst_name” indicates the Instance name , and
“inst_port” indicates the port number of the Instance:

db2c_<inst name> <inst_port>/tcp

Example:

sudo - db2c_db2inst2 50001/tcp


Syntax 1: Update configuration with the service name. In the
following syntax, “svcename” indicates the Instance service name,
and “inst_name” indicates the Instance name.

db2 update database manager configuration using


svcename db2c_&<inst_name>

Example 1: Updating DBM configuration with variable svcename


with value “db2c_db2inst2” for Instance “db2inst2”

db2 update database manager configuration using


svcename db2c_db2inst2

Output ,:

DB20000I The UPDATE DATABASE MANAGER CONFIGURATION


command completed successfully.

Syntax 2: Set the “tcpip” communication protocol for the current


Instance.

db2set DB2COMM=tcpip

Syntax 3: Stop and start the current Instance to get updated


values from database manager configuration.

db2stop
db2start

Updating an Instance
You can update an instance using the following command,:

db2iupdt

This command is used to update the Instance within the same


version release. Before executing this command, you need to stop the
Instance database manager using the “db2stop” command. The
following syntax “inst_name” indicates the previously released or
installed Db2 server Instance name, which you want to update to a
newly released or installed Db2 server version.
Syntax 1: To update an instance in normal mode

db2iupdt <inst_name>

Example:

./db2iupdt db2inst2

Syntax 2: To update an Instance in debugging mode

db2iupdt -D <inst_name>

Example:

db2iupdt -D db2inst2

Upgrading an Instance
You can upgrade an instance from a previous version of a Db2 copy to a
newly installed version of a Db2 copy:

db2iupgrade

On a Linux or UNIX system, this command is located in the


DB2DIR/instance directory. In the following syntax, “inst_name”
indicates the previous version of the Db2 Instance, and
“inst_username” indicates the currently installed version of a Db2
copy for the Instance user:

db2iupgrade -d -k -u <inst_username> <inst_name>

Example:

db2iupgrade -d -k -u db2inst2 db2inst2

Command parameters:
-d : Turns debugging mode on
-k : Keeps the pre-upgrade Instance type if it is supported in the
Db2 copy, from which you are running this command
If you are using the super user (su) on Linux for the db2iupgrade
command, you must issue the “su” command with the “-” option.

Dropping an Instance
You can drop or delete an instance, which was created by the “db2icrt”
command:

db2idrop

On Linux and UNIX operating systems, this command is located in


the DB2_installation_folder/instance directory.
Syntax:

db2idrop -u <inst_username> <inst_name>

Example:

./db2idrop -u db2inst2 db2inst2

Using Other Commands with an Instance


The following is the command to find out which Db2 instance we are
working on now.
Syntax 1:

db2 get instance

Output:

The current database manager instance


is: db2inst1

Syntax 2:

db2pd -inst | head -2


Another Random Scribd Document
with Unrelated Content
other who was frank and changed and had wrought a miracle upon
himself and upon all others except herself—who was incapable of
faith out of shame and despair and desolation and an inner hurt?
But if he was that other and changed man, if he approved himself in
this supreme instance, then she need torment herself so cruelly no
more. For in that case, what did her little sorrows matter? Then she
must be humble, and wait for her summons, though she did not
know what it would be.
And she waited, stretching out her slim throat like a thirsty deer.
XXVII
That “no, never, nevermore,” had driven Christian about without
another thought. On this day he forgot that Karen was sick unto
death.
As he was coming home that night it was raining. Nevertheless there
were groups of people in front of the houses. Some uncommon
event had brought them out of their rooms.
He had had no umbrella, and was wet to the skin. In the doorway,
too, stood people who lived in the house. They whispered excitedly.
When they saw him they became silent, stepped aside, and let him
pass.
Their faces frightened him. He looked at them. They were silent.
Terror fell on his chest like a lump of ice.
He went on. He was about to go up to Karen’s flat, but reconsidered
and went toward the court. He wanted to be alone in his room for a
while. Several people followed him. Among them was the wife of
Gisevius and her son, a young man whose behaviour was marked by
the well-defined class-consciousness of the organized worker.
Christian did not even observe that the window of his room was lit.
He walked close to the wall; he was so wet. Opening the door, he
saw Johanna and the boy. He did not at once recognize Michael,
who sat turned aside. He nodded to Johanna in surprise. The tense
and glittering look which she turned upon him made him start. He
reached the table and recognized Michael Hofmann. He grew pale,
and had to hold on to the table’s edge.
The door was still open, and in the dim light of the hall were
crowded the five or six people who had followed him. It was not
insolence that brought them to the threshold. They had been
disquieted by rumours, and thought that he could give them some
information.
Christian put his hand in the lad’s shoulder, and asked: “Where have
you been, Michael? Where have you come from?”
The boy continued rigid and silent.
“Where is Ruth?” Christian asked, as by a supreme effort.
Michael arose. His eyes were unnaturally wide open. With both arms
he made a large, obscure gesture. Horror shook him so that a
gurgling sound which arose in his throat was throttled before it
reached his lips. Suddenly he swayed and reeled and fell like a log.
He lay on the floor.
Christian kneeled down and put his arms about him. He lifted him a
little, and gathered the muddy, trembling boy close to him. He bent
down his face, and learned an unheard-of thing from the
beseeching, horror-stricken glance that sought him as from
fathomless depths. Passionately he pressed Michael’s body against
his own, which was so wet but no longer aware of its wetness. He
pressed the boy to his heart, as though he would open to him his
breast as a shelter, and the boy, too, clung to Christian with all his
might. The convulsive rigidity relaxed, and from that unbelievably
emaciated body there broke forth a sobbing like the moan of a wind
of doom.
The boy knew. No one could be so shattered but one who knew.
Then Christian kissed the stony, dirty, tear-stained face.
Johanna saw it, and the timid people at the door saw it also.
INQUISITION

I
Edgar Lorm was accustomed to taking his meals without Judith, so
he was not surprised at her absence to-day and sat down alone.
The meal was served: a lobster, breast of veal with salad and three
kinds of vegetables, a pheasant with compote, a large boule de
Berlin, pineapple and cheese. He drank two glasses of red Bordeaux
and a pint of champagne.
He ate this excessively rich meal daily with the appetite of a giant
and the philosophical delight of a gourmet. As he was lighting his
heavy Havana cigar over his coffee, he heard Judith’s voice. She
burst in, perturbed to the utmost.
“What has happened, dear child?” he asked.
“Something frightful,” she gasped, and sank into a chair.
Lorm arose. “But what has happened, my dear?”
She panted. “I haven’t been feeling at all well for several days. I got
the doctor to look me over, and he says I’m pregnant.”
A sudden light came into Lorm’s eyes. “I don’t think that’s such a
terrible misfortune.” He had difficulty in concealing his surprised
delight. “On the contrary, I think it’s a blessed thing. I hardly dared
hope for it. Indeed, my dear wife, I don’t know what I wouldn’t give
to have it true.”
Judith’s eyes glittered as she replied: “It shall never be—never,
never! I shall not remind you of our agreement; I shall not lay the
blame on you if this terrible thing has really happened. I can’t
believe it yet. It would make me feel bewitched. But you are
mistaken if you count on any yielding on my part, any womanly
weakness, or any awakening of certain so-called instincts. Never,
never! My body shall remain as it is—mine, all mine. I won’t have it
lacerated and I won’t share it. It’s the only thing I still call my own. I
won’t have a strange creature take possession of it, and I refuse to
age by nine years in nine months. And I don’t want some mocking
image of you or me to appear. Never, never! The horror of it! Be
careful! If you take delight in something I detest so, the horror will
extend itself to you!”
Lorm stretched himself a little, and regarded her with amazement.
There was nothing for him to say.
She went into her bedroom and locked the door. Lorm gave orders
that no visitors were to be admitted. Then he went into the library,
and spent the time until eight reading a treatise on the motions of
the fixed stars. But often he raised his eyes from the book, for he
was preoccupied not so much with the secrets of the heavens as
with very mundane and very depressing things. He got up and went
to the door of Judith’s room. He listened and knocked, but Judith did
not answer. At the end of half an hour he returned and knocked
again. She knew his humble way of seeking admission, but she did
not answer. The door remained locked.
At the end of each half hour, which he spent in reading about the
stars, he returned to the door and knocked. He called her name. He
begged her to have some confidence in him and hear what he had
to say. He spoke in muffled tones, so as not to arouse the attention
of the servants. He asked her not to blame him for his premature
delight. He saw his error and deplored it. Only let her listen to him.
He promised her gifts—an antique candlestick, a set of Dresden
china, a frock made by Worth. In vain. She did not answer.
Three days passed. An oppressive atmosphere rested on the
household. Lorm slunk through the rooms like an intimidated guest.
He humiliated himself so far as to send Judith a letter by the
housekeeper, who took in her meals and who alone had access to
her. At night he returned to the door again and again, placed his lips
against it, and implored her. There was no stirring of anger in him,
no impulse to clench his fist and break down the door. Judith knew
that. She was beating her fish.
She knew that she could go any length.
This man had been the idol of a whole nation. He had been spoiled
by fame, by the friendship of distinguished people, by the kindness
of fate and all the amenities of life. His very whims had been feared;
a frown of his had swept all opposition aside. Now he not only
endured the maltreatment of this woman whom he had married
after long solitariness and hesitation; he accepted insult and
humiliation like the just rewards of some guilt. Weary of fame,
appreciation, friendship, success, and domination, he seemed to lust
after mortification, the reversal of all things, and the very
voluptuousness of pain.
Quite late on the third evening he was summoned to the telephone
by Wolfgang Wahnschaffe. The breach between Wolfgang and Judith
that had followed his first visit forbade his visiting the house.
He begged Lorm for an interview on neutral ground. The occasion,
he said, was most pressing. Lorm asked for details. The bitter and
excited answer was that the question concerned Christian. Some
common proceeding against him, some decision and plan, some
protective measures were absolutely necessary. The family must be
saved from both danger and inconceivable disgrace.
At this point Lorm interrupted him. “I feel rather sure that my wife
will prove quite unapproachable in the matter. And what could I do
more than the merest stranger?” Urged anew, he finally promised to
meet Wolfgang at luncheon in a restaurant on Potsdamer Street.
He had scarcely hung up the receiver when Judith entered. She had
on a négligée of dark-green velvet trimmed with fur. The garment
had a long train. Her hair was carefully dressed, a cheerful smile was
on her lips, and she stretched out both hands to Lorm.
He was happy, and took her hands and kissed them.
She put her arms about his neck and her lips close to his ear:
“Everything is all right. The doctor is a donkey. I did you wrong.
Everything is nice now, so be nice!”
“If only you are satisfied,” said Lorm, “nothing else matters.”
She nestled closer to him, and coaxed with eyes and mouth and
hands: “How about the antique candlestick, darling, and the frock by
Worth? Are you going to get them for me? And am I not to have my
set of Dresden china?”
Lorm laughed. “Since you admit that you wronged me, the price of
reconciliation is a trifle high,” he mocked. “But don’t worry. You shall
have everything.”
He breathed a kiss upon her forehead. That disembodied tenderness
was the symbol of the ultimate paralysis of his energy before her
and men and the world. And from day to day this paralysis grew
more noticeable, and bore all the physical symptoms of an affection
of the heart.
II
An identical account in all newspapers gave the first public
notification that a murder had been committed:
“At six o’clock yesterday a foreman and a workman from
Brenner’s factory found the headless body of a girl in a
shed on Bornholmer Street. The body was held by ropes
in an unnatural position, and was so tightly wedged in
among beams, boards, ladders, barrows, and refuse, that
the police officers who were immediately summoned had
the greatest difficulty in disentangling their gruesome find.
The news spread rapidly through the neighbourhood, and
a rumour that increased in definiteness pointed to the
body of the murdered girl as that of the sixteen-year-old
Ruth Hofmann residing in Stolpische Street. A notification
of her disappearance had been lodged at police
headquarters several days ago. The theory that it was she
who was the victim of a murder of unparalleled bestiality
became a certainty some hours later. A mason’s wife
found in the mortar-pit of a building lot on Bellermann
Street the severed head, which proved to belong to the
body and was identified by several inhabitants of the
house on Stolpische Street as that of Ruth Hofmann.
Except for stockings and shoes, the body was entirely
naked, and its mutilations indicated felonious assault.
There is at present no trace of the murderer. But the
investigations are being present with all possible care and
energy, and it is warmly to be desired that the inhuman
brute may soon be turned over to the ministers of justice.”
III
In the little rear room he had now been sleeping for fourteen hours.
The widow Engelschall determined to go to him.
She passed through the half-dark passage-way in which the supplies
were stored. Hams and smoked sausages dangled from the ceiling.
On the floor stood kegs with sardines, herrings, and pickled
gherkins. There were shelves filled with glasses of preserved fruit.
The place smelled like a shop.
She stopped, took a little gherkin out of an open keg, and swallowed
it without chewing.
The bell of the front-door rang. A sluttish creature, broom in hand,
became visible at the end of the passage, and called out to the
widow Engelschall that Isolde Schirmacher had come with an
important message. “Let her wait,” the widow Engelschall growled.
Softly she went into the small room in which Niels Heinrich was
sleeping.
He lay on a mattress. A bluish flannel coverlet was over him. His
hairy chest was bare; his naked feet protruded. The room was so
small that not even a chest of drawers could have been squeezed in.
Heaps of malodorous, soiled linen lay in the corners. Tools were
scattered about the floor—a plane, a hammer, a saw. Old
newspapers increased the litter, and on nails in the wall hung dirty
clothes, ties, and a couple of overcoats. On the walls red splotches
showed where bedbugs had been killed. On the table stood a
candlestick with a piece of candle, an empty beer bottle, and a half
empty whiskey bottle.
He lay on his back. The muscles of his face had snapped under an
inhuman tension. Between his reddish eyebrows vibrated three dark
furrows. His skin was the tint of cheese. On his neck and forehead
were beads of sweat. His lids looked like two black holes. The slim,
red little beard on his chin moved as he breathed—moved like a
separate and living thing, a watchful, hairy insect.
He snored loudly. A bubble of saliva rose now and then from the
horrible opening of his lips that showed his decayed teeth.
The widow Engelschall had had plans which had seemed easy to
execute outside. Now she dared do nothing. Last night she had
stood above him as she stood now. He had begun to murmur in his
sleep, and she had hurried out in terror.
It buzzed in her head: What had he done with the two thousand
marks which he had embezzled from the builder? She distrusted his
assertion that he had spent it all on the cashier of the Metropolitan
Moving Picture Theatre. To make up a part of the money and
prevent his arrest, she had had to pawn all her linen, two chests of
drawers, the furnishings of her waiting-room, and also to mortgage
a life insurance policy. Her letter to Privy Councillor Wahnschaffe had
not even been answered.
She didn’t believe that he had wasted so much good money on that
slut. He must have a few hundreds lying about somewhere. The
thought gave her no rest. It was dangerous to let him notice her
suspicion; but she could risk entering the room while he slept,
burrowing in his clothes, and slipping her hand under his pillow.
But she stood perfectly still. In his presence she was always
prepared for the unexpected. If he but opened his mouth, she
trembled within. If people came to speak of him, she grew cold all
over. If she stopped to think, she knew that it had always been so.
When the village schoolmaster had caught the ten-year-old boy in
disgusting practices with a girl of eight, he had said: “He’ll end on
the gallows.” When he was an apprentice, he had quarrelled over
wages with his employer and threatened to strike him. The man had
said: “He’ll end on the gallows.” When he had stolen a silver chain
from the desk of the minister’s wife at Friesoythe, and his mother
had gone to return it, the lady had said: “He’ll end on the gallows.”
The memories came thick and fast. He had beaten his first mistress,
fat Lola who lived in Köpnicker Street, with barbarous cruelty,
because at a dance in Halensee she had winked at a postal clerk.
When the girl had writhed whining on the floor, and shrieked out in
her pain: “There ain’t such another devil in the world!” the widow
Engelschall had appealed to the enraged fellow’s conscience, and
had said to him: “Go easy, my boy, go easy;” but her advice had
been futile. When his second mistress was pregnant, he forced her
to go for treatment to an evil woman with whom he was also
intimate, and the girl died of the operation. He jeered at the swinish
dullness of women who couldn’t do the least things right—couldn’t
bear and couldn’t kill a brat properly. No one, fortunately, had heard
this remark but the widow Engelschall. Again she had besought him:
“Boy, go it a bit easier, do!”
At bottom she admired his qualities. You couldn’t fool with him. He
knew how to take care of himself; he could get around anybody. If
only he hadn’t always vented his childish rage on harmless things.
The expense of it! If the fire didn’t burn properly, he’d tear the oven
door from its hinges; if his watch was fast or slow, he’d sling it on
the floor so that it was smashed; if meat was not done to his liking,
he broke plates with his knife; if a cravat balked in the tying, he’d
tear it to shreds, and often his shirt too. Then he laughed his goat-
like laugh, and one had to pretend to share his amusement. If he
noticed that one was annoyed, he became rabid, spared nothing,
and destroyed whatever he could reach.
She wondered what he lived on in ordinary times, when he had had
no special piece of good luck. For he seemed always in the midst of
plenty, with pockets full of money, and no hesitation to spend and
treat. Sometimes he worked—four days a week or five. And he could
always get work. He knew his trade, and accomplished in one day
more than other workmen did in three. But usually he extended blue
Monday until Saturday, and passed his time in unspeakable dives
with rogues and loose women.
The widow Engelschall knew a good deal about him. But there was a
great deal that she did not know. His ways were mysterious. To ask
him and to receive an answer was to be none the wiser. He was
always planning something, brewing something. All this commanded
the widow Engelschall’s profound respect. He was flesh of her flesh
and spirit of her spirit. Yet her anxiety was great; and recently the
cards had foretold evil with great pertinacity.
And so she hesitated, full of fear. The palish, yellow skull on the
coarse, fustian pillow paralysed her. The slack flesh of her fat neck
drooped and shook, as she finally bent and reached down after his
coat and waistcoat, which were lying under the chair. She turned
away a little so as to conceal her motions. Suddenly she felt a hand
on her shoulder and shrieked.
Niels Heinrich had risen noiselessly. He stood there in his shirt, and
pierced her with the yellowish flare of his glance. “What’re you doing
there, you old slut?” he asked with calm rage. She let the garments
fall and retreated toward the door trembling. He stretched forth his
arm: “Out!”
His appearance was fear-inspiring. Words died on her lips. With
reeling steps she went out.
Isolde Schirmacher was still waiting in the hall. She began to weep
when she gave her message: the widow Engelschall was to come to
Stolpische Street without delay. Karen was very sick, was dying.
The widow Engelschall seemed incredulous. “Dying? Ah, it ain’t so
easy to die. Give her my love, and say I’m coming. I’ll be there in an
hour.”
IV
A further account appeared in the papers:
“The mystery which surrounds the murder of young Ruth
Hofmann is beginning to clear up. The public will be glad
to learn that the efforts of the police have brought about
the apprehension of her probable slayer. The latter is
Joachim Heinzen of Czernikauer Street, twenty years old,
of evil reputation and apparently of not altogether
responsible mind. Even before the discovery of the crime
his behaviour attracted attention. Within the last few days
the evidence against him has increased to the extent of
justifying his arrest. When the police frankly accused him
of the crime, he first broke down, but immediately
thereafter resisted arrest with the utmost violence. Lodged
in jail, he made a full and comprehensive confession.
When asked to sign the protocol, however, he retracted
his entire statement, and denied his guilt with extreme
stubbornness. In his demeanour brutish stupidity
alternated with remorse and terror. There can hardly be
any doubt but that he is the criminal. The first formal
examination by the investigating judge entrusted with the
case will take place to-day. All the inhabitants of the house
in Stolpische Street have been examined, among them a
personality whose presence in that locality throws a
curious side-light on a widely discussed affair, in which
one of the most respected families among our captains of
industry is involved.”
V
The hint in the last sentence caused endless talk. The name, which
had considerately been left unmentioned, passed from mouth to
mouth, no one knew how. The rumour reached Wolfgang
Wahnschaffe. Colleagues asked him with cool amazement what his
brother had to do with the murder of a Jewish girl in the slums. Even
the chief of his Chancellery in the Ministry of Foreign Affairs
summoned him, and questioned him with an expression that made
him blanch with shame.
He wrote to his father: “I am in the position of a peaceful pedestrian
who is in constant danger of a madman attacking him from behind.
You are aware, dear father, that in the career I have chosen an
unblemished repute is the first requisite. If my reputation and my
name are to be constantly at the public mercy of an insane
eccentric, who unhappily bears that name only to stain it, the time
has come to use every means, no matter how drastic, to protect
oneself. We have had patience. I was for far too long a flickering
little flame beside the dazzling but, as is clear now, quite deceptive
radiance of Christian. Now that my whole life’s happiness is at stake,
as well as the honour of myself and my house, it would be the
merest weakness on my part if I were to regard passively all that is
happening and still likely to happen. This is likewise the opinion of
my friends and of every right thinking person. Some energetic action
is necessary if I am to sustain myself in the station which I have
achieved, not to mention any other unpleasantness in which we may
become involved. Until I hear from you, I shall try to get in touch
with Judith, and take counsel with her. Although she ceased from all
association with myself, in the most insulting manner and for
reasons still dark to me, I believe that she will realize the
seriousness of the situation.”
The Privy Councillor received this letter immediately on the heels of
a conference with a delegation of strikers. It was some time before
the pained amazement it automatically aroused in him really
penetrated his consciousness. In any other circumstances the letter’s
unfilial, almost impudent tone would have angered him. To-day he
gave it no further thought. Swiftly he wrote a telegram in cipher to
Girke and Graurock.
The reply which came by special delivery reached him the next
evening at his house in Würzburg. Willibald Girke wrote:
“My dear Privy Councillor:—Although it is some time since we have
had the pleasure of working under direct orders from you, yet in the
hope of renewed relations between us, we have been forward-
looking enough to continue our investigations, and to keep up to
date in all matters concerning Herr Christian Wahnschaffe at our
own risk and expense. Thanks to this efficient farsightedness which
we have made our rule, we are able to answer your question with
the celerity and precision which the situation calls for.
“We proceed at once to the root of the matter, the murder of the
young Jewess. We can give you the consoling assurance that there is
no other connection between your son and the foul crime in
question than through the warm and much discussed friendship
which your son entertained for the murdered girl. Hence he is
implicated as a witness, and as such will have to appear in court in
due time. This painful necessity is unhappily unavoidable. Who
touches pitch is defiled. His close association with proletarians
necessarily involved him in such matters and in a knowledge of their
affairs. It has been proved and admitted that he once visited the
dwelling of the murderer Heinzen. He did so in the company of Ruth
Hofmann, and on that occasion a scandalous scene is said to have
taken place which was provoked by Niels Heinrich, the brother of
Karen Engelschall. This Niels Heinrich is a close friend of Joachim
Heinzen, has been kept under close surveillance by the police and
examined, and his evidence is said to have been very serious for the
accused. It is this connection with Engelschall, casual and innocent
as it may be, that will be held against your son, and its disagreeable
results cannot yet be absolutely estimated.
“Ruth Hofmann was seen almost daily in your son’s society. Her
father’s flat was immediately opposite Karen Engelschall’s, a
circumstance which facilitated their friendship. A new party has
already moved in, a certain Stübbe with his wife and three children.
This Stübbe is a drunkard of the most degraded sort. He is noisy
every evening, and treats his family with such cruelty that your son
has already found it necessary to interfere on several occasions. We
touch upon this fact to illustrate the ease with which, in these
dwelling-places, comradeships are established and annoyances
incurred. The former tenant, David Hofmann, was indeed peaceful
and well-behaved. But he must have been in the utmost difficulties,
since he left for America only a few days before the murder.
Although telegrams were sent after him at once, he has not been
heard from. It is supposed that, for reasons of his own, he
emigrated under an assumed name, since the passenger lists of all
ships that have sailed within the past two weeks have been searched
for his own name in vain. It is possible, moreover, that he sailed
from a Dutch or British port. The authorities are investigating.
“Ruth’s young brother had also disappeared for six days, and did not
show up until the very evening on which the murder was discovered,
when he was found in your son’s room. He has remained there ever
since. His state of mind is inexplicable. No urging, neither requests
nor commands, could extract from him the slightest hint as to where
he had passed the crucial days between Sunday and Thursday. As
his silence is prolonged, it assumes a more and more mysterious
aspect, and every effort is made to break it in the belief that it may
be connected with the murder and may conceal important bits of
evidence.
“It has not failed to be observed that your son not only gives no
assistance to those who desire to question young Hofmann, but
frustrates their purpose whenever he can. Since he is absent from
his room during the greater part of the day, a certain Fräulein
Schöntag has undertaken to watch over the boy. Recently, however,
the necessity for such constant watchfulness seems to have
decreased. In the absence of Fräulein Schöntag the boy Hofmann is
now often left alone for hours, and only the wife of Gisevius
occasionally looks in to see that he is still safely there. Nevertheless
a plain clothes detective is keeping the house under close and
constant observation.
“From all this it is obvious that, in assuming the care of this
enfeebled boy, your son has taken upon himself a new burden,
which, in view of his other responsibilities and restricted pecuniary
means, will be not a little difficult to bear. We take the liberty of
making this observation, in spite of the fact that a real
understanding of your son’s intentions and purposes is still lacking to
us as to every one.
“This concludes our report. In the hope that our thoroughness and
exactness corresponds to your hopes and wishes, and in the
expectation of such further directions as you may be pleased to give
us, We beg to remain, Most respectfully yours, Girke and Graurock.
Per W. Girke.”
Albrecht Wahnschaffe wandered through the rooms of the old
house, followed by the dog Freya. To avoid the most crushing of his
thoughts, he summoned up the face of the workingman who had
been the spokesman of yesterday’s deputation. He recalled with
great exactness the brutal features—the protruding chin, the thin
lips, the black moustache brushed upward, the cold, sharp glance,
the determined expression. And in this face he saw no longer the
visage of this particular man who had come to him on this particular
and accidental errand, but of a whole world, mysterious, inevitable,
terrible, full of menace and coldness and determination.
The energy and circumspection which he had shown in his
conference with the delegates seemed to him monstrously futile.
The power of no individual would avail in the conflict with that
world.
He did not want to think—not of the letter of the private detective
agency, nor of its horrible revelations, which seemed dim and turbid
scenes of an immeasurably alien life, and yet the life of his son
whom he had loved and whom he still loved. Ah, no, he did not want
to think of the innumerable lowly and ugly and horrible events which
whirled past his mind in a ghostly panorama—the rooms, the courts,
the houses full of groaning, wretched bodies. To prevent himself
from thinking of these, he turned the pages of a book, hunted
through a drawer filled with old letters, and wandered tirelessly from
room to room, followed by the dog Freya.
Fleeing from these images, he encountered others that concerned
the realm of his work, in which the hopes of all his life were rooted
and had ripened, in which the very wheels of his existence had been
set in motion. He saw the great shops desolate, the furnaces
extinguished, the trip-hammers still, and from a thousand doors and
windows arms in gestures of command stretched out toward him
who had thought himself the master of them all. It was not the first
time that a strike had interfered with the intricate organization of the
works. But it was the first time that the feeling came to him that
struggle was useless and the end imminent.
And the question rose to his lips: “Why have you done this to me?”
And this question he addressed to Christian, as though Christian
were guilty of the demands of those who had once been willing
slaves, of the empty halls, the extinguished furnaces, the silent
hammers—guilty, somehow, because of his presence in those rooms
amid harlots and murderers, mad and sick men, and in all those
haunts of human vermin. Rage quivered up in him, one of those rare
attacks that all but robbed him of consciousness. His eyes seemed
filled with blood; he sought a sacrifice and a creature to make
atonement, and observed the dog gnawing at a rug. He took a
bamboo stick, and beat the animal so that it whined piteously—beat
it for minutes, until his arm fell exhausted.
Calm came, and he felt remorse and shame. But the core of his
anger remained in his heart, and he carried it about with him like a
hidden poison. The gnawing and burning did not cease, and he
knew that it would not cease until he had had a reckoning with
Christian, until Christian had given some accounting of himself as
man to man, son to father, criminal to judge.
The rage corroded his soul. Yet what was the way out? How could
he reach Christian? How summon him to an accounting? No active
step but would betray his dignity. Was he doomed merely to wait?
For weeks and months? The silent rage gnawed at his very life.
VI
Johanna’s absence made Amadeus Voss more and more anxious.
Using the methods of a spy, he had discovered that she had left the
house of her relatives quite suddenly. On the day after her last visit
to Zehlendorf, she had come home silent and sorrowful. Her absence
had caused worry, since every one was now thinking of murders and
mysterious disappearances. She had refused to tell where she had
passed the night, and had simply declared that she was going away
altogether. She had resisted all questions and arguments in silence
and had quickly packed her possessions. Then a motor car, which
she had ordered, had appeared, and with formal words of thanks
she had said good-bye. She had told her cousin, with whom she was
more intimate than with the rest, that she needed a period of
concentration and loneliness, and was moving into a furnished room.
She begged that no one try to seek her out. It would be useless and
only drive her farther. Indeed, she had threatened more desperate
things if she were not left in peace. Nevertheless her frightened
kinsmen had followed her track, and had discovered that she had
rented a room in Kommandanten Street. But since she was lodging
with a respectable woman and seemed guilty of nothing exciting or
dangerous, her desire was finally respected, and all vain speculation
as to her incomprehensible action abandoned.
These details had been recounted to Voss by a maid whom he had
bribed with five marks. With tense face and inflamed heart he went
home to consider what he should do. He found a letter from
Johanna, who wrote: “I do not know how things will be between us
in the future. At this moment I am incapable of any decision. I am
not in the least interested either in myself or in my fate, and I have
weighty reason for that feeling. Don’t seek me out. I am in
Stolpische Street almost all day long, but don’t seek me out if you
have any interest in me or if you want me to have the least interest
in you in the future. I don’t want to see you; I can’t bear to listen to
you at present. The experience I have had has been too dreadful
and too unexpected. You would find me changed in a way that you
would not like at all. Johanna.”
Pale with rage, he immediately rode into the city as far as the station
on Schönhauser Avenue. When he reached Stolpische Street it was
nine o’clock in the evening. Frau Gisevius told him that Fräulein
Schöntag had left half an hour ago. He looked into Christian’s room,
and saw an unknown boy sitting at the table. He drew the woman
aside, and asked her who it was. She was amazed that he didn’t
know, and told him that it was the brother of the murdered girl. She
added that Wahnschaffe was quite unlike himself since the tragedy.
He walked about like a lost soul. If you talked to him he either didn’t
answer at all or answered at random. He didn’t touch his breakfast
which she brought him every morning. Often he would stand for half
an hour on the same spot with lowered head. She was afraid he was
losing his mind. A couple of days ago she had met him in Rhinower
Street, and there, in bright daylight, he had been talking out loud to
himself so that the passers-by had laughed. Yesterday he had left
without a hat, and her little girl had run after him with it. He had
stared at the child for a while as if he didn’t understand. Shortly
after that he had returned home with several of his friends.
Suddenly she had heard him cry out and had rushed into his room.
She had found him on his knees before the others, sobbing like a
little child. Then he had struck the floor in his despair and had cried
out that this thing could not be and dared not be true, that it wasn’t
possible and he couldn’t endure it. Fräulein Schöntag had been there
too. But she had been silent and so had the others. They had just
sat there and trembled. This attack had been caused by some young
men imprudently telling him that this was the day set for the official
examination and autopsy of Ruth’s body. He had wanted to hasten
to the court. They had restrained him with difficulty, and finally had
to assure him that he would be too late, that everything would be
over. All night long he had walked up and down in his room, while
Michael had been lying on the leather sofa. The two hadn’t
exchanged one word all night. She had slipped out of her room and
listened repeatedly—not a syllable. At five o’clock in the morning
Fräulein Schöntag had come; at seven Lamprecht and another
student. They had persuaded him to go out to Treptow with them to
spend the day. He had neither consented nor refused, and they had
just dragged him along. Friends of Ruth Hofmann had come too and
staid till noon—a woman and a young man. They sometimes came in
the evening too, after Fräulein Schöntag had gone, so that Michael
need not be alone. No one knew what was going to be done with
the boy. His condition hadn’t changed in the least. He hadn’t even
undressed, and if Fräulein Schöntag hadn’t known just how to get
around him, he would not even have let anybody brush the mud
from his clothes or wash his hands and face. Sometimes a red-haired
gentleman would come to see the boy. She had heard that he was a
baron and a friend of Wahnschaffe. This gentleman had brought a
chessboard day before yesterday, because some one had said that
Michael knew how to play chess and had often played with his sister.
But when the chessmen had been set up, Michael had only
shuddered and had not touched them. The board was still there on
the table. Herr Voss could go and see for himself.
The woman would have gossipped on and on. But Voss left her with
a silent nod. He had grown thoughtful. What he had heard of
Christian had made him thoughtful. Careless of his direction, he
turned toward Exerzier Square. He brooded and doubted. His
imagination refused to see Christian as the woman had pictured him.
It seemed an absolute contradiction of the possible, a mockery of all
experience. Grief, such grief—and Christian? Despair, such despair—
and Christian? The world was rocking on its foundations. Some
mystery must be behind it all. Under the pressure of huge forces the
very elements may change their character, but it was inconceivable
to him that blood should issue from a stone, or a heart be born
where none had been.
Forced back against his will, he returned to Stolpische Street.
Suddenly he saw Johanna immediately in front of him. He called out
to her; she stopped and nodded, and showed no surprise. But his
hasty, whispered questions left her silent. Her face was of a
transparent pallor. At the door of the house she stopped and
considered. Then she walked back into the court to the window of
Christian’s room. She wanted to look in, but a hanging had been
drawn. She hurried into the hall, rang the bell, and exchanged some
words with Frau Gisevius. Then she came back. “I must go upstairs,”
she said, “I must see how Karen is.” She did not indicate that Voss
was to wait. He waited with all the more determination. From the
dwellings about he heard music, laughter, the crying of children, the
dull whirr of a sewing-machine. At last Johanna came back and
returned to the street at his side. She said in a helpless tone: “The
poor woman will hardly outlive the night, and Christian isn’t at
home. What is to be done?”
He did not answer.
“You must understand what is happening to me,” Johanna said,
softly and insistently.
“I understand nothing,” Voss replied dully. “Nothing—except that I
suffer, suffer beyond endurance.”
Johanna said harshly: “You don’t count.”
They were near the Humboldt Grove. It was cold, but Johanna sat
down on a bench. She seemed wearied; exertions hurt her delicate
body like wounds. Shyly Voss took her hand, and asked: “What is it,
then?”
“Don’t,” she breathed, and withdrew her hand. After a long silence
she said: “People always thought him insensitive. Some even said
that that was the reason for his success with all who came near him.
It was a nice theory. I myself never believed it. Most theories are
wrong; why should this one have been right? There is so much vain
talk about people; it is all painful and futile, both when it asserts and
when it denies. His society wasn’t, I grant you, spiritually edifying. If
one was deeply moved by something, one somehow, instinctively,
hid it from him and felt a sense of embarrassment. And now—this!
You can’t imagine it. And how am I to describe it? All the time, that
first evening while he was taking care of Michael, he hadn’t yet been
told anything. At nine or half-past he went up to Karen’s, intending
to come back in an hour, but he came earlier. There were people
loitering in the yard, and they told him. Then he came into the room,
quite softly. He came in and....” She took out a handkerchief, pressed
it to her eyes, and wept very gently.
Voss let her cry for a little while. Then he asked very tensely: “He
came in and——? And what?”
Johanna kept her eyes covered, and went on: “You had the feeling:
This is the end for him, the end of all content, of smiles and laughter
—the end. In fifteen minutes his face had aged by twenty years. I
looked at it for just a moment; then my courage failed me. You may
think it fantastic, but I tell you the whole room was one pain, the air
was pain and so was the light. It’s the truth. Everything hurt;
everything one thought or saw hurt. But he was absolutely silent,
and his expression was like that of one who was straining his eyes to
read some illegible script. And that was the most painful thing of all.”
She fell silent and Voss did not break this silence. Enviously and
rancorously he reflected: “We shall have to convince ourselves that
blood can issue from a stone; we must see and hear and test.”
Deliberately he fortified his will to doubt. The explanations which he
gave in his own mind were of an unworthy character. Not to provoke
Johanna he feigned to share her faith; and yet there was something
about her story that stirred his vitals and made him afraid.
Johanna needed some support. She froze in her new freedom; she
distrusted her strength to bear it. With a touch of dread and longing
she wondered that no one dragged her back by force into the
comfort of a sheltered, care-free, secure life.
She was not sorry to have Amadeus walking at her side. Ah, it was
inconsistent and weak and faithless to one’s own self, but there was
such a horror in being alone. Yet her gesture of farewell seemed
utterly final when they reached the house in Kommandanten Street
where she lived. Amadeus Voss, suspecting her weakness and her
melancholy, accompanied her to the dark stairs, and there grasped
her with such violence as though he meant to devour her. She
merely sighed.
At that moment an irresistible desire for motherhood welled up in
her. She did not care through whose agency, nor whether his kiss
inspired disgust or delight. She wanted to become a mother—to give
birth to something, to create something, not to be so empty and
cold and alone, but to cling to something and seem more worthy to
herself and indispensable to another being. Had not this very man
who held her like a beast of prey spoken of the yearning of the
shadow for its body? Suddenly she understood that saying.
Sombre and searching and strong was the look she gave him when
they stepped out upon the street again. Then she went with him.
VII
Karen was still alive in the morning. Death had a hard struggle with
her. Late at night she had once more fought herself free of its
embrace; now she lay there, exhausted by the effort. Her arms, her
hands, her breasts were covered with sores filled with pus. Many
had broken open.
Three women rustled through the room—Isolde Schirmacher, the
widow Spindler, and the wife of a bookbinder who lived in the rear.
They whispered, fetched things back and forth, waited for the
physician and for the end.
Karen heard their whispers and their tread with hatred. She could
not speak; she could scarcely make herself understood; but she
could still hate. She heard the screeching and rumbling in the flat
that had been the Hofmanns’ and was now the Stübbes’. The
drunkard’s rising in the morning was as baleful to his wife and
children as his going to bed at night. All the misery that he caused
penetrated the wall, and aroused in Karen memories of equal horrors
in dim and distant years.
Yet for her there was really but one pain and one misery—Christian’s
absence. For days he had paid her only short visits; during the last
twenty-four hours, none at all. Dimly she knew of the murder of the
Jewish girl, and dimly felt that Christian was changed since then; but
she felt so terribly desolate without him that she tried not to think of
that. His absence was like a fire in which her still living body was
turned to cinders. It cried out at her. In the midst of the moaning of
her agony she admonished herself to be patient, raised her head
and peered, let it drop back upon the pillows, and choked in the
extremity of her woe.
The door opened and she gave a start. It was Dr. Voltolini, and her
face contorted itself.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebooknice.com

You might also like