<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>DBBuzz</title>
	
	<link>http://www.dbbuzz.com</link>
	<description>All about data management</description>
	<lastBuildDate>Mon, 27 Feb 2012 13:49:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DBBuzz" /><feedburner:info uri="dbbuzz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>More “cool” data migration strategies!</title>
		<link>http://feedproxy.google.com/~r/DBBuzz/~3/lTKM19eUpXs/</link>
		<comments>http://www.dbbuzz.com/2011/jeyabarathi/more-cool-data-migration-strategies/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 15:55:11 +0000</pubDate>
		<dc:creator>Jeyabarathi(JB) Chakrapani</dc:creator>
				<category><![CDATA[DB2 LUW]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[Migration]]></category>

		<guid isPermaLink="false">http://www.dbbuzz.com/?p=334</guid>
		<description><![CDATA[In my previous article, I talked about how to use the DB2 HADR feature as a tool to migrate data. Here is another cool method I discovered (entirely by accident) during one of my hair tearing migration sessions with the application team. I must say in all fairness the application team had more of a [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous article, I talked about how to use the DB2 HADR feature as a tool to migrate data. Here is another cool method I discovered (entirely by accident) during one of my hair tearing migration sessions with the application team. I must say in all fairness the application team had more of a tough time than me, but once I discovered this cool feature in DB2  and tested it, I was able to sit back, relax and enjoy all the hustle and bustle that the application team had to go through.<span id="more-334"></span></p>
<p>This was not one of your conventional migrations. It came with all kinds of challenges for all the teams handling it. The application (a mission critical production application) had to be migrated to a different platform and hardware. The database had to be migrated to a higher version of DB2 from version 8.2 and to a better server and hardware.</p>
<p>These were some of the challenges that the migration teams faced:</p>
<ol>
<li>To start with, the source server hardware (an old antique) was completely different from the target server( a P5) which meant tape incompatibility, so that meant we cannot use TSM tapes to restore anything.</li>
<li>Next, there was not sufficient disk space on the source server to pull the backup image to disk (the backups and logs went to TSM) and ftp the image from source to target. There was no easy way to add additional disks to the source because of hardware limitations ( I think I did mention this was an antique!)</li>
<li>While I was considering all this, the customer came up with another one. Since the application was to be moved to a different platform, it required a different code set on the target than the source. As all the DB2 DBAs know, there is no way you can change the code set at target when we use DB2 backup and restore.</li>
</ol>
<p>This took out the backup/restore option from the table completely, which was perhaps a good thing!  The next obvious step was to create the database skeleton on the target using the db2look from source but with different code set as required. That was easily accomplished.</p>
<p>But the next step was pretty sticky! All of the production data needed to be migrated to the target server in the cutover window in one shot.</p>
<p>I was considering a couple of options to achieve this:</p>
<ul>
<li>Using db2move and ftp all the files across and load at target. But the database had hundreds of tables and some of them quite big.</li>
<li>Using the DB2 federated server option at the target, creating a wrapper for the source and pulling data in.</li>
</ul>
<p>I was inclining more towards the second option, which appeared less messy than the first. However I was still researching for a better solution that would be more cool to use and I was quite sure DB2 must have such an option!</p>
<p>Then I came across this new feature – DB2 remote load from cursor. It proved to be a beautiful tool as I discovered it later to be. I sincerely wish I had known it before, as it would have made my life a lot easier for most of my day to day tasks.</p>
<p>&#8220;Remote load from cursor&#8221; or &#8220;Load from cursor using remote fetch&#8221; is a new feature introduced with DB2 V9.1 and above, but the source database can be a lower version than the target and the codepage can be different which makes this as one of the “cool” migration tools to use.</p>
<p>Here is how we can achieve a pure data migration using the remote cursor:</p>
<p>Remote catalog the source db on the target instance.</p>
<ul>
<li>Define a cursor based on the remote connection like this:  db2 &#8221; DECLARE C1 CURSOR DATABASE &lt;sourcedbname&gt;  USER &lt;userid&gt; USING &lt;passwd&gt; FOR &lt;SELECT * FROM &lt;source tablename&gt;&gt;&#8221;</li>
<li>Last step is to use “load from cursor C1…..” like you would for any load from cursor.</li>
</ul>
<p>I have used it to transfer even LOB data and its pretty fast. Ofcourse, the size of the tables matter and it is not a good fit for moving very large amounts of data within a short timeframe. But it proved to be a perfect fit in my case and I found so many uses for it afterwards too because it completely eliminates the export step whenever we need to migrate data. DBAs will find that this tool makes the dull and boring part of their tasks easy, cool and fun!</p>
<p>For more detailed information you can refer to the following link from the IBM DB2 info center:  <a title="IBM Info Center" href="http://bit.ly/pawUsT" target="_blank">http://bit.ly/pawUsT</a></p>
<img src="http://feeds.feedburner.com/~r/DBBuzz/~4/lTKM19eUpXs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbbuzz.com/2011/jeyabarathi/more-cool-data-migration-strategies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dbbuzz.com/2011/jeyabarathi/more-cool-data-migration-strategies/</feedburner:origLink></item>
		<item>
		<title>HADR as a migration tool – a cool way to migrate data!!</title>
		<link>http://feedproxy.google.com/~r/DBBuzz/~3/C41Q9g-5gPM/</link>
		<comments>http://www.dbbuzz.com/2011/jeyabarathi/hadr-as-a-migration-tool-a-cool-way-to-migrate-data/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 08:09:00 +0000</pubDate>
		<dc:creator>Jeyabarathi(JB) Chakrapani</dc:creator>
				<category><![CDATA[DB2 LUW]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[HADR]]></category>
		<category><![CDATA[Migration]]></category>

		<guid isPermaLink="false">http://www.dbbuzz.com/?p=314</guid>
		<description><![CDATA[In this post you can read about an unconventional and cool way of using the DB2 HADR  tool for data migration. An article by Jeyabarathi Chakrapani.]]></description>
			<content:encoded><![CDATA[<p>In this article you can read about an unconventional and cool way of using the DB2 HADR&#160; tool for data migration. I&#160; presented this method of using the DB2 High Availability Disaster Recovery feature as a tool to migrate a database&#160; for the 2011 spring “DB2’s got talent” contest series hosted by Scott Hayes of the popular <a href="http://www.db2nightshow.com/" target="_blank">DB2 Night Show</a>. </p>
<p><span id="more-314"></span>
<p>I will expand the presentation further for you to include some situations where you can still employ HADR even though at first glance it might look like you cannot.</p>
<p>First, there are some situations and conditions where HADR can play a role as a migration tool:</p>
<ol>
<li>The source and target operating systems are the same and at the same version and the source and target DB2 levels are the same as well.      <br />&#160;</li>
<li>Source and target are at different geographical locations and the condition one described above holds true.</li>
</ol>
<p>With some minor twists you can achieve our objective even if the condition number one doesn’t hold exactly true.</p>
<p>To set up&#160; HADR between any two servers requires that the servers have the same operating system and level and same DB2 version and level.</p>
<p>To overcome this obstacle and to migrate the data easily using HADR, there are some workarounds:</p>
<ol>
<li>If you are migrating using the same platform but different versions , for example, from source AIX 5.3 to&#160; AIX 6 on the target, you can still use HADR, but, here is the deal. You will leave the target at 5.3 until HADR is set up and the database is switched over and then you can break HADR and upgrade the target OS version.      </li>
<li>For migrating to a different DB2 version, you can&#160; follow the same work around . For example if you needed to move from source DB2 9.1 to target DB2 9.7, leave the target at 9.1 and at same version and fix pack level as source. Restore the database on the target as standby, establish HADR, swing the HADR to switch roles . Disconnect HADR and then upgrade target.</li>
</ol>
<p>For both Operating System and DB2 upgrades the down time required is very little and can be done using the normal maintenance window once database migration is complete.</p>
<p>This work around for different versions of source and target will make it easier for large databases to be migrated without the usual fuss and pressure associated with such migrations. Setting up HADR involves most of the work to be done in the background without disturbing the production site.</p>
<p>All the work of sending the backup from source site to target, restore of the database at the target site in the roll forward pending mode, configuring the target with standby HADR configurations can all be done without in anyway affecting the source site.</p>
<p>The only time you will need to touch the source site will be to update the HADR configurations on the source database. And then once more to activate HADR once standby is ready.</p>
<p><a href="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2011/07/HADR-as-a-migration-tool--a-cool-way-to-_88FC/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 9px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2011/07/HADR-as-a-migration-tool--a-cool-way-to-_88FC/image_thumb.png" width="244" height="193" /></a><strong>Migration Test Run</strong></p>
<p>Another added benefit with using HADR is, you can test run the HADR activation to see if it works without actually switching over the primary and standby.</p>
<p>All you need to do is to start the HADR on primary source and standby target and once the HADR reaches peer state, disconnect HADR, bring up standby as a normal standard database and verify if all your data from the primary was replicated on the standby.</p>
<p>Once the test yields satisfactory results, you can restore the original backup again on the target, as before, in roll forward pending state. Restart HADR to allow it to catch up, set up the cutover date and window at your own convenience and then swing the HADR to switch roles. After the switch you have a fully migrated database in minutes with <u>no data loss</u> and<u> very little down time</u>. This migration process, while being unconventional (and cool!), has very low risks and comes with a complete back out plan, all you need to do is swing back the HADR!</p>
<p>The best part of this migration is, it is also a solid Data Recovery solution if you keep HADR up and running. And believe me once you see how robust the solution is, you want to stay with it like my customer did.</p>
<p>The IBM information center has very useful information for setting up HADR from scratch: <a href="http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/c0021056.htm">http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/c0021056.htm</a> This is the link for V9.1, the same info is available for 9.5 and 9.7 in the information center.</p>
<p>A replay of my HADR presentation is available on the DB2 Night Show website: <a href="http://www.dbisoftware.com/blog/db2nightshow.php?id=236">http://www.dbisoftware.com/blog/db2nightshow.php?id=236</a></p>
<p>Have a wonderful day!</p>
<img src="http://feeds.feedburner.com/~r/DBBuzz/~4/C41Q9g-5gPM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbbuzz.com/2011/jeyabarathi/hadr-as-a-migration-tool-a-cool-way-to-migrate-data/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.dbbuzz.com/2011/jeyabarathi/hadr-as-a-migration-tool-a-cool-way-to-migrate-data/</feedburner:origLink></item>
		<item>
		<title>Hot Tip #2 – Software to manage all your server connections</title>
		<link>http://feedproxy.google.com/~r/DBBuzz/~3/rcDdvMVgRG4/</link>
		<comments>http://www.dbbuzz.com/2011/klaas_brant/hot-tip-2-software-to-manage-all-your-server-connections/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 10:01:00 +0000</pubDate>
		<dc:creator>Klaas Brant</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Hot Tip]]></category>

		<guid isPermaLink="false">http://www.dbbuzz.com/2011/klaas_brant/hot-tip-2-software-to-manage-all-your-server-connections/</guid>
		<description><![CDATA[How to manage your remote connections easily]]></description>
			<content:encoded><![CDATA[<p>&quot;Single sign-on&quot; is a dream that for many for us is impossible. Servers, servers and more servers is what we are facing nowadays. And single sign-on is simply not possible because… </p>
<p><span id="more-303"></span>
<p>There are many reasons why this is not possible. Most of them are technical, but sometimes as simple as: working for multiple customers as a freelance worker. So how to keep track of all these servers, user-ids, passwords and settings? It can drive you nuts! Writing down is not an option because sooner or later somebody will misuse your notes (please, no sticky notes on the screen!). A password manager is only half the solution because you still have to initiate the session yourself and then copy / paste the user-id and password. And no matter how smart this password manager is. You will curse it after you have dome a few hundred times a copy &#8211; paste or drag &amp; drop.</p>
<p><a href="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2011/07/rdm.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 15px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="rdm" border="0" alt="rdm" align="left" src="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2011/07/rdm_thumb.jpg" width="187" height="244" /></a>A few years ago I bumped into a solution: <strong>Remote Desktop Manager</strong> is a software solution that keeps track of all your servers, protocols, special ways to connect and even user-id and password. The name is a bit misleading because it does do much, much more than &quot;just&quot; Microsoft&#8217;s Remote Desktop. It supports over 20 connection types from simple FTP, Telnet and X-Window up to LogMeIn, VPN and virtualization software (and more with a plugin). The software has two versions: a standard (free) version and a enterprise version. The enterprise version does focus a lot on security and has the ability to set-up a central database of connections. </p>
<p>&#160;</p>
<p>The package does everything you want such a package to do: fire-up the right software, supply the credentials for the server, do scripting and much more. Pricing for the enterprise version starts at $35 per user and comes down rapidly for multiple users. Very reasonable for what the software offers and who knows, you might be happy with what the free standard version offers. I depend on the software every day and it has made my job much more productive. It is so relaxed… grab a coffee and with one mouse click your connected to the server you want to work with.</p>
<p>Check it out for yourself: <a title="http://remotedesktopmanager.com/" href="http://remotedesktopmanager.com/" target="_blank">http://remotedesktopmanager.com/</a> and do a trial.</p>
<p>I am not related in any way to the company that creates this little gem, I just think it is what every DBA or support person could use this. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2011/07/wlEmoticon-winkingsmile.png" /> </p>
<hr />
<p>This tip is provided by: Klaas Brant – KBCE b.v. Do you have a hot tip? Please mail it to <a href="mailto:info@kbce.com">info@kbce.com</a> to share it with the DBBuzz community.</p>
<img src="http://feeds.feedburner.com/~r/DBBuzz/~4/rcDdvMVgRG4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbbuzz.com/2011/klaas_brant/hot-tip-2-software-to-manage-all-your-server-connections/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dbbuzz.com/2011/klaas_brant/hot-tip-2-software-to-manage-all-your-server-connections/</feedburner:origLink></item>
		<item>
		<title>Hot Tip #1 – Simplify and Speed-up Downloads</title>
		<link>http://feedproxy.google.com/~r/DBBuzz/~3/5tOIjIXWwUA/</link>
		<comments>http://www.dbbuzz.com/2011/klaas_brant/hot-tip-1-simplify-and-speed-up-downloads/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 11:23:21 +0000</pubDate>
		<dc:creator>Klaas Brant</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Hot Tip]]></category>

		<guid isPermaLink="false">http://www.dbbuzz.com/2011/klaas_brant/hot-tip-1-simplify-and-speed-up-downloads/</guid>
		<description><![CDATA[In our day to day job the use of internet is nowadays permitted in the larger companies. Software vendors store their manuals, white papers and software updates online so you can easily download it. There are two potential &#34;problems&#34; with downloading information &#160; Sometimes there are many download links and you want most or all [...]]]></description>
			<content:encoded><![CDATA[<p>In our day to day job the use of internet is nowadays permitted in the larger companies. Software vendors store their manuals, white papers and software updates online so you can easily download it. There are two potential &quot;problems&quot; with downloading information</p>
<p><span id="more-277"></span>
<p>&#160;</p>
<ol>
<li>Sometimes there are <strong>many</strong> <strong>download links</strong> and you want most or all of them (e.g. all the PDF DB2 manuals for DB2 10 on page <a title="https://www.ibm.com/support/docview.wss?uid=swg27019288#manuals" href="https://www.ibm.com/support/docview.wss?uid=swg27019288#manuals" rel="nofollow" target="_blank">https://www.ibm.com/support/docview.wss?uid=swg27019288#manuals</a>).      <br />&#160;&#160; </li>
<li>The file you have to download is a <strong>file that is huge</strong> (e.g. a DB2 LUW Fix-Pack on page <a title="https://www.ibm.com/support/docview.wss?uid=swg27007053" href="https://www.ibm.com/support/docview.wss?uid=swg27007053" rel="nofollow" target="_blank">https://www.ibm.com/support/docview.wss?uid=swg27007053</a>) and with a single threaded http download this will take a long time. Many servers allow a multi-threaded download where each thread grabs part of the file. For example when you split a file in four piece and all components cooperate then the download will finish in 25% of the time. It is of course possible that one of the components will block you or limit you in such an attempt. </li>
</ol>
<p>None of the existing browsers are going to help you with these two issues. Downloads are single threaded and you have to select the links one by one. Solution? A browser extension! I use Firefox as my default browser and it has a perfect plugin for my problem: <strong>DownThemAll.</strong></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:67ce8a83-bc30-41fe-980b-563c156c1fef" class="wlWriterEditableSmartContent"><a href="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2011/06/downthemall-8x6.png" title="" rel="thumbnail"><img border="0" src="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2011/06/downthemall.png" width="264" height="191" /></a></div>
<p>DownThemAll is an open source and powerful, yet easy to use, Firefox extension that adds new advanced download capabilities to Firefox on windows, Linux and mac platforms. DownThemAll lets you download all the links contained in a webpage and much more: you can refine your downloads by fully customizable criteria to get only what you really want. Download all your manuals with a single mouse click! DownThemAll is also an advanced accelerator that increases speed up to 400%, it allows you to pause and resume downloads at any time. It fully integrated into Firefox and with each download you have can opt for regular download or DownThemAll. This plugin has been downloaded more than 40 million times! After you installed DownThemAll a webpage opens with some nice instruction videos. Like many open source projects</p>
<p>For those of you thinking &quot;Great! But I use Internet Explorer or Chrome. Is there a version for my browser?&quot; I have sad news: The answer is “No”, mainly due to technical limitations of your browser.</p>
<p>Want to read more before installing it in your browser? You can read all about this little gem on <a title="http://www.downthemall.net/" href="http://www.downthemall.net/" rel="nofollow" target="_blank">http://www.downthemall.net/</a>. Happy downloading!</p>
<p>This tip is provided by: Klaas Brant – KBCE b.v. Do you have a hot tip? Please mail it to <a href="mailto:info@kbce.com">info@kbce.com</a> to share it with the DBBuzz community.</p>
<img src="http://feeds.feedburner.com/~r/DBBuzz/~4/5tOIjIXWwUA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbbuzz.com/2011/klaas_brant/hot-tip-1-simplify-and-speed-up-downloads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dbbuzz.com/2011/klaas_brant/hot-tip-1-simplify-and-speed-up-downloads/</feedburner:origLink></item>
		<item>
		<title>A travel guide to IDUG DB2 Tech Conference – Anaheim 2011</title>
		<link>http://feedproxy.google.com/~r/DBBuzz/~3/lZWKmLoPZV0/</link>
		<comments>http://www.dbbuzz.com/2011/christian_molaro/a-travel-guide-to-idug-db2-tech-conference-%e2%80%93-anaheim-2011/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 14:05:55 +0000</pubDate>
		<dc:creator>Cristian Molaro</dc:creator>
				<category><![CDATA[DB2 z/OS]]></category>

		<guid isPermaLink="false">http://www.dbbuzz.com/?p=259</guid>
		<description><![CDATA[I will be attending the IDUG DB2 Tech Conference – Anaheim, also known as IDUG NA 2011, in some weeks. There is a lot of DB2 content and many network opportunities there, and not to mention the great moments in company of new and old friends that I am looking forward to enjoy. I have [...]]]></description>
			<content:encoded><![CDATA[<p>I will be attending the IDUG DB2 Tech Conference – Anaheim, also known as IDUG NA 2011, in some weeks. There is a lot of DB2 content and many network opportunities there, and not to mention the great moments in company of new and old friends that I am looking forward to enjoy. <span id="more-259"></span></p>
<p>I have learned that to get the best value out of any IDUG conference, planning is very important. So this is planning time!</p>
<p><a rel="attachment wp-att-260" href="http://www.dbbuzz.com/2011/christian_molaro/a-travel-guide-to-idug-db2-tech-conference-%e2%80%93-anaheim-2011/travel/"><img class="alignright size-medium wp-image-260" title="travel" src="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2011/04/travel-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>I start by defining my learning objectives for this conference: I am looking forward to get most of the DB2 for z/OS sessions, with a particular interest in DB2 10 for z/OS. I have been working recently with this new DB2 and this seems to me a very interesting edition. I am eager for any additional education related to 10.</p>
<p>I also promised myself to take the opportunity to attend sessions that are not directly related to my work or preferences. IDUG is all about DB2 anyway, and it will not harm anybody to expand his or her IT world perception, right?</p>
<p>The first step for me is to get the Conference Event Grid from <a href="http://bit.ly/1d4X3R">http://bit.ly/1d4X3R</a>. This is a colourful pdf containing the conference sessions schedule and other events. If you are used to the European version of the grid, you will notice that the sessions’ colours have not the same meaning: they identify at a glance the type of session rather than the speaker category:</p>
<ul>
<li>BLUE = Hands-on Lab</li>
<li>ORANGE = DB2 for Linux, UNIX, Windows</li>
<li>PURPLE = DB2 for z/OS</li>
<li>GREEN = Cross Platform</li>
<li>RED = Special Interest Groups (SIGs)</li>
</ul>
<p>Below figure shows a portion of the grid while I was selecting what sessions to attend:</p>
<p><a rel="attachment wp-att-263" href="http://www.dbbuzz.com/2011/christian_molaro/a-travel-guide-to-idug-db2-tech-conference-%e2%80%93-anaheim-2011/idugna_grid/"></a><a rel="attachment wp-att-264" href="http://www.dbbuzz.com/2011/christian_molaro/a-travel-guide-to-idug-db2-tech-conference-%e2%80%93-anaheim-2011/idugna_grid-2/"><img class="aligncenter size-large wp-image-264" title="idugna_grid" src="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2011/04/idugna_grid1-1024x485.jpg" alt="" width="1024" height="485" /></a></p>
<p>Also visit the <strong><em>Online Conference Schedule</em></strong> at <a title="http://bit.ly/g7DnTQ" href="http://bit.ly/g7DnTQ">http://bit.ly/g7DnTQ</a>. This is a great source of information and complements very well the grid; here you can see the sessions’ details, abstracts and objectives. It helped me a lot during my selection exercise.</p>
<p>But there is a lot more educational and networking value to get advantage from. Susan Visser has a very interesting blog post that exposes all the learning and networking potential of the conference, a blog post not to be missed: “<strong><em>All about IDUG DB2 Tech Conference – Anaheim”</em></strong> at <a href="http://ibm.co/eaAWXZ">http://ibm.co/eaAWXZ</a>.</p>
<p>Problems started soon: because the quality of the offering is so appealing to me, I am having a hard time deciding which sessions not to attend! (I wish I could be at two places at the same time, but bi-temporal support is not intended to solve this problem). Fortunately we will have access to the conference proceedings and I will be able to study the presentations that I will be missing anyway.</p>
<p>So my travel plan looks like:</p>
<p><strong><span style="text-decoration: underline;">Tuesday, May 3, 2011</span></strong></p>
<ul>
<li><strong>S01: DB2 10 Technical Overview</strong> / Jeff Josten</li>
<li><strong>B01: How I Learned to Stop Worrying and Love Plan Management and Access Path Stability</strong> / Gerald Hodge</li>
<li><strong>B02: Mastering Distributed Access to DB2 for z/OS</strong> / Cristian Molaro. I <strong><em>must</em></strong> attend this one, otherwise I would take <strong>G02: DB2 LUW Security –What If Your Firewall Catches Fire?</strong> / Rebecca Bond</li>
<li><strong>B03: DB2 for z/OS: Availability Enhancements</strong> / Haakon Roberts</li>
<li><strong>F04: Database Performance Discoveries</strong> and Recommendations / Dave Beulke</li>
</ul>
<p><strong><span style="text-decoration: underline;">Wednesday, May 4, 2011</span></strong></p>
<ul>
<li><strong>B05: The DB2 V10 Catalog – A Revolution</strong> / Steen Rasmussen</li>
<li><strong>B06: DB2 for z/OS Migration Planning Survival Guide</strong> / Linda Claussen</li>
<li><strong>F07: DB2 10 for z/OS – John Deere’s Beta Experience</strong> / Bryan Paulsen</li>
<li><strong>B08: Why Did the DB2 for z/OS Optimizer Choose that Access Path?</strong> / Terry Purcell</li>
</ul>
<p><strong><span style="text-decoration: underline;">Thursday, May 5, 2011</span></strong></p>
<ul>
<li><strong>F09: The Importance of Being Consistent – DB2 for z/OS and Copy Services for IBM System z</strong> / Florence Dubois</li>
<li><strong>B10: DB2 10 for z/OS Planning and Very Early Experiences</strong> / John Campbell</li>
<li><strong>A11: A DB2 Hitchhikers Guide to RMF and SMF</strong> / Frank Petersen</li>
<li><strong>B12: Omegamon Performance Database (z/OS) – Exploit the Power of the PDB to Solve Performance Issues</strong> / Billy Sundarrajan</li>
</ul>
<p><strong><span style="text-decoration: underline;">Friday, May 6, 2011</span></strong></p>
<ul>
<li><strong>B13: DB2 for z/OS Optimizer: What Have You Done for Me Lately?</strong> / Terry Purcell</li>
<li><strong>C14: Stuffed with Great Enhancements – New Features of DB2 9.7 Fix Packs</strong> / Melanie Stopfer</li>
<li><strong>G15: Monitoring and Troubleshooting Distributed Access to DB2 for z/OS</strong> / Cristian Molaro. I <strong><em>must</em></strong> attend this one, otherwise I would take <strong>B15: DB2 Design – Selected (Controversial?) Topics</strong> / Suresh Sane</li>
</ul>
<p>This is my plan. Yours will vary of course based on your personal preferences and objectives. One of the greatest things about the IDUG Tech Conference is that there is value for everybody waiting to be enjoyed. Have a look at Rebecca Bond’s excellent and refreshing blog posts “<strong><em>IDUG NA – The Geeky Vacation!”</em></strong> at <a href="http://ibm.co/fbmAag">http://ibm.co/fbmAag</a> and <strong><em>“Budgeting for IDUG North America conference as viewed by the DB2 Locksmith” </em></strong>at <a href="http://ibm.co/g3Yozr">http://ibm.co/g3Yozr</a>.</p>
<p>Bottom line: I strongly recommend that you take the time to prepare your IDUG DB2 Tech Conference experience in advance, there is a great DB2 offering waiting for you there.</p>
<p>Not attending Anaheim? Keep tuned for the IDUG DB2 Tech Conference in Prague,  Czech Republic, 14-18 November 2011. We are working hard preparing a great EMEA Conference!</p>
<p>See you there! &#8211; Cristian Molaro</p>
<p><a rel="attachment wp-att-263" href="http://www.dbbuzz.com/2011/christian_molaro/a-travel-guide-to-idug-db2-tech-conference-%e2%80%93-anaheim-2011/idugna_grid/"><br />
</a></p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/DBBuzz/~4/lZWKmLoPZV0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbbuzz.com/2011/christian_molaro/a-travel-guide-to-idug-db2-tech-conference-%e2%80%93-anaheim-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dbbuzz.com/2011/christian_molaro/a-travel-guide-to-idug-db2-tech-conference-%e2%80%93-anaheim-2011/</feedburner:origLink></item>
		<item>
		<title>Extended explain in DB2 z/OS</title>
		<link>http://feedproxy.google.com/~r/DBBuzz/~3/KgqCg6OqGcI/</link>
		<comments>http://www.dbbuzz.com/2010/abe_kornelis/extended-explain-in-db2-zos/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 15:43:53 +0000</pubDate>
		<dc:creator>Abe_Kornelis</dc:creator>
				<category><![CDATA[DB2 z/OS]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[db2 sql]]></category>
		<category><![CDATA[explain]]></category>
		<category><![CDATA[extended explain]]></category>
		<category><![CDATA[performance monitoring]]></category>
		<category><![CDATA[query optimization]]></category>

		<guid isPermaLink="false">http://www.dbbuzz.com/?p=225</guid>
		<description><![CDATA[In 2010 I did extensive research on extended explain tables. This post shows the results of my research. At regular intervals ABIS publishes sets of articles relating to DB2. This series of publications is titled Exploring DB2. Unfortunately for most readers, these publications are written entirely in the Dutch language. In the Januari 2010 issue [...]]]></description>
			<content:encoded><![CDATA[<p>In 2010 I did extensive research on extended explain tables. This post shows the results of my research.<span id="more-225"></span></p>
<p>At regular intervals <a href="http://www.abis.be" target="_blank">ABIS</a> publishes sets of articles relating to DB2. This series of publications is titled <a href="http://www.abis.be/html/nlExploreDB2.html" target="_blank">Exploring DB2</a>. Unfortunately for most readers, these publications are written entirely in the Dutch language.</p>
<p>In the Januari 2010 issue Peter Vanroose challenged us &#8211; the readers &#8211; to send in a query for presenting information from the extended explain tables. Of course, I could not resist such a challenge. Here are the results of my research on extended explain tables. This document contains the following parts:</p>
<ol>
<li><a href="#chap01">The Query</a></li>
<li><a href="#chap02">Explain with Range Information</a></li>
<li><a href="#chap03">Explain with Range and Sort Information.</a></li>
</ol>
<h2><a id="chap01" name="chap01">1. The Query</a></h2>
<p>For a bit of variety, I wanted to create a query using a Common Table Expression and at least one partitioned table. Therefore a catalog query seemed less appropriate. So I created a query on the IVP database in stead. After all, the IVP database contains a partitioned table and most installations do have the IVP database installed. Hopefully therefore everybody will be able to use the queries below.</p>
<p>It is entirely evident that this query is not very efficient. This time we&#8217;re looking for explain data, not performance. Query optimization is outside this article&#8217;s scope. The same holds true for creating the extended explain tables. These are described in the Performance Monitoring and Tuning Guide and will be created for you by OSC. Alternatively, you can use member DSNTIJOS in the SDSNSAMP library.</p>
<pre class="brush:sql">--
   with     managers
           (mgrno,
            mgrname
            )
   as      (select   distinct
                     mgr.empno
                   , strip(coalesce(firstnme, '')) CONCAT
                     ' ' CONCAT
                     strip(coalesce(lastname, '???')) as mgrname
            from     DSN8810.DEPT dept
            join     DSN8810.EMP  mgr
                 on  mgr.empno = dept.mgrno
            )
   select   mgr.mgrname
          , dept.deptname
          , emp.lastname
          , emp.firstnme
   from     DSN8810.EMP emp
   left outer join
            DSN8810.DEPT dept
        on  dept.deptno = emp.workdept
   left outer join
            managers mgr
        on  mgr.mgrno = dept.mgrno
   where    emp.empno between '000000' and '150000'
        and emp.workdept between 'A' and 'EEE'
   order by case when dept.deptno IS NULL
                 then '*No dept'
                 when mgr.mgrno IS NULL
                 then '*No mgr'
                 else mgr.mgrname
            end,
            emp.empno
  ;</pre>
<p><strong>The result:</strong></p>
<pre class="brush:plain">---------+---------+---------+---------+---------+---------+---------+---------+---------+---------
MGRNAME                       DEPTNAME                              LASTNAME         FIRSTNME
---------+---------+---------+---------+---------+---------+---------+---------+---------+---------
CHRISTINE HAAS                SPIFFY COMPUTER SERVICE DIV.          HAAS             CHRISTINE
CHRISTINE HAAS                SPIFFY COMPUTER SERVICE DIV.          LUCCHESI         VINCENZO
CHRISTINE HAAS                SPIFFY COMPUTER SERVICE DIV.          O'CONNELL        SEAN
EVA PULASKI                   ADMINISTRATION SYSTEMS                PULASKI          EVA
EVA PULASKI                   ADMINISTRATION SYSTEMS                JEFFERSON        JAMES
EVA PULASKI                   ADMINISTRATION SYSTEMS                MARINO           SALVATORE
EVA PULASKI                   ADMINISTRATION SYSTEMS                SMITH            DANIEL
EVA PULASKI                   ADMINISTRATION SYSTEMS                JOHNSON          SYBIL
EVA PULASKI                   ADMINISTRATION SYSTEMS                PEREZ            MARIA
IRVING STERN                  MANUFACTURING SYSTEMS                 STERN            IRVING
IRVING STERN                  MANUFACTURING SYSTEMS                 ADAMSON          BRUCE
IRVING STERN                  MANUFACTURING SYSTEMS                 PIANKA           ELIZABETH
IRVING STERN                  MANUFACTURING SYSTEMS                 YOSHIMURA        MASATOSHI
IRVING STERN                  MANUFACTURING SYSTEMS                 SCOUTTEN         MARILYN
IRVING STERN                  MANUFACTURING SYSTEMS                 WALKER           JAMES
IRVING STERN                  MANUFACTURING SYSTEMS                 BROWN            DAVID
IRVING STERN                  MANUFACTURING SYSTEMS                 JONES            WILLIAM
IRVING STERN                  MANUFACTURING SYSTEMS                 LUTZ             JENNIFER
MICHAEL THOMPSON              PLANNING                              THOMPSON         MICHAEL
SALLY KWAN                    INFORMATION CENTER                    KWAN             SALLY
SALLY KWAN                    INFORMATION CENTER                    QUINTANA         DOLORES
SALLY KWAN                    INFORMATION CENTER                    NICHOLLS         HEATHER
DSNE610I NUMBER OF ROWS DISPLAYED IS 22
DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 100</pre>
<h2><a id="chap02" name="chap02">2. Explain with Range information</a></h2>
<p>After executing</p>
<pre>   EXPLAIN ALL SET QUERYNO=114 FOR</pre>
<p>with the above query the various explain tables will be supplied with appropriate data.</p>
<p>A basic query on just PLAN_TABLE tells us there are 7 steps (table rows) required for executing this query. From DSN_SORT_TABLE we learn there are 4 sorts:<br />
two for the order-by clause, 1 for the distinct clause in the Common Table Expression, and 1 for executing the join with the CTE&#8217;s result-set.</p>
<p>As a first step I wanted to extend my standard query for PLAN_TABLE with data on a potential page-range scan. After all, that would make a tablespace scan (accesstype=R) slightly less expensive&#8230; To show this, we need to use data from the DSN_PGRANGE_TABLE. I have decided to add the number of partitions to the access column.</p>
<p>Some points of note regarding the below query and its results:</p>
<ul>
<li>Formatting is not ideal &#8211; especially the leftmost 5 columns could use some leading spaces. However, presentation was not the primary purpose of this exercise.</li>
<li>Result rows are sorted &#8211; within each query &#8211; descending on Parent Qblockno. I started out sorting them ascending, but that resulted in a &#8211; to my taste &#8211; illogical sequence. With descending sort the result more closely matches the actual order of processing by DB2.</li>
<li>In column Access you may note the I(2) occurrence &#8211; accompanied by LST in the PREF column indicating List Prefetch &#8211; which means<br />
that DB2 will perform an Index Scan on 2 partitions. Quite a bit better than a full Index Scan which would have had to process all 5 partitions.</li>
<li>In the very same Access column you may also note the occurrence of T/R. This means the result set of the CTE will be materialized and subsequently accessed using a sparse index. This is the meaning of the T. Should this fail to work out, DB2 will perform a full scan of the CTE&#8217;s result set; this alternative being indicated by the R.</li>
<li>Information on locking is not shown. Anyone interested can easily add the relevant colums.</li>
</ul>
<p><strong>The explain Query:</strong></p>
<pre class="brush:sql">--
-- Query on PLAN_TABLE with Page-Range info
--
   SELECT   SUBSTR(STRIP(CHAR(PLAN.QUERYNO)), 1, 5) AS QUERY
          , CASE PLAN.PARENT_QBLOCKNO
                 WHEN 0 THEN ' '
                        ELSE
                        SUBSTR(STRIP(CHAR(PLAN.PARENT_QBLOCKNO)), 1, 4)
            END AS PBLK
          , SUBSTR(STRIP(CHAR(PLAN.QBLOCKNO)), 1, 4) AS QBLK
          , SUBSTR(STRIP(CHAR(PLAN.PLANNO)), 1, 4) AS PLNO
          , CASE PLAN.MIXOPSEQ
                 WHEN 0 THEN ' '
                        ELSE SUBSTR(STRIP(CHAR(PLAN.MIXOPSEQ)), 1, 4)
            END AS OPSQ
          , PLAN.QBLOCK_TYPE AS TYPE
          , CASE PLAN.JOIN_TYPE
                 WHEN 'F' THEN 'Full'
                 WHEN 'P' THEN 'Pair'
                 WHEN 'S' THEN 'Star'
                 WHEN 'L' THEN CASE PLAN.METHOD
                                    WHEN 1 THEN 'L/R'
                                    WHEN 2 THEN 'L/R'
                                    WHEN 4 THEN 'L/R'
                                           ELSE '?'
                                    END
                 WHEN ' ' THEN CASE PLAN.METHOD
                                    WHEN 1 THEN 'Innr'
                                    WHEN 2 THEN 'Innr'
                                    WHEN 4 THEN 'Innr'
                                           ELSE ' '
                                    END
                          ELSE '*ERR*'
            END AS JOIN
          , CASE PLAN.METHOD
                 WHEN 0 THEN 'First'
                 WHEN 1 THEN 'NLjoin'
                 WHEN 2 THEN 'MSjoin'
                 WHEN 3 THEN 'Sort'
                 WHEN 4 THEN 'Hybrid'
                        ELSE 'UNKNWN'
            END AS METHOD
          , CASE PLAN.TABLE_TYPE
                 WHEN 'B' THEN 'Buffer'
                 WHEN 'C' THEN 'CTE'
                 WHEN 'F' THEN 'TabFun'
                 WHEN 'M' THEN 'MQT'
                 WHEN 'Q' THEN 'Temp'
                 WHEN 'R' THEN 'Recurs'
                 WHEN 'T' THEN 'Table'
                 WHEN 'W' THEN 'Work'
                          ELSE ' '
            END AS TYPE
          , SUBSTR(PLAN.CREATOR, 1, 8) AS CREATOR
          , SUBSTR(PLAN.TNAME, 1, 18) AS TABLE
          , SUBSTR(PLAN.ACCESSNAME, 1, 8) AS NDXNAME
          , CASE PLAN.PRIMARY_ACCESSTYPE
                 WHEN 'D' THEN 'D/'
                 WHEN 'T' THEN 'T/'
                          ELSE ''
            END CONCAT
            STRIP(PLAN.ACCESSTYPE) CONCAT
            CASE WHEN PLAN.PAGE_RANGE = 'Y'
                 THEN '(' CONCAT
                      STRIP(SUBSTR(STRIP(CHAR(RANGE.NUMPARTS)), 1, 4))
                      CONCAT ')'
                 ELSE ''
            END AS ACCESS
          , CASE PLAN.PREFETCH
                 WHEN 'S' THEN 'SEQ'
                 WHEN 'L' THEN 'LST'
                 WHEN 'D' THEN 'DYN'
                          ELSE ' '
            END AS PREF
          , CASE PLAN.INDEXONLY
                 WHEN 'Y' THEN 'XO'
                          ELSE ' '
            END AS XO
          , CASE PLAN.MATCHCOLS
                 WHEN 0 THEN ''
                        ELSE SUBSTR(STRIP(CHAR(PLAN.MATCHCOLS)), 1, 2)
            END AS MC
          , CASE PLAN.SORTC_GROUPBY
                 WHEN 'Y' THEN 'G'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTC_JOIN
                 WHEN 'Y' THEN 'J'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTC_ORDERBY
                 WHEN 'Y' THEN 'O'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTC_UNIQ
                 WHEN 'Y' THEN 'U'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTN_GROUPBY
                 WHEN 'Y' THEN 'G'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTN_JOIN
                 WHEN 'Y' THEN 'J'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTN_ORDERBY
                 WHEN 'Y' THEN 'O'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTN_UNIQ
                 WHEN 'Y' THEN 'U'
                          ELSE ' '
            END AS GJOUGJOU
          , CASE PLAN.PARALLELISM_MODE
                 WHEN 'I' THEN 'I/O'
                 WHEN 'C' THEN 'CPU'
                 WHEN 'X' THEN 'SYS'
                          ELSE ' '
            END AS PAR
          , CASE PLAN.CTEREF
                 WHEN 0 THEN ' '
                 ELSE STRIP(CHAR(PLAN.CTEREF))
            END AS CTEREF
   FROM     PLAN_TABLE PLAN
   LEFT OUTER JOIN
            DSN_PGRANGE_TABLE RANGE
        ON  RANGE.QUERYNO  = PLAN.QUERYNO
        AND RANGE.QBLOCKNO = PLAN.QBLOCKNO
        AND RANGE.TABNO    = PLAN.TABNO
   WHERE    PLAN.QUERYNO = 114
   ORDER BY PLAN.QUERYNO
          , PLAN.PARENT_QBLOCKNO DESC
          , PLAN.QBLOCKNO
          , PLAN.PLANNO
          , PLAN.MIXOPSEQ
  ;</pre>
<p><strong>The result:</strong></p>
<pre class="brush:plain">---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------
QUERY  PBLK  QBLK  PLNO  OPSQ  TYPE    JOIN   METHOD  TYPE    CREATOR   TABLE               NDXNAME   ACCESS      PREF  XO  MC  GJOUGJOU  PAR  CTEREF
---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------
114    1     3     1           TABLEX         First   Table   DSN8810   DEPT                XDEPT2    I                 XO
114    1     3     2           TABLEX  Innr   NLjoin  Table   DSN8810   EMP                 XEMP1     I                     1
114    1     3     3           TABLEX         Sort                                                                                 U
114          1     1           SELECT         First   Table   DSN8810   EMP                 XEMP2     I(2)        LST       1
114          1     2           SELECT  L/R    NLjoin  Table   DSN8810   DEPT                XDEPT1    I                     1
114          1     3           SELECT  L/R    NLjoin  Work    TU00001   MANAGERS                      T/R                            J
114          1     4           SELECT         Sort                                                                                O
DSNE610I NUMBER OF ROWS DISPLAYED IS 7
DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 100</pre>
<h2><a id="chap03" name="chap03">3. Explain with Range and Sort information</a></h2>
<p>Next I wished to see whether I could add information from DSN_SORT_TABLE to this query in order to get a more complete overview of explained queries. This means that rows from a different table will have to be added which implies a UNION ALL will have to be used. Not at all a problem in itself, but it does have a few complicating consequences:</p>
<p>First of all the ORDER BY clause needs to be changed. Column names can no longer be used, in stead we need to specify column numbers. This reduces the query&#8217;s legibility and understandability, but so be it.</p>
<p>At the same time we now have two subqueries each having a WHERE clause that needs to select the correct query for explaining. I don&#8217;t like such solutions; not just because it&#8217;s redundant, but mainly because it happens all too often that these WHERE clauses get out of sync, rendering the end result of the complete query useless. Therefore I have added a CTE named QUERIES to hold the number(s) of the query/queries to be explained.</p>
<p>As it turned out I needed two more CTEs in order to find first the numbers and subsequently the names of the tables to be sorted. In order to limit the size of the result sets of these new CTE&#8217;s, I reused the QUERIES CTE, which holds the relevant query numbers. Thus the QUERIES CTE now replaces a total of 4 WHERE clauses.</p>
<p>Thus I added three CTEs in order to extend my query. This, however, entailed a risk: when using three or more CTEs a CONCAT function in the SELECT clause may result in column values being prefixed with an extraneous byte containing a value of X&#8217;00&#8242;, which can be quite ugly. Luckily, this query does not suffer from this problem because it does not comply with the &#8220;requirement&#8221; that a specific relation exist between the CTEs involved.</p>
<p>After verifying this I could start modifying the actual query. The first part remained almost the same.Only the WHERE clause needed to be changed. Selection on query-number had to be replaced by an inner join with relevant query numbers, as supplied by the CTE QUERIES. And &#8211; since data on sorting now will be obtained from DSN_SORT_TABLE &#8211; rows with METHOD=3 should now be skipped.</p>
<p>In order to add the data on sorting a second query is added to the existing one. Of course this second query has to create a result set with the same columns, although it obtains its data from DSN_SORT_TABLE in stead of PLAN_TABLE.</p>
<p>With this query and its result set, as with the previous one, some points of note are:</p>
<ul>
<li>Columns PAR and CTEREF have been removed to make room. These columns were empty in this example anyway&#8230;</li>
<li>Compared with the prior version two rows have disappeared. These are the rows indicating a sort (method = 3). I might have let them remain, but they&#8217;d have been redundant. It&#8217;s a matter of preference.</li>
<li>For the join-with-sort some of the information does appear double. I might have suppressed it, but I didn&#8217;t feel it was worth the effort. Again: a matter of taste.</li>
<li>4 new rows ahve been added, based on the content of DSN_SORT_TABLE. The net result being an increase of two rows. Thus we now have more information available than with the prior query.</li>
<li>Results are sorted slightly awkward. For a JOIN requiring a sort, the JOIN is shown before the SORT, while of course DB2 will perform the SORT before the JOIN, rather than afterwards. A solution for this sorting problem falls outside this article&#8217;s scope.</li>
<li>Column OPSQ (or MIXOPSEQ) now contains numbers for the rows originating from the PLAN_TABLE (not visible in our example) and characters for the various sort-steps (SORTNO) from the sorting table.This was done primarily to prevent numbers from being assigned and appearing more than once. As a secondary advantage we can now readily distinguish between the two types of rows.</li>
<li>We can now more easily see what the Access T/R entails: the CTE&#8217;s result-set is being sorted, creating an intermediate result set, which can be accessed efficiently using a sparse index. Should DB2, for whatever reason, be unable to perform the sort, DB2 will use a &#8220;normal&#8221; tablespace scan in stead.</li>
<li>It looks like the Order by clause is being implemented using two sorts. If you look more closely, however, you&#8217;ll notice that the first of these sorts is exactly identical to the sort for DISTINCT in the CTE. Further investigation by IBM-Belgium&#8217;s Bart Steegmans has revealed that the first sort is not actually executed. The pertinent rows in DSN_SORT_TABLE and DSN_SORTKEY_TABLE have been created in error by explain. To amend this situation IBM have opened APAR PM16586.</li>
</ul>
<p><strong>The Explain Query:</strong></p>
<pre class="brush:sql">--
-- Query on PLAN_TABLE with Page-Range info
--                      and sorting info
--
   WITH     QUERIES
           (QUERYNO)
   AS      (SELECT   114
            FROM     SYSIBM.SYSDUMMY1
            )
          , SORTKEYS
   AS      (SELECT DISTINCT
                     SKEY.QUERYNO
                   , SKEY.QBLOCKNO
                   , SKEY.PLANNO
                   , SKEY.SORTNO
                   , SKEY.TABNO
            FROM     DSN_SORTKEY_TABLE SKEY
            JOIN     QUERIES QRYS
                 ON  QRYS.QUERYNO = SKEY.QUERYNO
            WHERE    SKEY.TABNO &lt;&gt; 0
            )
          , TABLES
   AS      (SELECT DISTINCT
                     PLAN.QUERYNO
                   , PLAN.TABNO
                   , PLAN.TABLE_TYPE
                   , PLAN.CREATOR
                   , PLAN.TNAME
            FROM     PLAN_TABLE PLAN
            JOIN     QUERIES QRYS
                 ON  QRYS.QUERYNO = PLAN.QUERYNO
            WHERE    PLAN.TABNO &lt;&gt; 0
            )
   SELECT   SUBSTR(STRIP(CHAR(PLAN.QUERYNO)), 1, 5) AS QUERY
          , CASE PLAN.PARENT_QBLOCKNO
                 WHEN 0 THEN ' '
                        ELSE
                        SUBSTR(STRIP(CHAR(PLAN.PARENT_QBLOCKNO)), 1, 4)
            END AS PBLK
          , SUBSTR(STRIP(CHAR(PLAN.QBLOCKNO)), 1, 4) AS QBLK
          , SUBSTR(STRIP(CHAR(PLAN.PLANNO)), 1, 4) AS PLNO
          , CASE PLAN.MIXOPSEQ
                 WHEN 0 THEN ' '
                        ELSE SUBSTR(STRIP(CHAR(PLAN.MIXOPSEQ)), 1, 4)
            END AS OPSQ
          , PLAN.QBLOCK_TYPE AS TYPE
          , CASE PLAN.JOIN_TYPE
                 WHEN 'F' THEN 'Full'
                 WHEN 'P' THEN 'Pair'
                 WHEN 'S' THEN 'Star'
                 WHEN 'L' THEN CASE PLAN.METHOD
                                    WHEN 1 THEN 'L/R'
                                    WHEN 2 THEN 'L/R'
                                    WHEN 4 THEN 'L/R'
                                           ELSE '?'
                                    END
                 WHEN ' ' THEN CASE PLAN.METHOD
                                    WHEN 1 THEN 'Innr'
                                    WHEN 2 THEN 'Innr'
                                    WHEN 4 THEN 'Innr'
                                           ELSE ' '
                                    END
                          ELSE '*ERR*'
            END AS JOIN
          , CASE PLAN.METHOD
                 WHEN 0 THEN 'First'
                 WHEN 1 THEN 'NLjoin'
                 WHEN 2 THEN 'MSjoin'
                 WHEN 3 THEN 'Sort'
                 WHEN 4 THEN 'Hybrid'
                        ELSE 'UNKNWN'
            END AS METHOD
          , CASE PLAN.TABLE_TYPE
                 WHEN 'B' THEN 'Buffer'
                 WHEN 'C' THEN 'CTE'
                 WHEN 'F' THEN 'TabFun'
                 WHEN 'M' THEN 'MQT'
                 WHEN 'Q' THEN 'Temp'
                 WHEN 'R' THEN 'Recurs'
                 WHEN 'T' THEN 'Table'
                 WHEN 'W' THEN 'Work'
                          ELSE ' '
            END AS TYPE
          , SUBSTR(PLAN.CREATOR, 1, 8) AS CREATOR
          , SUBSTR(PLAN.TNAME, 1, 18) AS TABLE
          , SUBSTR(PLAN.ACCESSNAME, 1, 8) AS NDXNAME
          , CASE PLAN.PRIMARY_ACCESSTYPE
                 WHEN 'D' THEN 'D/'
                 WHEN 'T' THEN 'T/'
                          ELSE ''
            END CONCAT
            STRIP(PLAN.ACCESSTYPE) CONCAT
            CASE WHEN PLAN.PAGE_RANGE = 'Y'
                 THEN '(' CONCAT
                      STRIP(SUBSTR(STRIP(CHAR(RANGE.NUMPARTS)), 1, 4))
                      CONCAT ')'
                 ELSE ''
            END AS ACCESS
          , CASE PLAN.PREFETCH
                 WHEN 'S' THEN 'SEQ'
                 WHEN 'L' THEN 'LST'
                 WHEN 'D' THEN 'DYN'
                          ELSE ' '
            END AS PREF
          , CASE PLAN.INDEXONLY
                 WHEN 'Y' THEN 'XO'
                          ELSE ' '
            END AS XO
          , CASE PLAN.MATCHCOLS
                 WHEN 0 THEN ''
                        ELSE SUBSTR(STRIP(CHAR(PLAN.MATCHCOLS)), 1, 2)
            END AS MC
          , CASE PLAN.SORTC_GROUPBY
                 WHEN 'Y' THEN 'G'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTC_JOIN
                 WHEN 'Y' THEN 'J'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTC_ORDERBY
                 WHEN 'Y' THEN 'O'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTC_UNIQ
                 WHEN 'Y' THEN 'U'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTN_GROUPBY
                 WHEN 'Y' THEN 'G'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTN_JOIN
                 WHEN 'Y' THEN 'J'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTN_ORDERBY
                 WHEN 'Y' THEN 'O'
                          ELSE ' '
            END CONCAT
            CASE PLAN.SORTN_UNIQ
                 WHEN 'Y' THEN 'U'
                          ELSE ' '
            END AS GJOUGJOU
   FROM     PLAN_TABLE PLAN
   JOIN     QUERIES QRYS
        ON  QRYS.QUERYNO = PLAN.QUERYNO
   LEFT OUTER JOIN
            DSN_PGRANGE_TABLE RANGE
        ON  RANGE.QUERYNO  = PLAN.QUERYNO
        AND RANGE.QBLOCKNO = PLAN.QBLOCKNO
        AND RANGE.TABNO    = PLAN.TABNO
   WHERE    PLAN.METHOD &lt;&gt; 3
  UNION ALL
   SELECT   SUBSTR(STRIP(CHAR(PLAN.QUERYNO)), 1, 5) AS QUERY
          , CASE PLAN.PARENT_QBLOCKNO
                 WHEN 0 THEN ' '
                        ELSE
                        SUBSTR(STRIP(CHAR(PLAN.PARENT_QBLOCKNO)), 1, 4)
            END AS PBLK
          , SUBSTR(STRIP(CHAR(PLAN.QBLOCKNO)), 1, 4) AS QBLK
          , SUBSTR(STRIP(CHAR(PLAN.PLANNO)), 1, 4) AS PLNO
          , CASE WHEN PLAN.MIXOPSEQ &lt;&gt; 0
                 THEN SUBSTR(STRIP(CHAR(PLAN.MIXOPSEQ)), 1, 4)
                 ELSE ''
            END CONCAT
            CASE WHEN SORT.SORTNO &gt; 0
                 THEN SUBSTR('ABCDEFGHIJKLMNOPQRSTUVWXYZ',
                             SORT.SORTNO, 1)
                 ELSE ''
            END AS OPSQ
          , PLAN.QBLOCK_TYPE AS TYPE
          , '' AS JOIN
          , 'Sort' AS METHOD
          , CASE TBLS.TABLE_TYPE
                 WHEN 'B' THEN 'Buffer'
                 WHEN 'C' THEN 'CTE'
                 WHEN 'F' THEN 'TabFun'
                 WHEN 'M' THEN 'MQT'
                 WHEN 'Q' THEN 'Temp'
                 WHEN 'R' THEN 'Recurs'
                 WHEN 'T' THEN 'Table'
                 WHEN 'W' THEN 'Work'
                          ELSE ' '
            END AS TYPE
          , SUBSTR(TBLS.CREATOR, 1, 8) AS CREATOR
          , SUBSTR(TBLS.TNAME, 1, 18) AS TABLE
          , SUBSTR(PLAN.ACCESSNAME, 1, 8) AS NDXNAME
          , CASE PLAN.PRIMARY_ACCESSTYPE
                 WHEN 'D' THEN 'D/'
                 WHEN 'T' THEN 'T/'
                          ELSE ''
            END CONCAT
            STRIP(PLAN.ACCESSTYPE)
            AS ACCESS
          , CASE PLAN.PREFETCH
                 WHEN 'S' THEN 'SEQ'
                 WHEN 'L' THEN 'LST'
                 WHEN 'D' THEN 'DYN'
                          ELSE ' '
            END AS PREF
          , CASE PLAN.INDEXONLY
                 WHEN 'Y' THEN 'XO'
                          ELSE ' '
            END AS XO
          , CASE PLAN.MATCHCOLS
                 WHEN 0 THEN ''
                        ELSE SUBSTR(STRIP(CHAR(PLAN.MATCHCOLS)), 1, 2)
            END AS MC
          , SUBSTR(SORT.SORTC, 1, 4) CONCAT
            SUBSTR(SORT.SORTN, 1, 4) AS GJOUGJOU
   FROM     DSN_SORT_TABLE SORT
   JOIN     QUERIES QRYS
        ON  QRYS.QUERYNO = SORT.QUERYNO
   LEFT OUTER JOIN -- Obtain nr of table being sorted
            SORTKEYS SKEY
        ON  SKEY.QUERYNO  = SORT.QUERYNO
        AND SKEY.QBLOCKNO = SORT.QBLOCKNO
        AND SKEY.PLANNO   = SORT.PLANNO
        AND SKEY.SORTNO   = SORT.SORTNO
   LEFT OUTER JOIN -- Obtain name of table being sorted
            TABLES TBLS
        ON  TBLS.QUERYNO = SKEY.QUERYNO
        AND TBLS.TABNO   = SKEY.TABNO
   LEFT OUTER JOIN -- Join back to relevant PLAN_TABLE row
            PLAN_TABLE PLAN
        ON  PLAN.QUERYNO  = SORT.QUERYNO
        AND PLAN.QBLOCKNO = SORT.QBLOCKNO
        AND PLAN.PLANNO   = SORT.PLANNO
        AND(   PLAN.METHOD   = 3
            OR(    PLAN.SORTC_JOIN = 'Y'
               AND SUBSTR(SORT.SORTC, 2, 1) = 'J'
               )
            OR(    PLAN.SORTN_JOIN = 'Y'
               AND SUBSTR(SORT.SORTN, 2, 1) = 'J'
            )  )
   ORDER BY 1, 2 DESC, 3, 4, 5
  ;</pre>
<p><strong>The result:</strong></p>
<pre class="brush:plain">---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+-------
QUERY  PBLK  QBLK  PLNO  OPSQ   TYPE    JOIN   METHOD  TYPE    CREATOR   TABLE               NDXNAME   ACCESS      PREF  XO  MC  GJOUGJOU
---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+-------
114    1     3     1            TABLEX         First   Table   DSN8810   DEPT                XDEPT2    I                 XO
114    1     3     2            TABLEX  Innr   NLjoin  Table   DSN8810   EMP                 XEMP1     I                     1
114    1     3     3     A      TABLEX         Sort    Table   DSN8810   EMP                                                        U
114          1     1            SELECT         First   Table   DSN8810   EMP                 XEMP2     I(2)        LST       1
114          1     2            SELECT  L/R    NLjoin  Table   DSN8810   DEPT                XDEPT1    I                     1
114          1     3            SELECT  L/R    NLjoin  Work    TU00001   MANAGERS                      T/R                            J
114          1     3     A      SELECT         Sort    Work    TU00001   MANAGERS                      T/R                            J
114          1     4     A      SELECT         Sort    Table   DSN8810   EMP                                                       O
114          1     4     B      SELECT         Sort    Table   DSN8810   EMP                                                       O
DSNE610I NUMBER OF ROWS DISPLAYED IS 9
DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 100</pre>
<p><span class="notice"><strong>Concluding remark: </strong>I only had a very limited set of explain data at my disposal. Therefore I cannot guarantee these queries will show explain data for &#8220;real&#8221; SQL from your development or production environments reliably. Should you find any defect or shortcoming, I would gladly hear from you. Any other remarks or shortcomings are equally welcome.</p>
<p><strong>Remarks? Questions? More information? </strong><a href="mailto:bixoft@bixoft.nl">e-mail</a> us with your questions.</span></p>
<img src="http://feeds.feedburner.com/~r/DBBuzz/~4/KgqCg6OqGcI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbbuzz.com/2010/abe_kornelis/extended-explain-in-db2-zos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dbbuzz.com/2010/abe_kornelis/extended-explain-in-db2-zos/</feedburner:origLink></item>
		<item>
		<title>DB2 for z/OS Private Protocol migration made easier by DRDA_RESOLVE_ALIAS</title>
		<link>http://feedproxy.google.com/~r/DBBuzz/~3/_al4JbvQJdE/</link>
		<comments>http://www.dbbuzz.com/2010/christian_molaro/db2-for-zos-private-protocol-migration-done-easier-by-drda_resolve_alias/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 10:10:23 +0000</pubDate>
		<dc:creator>Cristian Molaro</dc:creator>
				<category><![CDATA[DB2 z/OS]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[DB2 10]]></category>
		<category><![CDATA[DB2 9]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[Private protocol]]></category>
		<category><![CDATA[remote access]]></category>

		<guid isPermaLink="false">http://www.dbbuzz.com/?p=162</guid>
		<description><![CDATA[Private Protocol (PP) distributed processing was deprecated in DB2 for z/OS V9 and it is not supported in DB2 10.The initial announcement was that any package marked as bound with PP will not execute in 10, but because this was an issue for installations where the BIND default was DBPROTOCOL(PRIVATE) this constraint was relaxed. According to [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">Private Protocol (PP) distributed processing was deprecated in DB2 for z/OS V9 and it is not supported in DB2 10.The initial announcement was that any package marked as bound with PP will not execute in 10, but because this was an issue for installations where the BIND default was DBPROTOCOL(PRIVATE) this constraint was relaxed. <span id="more-162"></span></div>
<div id="_mcePaste">According to how DB2 10 is documented today, these packages will be executed but they will fail when trying to run PP. Anyway, for many other reasons, you should be moving away from Private Protocol and using DRDA.</div>
<div id="_mcePaste">DRDA stands for Distributed Relational Database Architecture, an open industry standard embraced by the DB2 products and other databases. The DRDA technical documentation can be found in the Open Group website in http://www.opengroup.org. There is no technical reason today to keep using PP instead of DRDA, and you are missing some or many of the recent and not so recent developments only available when using DRDA.</div>
<div></div>
<div><strong><em>Do you know that PP has not been improved for more than 10 years?</em></strong></div>
<div></div>
<div>If you are busy migrating from PP to DRDA you may have noticed that you may need to create aliases in remote locations in order to correctly migrate some applications.</div>
<div id="_mcePaste">The fact is that PP performs always a process called Alias Resolution if an application is using three part-name aliases in the originating location. The first part of a three-part name alias indicates a local or remote server and its use allows an application to implicitly connect to a remote location.</div>
<div id="_mcePaste">Consider the following figure. This is a representation of a package running in a DB2 for z/OS, LOC1, accessing data in a remote DB2 for z/OS, LOC2. In this case the remote access is done using PP.</div>
<p><a rel="attachment wp-att-186" href="http://www.dbbuzz.com/2010/christian_molaro/db2-for-zos-private-protocol-migration-done-easier-by-drda_resolve_alias/pp_01_small2/"><img class="aligncenter size-full wp-image-186" title="pp_01_small2" src="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2010/11/pp_01_small2.jpg" alt="" width="600" height="296" /></a></p>
<p>The package PKG1 makes reference to an alias, NL.EMP, that resolves to a remote DB2 object at LOC2. For clarity I have included in this figure the SQL code involved in the alias creation, but of course the Alias is created once and before the program execution.</p>
<p>The alias resolution processing consist in the substitution of objects names, following the alias definition, in a SQL statement before the SQL is sent to a remote server. As represented there is no object named NL.EMP in LOC2 but the query will work. This is the way in which PP works, always.</p>
<p>When you migrate from PP to DRDA  you will need to BIND packages at each remote location, typically you will use the BIND COPY DBPROTOCOL(DRDA) SQLERROR(CONTINUE) bind options for this. Additionally, if the application uses three-part name aliases, and because DB2 V8 and V9 do not have the capability to perform alias resolution processing for DRDA requests, you need to create aliases in the remote location.</p>
<p>Consider how the picture will look like after migrating this application from PP to DRDA. In this case, LOC2 will contain a copy of package PKG1 as required by DRDA and this package contains the same reference to NL.EMP as the original package. In order to run this package successfully you need to create an alias in LOC2 to resolve NL.EMP into PRD.EMP.</p>
<p><a rel="attachment wp-att-187" href="http://www.dbbuzz.com/2010/christian_molaro/db2-for-zos-private-protocol-migration-done-easier-by-drda_resolve_alias/pp_02_small2/"><img class="aligncenter size-full wp-image-187" title="pp_02_small2" src="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2010/11/pp_02_small2.jpg" alt="" width="600" height="261" /></a></p>
<p>This situation has changed recently by the introduction of the zParm DRDA_RESOLVE_ALIAS. This subsystem parameter, available in V8 and V9, allows you to activate alias resolution processing for DRDA so you do not need to create an alias at the remote location anymore. This is the way in which DB2 10 works and you will not have an option for deactivating this behavior.</p>
<p>Our scenario may look like the following figure after activation of DRDA_RESOLVE_ALIAS:</p>
<p><a rel="attachment wp-att-188" href="http://www.dbbuzz.com/2010/christian_molaro/db2-for-zos-private-protocol-migration-done-easier-by-drda_resolve_alias/pp_03_small2/"><img class="aligncenter size-full wp-image-188" title="pp_03_small2" src="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2010/11/pp_03_small2.jpg" alt="" width="600" height="249" /></a></p>
<p>Now the scenario looks a lot simpler and this new zParm has the potential to make the migration from PP to DRDA a lot simpler.</p>
<p>DRDA_RESOLVE_ALIAS is set to NO by default and you need to set it to YES in order to activate this functionality. So please have a look into your current maintenance, maybe you have this zParm available but not activated.</p>
<p>PK64045: PREPARATION FOR ELIMINATION OF PRIVATE PROTOCOL IN DB2 10 FOR Z/OS (http://www-01.ibm.com/support/docview.wss?uid=swg1PK64045 ) documents this and many other features and tools that are made available to you in order to support the migration from PP to DRDA; this APAR should be your starting point in the migration process.</p>
<p>You should be considering to eliminate PP now even if your plans for DB2 10 are for a distant future. By using PP today you are missing many advantages for your distributed processing that are available only to DRDA; to describe some of them is reason enough for a new post&#8230;</p>
<p>Happy migration!<br />
#db2 #dbbuzz</p>
<img src="http://feeds.feedburner.com/~r/DBBuzz/~4/_al4JbvQJdE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbbuzz.com/2010/christian_molaro/db2-for-zos-private-protocol-migration-done-easier-by-drda_resolve_alias/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dbbuzz.com/2010/christian_molaro/db2-for-zos-private-protocol-migration-done-easier-by-drda_resolve_alias/</feedburner:origLink></item>
		<item>
		<title>FREE DB2 SQL Cookbook</title>
		<link>http://feedproxy.google.com/~r/DBBuzz/~3/Vv8YGELQFzk/</link>
		<comments>http://www.dbbuzz.com/2010/klaas_brant/free-db2-sql-cookbook/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 21:38:55 +0000</pubDate>
		<dc:creator>Klaas Brant</dc:creator>
				<category><![CDATA[DB2 LUW]]></category>
		<category><![CDATA[DB2 z/OS]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[db2 express]]></category>
		<category><![CDATA[db2 sql]]></category>
		<category><![CDATA[graeme birchall]]></category>
		<category><![CDATA[SQL Cookbook]]></category>

		<guid isPermaLink="false">http://www.dbbuzz.com/?p=141</guid>
		<description><![CDATA[In one of my last blogs I wrote about free books published by IBM. I got lots of positive feedback. People like free stuff especially when it is good. So, today I give you another pointer to another great free book. Graeme Birchall is the author of the DB2 SQL Cookbook which you can download [...]]]></description>
			<content:encoded><![CDATA[<p>In one of my last blogs I wrote about <a href="http://www.dbbuzz.com/2010/klaas_brant/free-downloadable-books-from-ibm/" target="_blank">free books published by IBM</a>. I got lots of positive feedback. People like free stuff especially when it is good. So, today I give you another pointer to another great free book.<br />
<span id="more-141"></span></p>
<p>Graeme Birchall is the author of the DB2 SQL Cookbook which you can download from his <a href="http://mysite.verizon.net/Graeme_Birchall/id1.html" target="_blank">website</a>.  His book is easy to read and he keeps it very up-to-date. In fact he recently published another update and has now some new 9.7 features in there. Graeme’s focus is DB2 LUW which does not mean his book will be useless for DB2 for z/OS people, just be careful. Compared to DB2 LUW some features are different or missing in z/OS (and the other way around).</p>
<p>His book is stacked with many examples and you can download the DDL and SQL examples from the website so you can experiment with it. “Don’t try this at home” is something that doesn’t apply to DB2 Express-C and Graeme’s book. So go download (<a href="http://db2express.com/download?S_CMP=ECDDWW01&amp;S_TACT=RFCBOOK06" target="_blank">here</a>) and install DB2 Express-C and become a SQL Guru!</p>
<p>While you are on Graeme’s site also check out his stunning view from this living room over the Hudson River and the binding instructions for the book. Of course you can ship the pdf to the copy shop but this is much more fun. Thanks Graeme for all your support to the DB2 community!</p>
<div><a rel="attachment wp-att-142" href="http://www.dbbuzz.com/2010/klaas_brant/free-db2-sql-cookbook/expressc_get/" target="_blank"><img class="alignleft size-full wp-image-142" title="ExpressC_Get" src="http://www.dbbuzz.com/wpbuzz/wp-content/uploads/2010/11/ExpressC_Get.gif" alt="" width="169" height="64" /></a></div>
<img src="http://feeds.feedburner.com/~r/DBBuzz/~4/Vv8YGELQFzk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbbuzz.com/2010/klaas_brant/free-db2-sql-cookbook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dbbuzz.com/2010/klaas_brant/free-db2-sql-cookbook/</feedburner:origLink></item>
		<item>
		<title>A DB2 Tweet Made Me Happy</title>
		<link>http://feedproxy.google.com/~r/DBBuzz/~3/HlkuaANznrE/</link>
		<comments>http://www.dbbuzz.com/2010/db2locksmith/a-db2-tweet-made-me-happy/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 11:10:34 +0000</pubDate>
		<dc:creator>DB2Locksmith</dc:creator>
				<category><![CDATA[Certification]]></category>
		<category><![CDATA[DB2 LUW]]></category>
		<category><![CDATA[database security]]></category>
		<category><![CDATA[security administrators]]></category>
		<category><![CDATA[security approach]]></category>
		<category><![CDATA[security benefit]]></category>
		<category><![CDATA[security features]]></category>
		<category><![CDATA[security questions]]></category>
		<category><![CDATA[separation of duties]]></category>

		<guid isPermaLink="false">http://www.dbbuzz.com/?p=133</guid>
		<description><![CDATA[On 11 November Ian Bjorhovde idbjorh wrote on Twitter: BTW, thanks to @DB2locksmith &#38; her blog, all of the security questions on the DB2 9.7 DBA &#38; Advanced DBA exams were cake. Ian’s tweet made me very happy.  It’s good to know that folks are reading my blogs, articles, tweets and posts and using them [...]]]></description>
			<content:encoded><![CDATA[<p>On 11 November <strong>Ian Bjorhovde </strong><a title="Ian Bjorhovde" href="http://twitter.com/#%21/idbjorh" target="_blank"><strong>idbjorh</strong></a> wrote on Twitter:<strong> </strong></p>
<blockquote><p><strong></strong>BTW, thanks to @<a href="http://twitter.com/DB2locksmith" target="_blank"><strong>DB2locksmith</strong></a> &amp; her blog, all of the security questions on the DB2 9.7 DBA &amp; Advanced DBA exams were cake.</p></blockquote>
<p><span id="more-133"></span></p>
<p>Ian’s tweet made me very happy.  It’s good to know that folks are reading my blogs, articles, tweets and posts and using them to good advantage.  Whether you are planning to sit for the certification exams or are just interested in deploying some (or all) of the security features that are incorporated in DB2 9.7 (and DB2 9.5), I  hope to help you discover that DB2 Security is “cake”.</p>
<p>Did you know that Separation of Duties is now very easy to set up?  DBAs no longer need to “automagically” get the ability to read data.  I mean, realistically, how many DBAs even have time to read data (or books or newspapers or…)?  I certainly don’t!</p>
<p>My article on Separation of Duties can be found at: <a href="http://www.databasejournal.com/features/db2/article.php/3864806/IBM-DB2-97-DBADM-and-my-Rubiks-Cube.htm" target="_blank"></a></p>
<p><a href="http://www.databasejournal.com/features/db2/article.php/3864806/IBM-DB2-97-DBADM-and-my-Rubiks-Cube.htm" target="_blank">@Database Journal: IBM DB2 9.7, DBADM and my Rubik&#8217;s Cube</a></p>
<p>Want to learn about auditing?  Significant auditing changes were made with DB2 LUW 9.5 that make using DB2 native auditing a strong security benefit.  Prior to DB2 9.5, setting up auditing meant having very limited choices.  Now Security Administrators (SECADM) can fine tune their DB2 auditing approach to a highly granular level.  Want to learn more about DB2 auditing?  Check out these posts:</p>
<p><a href="http://www.dbisoftware.com/blog/db2_security.php?id=156" target="_blank">@DBI Software: DB2 LUW Security &#8212; Did they, or Didn&#8217;t they?<br />
</a></p>
<p><a href="http://www.dbisoftware.com/blog/db2_security.php?id=162" target="_blank">@DBI Software: DB2 LUW Security &#8211; DB2Audit Part 2 of (Infinity and perhaps beyond)</a></p>
<p><a href="http://www.dbisoftware.com/blog/db2_security.php?id=185" target="_blank">@DBI Software: DB2 LUW Security &#8212; DB2 Audit Log Olympics</a></p>
<p><a href="http://www.databasejournal.com/features/db2/article.php/3890861/Database-Auditing-in-IBM-DB2-95--97-How-do-I-know.htm" target="_blank">@Database Journal: Database Auditing in IBM DB2 9.5 &amp; 9.7: How do I know&#8230;</a></p>
<p>Have you discovered DB2 Roles yet?  If not, you are missing out on some easy ways to enhance your security approach.   I’ve written about DB2 Roles in a couple of articles.  You can find out more at:</p>
<p><a href="http://www.databasejournal.com/features/db2/article.php/3877206/Database-Security-Puzzle-Solving-with-IBM-DB2-LUW-Roles.htm" target="_blank">@Database Journal: Database Security Puzzle Solving with IBM DB2 LUW Roles</a></p>
<p><a href="http://www.databasejournal.com/features/db2/article.php/3881226/Putting-IBM-DB2-Database-Security-Setup-Work-on-a-Diet.htm" target="_blank">@Database Journal: Putting IBM DB2 Database Security Setup Work on a Diet</a></p>
<p>Of course Label Based Access Controls (LBAC) are yet another awesome DB2 security feature.  If you haven’t tried using LBAC yet because you’ve heard it is a challenge to set up, I have an article to help you with that.  You can read it here:</p>
<p><a href="http://www.databasejournal.com/features/db2/article.php/3907011/IBM-DB2-LUW-Database-Hardening-with-Data-Classification-and-LBAC.htm" target="_blank">@Database Journal: IBM DB2 LUW Database Hardening with Data Classification and LBAC</a></p>
<p>I hope you will read, share, comment and even argue about my articles.  But mostly, I just hope they convince you to take a strong approach to your DB2 database security.</p>
<p>If you would like to contact me, my email is open 24&#215;7:  <a href="mailto:db2locksmith@securedb2.com">db2locksmith@securedb2.com</a>.  Now go lock those databases down!</p>
<img src="http://feeds.feedburner.com/~r/DBBuzz/~4/HlkuaANznrE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbbuzz.com/2010/db2locksmith/a-db2-tweet-made-me-happy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.dbbuzz.com/2010/db2locksmith/a-db2-tweet-made-me-happy/</feedburner:origLink></item>
		<item>
		<title>IBM Completes Acquisition of Netezza</title>
		<link>http://feedproxy.google.com/~r/DBBuzz/~3/NhF0EbOuNlM/</link>
		<comments>http://www.dbbuzz.com/2010/klaas_brant/ibm-completes-acquisition-of-netezza/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 17:02:30 +0000</pubDate>
		<dc:creator>Klaas Brant</dc:creator>
				<category><![CDATA[Business Analytics]]></category>
		<category><![CDATA[business analytics]]></category>
		<category><![CDATA[information management software]]></category>
		<category><![CDATA[netezza]]></category>
		<category><![CDATA[plug and play]]></category>

		<guid isPermaLink="false">http://www.dbbuzz.com/?p=123</guid>
		<description><![CDATA[IBM announced a definitive agreement to acquire Netezza on September 20, 2010. Today IBM has announced the closing of its acquisition of Netezza. Netezza builds data warehouse appliances which bring analytics directly into the hands of business users within every department of an organization. At the IOD conference Las Vegas I watched a demonstration of [...]]]></description>
			<content:encoded><![CDATA[<p>IBM announced a definitive agreement to acquire Netezza on September 20, 2010. Today IBM has announced the closing of its acquisition of Netezza.<br />
<span id="more-123"></span></p>
<p>Netezza builds data warehouse appliances which bring analytics directly into the hands of business users within every department of an organization. At the IOD conference Las Vegas I watched a demonstration of a Netezza machine. The simplicity of deploying Netezza appliances makes the technology ideal for the needs of high-performance analytics. The machine requires minimal administration and IT skills, it is a true plug and play. After uploading your data you are ready to deploy the solution. SQL Queries are processed using a massive parallel method. Of course you still need SQL skills and understand your data but the hassle of creating a data markt is gone. The <a href="http://www.netezza.com" target="_blank">Netezza website</a> gives you a good idea what I am talking about. The capacity of the machines varies from 1 TB up to 100 PB data! The Netezza is a remarkable machine and a great asset in IBM&#8217;s effort to provide the best business analytics. According to IBM Netezza will be integrated into IBM&#8217;s Information Management software portfolio and the many industry offerings already available.</p>
<p>What is a bit confusing are the many analytics solutions now offers: Next to the <a href="http://www.ibm.com/software/data/infosphere/smart-analytics-optimizer-z/" target="_blank">Smart Analytics Optimizer for DB2</a> on the z-series machines which exploits the zBX extension, IBM also offers the <a href="http://www.ibm.com/software/data/infosphere/smart-analytics-system/launch.html" target="_blank">Smart Analytics Solution</a> which is a prepackaged hardware / software solution.  But both of these two are much more complex than the beautiful Netezza machine. That is what you expect from an appliance.  Netezza does extremely fast query processing like your toaster does&#8230; toast!</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/tluI3tTkgiw?fs=1&#038;hl=en_GB&#038;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/tluI3tTkgiw?fs=1&#038;hl=en_GB&#038;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<img src="http://feeds.feedburner.com/~r/DBBuzz/~4/NhF0EbOuNlM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dbbuzz.com/2010/klaas_brant/ibm-completes-acquisition-of-netezza/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dbbuzz.com/2010/klaas_brant/ibm-completes-acquisition-of-netezza/</feedburner:origLink></item>
	</channel>
</rss>

