In this post I would like to share with you my impressions about the book Oracle 11g Streams Implementer’s Guide by Ann L. R. McKinnell and Eric Yen. But, first of all, I would like to warn you about two things. First, Packt Publishing, the publisher of this book, asked me, a long time ago, whether I was interested to read the book and publish my impressions on this blog. Since my response was affirmative, they sent me a copy of the book. As a result, here we are… Second, I’m not a Streams expert. By reading this book I just wanted to review the status of the technology as of Oracle Database 11g Release 2.

Preface

Yes, let’s start from the beginning. The important information provided in this chapter, specifically, in the “Who this book is for” section, is that the authors wrote the book for people having good familiarity with Streams. That, honestly, surprised me a bit. Two are the reasons. First, just before providing this information the authors spent few pages introducing basic concepts about replication and distributed systems. Second, on the back cover you can read “This book is for users who have implemented, or are about to implement, a distributed database environment using Oracle Streams replication. The reader is expected to have an intermediate understanding of Oracle database technology”. Anyway, it’s not a real problem when you know it.

Chapter 1 – All the Pieces: The Parts of an Oracle 11g Streams Environment

As the title indicates this chapter examines the different components of Streams and how they work together. It starts by describing the different architectures supported by Streams. Then, the Streams processes (capture, propagate and apply), the queues used to transport changes and the instantiation of the target objects are described. After that, details about the LCRs and the different SCNs that are used by Streams are given. The chapter ends with a short introduction of XStream. The structure is in my opinion suboptimal. Some topics are discussed several times and some others (the advanced features of Streams) are shortly introduced and references to the following chapters are given. It would be much better if the authors had focused on the basic topics only. In addition, sometimes they give information that, at this point, it is not relevant in such a chapter. A good example is the short description of XStream (which is one and a half pages long). One third of the space is used to give a list of views that supply information about XStream. What’s the purpose of such a list in a section that should introduce a feature to a reader?

Chapter 2 – Plot Your Course: Design Considerations

This chapter provides not only a list of questions that requires answers, but also a list of factors to be considered during the planning and designing phase. While the provided information is good, I think that the authors does not share enough they experience in this area. For example, when they point out that additional hardware resources are required (this, I hope, is no surprise for anybody…), I would like to know, based on few examples covering different architectures, what they experience is. And, yes, I am fully aware that every system is different. But, in my opinion, few examples could be very interesting for most readers.

Chapter 3 – Prepare the Rafts and Secure Your Gear: The pre-work before configuring Oracle 11g Streams

First of all I have to say that this chapter has the longest title I have ever seen in a book. It goes without saying that this is a fully irrelevant comment! This chapter starts by describing the importance of the network infrastructure in a Streams environment and which tools can be used to check that everything works fine. It continues by describing the relevant initialization parameters for a Streams environment, how to set the logging features, and how to setup the database links, users and tablespaces needed by Streams. The chapter terminates by describing how to instantiate a target site. Even though the chapter contains plenty of useful information, in my opinion the authors, again, do not share all their knowledge in this area. For example, I really miss actual advices on how to check the information provided by the different tools that are discussed.

Chapter 4 – Single-Source Configuration

This chapter describes how to setup a single-source Streams environment between two databases. The chapter is basically composed of two parts. The first one describes how to perform such a setup with Enterprise Manager. Simply put, there is a print screen of every step with some comments describing its purpose. One thing that disturbed me at this point is that the figures are not numbered and, unfortunately, not always provided in the right sequence. As a result, it is not always obvious to understand to which figure the comments are related. The second part provides the commands used to perform the same setup without using Enterprise Manager. This is, in my opinion, the most interesting part. The reason is simple; I like to know what the commands that are needed to carry out such a setup are.

Chapter 5 – N-Way Replication

While the previous chapter covered a single-source configuration, this one describes how to setup an n-way replication. For that purpose, the commands used to setup a 2-way replication are provided and explained. While most of the content of the chapter is interesting, I think that not enough information about conflict resolution is provided. In fact, such an important topic deservers much more than three pages that only provide general advices on how to tackle it.

Chapter 6 – Get Fancy with Streams Advanced Configurations

This chapter provides detailed information about the advanced features of Streams that are shortly introduced in chapter 1. The covered topics are synchronous capture, subsetting, tags, rules, downstream capture, change tables, heterogeneous configurations and XStreams. The content is generally good and lots of examples are provided. Unfortunately, there are matters that should be explained more in detail. For example, at page 241 you can read, two times, the following sentence: “Ideally, the current user is the Oracle Streams Administrator”. Honestly, without more information, I don’t know how to interpret such a sentence. In my opinion, it is in fact necessary to know why they provide such an advice and what happens when someone do not follows it.

Chapter 7 – Document What You Have and How It Is Working

The title of this chapter set some expectations about its content. And, I have to admit, at first I was puzzled from what I read. And, be careful, I’m not saying that the content is bad. I was just expecting something else. Specifically a content building on the information about documentation described in Chapter 2. Instead, this chapter provides a kind of reference of ways to extract information about the Streams environment. For that purpose it describes several views/queries/scripts and the DBMS_STREAMS_ADVISOR_ADM and UTL_SPADV packages. What I missed in some situations are some examples of the output generated by the described techniques. E.g. I was disappointed to not see what kind of output the UTL_SPADV.SHOW_STATS procedure generates. I know, I can run it myself… But, for doing so, you need a computer. And, honestly, I’m not used to read books in front of a screen.

Chapter 8 – Dealing with the Ever Constant Tides of Changes

This chapter provides a lot of interesting information about change management and troubleshooting. I especially liked the part describing the 13 most likely failure points. Where, for each of them, hints on how to assess the situation and to fix the problem are given. What I especially liked in this part is the “command-line” approach. If you are a GUI user, don’t mind. As in other chapters of the book information about the utilization of Enterprise Manager is also provided. The chapter ends with the description of other tools, hints and tips for dealing with problematic situations.

Chapter 9 – Appendix and Glossary

The last chapter starts by providing some information about Oracle Streams Commander. But, unfortunately, it does not provide information about the features it offers. Basically, they just point out that a tool exists and where it can be found. Some particularities about running Streams in a RAC environment are also given. This is, in my opinion, the only interesting part of this chapter. After mentioning that Oracle bought Golden Gate, the chapter ends with a useless glossary. I say useless because in it you find either terms that were already defined in a much better way in chapter 1 or initialization parameters that, honestly, do not have their place in a glossary. And, in any case, their description can be quickly found elsewhere in a previous chapter thanks to the index provided at the end of the book.

General Remarks

In the preface the authors introduces a series of conventions to be used throughout the book. Unfortunately, they are not consistent at all in applying them.
The book contains plenty of references to the Oracle documentation. This is a good thing. Unfortunately too many of them are useless. For example, some of them are something like the following “For more information refer to the Oracle Streams Concepts and Administration Guide and Oracle Streams Replication Administrator’s Guide”. However, in other cases the section where the information is contained is explicitly provided.
In my opinion the authors and the publisher didn’t invest enough time to perfect the text. In fact, not only I found about three dozen of typos (and, let’s face it, I was not looking for them…), but also the layout of some chapters could be greatly improved.

Conclusion

Even though Oracle 11g Streams Implementer’s Guide is a useful book, the authors missed the opportunity to write a very good book. If you are looking for a book about the latest version of Streams now, buy it. If you can wait few weeks, I would suggest you to also check out Kirtikumar Deshpande’s Oracle Streams 11g Data Replication.