IBM DVM For zOS
IBM DVM For zOS
Doug Dailey
Guillaume Arnould
Marie-Therese Bouedo
Willem de Gelder
Francesco Borrello Shawn Sullivan
Dave Trotter Robin Ramadil-Kannan
Nasser Ebrahim Rajesh Sambandhan
Jonathan Sloan Mahesh Sugavanam
John Casey Coreen Wilson
Bill Powers Jeff Lutzow
Redbooks
IBM Redbooks
October 2021
SG24-8514-00
Note: Before using this information and the product it supports, read the information in “Notices” on
page ix.
This edition applies to IBM Data Virtualization Manager for z/OS Version 1.1.0.
Notices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .x
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii
Now you can become a published author, too! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv
Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv
Stay connected to IBM Redbooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv
Chapter 1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Protecting your investment by using IBM Z technology . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Why DVM for z/OS in modernization? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Why is today different? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 What does the market offer today? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 What can you do? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6 Resolving the data latency gap through data virtualization . . . . . . . . . . . . . . . . . . . . . . . 6
1.7 DVM for z/OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.8 IBM Cloud Pak for Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.9 Unlock enterprise data for virtually any application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.10 Why and when should you consider DVM for z/OS . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Contents v
8.4.1 Using VPD groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.4.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.4.3 Considerations and limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8.5 Workload management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8.5.1 Configuring WLM for the DVM server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
8.5.2 Working with multiple DVM servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
8.5.3 Load balancing with CICS regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.5.4 Db2-Direct and IMS-Direct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.5.5 Java Database Connectivity performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
8.6 ODBC performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
8.7 Integrated Data Facility and DS Client API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
8.8 Query optimization and performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
8.8.1 SQL best practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
8.8.2 Performance testing with Apache JMeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.8.3 Performance testing by using the Command Line Tester . . . . . . . . . . . . . . . . . . 192
Contents vii
viii IBM Data Virtualization Manager for z/OS
Notices
This information was developed for products and services offered in the US. This material might be available
from IBM in other languages. However, you may be required to own a copy of the product or product version in
that language in order to access it.
IBM may not offer the products, services, or features discussed in this document in other countries. Consult
your local IBM representative for information on the products and services currently available in your area. Any
reference to an IBM product, program, or service is not intended to state or imply that only that IBM product,
program, or service may be used. Any functionally equivalent product, program, or service that does not
infringe any IBM intellectual property right may be used instead. However, it is the user’s responsibility to
evaluate and verify the operation of any non-IBM product, program, or service.
IBM may have patents or pending patent applications covering subject matter described in this document. The
furnishing of this document does not grant you any license to these patents. You can send license inquiries, in
writing, to:
IBM Director of Licensing, IBM Corporation, North Castle Drive, MD-NC119, Armonk, NY 10504-1785, US
This information could include technical inaccuracies or typographical errors. Changes are periodically made
to the information herein; these changes will be incorporated in new editions of the publication. IBM may make
improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time
without notice.
Any references in this information to non-IBM websites are provided for convenience only and do not in any
manner serve as an endorsement of those websites. The materials at those websites are not part of the
materials for this IBM product and use of those websites is at your own risk.
IBM may use or distribute any of the information you provide in any way it believes appropriate without
incurring any obligation to you.
The performance data and client examples cited are presented for illustrative purposes only. Actual
performance results may vary depending on specific configurations and operating conditions.
Information concerning non-IBM products was obtained from the suppliers of those products, their published
announcements or other publicly available sources. IBM has not tested those products and cannot confirm the
accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the
capabilities of non-IBM products should be addressed to the suppliers of those products.
Statements regarding IBM’s future direction or intent are subject to change or withdrawal without notice, and
represent goals and objectives only.
This information contains examples of data and reports used in daily business operations. To illustrate them
as completely as possible, the examples include the names of individuals, companies, brands, and products.
All of these names are fictitious and any similarity to actual people or business enterprises is entirely
coincidental.
COPYRIGHT LICENSE:
This information contains sample application programs in source language, which illustrate programming
techniques on various operating platforms. You may copy, modify, and distribute these sample programs in
any form without payment to IBM, for the purposes of developing, using, marketing or distributing application
programs conforming to the application programming interface for the operating platform for which the sample
programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore,
cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are
provided “AS IS”, without warranty of any kind. IBM shall not be liable for any damages arising out of your use
of the sample programs.
The following terms are trademarks or registered trademarks of International Business Machines Corporation,
and might also be trademarks or registered trademarks in other countries.
CICS® IBM z Systems® Redbooks (logo) ®
Cognos® IBM z13® SPSS®
Db2® IMS/ESA® WebSphere®
DB2® Informix® z Systems®
IBM® Netezza® z/OS®
IBM Cloud® Parallel Sysplex® z13®
IBM Cloud Pak® RACF® z15™
IBM Watson® Rational® zEnterprise®
IBM Z® Redbooks®
The registered trademark Linux® is used pursuant to a sublicense from the Linux Foundation, the exclusive
licensee of Linus Torvalds, owner of the mark on a worldwide basis.
Microsoft, Windows, and the Windows logo are trademarks of Microsoft Corporation in the United States,
other countries, or both.
Java, and all Java-based trademarks and logos are trademarks or registered trademarks of Oracle and/or its
affiliates.
OpenShift, Red Hat, are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United
States and other countries.
UNIX is a registered trademark of The Open Group in the United States and other countries.
Other company, product, or service names may be trademarks or service marks of others.
This IBM® Redbooks® publication presents an overview of the IBM Data Virtualization
Manager for IBM z/OS® offering and the role it plays in accessing traditional non-relational
data on IBM Z.
If there is anything true about the IT industry, it is change and data. Data Virtualization
Manager for z/OS is built with both of these absolute truths in mind. With Data Virtualization
Manager for z/OS, an organization can extend its infrastructure and data investments to
support new ways of accessing and presenting data within modern applications. Modernizing
access to those highly valuable traditional non-relational data sources is its reason for
existence.
The book begins with general concepts, the value of virtualization to an organization, and the
benefits of virtualizing data assets that originate on IBM Z®. It compares the benefits and
implications of accessing data where it originates to the effect of moving that data to another
platform for data access. Modernization is often at the center of any Data Virtualization
project and Data Virtualization Manager for z/OS can play a key role in these efforts.
Next, the book describes the architecture of the Data Virtualization Manager for z/OS server
and provides technical details of the data asset virtualization process so that technical users
can better prepare for deployment of this new technology. The book provides a description of
the server's most important components and functions so that a user can better understand
how to take advantage of the extensive capabilities.
Beyond the fundamental description of the server components, the book documents how to
install and configure the server, how to connect it to various data sources (such as VSAM and
IMS), the different access methods for different types of data sources, and how to manage,
monitor, and tune. A chapter about capacity planning and deployment also is included, along
with best practices for project success. Lastly, some helpful appendixes are available,
including one about troubleshooting and diagnostics.
Although this book does not include all the documentation that is relevant to Data
Virtualization Manager for z/OS, we believe it to be a good roadmap to get you on your way to
a successful virtualization project.
The introductory chapters of this publication are intended for a broad technical audience,
including IT system architects, technical IT managers, operations managers, system
programmers, application developers, and other technical roles. The subsequent chapters
provide more technical details about the virtualization of specific types of data sets on IBM Z
and might be more suitable to technicians who are implementing virtualization on those
specific data assets.
Doug Dailey is an IBM Product Manager with over 10 years of experience in building
software and solutions for customers. Doug started working in technical support for IBM
Informix® Software (now an IBM company) and transitioned to a Technical Account Manager
role and soon thereafter a CSM Manager for IBM’s Accelerated Value Program. His passion is
helping customers win. For over 10 years, Doug was a product manager at Informix Software,
IBM Netezza® and Pure Data for Analytics, and IBM Db2 Replication for Continuous
Availability. His specialization is data federation and Data Virtualization technologies and
currently is the Product Manager for IBM Data Virtualization Manager for z/OS.
Guillaume Arnould joined IBM in 1996 and started in IBM z System Manufacturing Test
Engineering before spending 2 years in Poughkeepsie, NY. In 2001, he joined the IBM Client
Center in Montpellier to work as a Performance Expert on Db2 for z/OS client benchmarks.
After 10 years as the Technical Team Lead in the Smarter Banking Showcase and engaging
with customers. Guillaume is now an Advanced Technical Sales Expert and leads the Data &
AI on IBM Z Solutions team. He is working on IBM Db2 Analytics Accelerator, Watson
Machine Learning on Z, Db2 for z/OS, IBM Db2 Data Gate, and IBM Data Virtualization
Manager for z/OS.
Francesco Borrello Francesco Borrello is a z Data & AI Technical Sales Specialist in IBM
Technology, Italy. He joined IBM in 2011 and obtained a master’s degree in Centralized
System for Cloud Computing. His main mission is to help customers in driving new business
opportunities b y adopting traditional Hybrid Data Management and Analytics and innovative
ML/AI solutions on IBM Z®. His areas of specialty are in Db2 for z/OS, Db2 Tools, Db2
Analytics Accelerator, Data Replication, and Data Virtualization Manager for z/OS. He also
was a presenter at several international conferences and technical user groups.
Dave Trotter began working as a developer and systems programmer in his early career for
Db2 for IBM iSeries. Currently, he works as a technical specialist and technical seller for IBM
System Z software solutions. Dave’s area of specialty is guiding customers on analytics
strategies and the use of the Db2 Analytics Accelerator for z/OS and Data Virtualization
Manager for z/OS in their enterprise.
Nasser Ebrahim is a Solution Architect with IBM Systems Lab, focusing on data and AI
solutions on IBM Z. In his role, Nasser helps Global System Integrators and clients to build
solutions on data and AI technologies. He has 22 years of experience with IBM Z
technologies, which includes application programming, system programming, Java run times,
analytics, and machine learning. He was Java Current Release Technical Leader with IBM
Software Lab before taking his current role as a solution architect.
John Casey is a Principal Solutions Advisor for Rocket Software. Inc., where he supports
customers that use IBM’s Db2 tools and IBM Data Virtualization Manager on z/OS on System
Z. Before joining Rocket Software. Inc, John spent 20 years at IBM as a Field Technical
Specialist on z/OS and Db2 related products.
Bill Powers has been working with IBM Information Management solutions since 1985. As an
IBM customer for 36 years, Bill worked in application development, database administration,
quality assurance, and system programming. His experience has spanned a range of
industries, including health care, insurance, manufacturing, transportation, software, and
public utilities. He has been working with Db2 for the last 29 years in the areas of database
design and administration, performance and tuning, backup and recovery, installation, and
migration. Bill works for Rocket Software, Inc., as a Senior Solutions Advisor.
Shawn Sullivan began working as a trainer and eventual product expert in Db2 QMF and
Db2 Tools in 1998. He has been a QMF specialist for 23 years for cross-platform mainframe
and distributed systems. Recently, he joined the Data Virtualization Manager for the z/OS
team and the IBM Multi-factor Authentication team.
Mahesh Sugavanam is a Senior Software Engineer for Rocket Software, Inc. Over the
previous 22 years, Mahesh specialized in information management products for IBM system
Z, Linux, UNIX, and Windows. He specialized in mainframe modernization and workload
optimization and is extensively knowledgeable about Db2z over system, administration, data
replication, and performance categories. Mahesh graduated 1st in class with a Master’s
degree in Computer Applications from Bharathidasan University in India.
Rajesh Sambandhan is a software engineer at Rocket Software, Inc., and has been in the
Information Technology industry for more than 20 years. He primarily worked on the Java
stack, databases, and ODBC/JDBC driver development. His area of focus has been Java
technologies, test-driven development, application architecture and security, Web stack, and
data science. He is currently leading the development of client components for IBM Data
Virtualization Manager for z/OS.
Coreen Wilson spent nearly 10 years becoming a subject matter expert on the top
cybersecurity frameworks during an era of vast security breaches, malware, and ransomware
promoting the importance of cyber security to the C-suite. For the past two years, Coreen has
been leading product marketing for IBM Z Systems at Rocket Software, Inc., championing
open mainframe transformation through innovative technology, such as OSS/Zowe, ML/AI,
and Data Virtualization.
Jeff Lutzow is a Senior Customer Service Engineer at Rocket Software, Inc. and has been in
the Information Technology industry working on z/OS systems for more than 30 years. He has
worked in application development, database administration, and product management in the
Insurance and Health Care industries. He has worked in support of IBM Data Virtualization
Preface xiii
Manager for z/OS since the product's inception. He is currently leading the services initiative
for IBM Data Virtualization Manager for z/OS.
Find out more about the residency program, browse the residency index, and apply online at:
ibm.com/redbooks/residencies.html
Comments welcome
Your comments are important to us!
We want our books to be as helpful as possible. Send us your comments about this book or
other IBM Redbooks publications in one of the following ways:
Use the online Contact us review Redbooks form found at:
ibm.com/redbooks
Send your comments in an email to:
[email protected]
Mail your comments to:
IBM Corporation, IBM Redbooks
Dept. HYTD Mail Station P099
2455 South Road
Poughkeepsie, NY 12601-5400
Chapter 1. Introduction
This chapter introduces key concepts and value propositions for data virtualization for
mainframe data sets. The chapter espouses the benefits of the use of IBM Data Virtualization
Manager for z/OS (DVM for z/OS or just DVM) over various topologies, details key
differentiators around cost savings and performance, along how this technology drives the
what, how, and why conversation.
IBM recognizes the importance of strengthening the partnership between IT and the
business. The optimal position for today’s IT organization is to be a full-fledged partner with
lines of business to drive revenue and deliver on an organization’s strategy. Therefore, IT
organizations must change and transform along with their systems.
Many organizations say they want to modernize and transform, but the transformation is not
only an end goal, it is a journey. To transform requires agility, which is a continuous process.
You need technology that can continuously adapt to new business requirements and IT
methods.
IBM Z has proven to be adaptable throughout its history and continues to introduce
capabilities that adapt, respond, and lead, as new needs arise. New capabilities that are
delivered on IBM Z integrate with IBM Cloud Pak for Data, IBM’s strategic platform for Data
and AI.
IBM Cloud Pak for Data is a fully integrated data and AI platform that modernizes how
businesses collect, organize, and analyze data and infuse AI throughout their organizations.
Integration between IBM Z and IBM Cloud Pak for Data readily takes advantage of your IBM Z
data and resources.
Your IBM Z infrastructure investment holds significant value and can help your organization
deliver continued business differentiation. Some might say that IBM Z and hybrid cloud is an
unconventional combination. However, to paraphrase John Maynard Keynes to succeed,
sometimes it is necessary to do so unconventionally rather than be like everyone else and
perform conventionally. IBM Z understands this and offers the differentiated organization a
differentiated platform.
This book discusses how IBM Z technology can complement and extend your existing and
future hybrid cloud environment.
The growth in corporate transactional data and sources, Hadoop, IoT data, the acceptance of
cloud as an enterprise data store, and the availability and utility of public cloud services
providing unique data are just some of the reasons that contribute to the continuing
exponential expansion of data volume and type. With data being generated and stored
everywhere, it is impossible to centralize it all and maintain its accuracy. Therefore, it is
imperative that data must be accessed where it is stored or originates.
Within your enterprise infrastructures, you likely developed several to many large data
repositories across several different vendor technologies. Each data repository features its
own unique capabilities and value.
Several years ago, the term data gravity was offered as an analogy to the concept of gravity
in physics. Data gravity implies that data has mass, which attracts other objects as physical
objects do. The more data there is, the greater the mass, the more likely it is to attract other
objects, such as applications, services, and other data.
Although the cloud often uses a great deal of mind share, most essential corporate data is still
generated behind the firewall. That data is typically transactional data, corporate treasure;
therefore, data gravity applies to the typical organization’s enterprise transactional servers.
This is where the mainframe enters this expansive data story.
The mainframe is core to any organization’s enterprise infrastructure. Although we think that
the mainframe services only the largest organizations, many smaller organizations benefit
from its security, resiliency, low per-transaction cost, virtualization, high performance, and
unique value. For many of these organizations, the mainframe is their primary transactional
platform.
According to IBM studies, 70 - 80% of all data originates behind the firewall and much of that
originates on IBM Z. For many organizations, their transactional systems stayed largely
unaltered for decades.
Upgrades focused on the latest versions of software to stay up to date in line with support
requirements, fine-tuning of applications, and small changes to applications to keep up with
the times. Government agencies, banks, insurance companies, and financial services
organizations stayed with what served them well. Why change if something works? Today,
organizations are under pressure to better serve their customers and bring new value to their
constituents.
It is on the mainframe where unique data sources, transactional applications, data gravity,
and modernization combine to offer an incredible opportunity for DVM for z/OS. DVM for z/OS
offers organizations the potential to modernize the way they develop applications, simplify
access to traditional non-relational IBM Z data sources, provide access to an extensive
number of data sources (more than 35), and move from the 20th to the 21st century.
Wholesale application rewrites are generally not feasible, nor do they always bring significant
differentiation from established technology. When an organization invests in differentiated
business processes that are built on differentiated applications, it is to its advantage to
continue to use those applications and the data that is stored in them. DVM for z/OS facilitates
modernization efforts, which allows an organization to simplify access, reduce cost, and
modernize interfaces.
This book focuses on the technology and capabilities that are offered by DVM for z/OS that
make modernization easier. This book is somewhere between a getting started guide and a
road map to get you where you want to go. You learn much about what DVM for z/OS can do
for you and how you can do it.
Chapter 1. Introduction 3
Data from established applications became the lifeblood of new analytics, cloud, and mobile
applications. Access to real-time transactional IBM Z data is quickly becoming a
differentiating factor in support of these new applications:
Analytics
According to market-leading analysts, insight-driven organizations are growing faster than
their competitors, better-retaining customers and delivering significantly better returns on
their investments. Insight-driven organizations use analytics to embed insight within
business processes and software.
Cloud
Cloud approaches to development, maybe more than the cloud service providers, are
offering new techniques for application development, such as containerization and
microservices. Organizations that use these new techniques are finding they offer better
flexibility as compared to traditional monolithic, waterfall approaches to development.
Cloud development techniques that lead to greater agility are an underlying foundation of
disruption that the industry labeled digital transformation.
Mobile
Although mobile has been around for some time, it is finally living up to its promise through
the combination of analytics and cloud. Analytics are allowing organizations to drive
greater value from their customer’s mobile use. Cloud is allowing organizations limitless
capacity to process data and use digital, momentary opportunities and provide those
opportunities through their customer’s mobile devices. Mobile devices largely became the
de-facto interface with which customers interact with providers. A significant percentage of
IBM Z workloads is driven by mobile applications, such as online banking and online
purchases.
Modernization and digital transformation
Analytics, cloud, and mobile are combining to completely rewrite industries and the rules
of customer engagement. Digital transformation is offering unprecedented opportunities
for organizations to improve customer relationships, acquire new customers, and grow
wallet share. Organizations are innovating with new ways to take advantage of their
enterprise data assets and engage with customers.
Data, its use, and the insights it provides feature a shelf-life. Some decisions require the most
current data and real-time insight (at the point of interaction or transaction), which improves
decision making in areas, such as fraud detection, up-sell and cross-sell efforts, and
supporting real-time opportunities, such as digital moments.
Completely separating the systems of record from modern systems of engagement can result
in customer defections, increased risk, and lost opportunity for improved operational
productivity. We all have been frustrated by customer-facing applications that we know do not
reflect an organization’s current inventory or the status of a reservation.
Digital opportunities are momentary. They must be based on the exact real inventory status to
make offers to customers. This approach is different than traditional approaches that use
extensive data movement. Doing nothing (that is, merely maintaining these existing
approaches) opens the door for the competition to disrupt your business and attract your
customers.
New business with increased data volumes leads to higher resource usage and exacerbates
an already challenging issue. Throwing hardware at the problem just pushes the problem off
to another day. A change in approach is needed.
You can access data at its source; therefore, critical data-driven decisions can be made
before an interaction or transaction completes and your customer abandons their interaction
with your organization. Your architectural strategy can ensure access to data across platforms
and multiple clouds, whether the data is structured or unstructured.
Chapter 1. Introduction 5
1.6 Resolving the data latency gap through data virtualization
Data virtualization is emerging as an exciting, cost-effective, substitute for and augmentation
to traditional data collection (incremental copy, data movement, and ETL). With data
virtualization, you can access data where it originates to reduce the time and resources that
are used to combine data from multiple systems. Less time and resources can translate into
savings. The use of data virtualization technology can support greater flexibility and agility,
which is core to digital transformation.
Developers can readily combine IBM Z data with other enterprise data sources to gain
real-time insight, accelerate deployment of traditional mainframe and new web and mobile
applications, modernize the enterprise, and take advantage of today’s API economy.
DVM for z/OS also supports data access and movement. As with many technologies, the best
approach depends upon the specific needs. DVM for z/OS can be considered part of a larger
holistic approach to data delivery.
Deployable in just hours and easily extendable with a growing array of IBM and third-party
microservices, IBM Cloud Pak® for Data runs across any cloud, which enables organizations
to more easily integrate their analytics and applications to speed innovation.
IBM Cloud Pak for Data lowers your total cost of ownership, accelerates innovation that is
based on open-source technologies, and fully supports multi-cloud environments, such as
Amazon Web Services (AWS), Azure, Google Cloud, IBM Cloud, and private clouds.
When the data on which you are building your machine learning models originates in
relational IBM Z data sources (Db2 for z/OS) and traditional non-relational IBM Z data
sources (such as IMS, IBM MQ, and VSAM), IBM Cloud Pak for Data provides integrated
connectivity through DVM for z/OS. This connectivity significantly simplifies the development
of analytics applications that are driven from IBM Z data, which allows developers and data
scientists to readily access complex data structures by way of SQL.
Applications that use traditional, scheduled batch programs to update transactional data can
be refactored into modern applications that can access and update IBM Z data by using
modern APIs that are supported by DVM for z/OS. Because DVM for z/OS runs almost
exclusively on readily available IBM Z Integrated Information Processors (zIIP), it does not
use general processor capacity. It also might significantly reduce mainframe costs that are
associated with ETL.
DVM for z/OS can virtualize established data sources, such as virtual storage access method
(VSAM), adaptable database system (ADABAS), IBM IMS/ESA® Database Manager, IBM
Db2 for z/OS, and IBM System Management Facility (SMF). Its ability to federate these
sources with virtually any other data brings the power of IBM Z essentially to any application,
mobile, analytic, or cloud. It does so with minimal extra processing costs and without the need
for IBM Z skills or more coding.
Reducing complexity for accessing data applications implies less time to implement new
engagement applications while also accessing real-time data. This means fewer unique skill
sets are required to access complex established data structures. Complex application
programming can now be done with simple SQL and NoSQL access. Updating or building
modern applications by using IBM Z data can produce elastic, interconnected, and more
secure applications to deliver a competitive advantage.
DVM for z/OS is optimized for the hardware it runs on and takes advantage of the new
instruction sets available with each new IBM Z hardware platform. As IBM Z offers new
hardware capabilities, DVM for z/OS inherits those advantages.
Chapter 1. Introduction 7
1.10 Why and when should you consider DVM for z/OS
Any organization with data on IBM Z, whatever the data type, can benefit from DVM for z/OS.
DVM for z/OS allows you to:
Combine and integrate non-relational and relational data, integrate IBM Z and non-IBM Z
data, and incorporate unstructured data with structured data.
Provide SQL access to non-relational data.
Modernize mainframe applications and enhance non-mainframe applications with
mainframe data.
When your valuable data originates on IBM Z and moving it off platform exposes you to cost,
latency, or risk, the use of the processing on IBM Z can be your best alternative. IBM DVM for
z/OS helps you access your data where it originates.
DVM for z/OS is different from other so-called virtualization or replication tools because
specialized training or expert database skills are not needed. You can work with data
structures that use virtual tables and virtual views that are familiar to you, and provide users
and applications read/write access to IBM z/OS and enterprise data sources in real time.
DVM for z/OS enables organizations to access their mainframe data through virtual,
integrated views without the need to move, replicate, or transform it, which saves time and
expense.
This chapter describes the fundamental architecture of the IBM Data Virtualization Manager
for z/OS (DVM for z/OS or just DVM) technology and includes the following topics:
2.1, “Reference architecture for DVM for z/OS” on page 10
2.2, “Technical components” on page 10
2.3, “SQL engine and query optimization” on page 12
2.4, “Metadata repository” on page 14
2.5, “Parallel processing through MapReduce” on page 16
2.6, “z/OS resident optimization” on page 17
2.7, “zIIP eligibility and data compression” on page 18
2.8, “DVM Studio” on page 19
2.9, “Integrated DRDA Facility” on page 21
2.10, “DVM endpoint connections” on page 23
2.11, “Summary” on page 28
The DVM server supports IBM-supported hardware ranging from z196 to the latest IBM
models, running IBM z/OS v1.13 or later.
The technology supports traditional database applications, such as Db2 for z/OS, IMS, IDMS,
and ADABAS. Also, typical mainframe file systems, such as sequential files, ZFS, VSAM files,
log-stream, and SMF also can be accessed.
DVM reduces overall mainframe processing usage and costs by redirecting processing that is
otherwise meant for GPPs to zIIPs. DVM provides comprehensive, consumable data that can
be readily accessible by any application or business intelligence tools to address consumer
demand and stay ahead of the competition.
Users and applications have read/write access to IBM Z data in place, without moving or
replicate the data. It performs these tasks at high speed, without more processing costs. By
unlocking IBM Z data that uses popular, industry-standard APIs, you save time and money.
Developers can readily combine IBM Z data with other enterprise data sources to gain
real-time insight, and accelerate deployment of traditional mainframe, and modern mobile
applications.
These data consumers connect to the DVM server through APIs that use JDBC, ODBC,
DRDA drivers over available network ports. However, the more common web or mobile
interface applications connect by using IBM z/OS Connect Enterprise Edition (zCEE) that use
RESTful APIs.
The right side of Figure 2-1 represents common z/OS and non-z/OS data sources, both
structured and semi-structured. After data sets are virtualized, the DVM server supports the
joining of supported data sources as referenced in the IBM documentation for DVM for z/OS.
As a virtual table or virtual view is materialized, the SQL engine analyzes the best access
path to fetch data by using proprietary parallelism algorithms that are built into the product.
The SQL engine then applies filters and functions against retrieved data for the SQL
statement issued.
When a query is received by the SQL engine, the SQL statement is parsed as part of
PREPARE processing. During the parsing operation, individual subtables that are referenced
in the query are identified and associated virtual table definitions are consulted.
For data sources with indexes, the SQL is examined to see whether index key fields are used
in the predicate. The use of key fields can reduce the amount of data that is fetched and can
be used to optimize joining data with other virtual tables. If MapReduce is used, retrieval of
each data is apportioned out to separate threads, and when possible, WHERE predicates are
pushed down to MapReduce threads to limit the total amount of data that is fetched.
Predicate PUSHDOWN is an optimization technique that can drastically reduce query and
processing time by filtering data earlier within data access. Depending on the processing
framework, predicate PUSHDOWNs can optimize your query by performing tasks (such as
filtering data before it is transferred over the network) as part of pre-load into memory, or by
skipping the READ of entire files or chunks of files.
The DVM server requires statistics from the underlying data source to effectively perform
predicate PUSHDOWN.
For deletes, the application must address data integrity and references by making sure other
identified records exist. Otherwise, databases can support referential integrity between
tables.
Db2 for z/OS is designed to manage its own referential integrity by using DDL statements to
define primary and foreign keys and rules. When these tables are virtualized, the DVM server
sends DML statements to the Db2 subsystem for processing when the Db2 Direct-access
method is not used. Db2 referential integrity rules are maintained for Inserts, Updates, and
Deletes.
Figure 2-2 shows the I/O relationship between the DVM SQL engine and cached data. VPD is
well suited for data sets that are frequently accessed, but are not dynamically changing
throughout the day.
VPD also allows multiple requests to run with asymmetrical parallelism, separately tuning the
number of I/O threads and the number of client or SQL engine threads. When I/O is limited to
a single task, VPD allows parallelism in SQL as listed in Table 2-1 on page 14.
MR=N 1 1 25.234
MR=Y 1 6 24.488
MRCC 6 6 8.954
These results demonstrate how a VPD data cache can greatly improve execution time for
SQL over increasing concurrent usage. Instantiating the VPD enables a readily accessible
cache of data and avoids subsequent and concurrent access requests to disk. This reduces
the I/O processing for the system, improves latency, and speeds up the query performance.
VPD cache can be refreshed daily or as scheduled.
The first query against the VPD (see Example 2-1) creates the group and I/O immediately
populates the cache. An initial I/O is performed once and buffered in one or more large, 64-bit
memory objects. If multiple groups comprise a VPD, they all share the buffered results. Each
VPD request can specify its own degree of parallelism by using the MapReduceClient (MRC)
and MapReduceClientCount (MRCC) configuration parameters with the JDBC driver.
VSAM data sets can include multiple occurrences of a value. For example, a single record
within a VSAM file that describes billing information can contain the last years’ worth of
payments. A relational structure is represented as two tables within a normalized design or a
single table with multiple records that represent a single occurrence of each record for one
occurrence within the VSAM file.
To access data, you must first virtualize the data as a table by defining a virtual table as a
container for all the attributes associated with the data source. For example, when an SQL
statement is issued against a VSAM record.
The DVM server processes data in real time, which avoids creating copies of data and
supports transactions that write back to the original data sources, whether online or offline,
on-premises, or in the cloud. Data is not cached, nor does DVM require a specific API
schema; therefore, organizations have flexibility regarding API naming conventions.
The following metadata objects are stored as members in the map data set:
Virtual tables (VSAM, IMS, Db2, Adabas, IDMS, sequential, and so on)
Virtual views
Application artifacts (IMS DBD, IMS PSB, COBOL copybooks, PL/I structure, and
assembler DSECTs)
Stored Procedures
Remote target systems
Virtual source Libraries
Web services
The metadata repository is stored as members within IBM Z Partitioned data sets (PDSs).
Metadata maps are loaded from data set members and cached in memory each time the
DVM data server is started.
The following DVM catalog tables can be queried and are valuable for understanding the
relationships between entities, which are useful in joining tables:
SQLENG.TABLES
SQLENG.COLUMNS
SQLENG.COLUMPRIVS
SQLENG.PRIMARYKEYS
SQLENG.PROCEDURES
SQLENG.STATISTICS
SQLENG.TABLEPRIVS
SQLENG.FOREIGNKEYS
SQLENG.SPECIALCOLS
SQLENG.TABLES
The DVM server uses PREDICATE PUSHDOWN and index keys where possible. When joins
are used, DVM pushes down the appropriate filters that apply separately to each of the
disparate data sources that are involved in the join.
With each new generation of IBM Z hardware, DVM uses instruction-level performance
improvements automatically. Upon starting a DVM task, DVM loads the optimized modules for
the generation of the IBM Z processor in service. DVM is purposely designed to reduce
Supervisor Calls (SVCs) and provides up to 99% zIIP-eligibility.
Although not Java-based, the DVM server runs almost entirely in Enclave SRB mode, where
resources that are used to process workloads can be accounted to the transaction, rather
than to the address space in which the transaction runs.
DVM can provide performance benefits in reading large data sets by circumventing Db2 and
IMS Subsystems. DVM also can access and read the underlying VSAM data sets that are
used by IMS and Db2 for z/OS. This ability reduces the total cost of ownership for the solution
and improves performance for bulk-load operations. As a Z-resident software solution, the
DVM server provides the following significant optimizations:
Dynamic parallelism against large z/OS data sets: logical partitioning of Flat, VSAM IMS,
Db2 Log Streams, Adabas, IDMS, and so on.
Use of:
– Pageable Large Frames for DAT reduction
– Single Instruction Multiple Data SIMD
– Optimized AIOCB TCP/IP APIs
– Shared Memory Objects for inter-process communication, which significantly reduces
data movement
High-Speed Tracing facility that is built on Data In Virtual (DIV) services.
An ACEE cache that is tied into ENF 71, which avoids accessing the RACF database and
easily keeps the cache in sync.
Unique use of zEDC for improvements in network I/O compression.
Pre-built infrastructure for DVM to CICS interfaces, which eliminating five out of the six API
calls that are required to use EXCI.
Automatically “compiled” DVM REXX to run REXX as zIIP-eligible and in cross-memory
mode. However, HLLs provide a minimum opportunity for zIIP eligibility. DVM REXX is
representative of this poor zIIP eligibility.
zIIP specialty engines deliver higher performance and lower cost than general purpose
processors (GPPs), which are not typically fully used. ZIIPs can handle specialized
workloads, such as large data queries over Db2, Java, and Linux, to redirect processing from
GPPs.
The DVM server automatically detects the presence of zIIP engines and transitions qualifying
workloads from the GPP to a zIIP engine. The result is reduced mainframe processing usage
and cost.
Also, the DVM server takes full advantage of IBM’s zEnterprise® Data Compression (zEDC)
in z/OS 2.1, along with the Integrated Accelerator for zEnterprise Data Compression. In
recent models of IBM Z hardware, data compression is performed by the integrated
compression co-processor, which allows sharing large amounts of compressed data with the
DVM server. This ability reduces data transfer latency, improves CPU usage, and saves disk
space.
Figure 2-6 shows the client connection between DVM Studio and the DVM server.
DVM Studio is distributed with a Java Database Connectivity (JDBC) JVM 1.4 or higher. DVM
Studio can connect to the DVM server and use the JDBC driver to connect to the server or by
using an HTTP call.
DVM Studio also offers an application development environment that simplifies application
development through an automated code generation utility and supports modern
programming languages. It provides views, wizards, and editors with which you can build,
develop, and transform mainframe applications into web services and components.
System programmers and DBAs typically collaborate to identify data sets on the mainframe
and create schema-related artifacts that describe underlying data as a first step to the use of
the Studio. After the artifacts are available and suitably describe the associated descriptors
for data types, column descriptions, and so on, they can be easily mapped and provisioned
for use by DVM Studio.
After underlying data sets, such as databases, VSAM files, system files, and tapes, are
discoverable through DVM Studio, DBAs, and developers can define virtual tables and views
for more productive use. Developers can use DVM Studio as a complementary IDE-like
framework to their primary source control environments by creating and publishing a web
service or generating development code by using SQL.
DVM Studio features a built-in code generator capability that is perfect for creating code
snippets in your favorite programming language. The code generator produces code snippets
in Python, R Studio, Spark, Scala, Java, Jupyter Notebooks, and more.
You can generate and publish web services directly from DVM Studio, or automatically
generate Db2 user-defined table functions (UDTFs) as part of a Virtual Data Facility. This
technique uses the Db2 for z/OS subsystem as an information hub and redirects applications
through Db2 for access to other mainframe and non-mainframe data sources.
IBM’s Db2 distributed databases offer a built-in data federation engine that uses nicknames or
remote tables in a similar manner. Figure 2-8 shows the Virtual Table wizard and SQL editor.
Figure 2-8 DVM Studio Virtual Table wizard and SQL editor
The new IDF feature allows a DVM server to participate as an endpoint in this kind of
multi-homed configuration. Whenever SQL is run in Db2 and a three-part table name
designates an IDF endpoint, the SQL is sent to the DVM server for execution. Results are
returned to Db2z as though it were a local table.
IDF allows data sources to be accessed by local clients running on a specific z/OS LPAR or
by participating in a sysplex environment on a different z/OS LPAR or sysplex.
Imagine your organization has a data center in North America and another in Australia, each
running IMS, and each having its own inventory databases. To reconcile their inventory
systems, it requires a manual process.
In another scenario, a data source exists on LPAR PRD2, but it is not on a shared disk or
available for access on all your LPARS. Most of the users and applications are running on
LPAR PRD1 and include requirements to access the data because they want to join with Db2,
which is running on PRD1. Users on PRD1 or PRD2 can now retrieve data from Db2 and join
it with virtualized data on PRD2 by using IDF.
DVM adds it to the metadata on their server. IDF peer-to-peer makes it appear as though all
of the data is local and available no matter where it is stored. Instead, you can run SQL to
perform join operations, rather than copying the data and writing Cobol or PL/I programs to do
the reconciliation.
After the Db2 subsystems are configured for a DRDA connection, DVM supports a
full-featured implementation in which your Db2 applications have transactional access to all
participating data sources. IDF uses a three-part naming convention to map to the remote
data objects, whereby it identifies data based on location.
Within the same application, you can simultaneously update many different data sources
without needing to direct applications individually to each host.
2.10.1 Drivers
Any C, C++, or Java application can access mainframe data with the DVM SQL engine and its
ODBC and JDBC drivers. The communication between the driver and the DVM server is a
proprietary communication buffer protocol (CMBU) or communication buffer.
Two ports are dedicated to handling these requests with two different levels of security. The
orange connector depicts an SSL-enabled connection method to a port that is configured with
a TLS encryption protocol; the blue connector depicts a non-SSL connection method to an
unencrypted port, as shown in Figure 2-11 on page 24. IBM recommends the use of secure
ports. These ODBC and JDBC drivers also are included in the IBM Cloud Pack for Data as
part of the built-in connector framework that is used to define connections with remote data
sources.
Db2 LUW
Data Mapping
Facility (DMF) RDBMS
DB
Parser JDBC Gateway Server Driver 1 Non-DRDA
1
(DRDA AS) J
Postgres
DRDA SSL D Driver 2 DB Oracle
DRDA AR JDBC Gateway 2
B Hive
(JGATE) Administrator
*zIIP-eligible DRDA Non-SSL Console C Driver n DB
SQL Server
MySQL
(Currently HTTP) n
...
Browser https
The ODBC driver can be used to connect many C and C++ applications to the DVM server.
Many programming languages are available for use with the ODBC protocol, such as Python.
Java applications can use the JDBC driver to connect to the DVM server. Also, specific
languages, such as Python, can make use of our code to connect and run a request.
The parser is a component of the DVM server and can be started through Job Control
Language (JCL) batch jobs. A version of the parser also is distributed with DVM Studio
installation (mainly targeting Windows, but potentially UNIX, Linux, and Mac platforms).
DVM Studio distributed version of the Parser typically is used to generate an internal XML
representation of the source document. It then uses this information through its various
wizards to ultimately generate the DVM metadata for the scenario in question (that is, the
Cobol copybook layout is transformed into DVM metadata format).
The parser is used to read the Source metadata and transform it into the DVM metadata
format. Some of the source metadata types that the DVM server can accept are listed in
Table 2-2.
Table 2-2 Artifacts that is required to create virtual tables by data source
Data source Access method Source metadata Physical file
The DS-Client API supports the ability to connect COBOL, PL/1, and Natural applications to
DVM’s virtualized data. The DS-Client requires modifications to the application and
connection configuration for the AVZCLIEN subroutine.
OPEN creates a session with the DVM server and obtains shared memory that is used to
send the SQL result sets to the application program. The SEND subroutine call is issued
following an OPEN subroutine call to send the SQL request to the server. A RECV subroutine
call is issued to retrieve the SQL results from the shared memory object created during the
OPEN subroutine call. After the data is retrieved, a CLOSE subroutine call can be issued,
which ends the session with the DVM server and releases resources.
The z/OS Connect server has a DVM IBM WebSphere® Optimized Local Adapter (WOLA)
service provider, which is an API that allows DVM to communicate, as shown in Figure 2-13.
Figure 2-13 z/OS Connect Enterprise Edition and DVM WebSphere Optimized Local Adapter
Any virtualized data on the mainframe can be accessed through REST calls or through a web
browser with the z/OS Connect Enterprise Edition server. The z/OS Connect server is
deployed on the mainframe, separate from DVM, and listens to HTTP or HTTPS calls from the
browser, or any HTTP clients.
SSL can be used to secure ODBC, JDBC, and HTTP network communications between the
DVM server and DVM Studio. For HTTP, web services can be defined to support SSL by using
the default setting of TLS 1.2.
For role-based authorization, users can access the DVM server by using AES, DVM
domain-based, Microsoft Transaction Server, and Kerberos. The default authentication has a
proprietary encryption mechanism when the login request is sent to the Host.
AES uses the Diffie-Hellman key exchange, and domain-based access verifies that the user
is authenticated by a domain-based system. Windows platforms require that the user first logs
on to an NT domain.
For the UNIX platforms, the local machine must be a member of a NIS domain. The password
database that is used to authenticate the user must be NIS-mapped. Table 2-3 lists client
endpoint characteristics and configuration information.
2.11 Summary
Because of its unique architecture, DVM supports real-time data virtualization technology that
enables seamless access to mainframe relational and non-relational data for use with data
analytics, big data, mobile, and web solutions.
DVM for z/OS is the only technology in the market that can be used by any client application
program, loading process, or mainframe program with the possibility to read, update, or
delete any data structure depending on the underlying data source.
All underlying data structures are abstracted from the user through the common usage
patterns:
Create virtual and integrated views of data to access mainframe data without having to
move, replicate, or transform your source data.
Enable access, update, and join functions on your mainframe data with other enterprise
data with modern APIs in real time.
Mask your mainframe data implementations from application developers to safely expose
mainframe assets as APIs into mobile and cloud applications. Also, developers can use
ANSI SQL functions to retrieve any data in mainframe and LUW environments.
Within the batch job that is called AVZDFDIV, you can change the product high-level qualifier
and choose a four character server subsystem name that is unique for this server. The
second and third character must be VZ, and the first and fourth characters can be anything
that you decide. The example that is shown in Figure 3-1 is named AVZS.
Change HLQ1 to the HLQ of the product data sets (original SMP/e target), and change HLQ2
to the same value that you used in the AVZDFDIV member to denote the HLQ where the
global variable and trace datasets are stored. This location, HLQ2 (can be server specific), is
used to store the configuration datasets for each DVM SSID you define. For example, HLQ1
can be set to our SMP/e target lib example of DVM110, and HLQ2 can be set to DVM.AVZ1,
so that the configuration that is specific to SSID AVZ1 is separated from the original SMP/e
product lib DVM110
Change HLQ1 to the high-level qualifier of the product data sets and change HLQ2 to a value
to create the map file data set with.
Change AVZS to a wanted server subsystem name, (keeping in mind the xVZx rule). Anyone
that uses this product requires UPDATE authority to this map data set so that maps can be
created and then stored in the user-was defined map file.
Tip: Users need UPDATE authority to the MAP data sets that are created in this job.
Run the following suitable job for your security application from within hlq.SAVZCNTL:
AVZRAVDB: IBM Resource Access Control Facility (RACF) security
AVZA2VDB: CA AFC2 security
AVZTSVDB: CA top secret security
Figure 3-3 shows an example of the settings for RACF. Change WLMUSERID to the user ID
you want to use to allow AVZ access to the WLM Policy definitions. This same user ID is used
in the HLQ.SAVZEXEC.xxxxIN00 in the WLM parameter definitions. This permit can be removed
if a user ID that includes the correct permissions is used.
In our example, we defined a new admin user ID of DVMADM, with its own OMVS segment.
Change AVZS to your AVZ subsystem name (the default is AVZS for a new installation). We
used AVZ1 to designate the DVM SSID we configured.
Also, the started task user ID requires READ, EXECUTE, READ, or READ/WRITE/UPDATE
to the data sets that are listed in Table 3-1.
Table 3-1 Product data sets and their specific access privilege requirements
Data definition Access Data set name
A best practice is to configure the DVM server to use a medium to high performing WLM
velocity goal, as its default service class. Complete the following steps:
1. Create a WLM classification rule:
a. From the WLM ISPF application, select option 6 (Classification Rules).
b. Select option 1 to create a rule.
c. Set the Subsystem Type to AVZ and provide an optional description.
d. When a default service class name does not exist, select option 4(Service Classes)
from the WLM menu and press Enter and PF3 to save.
2. Define the DVM server started task AVZ1PROC to a WLM service class:
a. From the WLM ISPF application, select option 6 (Classification Rules).
b. For STC WLM-subsystem type, select Modify.
c. Add an entry for AVZ1PROC.
d. Provide a suitable service class for the started task and define it relative to workload
management objectives.
e. Add a unique report class for the started task.
3. Activate the new WLM Policy definition.
3. From SDSF, run the APF command from the main menu to see the list of APF authorized
datasets (see Figure 3-6).
SQLENGDFLTCCSID is the default CCSID to use when processing data by way of the
server for non-Db2 data
SQLENGDBCSLTFMT is the default DBCS format to use when translating a single-byte
code page to double-byte code page. Letters in single-byte code page are translated to full
width DBCS characters.
When no runtime libraries exist, SHLQ2 and SHLQ are recommended to have the same
value.
Figure 3-10 Customize the server initialization member for TCP/IP ports
Figure 3-11, Figure 3-12, and Figure 3-13 show the initialization member configuration for
DB2 for z/OS, DB2 LUW, and Oracle. A pattern exists for each defined database block with
subtle changes that require database administrators for each data source to get specific
values for the unique parameters for each.
Provide the IMS ID and the IMS SDFSRES library to access your IMS subsystem as a data
source.
It is recommended that you collaborate with your IBM DBA to ensure data mappings and
configuration settings are compatible.
In DVM for z/OS, the high-level qualifier of the target product installation libraries or the
runtime libraries must be defined in the HLQ field.
Ensure that the SYSEXEC DD statement allocates the data set name that contains the
initialization member for your customized data sets (see Figure 3-16).
Figure 3-17 Update SYSEXEC to point to the data set with the initialization member
Ensure that the AVZMAP concatenation contains the user-defined map data set as the first
defined map dataset.
After these changes are made to the SYSEXEC file, start the DVM server for this example by
using the /s AVZJ command.
Complete the following steps to start the ISPF panels by using commands:
1. Edit hlq.SQVZEXEC member AVZ. Then, edit the parameter for your product load library
llib=’hlq.SAVZLOAD’.
2. Start the ISPF application by enter the following command on the ISPF command shell
(see Figure 3-19):
EX ‘hlq.SAVZEXEC(AVZ)’ ‘SUB(AVZS)’
The detailed checklist can be used to assist you in gathering the information that you need to
successfully install and configure the DVM server (see Table 3-2).
Started Task User ID Grant security authority to write to its own data set (SAVZCNTL).
Administrator User ID Grant security authority to write the SAVZCNTL and SACZMAP data sets.
Started Task User ID User ID assigned to aVZ1PROC requires an OMVS segment defined.
Started Task name Started Task User ID needs to be assigned or created and assigned.
User ID User ID requires proper authority to run BINDS from the Studio.
Distributed RDBMS User ID and password to read data, and the location, port, and IP.
Subsystem name Assign the DVM server an unused subsystem and ID by way of TCz.
Started Task User ID For RACF, a class must be defined to a descriptor table and system IPL’d.
Db2 for z/OS RACF PassTickets must be created per the user guide
Library Eclipse plug-in Users must update their authority to the user map data
sets specified in the AVZ1 started task.
Port Obtain a Web service port number that the Eclipse plug-in can use to
communicate.
Ports If TCP/IP ports are protected, the AVZ1 subsystem name needs to have
proper access NOT the AVZ1PROC Started Task.
User During installation of DVM Studio Eclipse plug-in, the user must be signed
on to DVM Studio as Administrator.
The benefits are faster access and run time, and the ability to more readily offload general
processing to zIIP specialty engines, if available. Clients access the DVM server through
ODBC/JDBC, HTTP/HTTPS, DRDA, including RRSAF and CAF for Db2 z/OS (see
Figure 4-1).
For more information about installing and configuring the DVM server, see IBM
Documentation.
4.3.1 ADABAS
Adabas is designed to support thousands of users in parallel with subsecond response times.
Access to Adabas can be from Natural, Software AG’s 4RL dev IDE, ODBC/JDBC, and
embedded SQL. Adabas supports up to 65,535 DBs with each supporting up to 5,000 files,
where each file can contain up to 4 trillion records, each with up to 926 fields. DVM for z/OS
supports Adabas 8.x or later and the DVM server supports long names for fields, Multi-file
joins optimized connection modes, Natural subsystem security, and dynamic switching
between TCB and SRB mode for improved parallelism and zIIP-eligibility (Figure 4-2). The
DVM server supports ET/BT transaction-based commands, MU and PE file structures, and
Natural DATE and TIME formats.
Adabas can run a single Adabas command that retrieves multiple rows (multi-fetch). When a
SELECT statement runs within the DVM server, the request can be split into multiple and
separate READ requests when MapReduce is dynamically activated and returns a list of
record IDs (ISN), as shown in Figure 4-2.
Virtualizing Adabas
Typically, any older data source for virtualizing DVM uses the physical file and a COBOL or
PL/1 copybook to map the meta-data into DVM format (DVM Catalog tables). However, in the
case of Adabas, this procedure is slightly different. Adabas uses a data definition module
(DDM) to create a view of the Adabas file, manage long column names, or limit the view to a
subset of defined fields. The DDM represents the metadata for the Adabas data, which is
analogous to catalog tables for a relational database.
The virtualization procedure in DVM for z/OS for Adabas is a manual procedure and is run by
using JCL (which is provided with the DVM server) or can be used by using DVM Studio.
The DVM server also works with Multi-value (MU) fields in an Adabas record and periodic
groups (PE), which are repeating groups in an Adabas record. Both multi-value field and
periodic groups are limited to 191 occurrences and a maximum fetch of 64 K occurrences. If
Adabas applications run a delete, the Adabas data set collapses the array of data by
removing the deleted record and reassigning the next record in its place.
When a virtual table is flattened, each multi-value occurrence becomes a column. When the
table is not flattened, each multi-value field is written its own subtable with an index, parent
key, and base key (see Figure 4-4).
When working with periodic groups, one level of multi-value (MU) fields can be inside of a PE,
to make a 3-D array. Deleting an occurrence does not collapse the array. When the virtual
table is flattened, each field in the PE is a column. When the virtual table is not flattened, the
PE is a subtable with a group of columns with an index and parent key.
The DVM server takes advantage of Adabas v8 multi-buffers and Adabas 64-bit storage
through multiple fetches of records for better performance and reduced CPU. Depending on
the type of transaction, the size of the format buffer and result-set (record buffer), Adabas
manages the workload based on the ADARUN parameter settings that are listed in Table 4-3.
LU All user buffers (format, record, LU represents all buffers that might be required
search, value, and ISN). for any Adabas command:
Recommended value of Increase this value to improve performance
1024000. and ability to handle large PE groups.
Minimum value of 64 K.
Recommend 1024 K.
NAB The number of attached buffers Increase this value with corresponding
to be used. Recommended increases in LU.
value of 10000.
LWP The size of the Adabas work Increase this value with corresponding
pool. Recommended value of increases in LU.
3,500,000.
NISNHQ The maximum number of Typically one quarter of the NH HOLD queue
records that can be placed in size. Important for large updates; for example,
HOLD status at the same time up to and exceeding 12000.
by one user.
NH HOLD queue element (HQE) This setting is required for each record (ISN)
placed in HOLD status. This value is important
for large updates; for example, up to and
exceeding 50000.
LBP The maximum size of the Monitor Adabas shutdown stats to size this
Adabas buffer pool. value for performance; for example,
1,200,000,000.
NTS The number of user threads Typically, corresponds to the number of General
used during the Adabas Processors + 1.
session.
DVM Studio provides an option for compiling the generated natural program outside of the
mainframe. After virtual tables are defined for an Adabas data set, by right-clicking the Virtual
Tables section and selecting Generate Query with *, the administrator can quickly generate
code that can be used by a client application to access the data set.
In DVM Studio, select Server Tab → SQL → Data → SSID → Virtual Tables → Generate
Query with * (see Figure 4-5).
For more information about this configuration process, see this web page.
UDTFs are programs that can reach outside of Db2 for z/OS to the operating system or file
system to retrieve data and return it in a relational format. DVM for z/OS can create Db2 for
z/OS UDTFs that point to virtual tables provisioned on the DVM server.
IDF enables DVM to be defined as an application server within Db2 communication database.
The DRDA method allows a higher percentage of the Db2 workload to run in Service Request
Block (SRB) mode and be offloaded to a zIIP specialty engine. Running workloads in SRB
mode lowers the total cost of ownership when compared to RRSAF by reducing the
dependency on z/OS General Purpose processor use (MIPS).
If the z/OS environment uses a zIIP specialty engine, configure the DVM server to access
Db2 for z/OS with the DRDA access method. Before Db2 requests are issued, you must bind
DRDA, RRSAF, or both into packages within each Db2 subsystem. Binding both access
methods is recommended.
Two Db2 for z/OS data access constructs are available by the Data Virtualization Manager
server:
Traditional Db2 APIs allows for reading and writing the data, and transactional integrity.
Db2 Direct reads the underlying Db2 VSAM linear data sets directly, without issuing an
SQL statement against Db2 for z/OS. This access method allows read-only access to the
data and provides high performance and bulk data access.
This method can be used when you create virtual tables against Db2 database objects
with DVM Studio. In a controlled environment, the Db2 Direct access was used on a large
z14 configuration to virtualize and facilitate large data pulls that resulted in greater than 5
times improvement in elapsed time when compared to traditional DRDA access. In this
case, the work is 100% zIIP eligible compared to 60% eligible where Db2 uses DRDA
requesters. This access method does not use any Db2 resources (see Figure 4-6).
Figure 4-6 Db2 Direct provides direct access to underlying data without DB2 resources
For more information about configuring access to Db2 for z/OS, see this web page.
Note: ODBA and DBCTL are mutually exclusive. Enable only one of these two methods to
access IMS.
Security is managed on the IMS native data set when IMS Direct is used. The user ID of the
client connection must have the necessary security permissions for reading the IMS database
data sets, as shown in Figure 4-7.
Figure 4-7 IMS Direct is fully zIIP-eligible and faster for direct access to IMS data
When IMS Direct is unavailable, the DVM server uses the DBCTL access method. Statistics
about the IMS database are collected and stored within a metadata repository from which the
SQL engine optimizes the MapReduce process and dynamically determines which is the
most performant method for access based on the SQL query. IMS Direct supports all IMS
database types, except SHISAM and HISAM:
Hierarchical direct access method (HDAM): VSAM and OSAM
Hierarchical indexed direct-access method (HIDAM): VSAM and OSAM
Partitioned HDAM (PHDAM): VSAM and OSAM
IMS Direct supports SELECT Only for bulk data access and low general processor usage.
Multiple IMS subsystems can be accessed by using this method.
ODBA supports SELECT, INSERT, UPDATE, and DELETE and two-phase commit. Multiple
IMS subsystems can be accessed by using this method. When configuring multiple IMS
subsystems, enable DBCTL and IMS Direct or ODBA and IMS Direct.
Note: ODBA and DBCTL are mutually exclusive. Use only one of these two methods to
access IMS for a single DVM server.
The PSB and DBD source members and the copybooks for each IMS segment must exist in
the virtual source libraries that are defined to the server. For more information, see this web
page.
DVM for z/OS provides seamless access to native VSAM data without configuring for SQL
access, other than creating a virtual source library that maps DVM server metadata to the
native data that is on disk that describes the record structure in copybooks. This mapping
helps to correctly read the data. The DVM server supports COBOL, PL/I, and DCSCECT
formatted copybooks.
This section divides this process into steps to help simplify this process into the following
building blocks that are required to virtualize VSAM data with DVM Studio:
A VSAM cluster that represents the VSAM data set, including one or both of data or index
data records. The DVM server requires the name of a valid VSAM cluster as part of the
source library for mapping purposes. No other configuration steps are required for the
DVM server to set up the SQL interface to native VSAM files.
The data set Member name that is included in the virtual source library that maps to the
copybook (record layout) for the underlying data structure residing on disk.
The process involves the one-time creation of a virtual source library by containing metadata
that is needed to correctly access and read VSAM data, followed by the creation of a virtual
table, which allows for SQL access by any number of client applications.
DVM Studio allows a user to create a virtual source library under the Admin folder of the
Server Tab for Source Libraries.
In DVM Studio, select Server Tab → Admin → Source Libraries → Create Virtual
Source Library (see Figure 4-8).
In DVM Studio, select Server Tab → SQL → Data → SSID → Virtual Tables.
Right-clicking the Virtual Tables label opens a Virtual Tables wizard to help define criteria for
access, fields to include in the virtual table, and allows for the ability to validate the virtual
table definition. In this example, it ensures that the VSAM cluster name and VSAM cluster
type match and display the suitable success or failure.
The Virtual Tables wizard prompts you to select the data type; then, it advances to the New
VSAM Virtual Table dialog window for more definitions and requires that the data mapping
library that is defined during the configuration of the DVM server as part of the started task
JCL be selected.
The accessing USER and SERVER must include READ/WRITE permissions to the target
data set, as shown in Figure 4-9.
The Virtual Tables wizard then requests the administrator to select the previously defined
virtual source library that contains copybooks for available data. After the suitable source
library is downloaded and selected, a list of copybook members appears for selection.
Selecting the suitable copybook member that is associated with the VSAM data set allows the
administrator to advance through the wizard and define the table layout when querying the
data, shown in Figure 4-10 on page 59.
If the last field from the source file’s Copybook is required, the Enable End Field Selection
option must be selected, as shown in Figure 4-11.
The virtual table definition must be validated before creation. In this example, the VSAM
cluster name matches the type for the underlying file (KSDS), as shown in Figure 4-12.
In DVM Studio, select Server Tab → SQL → Data → SSID → Virtual Tables →
Generate Query with *. This selection auto-generates a scripted query statement with
details about data set type, retrieved rows, and location of the data. The generated SQL
statement can be modified inline or copied and use as part of application development. The
following SQL output provides a sample view of how the auto-generated SQL looks:
-- Description: Retrieve the result set for OPERLOG_SYSLOG (up to 1000 rows)
-- Tree Location: 10.3.58.61/1200/SQL/Data/AVZS/Virtual Tables/OPERLOG_SYSLOG
-- Remarks: Logstream - SYSPLEX.OPERLOG
SELECT * FROM OPERLOG_SYSLOG WHERE SYSLOG_JOBID = 'AVZS';
-- Description: Retrieve the result set for VSAM_TABLE (up to 1000 rows)
-- Tree Location: 10.3.58.61/1200/SQL/Data/AVZS/Virtual Tables/VSAM_TABLE
-- Remarks: VSAM - FBOR.STAFF.VSAM
SELECT * FROM VSAM)_TABLE LIMIT 1000;
Although other options are available, some are costly from a licensing perspective and require
more capital outlay from an infrastructure standpoint regarding CPU, storage, and memory,
staging environments, and so on. It is for this reason that DVM for z/OS becomes an option
with no data movement and in-place access to the system and operational data.
The DVM server supports over 35 data sources, including SMF, SYSLOG, OPERLOG, and
JOBLOG and can serve in a multi-purpose manner for various use cases.
OPERLOG is a merged, sysplex-wide system message log that is provided by a log stream of
data. SYSLOG contains a partition (LPAR) message log and is an SYSOUT data set that is
produced by JES2 or JES3. DVM for z/OS provides five predefined virtual tables to display
OPERLOG and SYSLOG:
OPERLOG_SYSLOG accesses the SYSPLEX log stream and is defined in the global
variable GLOBAL2.SYSLOG.DEFAULT after the AVZSYSLG rule is enabled
OPERLOG_MDB
OPERLOG_MDB_MDB_CONTROL_OBJECT
OPERLOG_MDB_MDB_TEXT_OBJECT
SYSLOG
DVM Studio can now be used similar to running sample queries on VSAM by selecting
SYSLOG in the virtual tables section of the Server Tab. Figure 4-16 shows the generated
SQL statement and the results.
Figure 4-16 Generated query and results for SYSLOG with DVM Studio
In DVM Studio select: Server Tab → SQL → Data → SSID → Virtual Tables → SYSLOG →
Generate Query with *.
The following query is generated and the output resembles the output that is shown in
Figure 4-16:
-- Description: Retrieve the result set for SYSLOG (up to 1000 rows)
-- Tree Location: 10.3.58.61/1200/SQL/Data/AVZS/Virtual Tables/SYSLOG
-- Remarks: HTTP://10.3.58.61:1201
SELECT * FROM SYSLOG LIMIT 1000;
DVM Studio can now be used similarly to run sample queries on VSAM by selecting
OPERLOG_SYSLOG in the virtual tables section of the Server tab. Figure 4-17 shows the
first 100 rows.
In DVM Studio select: Server tab → SQL → Data → SSID → Virtual Tables →
OPERLOG_SYSLOG → Generate Query with *.
We can verify access to OPERLOG data by issuing the following query, a limit value was
added to the end of the query:
SELECT * FROM OPERLOG_SYSLOG LIMIT 1000;
These results are similar to the SYLOG example; however, records exist for a different ZB02
LPAR because we are now reporting across the sysplex. Querying on the ZB01 LPAR allows
us to test and validate only in an interactive mode in the ISPF PANEL for the DVM server.
Replace sentence with:
We can add predicates to our previous example to query for the DVM server with more
specificity by using the AVZS JOBID:
SELECT * FROM OPERLOG_SYSLOG
WHERE SYSLOG_JOBID='AVZS';
The query results for the AVZS subset are identical to the results that are shown in
Figure 4-17 because they are ordered by the SYSLOG_JOBID column.
When running the same query again in DVM Studio, the SYSLOG_DATE_TIME value is
incremented, as AVZS generates a new message in OPERLOG (see Figure 4-19):
-- Description: Retrieve the result set for OPERLOG_SYSLOG (up to 1000 rows)
-- Tree Location: 10.3.58.61/1200/SQL/Data/AVZS/Virtual Tables/OPERLOG_SYSLOG
-- Remarks: Logstream - SYSPLEX.OPERLOG
SELECT * FROM OPERLOG_SYSLOG WHERE SYSLOG_JOBID = 'AVZS';
Figure 4-19 SQL Query result from OPERLOG with recent messages
To enable delimited data processing, the DVM server configuration member (AVZSIN00) must
be customized by configuring the SEFVTBEVENTS parameter:
The DVM server ISPF panel allows you to customize a sample rule that is named
AVZMDDLM from the VT rule management section. Within this section, column and string
delimiter values, and control header processing can be enabled.
The following options are available to assist with processing delimited data:
vtb.optbdlco sets the column delimiter (default value is the comma “,”).
vtb.optbdlch sets the delimiter (default is the double quotation mark “).
vtb.optbdlhr identifies and removes the header record containing column names. If
specified without a header prefix, the system compares the first token in each line to the
first column name in the table to recognize and discard the header. The default is no
header checking with value 0.
vtb.optbdlhp is a global parameter that defines prefix data that identifies the beginning of
a header line to be discarded. The specified value can contain a maximum of 32 bytes.
This value is compared to the beginning of each delimited line of data before any
tokenization is performed.
Map definitions are needed to ensure that columns are displayed in the correct order. The
process is similar to that performed for VSAM or other input files. Figure 4-21 shows a
copybook definition of the delimited file data set that declares the field definitions to be
created in the DVM server virtual source library.
DVM Studio can now be used in a similar way to running sample queries on VSAM by
selecting zFS in the Virtual Tables section of the Server tab. Figure 4-22 on page 66 shows
the generated SQL statement and results.
Be careful to add the MDDLM_ prefix before the Virtual Table name to format data correctly
for display. The MDDLM_ prefix is required for SQL to ensure correct formatting.
In DVM Studio, select: Server tab → SQL → Data → SSID → Virtual Tables → zFS →
Generate Query with * to result in the following query:
-- Description: Retrieve the result set for CLIENT_INFO_DELIMITED (up to 10000
rows)
-- Tree Location: 10.3.58.61/1200/SQL/Data/AVZS/Virtual
Tables/CLIENT_INFO_DELIMITED
-- Remarks: zFS file - /u/arnould/CLINET_INFO/DELIMITED.csv
SELECT * FROM MDDLM_CLIENT_INFO_DELIMITED LIMIT 10000;
Data conversion errors occur if the delimited data is not compatible with the host types of the
columns. If the conversion fails, diagnostic information that is related to the error is
automatically logged for troubleshooting problems.
The following IBM APARs must be applied on the z/OS SMP/E base system:
APAR OA49263 provides real-time SMF support and is a requirement for the configuration
of real-time SMF data access.
APAR OA48933 is required to address accessing log streams. SMF log stream
configuration is required for in-memory resource support. In this section, we cover how to
access this information from the DVM server.
Upon DVM server initialization, SMF connects to the in-memory resource and continuously
reads a buffer of SMF activity by using a REXX procedure. The REXX procedure is
responsible for reading data set names from in-memory objects.
It also is used to specify the base map name and the data set name for SMF tables in a global
variable. A data set name can be specified for a specific table (SMF record type) by creating a
global variable for the table name. This allows applications to use other SMF data sources
without exposing their names.
This REXX procedure provides the name of data sets or in-memory objects that must be read
(a global variable that is named VTB.OPTBDSNA is going to be completed at execution).
Note: You must at least define the global variable GLOBAL2.SMFTBL2.DEFAULT to make
these rules work. These VTB rules also can be customized according to your needs and
naming conventions.
To configure access to SMF files, you must configure the server started task JCL, server
configuration member, and server virtual table member. To enable reading SMF data in real
time in log streams, you must have the SMFPRMxx member in the system PARMLIB data set
that is configured to use both log streams and in-memory resources.
SMF data set names are dynamic in local environments and require SEF rules enablement
and optionally global variables set to specific values to provide data set names to the virtual
tables and views from SMF data sets or log stream configurations.
You can choose a GDG data set name to support or dynamic data set name support, or both,
to quickly access your SMF data. These two options are provided for your convenience to
help you start accessing your SMF data. Custom rules likely must be developed to use your
local naming convention to access your SMF files. It is common to use GDG data sets to
automatically export SMF data to disk from a fixed GDG base name.
On the DVM server, select Rules Mgmt → SEF Rule Management → VTB → Enable →
Auto-enable.
This syntax is useful if we want to read the FULL GDG data set.
Pro tip: Be careful to define the data set name when uppercase is used. If you specify the
correct name, but in lower or mixed cases, the allocation fails.
Next, we test that the definitions are correctly defined by running a query against our GDG
data set. In Data Studio, which was used earlier to access VSAM files, we edit and run the
following query:
SELECT * FROM SMF_07001_YESTERDAY
Then, we see result that is shown in Figure 4-23 when we run the query.
Figure 4-23 Result from SQL Query on SMF70 records from Yesterday
If we want to change the default GDG data set name, we can change the VTB global variable
or submit the new GDG data set name in the SQL Query. To pass a dynamic data set name to
query an SMF data set, we use the following format for the table name in the SQL statement:
- TableMapName__DataSetName
Where:
- TableMapName is SMF_07001
- DatasetName is prefixed by two underscores (__) and the periods in the data set name
are replaced with single underscores (_).
Edit and run the following SQL from Data Studio to get the results that are shown in
Figure 4-24. To display SMF records from "Today", run the following Select statement and use
parenthesis in the SQL and double quotation mark for the table name:
SELECT * FROM "SMF_07001__SMF_RECORDS_ZB01_SMF_SAVE(+0)"
Figure 4-24 Result from SQL Query on SMF70 records from a dynamic data set name
The example collects SMF data every 5 minutes (INTVAL(05)) across all SMF Types, except
ranges 16 - 19, 62 - 63, 65 - 69, 99, 100 102, 110, and 119 - 120. Any changes to this
member must be submitted in the SDSF log to account our changes: /SET SMF=xx.
Figure 4-27 Result from SQL Query on SMF70 records with log stream
In addition, we must modify the DVM configuration member AVZINS00 by adding the
following statements after the GLOBAL PRODUCT OPTIONS statement:
IF DoThis
THEN DO
"DEFINE SMF NAME(IFASMF.INMEM)",
"STREAM(IFASMF.ZB01.INMEM)",
"BUFSIZE(500)",
"TIME(0)"
END
Pro tip: You must have your SMFPRMxx member in the system PARMLIB data set that is
configured to use log streams and in-memory resources.
NAME is the name of the INMEMORY resource that matches the name of the resource that is
defined to SMF with the INMEM parameter. If this parameter is included, the INMEMORY API
is read continuously and a buffer of the most recent records is maintained. This parameter or
the STREAM parameter, or both, must be specified. This parameter must begin with IFASMF.
Looking at the SMFPRMxx member in z/OS system PARMLIB in Figure 4-28, the INMEM
parameter is an in-memory resource to record SMF records in memory for real-time
processing.
Check the DVM server to ensure that in-memory log streams are updating the internal buffers
(see Figure 4-29).
The internal buffer status for the in-memory resources that are defined earlier in SMFPRMxx
is shown in Figure 4-30. The streams are enabled and active with available records.
Use the following command to display SMF recording parameters and verify that in-memory
streams are active (see Figure 4-31).
3. Configure the SMF data access option for IN-MEMORY by adding the following Global
Variable to the existing variables:
S IM = "IFASMF.INMEM"
S IM2 = "IFASMF.INMEM.Db2"
You should see the new global variables in the list:
GLOBAL2.SMFTBL2.IM = "IFASMF.INMEM"
GLOBAL2.SMFTBL2.IM2 = "IFASMF.INMEM.Db2"
Pro tip: Be careful when defining the data set name. You must enter the name in
uppercase characters. If you specify the correct name, but in lower or mixed cases, the
allocation fails.
4. Submit the following SQL Query to display SMF30 records (which are collected), from the
IFASMF.INMEM buffer (see Figure 4-33) displays records that are captured in real-time
through in-memory SMF collection. The SQL syntax for Virtual Tables is composed of the
Table Mapping (SMF_03000) with IM (IFASMF.INMEM) separated by a 'single' underscore
"_":
SELECT * FROM SMF_03000_IM LIMIT 10000;
This mechanism is a flexible and effective way to present the maximum amount of information
in the smallest amount of space. Maintain relationships between the rows in the various
tables by adding a field to the table that contains the base part of the record and a
corresponding field in the tables that contains the repeating sections.
DVM Studio shows nearly every record type that is mapped. One type is called SMF_tttss,
and one or more is called SMF_tttss_aaaaaa, where ttt is the record type (in decimal), ss is
the subtype, and aaaaaa is a string of characters and numbers that indicate the repeating
section that resides in that table.
For example, the type 70 subtype 1 record is loaded into the following tables:
SMF_07001
SMF_07001_SMF70AID
SMF_07001_SMF70BCT
In DVM terminology, the table that contains the record header is called the base table and the
tables that contain the repeating sections are called subtables. The base table contains a
generated column that is called CHILD_KEY, and the subtables contain a generated field that
is called PARENT_KEY. All of the rows in the base table and the subtables that include the
same CHILD_KEY and PARENT_KEY values came from the same SMF record.
If you want to extract fields from the base table and from repeating sections that were in the
same record, you run a JOIN between the PARENT_KEY and CHILD_KEY fields, as shown
in the following example:
SELECT SMF_TIME, SMF_SID, SMF_SEQN, SMF70VPA, SMF70BPS,
FROM SMF_07001 A0 JOIN SMF_07001_SMF70BPD A9
ON A0.CHILD_KEY = A9.PARENT_KEY;
You can also get a list of the record types and the field names (but not the subtable names)
from the ISPF interface (see Figure 4-34) from the primary DVM server menu.
Enter an X next to the base table and a list of all the fields in that base table and all of its
subtables, as shown in Figure 4-36.
By scrolling to the right, you can also see the definition of each field, such as its format,
length, and offset (see Figure 4-37).
To configure access to a Db2 unload data set, you must add the Db2 unload data set name to
the Db2 virtual table in a Data Virtualization Manager Server Event Facility (SEF) virtual table
rule. With this access, you can issue SQL queries directly against Db2 unload data sets for
existing Db2 virtual tables.
Switching a Db2 virtual table to read an unload data set is done by assigning a data set name
to the table in a virtual table rule. The VTB global variable vtb.optbdsna is used to redirect
access from Db2 to reading the sequential file that is named in the variable. The named
sequential file must contain the unload data that is created by the Db2 UNLOAD utility. A
model VTB rule, AVZMDLDU, is provided to demonstrate redirecting a Db2 virtual table to a
Db2 unload data set.
By activating the model rule AVZMDLDU, you can query an unloaded sequential data set
named DSNDW00_UNLD_DSN81210_EMP by issuing the following query. The results are
shown in Figure 4-39:
SELECT * FROM MDLDU_DW01_DSN81210_EMP_ARNOULD_DW00_UNLD_DSN8D12A_DSN8S12E;
Figure 4-39 Result from SQL Query access to an UNLOAD data set for DW01_DSN81210_EMP
The sample rule AVZMDLDU can be used as a reference for more customization. When
customizing this rule, more logic is likely needed to be added if different unload data sets
require different VTB variable settings for CCSID or internal or external format.
Pro Tip: If you update the sample AVZMDLDU rule as described in the preceding
steps, you can provide a default value for the vtb.optbdsna variable. By updating
this rule, you do not need to specify the correct dataset name in the SQL statement
for execution. Figure 4-44 shows a simple SQL that returns values from the default
UNLOAD dataset.
c. Run the following SELECT command to query the UNLOAD data set:
SELECT * FROM MDLDU_DW01_DSN81210_EMP_WHATEVER_DATASET;
Figure 4-44 Result from SQL Query specifying UNLOAD Dataset name
If you do not want to see this behavior, you do not need to modify the sample rule
vtb.optbdsna variable. Every SQL must specify the correct UNLOAD data set name to
work correctly.
Data Virtualization Manager for z/OS (DVM for z/OS) can access relational databases by
using built-in DRDA connections. DVM for z/OS also provides an application server (the
JDBC Gateway Server) that provides access to many non-mainframe JDBC data sources.
In this chapter, we discuss how to connect with non-mainframe data sources by using the
JDBC Gateway server client component.
RDBMS
DRDA-supported
(must be pre-enabled)
Db2 LUW
Data Mapping
Facility (DMF) RDBMS
DB
Parser JDBC Gateway Server Driver 1 Non-DRDA
1
(DRDA AS) J
Postgres
DRDA SSL D Driver 2 DB Oracle
DRDA AR JDBC Gateway 2
B Hive
(JGATE) Administrator
*zIIP-eligible DRDA Non-SSL Console C Driver n DB
SQL Server
MySQL
(Currently HTTP) n
...
Browser https
This chapter references the configurations and processes that are specific to different
distributed databases, such as IBM DB2 Big SQL, IBM Db2 Warehouse, on-premises Db2
Family, Microsoft SQL Server, and many other data sources that use the JDBC Gateway
server.
To access distributed databases, the DVM server must be configured to use the DEFINE
DATABASE definition in the DVM configuration server member
hlq.xVZy.SAVZEXEC.(xVZyIN00). After it is added, the DVM must be restarted.
Connecting to non-z/OS sources through DRDA, such as Oracle, the Oracle Database
Provider for DRDA is required. A Host Integration Server (HIS) DRDA Service is required for
connections to a Microsoft SQL Server database. For more information, see the Microsoft
documentation Configuring Service for DRDA.
Generally, the configuration member needs updating with more configuration for the DVM
server Event Facility (SEF) rules, as needed. Optionally, any alternative authentication
information also can be configured. Within the DVM configuration member, specify the DRDA
RDBMS settings through a definition statement and provide local environment values for all
the parameters. As shown in the Define Database specification in Example 5-1, the DVM
Started Task must be recycled.
The JDBC Gateway server is a pure Java application, which can run on any platform that
supports Java 8 or higher.
Note: If it is not practical to install the JDBC Gateway server on the target data source’s
platform, it can also be installed in a UNIX System Services environment on the
mainframe.
The installation file can be obtained from the IBM Support Fix Central download site. This file
can be transferred from the mainframe that uses FTP, renamed, and unarchived. The
resulting JAR file can be run on the target platform to complete the server installation, as
shown in Figure 5-2.
Extract the JDBCGateway.zip. in the library where it was transferred to the target system. If
your host machine does not have an extract utility, extract the contents of the installation file
on a Windows workstation and copy the JDBCGatewaySetup11.jar file to the host machine.
The UNIX System Services environment provides a centralized location for the JDBC
Gateway server to access remote data sources that are provisioned by the DVM server.
Isolating the JDBC Gateway server from the DVM server results in better co-location with
source data. Because the JDBC Gateway server is a pure Java application, it can run
anywhere that Java 8 is supported.
Configuration
For installation in UNIX System Services, it is recommended that you define the following
environment variables:
export IBM_JAVA_OPTIONS="-Dfile.encoding=ISO8859-1"
export _BPXK_AUTOCVT=ON
Customized installation
As a best practice, install the JDBC Gateway server to a non-user library in UNIX System
Services. Doing so allows centralized access to the Gateway server by any authorized user. It
also prevents issues where an administrator user’s access permissions change or are no
longer accessible to the platform.
Figure 5-5 The use of batch scripting to efficiently start and stop the JDBC Gateway server
The use of the start and stop scripts directly in OMVS limits the number of resources that is
available to the JDBC Gateway server for a user’s OMVS segment. Starting from JCL with
BPXBATCH, the customer can set the REGION size, as shown in Figure 5-5.
The installation script automatically installs by using the original installation directory. Reply Y
when prompted to clear the directory and edit the new startServer.sh and stopServer.sh
scripts to re-implement any changes from the previous installation.
At a command prompt in the JDBC Gateway server installation directory, run one of the
following commands to start or stop the Gateway server on MS-Windows or Linux, Windows,
or Mac OSx:
MS-Windows: startServer, stopServer
Linux, UNIX, or Mac OSX: sh startServer.sh, sh stopServer.sh
A web browser can be used by connecting to the server IP address and port that were chosen
for the Admin UI during installation (that is, https://192.168.1.31:8091), in which a
username and password prompt appears. The default username is admin.
The user interface initializes and a user access dialog window appears in which you are
prompted to enter a username (the default is admin) and a password that you chose during
the server installation process, as shown in Figure 5-7.
By using the Connections parameters drop-down list for the JDBC, supported data sources
can be selected. If the data source does not exist, the ellipsis can be selected for a new data
source, as shown in Figure 5-9.
Access and authentication credentials also are maintained for access to the target database
with the ability to test a successful connection, as shown in Figure 5-11.
5.2.7 Configuring the DVM server to access the JDBC Gateway server
To create a mapping or linkage between the requesting DVM server and a newly installed
JDBC Gateway server, a z/OS TSO/e session is needed to update DVM server configuration
members. Depending on the SMP/e installation and the naming that is chosen for the DVM
server subsystem, the server initialization member is found by finding the
hlq.xVZy.SAVZEXEC(xVZyIN00) configuration libraries.
The AVZ1IN00 member needs the DRDA specification that is updated for the PostgreSQL
data source that is defined in the JDBC Gateway server. Adding a DEFINE DATABASE TYPE
block definition after sample definitions for Db2, MSSQL, and other DRDA connection types
establishes a mapping for the DVM server to connect to the PostgreSQL data source through
the JDBC Gateway server. A portion of a sample DEFINE DATABASE TYPE is shown in
Example 5-2.
This example uses the location POSTGRES and port 443 (default) as defined in the previous
Admin UI configuration that was shown in 5.2.6, “Configuring data sources that use the JDBC
Gateway server UI” on page 87. We selected PSG1 as our connection Name. The IPADDR
parameter is set to the IP address of the system where the JGATE server was installed
previously.
After the DEFINE DATABASE changes are completed, the edit session on
SAVZEXEC(xVZyIN00) can be saved and closed.
When accessing remote data sources by using the JDBC Gateway server, these RACF user
credentials are referenced to access and retrieve remote data. In most cases, the user
credentials across remote data sources are different. The JDBC Gateway server allows you
to map user authentication and authorization individually for each targeted remote data
source.
Alternative user credentials can be set up with changes to auto-enable a SEF Rule,
AVZEJGAG, and mapped with the AVZDRATH utility.
To define alternative authentication information, edit the sample job for the AVZDRATH utility
to add a global default user definition or authentication information for specific mainframe
users.
The AVZDRATH member can be edited in the hlq.SAVZCNTL data set by adding a definition
for the example PostgreSQL database to map the value from RACF to the user ID that is
needed to access the PostgreSQL database. The DBTYPE=JGATE and DBNAME=name are
required to proceed with each set of user ID mappings for a specific data source instance, as
shown in Figure 5-14.
Figure 5-14 Specific user authorization for PSG1 J GATE data source
The example that is shown in Figure 5-15 shows a DEFAULTUSER on lines 002500 and
003800. Other keywords enable printing the SYSIN statements in the job output
(ECHO=ON/OFF), and provide more detailed or summary information about the AVZDRATH
utility settings in the job output (REPORT=DETAIL/SUMMARY).
Providing user credential entries in the AVZDRATH utility job can introduce a security risk if
unauthorized users can browse the AVZDRATH member to view user ID entries.
The dataset that is specified in the SYSIN DD can be RACF protected to prevent
unauthorized access to the user credentials shown (as shown in Figure 5-17) for
DVM110.AVZ1.AUTH.
The Event Facility (SEF) provides the unique ability to customize rules for use of variables,
handle data or business triggers, and monitor their use. Option 2 for SEF Rule Management
steps through the creation of a rule for the ZOSUSER in SYSIN, as shown in Figure 5-20.
For the SEF change, all of the default values apply for rulesets, types, directory reads,
confirmations, and the entry panel. To address this rule, the ATH ruleset can be ENABLED
under status. Selecting this ruleset for DVM110.AVZ1.SAVZXATH displays a list of associated
PDS members.
Figure 5-21 Enabling and automatically enabling the AVZEJGAG ATH rule
After the ATH settings for the AVZEJGAG PDS member are completed and the ISPF panel
exists, the DVM server started task is to be stopped and restarted.
DVM Studio includes a Server panel with DVM server information. For this example, AVZ1 is
the host DVM server that is configured and connected to the JDBC Gateway server named
JGATE. Figure 5-22 shows a tree structure for the AVZ1 server with references to Virtual
Tables and Virtual Views that are mapped to local data sets and remote sources that are
mapped that use the JDBC Gateway server.
Figure 5-23 Displaying the PSG1 Postgres database running non main-frame
The DVM server maintains metadata in memory that is associated with each data source that
is mapped for access. The DVM server also performs data discovery for the target data
source and captures details about schema, tables, and views that are on those database
systems. As a result, DVM Studio can immediately access all of the DVM server metadata
and easily present database objects in a relational format for simple access by SQL API and
other modern programming languages.
DVM Studio can access a remote server’s database by schema where tables and views can
be virtualized. Figure 5-24 shows the emp table under the dvm_schema. The JDBC Gateway
server serves as a literal gateway for the DVM server, which then allows client applications to
read/write to and from the respective data source.
Figure 5-25 Tree structure of remote PSG1 PostgresSQL database with the emp table selected
Generating a query
DVM Studio generates SQL statements dynamically for the selected database object, which
defaults to selecting all columns and rows up to a built-in limit to the Studio, as shown in
Example 5-3.
The example that is in Figure 5-26 on page 97 shows the result set from the query that was
run in Example 5-3. Notice that the generated query selects all columns and includes the
normalized 3-part name.
In the window that is shown in Figure 5-27, the metadata library is displayed where the
mapping for the data source is stored. In this example, a 3-part naming pattern is defined for
the emp PostgreSQL table that is selected.
After the virtual table is created, a query can be generated from the newly defined mapping,
much in the same way the query was generated by accessing the data directly (see
Figure 5-26).
Figure 5-29 Creating a virtual view that JOINs across two Virtual Tables
Figure 5-30 SQL SELECT JOIN between EMP and DEPT virtual tables
For this example, the DEPT table from the Db2 for the z/OS database is joined with the EMP
table from the PostgreSQL database. With the Virtual View created, a query can be
generated and run to view the result of the JOIN operation between the two Virtual Tables, as
shown in Figure 5-31. The example shows accessing data on the mainframe and joining it
with a table on a remote distributed environment through the JDBC Gateway server.
Figure 5-31 Result from SQL Query on joined tables EMP and DEPT
Alternative user credentials can be set up with changes to auto-enable a SEF Rule,
AVZEJGAG, and mapped with the AVZDRATH utility.
To define alternative authentication information, edit the sample job for the AVZDRATH utility
to add a global default user definition or authentication information for specific mainframe
users.
The AVZDRATH member can be edited in the hlq.SAVZCNTL data set by adding a definition
for the example PostgreSQL database to map the value from RACF to the user ID that is
needed to access the PostgreSQL database. The DBTYPE=JGATE and DBNAME=name are
required to proceed with each set of user ID mappings for a specific data source instance, as
shown in Figure 5-32.
Figure 5-32 Specific user authorization for PSG1 JGATE data source
After the definition entries are completed, the AVZDRATH JCL job can be submitted.
AVZDRATH also provides a means for setting a configurable DEFAULTUSER. This setting
allows the Jgate Server to establish a proxy or functional ID for a larger set of RACF IDs,
which provides default credentials for a JGATE-connected data source.
Figure 5-33 Specific user authorization for PSG1 JGATE data source
Note: Security risks can result if clear text user credentials are entered in the AVZDRATH
member.
ODBC
Mainframe LPAR-1
driver Assembler, Metal C Mainframe
Data Sources
CMBU
DVM Server ISPF UI
RDBMS
Business OEPORTNUMBER System, server, and VSAM MQ DRDA-supported
applications user administration (must be pre-enabled)
C, C++ apps JDBC Virtual Table - Map ADABAS ZFS
OESSLPORTNUMBER
T
driver
h
Mobile or cloud applications can interact with data that uses the web browsers and mobile
applications over http or https to service cloud environments. In each instance, for any
application, DVM for z/OS provides the needed translation and routing that is required for
access through specific interfaces; DVM server, JDBC Gateway, DVM WOLA Service
Provider, DVM DSCLIENT, Interactive System Productivity Facility (ISPF). Common client
access methods are shown in Table 6-1.
Web browser (HTTP and HTTPS) z/OS Connect EE to DVM WOLA service provider
A minimum JDBC connection string contains the hostname, port, and DBTY, as shown in the
following example:
jdbc:rs:dv://<hostname>:<port number>;DBTY=DVS
An IBM Db2 QMF for Workstation contains common JDBC connection string elements, as
shown in the following example:
jdbc:rs:dv://<hostname>:<port number>;DBTY=DVS;Subsystem=NONE
The DVM server can also be used as an ODBC Type 4 connection for IBM Db2 Connect. In
this case, the DBTY and Subsystem parameters reference DB2, as shown in the following
example:
jdbc:rs:dv://<hostname>:<port number>;DBTY=DB2;Subsystem=<DB2 CSSID>
Metadata
The Java API allows external tools and applications to discover DVM server objects, such as
tables, views, and other object descriptions, such as column names, and column data type.
Use the standard DatabaseMetaData API to access the DVM server metadata, such as
database product name, version, driver name, name of the total number of tables, and views.
If you need more information about the DatabaseMetaData Interface and the methods it
offers, search on the web for the Java official documentation.
Example 6-1 shows some standard configuration parameters for generating Java code
snippets.
Example 6-1 Java code snippet to retrieve all from a DVM server
DatabaseMetaData databaseMetadata = conn.getMetaData();
String catalog = conn.getCatalog(); String schemaPattern = null;
String tableNamePattern = "%";
String[] types = null;
ResultSet tables = databaseMetadata.getTables(catalog, schemaPattern,
tableNamePattern, types;
Example 6-2 List all columns for all objects in the DVM server
DatabaseMetaData databaseMetadata = conn.getMetaData();
String catalog = conn.getCatalog();
String schemaPattern = null;
String tableNamePattern = "%";
String colNamePattern = "%";
ResultSet tables = databaseMetadata.getColumns(catalog, schemaPattern,
tableNamePattern, colNamePattern;
Where:
tableNamePattern can be used to filter objects based on their name
colNamePattern can be used to filter columns based on their name
The DVM server metadata that uses the Java API can generate reusable code snippets for all
available virtualized objects. Replace XXX and YYY to match your environment for hostname or
IP and Port number. Replace AAA and BBB with valid credentials that are needed for the
getConnection() method.
Include the following DVM for z/OS JDBC JAR file in the Java application class path:
dv-jdbc-[version #].jar: DVM JDBC driver core implementation file
log4j-api-[version #].jar: The logging framework API file
log4j-core-[version #].jar: The logging framework implementation file
log4j2.xml: A sample logging configuration file
For more information about sample reusable code, see Appendix B, “Java API sample code
snippet” on page 233.
Update and assemble the CICS program list table/program initialized (PLTPI) list for the DS
Client task-related user exit. The entry for the AVZXMTRI program must follow the first
DFHDELIM entry in the PLTPI list to ensure that the AVZXMTRI program is run during the
second stage of the CICS PLTI process.
The example statement results in dynamic SQL being run where STAFFVS is the virtual table
requested, as shown in the following example:
SELECT STAFFVS_KEY_ID, STAFFVS_DATA_NAME, STAFFVS_DATA_DEPT, STAFFVS_DATA_JOB,
STAFFVS_DATA_YRS
FROM STAFFVS;
Interaction between the DVM server and z/OS Connect is enabled by the DVM Service
Provider, which is a UNIX System Services component that can integrate with zCEE to
enable DVM Web services invocation. In turn, the DVM Service Provider establishes the
communication channel with DVM server by using WebSphere Optimized Local Adapter
(WOLA) Service Provider, which is natively supplied by z/OS Connect EE.
WOLA is a function that enables fast, efficient, and low-latency cross-memory exchanges
between z/OS Connect and external address spaces, such as DVM for z/OS. WOLA requires
the DVM server and zCEE server to be on the same LPAR.
WOLA uses a three-part name to uniquely identify the WOLA server (or communication
channel). This name is derived from the wolaGroup, wolaName2, and wolaName3 attribute
values.
6.4.2 Configuring the DVM server for use with z/OS Connect
Allocate a WebSphere Optimizer Local Adapter (WOLA) PDSE data set with the following
characteristics to configure the DVM server to work with the zCEE server. A best practice is to
use the DVM server naming convention for the WOLA PDSE definition:
Space units: TRACK
Primary Quantity: 30
Secondary Quantity: 2
Directory blocks: 15
Record format: U
Record length: 0
Block size: 32760
Data set name type: LIBRARY
Add your WOLA PDSE data set to the AVZRPCLB ddname in the server started task JCL:
//AVZRPCLB DD DISP=SHR,DSN=&HLQ..SAVZRPC
// DD DISP=SHR,DSN=
APF authorizes the <WOLA PDSE> data set and finds Enable z/OS Connect interface
facility in xxxIN00 configuration member where xxx is the DVM server subsystem name:
/*------------------------------------------*/
/* Enable z/OS Connect interface facility */
/*------------------------------------------*/
if DontDoThis then do
Change DontDoThis in DoThis to enable the WOLA parameters and confirm that the
ZCONNECT parameter is enabled.
Optionally, add the ZCONNECTPWNAMEX parameter and set the value to the concatenation
of WolaName2 and WolaName3, separated by a dot (<WolaName2>.<WolaName3>). Default
values for WolaName2 and WolaName3 are NAME2 and NAME3. WolaName2 and
WolaName3 can be arbitrary 1 - 8 characters strings, as shown in the following example:
"MODIFY PARM NAME(ZCONNECTPWNAMEX) VALUE(NAME2.NAME3)"
Tip: WolaName2 and WolaName3 also are used during zCEE WOLA configuration.
Therefore, if specified, it is recommended to make note of them.
Customize the DEFINE ZCPATH command, which is used to define a connection to a specific
z/OS Connect region (server):
"DEFINE ZCPATH",
" NAME(ZCNALL)",
" RNAME(DVJR1)",
" WNAME(DVJG1)"
NAME is an arbitrary name and RNAME is up to 12 characters. The WNAME is up to 8 characters for
the WolaGroup name.
Tip: RNAME and WNAME are also used during zCEE WOLA configuration; therefore, it is
recommended to make note of them.
By default, DVM for z/OS retries failed connections with the zCEE server. Sometimes, failed
connections are caused by an inactive zCEE server, but the communication error is always
logged in the DVM server traces file. If you use RACF, a profile definition of CBIND resource
class is required to allow the zCEE server and the DVM server to connect and function
properly.
<usr_dvsService
id="dvsService"
connectionFactoryRef="wolaCF"
registerName="DVJR1"
serviceName="DVJS1"
invokeURI="/dvs" />
Where:
– serviceRef in <zosconnect_zosConnectService> must be the same as ID in
<usr_dvsService>.
<zosconnect_zosConnectService
id="sdef1"
serviceName="dvs1"
serviceAsyncRequestTimeout="600s"
serviceRef="svc1" />
<zosLocalAdapters
wolaGroup="DVJG1"
wolaName2="NAME2"
wolaName3="NAME3" />
<zosconnect_zosConnectService
id="sdef1"
serviceName="dvs1"
serviceAsyncRequestTimeout="600s"
serviceRef="svc1" />
<zosconnect_localAdaptersConnectService
id="svc1"
registerName="DVJR1"
serviceName="DVJS1"
connectionFactoryRef="wolaCF"
connectionWaitTimeout="7200" />
6.4.4 Creating zCEE RESTful APIs for access to the DVM server
When a RESTful API requests mainframe data, z/OS Connect communicates the request to
the DVM server by using the WebSphere Optimized Local Adapter (WOLA). The DVM server
runs the requested web service to get data.
After the configuration steps are completed, recycle the DVM and z/OS Connect Started
tasks to establish a connection between the two servers. A successful pairing is written to the
DVM server log:
19.10.58 STC05152 AVZ4502H ZCPRHUPR subtask is active
19.10.58 STC05152 AVZ4502H ZCPRHLWR subtask is active
Figure 6-6 Preferences setting for REST-based web services with z/OS Connect Service Provider
Use the Max Records Parameter to set a limit for the number of records that is retrieved when
run and use the Prompt user before running the generated query to prompt users before
query execution.
Use the Microflow Library Dataset dialog to create a microflow metadata library on your
mainframe, as shown in Figure 6-9.
You can select a virtual table or stored procedure to associate with the web service you are
creating and then have the option to update the name, description, or SQL statement that is
used to put or get data from a web-based client request.
The web services workflow accommodates dynamic inputs for the SQL statement for your
web service with the z/OS Connect REST interface by refreshing communication between the
DVM server and the zCEE Server, as shown in Figure 6-11 and Figure 6-12 on page 119.
You can promote a web service by generating SAR files. In DVM Studio, web services can be
selected and transformed into a z/OS Connect RESTful API on the Server tab by
right-clicking the wanted web service and selecting Create z/OS Connect SAR file.
The hypothetical DvsqlStaffvs web service uses the zCEE SAR file Generator to convert from
stand-alone use to general consumption by using the zCEE REST Interface. Figure 6-13
shows SAR file generation.
For each method, define the associated SAR file by using the Service button and locating the
SAR file that was generated in your file system. Figure 6-15 shows how to associate a file to a
RESTful API.
Figure 6-17 shows results from the defined web service that was generated from the Db2
QMF RESTful API that are now available to help drive operational analytics and opportunities
for optimization for the application and use of resources.
Figure 6-18 Selecting DVM data with three-part names using DB2
The three-part name can be simplified by creating a View or an Alias. However, as shown in
Figure 6-18, Db2 QMF for TSO is used to generate output. The use of IDF makes DVM server
virtual tables available by using three-part names or by way of a View or Alias to other
mainframe applications, such as Cobol, Db2 Stored Procedures, Db2 for z/OS Restful
Services, and SPUFI.
Can be created by any valid user with access to IDF must be configured by the administrators for
DVM Studio and Db2 for z/OS. No setup required. the DVM server and Dvb2 for z/OS by using the
Db2 communications database. The DVM server
must be registered to populate metadata with
suitable user privileges.
By default, passes only the SELECT portion of IDF passes the SQL through the DVM server with
the query to the DVM server. No SQL pushdown ANSI-SQL 92 support. Also supports WHERE
of WHERE predicates predicates and an SQL pushdown.
Supported by all Db2 for z/OS clients on the IDF is limited to mainframe client applications.
mainframe and over the distributed environment.
For example, QMF, Cognos, and MS-Excel.
You can use the Db2 for z/OS database as an information or federation hub for your
enterprise. DVM Studio allows you to create Db2 UDTFs for a virtual table. These external
Db2 UDTF functions provide read only support and are created within the studio on virtual
tables and virtual views. These functions expose your applications to data sources that are
outside of your Db2 subsystem, which allows Db2 to become a central data store for
disparate data that is on or off the mainframe, such as relational, big data, Kafka, or flat files.
As of this writing, the following optimized UDTF modules are available for different hardware
environments:
AVZUDT9N for the z196 system
AVZUDTAN for the zEC12 system
AVZUDTBN for the IBM z13® system
AVZUDTCN for the z14 system
AVZUDTDN for the IBM z15™ system
Db2 for z/OS Subsystem uses the Db2 Workload Manager environment for User Defined
Functions (UDF) and User Defined Routines (UDR). The Db2 Wizard can be used to
generate UDTF definitions or Views for the Db2 for the z/OS database that is referencing IBM
Z provisioned data on the DVM server, as shown in Figure 6-20.
Without a view, a DVM UDTF is addressed in SQL with a less familiar SQL syntax. UDTFs do
not appear in SYSIBM.SYSTABLES and are not exposed to third-party commercial software.
Creating a view addresses SQL standards and the ability to discover views that do not
perform SQL Pushdown at the source and return all rows for processing to the Db2 for z/OS
Subsystem.
The back-end DVM server is not technically known to the Db2 database and does not know
the DVM SQL engine backing a view on a UDTF. Therefore, the WHERE clause is not passed
through to the remote data source. Db2 receives all of the data and then applies the WHERE
clause. This process is not a challenge for Db2 in many cases, but what if the virtualized table
contains billions of records?
The following SQL statement is more efficient. The first parameter in the syntax for the DVM
UDTF is a pair of single quotation marks with nothing in them ''. This spot is reserved for a
WHERE clause predicate:
SELECT TEMPID,NAME,ADDRESS,EDLEVEL,COMMENTS
FROM TABLE (TWSHAWN.AVZW_SASAPPLICANT ('WHERE TEMPID >450', 'AVZW...SASAPPLICANT',
'5,TEMPID,NAME,ADDRESS,EDLEVEL,COMMENTS', ''))
If the WHERE clause is operating on TEXT or DATE\TIME values that require single quotation
marks, the single quotation marks must be doubled to two single quotation marks, not a
double quotation mark, as shown in Figure 6-23.
The final parameter also is a set of empty single quotation marks. This format is used to
contain DVM runtime options, such as Map Reduce.
Drivers do not need to be downloaded or installed, and Db2 family database engines are not
needed for data federation because this capability now is a built-in, including capability that
does not require manual commands for creating wrappers or data type mappings.
The Db2 database optimized the DVM server as a remote database and information
architecture and performs SQL Pushdown. It also can create local Nicknames or Remote
Tables that map to virtual tables that are provisioned on the DVM server for underlying IBM Z
sources, such as VSAM, IMS, Adabas, Sequential Files, Logstream, Syslog, SMF, and Tape
systems.
Create a user mapping for all users that require access to the federated DVM server, as
shown in the following db2 statement and in Figure 6-25 on page 128:
db2 "CREATE USER MAPPING FOR <user> SERVER <server_name> OPTIONS (REMOTE_AUTHID
'XXX', REMOTE_PASSWORD 'xxx')"
To validate the access to DVM server, create a nickname for a remote DVM Virtual Table or
Virtual View:
db2 "CREATE NICKNAME <nickname> FOR <server_name>.<virtual table/view>"
IBM Cloud Pak for Data delivers the modern information architecture to turn AI aspirations
into tangible business outcomes, while improving governance and protecting your data.
IBM Cloud Pak for Data also can access z/OS data by using Data Virtualization Manager for
z/OS. By using a built-in JDBC driver (for more information about the DVM-JDBC driver, see
Chapter 5, “Connecting to non-Z data sources” on page 79), any z/OS data that is virtualized
with DVM is available to various Cloud Pak for Data applications. It can be cataloged,
analyzed, and infused with AI on the platform.
In this section, we show how to access DVM virtualized data sources by using the Cloud Pak
for Data DVM connector component.
6.8.1 Cloud Pak for Data interface and adding a DVM connection
Complete the following steps to add a DVM connection:
1. Log in to an available IBM Cloud Pak for Data instance, as shown in Figure 6-26.
Figure 6-28 Connection service name, hostname, Port, and access credentials
Therefore, you can create public or private projects that often are used by Data Engineers or
Data Scientists and work to request the publishing of virtual assets to the Watson Knowledge
Catalog by the Data Curator that is responsible for Data Governance.
After remote IBM Z data assets are published to the Watson Knowledge Catalog, they are
accessible for Machine Learning, Analytics, and AI-related activities.
From the DVM Connection, you can create a project or open a project where you want to work
with the data that is available. The data assets, which include individual tables, metadata, or
connections, are available from within a CPD project.
Figure 6-29 List and create projects in IBM Cloud Pak for Data
This chapter discusses the various interfaces that can be used with the DVM server and
includes the following topics:
7.1, “Accessing the ISPF interface” on page 132
7.2, “DVM Studio” on page 139
7.3, “Batch interface” on page 161
7.4, “API interface” on page 164
7.5, “Metadata” on page 166
Where:
hlq is the high-level qualifier of the DVM libraries of your DVM subsystem
dvm subsys is the name of your DVM subsystem
The command option allows access to the ISPF interface that is specific to the DVM server
without being integrated into any menu. Only users that know the exact command are allowed
access.
A better option is to include access to the ISPF interface into a menu option on one of the
ISPF menu panels. This configuration limits access to user IDs that are allowed to use
specific log on procedures. When creating a menu option in ISPF that runs a command, refer
to the MVS manuals or consult your z/OS system programmer.
You switch servers by entering the correct server name in the input field and then enter the
option of your choice. This process works only if the DVM server you want to switch to is
actively running; otherwise, you receive an error message.
For more information about the main ISPF panel sections, see Invoking the ISPF application
using the command shell.
Server trace
The server trace option (B) on the main panel, gives you access to the log of the DVM server
(see Figure 7-2).
It shows activities, such as user log ons and log offs, query runs, and their results. It also
shows errors and can be helpful in problem determination.
Data mapping
The data mapping module is where you can create and maintain the data mappings for the
various data sources.
Monitor
The monitor module (option F) gives you insight into what is happening in your DVM server.
When you open option F on the main panel, the panel in Figure 7-4 is shown.
Figure 7-5 also shows how much CPU time during the interval that is qualified for offloading to
zIIP engines (column “zIIP Qual CPU Time”). However, it also shows how much CPU time
during the interval was off-loaded to zIIP engines (column “zIIP CPU Time”). These columns
provide to the degree that the DVM server is using zIIP engines, or whether you need more
zIIP capacity. The Interval Activity also shows how many users were connected during the
interval (column “User Count”) and how many SQL queries were run (column “SQL Count”).
Remote users
The second option (Remote Users) gives you the list of all user IDs that are connected to the
DVM server at a specific time. You also can review the activities that a user ran
(line-command T), get details about the CPU usage by the user (line-command U), cancel a
thread running on the DVM server (line-command C), or disconnect the user from the DVM
server (line-command K).
Other options
Other options on the Monitor panel give you an overview of storage usage (option 4 - Storage
Monitor), active tasks (option 5 - Task Monitor), and statistics about the DVM server (option 6
- Statistics).
Press Enter, and any message (failure or success) appears in the upper right when the
process is done. Return to the main panel by pressing PF3 three times.
2. In the next panel (see Figure 7-8 on page 137), enter only the DSN name and then, press
Enter. Upon successful execution, the system returns to the previous panel with a
message in the upper right.
Note: DSN (R) is the physical file name of the data source in z/OS (never between
commas on this panel)
3. Go back one panel by pressing PF3 and select option 5. When pressing PF3, the list of
maps in the metadata catalog is refreshed. When done, the message Refresh Successful
appears in the upper right. Press PF3 again to return to the main menu.
4. Use option 8 (DSSPUFI to test your virtual table. This option is similar to SPUFI. On the
panel, complete the following information (see Figure 7-9):
– Change Options?: If you want to review or change the defaults for the execution of your
query, you can set this option to Y. If not, you can set it to N.
– Input Data Set: The name of a partitioned data set with a member name. The data set
should exist. If the member does not exist, DVM creates it. You can use any standard
80-byte record PDS.
5. Press Enter. If you set the Change Options? field to Y, the panel that includes the default
settings displays. Review and change any settings as necessary and press Enter.
If you set the Change Options? field to N, you do not need to press Enter again.
Enter option 7 (VSAM/Sequential) → option 3 (Map Display). The list of data mappings is
displayed (see Figure 7-11).
If you enter X in front of the map, the contents of the map display, as shown in Figure 7-12.
Therefore, right-click the Virtual Tables and select Refresh. The new virtual table is
displayed in the list.
The interface is started from the desktop by clicking DVM Studio icon. If DVM studio and the
DVM server are both running, DVM Studio automatically connects to the DVM server.
Upon your first use of DVM Studio, the server must be defined. Click Set Server..., or Set
Current Server, as shown in Figure 7-13. A dialog panel displays in which you enter your
credentials.
The Navigator opens the list of virtual tables and virtual views. Various data sources on IBM Z
and outside IBM Z can be accessed by clicking SQL → Data. Two entries are available: the
first features the name of your DVM server; the other entry is called Other Subsystem, as
shown in Figure 7-14.
The data section under the DVM server name contains all of the metadata that you created
and stored directly on the DVM server, including virtual tables and virtual views.
The data section in the display that is called Other Subsystems lists the connections to all
relational data sources for which objects do not require you to create a virtual table; for
example, Db2 subsystems. Here, you can access the objects of these subsystems and create
queries directly on these objects.
To create a view over multiple data sets, a virtual table must be created for each data source
before creating a virtual view. The creation of a virtual view requires that virtual tables exist.
The Set Server section includes the following options (see Figure 7-15 on page 141):
SQL
Discovery
NoSQL
Services
Admin
SQL
Clicking SQL opens a drop-down menu in which the following options are available:
Data
Storage procedures
Target systems
Each menu option features a filtering capability that you can access by right-clicking the
option and selecting Set Tree Filter, as shown in Figure 15. A dialog window opens in which
you can enter your filtering criteria.
Data
SQL Data allows you to display a list of virtual tables and virtual views along with the various
access paths to data.
Stored Procedures
The next item on the main menu of DVM Studio is Stored Procedures under SQL. Here, you
can create connections to stored procedures on Db2. You can also generate code on these
stored procedures. However, you cannot virtualize these stored procedures; therefore, they
cannot be combined with other objects within DVM Studio.
All queries that are in the DVM server must include a target data source. Whenever you run a
query in DVM, the query must point to a target system.
Discovery
The Discovery option that is shown in Figure 7-17 enables access to IDMS data sources.
Data discovery also provides integration with IBM Application Discovery and Delivery
Intelligence (ADDI) and IBM Rational® Asset Analyzer.
NoSQL
The NoSQL option enables users to create access to data sources that use the MongoDB
language. This option is useful in environments where data scientists prefer to use MongoDB
instead of SQL.
The NoSQL option is available when access is enabled for MongoDB to connect to DVM. This
access allows MongoDB to generate and run queries against DVM's virtualized data.
For more information about activating this option, see Chapter 4 of the User's Guide at IBM
Documentation.
Services
The Services menu includes options with which you can create, test, and administer APIs
(see Figure 7-18):
Web services
By using the Web Services option, you can create, test, and deploy APIs, along with z/OS
Connect Enterprise Edition.
Admin
Figure 7-19 shows some of the administration tasks that are available under the Admin menu:
Server Parameters
The Server Parameters option allows you to look up the value parameters of the DVM
server and connect source libraries with data mapping sources. This facility allows you to
define which libraries are in use for data virtualization.
Source Libraries
Source libraries point to the libraries the DVM server must access specific types of
mainframe data. The source library is a server metadata object that is referenced by the
DVM server. All library names, data set names, and SYSIN parameters must adapt to your
local DVM installation.
Virtualization Facility
The Virtualization Facility option gives you access to special objects of your data sources
that are not common virtual tables. For example, virtualized PARTROOT DBD and PSB
definitions of IMS.
The DV Data perspective is by far the most important, but it is not the only one. At the upper
right of your DVM Studio panel, a button is available (see Figure 7-20) with which you can
access the list of perspectives. The perspectives that are open are shown to the right of the
button. Clicking the perspective button opens a pop-up window in which you can select other
perspectives. If you want to close a perspective, right-click the button of that perspective and
choose Close.
Output panel
In the output panel (as shown in the lower right of Figure 7-22), you now see the results of
queries (SQL Results view) or messages when you connect to a server (Console view).
Connections panel
The Connections view shows open connections. Right-clicking the view allows you to open a
new connection or close an existing connection (see Figure 7-22).
Suppose that you want to add the Debug view to your DV Data perspective. Clicking
Window → Show View → Other... opens a pop-up window in which you see a list of
perspectives and views, as shown in Figure 7-24. Select the Debug perspective and then, the
Debug view.
When you click OK, the view is added to one of the panels in your perspective (in our
example, the Output panel). If you want to preserve this new setting of your view, right-click
the perspective icon in the upper right of your panel and select Save as. You can give your
perspective a new name and create a perspective, or save it under the existing name and
replace the current perspective.
When opened, you see the Common Tools menu (see Figure 7-27 on page 148). Several
useful tools are available, as described next.
Server Trace
When you click Server Trace, the server trace is opened as a view in the Output panel. It is
empty when it opens. Click the blue arrow to start the trace (see Figure 7-28).
The server trace can be viewed after it is started. The arrows on the right side are used for
scrolling. The upper and lower arrows navigate through the trace. The remaining two arrows
scroll up and down page-by-page. The identical server trace can also display by using the
DVM ISPF panel.
Gather Diagnostics
Another feature of the Common Tools menu is the Gather Diagnostics button. By clicking this
button, a .zip file the includes diagnostic information is created, which can be used for
troubleshooting or problem investigation. Click the button and a dialog window opens when
the process completes. The dialog window also indicates where the file was stored.
Services
When the Services menu is enabled, a list of services is shown (see Figure 33).
When done, click Finish and the .xml appears in the generated objects panel (see
Figure 7-36). At the bottom of the panel, you can toggle between the design version and the
source version. The source version can be copied to the configuration file that you want to
use.
The Program Control Block (PCB) indicates which segments in the logical database the
application program can process. It also indicates what type of processing the application
program can perform on each segment. Internally, the PSB, PCBs, logical IMS Data Base
Definition (DBD), and physical DBD are represented to IMS as control blocks. The DBD
describes the name, type, and access method for the database (DEDB, MSDB, HDAM,
HIDAM, HSAM, HISAM, GSAM, SHISAM, or SHSHAM).
You are presented a wizard to select the data set type of IMS. After it is selected, click Next
as shown in Figure 7-38, to select an extraction type from the IMS DBD and PSB.
Figure 7-38 DVM Studio wizard for selecting data sets to virtualize
The process for extraction involves exporting the DBD and PSB to data sets from IMS and
placing them in a well-named partitioned data set (PDS) that contain multiple members, each
of which holds a separate sub-data set.
After the member is located, the data that is stored in that member must be mapped by using
the DVM Data Studio in the explorer tree under the Admin node → Source Libraries.
Figure 7-39 Extracting DBD using the New Virtual Table Wizard
After it is selected, the New IMS DBD Metadata Wizard starts (see Figure 7-40). This wizard
is used to create the necessary metadata for the DVM server to create a logical mapping to
the physical IMS data set. Details, such as the DBD name, source or target library, host
system, server, and port make up the mapping that is needed to virtualize IMS segmented
data into a relational format.
Figure 7-40 Defining DBD metadata or map for IMS segmented data
Figure 7-41 Defining the virtual source library to map DBD metadata
The wizard displays a list of source library members (DBD files) to select from that define the
IMS data set layout. A DBA and system programmer might need to work together to
determine the suitable library members that are targeted for virtualization. You can then
review the contents of a source library before clicking Finish, as shown in Figure 7-42.
Figure 7-42 DBD wizard allows you to view the source library contents
Click Create Virtual Table to name the new virtual table (see Figure 7-44). A best practice is
to use a name that conforms to your local standards. The name of this new virtual table is
DEMO_IMS_BACK03. More fields are available for a description and methods to access and
retrieve data. After the fields on this dialog are completed, click Next.
Figure 7-45 Download the source library member for the IMS data segment
Next, review the virtual table layout for accuracy, as shown in Figure 7-46.
If there is nothing to redefine, click Next, select the target IMS segment, and then, choose an
access method to the data, as shown in Figure 7-47. For IMS, two options are available:
DBCTL or IMS-Direct.
You can also use DVM Studio to run queries against the newly created virtual table. By
default, after a virtual table is created, it is preselected in DVM Studio’s explorer tree for
testing. Right-click the new virtual table (in our example, DEMO_IMS_BAK03) and select
Generate query with * (see Figure 7-48).
This selection creates and issues a select * from DEMO_IMS_BAK03; SQL statement and
displays the result set in DVM Studio, as shown in Figure 7-49.
Also, DVM Studio can be used to create virtual views over virtual tables. This feature is helpful
when performing JOIN operations over heterogeneous data or when running nested
operations against the same table.
After virtual tables are created and discoverable, creating virtual views is greatly simplified,
because the data sets to virtual source libraries does not need to be extracted or mapped.
The virtual table data assets already exist. With virtual tables, the process for creating a
virtual view is similar; that is, by using DVM Studio explorer tree view, right-click Virtual View
and select Create Virtual View, as shown in Figure 7-50.
After right-clicking Create Virtual View, a pop-up dialog appears. It is here where you provide
a name for the view and select the associated library where the data exists. Click Next, as
shown in Figure 7-51.
Figure 7-51 Name the new virtual view in the New Virtual View Wizard
Figure 7-52 Select one or more virtual tables that make up the new virtual view
After this process is complete, click Next and validate the SQL by clicking Validate, as shown
in Figure 7-53.
Figure 7-53 Validate the SQL statement for the new virtual view definition.
DVM Studio returns you to the SQL server tree with the new virtual view displayed. After the
new virtual view appears in the list, you can right-click the view name and select Generate
Query to run a live test against the underlying data for its virtual table, as shown in
Figure 7-55.
Figure 7-55 Generate a query against the newly created virtual view
Figure 7-56 Query results from newly created Virtual View STAFFVS
Jobs also are available to manage the DVM configuration and metadata, which are used
during upgrades or version migration.
The job to create the same virtual table that we used earlier (OFFICES) resembles the JCL
that is shown in Example 7-1. A job card (work item) must be added. Also, all library names,
data set names, and SYSIN parameters must adapt to your local DVM installation.
Example 7-1 Example JCL to create a virtual table by using a batch JCL
// SET LOADLIB=DVM.V1R1.SAVZLOAD
// SET REXXLIB=DVM.V1R1.SAVZEXEC
//DMFEXTR1 EXEC PGM=IKJEFT01,PARM=('AVZMBTPA O'),REGION=0M /
/STEPLIB DD DISP=SHR,DSN=&LOADLIB /
/SYSEXEC DD DISP=SHR,DSN=&REXXLIB
//SOURCE DD DISP=SHR,DSN=WGELDER.COPYBOOK(SALESOFF) /
/SYSTSPRT DD SYSOUT=* //SYSTSIN DD DUMMY
//SYSIN DD *
SSID = AVZ1
FUNCTION = STOD
SOURCE = WGELDER.COPYBOOK(SALESOFF)
START FIELD = SALES-OFFICE
MAP NAME = OFFICES
Next, you run the generated job to the load on the target DVM server. You can specify more
than one map on the extract if wanted, but be aware that wild cards cannot be used. You must
individually list all of the maps that you want to migrate by using a comma-separated list that
uses their exact matching names.
The .xml file that is shown in Example 7-2, WGELDER.DVM.DVMEXTR, does not need to
exist. It is created automatically, if necessary. The same is true for the member name that
holds the load JCL (in our example DVMEXTR). This load job will be created in the JCLLIB
library included in the example JCL.
The extracted job resembles the JCL that is shown in Example 7-2. Again, a valid job card
must be added and all library names, data set names, and SYSIN parameters must be
adapted to your local DVM installation.
For system management tasks that are related to the execution status of DVM, the
getconnectioninfo functions return information from the real-time information features. For
system management tasks that are related to the diagnosis of past systems events, the
getmessages functions return information from the trace data set.
This command returns a standard JDBC (or ODBC) result-set. In the background, each API is
a stored procedure that runs on z/OS within the DVM server. The JDBC or ODBC adapter of
DVM is used to run the API call. The following parameters are needed in the connection string
for the API call:
Hostname
Port
UserID
Password
We recommend that you do not to put more parameters on the connection string. All results
are returned as string fields. Several APIs return information about the other APIs.
7.5 Metadata
The metadata for this technology is contained in the catalog of the objects you created within
the DVM server (mostly virtual tables and views). This catalog works similar to a database
catalog, such as Db2.
Therefore, you can query this catalog as is done with any other virtual table or view in DVM. A
system or database administrator can query this metadata by using DVM Studio, the ISPF
interface, or batch scripting.
This chapter details various techniques for managing performance across the DVM server,
parallelism, zIIP utilization, and query execution.
Similarly, block-fetch of data into system memory requires adequate allocation of cache to
improve run time in accessing data in memory versus more I/O cycles that are associated
with data retrieval from disk.
A general slide rule applies between zIIP specialty engines and general processors. DVM
throttles processing between two types of processors, whereby zIIP engine processing is
restricted. An increase of processing naturally occurs on the general processors. To reduce
the MSU consumption for the system, your environment must ensure that you have adequate
zIIP engines to shift workloads and reduce the overall costs for processing.
Starting with a balanced resource plan simplifies monitoring resource allocation that uses
SMF72 record types. The Resource Group data section of the SMF 72 record provides
information about MIN/MAX capacity across various resource groups:
Percentage of:
– LPAR share
– Processor capacity
Memory limit
MSU/H
Note: These results are from a unique test environment and are for illustration purposes
only. The actual results are specific to your environment.
1 8 0 0 118.96 1
2 8 5 0 98.68 1
3 8 5 4 27.05 1
4 8 5 8 17.14 1
5 8 5 8 20.84 2
6 8 5 10 17.00 2
7 8 5 16 15.73 2
8 8 8 8 13.83 1
9 8 8 8 17.62 2
10 8 8 16 11.72 2
This test was run against an older z13 machine that uses 800 Gigabytes of financial data. The
test achieved approximately 99% offload to zIIP specialty engines. However, tests 2 and 4
were run against identical system resources where the degree of parallelism is set to a value
of 8. This test result in a reduction of elapsed time from 98.68 minutes to 17.14 minutes.
Increasing the number of zIIP specialty engines from 5 to 8 further reduced the overall
elapsed time to 13.83 minutes.
Increasing the number of zIIP engines and the degree of parallelism within the DVM server
can result in performance improvements up to 1,000% for elapsed times.
MapReduce reduces query elapsed time by splitting queries into multiple threads that read
large files in parallel. Each interaction, whether started by a distributed data consumer or
application platform, runs under the control of a separate z/OS thread. A thread is a single
flow of control within a process.
The DVM server can deliver predicate pushdown and filtering to all data sources and
supports heterogeneous JOINs with associated pushdown processing of filters for subqueries
and their respective sources.
VPD allows applications or users to group multiple simultaneous requests against the same
data source in parallel without subsequent data refreshes. This function also allows single or
multiple requests to run with asymmetrical parallelism, which separately tunes the number of
I/O, client, or SQL engine threads.
I/O threads are started when the VPD group is created, and data flows to the buffer. If the
buffer fills before the group is closed, the I/O threads wait. After the group is closed and active
members use the data, the buffer space is reclaimed, and I/O continues.
8.4.2 Example
In this example, we have a large sequential file that must be used by multiple applications. We
want this file to be read only once for operational or performance reasons. A VPD group can
be established for this file. The first query loads the data into cache and subsequent queries
can attach to this VPD group, each specifying their own degree of parallelism.
Table 8-3 Supported data sources and client access using VIPA
Supported data sources Supported client access
Adabas Batch
IDMS DSSPUFI
IMS JDBC
VSAM ODBC
Logstreams IzODA (Spark Scala, Spark Java, Python DB
IBM MQ Series API)
Sequential Db2 Query Manager Facility
Tape IDAA Loader
zFS
IBM Z resources are assigned based on goals that are defined in the IBM Workload Manager
shown in Figure 8-3.
In the service class, you assign each goal and its relative importance and associate the
service class with a specific workload and resource group. The DVM server uses the following
service classes:
AVZ_SCHI ZIIPCLASS=AVZ High priority. This service class is for IBM Data Virtualization
Manager for z/OS critical work. Assign this class goal as close to SYSSTC as possible.
AVZ_SCNM ZIIPCLASS=AVZ Normal work. This class is for IBM Data Virtualization
Manager for z/OS administrative work. Assign this class the same priorities as those that
are used for DB2 master or the IMS control region.
AVZ_SCTX ZIIPCLASS=AVZ Client work. This service class is for client requests. Assign
this class the same goals as those that support the data source for the CICS, IMS/TM, or
DB2 WLM address space.
To enable the WLM policy for the DVM server, the DVM user ID (default: AVZS) can have
UPDATE access to MVSADMIN.WLM.POLICY. If the WLM policy is not defined for the DVM
server, WLM assigns the lowest service class SYSOTHER to DVM workloads, which
negatively affects the DVM server performance.
The DVM server's WLM definitions can also be specified within WLM policies. For more
information, see this web page.
Port sharing does not rely on an active sysplex distributor implementation; it works without a
Sysplex distributor. Port sharing can be used in addition to sysplex distributor operations. As
of this writing, z/OS supports two modes of port sharing: SHAREPORT and
SHAREPORTWLM.
SHAREPORT
Incoming client connections for a configured port and interface are distributed by the TCP/IP
stack across the listeners that use a weighted round-robin distribution method that is based
on the Server accept Efficiency Fractions (SEFs). The SEF is a measure of the efficiency of
the server application (it is calculated at intervals of approximately one minute) in accepting
new connection requests and managing its backlog queue, as shown in Figure 8-5.
The WLMHEALTHREPORT parameter must be set to YES, which is the default setting. An
informational message similar to the following example is available with the server
WLMHEALTHREPORT support to indicate when the health status of the DVM server
changes:
VDB1DB0724I Server VDB1 WLM health changed from 100% to 90%.
Depending on the severity or frequency of errors, the health setting percentage can be
reduced further and extra messages issued. After the health of the server increases, an extra
message is generated similar to the following example:
VDB1DB0724I Server VDB1 WLM health changed from 90% to 100%.
The Server Trace Browse can be used to further investigate abrupt changes in WLM Health
Status. No change is required for the DVM server configuration member AVZSIN00 to support
SHAREPORT or SHAREPORTWLM.
Sysplex distributor provides an advisory mechanism that checks the availability of DVM
servers that are running on separate z/OS images in the same sysplex and then selects the
best-suited target server for a new connection request. The Sysplex distributor bases its
selections on real-time information from IBM Workload Manager (WLM). Sysplex distributor
also measures the responsiveness of target servers in accepting new TCP connection setup
requests, favoring those servers that are accepting new requests.
When the selection of the target stack is complete, the connection information is stored in the
sysplex distributor stack to route future IP packets that belong to the same connection as the
selected target stack. Routing is based on the connection (or session) to which IP packets
belong, which is known as connection-based routing.
Configuring DVIPA and Sysplex Distributor are done within the TCP/IP stack and no
components are in DVM server, which must be configured. After the Sysplex is configured to
enable dynamic linking, any inbound connections can issue a CALL to WLM to check, which
is the ideal stack to which the connection is routed.
Configure DVIPA by using IBM Documentation and define a VIPADYNAMIC section in the
TCP/IP profile, as shown in the following example:
VIPADYNAMIC
VIPADEFINE 255.255.255.0 10.17.100.60
VIPADISTRIBUTE
DISTMETHOD BASEWLM 10.17.100.60
PORT 2200
DESTIP
192.168.1.1
192.168.1.2
ENDVIPADYNAMIC
These statements tell the DVM server the CICS region associated with the corresponding
LOADBALGROUP (CICSJ or CICSL) and how to send the request. The DVM server often
performs this operation in a round robin fashion.
If one CICS that belongs to the LOADBALGROUP becomes INACTIVE (for example, CICSJ),
the DVM server sends a new CICS request to the other CICS (CICSL), which is part of the
same LOADBALGROUP. Many CICS regions can exist for the same LOADBALGROUP.
Db2-Direct
Db2-Direct is a DVM server access method that reads Db2 VSAM linear datasets directly,
outside the Db2 address space, instead of accessing the data through traditional Db2 APIs.
Large data pulls can be performed in service request block (SRB) mode with MapReduce and
VPD features without any prerequisite processing, such as the collection of statistics that use
the DVM command DRDARange. Db2-Direct allows READ-ONLY access to the data. It also
provides a significant benefit in performance and reduced elapsed time in processing
analytical queries.
By default, Db2-Direct is enabled in the DVM server. To disable the Db2-Direct feature for a
virtual table, set the variable OPTBDIDD to 1 in a VTB rule. Db2-Direct can be disabled by
using the following parameter in the DVM configuration file hlq.SAVZEXEC(AVZSIN00):
Disable: “MODIFY PARM NAME(DISABLEDB2DIRECT) VALUE(YES)”
IMS-Direct
The IMS-Direct feature provides MapReduce and parallelism support for accessing native
IMS files. This support bypasses the requirement of having to use native IMS API calls by
reading the IMS database files directly, which is similar to how an unload utility can work. This
method provides a significant performance improvement and reduces elapsed time in
processing analytical queries.
The DVM server determines the best method of access to underlying IMS data. The DVM
server chooses to activate IMS-Direct (native file support) or use IMS APIs. This
determination is based on the database and file types that are supported and the size of the
database. Virtual tables of IMS segments are required. IMS-Direct is supported by the
following types of IMS Databases:
Hierarchical direct access method (HDAM): VSAM and OSAM
Hierarchical indexed direct access method (HIDAM): VSAM and OSAM
Partitioned HDAM (PHDAM): VSAM and OSAM
Partitioned HIDAM (PHIDAM): VSAM and OSAM
Fast Path data entry database (DEDB)
Security is managed on the IMS native data set when IMS-Direct is used. The USERID of the
client connection must have the necessary security permissions for reading the IMS database
datasets. Transactional integrity is not guaranteed because of the absence of record-level
locking during reading activity.
IMS-Direct can be enabled by changing the syntax of DontDoThis to if DoThis, and then,
setting the parameter IMSDIRECTENABLED to YES. The following parameters in the DVM
configuration file hlq.SAVZEXEC(AVZSIN00) are used to enable IMS Direct:
IF DoThis then do
“MODIFY PARM NAME(IMSDIRECTENABLED) VALUE(YES)”
“MODIFY PARM NAME(IMSDIRECTBUFFERSIZE) VALUE(1024)”
“MODIFY PARM NAME(ACIINTSEGMP256) VALUE(200)”
“MODIFY PARM NAME(TRACEIMSDBREFRESH) VALUE(YES)”
“MODIFY PARM NAME(TRACEIMSDIRSTATS) VALUE(YES)”
“DEFINE IMSDBINFO”,
. . .
END
Enabling IMS-Direct
MapReduce must be enabled in the IN00 configuration file when IMS-Direct is turned on. If
you are performing an INSERT, UPDATE, or DELETE, IMS-Direct switches to DBCTL
automatically, even when IMS-Direct is enabled. Users can enable the trace option in the
IN00 configuration file with the following parameters to confirm IMS-Direct is used while
querying the table:
“MODIFY PARM NAME(TRACEIMSDIRTASKSETUP) VALUE(YES)”
For more information about IMS-Direct configuration, see this web page.
The application can use the MaximumBufferSize JDBC property to optimize the query
performance. The buffer size value that the JDBC driver uses is the result of a handshake
between the driver and server.
When the driver logs on to the server, it requests for the MaximumBufferSize. If the
MaximumBufferSize is greater than NETWORKBUFFERSIZE, the server tells the driver to
use the NETWORKBUFFERSIZE in the log-on response. When setting the
MaximumBufferSize value, consider the distance between the client and the server because
network latency can harm performance.
The buffer size that works best for clients and servers that are closer in proximity (low latency)
need not be the buffer size that works best when clients and servers are farther away (high
latency). Figure 8-9 shows how an INSERT statement is sent by using multiple buffers to the
DVM server.
When you run a large SQL INSERT statement or a batch of INSERT statements, the
statements are divided into multiple data buffers that are no larger than the size you specify
for MaximumBufferSize. The buffers are then sent to the server.
When you run a large SQL INSERT statement or a batch of INSERT statements, the
statements are divided into multiple data buffers of buffer size that is negotiated with the DVM
server. The buffers are then sent to the server.
After running an SQL SELECT statement, the server divides and returns the requested rows
of data in buffers that was sized, one buffer at a time. The client can call next() on the result
set until all rows are read. When the next() call no longer has a row to read from the buffer, the
driver issues a request to the server for another row buffer. This cycle continues until the
client reads all rows from all buffers.
The client can experience a pause during the next() API calls when all rows in the current
buffer are read and the driver fetches another buffer of data. This pause can be avoided by
enabling the parallel I/O.
If you use MapReduce with RDBMS or IMS, you must complete metadata repository
configuration requirements.
Server-controlled MapReduce
The data mapping step creates threads that run a query by using more than one DVM server
connection. Each thread maps one connection to one server. The reduce step reads results
on each thread in parallel for each connection, and then transparently presents the data to the
client, as shown in Figure 8-12 on page 183.
MapReduce also can be configured to use multiple server connections. Figure 8-13 shows a
client that is connected to two servers with MapReduce.
Client-controlled MapReduce
In some use cases, the client application can perform the MapReduce process by using
Apache Spark and still benefit from the server’s MapReduce feature. The JDBC driver
supports this use case by specifying a single connection as the JDBC MapReduce
connection. This connection is then available for use by a group of specified connections. The
JDBC driver manages single connections. The client application must aggregate the results
from each connection managed (see Figure 8-14).
The JDBC driver creates a single connection, which is indicated as connection 2 out of 7
available connections. By using a framework, such as Apache Spark, you must create and
manage all remaining connections and aggregate the results from each of those connections.
The DVM server ODBC driver for the Windows platform can be downloaded from the IBM
Support Fix Central download site.
The performance of ODBC drivers with DVM can be optimized by using connection pooling
and optimized fetch. The connection pooling in the Windows platform can be configured
through the ODBC Data Source Administrator. For UNIX and Linux platforms, connection
pooling is managed by the ODBC Driver Manager.
When optimized fetch is enabled, rows ahead of the current row are asynchronously
extracted before the client application requests them. This data is then returned to the client
application in blocks that can be as large as 32 KB. Enabling optimized fetch helps to
minimize network traffic and speeds subsequent fetches because the requested data is likely
already in a returned block.
Optimized fetch is enabled by including the RO=YES connection property in a connection string
(a connection string can be used with a DSN) or by appending the FOR FETCH ONLY clause to
a SELECT statement.
The performance of ODBC connected applications also can be improved by using catalog
functions, retrieving the required data, selecting functions that optimize performance, and
managing connections efficiently. For example, catalog functions often are expensive, and
minimize the use of catalog functions. Avoiding search patterns in catalog functions can
improve performance. Similarly, the use of bound columns (for example, SQLBindCol instead
of SQLGetData) and the use of SQLExtendedFetch instead of SQLFetch can help to improve
the performance
The DS Client high-level API allows an application that is running on z/OS to use a call-level
interface to communicate with DVM to process SQL requests and to retrieve result sets. The
performance of Db2 IDF and DS Client APIs is similar for single user address space
applications. However, Db2 IDF performed much better than DS Client API for multiuser
environments, such as CICS and IMS.
The performance of DS Client API can be optimized with data buffering and MapReduce
features that are similar to JDBC. The number of active client interface servers to process
client requests also can be optimized by tuning the parameter ACIDVCLIENTMIN. The
maximum number of MapReduce tasks that starts to process a request from a DS Client
application can be specified by using ACIMAPREDUCECLIMAX.
Make sure cardinality statistics exist for all columns in all tables.
Code Not Exists over Not In. Both are stage 2 predicates but
Not Exists typically outperforms the Not In, especially if the list
is long.
When joining two tables the execution is faster if the larger table
is on the left side of the join.
Good coding practice When looking for a small set of records, try to avoid reading the
full table by using an index and by providing any possible key
values. You can also use more WHERE clauses so that the fetch
goes directly to the actual records.
Avoid joining two types of columns and lengths when joining two
columns of different data types or lengths. One of the columns
must be converted to either the type or the length of the other
column.
Reduce impacts to the DVM server Do not code functions on columns in predicates.
Level 4 ==========
VIEW4
SELECT A.SR_SYS_ID, A.ACCT_UNQ_ID, A.ACCT_NUM,
CAST(B.TAB2_NAME AS CHAR(255)) FULL_NAME, CAST(B.TAB2_FNAME AS CHAR(25))
FIRST_NAME,
CAST(B.TAB2_MNAME AS CHAR(10)) MIDDLE_NAME, CAST(B.TAB2_LNAME AS CHAR(25))
LAST_NAME,
B.TAB1_ADDR_1, TAB1_ADDR_2, CAST(B.TAB1_CITY AS CHAR(35)) CITY, B.TAB1_PROV,
B.TAB1_POST_CD, B.TAB1_CNTRY, A.S_IND_FLG,
A.INT_DEP_FLG, A.INT_DEP, A.BNF_ID,
A.T_ACCT_TYP_CD, A.L_ENT_CD
FROM VIEW_3A A
INNER JOIN VIEW_3B B ON A.ACCT_UNQ_ID = B.INP_ACCT_UNQ_ID
Level 3 =========
VIEW_3A
SELECT SR_SYS_ID, ACCT_UNQ_ID, ACCT_NUM,
BNF_NAME, BNF_FNAME, BNF_MNAME,
BNF_LNAME, BNF_ADD1, BNF_ADD2, BNF_CITY,
BNF_PROV, BNF_PST_CD, BNF_CNTRY,
S_IND_FLG, INT_DEP_FLG, INT_DEP,
BNF_ID, T_ACCT_TYP_CD, L_ENT_CD
VIEW_3B
SELECT A.INP_ACCT_UNQ_ID, A.INP_DEP_UNQ_ID, B.TAB2_NAME,
A.TAB2_FNAME, A.TAB2_MNAME, A.TAB2_LNAME, A.TAB1_ADDR_1,
A.TAB1_ADDR_2, A.TAB1_CITY, A.TAB1_PROV, A.TAB1_POST_CD, A.TAB1_CNTRY
FROM VIEW_2B A
INNER JOIN VIEW_2C B ON A.INP_ACCT_UNQ_ID = B.INP_ACCT_UNQ_ID
Level 2 ============
VIEW_2A
SELECT A.SR_SYS_ID, A.ACCT_UNQ_ID, A.ACCT_NUM,
A.BNF_NAME, A.BNF_FNAME, A.BNF_MNAME,
A.BNF_LNAME, A.BNF_ADD1, A.BNF_ADD2, A.BNF_CITY,
A.BNF_PROV, A.BNF_PST_CD, A.BNF_CNTRY,
A.S_IND_FLG, A.INT_DEP_FLG, A.INT_DEP,
A.BNF_ID, A.T_ACCT_TYP_CD, A.L_ENT_CD
FROM TABLE4 A
INNER JOIN TABLE3 B ON A.ACCT_UNQ_ID = B.W4_ACCOUNT_UNIQUE_ID
VIEW_2B
SELECT A.INP_ACCT_UNQ_ID, A.INP_DEP_UNQ_ID, B.TAB2_NAME,
B.TAB2_FNAME, B.TAB2_MNAME, B.TAB2_LNAME, C.TAB1_ADDR_1,
C.TAB1_ADDR_2, C.TAB1_CITY, C.TAB1_PROV, C.TAB1_POST_CD, C.TAB1_CNTRY
FROM TABLE1 A
INNER JOIN TABLE2 B ON A.INP_DEP_UNQ_ID = B.TAB2_DEP_UNQ_ID INNER JOIN TABLE5 C ON
A.INP_DEP_UNQ_ID = C.TAB1_DEP_UNQ_ID WHERE C.TAB1_PR_ADDR_FLG = 'Y' AND
UPPER(A.INP_PR_ADDR_H_FLG) = 'Y'
VIEW_2C
SELECT INP_ACCT_UNQ_ID, GROUP_CONCAT(TAB2_NAME, ' AND ' , 255) AS TAB2_NAME
FROM VIEW1 GROUP BY INP_ACCT_UNQ_ID
Level 1 ==============
VIEW1
SELECT A.INP_ACCT_UNQ_ID, A.INP_DEP_UNQ_ID, B.TAB2_NAME
FROM TABLE1 A INNER JOIN TABLE2 B ON A.INP_DEP_UNQ_ID = B.TAB2_DEP_UNQ_ID
By combining View1 and View2C into one sub-select, we reduce overhead of parsing,
validation, and result set caching:
View1
This creates a result set to be used by View2C, including a column that is never used,
A.INP_DEP_UNQ_ID:
View2C
SELECT INP_ACCT_UNQ_ID, GROUP_CONCAT(TAB2_NAME, ' AND ' , 255) AS TAB2_NAMEFROM
VIEW1 GROUP BY INP_ACCT_UNQ_ID
The consolidated select statement JOINs across View1 and View2C by using a unique
common field. In this example, column T5A.INP_DEP_UNQ_ID and
T5B.TAB2_DEP_UNQ_ID are the JOIN columns between the two views:
SELECT INP_ACCT_UNQ_ID,
GROUP_CONCAT(TAB2_NAME, ' AND ') AS TAB2_NAME
FROM TABLE1 T5A
INNER JOIN
TABLE2 T5B
ON T5A.INP_DEP_UNQ_ID =
T5B.TAB2_DEP_UNQ_ID
GROUP BY INP_ACCT_UNQ_ID
This creates resultset1, which is equivalent to the output of view2c that is used by JOIN (D):
JOIN (A) uses T1 and T2 to produce derived table TA
JOIN (B) uses TA and T3 and expands TA to TA+T3
JOIN (C) uses TA+T3 and T4 and expands TA+T3 to TA+T3+T4
JOIN (D) uses TA+T3+T4 and resultset1 and expands TA+T3+T4 to TA+T3+T4+resultset1
JOIN (E) uses TA+T3+T4+resultset1 and T6 and expands TA+T3+T4+resultset1+T6
The WHERE criteria is then applied to TA+T3+T4+resultset1+T6 to produce the final
result.
Complete the following steps to configure the DVM server for use with Apache JMeter:
1. Copy the DVM for z/OS client JDBC driver into the lib directory of the Apache JMeter
installation directory. The JDBC driver for DVM is available with the driver installation
member AVZBIN2.
2. Rename the file to JDBCdriver.zip and extract its content into the lib directory of the
Apache JMeter installation directory.
For JMeter to connect to access mainframe data through the DVM server, a JDBC connection
is required to ensure location and authorization credentials are defined for a successful
connection. JMeter calls this a database connection pool.
After the thread group and connection pool are defined, JMeter uses the database connection
pool to issue a named JDBC request or basically, an SQL statement to be run. Each JDBC
request allows for several different JDBC configuration elements to be used, such as
parameter values, parameter types, variable names, query timeout, and others.
Thread groups also can have a summary report generated for run tasks. The summary report
creates a table row for each differently named request in your test and considers the total time
over which the requests were generated. A sample summary report for JDBC request
VSAM.STAFF is shown in Figure 8-15.
Based on the number of samples set, JMeter runs the JDBC query for the number of
iterations that is defined and provides the average, minimum, and maximum elapsed time and
throughput for the performance evaluation. The performance evaluation can be carried out
further by testing with different query types and number of connections.
The Command Line Tester utility is a preferred approach instead of DVM Studio for verifying
query performance. DVM Studio is not meant to be used for performance testing. (As of this
writing, it is not included in the DVM for z/OS packaged software or as part of PTF
maintenance releases.)
CLT is not a host application that runs on the mainframe; rather, it is a Java-based application
that runs from a command prompt on MS-Windows or a terminal on Linux (see Figure 8-16).
Figure 8-16 CLT output reading a VSAM file with 4,000,000 records
It is encouraged to avoid the use of DVM Studio for query performance evaluation. DVM
Studio includes limits for the number of rows that can be displayed, and the amount of HEAP
space that is available.
Setup
This package comprises the test harness jar files and includes log4j2. The easiest approach
is to copy the JDBC driver jar (for example, dv-jdbc-3.1.xxx.jar) from your production area
to the same directory as these tester jar files.
Basic usage
Run the tool by using Java from a command prompt:
Windows: java -cp .;* com.rs.jdbc.dv.CommandLineTester
UNIX/Linux: java -cp .:* com.rs.jdbc.dv.CommandLineTester <options>
Options
Use the --help option to display the usage options, as shown in the following example (run a
query and display the elapsed time):
java -cp .;* com.rs.jdbc.dv.CommandLineTester –help
java -cp .;* com.rs.jdbc.dv.CommandLineTester --url "jdbc:rs:dv..." --sql "SELECT
* FROM VT"
The URL must include the MapReduceClientCount/MRCC property, and then the tool adds
the suitable MapReduceClientNumber/MRCN setting for each separate connection. The
--verbose flag displays the per-thread fetched row count and other information.
The content in this chapter is not a comprehensive listing of areas to explore when assessing
the size and capacity for a DVM server. Instead, it provides a generalized approach to
capacity planning. Each customer environment is different and governed by different
objectives, workload characteristics, and unique hardware and software needs.
DVM for z/OS can service many virtual tables over 35 different data sources that are running
natively on all versions of z/OS, including z15 for 32-bit and 64-bit instruction sets. The
inherent architecture uses MapReduce’s capability to create parallel threads at the DVM
server level, and the client driver for inbound requests.
DVM for z/OS virtualization architecture is zIIP eligible and works to help balance processing
capacity for specific applications without affecting their total million service units (MSU) rating
or machine model designation. When workload is dispatched onto a zIIP processor, the
processing cycles that are used do not contribute to the MSU count; therefore, they do not
affect software usage charges. Adding applications to IBM Z is more cost-effective, especially
when compared to competing platforms, such as distributed systems or public cloud.
IT capacity planning revolves around how an organization can meet the storage, computer
hardware, software, and connection infrastructure demands over time. Organizations require
flexibility in scaling resources (typically the servers, CPU, and memory).
The DVM for z/OS architecture provides key technologies to facilitate the needs of any
organization. One or more DVM servers can be configured to address the following needs:
Improved user concurrency.
The ability to distribute workloads.
High availability for:
– When failover or relocation of workloads is required
– Outages that are related to a hardware problem, network failure, or required
maintenance
zIIP eligibility; facilitates cost reduction for production environments and provides more
CPU processing availability by delivering up to 99% utilization.
MapReduce improves elapsed time reduction and overall performance.
DVM server memory allows the execution of complex SQL with the benefits of improved
response time. Server memory or cache maintains the metadata (as opposed to physical
data) to enhance SQL processing.
Key-based access methods provide direct access to back-end data files that are servicing
popular databases that are running on the mainframe, such as Db2 for z/OS and IMS.
Key capacity planning areas are specific to the physical server, available storage (on disk and
in memory), network, power, and cooling. Cost drives discussions for new implementations
and projected demand and growth.
Capacity planning must accommodate a balance of workloads that are involved in the cloud,
external service providers or hosted solutions, and an overall increase in the number of
networked devices.
As a result, organizations must monitor their current capacity to establish a baseline and
understand future business needs for any capacity that is needed to scale as the organization
grows. z/OS enables capacity provisioning, workload management, fine-tuning your system
for prioritization, scheduling, and resource allocation through WLM, z/OSMF, RMF, and CPM.
Figure 9-1 DVM server manages both transaction and batch processing
Table 9-1 lists models that are based on the current processing volume for any business and
the maximum resources that are required for the next planning iteration.
The volume of data within a data source and the type of Data Manipulation Language (DML)
operations against that data are key considerations for assessing capacity planning. DML
operations that represent complex JOINs with predicates, GROUP BY clauses, or aggregate
functions require more processing to complete.
It is possible to configure multiple JDBC Gateway Servers along with the DVM server to
access distributed (non-mainframe) data to accommodate high transactional processing or
reading large volumes of data without negatively affecting latency or server processing. The
amount of memory that is allocated to user space can be adjusted to better accommodate a
larger number of users and overall concurrency.
IBM provides foundation tools for monitoring the end-to-end health and capacity of a system
or LPAR. These tools are widely available and likely core to any mainframe environment:
Tools provided by IBM for capacity planning (monitoring)
System Management Facility (SMF)
Resource Monitoring Facility (RMF)
Capacity Provisioning Manager (CPM)
The DVM server can virtualize SMF records to help monitor the overall capacity of the DVM
server and manipulate output through standard ANSI SQL syntax. The DVM server also
features an ISPF window and workload generators to help evaluate the capacity and
performance levels of the DVM server.
A command-line tester utility also can be used to help measure the performance of the DVM
server. This utility can be requested from IBM Support and downloaded for your use. As of
this writing, it is not included in the DVM for z/OS packaged software or as part of PTF
maintenance releases.
Figure 9-2 shows key workload management elements within a service definition, including
service policy, resource group, workload, service class, service class period number, and
goals.
SMF output from all these sections can be virtualized by creating virtual views that contain
SQL queries. The SMF output helps analyze the capacity requirements in terms of CPU or
Storage.
Each SMF record type 249 record contains information about all the work that was performed
on behalf of a requesting client for each transaction. Inbound client requests can trigger zero,
one, or more SQL operations to be run. Many Subtype 06 SMF records can be written in
high-volume environments because a single SMF record is created for each transaction:
Detailed CPU time based on Server (client/server request)
Detailed CPU time based on Server (non-SOAP web request)
Detailed output on each SQL statement run
CPU and zIIP details based on each query by combining data from Type 01 and Type 0
The DVM ISPF interface (see Figure 9-3) provides more information about the type of request
that is coming into the DVM server by tracking the source of these inputs, the time it takes to
run, and so on. This information is useful and helps administrators to understand workloads
that are running on the DVM server.
Organizations should consider hardware upgrades, use of zIIP and zAAP specialty
processors for processing improvements and optimal performance.
Much of the planning for the DVM server has more to do with configuration and use, rather
than entirely on increases in existing or additions of new workloads. To determine the optimal
number of servers that is needed to manage workloads, an iterative approach is
recommended, in which the number of DVM server instances can require adjusting. The
number of DVM servers generally ranges 1 - 3 for an environment, based on the workload
demands.
This example configuration allowed for the ability to easily scale across multiple servers in
their simulated environment.
This example also is a simulated workload that is driven by using an SQL load testing tool,
based on the CPU configuration, data (VSAM), and SQL complexity. This example is for
reference only and specific to this customer environment and set of requirements.
Number of DVM servers Perform load balancing with WLM over multiple DVM servers that use the same port
Distribute workloads across multiple DVM servers
Investigate implementing High Availability that uses VIPA
Access method For keyed data that use Database Control (open thread access is preferred)
Open Database Access (ODBA) for concurrent access to data
Use IMS direct or DB2 direct for read-only access to bypass related subsystems
Distributed Relational Database Architecture (DRDA)
General processors Recommend a minimum of two general processors for an initial configuration. Free
capacity in GPA buffer to protect against unexpected workload spikes, server outages, or
performance regressions in your code. It is recommended to have more free capacity of
30%.
zIIP specialty engines Improves latency and transition of GP processing to zIIP processors
Workloads Use workload based server definitions (transactional versus large data pulls)
Group data sources dictated by the business model
Write SQL statements whose result set size does not exceed the LPAR configuration
DVM for z/OS supports IBM Parallel Sysplex, which is a cluster of IBM mainframes that act
together as a single system image. Sysplex often is used for Disaster Recovery and
combines data sharing and parallel computing to allow a cluster of up to 32 systems to share
a workload for high performance and high availability.
Specific usage for IMSplex is not supported as of this writing. IMSplex is a set of IMS systems
working together to share resources or message queues (or both) and workload. Basic
support exists for ODBA, which is needed to support IMSplex, but is insufficient for a
connection to IMSplex with access to multiple IMS regions.
Database administrators can stop and start servers as needed for maintenance or addressing
the need for scalability of workloads. Flexibility also exists for managing across sysplexes or
for use in providing a highly available solution.
No significant use or accumulation of resources is associated with DVM servers that require
that they be restarted routinely or as part of scheduled maintenance.
The DVM for z/OS architecture can start and run multiple DVM servers concurrently to help
address high levels of user concurrency or thread concurrency. The use of multiple DVM
servers is easily managed through scripting and can be performed in minutes to help satisfy
peak operations or general scalability for business applications.
The number of virtual tables does not degrade performance, but the number of virtual tables
that are joined into a complex SQL can exceed the total memory that is allocated to the SQL
engine. The amount and length of columns, data types, and the number of records that are
materialized in physical memory must be monitored.
ZIIP eligibility varies based on the access path to underlying data structures, and
DVM-specific operations that are performed on that data. Offload also varies across DBCTL,
Java, and combinations of z/OS Connect, IMS Connect, and IMS-Direct, for example. Each
data source has a specific range of zIIP eligibility.
IMS operations are general processors that are bound for DBCTL; however, subsequent
processing of that data that is run within the DVM server (for example, JOINs) has a degree of
zIIP-eligibility. Based on experience, approximately 40% of total SQL operations can be
offloaded for zIIP processing.
Because the calling method (DRDA) is restricted to general processes, the zIIP offload is
attributed to DVM instrumented code. This processing is separate and independent of any
initial IMS operations.
zIIP-eligible workloads use the IMS Direct access method to perform large data pulls. The
DVM server processes up to 99% of eligible processing when zIIP processors are available
on the IBM Z system. Highly transactional workloads that are running against IMS data
perform better by using the DBCTL access method.
When new applications are not at their full productive state, it is difficult to gauge the overall
effect. For some time, the workload on IMS increases as existing and new applications run
simultaneously. When new workloads are driving highly concurrent threads or users, you
might want to add a zIIP processor to avoid any CPU processor contention.
MapReduce does not have the same effectiveness for SQL statements that use Order By or
Group By clauses.
Table 9-4 Sample test results for zIIP usage for virtualized data
Row label Sum of CPU Sum of zIIP time Sum of IICP Sum of zIIP %zIIP eligibility
time (ms) (ms) time (ms) NTime (ms)
Table 9-5 shows how parallelism allows for the maximum use of GPA and zIIP, which provides
organizations with the best use of resources for persisted data with no changes to application
or environment.
Test cases 4 and 2 in Table 9-5 feature similar configurations.
The degree of parallelism of 8 reduces the overall elapsed time from 89.68 minutes to
17 minutes.
Adding three zIIP specialty engines that are shown in Test Cast 8 reduces the elapsed
time to 13.82 minutes. This change results in an 85% improvement in query execution
time.
1 8 8 8 118.96 1
2 8 5 0 98.68 1
3 8 5 4 27.05 1
4 8 5 8 17.14 1
5 8 5 8 20.84 2
6 8 5 10 17.00 2
7 8 5 16 15.73 2
8 8 8 8 13.83 1
9 8 8 8 17.62 2
10 8 8 16 11.72 2
If a full load of Db2z is required, assess the ability to perform a Db2 direct read, which results
benefits in terms of speed (elapsed time) and zIIP utilization because it is SRB enabled.
Table 9-6 on page 206 lists some sample timings that are based on IUD operations that use
the Integrated Data Facility (IDF) access method with DVM. The results in the table show
some variation regarding access methods to mainframe and non-mainframe data sources.
Load balancing is not apparent to the client application. An application uses a port number to
connect to an instance. Then, the instance determines whether it or a separate instance is
better equipped to handle the session. If another instance is a better choice, the session is
transferred.
This client achieved their objective with each DVM server running up to 300 concurrent
threads before measurable degradation began to occur. This customer also varied the SQL
rate per thread up to 4,000 statements per second, which met the customer response time
requirements. By using this approach, they easily scaled across multiple servers.
This simulated workload was driven by using an SQL load testing tool. It also was based on
the CPU configuration, data (VSAM) and SQL complexity. Other factors can be significantly
different from what other customers experience.
These numbers are for reference only and might not be similar to results that other customers
achieve.
List all of the data sources that you need to fulfill the requirement. For more information about
conducting a Project Survey, see Appendix A, “Project survey” on page 225.
This survey approach is a good way to ensure that you are considering all aspects of data
virtualization. After you produce a list of data sources, ensure that you have read/write access
to the data.
For data sources that do not have their own metadata, such as flat files or VSAM files, you
need a copybook to map the data. These copybooks are always stored in separate libraries
and you need access to these libraries. Read access is enough to get started.
Also, naming conventions are important when migrating objects into a production
environment. The application developers can provide standards and conventions for their
particular business applications.
You also need enough test data for development purposes that balances out production-like
samples for the amount and variety of data on which applications perform SQL operations.
Ensure that the data that is used is of high accuracy. Many times, it is possible to obtain a
subset of masked production data to initially populate your environment. This process
ensures that your test environment emulates some key characteristics of your system of
record (SOR).
For example, the following query successfully runs by using the DVM server:
SELECT * FroM table LIMIT 10;
However, a similar query using the TOP operator is not currently supported by the DVM
server.
SELECT TOP 10 * FROM table;
Many times, system programmers know the copybooks, their layout, and where they map to
data on disk. For more information about how to create virtual tables by using DVM Studio or
the ISPF interface for DVM, see Chapter 7, “Managing and monitoring” on page 131.
You can select a base Virtual table to include as part of a new virtual view, and then modify
the DDL for the new view to include all other virtual tables. You also can check to validate the
DDL syntax before finalizing your new Virtual View.
You can determine which columns and the subset of data are needed for extraction. Nearly all
extract, transform, and load (ETL) data workflow can be written by using SQL syntax for the
selection, cleansing, and curation of data. In many ways, the use of predefined data models in
the form of virtual tables and views allows for greater sophistication in your design.
Right-clicking the virtual table or virtual view shows the Generate Code from SQL option (see
Figure 9-4).
DVM Studio adds to programmer productivity by allowing users to automatically generate and
modify queries. DVM Studio provides the ability to compose code snippets for generated or
modified queries into a range of programmable APIs, which speeds up the time to prototype
applications for development and testing purposes.
The generated code includes associated object handling, Java classes, the defined SQL
statement, and JDBC connection string with user credentials for successful execution.
Generated code can be tested immediately in DVM Studio by placing the cursor anywhere in
the Java code and then, right-clicking and selecting Run as → Java application. The result
is shown in the Console view (see Figure 9-6).
Deploying applications in the test environment requires that users have suitable credentials
and access to data sources. Also, it is important that the required metadata from the DVM
server that is associated with virtual tables and views represent the original data from the
development environment.
Note: If a different user uses this code than when the Java code was created, the Java
code must regenerated by using the correct user credentials.
It is recommended that your test environment mimics your production environment as much
as possible. Therefore, the test data must be identical to the production environment with data
obfuscation or masking as needed to ensure suitable data privacy and protection of
potentially sensitive data.
The chapter works through project definition and best practices and includes the following
topics:
10.1, “Defining successful projects” on page 214
10.2, “Defining the approach” on page 214
10.3, “POC checklist” on page 216
Setting timelines, scope, focus areas, and success criteria are “must-haves”.
IBM provides key data assets on its IBM Demos website that help users to explore, learn, and
try various IBM solutions. DVM for z/OS includes a guided tour and several videos that are
presented by technical experts that walk you through common use cases, highlighting key
capabilities.
Figure 10-2 IBM Data Virtualization Manager for z/OS landing page
IBM offers a full range of approaches where you can learn more about DVM for z/OS, such as
self-service demos, deep dive discussions with product experts, and proofs of technology or
concept.
Contact your IBM client representative to schedule a demo or to get more information about
DVM for z/OS. Consider the following points:
IBM Demos provide a set of useful videos, product tours, and hands-on labs that simplify
and offer the ability to exercise technology without levels of investment that are required
for local infrastructure, capital, and operating expenses.
Deep dive presentations by IBM and Business Partners help to orchestrate a lower-level
discussion that describes how DVM for z/OS matches well for their environment. These
presentations are a perfect time to uncover the primary use cases.
Deep dive Demos by IBM and Business Partners are well equipped to demonstrate
various functions.
Proof of Technology
IBM has internal lab environments that can be used to demonstrate capabilities and make
available on-Z and off-Z sources by using modern APIs, such as SQL, JSON, HTTP, and
REST.
Proof of Concept (POC)
Not every project requires a fully invested project plan to prove the value to the business.
A real concept requires that the business map a project with key milestones, systems,
data, infrastructure, and human capital to become realized.
10.3.1 Timelines
When defining timelines for the project, consider the following best practices:
Target 90 days maximum for proving your project.
Use weekly checkpoints, which are critical to ensure that no issues exist.
Keep the pulse of key stakeholders throughout the project schedule.
Have successful milestones.
10.3.3 Focus
When defining the focus, keep it on track. Consider the following points:
Focus on the business use case.
Technology is important specific to the configuration.
View the project entirely as a solution, not as a “product”.
Project manager Provide business physical and technical resources to complete David
(business) the objectives of the POC. Facilitates scheduling of technical
resources, timeframes, POC technical goals, and objection
handling.
Use cases Participate and support use cases execution and evaluation. Suali
(business)
Database IBM Db2 for z/OS experts or those team members who are Ankar,
administrator responsible for DVM integration with Db2 for z/OS. Lei Ping
(business)
Product Technical contacts providing on-site or remote technical support Andrew, Bill
specialist for business POC. Help to install and configure DVM and to assist
(technical team) use case execution and evaluation. Provide technical knowledge
transfer.
Define a detailed timeline and project plan to maintain periodic status calls and checkpoints.
The success or failure of your project might depend on this frequency. A weekly call for
30 minutes at a time is recommended to help speed up the resolution of issues.
10.3.7 Installation
Installation of the DVM SQL engine and administration Studio is simple and straightforward.
IBM DVM for z/OS SMP/E installation is quick and DVM Studio is an MS-Windows
point-and-click installation that is fast and easy.
10.3.8 Configuration
During the configuration process, consider the following tips:
Always perform IVP sample VSAM virtualization by using DVM Studio.
Upon start, be sure to read the DVM started task SYSOUT carefully.
Only configure what you need:
– Change or activate only the required IN00 sections.
– JGATE does not need to be configured if no external or relational data sources are
involved with the project.
– Db2 for z/OS does not need to be configured if it is not part of the project, regardless of
the benefits that are realized by IDF or Db2 UDTF.
Also, the project team should ensure that all endpoint client access is clearly identified with
the associated access method and data flow, including all staged and non-staged read/write
activity.
You also want your project to be configured in a non-production environment if at all possible.
If the number of zIIP processors is limited, DVM workloads can be run by General Processor
engines. If performance testing is unavailable, work to ensure that your tests are measurable
and well-defined.
Limit the number of use cases to two if possible and allow for up to two separate tests for
each use case; for example, use two Db2 for z/OS tables and two VSAM virtual tables.
Remember that your project is not a surrogate for production-ready development and testing.
When working with VSAM and sequential file sets, limit the scope to the number of virtual
tables, instead of data segments, because hundreds of copybooks can exist that are
associated with a single VSAM file. Application developers must be involved in your project
and sample copybooks and data are the first requirement to validate the data set and
determine any invalid data or data types.
Create a full disclosure report and present it to key decision-makers that includes the
following information:
Summary of the project scope
Clearly reemphasizes the success criteria and results obtained
Visuals (performance charts, metrics, and so on)
Customer user feedback (including direct quotes)
Review the report with the technical sponsors for the project before delivering it to key
stakeholders in a larger audience. Work to ensure that all agreement details were met for the
overall sentiment of success criteria and results.
Also, performance places a critical factor, but always incorporate the user experience and
overall usability of your solution. Collect the following types of outtakes from your project that
and present them to the business:
Setup is simple and straightforward for those with TSO access.
Mainframe access was immediate.
User experience was identical regardless of data source.
Benefits that are derived from zIIP specialty engine offload without having to create
special processing.
The data virtualization service brings great value for generating shared access to “difficult to
access and work with” data that is on IBM Z. DVM for z/OS dramatically reduces the work that
is associated with ETL operations by allowing direct real-time access to persisted data. This
data type represents the Source of Record for many critical business applications.
DVM for z/OS supports z/OS and non-z/OS data sources and can deliver scalability, reliability,
and extreme performance through its unique machine-specific optimization. DVM also
supports read and write SQL operations in parallel by using MapReduce.
DVM delivers zIIP-eligibility, which works to offload MIPS from General Processors that in turn
reduce the cost for running production applications. DVM lowers total cost of ownership
(TCO), provides high return on investment (ROI), and fast time to market (TTM), which are
critical for driving business agility.
Service level agreements or objectives also influence infrastructure, topology, and overall
design decisions for data virtualization needs. In many instances, downtime is an inhibitor to
introducing new technology to a technology stack.
One of the strengths of this solution is its simple and flexible deployment of the solution, which
is resident to the IBM Z. The program features high availability capabilities that ensure
resiliency and improved fault tolerance when network, software, and hardware failures occur.
It also facilitates update or refresh software functions by allowing for zero downtime for
software refreshes or fixes.
DVM is IBM Z-resident software that is required for installation to a designated LPAR. Specific
configurations that need high availability (HA) requires multiple installations and
corresponding licenses to support failover and failback when an outage or disaster occurs.
The solution includes the flexibility to run multiple DVM servers concurrently to aid in overall
performance. Therefore, file system requirements must be sized to support a range of DVM
servers, based on transactions per hour and the amount of user concurrency.
Use cases continue to surface as the data landscape changes in the market and customer
environment. The following examples are of primary use cases in use today:
Real-time access to disparate data across z/OS and non-z/OS data sources
Modernize mainframe applications to enable web-based and mobile applications for
access
Centralize access with control to drive governance for a trusted view of all enterprise data
Low-level data integration that enables copying data by way of SQL-based operations
Use data virtualization as a methodology for application development and incubation of
production-level prototypes
Hardware configuration
Specify the memory requirements as real storage that is assigned to an LPAR in Gigabytes. If
the product is installed on more than two LAPRs, specify the largest and smallest amount of
configurable memory that can be used.
Table A-1 can be used as a template for capturing your development, test, and production
environments.
z/OS environment
Specify support software programs that are targeted for use with data virtualization. Add
configurations by using Table A-2.
Security
ENQ manager
VSAM RLS
Innovation IAM
CICS
Informatica PowerCenter
Microsoft Excel
Microsoft Power BI
Tableau
Data sources
Specify the data sources that must be virtualized and available to the mainframe, Java, ETL,
analytic, and reporting tools by using Table 4.
IDMS Azure
IBM MQ SMF
MySQL SYSLOG
Oracle Teradata
This definition is intended to preserve the transaction consistency of the data. Data
virtualization supports all create, retrieve, update, and delete operations that are supported
by the underlying data sources. This support includes data type mapping, function mapping,
and optimized transformations into virtual tables and virtual views.
The DVM solution receives client requests, performs costing calculations and parsing
operations to best optimize the round-trip response and execution time for a workload.
Applications can be select subsets of data or a complete data set through a subset of virtual
tables or virtual views within or across schema. Processed workloads can have multiple
query plans that include transform, pushdown, and JOIN operations in specific frequency and
volume daily. These applications are critical to business operations and this solution works to
optimize query execution and response time for requesting applications.
Workload1 Daily volume: 24-hr period Avg. TXN size Seconds Milliseconds Describe workload
{sample} MB/TB 8-hr workday Total # of Tables Minutes Seconds Concurrency
Batch Load % Inserts Hours Minutes Type of queries
% annual Frequency % updates Days Hours Columns per Table
growth Timeframe % deletes
Workload2
Workload3
Workload4
This example programmer code that is shown in Figure B-1 is representative of the output for
the included reusable code snippet.
Figure B-1 Sample output for the included reusable code snippet
The example output in Figure B-2 is representative of output that includes all available
columns for two virtual tables over VSAM (STAFFVS) and zFS (SYSLOGD) data sources
Figure B-2 Sample output of Java code snippet with all columns
show("----------");
show("Connecting using url ");
show("url = " + url);
conn = DriverManager.getConnection (url, props);
show("Connected !");
show("----------");
conn.setAutoCommit(false);
return conn;
}
public static void main(String[] args) throws Exception
{
DVMMetadataTablesApp dvmApp = new
DVMMetadataTablesApp();
dvmApp.getConnection();
for(int i=1; i <= 1; i++) {
dvmApp.show("Run " + i);
dvmApp.fetchMetadata();
dvmApp.show("");
}
dvmApp.closeAll();
}
When you encounter problems with your environment or application, it is always good to know
where to start and how to characterize the situation. This appendix focuses on initial
assessment, must gather, and server trace practices in displaying, viewing, and gathering
details.
If IBM Support is required, some direction also is provided specifically to “must gather”
materials.
For specific technical problems or an inability to procure PTFs or updated client components,
open a problem ticket with IBM Support.
The following questions are useful to assess the problem and overall context:
Is this a new or existing application?
Has anything changed in the environment, application, or configuration?
If failure occurred, what is the display or recorded message?
Did the problem result in a down or unproductive system?
Did the problem occur in a Test, Development, QA, or Production environment?
Is the problem encountered delaying a production deployment?
What is the timeframe for a resolution to your problem?
Can you reproduce the problem and capture output to support your experience?
If your problem can be reproduced, can you provide the exact steps for reproduction?
Can sample SQL or source code that affects the problem be provided?
PTF Level
The PTF level can be found that uses the sample job that is shown in Example C-1.
The trace adds records to a trace buffer that is maintained in virtual storage. When a session
completes, the trace records are automatically saved in a VSAM data set.
The trace is accessed from menu selection B in the ISPF interface, as shown in Figure C-1.
Figure C-1 Selecting Server Trace from the DVM server ISPF panel
Paging through the tutorial displays DISPLAY, LOCATE, FIND, RFIND, and PROFILE.
Double-clicking any of these words ZOOMs into details for the command. For example, select
DISPLAY to see more information about that command, as shown in Figure C-3.
Using the ISPF panel to display and view the server trace
Entering 1 at the command prompt in the Server Trace ISPF panel displays the latest Server
Trace that was written, as shown in Figure C-4.
The display shows the timestamp for the trace record without the date the trace record was
written. Running the following command at a command-line prompt displays date and time in
DDMMM HH:MM:SS format, as shown in Figure C-5:
D DATE TIME
Figure C-6 Server Trace display with detail for SQL statement
This type of Server Trace information is helpful when working with IBM Support. At times, the
system administrator might need to capture a Server Trace for a specific situation that
occurred or can be re-created in a separate environment and send it for further analysis.
Tip: Capturing more lines before and after the problem error as a good practice.
Substitute SS for PP for zoomed trace to get all of the underlying content you get by
double-clicking.
3. Run the LIST command from the Server Trace command prompt.
4. Specify option 3 to keep the list data set and allocate a new one.
5. Download the list data set and attach the file to your IBM Support problem ticket.
Figure C-7 SQL results error message from the SQL tab
The SQL results show the error Unable to process map ASTAFFVS. Also of interest to IBM
Support and developers is the version number of the JDBC driver:
[DV][JDBC Driver][3.1.201912091012]
This process is done by enabling the DVM Instrumentation Server in the IN00 file, as shown
in Figure C-10.
Figure C-10 Edit the INOO file to enabled the DVM Instrumentation Server (SIS)
Figure C-12 shows an example of combining the logs from two different LPARS. The fields
inside the IF statements are used to identify which records come from each LPAR.
Figure C-12 Combined Server Trace logs from two DVM servers over two LPARs
Figure C-13 shows combined Server Trace output for both DVM servers. RS28AVZ1BERT is
one LPAR, RS22AVZ1ERNIE is a second LPAR, and SISLOCALRS28 is the local DVM
server for the present environment.
Entering keywords into the search field always is the first recommendation when you
encounter a problem in your running environment.
Over 150 Techdocs about DVM for z/OS are available that can assist in solving your technical
issue before an IBM Support problem ticket is opened, as shown in Figure C-14.
Table 1 lists frequently encountered problems when first starting to work with DVM for z/OS.
This shortlist represents topics that are available by searching the web. Links to these
Technotes can be found in the Troubleshooting and Diagnosis Technote.
Data How to control the number of rows returned on a SQL query using the Data Virtualization
Manager ODBC driver?
SSL How to resolve the "Communication link broken" and "Invalid HTTP headers - NETWORK
I/O ERROR" error when setting up server only SSL with Data Virtualization ODBC Drivers
Setting up Driver when using an SSL certificate to access Data Virtualization Manager
JDBC Gateway server JGATE running on UNIX System Services gets "Undefined Error" when connecting to
Oracle
How to launch JGate as a started task?
Change JGATE Memory Size on Startup
How to connect from JGate to other databases using TLS1.2
Server trace How to eliminate XTX messages to be written to Server Trace browse
How to send messages from a Natural program to Trace Browse using ACI API
Service ISPF activity How to Enable/Populate “Interval Activity” (Option F.1) in Data Virtualization Server ISPF panel
display
Also, DVM for z/OS includes a new IBM Community that is available to submit questions,
download sample videos, and so on. IBM also produces IBM demonstrations that can help
introduce new users to the product through demos, product tours, and hands-on labs:
IBM Data Virtualization Manager for z/OS Community
A valid IBM user ID and password is required to log in to the IBM DVM Community for
access to various resources, white papers, videos, and so on, to learn more about
different uses of the technology and interact with other community members.
IBM Demos for IBM Data Virtualization Manager for z/OS
SG24-8514-00
ISBN 0738459984
Printed in U.S.A.
®
ibm.com/redbooks