<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>The Pythian Blog</title>
	<atom:link href="http://www.pythian.com/news/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pythian.com/news</link>
	<description>News and views from Pythian DBAs</description>
	<lastBuildDate>Tue, 09 Feb 2010 16:56:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>OVSAGE Meeting Presentation January 21st Notes</title>
		<link>http://www.pythian.com/news/8259/ovsage-meeting-presentation-january-21st-notes/</link>
		<comments>http://www.pythian.com/news/8259/ovsage-meeting-presentation-january-21st-notes/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 22:18:38 +0000</pubDate>
		<dc:creator>Tim Inkpen</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[Technical Blog]]></category>
		<category><![CDATA[Ottawa Valley System Administration Guild]]></category>
		<category><![CDATA[OVSAGE]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.pythian.com/news/?p=8259</guid>
		<description><![CDATA[On Thursday, January 21, Pythian hosted the Ottawa Valley System Administration Guild (OVSAGE)  Ottawa Valley System Administration Guild (OVSAGE).
The highlight of the meeting was an interesting presentation on security by the founder of OVSAGE, Scott Murphy. The focus was on the fact that security is a mindset, not a product. Scott&#8217;s presentation looked at [...]]]></description>
			<content:encoded><![CDATA[<p>On Thursday, January 21, Pythian hosted the Ottawa Valley System Administration Guild (OVSAGE)  <a href=" http://ovsage.org/">Ottawa Valley System Administration Guild (OVSAGE)</a>.</p>
<p>The highlight of the meeting was an interesting presentation on security by the founder of OVSAGE, Scott Murphy. The focus was on the fact that security is a mindset, not a product. Scott&#8217;s presentation looked at a large number of security issues and explained in detail while technology alone cannot fix security issues. The presentation was a response to the  Amrit Williams Blog post <a href=" http://techbuddha.wordpress.com/2010/01/06/top-10-reasons-your-security-program-sucks-and-why-you-cant-do-anything-about-it/">Top 10 Reasons Your Security Program Sucks and Why You Can’t Do Anything About It</a>.</p>
<p>Scott&#8217;s presentation can be viewed here: <a href="http://drop.io/securityquagmire/asset/security-quagmire-pdf" title="security-quagmire-pdf">security-quagmire-pdf</a>.  I hope you find it useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pythian.com/news/8259/ovsage-meeting-presentation-january-21st-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogrotate #15: The Weekly Roundup of News for System Administrators</title>
		<link>http://www.pythian.com/news/8215/blogrotate-15-the-weekly-roundup-of-news-for-system-administrators/</link>
		<comments>http://www.pythian.com/news/8215/blogrotate-15-the-weekly-roundup-of-news-for-system-administrators/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 20:01:53 +0000</pubDate>
		<dc:creator>Brad Hudson</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[Technical Blog]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Blogrotate]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[linus torvalds]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[Pythian]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.pythian.com/news/?p=8215</guid>
		<description><![CDATA[Good morning and welcome to a new Blogrotate.  We missed last week&#8217;s edition because last week was insanely busy.  We take customer service very seriously here at Pythian, so when there is a conflict between client issue and a blog, the client always wins out. &#8216;Nuff said.
It&#8217;s been another busy week here and [...]]]></description>
			<content:encoded><![CDATA[<p>Good morning and welcome to a new Blogrotate.  We missed last week&#8217;s edition because last week was insanely busy.  We take customer service very seriously here at Pythian, so when there is a conflict between client issue and a blog, the client always wins out. &#8216;Nuff said.</p>
<p>It&#8217;s been another busy week here and shows no sign of slowing, but here&#8217;s a few of the things we found interesting this week.</p>
<h3>Operating Systems</h3>
<p><a href="http://www.h-online.com">The H Online</a> is reporting that <a href="http://www.h-online.com/open/news/item/Linus-Torvalds-named-one-of-the-100-most-influential-inventors-922622.html">Linus Torvalds named one of the 100 most influential inventors</a> by &#8220;The Britannica Guide to the World&#8217;s Most Influential People&#8221;.  More info can be found there, as well as a link to some free sample pages from the book.  Of course, Bill Gates was also on the list.</p>
<p>Could it be that Microsoft ranks third in Linux sales?  <span id="more-8215"></span>As part of their 2006 agreement with Novell, they were required to purchase $240 million worth of &#8220;subscription certificates&#8221; to sell or distribute.  Microsoft says that so far 475 of the coupons have been used which is equivalent to about a half million dollars worth.  <a href="http://www.h-online.com/open/news/item/Sold-out-Microsoft-s-Linux-business-is-booming-922676.html">See Sold out: Microsoft&#8217;s Linux business is booming</a> at The H Online for the skinny, and <a href="http://sdtimes.com/link/34094">Microsoft exhausts coupons for SuSE Linux</a> at SD Times for a much more detailed analysis.</p>
<p><a href="http://www.ubuntu.org">Ubuntu</a> has released Ubuntu 8.04.4, the fourth patchset for &#8220;Hardy Heron&#8221;, which is a long term support release.  See the <a href="https://wiki.ubuntu.com/HardyReleaseNotes/ChangeSummary/8.04.4">release notes</a> for the full list of updates.  Alternately, schedule a change window and <code>apt-get update</code> and <code>apt-get upgrade</code> today!</p>
<p>Did anyone realize that <a href="http://www.sco.com/">SCO</a> vs. <a href="http://www.novell.com">Novell</a> was still a going concern?  Well, apparently it is.  According to <a href="http://www.groklaw.net">Groklaw</a> <a href="http://www.groklaw.net/article.php?story=20100202113142878">SCO and Novell File Proposed Witness Lists. Again</a>.  If you enjoy a good licensing battle, I don&#8217;t think this qualifies, but you can decide for yourself.  Why can&#8217;t they both just get along?</p>
<h3>Internet</h3>
<p>According to the political news site <a href="http://www.c-span.org/">C-Span</a>&#8217;s page for <a href="http://www.c-span.org/About/Video-Help.aspx">Solving Video Problems</a>, it will be discontinuing support for Real Networks RealVideo streaming format citing as the cause lack of interest.  They do, however, still support IE6 unlike&nbsp;.&nbsp;.&nbsp;.&nbsp;</p>
<p>The official Google Enterprise Blog has announced that as of March 1<sup>st</sup>, site functionality may no longer support IE6.  New features for Google apps will be built without support for IE6 as well.  Check out the full deal, called <a href="http://googleenterprise.blogspot.com/2010/01/modern-browsers-for-modern-applications.html">Modern browsers for modern applications</a>.</p>
<p><a href="http://www.apache.org/dist/httpd/Announcement1.3.html">Apache HTTP Server 1.3.42 Released</a> by the Apache foundation spells EOL (end of life) for the popular web server, though some security patches may still be released.  I know of a lot of Oracle app servers out there running apache 1.3, so perhaps one of our crack DBAs can chime in with some details on how to handle it, what versions support 2.0, etc.  </p>
<p>The popular <a href="http://www.squid-cache.org">Squid proxy server</a> released a patch this week for a vulnerability to specially crafted DNS packets which can trigger a queue overflow and eventually a DOS.  If you make heavy use of Squid, check out the creatively named <a href="http://www.squid-cache.org/Advisories/SQUID-2010_1.txt">Squid Proxy Cache Security Update Advisory SQUID-2010:1</a>.</p>
<p>We have all heard by now of the Google attack from China.  Now Google is seeking the help of the NSA to prevent future attacks of this sort.  <a href="http://arstechnica.com">Ars Technica</a> has the full scoop, see <a href="http://arstechnica.com/security/news/2010/02/in-wake-of-hack-google-negotiating-cooperation-with-the-nsa.ars">In wake of hack, Google negotiating cooperation with the NSA</a>.</p>
<h3>Virtualization</h3>
<p><a href="http://www.vmware.com/">VMWare</a> has announced security flaws in a number of its products.  Patches have yet to be released, so if you run VMWare, keep your eye out for them.  The full info and affected products can be found in the announcement from the VMWare Security Announce mailing list, see <a href="http://lists.vmware.com/pipermail/security-announce/2010/000078.html">[Security-announce] VMSA-2010-0002 VMware vCenter update release addresses multiple security issues in Java JRE</a>.</p>
<h3>Cloud</h3>
<p>Are you running services in the &#8220;cloud&#8221;?  If so, you&#8217;ll need to monitor them.  <a href="http://www.datacenterknowledge.com">Data Center Knowledge</a> has a roundup of the current players in the cloud-monitoring game.  Check out <a href="http://www.datacenterknowledge.com/archives/2010/02/04/cloud-monitoring-services-a-resource-guide/">Cloud Monitoring Services: A Resource Guide</a>.</p>
<p>That&#8217;s all the time we have for this week, folks.  I know there have been other interesting things going on over the last two weeks, so please add them in the comments.  Have a wonderful week!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pythian.com/news/8215/blogrotate-15-the-weekly-roundup-of-news-for-system-administrators/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Log Buffer #177: a Carnival of the Vanities for DBAs</title>
		<link>http://www.pythian.com/news/8255/log-buffer-177-a-carnival-of-the-vanities-for-dbas/</link>
		<comments>http://www.pythian.com/news/8255/log-buffer-177-a-carnival-of-the-vanities-for-dbas/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 18:23:49 +0000</pubDate>
		<dc:creator>David Edwards</dc:creator>
				<category><![CDATA[Log Buffer]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Pythian]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Technical Blog]]></category>

		<guid isPermaLink="false">http://www.pythian.com/news/?p=8255</guid>
		<description><![CDATA[Welcome, everyone, to the 177th edition of Log Buffer, the weekly review of database blogs.  It was another week heavy with technical posts, so let&#8217;s waste no time, and get it all started with&#160;.&#160;.&#160;.&#160;
PostgreSQL
David Fetter shares his recipe for adding only new rows: &#8220;Let&#8217;s say you have a table and a data set, and [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome, everyone, to the 177<sup>th</sup> edition of <em>Log Buffer</em>, the weekly review of database blogs.  It was another week heavy with technical posts, so let&#8217;s waste no time, and get it all started with&nbsp;.&nbsp;.&nbsp;.&nbsp;</p>
<h3>PostgreSQL</h3>
<p><a href="http://people.planetpostgresql.org/dfetter"><strong>David Fetter</strong></a> shares his recipe for <a href="http://people.planetpostgresql.org/dfetter/index.php?/archives/48-Adding-Only-New-Rows-INSERT-IGNORE,-Done-Right.html">adding only new rows</a>: &#8220;Let&#8217;s say you have a table and a data set, and would like to add only those rows in your data set that aren&#8217;t already in the table. There are hard ways, but here&#8217;s an easy one.&#8221;</p>
<p><strong>Simon Riggs</strong>, the <a href="http://database-explorer.blogspot.com">Database Explorer</a>, offers his thoughts on <a href="http://database-explorer.blogspot.com/2010/02/parallel-query-1.html">parallel query</a> in Postgres: &#8220;I&#8217;m disappointed we&#8217;ve not made much progress with parallel operations and partitioning in core Postgres in last few releases. Recent Greenplum results show we have much work to do in improving things.&#8221;</p>
<p><a href="http://blog.endpoint.com"><strong>David Christensen</strong></a> shares a <a href="http://blog.endpoint.com/2010/01/postgresql-tip-using-pgdump-to-extract.html">PostgreSQL tip: using pg_dump to extract a single function</a>.</p>
<p><a href="http://postgresql.blogg.se"><strong>Roppert Kalmar</strong></a> shares a screenshot of the new <a href="http://postgresql.blogg.se/2010/february/sun-oracle-postgresql.html">Sun Oracle PostgreSQL</a>.  That doesn&#8217;t even sound right, does it?</p>
<p><span id="more-8255"></span></p>
<h3>Oracle</h3>
<p>Let&#8217;s begin with <a href="http://prodlife.wordpress.com"><strong>Chen Shapira</strong></a>, since she is so <a href="http://prodlife.wordpress.com/2010/02/04/excited-about-nocoug-winter-conference">excited about the NoCOUG Winter Conference</a>, and here gives a quick rundown of what attendees can expect to see.</p>
<p>Contrariwise (or not), <a href="http://iggyfernandez.wordpress.com"><strong>Iggy Fernandez</strong></a> offers <a href="http://iggyfernandez.wordpress.com/2010/01/30/advertisement-five-reasons-not-to-attend-a-nocoug-conference-in-2010">five reasons <em>not</em> to attend a NoCOUG conference in 2010</a>.  &#8220;Most Oracle professionals will benefit a lot from attending a NoCOUG conference in 2010. However, the following categories will not benefit much: &nbsp;.&nbsp;.&nbsp;.&nbsp; Those Oracle professionals who believe that Oracle’s goal in buying Sun is to replace Oracle Database with MySQL. This is probably a very small group&nbsp;.&nbsp;.&nbsp;.&nbsp;&#8221;</p>
<p><strong>Uwe Hesse</strong>, the <a href="http://uhesse.wordpress.com">Oracle Instructor</a> and his readers share a discussion on <a href="http://uhesse.wordpress.com/2010/02/03/sharing-read-only-tablespaces-between-databases">sharing READ ONLY Tablespaces between databases</a>.  Uwe says, &#8220;&nbsp;.&nbsp;.&nbsp;.&nbsp;the question was raised, whether it is possible to use the same READ ONLY Tablespace in multiple Databases. At first glance, I thought that this should of course be possible, though the answers where somewhat discouraging. So I have done a quick test to prove it&nbsp;.&nbsp;.&nbsp;.&nbsp;&#8221;</p>
<p><strong>Krishna Manoharan</strong> of <a href="http://dsstos.blogspot.com">Performance Engineering and Capacity Planning</a> steps up with an item on <a href="http://dsstos.blogspot.com/2010/01/understanding-cpu-time-as-oracle-wait.html">understanding CPU time as an Oracle Wait event</a>.  Krishna pursues the question, &#8220;[What] if the stats from the system show that CPU Utilization (% Util and Run queue) are well within thresholds and show plenty of available capacity, but Oracle continues to report CPU time as a Top 5 wait event?&#8221;</p>
<p><a href="http://hoopercharles.wordpress.com"><strong>Charles Hooper</strong></a> grapples the question, <a href="http://hoopercharles.wordpress.com/2010/01/29/explain-plan-which-plan-is-better">Which Plan is Better?</a> Charles writes, &#8220;A recent post appeared in the OTN forums that indirectly asked the question: which execution plan is better? &nbsp;.&nbsp;.&nbsp;.&nbsp; If you are attempting to conclude which plan is faster/better based on the estimates in [a] first plan and an altered plan with a hinted cardinality estimate, you might be setting yourself up for failure.&#8221;</p>
<p>&#8220;Seems like all I ever write about these days is SQL Profiles,&#8221; writes <a href="http://kerryosborne.oracle-guy.com"><strong>Kerry Osborne</strong></a>.  &#8220;I do other stuff, honest! It just seems like getting Oracle to do what you want when you can’t touch the code is the closest thing to &#8216;Magic&#8217; that DBAs get to do.&#8221; Here&#8217;s Kerry&#8217;s post on <a href="http://kerryosborne.oracle-guy.com/2010/02/single-hint-sql-profiles">single-hint SQL profiles</a>, inspired by a discussion with <a href="http://jonathanlewis.wordpress.com"><strong>Jonathan Lewis</strong></a>.</p>
<p>And now here is Jonathan with a post on SQL Server. &nbsp;.&nbsp;.&nbsp;.&nbsp; Wait a minute&#8211;what the?!</p>
<h3>SQL Server</h3>
<p>Ahem. And now here is <a href="http://jonathanlewis.wordpress.com/2010/02/04/sql-server/">Jonathan Lewis with a post on SQL Server</a>.  Yes, Jonathan Lewis, famous Oracle guy.  &#8220;A few days ago,&#8221; Jonathan writes, &#8220;I did a presentation on SQL Server. &nbsp;.&nbsp;.&nbsp;.&nbsp; The title was &#8216;What the Enterprise needs in an RDBMS&#8217;&nbsp;.&nbsp;.&nbsp;.&nbsp;and the presentation was about whether or not you could find everything you needed in SQL Server 2008, where you’d have to look in the manuals, and supplementary questions you’d have to ask.&#8221;</p>
<p><a href="http://blogs.msdn.com/buckwoody"><strong>Buck Woody</strong></a> also has been, as it were, treading the boards: &#8220;I give series of classes and presentations on Data Design. I say &#8216;data&#8217; design instead of &#8216;database&#8217; design because we should consider more than just the database. &nbsp;.&nbsp;.&nbsp;.&nbsp; Here are the links I use in that presentation. Although this isn&#8217;t a comprehensive <a href="http://blogs.msdn.com/buckwoody/archive/2010/02/02/data-design.aspx">list of Data Design topics</a>, I’ll visit this topic from time to time so you may want to bookmark this page in your favorites[.]&#8221;</p>
<p><a href="http://sqlblog.com/blogs/merrill_aldrich"><strong>Merrill Aldrich</strong></a> admonishes, <a href="http://sqlblog.com/blogs/merrill_aldrich/archive/2010/02/01/don-t-get-burned-by-replication-of-sql-server-files.aspx">don&#8217;t get burned by replication of SQL Server files</a>: &#8220;&nbsp;.&nbsp;.&nbsp;.&nbsp;if you try to use file system replication (robocopy, xcopy, repli-whatever) to maintain a DR server from your production SQL Server, you might be in for a nasty surprise.&#8221;</p>
<p><a href="http://sqlblog.com/blogs/buck_woody"><strong>Buck Woody</strong></a> relays more nastiness in his post, <a href="http://sqlblog.com/blogs/buck_woody/archive/2010/02/01/transparent-data-encryption-and-the-latest-data-breach.aspx">Transparent Data Encryption and the Latest Data Breach</a>: &#8220;Well, It’s happened again. Hundreds of thousands of private records were stolen from a database. This one, however, was different. No one stole any passwords, no one did any social engineering, nothing was captured in-line. No, this one was accomplished by stealing the actual hard drives themselves!&#8221; </p>
<p>One way to circumvent this&#8211;no hard drives! But wait&#8211;before you send them all to the kilns, <a href="http://sqlblog.com/blogs/aaron_bertrand"><strong>Aaron Bertrand</strong></a> says, <a href="http://sqlblog.com/blogs/aaron_bertrand/archive/2010/02/01/your-laptop-may-be-ready-for-ssds-but-are-your-sql-servers.aspx">your laptop may be ready for SSDs, but are your SQL Servers?</a> &#8220;I am not trying to be Debbie Downer here,&#8221; he explains,&#8221; &#8230; SSDs sound great&nbsp;.&nbsp;.&nbsp;.&nbsp; But right now, if you are looking at expanding or upgrading your I/O under SQL Server, I&#8217;d give the vendors some time to shake off these early jitters.&#8221; </p>
<p>Here&#8217;s <strong>Thomas LaRock</strong>, <a href="http://dbasurvivor.com">DBA Survivor</a>, with a <a href="http://dbasurvivor.com/?p=29">Name That Caption Contest</a>. The deal is: &#8220;The person who provides the best caption will win a copy of my book,&#8221; <em>DBA Survivor</em>, &#8220;and I will figure out a way to incorporate your caption into the main page.&#8221;</p>
<h3>MySQL</h3>
<p>On <a href="http://serge.frezefond.free.fr">Serge&#8217;s blog</a> appears a useful item on <a href="http://serge.frezefond.free.fr/?p=286">using UNIX_TIMESTAMP as a partitioning function for MySQL 5.1.43</a></p>
<p><strong>Falko Timme</strong> shares <a href="http://www.howtoforge.com/how-to-back-up-mysql-databases-with-mylvmbackup-on-debian-lenny">How To Back Up MySQL Databases With mylvmbackup On Debian Lenny</a> on <a href="http://www.howtoforge.com">HowtoForge</a>.</p>
<p><a href="http://blog.wl0.org">Simon Mudd</a> has some <a href="http://blog.wl0.org/2010/01/further-thoughts-on-mysql-upgrades/">further thoughts on mysql upgrades</a>.</p>
<p>From atop his <a href="http://mysqlsoapbox.blogspot.com">MySQL Soapbox</a>, <strong>Lachlan Mulcahy</strong> address the matter of a <a href="http://mysqlsoapbox.blogspot.com/2010/02/replicate-do-db-gotcha.html">replicate-do-db gotcha</a>, discovered lurking in the config file.</p>
<p>Gotcha again. <a href="http://mysqldba.blogspot.com/"><strong>Dathan Vance Pattishall</strong></a> says, &#8220;INNODB has some irritating gotchas that makes disk space management hard. In 2002ish INNODB, added innodb_file_per_table to get around allot of these issues, but it does not fix everything.&#8221;  The post is <a href="http://mysqldba.blogspot.com/2010/02/innodbfilepertable-shrinking-table.html">innodb_file_per_table, shrinking table spaces and the data dictionary</a>.</p>
<p>On <a href="http://explainextended.com"><strong>EXPLAIN EXTENDED</strong></a>, Quassnoi examines some details of <a href="http://explainextended.com/2010/02/01/join-on-overlapping-date-ranges/">join on overlapping date ranges</a> in answering the question, &#8220;Is there any way to optimize the query for overlapping ranges in MySQL if both ranges are dynamic?&#8221;</p>
<p>Last, <a href="http://infinidb.org/infinidb-blog">The InfiniDB Team Blog</a> announces that <a href="http://infinidb.org/infinidb-blog/infinidb-10-is-now-available.html">InfiniDB 1.0 is Now Available!</a></p>
<p>That&#8217;s all there&#8217;s room and time for.  Let&#8217;s hear your favourite DB blogs from this week, and we&#8217;ll see each other again in the next one.  Till then!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pythian.com/news/8255/log-buffer-177-a-carnival-of-the-vanities-for-dbas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle: What is an Unrecoverable Data File?</title>
		<link>http://www.pythian.com/news/7401/oracle-what-is-an-unrecoverable-data-file/</link>
		<comments>http://www.pythian.com/news/7401/oracle-what-is-an-unrecoverable-data-file/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 18:14:38 +0000</pubDate>
		<dc:creator>Catherine Chow</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle E-Business Suite]]></category>
		<category><![CDATA[Technical Blog]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[datafile]]></category>
		<category><![CDATA[e-business suite]]></category>
		<category><![CDATA[force_logging]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[nologging]]></category>
		<category><![CDATA[ORA-1578]]></category>
		<category><![CDATA[unrecoverable]]></category>

		<guid isPermaLink="false">http://www.pythian.com/news/?p=7401</guid>
		<description><![CDATA[A data file is considered unrecoverable if an unrecoverable operation has been performed on an object residing in the data file since the last backup of the data file. Operations will become unrecoverable if they are not logged in the redo log. These “nologging” operations that suppress the generation of redo log, include the following:

direct [...]]]></description>
			<content:encoded><![CDATA[<p>A data file is considered unrecoverable if an unrecoverable operation has been performed on an object residing in the data file since the last backup of the data file. Operations will become unrecoverable if they are not logged in the redo log. These “nologging” operations that suppress the generation of redo log, include the following:</p>
<ol>
<li>direct load/SQL load</li>
<li>direct-path inserts result from insert or merge statement</li>
<li><code>ALTER TABLE</code> commands</li>
<li><code>CREATE</code> and <code>ALTER INDEX</code> commands</li>
<li><code>INSERT /*+APPEND*/</code></li>
<li>partition manipulation</li>
<li>database object that has explicitly set with nologging option</li>
<li>Oracle eBusiness Suite concurrent job execution identified in Oracle metalink note: 216211.1</li>
<li>Oracle eBusiness Suite patches activities that involve database object manipulation</li>
</ol>
<p>The database recovery operations will look completed, but those data blocks used by the nologging objects in the data file will be marked corrupted when they are recovered. Accessing those nologging data objects in the recovered database instance will return a data block reading error such as <code>ORA-1578</code> and <code>ORA-26040</code>, and the logical corruption in the data file will prevent the database object from being useful in the recovered database instance.</p>
<h3>How do we detect unrecoverable operations?</h3>
<p>Unrecoverable data files are those that involve nologging operations since the last successful backup took place. There are several ways to identify them.  <span id="more-7401"></span>You can locate those data files either with RMAN or by querying <code>V$</code> tables.</p>
<h4>A. Retrieve unrecoverable data file information from RMAN</h4>
<pre class="brush: plain; light: true;">
RMAN&gt; report unrecoverable database;

Report of files that need backup due to unrecoverable operations
File Type of Backup Required Name
---- ----------------------- -----------------------------------

14   full or incremental     +DGDATA/A1/data file/apps_ts_tx_data.286.662131793

32   full or incremental     +DGDATA/A1/data file/apps_ts_tx_data.326.667991737

33   full or incremental     +DGDATA/A1/data file/apps_ts_tx_data.327.667991741

…

80   full or incremental     +DGDATA/A1/data file/A1_obiee_data.386.682596961

81   full or incremental     +DGDATA/A1/data file/A1_obiee_data.387.682596961

82   full or incremental     +DGDATA/A1/data file/A1_obiee_data.388.684801365

RMAN&gt; exit
</pre>
<h4>B. Retrieve unrecoverable data file information directly from v$ table</h4>
<pre class="brush: sql; gutter: false;">
SQL&gt; SELECT df.name data file_name, df.unrecoverable_time
FROM v$data file df, v$backup bk
WHERE df.file#=bk.file#
and df.unrecoverable_change#!=0
and df.unrecoverable_time &amp;gt;  (select max(end_time) from v$rman_backup_job_details
* where INPUT_TYPE in ('DB FULL' ,'DB INCR'))

DATAFILE_NAME                                                UNRECOVERABLE_TIME

------------------------------------------------------------ -------------------

+DGDATA/A1/data file/apps_ts_tx_data.286.662131793          2010-01-08:00:13:13

+DGDATA/A1/data file/apps_ts_tx_data.326.667991737          2010-01-08:00:13:13

+DGDATA/A1/data file/apps_ts_tx_data.327.667991741          2010-01-08:00:13:10

…

+DGDATA/A1/data file/A1_obiee_data.386.682596961           2010-01-08:06:18:34

+DGDATA/A1/data file/A1_obiee_data.387.682596961           2010-01-08:06:18:34

+DGDATA/A1/data file/A1_obiee_data.388.684801365           2010-01-08:06:18:34

21 rows selected.
</pre>
<h3>What database objects are affected by the unrecoverable operation?</h3>
<p>We can locate the database objects affected by these unrecoverable operations by retrieving these objects with the following script:</p>
<pre class="brush: sql; gutter: false;">
select distinct dbo.owner,dbo.object_name, dbo.object_type, dfs.tablespace_name,
dbt.logging table_level_logging, ts.logging tablespace_level_logging
from v$segstat ss, dba_tablespaces ts, dba_objects dbo, dba_tables dbt,
v$data file df, dba_data_files dfs, v$tablespace vts
where ss.statistic_name ='physical writes direct'
and dbo.object_id = ss.obj#
and vts.ts# = ss.ts#
and ts.tablespace_name = vts.name
and ss.value != 0
and df.unrecoverable_change# != 0
and dfs.file_name = df.name
and ts.tablespace_name = dfs.tablespace_name
and dbt.owner = dbo.owner
and dbt.table_name = dbo.object_name

OWNER           OBJECT_NAME                    OBJECT_TYPE         TABLESPACE_NAME  TAB TABLESPAC

--------------- ------------------------------ ------------------- ---------------- --- ---------

APPLSYS         WF_LOCAL_ROLES_STAGE           TABLE               APPS_TS_TX_DATA  YES LOGGING

APPLSYS         WF_LOCAL_USER_ROLES_STAGE      TABLE               APPS_TS_TX_DATA  NO  LOGGING

APPLSYS         WF_UR_ASSIGNMENTS_STAGE        TABLE               APPS_TS_TX_DATA  YES LOGGING

APPS            DR$IBE_CT_IMEDIA_SEARCH_IM$I   TABLE               APPS_TS_TX_DATA  YES LOGGING

MSC             MSC_TP_ID_LID                  TABLE               APPS_TS_TX_DATA  YES LOGGING

MSC             MSC_TP_SITE_ID_LID             TABLE               APPS_TS_TX_DATA  YES LOGGING

OBIEE_OWNER     GL_DETAIL                      TABLE               A1_OBIEE_DATA    NO  LOGGING

OBIEE_OWNER     GL_EXPENDITURES                TABLE               A1_OBIEE_DATA    NO  LOGGING

OBIEE_OWNER     A1_DEPARTMENT_DIM              TABLE               A1_OBIEE_DATA    NO  LOGGING

OBIEE_OWNER     A1_FUNCTION_CHANNEL            TABLE               A1_OBIEE_DATA    NO  LOGGING

OBIEE_OWNER     A1_GEOGRAPHY                   TABLE               A1_OBIEE_DATA    NO  LOGGING

OWNER           OBJECT_NAME                    OBJECT_TYPE         TABLESPACE_NAME  TAB TABLESPAC

--------------- ------------------------------ ------------------- ---------------- --- ---------

OBIEE_OWNER     A1_PRODUCT_CLASS               TABLE               A1_OBIEE_DATA    NO  LOGGING

12 rows selected.
</pre>
<p>Directly knowing the objects or tables affected in the recovery operation due to nologging, can help both us and the data owners to make an informed decision on whether nologging needs to be disabled, based on the transactional or analytical nature of the data in those tables.</p>
<h3>How do we fix unrecoverable data files?</h3>
<p>One way to force these nologging objects operation to be captured in the redo log, is to implement <code>FORCE_LOGGING</code>, a feature introduced in Oracle 9i to allow Oracle to force logging in redo even if nologging operations are performed. Force logging can be enforced at the database and tablespace level. In Oracle ERP e-Business suite, the default installation of EBS sets the database <code>FORCE_LOGGING</code> option to <code>NO</code>. The intent of this setup is to enhance overall system performance. If this setting is not changed to <code>YES</code>, all “nologging” operations mentioned in this section will suppress the generation of redo log, causing unrecoverable operations issues with all nologging objects.</p>
<p>Before altering the database or tablespace to force logging, it is important to evaluate the benefit of force logging versus those of nologging.  Once force logging at the database level is turned on, redos are generated for all operations, dramatically increasing redo size. In addition, since there is an extra operation of capturing to redo log, performance of data inserts and updates will also be affected.</p>
<p>If a decision has been made to keep the database and tablespace in <code>NO</code> force logging mode, it is imperative for the business owner and database administrator to collectively ensure a good backup is taken immediately prior to any patching activities, direct load, and other nologging operations take place. In addition, DBAs should periodically query database to identify data files that contain nologging activities, and whenever that happens, to perform a database backup to ensure data file recovery integrity. For example, in the case of Oracle ERP e-Business Suite, this would mean a database backup will need to be performed every time prior to any patching activities.</p>
<h3>Conclusion</h3>
<p>If there are unrecoverable data files identified in the database, it is important for DBAs to provide the  affected non-recoverable nologging objects to the business owner to determine if these objects are of important recovery value. Examples of nologging objects which can be safely ignored includes tables that can easily be generated from source table, or tables designed to be temporary in nature.</p>
<p>It is important for business owners to decide if the performance gain from setting database or tablespace to <code>NO</code> force logging, offsets the recoverability of nologging database objects identified. Should a decision be made to keep the database and tablespace in <code>NO</code> force logging mode&#8211;which makes data files unrecoverable&#8211;both DBA and business owner need to be vigilant to ensure that database recoverability is achievable by taking more frequent backups.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pythian.com/news/7401/oracle-what-is-an-unrecoverable-data-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle GoldenGate Extract Internals, Part III</title>
		<link>http://www.pythian.com/news/7617/oracle-goldengate-extract-internals-part-iii/</link>
		<comments>http://www.pythian.com/news/7617/oracle-goldengate-extract-internals-part-iii/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 22:27:32 +0000</pubDate>
		<dc:creator>Alex Fatkulin</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Technical Blog]]></category>
		<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[internals]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[tracing]]></category>

		<guid isPermaLink="false">http://www.pythian.com/news/?p=7617</guid>
		<description><![CDATA[This is the third post in Oracle GoldenGate Extract Internals series (links to part I and part II).
In this post, we&#8217;re going to take a closer look at various queries that the Extract process uses against the database. As before, we will start by examining the strace output:

nanosleep({1, 0}, NULL)      [...]]]></description>
			<content:encoded><![CDATA[<p>This is the third post in Oracle GoldenGate Extract Internals series (links to <a href="http://www.pythian.com/news/7225/oracle-goldengate-extract-internals-part-i">part I</a> and <a href="http://www.pythian.com/news/7459/oracle-goldengate-extract-internals-part-ii/">part II</a>).</p>
<p>In this post, we&#8217;re going to take a closer look at various queries that the Extract process uses against the database. As before, we will start by examining the <em>strace</em> output:</p>
<pre class="brush: bash; highlight: [5,7,9,11];">
nanosleep({1, 0}, NULL)                 = 0
...
read(20, &quot;\1\&quot;&#92;&#48;&#92;&#48;\255\1&#92;&#48;&#92;&#48;\217&#92;&#48;&#92;&#48;&#92;&#48;H\200\366\256\5\24&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&quot;..., 1024000) = 1024000
...
write(16, &quot;&#92;&#48;$&#92;&#48;&#92;&#48;\6&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\3N'\7&#92;&#48;&#92;&#48;&#92;&#48;\2&#92;&#48;&#92;&#48;&#92;&#48;`&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\7&#92;&#48;011&quot;..., 36) = 36
read(17, &quot;&#92;&#48;\351&#92;&#48;&#92;&#48;\6&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\6\1\&quot;\375\2&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\2&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&quot;..., 8208) = 233
write(16, &quot;&#92;&#48; &#92;&#48;&#92;&#48;\6&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\3N(\10&#92;&#48;&#92;&#48;&#92;&#48;\2&#92;&#48;&#92;&#48;&#92;&#48;`&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\7&#92;&#48;011&quot;, 32) = 32
read(17, &quot;&#92;&#48;\343&#92;&#48;&#92;&#48;\6&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\6\1\&quot;\7\1&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\2&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&quot;..., 8208) = 227
write(16, &quot;&#92;&#48;K&#92;&#48;&#92;&#48;\6&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\3N)\t&#92;&#48;&#92;&#48;&#92;&#48;\2&#92;&#48;&#92;&#48;&#92;&#48;`&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\7,/&quot;..., 75) = 75
read(17, &quot;&#92;&#48;\341&#92;&#48;&#92;&#48;\6&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\6\1\&quot;\375\1&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\2&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&quot;..., 8208) = 225
write(16, &quot;&#92;&#48;Q&#92;&#48;&#92;&#48;\6&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\3N*\n&#92;&#48;&#92;&#48;&#92;&#48;\2&#92;&#48;&#92;&#48;&#92;&#48;`&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\7,/&quot;..., 81) = 81
read(17, &quot;&#92;&#48;\254&#92;&#48;&#92;&#48;\6&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\4\1&#92;&#48;&#92;&#48;&#92;&#48;)&#92;&#48;\1&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;{\5&#92;&#48;&#92;&#48;&#92;&#48;&#92;&#48;\n&#92;&#48;&#92;&#48;&#92;&#48;&quot;..., 8208) = 172
lseek(20, 227328, SEEK_SET)             = 227328
nanosleep({1, 0}, NULL)                 = 0
</pre>
<p>File descriptors 16 and 17 are the pipes for one of the bequeath connections we have with the database. There are four queries being submitted each cycle (following the same order as those being sent to a database): <span id="more-7617"></span></p>
<pre class="brush: sql;">
SELECT DECODE(archived, 'YES', 1, 0), status  FROM v$log WHERE thread# = :ora_thread AND sequence# = :ora_seq_no

SELECT MAX(sequence#)  FROM v$log WHERE thread# = :ora_thread AND status in ('INVALIDATED', 'CURRENT', 'ACTIVE')

SELECT DECODE(status, 'STALE', 1, 0) FROM v$logfile WHERE member = :log_name

SELECT 1  FROM V$LOGFILE WHERE(STATUS NOT IN ('STALE', 'INVALID') OR STATUS IS NULL) AND MEMBER &lt;&gt; :log_name AND EXISTS ( SELECT 1 FROM V$LOG WHERE GROUP#  = V$LOGFILE.GROUP# AND THREAD# = :ora_thread AND SEQUENCE# = :ora_seq_no ) AND ROWNUM = 1
</pre>
<p>The purpose of these statements is to constantly keep an eye on what&#8217;s happening inside the database by regularly polling the contents of the above views. What&#8217;s worth mentioning about the above queries is that all of them will cause extra I/O to the controlfile. On my test database, that equaled 640KB each cycle (40 I/O requests, 16KB each). In most cases, this is nothing to worry about&#8211;just keep the additional I/O in mind in case your controfile is already a hot spot.</p>
<p>The redo log stores object identifiers (a number), which means that when  the Extract process encounters a supported operation, it needs a way to find out more details. This is achieved by a couple of statements against the data dictionary. The following statement will be issued first:</p>
<pre class="brush: sql; gutter: false;">
SELECT u.name, o.name, o.dataobj#, o.type#, (SELECT bitand(t.property, 1) FROM sys.tab$ t WHERE t.obj# = :ora_object_id) FROM sys.obj$ o, sys.user$ u WHERE o.obj# = :ora_object_id  AND decode(bitand(o.flags, 128), 128, 'YES', 'NO') = 'NO'  AND o.owner# = u.user# AND decode(bitand(o.flags, 16), 0, 'N', 16, 'Y', 'N') = 'N' AND (o.type# in (1, 19, 20, 34) OR EXISTS (SELECT 'x' FROM sys.tab$ t WHERE t.obj# = :ora_object_id))
</pre>
<p>In case the object turns out to be a table, it will be checked whether it is an overflow segment for an IOT:</p>
<pre class="brush: sql; gutter: false;">
SELECT nvl(iot_name, 'NULL')   FROM all_tables WHERE owner = :owner AND table_name = :object_name
</pre>
<p>This allows the Extract process to figure out whether it needs to process changes, in case the overflow segment belongs to an IOT from which we&#8217;re capturing the data. In case the object in question turns out to be an index, a corresponding check will be made to see whether it&#8217;s an underlying index for an IOT:</p>
<pre class="brush: sql; gutter: false;">
SELECT table_owner, table_name FROM all_indexes WHERE index_name = :object_name AND         owner = :owner AND index_type = 'IOT - TOP'
</pre>
<p>This is required so that the changes made to an IOT can be captured, in case it belongs to an interested tables list.</p>
<p>The above queries will be executed regardless of whether or not you&#8217;re interested in capturing changes from the particular object,  because the queries are required <em>before</em> you can make that decision. In case this is something we&#8217;re interested in, additional information will be requested:</p>
<pre class="brush: sql; gutter: false;">
select object_type, object_name, subobject_name from dba_objects where object_id = :ora_object_id
</pre>
<p>The above statement is necessarily in case we&#8217;re dealing with the partitioned object and, depending on the result, one of the following two statements will be executed:</p>
<pre class="brush: sql;">select ts.bigfile from dba_tablespaces ts,  all_tables t  where t.table_name = :ora_object_name and  t.tablespace_name = ts.tablespace_name and rownum = 1

select t.bigfile from dba_tablespaces t,  all_tab_partitions p  where p.partition_name = :ora_subobject_name and   p.tablespace_name = t.tablespace_name and rownum=1
</pre>
<p>There is obviously an issue with the above two statements.  Neither of them specify the object owner and, in case you have two (or more) objects with the same name but in different schemas, the above statements may return incorrect information, if these objects are located in different tablespace types. </p>
<p>It&#8217;s interesting how the issue is shoved away using <code>rownum = 1</code> condition. What could the potential impact be? One thought that immediately comes to mind is that the way <code>ROWIDs</code> are organized is different between small- and big-file tablespaces (the part being used for a relative data file number in a small file tablespace is used for a block number in case of a big file tablespace), so some functionality that potentially relies on that could be affected. I&#8217;ve got a couple of ideas, but I&#8217;ll hold these until I do some testing.</p>
<p>What else is interesting? The big thing is that none of the information on columns is being resolved. All I&#8217;m going to say right now is that column information will be fetched by the Replicat process using the destination system&#8217;s data dictionary. Combine this with the fact that an online data dictionary does not store historical information about an object&#8217;s metadata, and you have a perfect recipe to get yourself into various nasty situations (which is exactly the reason why Oracle Streams relies on MVDD instead of the online data dictionary). But more on that when we get to the Replicat process internals series.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pythian.com/news/7617/oracle-goldengate-extract-internals-part-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contributing to CPAN: PAUSE Id, Bug Tracking, and Code Repositories</title>
		<link>http://www.pythian.com/news/7877/contributing-to-cpan-pause-id-bug-tracking-and-code-repositories/</link>
		<comments>http://www.pythian.com/news/7877/contributing-to-cpan-pause-id-bug-tracking-and-code-repositories/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 21:01:48 +0000</pubDate>
		<dc:creator>Yanick Champoux</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[Technical Blog]]></category>
		<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.pythian.com/news/?p=7877</guid>
		<description><![CDATA[<p>Want to contribute to your favorite CPAN module, or maybe create your own, but don't have the foggiest idea how to do it?  Here's a few notes, tips, tricks and links that might help you get started.</p>
]]></description>
			<content:encoded><![CDATA[<div id="attachment_8115" class="wp-caption alignleft" style="width: 310px"><img src="http://www.pythian.com/news/wp-content/uploads/cpan-wants-you.jpg" alt="CPAN Wants You!" title="cpan-wants-you" width="300" height="373" class="size-full wp-image-8115" /><p class="wp-caption-text">CPAN Wants You!</p></div>
<p>Want to contribute to your favorite CPAN module, or maybe create your own, but don&#8217;t have the foggiest idea how to do it?  Here are a few notes, tips, tricks, and links that might help you get started.</p>
<h3>PAUSE id</h3>
<p>While bringing awesome street cred, having a <a href="http://pause.perl.org/pause/query?ACTION=request_id">PAUSE id</a> is strictly necessary only if you want to maintain or co-maintain a module.  If you just want to contribute code, you&#8217;ll perfectly be able to do without, as it will usually be done via patches submitted to a bug tracking system, a code repository or using good ol&#8217; email.</p>
<h4>Becoming a co-maintainer</h4>
<p>Becoming the co-maintainer of a module gives you the power to upload authorized releases of the modules on CPAN.  To become one, the maintainer of the module simply has to promote you as such on PAUSE.</p>
<h4>Creating a new module</h4>
<p>You want to create your own module? <span id="more-7877"></span> Excellent!  But before you do it, make sure that you&nbsp;.&nbsp;.&nbsp;.&nbsp;</p>
<ul>
<li> you verified on <a href="http://search.cpan.org">CPAN</a> that there&#8217;s not already a module that already scratch that particular itch.</li>
<li>You made sure that the module uses a <a href="http://pause.perl.org/pause/query?ACTION=pause_namingmodules">descriptive and pertinent namespace</a>.</li>
</ul>
<p>Once this is done, go ahead: log on <a href="http://pause.cpan.org">PAUSE</a> and <a href="https://pause.perl.org/pause/authenquery?ACTION=apply_mod">register the module</a>.</p>
<h4>Adopting an abandoned module</h4>
<p>There&#8217;s a module apparently abandoned by its owner that you&#8217;d love to take over?  The procedure for that is given in the <a href="http://www.cpan.org/misc/cpan-faq.html#How_adopt_module">CPAN FAQ</a>, and it can be boiled down to:</p>
<ul>
<li>Try to get in contact with the current maintainer.</li>
<li>If you reach him or her, make puppy eyes and ask if you can take over.</li>
<li>If they are agreeable, they will flip over the maintenance of the module to you on PAUSE, and that&#8217;s all there is to it.</li>
<li>If you tried their email addresses, poked around in mailing lists, forums and other places without any luck, wait a little bit (a couple of weeks) and contact the PAUSE admins.</li>
</ul>
<h4>Module created! How do I upload releases, now?</h4>
<p>You upload new versions of a module via the <a href="https://pause.perl.org/pause/authenquery?ACTION=add_uri">PAUSE interface</a> or via ftp.</p>
<p>Alternatively, and more conveniently, you can also use the <code>cpan-upload</code> script provided by <a href="http://search.cpan.org/~rjbs/CPAN-Uploader">CPAN::Uploader</a>.</p>
<h3>Bug Tracking</h3>
<p>Contributing to a module means fixing bugs or implementing new enhancements.  To find those, who are you gonna call? The Bug Tracker!</p>
<h4>rt.cpan.org</h4>
<p>By default, every module on CPAN has a bug tracking queue on <a href="//rt.cpan.org">rt.cpan.org</a>. For example, the one for Git::CPAN::Patch is at <a href="http://rt.cpan.org/Public/Dist/Display.html?Name=Git-CPAN-Patch">http://rt.cpan.org/Public/Dist/Display.html?Name=Git-CPAN-Patch</a>.</p>
<p>Bug reporting can be done via the web interface, or by sending an email to <code>bug-<em>module</em>@rt.cpan.org</code> (e.g., <code>bug-git-cpan-patch@rt.cpan.org</code>).</p>
<h4>&#8230;or somewhere else</h4>
<p>Sometimes, the module&#8217;s maintainer uses a different bug tracking system.  You&#8217;ll typically find it mentioned in the POD, or in the <code>META.yml</code>:</p>
<pre class="brush: bash;">
$ curl -L http://search.cpan.org/dist/Git-CPAN-Patch/META.yml | \
  perl -MYAML -0 -E'say Load(&lt;&gt;)-&gt;{resources}{bugtracker}'

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Git-CPAN-Patch
</pre>
<p>If you don&#8217;t feel inclined to dig into <code>META.yml</code> for information, there is a <a href="http://userscripts.org/scripts/show/31748">Greasemonkey script</a> that will do it for you, and automatically add a link to the bugtracker (along some other goodies) on the module&#8217;s CPAN page.</p>
<h4>&#8230;or here, there and everywhere</h4>
<p>What if the bugs are kept on rt.cpan.org, and on the local bug tracking system of Github, and a few other places?  You can either follow them manually, or you can get funky and experiment with <a href="http://syncwith.us/sd/using">SD</a>, a peer-to-peer ticket tracking system that can sync with and merge the information of several online bug tracking systems.  SD, it goes without saying, can be found on CPAN as <a href="http://search.cpan.org/dist/App-SD">App::SD</a>.</p>
<h3>Code Repository</h3>
<p>Most, but not all, modules have a public code repository somewhere out there.  Just like for the bug tracking system look for it in the POD, or in the <code>META.yml</code>.  It will be displayed on the module&#8217;s cpan page as well.</p>
<pre class="brush: bash;">
$ curl -L http://search.cpan.org/dist/Git-CPAN-Patch/META.yml | \
    perl -MYAML -0 -E'say Load(&lt;&gt;)-&gt;{resources}{repository}'

git://github.com/yanick/git-cpan-patch.git
</pre>
<h4>&lt;singing name=&#8221;Adam West&#8221;&gt;Na na na na, Na na na na, GitPAN!&lt;/singing&gt;</h4>
<p>Thanks to <a href="http://search.cpan.org/~MSCHWERN/">Schwern</a>, all CPAN distributions now have a <a href="http://github.com">GitHub</a> repository tracking its releases.  They can all be found under the GitHub <a href="http://github.com/gitpan">gitpan account</a>, and follow the pattern <a href="http://github.com/gitpan/Git-CPAN-Patch">http://github.com/gitpan/Git-CPAN-Patch</a>.</p>
<h4>Git::CPAN::Patch</h4>
<p>Speaking of <a href="http://search.cpan.org/dist/Git-CPAN-Patch">Git::CPAN::Patch</a>, you can use its set of scripts to ease the creation of CPAN-related git repositories.  It also includes scripts to send patches directly from your local repository to a rt bug queue. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.pythian.com/news/7877/contributing-to-cpan-pause-id-bug-tracking-and-code-repositories/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Easy Pivot Query Result in pre-11g Oracle</title>
		<link>http://www.pythian.com/news/7851/easy-pivot-query-result-in-pre-11g-oracle/</link>
		<comments>http://www.pythian.com/news/7851/easy-pivot-query-result-in-pre-11g-oracle/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 19:48:46 +0000</pubDate>
		<dc:creator>Marc Billette</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Technical Blog]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[pivot]]></category>
		<category><![CDATA[pivot tables]]></category>

		<guid isPermaLink="false">http://www.pythian.com/news/?p=7851</guid>
		<description><![CDATA[I was asked, the other day, to automate the creation of a client&#8217;s weekly report, which is a pivot table of some aggregate data generated by a query. 
As we know, prior to 11g, Oracle did not have a simple table pivot feature. 11g has changed that, and the pivot clause is certainly useful. It [...]]]></description>
			<content:encoded><![CDATA[<p>I was asked, the other day, to automate the creation of a client&#8217;s weekly report, which is a pivot table of some aggregate data generated by a query. </p>
<p>As we know, prior to 11g, Oracle did not have a simple table pivot feature. 11g has changed that, and the pivot clause is certainly useful. It requires, however, an aggregation calculation in the intersection (at least that&#8217;s what I got from the documentation). But what if you already have the data to populate in the intersection area? Or, you may no longer have the raw data to aggregate it again. In that case, you are forced to trick it to get an aggregation in.</p>
<p>I&#8217;ve written a set of fairly simple PL/SQL code that handles this task in all versions of Oracle that supports associative nested VARRAYs (I have no clue when that started getting supported. It sure works great with 10g).</p>
<p>Here is how my code works: <span id="more-7851"></span></p>
<ol>
<li>A function is used to pass in your query that retrieves your raw data.
<p>The function needs a query that returns three columns. The first one for the row labels, the second one for the column labels, and the third one for the intersection data.</li>
<li>The function converts the result set of the supplied query into a pivot as CSV strings (don&#8217;t worry, I&#8217;ll explain later how to make those separate columns).</li>
<li>Each line (row) is summarized in an extra trailing column.</li>
<li>An extra trailing line is also generated with the column summaries and a Grand Total at the end.</li>
<li>The function pipes the result out, as it gets readied, to the calling query, which receives it as a single column set of rows.</li>
</ol>
<p>This is the core of the work. The resulting CSV strings can be spooled in a file and loaded into any decent spreadsheet editor.</p>
<p>Some of you may say, <em>yeah okay, but I&#8217;m really looking at getting back a cursor with this data in separate columns</em>. That&#8217;s not so difficult to do, assuming you are willing to live with some minor details, which I will explain later.</p>
<p>Alright, here is the function:</p>
<pre class="brush: sql; collapse: true; light: false; toolbar: true;">
-- we need this TYPE created to return a cursor of varchar2.
create type varchar2_type as table of varchar2(2000);
/
create or replace function pivot_three_cols_table_func
(p_query_string varchar2, sum_cols_ind INTEGER default 0, sum_lines_ind INTEGER default 0)
return varchar2_type pipelined
as
   type tb1  is table of number index by varchar2(1000);
   type ntb1 is table of tb1 index by varchar2(500);
   nvar ntb1;

   type coltb is table of varchar2(20) index by varchar2(20);
   cols coltb;

   col_1 varchar2(1000);
   col_2 varchar2(500);
   col_3 number;

   line varchar2(1000);
   col  varchar2(500);

   sum_lines number :=0;
   sum_cols  number :=0;
   sum_pivot number :=0;

   type item_cur_type is ref cursor;
   item item_cur_type;

   str varchar2(32767);
begin
   -- initialize the empty array
   nvar := nvar;

   -- load the array
   open item for p_query_string;
   loop
       fetch item into col_1, col_2, col_3;
       -- replace commas with space from the col_1 and col2 as
       -- these are used as column delimiters in the csv
       col_1 := replace(col_1,',',' ');
       col_2 := replace(col_2,',',' ');
       nvar(col_1)(col_2) := col_3;
       exit when item%notfound;
   end loop;
   close item;

   -- print the crosstab/pivot header
   --  -- first load the list of distinct column names in an associative array
   line := nvar.first;
   for t in 1..nvar.count loop
       col := nvar(line).first;
       for d in 1..nvar(line).count loop
           cols(col) := col;
           col := nvar(line).next(col);
       end loop;
       line := nvar.next(line);
   end loop;
   -- -- print the list of disctinct column names
   str := 'TITLE,';
   col := cols.first;
   for d in 1..cols.count loop
       str := str||cols(col)||',';
       col := cols.next(col);
   end loop;
   if sum_cols_ind = 1 then
      str := str||'TOTAL';
   else
      str:= substr(str,1,length(str)-1);
   end if;
   pipe row (str);

   -- sum and print the column data
   line := nvar.first;
   for t in 1..nvar.count loop
       str := line||',';
       sum_cols :=0;
       col := cols.first;
       for d in 1..cols.count loop
           begin
             str := str||to_char(nvar(line)(col))||',';
             if sum_cols_ind = 1 then
                sum_cols := sum_cols + nvar(line)(col);
             end if;
           exception when NO_DATA_FOUND then
             str := str||',';
           end;
           col := cols.next(col);
       end loop;
       if sum_cols_ind = 1 then
          str := str||to_char(sum_cols);
       else
          str:= substr(str,1,length(str)-1);
       end if;
       pipe row (str);
       line := nvar.next(line);
   end loop;

   if sum_lines_ind = 1 then
      -- sum and print the column totals
      str := 'TOTAL RESULT,';
      line := nvar.first;
      col  := cols.first;
      for d in 1..cols.count loop
        sum_lines :=0;
        line := nvar.first;
        for t in 1..nvar.count loop
          begin
            sum_lines := sum_lines + nvar(line)(col);
          exception when NO_DATA_FOUND then
            null;
          end;
          line := nvar.next(line);
        end loop;
        str := str||to_char(sum_lines)||',';
        sum_pivot := sum_pivot + sum_lines;
        col := cols.next(col);
      end loop;

      -- print the Grand Total
      str := str||to_char(sum_pivot);
      pipe row (str);
   end if;
   return;
end;
/
</pre>
<p>Lots to say about it:</p>
<ol>
<li>It does the job. At least it did&#8211;and very well&#8211;during my testing.</li>
<li>It can summarize the intersection data. So that third column in your query must be a number. It would be pretty easy to change that for someone who wanted to show text data in the intersection.</li>
<li>The first two columns must be characters. If you want numbers in the labels, simply get them converted in your driving query as in <code>to_char(num_col)</code>.</li>
<li>I have included parameters to turn on and off the SUM calculations. The default is to not sum nor print the column and line totals.</li>
<li>The function produces CSV strings so that it will support any number of columns. No need to know how many columns it will have, nor what the names are. This meant that I had to make it replace all commas in the input strings with a space. Otherwise, it would have caused the CSV parsing to fail which would in turn have created some pretty ugly spreadsheets.  So, your labels will lose any single quotes they may have (not a big deal in my opinion).</li>
<li>Line labels can be as large as 1000 characters. That is huge and very inconvenient, I would argue, as it would make the pivot table difficult to read. It&#8217;s up to you to control the width of the data your query provides in the first column.</li>
<li>Column labels can be as large as 500 characters. Same issue as for line labels. If you have wide column labels, your pivot table may be difficult to read, so set them appropriately in the second column.</li>
<li>Each CSV string/line is limited to 32767 characters. This would certainly create a very ugly pivot table if you have too many columns or very wide data. But that&#8217;s the limit, which I haven&#8217;t actually tested.</li>
</ol>
<p>Let&#8217;s see a sample query and output. It creates a pivot of Oracle-archived logs showing the sum of log sizes created by weekday across 24 hours for the last year. DBAs will be familiar with that.</p>
<p>First here&#8217;s the source query and a data subset:</p>
<pre class="brush: sql;">
SELECT To_Char(completion_time,'Day') WD,
       To_Char(completion_time,'HH24') HR,
       round((Sum(blocks)*block_size)/1048576) mb
  FROM v$archived_log
 WHERE completion_time &gt;= SYSDATE - 365
 GROUP BY to_Char(completion_time,'Day'), To_Char(completion_time,'HH24'), block_size;

WD        HR   MB
Friday    02   80
Friday    04   131
Thursday  17   128
Thursday  19   75
Thursday  18   130
Friday    03   75
Thursday  20   80
Thursday  21   542
Thursday  15   18
Thursday  22   207
Friday    00   85
Friday    06   56
Thursday  16   128
Thursday  23   88
Friday    01   92
Friday    05   72
...
</pre>
<p>This data gets pivoted using this query:</p>
<pre class="brush: sql;">
select column_value
  from table(pivot_three_cols_table_func(
       'select d, h, round((Sum(blocks)*block_size)/1048576) MB
          from (SELECT To_Char(completion_time,''Day'') D,
                       To_Char(completion_time,''HH24'') H,
                       blocks,
                       block_size
                  FROM v$archived_log
                 WHERE completion_time &gt;= SYSDATE - 365
               )
         GROUP BY d, h, block_size
       ',1,1))
;
</pre>
<p>Note that single quotes needed to be doubled in the subquery string. Also, I&#8217;ve generated the line and column sums.</p>
<p>The output is as follows:</p>
<pre class="brush: plain; wrap-lines: false;">
COLUMN_VALUE
------------
TITLE,00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,TOTAL
Friday   ,299,261,233,216,404,242,265,328,420,482,443,465,465,396,403,412,309,263,221,168,142,1340,386,144,8707
Monday   ,186,172,160,157,277,168,184,206,292,320,306,295,288,232,261,278,278,266,204,184,171,1730,436,192,7243
Saturday ,152,155,166,146,275,146,251,162,213,185,150,158,155,145,161,144,142,148,141,140,149,1854,278,153,5769
Sunday   ,146,141,156,144,259,142,156,163,190,174,162,165,158,141,141,141,170,202,190,172,149,1815,240,161,5678
Thursday ,209,167,198,151,274,158,186,203,291,281,338,264,296,286,259,259,272,285,257,186,172,1641,620,251,7504
Tuesday  ,160,161,164,162,280,146,174,206,269,314,313,328,276,302,284,279,287,266,261,182,199,989,362,179,6543
Wednesday,196,178,161,172,288,181,175,220,313,347,316,277,264,281,243,312,292,272,270,207,159,1026,360,165,6675
TOTAL RESULT,1348,1235,1238,1148,2057,1183,1391,1488,1988,2103,2028,1952,1902,1783,1752,1825,1750,1702,1544,1239,1141,10395,2682,1245,48119
</pre>
<p>Voila! The pivot is done and can be saved in a file and imported into a spreadsheet, or whatever other tools you use that reads CSV data.</p>
<p>Now, for those who want distinct columns for this data. I&#8217;ve created a simple CSV parser function that can be used to extract distinct columns. Here&#8217;s the code for this CSV parser function:</p>
<pre class="brush: sql;">
create or replace function csv_element(string varchar2, element_number number)
return varchar2
as
i number := element_number;
r varchar2(2000);
begin
  case
    when (i=1 and instr(string,',',1)=0) then r:= string;
    when (i=1) then r := substr(string,1,instr(string,',',1,1) -1 );
    when (i&gt;1 and (instr(string,',',1,i-1)&gt;0 and instr(string,',',1,i)=0)) then r:= substr(string,instr(string,',',-1)+1);
    when (i&gt;1) then r := substr(string,instr(string,',',1,i-1)+1,instr(string,',',1,i)-instr(string,',',1,i-1)-1 );
    else r:= null;
  end case;
  return r;
end;
/
</pre>
<p>The <code>csv_element</code> function handles strings with no commas, and returns that value as the first and only element. It also takes care of the trailing string, and it will also return a null value for columns that are beyond the number of elements in the strings. That is as sophisticated as I needed it to be.</p>
<p>Here&#8217;s the previous sample query using the function to return the data as separate columns:</p>
<pre class="brush: sql;">
select csv_element(column_value,1) c1, csv_element(column_value,2) c2,
       csv_element(column_value,3) c3, csv_element(column_value,4) c4,
       csv_element(column_value,5) c5, csv_element(column_value,6) c6,
       csv_element(column_value,7) c7, csv_element(column_value,8) c8,
       csv_element(column_value,9) c9, csv_element(column_value,10) c10,
       csv_element(column_value,11) c11, csv_element(column_value,12) c12,
       csv_element(column_value,13) c13, csv_element(column_value,14) c14,
       csv_element(column_value,15) c15, csv_element(column_value,16) c16,
       csv_element(column_value,17) c17, csv_element(column_value,18) c18,
       csv_element(column_value,19) c19, csv_element(column_value,20) c20,
       csv_element(column_value,21) c21, csv_element(column_value,22) c22,
       csv_element(column_value,23) c23, csv_element(column_value,24) c24,
       csv_element(column_value,25) c25, csv_element(column_value,26) c26,
       csv_element(column_value,27) c27, csv_element(column_value,28) c28
  from table(pivot_three_cols_table_func(
       'select d, h, round((Sum(blocks)*block_size)/1048576) MB
          from (SELECT To_Char(completion_time,''Day'') D,
                       To_Char(completion_time,''HH24'') H,
                       blocks,
                       block_size
                  FROM v$archived_log
                 WHERE completion_time &gt;= SYSDATE - 365
               )
         GROUP BY d, h, block_size
       ',1,1))
;
</pre>
<p>I&#8217;ve deliberately added two extra columns in the query (27 and 28) so that you can see it handling it fine. Here&#8217;s the output of this query (with some columns removed for clearer formatting):</p>
<pre class="brush: plain;">
C1           C2   C3   C4   ... C23   C24  C25  C26        C27  C28
TITLE        00   01   02   ... 21    22   23   TOTAL
Friday       299  261  233  ... 1340  386  144  8721
Monday       186  172  160  ... 1730  436  192  7243
Saturday     152  155  166  ... 1854  278  153  5769
Sunday       146  141  156  ... 1815  240  161  5678
Thursday     209  167  198  ... 1593  620  251  7456
Tuesday      160  161  164  ... 989   362  179  6543
Wednesday    196  178  161  ... 1026  360  165  6675
TOTAL RESULT 1348 1235 1238 ... 10347 2682 1245 48085
</pre>
<p>As you can see, columns 27 and 28 are there, but null. This way, you can have a generic wrapper query with a hundred columns if you&#8217;d like, without worrying about how many columns will be produced from your base query. Just make sure your app can handle that.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pythian.com/news/7851/easy-pivot-query-result-in-pre-11g-oracle/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Basic Joins and Subqueries Video</title>
		<link>http://www.pythian.com/news/7921/basic-joins-and-subqueries-video/</link>
		<comments>http://www.pythian.com/news/7921/basic-joins-and-subqueries-video/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 14:19:38 +0000</pubDate>
		<dc:creator>Sheeri Cabral</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Pythian Appearances]]></category>
		<category><![CDATA[Technical Blog]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[Pythian]]></category>
		<category><![CDATA[straight_join]]></category>
		<category><![CDATA[subquery]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.pythian.com/news/?p=7921</guid>
		<description><![CDATA[Last month at the Boston MySQL User Group, I went through the meanings of INNER, LEFT/RIGHT OUTER, CROSS, NATURAL joins, how to do a FULL OUTER JOIN in MySQL, and what STRAIGHT_JOIN means.  I also explained how to recognize when you want those types of joins, and best practices for the semantics of writing [...]]]></description>
			<content:encoded><![CDATA[<p>Last month at the Boston MySQL User Group, I went through the meanings of INNER, LEFT/RIGHT OUTER, CROSS, NATURAL joins, how to do a FULL OUTER JOIN in MySQL, and what STRAIGHT_JOIN means.  I also explained how to recognize when you want those types of joins, and best practices for the semantics of writing joins and design patterns.  Subqueries were explained in this session, and some examples of how to think differently so that you end up writing JOINs instead of subqueries.  The slides (slightly different from the slides in the video &#8212; due to error correction) can be found at <A HREF=http://technocation.org/files/doc/2010_01MySQLJoins.pdf>http://technocation.org/files/doc/2010_01MySQLJoins.pdf</A>.</p>
<p>Here&#8217;s the video:<br />
<span id="more-7921"></span><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/YU6QsDvMk1U&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/YU6QsDvMk1U&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pythian.com/news/7921/basic-joins-and-subqueries-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Log Buffer #176: a Carnival of the Vanities for DBAs</title>
		<link>http://www.pythian.com/news/7771/log-buffer-176-a-carnival-of-the-vanities-for-dbas/</link>
		<comments>http://www.pythian.com/news/7771/log-buffer-176-a-carnival-of-the-vanities-for-dbas/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 19:02:46 +0000</pubDate>
		<dc:creator>David Edwards</dc:creator>
				<category><![CDATA[Log Buffer]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Technical Blog]]></category>

		<guid isPermaLink="false">http://www.pythian.com/news/?p=7771</guid>
		<description><![CDATA[This is the 176th edition of Log Buffer, the weekly review of database blogs.
There were heaps of mostly technical posts this week. I think bloggers are tired of kicking around the ins-and-outs of Sun and Oracle, and wanted to talk about what really matters.  So let&#8217;s start with&#160;.&#160;.&#160;.&#160;
Oracle
Harald van Breederode shows how to setup [...]]]></description>
			<content:encoded><![CDATA[<p>This is the 176<sup>th</sup> edition of <a href="http://www.pythian.com/news/about-log-buffer"><em>Log Buffer</em></a>, the weekly review of database blogs.</p>
<p>There were heaps of mostly technical posts this week. I think bloggers are tired of kicking around the ins-and-outs of Sun and Oracle, and wanted to talk about what really matters.  So let&#8217;s start with&nbsp;.&nbsp;.&nbsp;.&nbsp;</p>
<h3>Oracle</h3>
<p><a href="http://prutser.wordpress.com"><strong>Harald van Breederode</strong></a> shows <a href="http://prutser.wordpress.com/2010/01/26/how-to-setup-a-private-dns-for-your-virtual-cluster">how to setup a private DNS for your virtual cluster</a>.</p>
<p>Pythian&#8217;s <a href="http://www.pythian.com/blogs/author/alexf"><strong>Alex Fatkulin</strong></a> discusses <a href="http://www.pythian.com/news/7225/oracle-goldengate-extract-internals-part-i">Oracle GoldenGate Extract Internals</a>.</p>
<p>From <a href="http://hoopercharles.wordpress.com"><strong>Charles Hooper</strong></a> comes this investigation: <a href="http://hoopercharles.wordpress.com/2010/01/22/simple-query-generates-complex-execution-plan-the-mysterious-4063-88-second-single-block-read-wait">Simple Query Generates Complex Execution Plan, the Mysterious 4063.88 Second Single Block Read Wait</a>.</p>
<p><a href="http://coskan.wordpress.com"><strong>Coskan Gundogar</strong></a> was also in a deductive frame of mind.  Here is his <a href="http://coskan.wordpress.com/2010/01/27/working-with-statspack-part-1a-diagnosis">Working with statspack-part-1a-Diagnosis</a>, featuring both a challenge and purty pictures (pastels!).</p>
<p>Here is <a href="http://www.oracle-internals.com"><strong>Jonah H. Harris</strong></a> with an introduction to the <a href="http://www.oracle-internals.com/?p=55">NEXTGRES Gateway, a MySQL Emulator for Oracle</a>.  Jonah writes: &#8220;So, a few people have asked me what NEXTGRES Gateway is.  My short answer, the ultimate database compatibility server. &nbsp;.&nbsp;.&nbsp;.&nbsp;I’ve been working on this personal project non-stop for the last 8 months and am really excited about it.&#8221;</p>
<p><span id="more-7771"></span></p>
<p><a href="http://jhdba.wordpress.com"><strong>John Hallas</strong></a> lays out <a href="http://jhdba.wordpress.com/2010/01/22/the-use-of-functions-in-a-profile-file/">the use of functions in a .profile file</a>.</p>
<h3>MySQL</h3>
<p>In a different part of config file land, <a href="http://ronaldbradford.com/blog"><strong>Ronald Bradford</strong></a> cautions us, <a href="http://ronaldbradford.com/blog/be-sure-to-know-your-my-cnf-sections-2010-01-26/">be sure to know your my.cnf [sections]</a>.  &#8220;The MySQL configuration file,&#8221; he writes, &#8220;e.g. /etc/my.cnf has a number of different section headings including [mysql], [mysqld], [mysqld_safe]. It is important that you ensure you put the right variables into the right section.&#8221;</p>
<p><a href="http://www.pythian.com/blogs/author/sheeri"><strong>Sheeri K. Cabral</strong></a> responds with <a href="http://www.pythian.com/news/7673/know-your-my-cnf-groups-part-ii/">Know your my.cnf groups, part II</a>.</p>
<p><a href="http://www.xaprb.com/blog"><strong>Baron Schwartz</strong></a> inspires a lot of conversation with his post, <a href="http://www.xaprb.com/blog/2010/01/22/my-wishlist-for-sql-the-until-clause">My wishlist for SQL: the UNTIL clause.</a>  Baron says, &#8220;I’d like an UNTIL clause, please. I’d use it sort of like LIMIT in MySQL and PostgreSQL, except that it would define when to stop returning looking for rows, instead of defining how many to return.&#8221; </p>
<p><a href="http://rpbouman.blogspot.com"><strong>Roland Bouman</strong></a> has gone about adding stuff to MySQL on his own, as he demonstrates in <a href="http://rpbouman.blogspot.com/2010/01/easter-eggs-for-mysql-and-kettle.html">Easter Eggs for MySQL and Kettle</a> with a MySQL stored function to calculate easter day.</p>
<p>Speaking of things hidden, here is a note from <a href="http://www.clusterdb.com/mysql-cluster"><strong>Andrew Morgan</strong></a> pointing out the <a href="http://www.clusterdb.com/mysql-cluster/location-of-mysql-documentation-and-binaries/">location of MySQL documentation and binaries</a>.</p>
<p><a href="http://marcalff.blogspot.com"><strong>Marc Alff</strong></a> is looking forward, and offers a <a href="http://marcalff.blogspot.com/2010/01/performance-schema-overview.html">performance schema overview</a>, &#8220;&nbsp;.&nbsp;.&nbsp;.&nbsp;an introduction to the new &#8216;performance schema&#8217; feature, which will be part of the upcoming MySQL 5.5 release.&#8221;</p>
<p>We must have at least one post on the whole Sun/Oracle thing, and I found a good one&#8211;<a href="http://scaledb.blogspot.com/2010/01/oracle-mysql-eu-and-wayne-gretzky.html">Oracle, MySQL, the EU and Wayne Gretzky</a>, by <a href="http://scaledb.blogspot.com">Mike Hogan</a>.  The keynote: &#8220;&#8216;A good hockey player plays where the puck is. A great hockey player plays where the puck is going to be&#8217; &#8212; Wayne Gretzky&#8221;</p>
<h3>SQL Server</h3>
<p>To quote Oracle blogger <strong>Kevin Closson</strong>, &#8220;little things doth crabby make.&#8221; Or as <a href="http://sqlblog.com/blogs/aaron_bertrand"><strong>Aaron Bertrand</strong></a> would put it, <a href="http://sqlblog.com/blogs/aaron_bertrand/archive/2010/01/27/sometimes-it-s-the-small-things-match-column-names-in-subqueries.aspx">Sometimes it&#8217;s the small things: match column names in subqueries</a>.  Aaron writes, &#8220;The behavior of column matching in subqueries is a little peculiar, to say the least.  If you&#8217;ve been bitten by this behavior once, you&#8217;re unlikely to have been bitten a second time, but for some of us it just takes a while to sink in.&#8221;</p>
<p><a href="http://sqlblog.com/blogs/jonathan_kehayias"><strong>Jonathan Kehayias</strong></a> has another puzzler:  <a href="http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/01/27/question-is-nt-authority-system-a-sysadmin-in-your-sql-server-and-why.aspx">is NT AUTHORITY\SYSTEM a sysadmin in your SQL Server and why?</a> &#8220;I was prompted to ask this question while configuring a server early today and after installing SQL Server 2008 on Windows Server 2008 R2, I noticed that despite being installed from default using a Domain Account for the Services, the Local System account was still a sysadmin in SQL Server.&#8221;</p>
<p>Another little thing, courtesy <a href="http://sqlblog.com/blogs/roman_rehak"><strong>Roman Rehak</strong></a>: &#8220;One of the things that I found dissapointing in Management Studio 2008 is that in the event of a crash (and in addition to crashing in the first place), is that on a restart it doesn&#8217;t show me a dialog with a list of auto-saved files, like my SSMS 2005 did.&#8221;  But, he says, <a href="http://sqlblog.com/blogs/roman_rehak/archive/2010/01/28/your-work-may-not-be-lost.aspx">your work may not be lost</a>.</p>
<p><a href="http://sqlfool.com"><strong>Michelle Ufford</strong></a> has updates on her <a href="http://sqlfool.com/2010/01/index-defrag-script-updates-beta-testers-needed">index defrag script – beta testers are needed</a>.  </p>
<p><a href="http://sqlblogcasts.com/blogs/simons"><strong>Simon Sabin</strong></a> shares <a href="http://sqlblogcasts.com/blogs/simons/archive/2010/01/25/SQLBits-Videos-for-SQLBits-V.aspx">SQLBits videos for SQLBits V</a>.</p>
<h3>PostgreSQL</h3>
<p><a href="http://momjian.us/main/blogs/pgblog"><strong>Bruce Momjian</strong></a> relays an appeal for <a href="http://momjian.us/main/blogs/pgblog/2010.html#January_29_2010">a new project slogan for Postgres</a>, and shares the leading candidates thus far. &#8220;PostgreSQL: The &#8216;Open&#8217; Open Source Database&#8221;  Who <em>can</em> they be comparing themselves to?  &#8220;PostgreSQL: Unpronounceably awesome!&#8221;  That&#8217;s the one!</p>
<p>Bruce also enumerates what he sees as <a href="http://momjian.us/main/blogs/pgblog/2010.html#January_28_2010_4">threats to Postgres</a>.</p>
<p><a href="http://www.depesz.com"><strong>Hubert Lubacziewski</strong></a> notes that he is now <a href="http://www.depesz.com/index.php/2010/01/21/waiting-for-9-0/">waiting for … 9.0</a>: &#8220;I’ve written 29 posts about new features in 8.5. And now core team decided to name it 9.0. Great.&#8221;</p>
<p>And so the <a href="http://database-explorer.blogspot.com"><strong>Database Explorer</strong></a> appears with a brief update on <a href="http://database-explorer.blogspot.com/2010/01/90-replication-features.html">9.0 Replication Features</a>.</p>
<p>Last, <a href="http://kendalvandyke.blogspot.com"><strong>Kendal Van Dyke</strong></a> exhorts you to <a href="http://kendalvandyke.blogspot.com/2010/01/use-your-tech-skills-to-help-haiti.html">use your tech skills to help <strong>Haiti</strong></a>.  He writes, &#8220;So what do you do if you want to help? &nbsp;.&nbsp;.&nbsp;.&nbsp; I came across an article on cnn.com which highlighted &#8220;Crisis Camp Haiti&#8221;, a group of volunteers working to build digital maps, mobile apps, and searching through data to help relief groups in Haiti coordinates their efforts. They&#8217;ve got a website up at http://crisiscommons.org/ and you can follow them on Twitter (@crisiscamp).&#8221;</p>
<p>That&#8217;s all for now.  See you for <em>LB</em> #177!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pythian.com/news/7771/log-buffer-176-a-carnival-of-the-vanities-for-dbas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pythian Goes to RMOUG Training Days 2010, Denver</title>
		<link>http://www.pythian.com/news/7719/pythian-goes-to-rmoug-training-days-2010-denver/</link>
		<comments>http://www.pythian.com/news/7719/pythian-goes-to-rmoug-training-days-2010-denver/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 01:23:53 +0000</pubDate>
		<dc:creator>Alex Gorbachev</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Pythian Appearances]]></category>
		<category><![CDATA[Technical Blog]]></category>
		<category><![CDATA[appearances]]></category>
		<category><![CDATA[ASM]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[Denver]]></category>
		<category><![CDATA[dog]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[RMOUG]]></category>
		<category><![CDATA[skiing]]></category>

		<guid isPermaLink="false">http://www.pythian.com/news/?p=7719</guid>
		<description><![CDATA[
Update 9-Feb-10: Want to schedule a meeting with Pythian folks? See Pythian Events page.
I&#8217;m so much looking forward to the next conference in my schedule &#8212; RMOUG Training Days 2010. It would be only my second time I&#8217;m presenting at the RMOUG but it was enough to go there once to understand that it&#8217;s one [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rmoug.org/training.htm"><img src="http://www.pythian.com/news/wp-content/uploads/F548900035_RMOUGheader600.jpg" alt="RMOUG Training Days 2010" title="RMOUG Training Days 2010" width="600" height="135" class="alignleft size-full wp-image-7725" /></a></p>
<p><i><b>Update 9-Feb-10:</b> Want to schedule a meeting with Pythian folks? See <a href="http://www.pythian.com/news_and_events/events/">Pythian Events</a> page.</i></p>
<p>I&#8217;m so much looking forward to the next conference in my schedule &#8212; <a href="http://www.rmoug.org/training.htm">RMOUG Training Days 2010</a>. It would be only my second time I&#8217;m presenting at the RMOUG but it was enough to go there once to understand that it&#8217;s one of the top rated Oracle User Group conferences in the world. <a href="http://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.schedule?conference_id=62">Some of the great speakers</a> are presenting and registration fees are very low compare to other events of comparable quality. If your conference budget is low this year &#8212; that&#8217;s the conference you don&#8217;t want to miss!</p>
<p>Two of us from Pythian are going to speak at RMOUG Training Days 2010 that starts in just 4 week. I present the following session:</p>
<p><b>Alex Gorbachev: <a href="http://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.display_presenter_abstract?conference_id=62&amp;presenter_id=86&amp;abstract_id=245" target="abstract" onclick="popWindow('http://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.display_presenter_abstract?conference_id=62&amp;presenter_id=86&amp;abstract_id=245', 'abstract', 'width=700,height=600,left=300,top=0,resizable,scrollbars')">Oracle ASM 11g &#8212; The Evolution.</a></b><br />
<i>Oracle Automatic Storage Management has proven to be one of the most widely adopted new features in Oracle Database 10g and it has been dramatically improved in the later 11g releases. This presentation will explain what changes are solved by ASM, how these challenges are solved, what barriers there are to ASM adoptions, and how 11g Release 2 addresses these barriers.</i></p>
<p>My colleague, <a href="http://www.pythian.com/news/author/kutrovsky/">Christo Kutrovsky</a> is presenting the following:<br />
<span id="more-7719"></span><br />
<b>Christo Kutrovsky: <a href="http://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.display_presenter_abstract?conference_id=62&amp;presenter_id=174&amp;abstract_id=167" target="abstract" onclick="popWindow('http://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.display_presenter_abstract?conference_id=62&amp;presenter_id=174&amp;abstract_id=167', 'abstract', 'width=700,height=600,left=300,top=0,resizable,scrollbars')">RAC+ASM &#8212; Three Years in Production. Stories to Share.</a></b><br />
<i>This presentation will cover Migration via LUN re-assignment; migrating online migration from EMC to 3par; removing ASMLIB and using EMC multipathing; gotchas when building ASMLIB devices with multipathing; corrupting your production database beyond repair with duplicate database on ASM; overwriting your data with ASM due to incorrect naming convention; corrupting your production database with NETAPP/NFS due to Oracle bug; two nodes RAC is not HA; performing network maintenance; and RAC + SAME = LAME.</i></p>
<p>Coincidentally, out topics are very close. However, they don&#8217;t overlap but rather complement each other when it comes to ASM. While my session covers more the history of ASM, why it arrived in Oracle stack and, of course, why ASM 11g versions is so much better in many respects compare to ASM 10g, Christo delivers a more practical speech with some interesting real world scenarios.</p>
<p><i><b>Update 9-Feb-10:</b> Unfortunately, Jay Caviness session is canceled so there will be only 3 ASM presentations.</i></p>
<p>Actually, there are <del datetime="2010-02-09T16:09:02+00:00">four</del> 3 sessions around ASM at the conference and all of them are  back to back starting at 11:45 on the second day of the conference. Christo&#8217;s session is the first followed by Marshall Presser from Oracle <a href="http://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.display_presenter_abstract?conference_id=62&amp;presenter_id=272&amp;abstract_id=207" target="abstract" onclick="popWindow('http://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.display_presenter_abstract?conference_id=62&amp;presenter_id=272&amp;abstract_id=207', 'abstract', 'width=700,height=600,left=300,top=0,resizable,scrollbars')">presenting on ASM Cluster Filesystem (ACFS)</a>. I&#8217;ve had a pleasure to meet Marshall literally couple weeks ago here in Ottawa during a joint workshop on Oracle RAC (well, Marchall was actually running the show and I contributed some examples of real-world experience with Pythian customers). Marshall has long history with Oracle and definitely knows what he is talking about. He is also a very entertaining speaker so I recommend you attend his session if you are interested in the topic.</p>
<p>My session is on next and I&#8217;ll make sure not to cover much of ACFS &#8212; I have way more to go through during my slot. <del datetime="2010-02-09T16:09:02+00:00">In addition, there is a dedicated presentation on <a href="http://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.display_presenter_abstract?conference_id=62&amp;presenter_id=15&amp;abstract_id=118" target="abstract" onclick="popWindow('http://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.display_presenter_abstract?conference_id=62&amp;presenter_id=15&amp;abstract_id=118', 'abstract', 'width=700,height=600,left=300,top=0,resizable,scrollbars')">Oracle ASM 11gR2 new features</a> from <a href="http://grumpy-dba.com/">Jay Caviness</a> so my job will be to cover enough to warm up the audience for the Jay&#8217;s session that is up next according to the schedule. I haven&#8217;t met Jay yet but I&#8217;ll try to get in touch and coordinate to avoid significant overlaps in our presentations.</del> Jay&#8217;s session has been canceled.</p>
<p>See you in Denver soon and, if you are a skier, make sure to catch the ski lift somewhere around Loveland Pass &#8212; great slopes there! The photo below was taken couple years ago after the conference (courtesy of <a href="http://www.evdbt.com/">Tim Gorman</a>) &#8212; there is interesting story behind so ask me or Tim at the conference.<br />
<a href="http://www.facebook.com/photo.php?pid=1842546&#038;l=8d6804e435&#038;id=697819111"><img src="http://www.pythian.com/news/wp-content/uploads/Alex_at_Loveland_Pass.jpg" alt="Alex Gorbachev at Loveland Pass" title="Alex Gorbachev at Loveland Pass" width="604" height="453" class="alignleft size-full wp-image-7727" /></a> </p>
<p>That&#8217;s all for now. Time to feed my new dog:<br />
<img src="http://www.pythian.com/news/wp-content/uploads/Daisy.jpg" alt="Daisy" title="Daisy" width="604" height="404" class="alignleft size-full wp-image-7723" /></p>
<p>She is a 10 weeks old puppy (mix of Bull Mastiff, Doberman and Rottweiler). She is usually a good girl but, sometimes, throws surprises like this when she is left on her own for too long:<br />
<a href="http://img70.yfrog.com/i/lqtl.jpg/"><img alt="" src="http://img70.yfrog.com/img70/5994/lqtl.jpg" title="Daisys mess" class="alignleft" width="640" height="480" /></a></p>
<p>It&#8217;s not the worst that happened so far and I&#8217;m sure more to come!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pythian.com/news/7719/pythian-goes-to-rmoug-training-days-2010-denver/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
