<?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>RobSymonds.com</title>
	<atom:link href="http://www.robsymonds.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.robsymonds.com</link>
	<description>Information Technology, Corporate Culture and Online Business</description>
	<lastBuildDate>Thu, 01 Nov 2012 20:54:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Clayton Christensen on Hardship</title>
		<link>http://www.robsymonds.com/clayton-christensen-on-hardship/</link>
		<comments>http://www.robsymonds.com/clayton-christensen-on-hardship/#comments</comments>
		<pubDate>Mon, 13 Aug 2012 19:28:08 +0000</pubDate>
		<dc:creator>Rob Symonds</dc:creator>
				<category><![CDATA[Everything Else]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://www.robsymonds.com/?p=732</guid>
		<description><![CDATA[I&#8217;m currently reading Clayton Christensen&#8217;s How Will You Measure Your Life. Before hitting Add to Cart on Amazon I spent a few minutes searching the web for things he&#8217;s written and for things written about him. I came away with several quotes and ideas. The guy is something else. From Forbes: I&#8217;m an optimistic person. [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m currently reading Clayton Christensen&#8217;s <a href="http://www.amazon.com/How-Will-Measure-Your-Life/dp/0062102419">How Will You Measure Your Life</a>. Before hitting Add to Cart on Amazon I spent a few minutes searching the web for things he&#8217;s written and for things written about him. I came away with several quotes and ideas. The guy is something else. From <a href="http://www.forbes.com/forbes/2011/0314/features-clayton-christensen-health-care-cancer-survivor_9.html">Forbes</a>:</p>
<blockquote><p>I&#8217;m an optimistic person. But for the first time in my life, with all my problems, I focused more and more on me&#8211;and it was depressing, literally. Sometimes I just wanted to quit trying to learn and speak and write again and just go into my basement and build furniture. I learned an important lesson from this. I learned that focusing on my own problems does not bring happiness. God didn&#8217;t say, &#8220;Okay. For those with problems it&#8217;s okay to focus on yourself. And for those who don&#8217;t have problems, I want you to focus on helping others.&#8221; Even in dire times God does not exempt me from his commandment to focus my life on others, because it transforms hardship to joy.</p></blockquote>
<p>Another <a href="http://hbswk.hbs.edu/item/6991.html">article</a> ends with this powerful quote:</p>
<blockquote><p>The person I decide to be has to be robust enough that it doesn&#8217;t matter what happens in my life&#8230; Life will happen to me. But I don&#8217;t want what happens in life to determine who Clay Christensen becomes.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.robsymonds.com/clayton-christensen-on-hardship/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jake Warga: Who are you?</title>
		<link>http://www.robsymonds.com/jake-warga-who-are-you/</link>
		<comments>http://www.robsymonds.com/jake-warga-who-are-you/#comments</comments>
		<pubDate>Sun, 12 Aug 2012 19:18:19 +0000</pubDate>
		<dc:creator>Rob Symonds</dc:creator>
				<category><![CDATA[Quotes]]></category>

		<guid isPermaLink="false">http://www.robsymonds.com/?p=728</guid>
		<description><![CDATA[People always ask others, ‘What do you do? They should be asking, ‘Who are you?’ &#8212;Jake Warga]]></description>
				<content:encoded><![CDATA[<p>People always ask others, ‘What do you do? They should be asking, ‘Who are you?’ </p>
<p>&#8212;<a href=" http://www.wired.com/rawfile/2012/08/jake-warga/?pid=3254&#038;viewall=true">Jake Warga</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.robsymonds.com/jake-warga-who-are-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Accidental Millionaire &#8211; by Gary Fong</title>
		<link>http://www.robsymonds.com/the-accidental-millionaire-by-gary-fong/</link>
		<comments>http://www.robsymonds.com/the-accidental-millionaire-by-gary-fong/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 02:13:36 +0000</pubDate>
		<dc:creator>Rob Symonds</dc:creator>
				<category><![CDATA[Book Notes]]></category>

		<guid isPermaLink="false">http://www.robsymonds.com/?p=697</guid>
		<description><![CDATA[Maybe you haven&#8217;t heard of Gary Fong. Even though I&#8217;m interested in photography, I hadn&#8217;t heard of him until a photographer buddy clued me in. He is known as an innovative wedding photographer, entrepreneur and writer. In The Accidental Millionaire, Fong tells us his life story so far, giving the details of the personal philosophy [...]]]></description>
				<content:encoded><![CDATA[<div style="float:right;margin:5px;"><a href="http://www.amazon.com/gp/product/1933771917/ref=as_li_ss_il?ie=UTF8&#038;tag=yourpotenti07-20&#038;linkCode=as2&#038;camp=217145&#038;creative=399369&#038;creativeASIN=1933771917"><img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&#038;Format=_SL160_&#038;ASIN=1933771917&#038;MarketPlace=US&#038;ID=AsinImage&#038;WS=1&#038;tag=yourpotenti07-20&#038;ServiceVersion=20070822" ></a><img src="http://www.assoc-amazon.com/e/ir?t=yourpotenti07-20&#038;l=as2&#038;o=1&#038;a=1933771917&#038;camp=217145&#038;creative=399369" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></div>
<p>Maybe you haven&#8217;t heard of Gary Fong. Even though I&#8217;m interested in photography, I hadn&#8217;t heard of him until a photographer buddy clued me in. He is known as an innovative wedding photographer, entrepreneur and writer.</p>
<p>In The Accidental Millionaire, Fong tells us his life story so far, giving the details of the personal philosophy that has worked so well for him. This is not the same recycled self-help crap everybody else writes. In contrast to vision, goals, tasks and actions, Fong&#8217;s more Zen-flavored philosophy comes down to exploring things that interest him, creating space for insights to happen and then working his ass off. He admits he acts on hunches, sometimes decides by flipping a coin and understands the role luck has in success.</p>
<p>This book will be appealing even if you aren&#8217;t a photographer.</p>
<p><span id="more-697"></span></p>
<h2>Notes and Quotes</h2>
<p>The bumper sticker said: SINCE I GAVE UP HOPE, I FEEL MUCH BETTER. I read it, laughed myself sick, and immediately felt the proverbial weight of the world lift from my shoulders.</p>
<p>In that one instant, I gave up all my focus on things going the way I wanted them to. Ever. I surrendered all my goals, my visions, my fantasies, my expectations. My Plans. I was suddenly knocked from my inner railroad tracks and felt my perspective opening up like a morning glory in the sun. </p>
<p>That bumper sticker gave me my freedom.</p>
<p>~</p>
<p>Zen is not really about patience, though. Because  when you&#8217;re patient, you&#8217;re still secretly waiting for the outcome. Zen is about the process, not the outcome.</p>
<p>~</p>
<p>I recently read an interview with an emergency room physician who was asked, &#8220;How do you handle stress?&#8221; He replied, &#8220;Rather than focus on the outcome, I focus on the process.&#8221;</p>
<p>~</p>
<p>As a teenager, I began to see life as a game filled with creative strategies. Once I uncoupled my mind from the box of self-imposed limitations (otherwise known as &#8220;rules&#8221;), I started to realize that there were unlimited possibilities for achieving anything I desired. </p>
<p>And one I started to be open to anything, the game of life began to be ridiculously fun. </p>
<p>~</p>
<p>What I do is clearly define the problem at hand, then sit on it for a few days. Rather than miserably pound out a forced solution, I just keep the question percolating in my mind and let the world fill in the holes to the puzzle. My brain&#8217;s filtering process does all the work; it unconsciously scans for answers that fit the &#8220;mold&#8221; of the question. Great ideas that I never would have conjured up on purpose come to me this way. This approach has been successful countless times in my life, and it continues to be so.</p>
<p>When I lock into thinking about a problem, rather than pushing for a solution, the answer lands in my lap. The reason is that I&#8217;m open to seeing it. I&#8217;ve set my filters to receive it. </p>
<p>~</p>
<p>I had caught a small break, but I also knew there was no option to fail. It was do or die, sink or swim.</p>
<p>Rocky had once told me, &#8220;Never refuse help, Gary. Always run as far as you can with it. That&#8217;s the best way you can show gratitude.&#8221;</p>
<p>I took his words to heart.</p>
<p>~</p>
<p>&#8230;something [else] I&#8217;d learned from Rocky. He said, &#8220;Gary, the thing to remember is that you need to make friends with people. These people will refer you to their friends. Nobody needs another annoying salesman knocking on their door, but everyone could use a new friend.&#8221; I like that. Rocky had lots of friends. So would I.</p>
<p>So when I started out, I frequented the various hotels and catering facilities and florists, just trying to meet fellow travelers in the wedding industry. Instead of playing the salesman, I was honest and personal. I figured, make friends first, and the rest will follow.</p>
<p>~</p>
<p>Marketing Without Advertising teaches that people are usually passionate about at least one product or service that they have told multiple friends about. &#8220;Oh my gosh, I have the best accountant,&#8221; or, &#8220;You&#8217;ve got to got to this place for bagels.&#8221; If you can create client/allies who become the trumpeters of your product, the book says, you will never have to worry about business again.</p>
<p>~</p>
<p>Their friends would then say, &#8220;I want the name of your photographer.&#8221; That&#8217;s when my business really took off. All on word-of-mouth referrals, just like it said in Marketing Without Advertising. And all I had to do was make people happy.</p>
<p>~</p>
<p>I&#8217;ve always bristled against conformity. This girl&#8217;s incomprehensible wedding behavior helped me to see that in the absence of rigid rules, common sense becomes one&#8217;s guide. The rules lock you into an immovable position, whereas the absence of rules permits you to respond fluidly and come up with creative solutions&#8212;the best solution for the here and now.</p>
<p>~</p>
<p>She started screaming at him. &#8220;You fucking idiot! Why are you always so stupid? Do you take pills for it?&#8221;</p>
<p>[Too funny not to include.]</p>
<p>~</p>
<p>I had tried setting goals, and I&#8217;d realized that all it had done was make me miserable. Heading straight for a destination with blinders on prevented me from looking at the scenery along the way. And it was within the scenery that I usually spotted the detours that led to the next glorious destination. These new opportunities were then affirmed by mysterious &#8220;clues&#8221; that told me I was on the right track.</p>
<p>~</p>
<p>&#8230;had she been more open to the infinite possibilities that the world offers on a daily basis, maybe she would have made a fortune inventing something amazing out of the blue&#8230;</p>
<p>~</p>
<p>&#8230;I allowed others to have the deciding vote in my personal life. Only later in life did I learn to heed that inner voice telling me to follow both my heart and my mind.</p>
<p>~</p>
<p>I thought, I want to feel better, so I&#8217;m going to give up hope. It may seem strange, but it felt like nothing less than a spiritual awakening.</p>
<p>Right there in that moment, I decided I was not going to worry about anything anymore. I had worked my ass off in business and had absolutely nothing to show for it. In fact, I had more debt than case and a future that appeared bleak. But I just said, &#8220;You know what? I don&#8217;t care. I completely and utterly don&#8217;t care.&#8221;</p>
<p>I&#8217;d never felt better in my entire life.</p>
<p>~</p>
<p>Just as a passing curiosity, I asked him what his secret to success as an inventor was. He said that most of his success didn&#8217;t come from pulling new ideas out of a magic hat. Inventing wasn&#8217;t at all the way it was portrayed in the cartoons&#8212;light bulbs over the head and fevered cries of Eureka! You don&#8217;t wait for inspiration to strike you like heaven&#8217;s ball-peen hammer. You don&#8217;t even need to be particularly creative or technologically savvy.<br />
The secret, Enzo said, is that if you look at anything, you will see that it cam be improved. Any object or service, especially the ones you use often, has features that just aren&#8217;t working for you. You simply have to learn to identify those things and propose solutions. Most of your ideas won&#8217;t stick, but some of them will.</p>
<p>~</p>
<p>&#8230;when one focuses on the goal rather than the process, one can be easily led astray.</p>
<p>~</p>
<p>The point I&#8217;m trying to make is that hammering away at The Plan is as likely to cause you to miss greater opportunities, or to bring about the exact opposite of your goal, as it is to bring about success. So I don&#8217;t put much stock in it as a success strategy.</p>
<p>Being prepared though, that&#8217;s different. As Louis Pasteur said, &#8220;Chance favors the prepared mind.&#8221;</p>
<p>So that&#8217;s my great success advice, after all these pages? The corny old Boy Scout motto, &#8220;Be Prepared?&#8221; Well, yeah. Except with a little twist, My motto is actually, &#8220;Be preparing.&#8221;</p>
<p>Preparing for what, though?</p>
<p>It almost doesn&#8217;t matter. For whatever cheetah you&#8217;re hot to photograph.</p>
<p>As long as you&#8217;re fully engaged in the process of preparing for something, that mean&#8217;s you&#8217;re learning and growing, you&#8217;re stretching and adjusting, you&#8217;re adapting to a changing world, you&#8217;re learning to read the landscape, you&#8217;re throwing out old maps. And that alone is preparing you for some next stage, even if the cheetah you were hoping for doesn&#8217;t show up.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robsymonds.com/the-accidental-millionaire-by-gary-fong/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Jack White on Restriction and Creativity</title>
		<link>http://www.robsymonds.com/jack-white-on-restiction-and-creativity/</link>
		<comments>http://www.robsymonds.com/jack-white-on-restiction-and-creativity/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 00:28:38 +0000</pubDate>
		<dc:creator>Rob Symonds</dc:creator>
				<category><![CDATA[Creativity]]></category>

		<guid isPermaLink="false">http://www.robsymonds.com/?p=687</guid>
		<description><![CDATA[]]></description>
				<content:encoded><![CDATA[<p><iframe width="420" height="345" src="http://www.youtube.com/embed/eH4NhlxSrOw" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.robsymonds.com/jack-white-on-restiction-and-creativity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips, Tricks and Hints for Using SSIS from A-Z</title>
		<link>http://www.robsymonds.com/tips-tricks-and-hints-for-using-ssis-from-a-z/</link>
		<comments>http://www.robsymonds.com/tips-tricks-and-hints-for-using-ssis-from-a-z/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 15:11:44 +0000</pubDate>
		<dc:creator>Rob Symonds</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://www.robsymonds.com/?p=601</guid>
		<description><![CDATA[A while back I started keeping a list of all the things I learned to make working with SSIS less painful and I thought I&#8217;d share. These are small things: tips, tricks and hints. Just stuff I wish I had known when I first started working with SSIS. There isn&#8217;t much here in terms of [...]]]></description>
				<content:encoded><![CDATA[<p>A while back I started keeping a list of all the things I learned to make working with SSIS less painful and I thought I&#8217;d share. These are small things: tips, tricks and hints. Just stuff I wish I had known when I first started working with SSIS.<br />
<span id="more-601"></span></p>
<p>There isn&#8217;t much here in terms of an overarching philosophy. I&#8217;m still working on that. In general though, I would say SSIS development and management is better when:</p>
<ol>
<li>Packages are focused on a tight set of functions rather than doing a lot of different things.</li>
<li>Packages are easy to test. </li>
<li>Configuration is done using variables or better yet external configuration.</li>
<li>Packages can move through environments without connection managers or other components being modified (which means your configuration is done through variables or external configuration).</li>
</ol>
<p>I&#8217;ve only worked in small and medium environments. Some of these ideas may not be applicable in larger environments.</p>
<h2>Configuration</h2>
<ul>
<li>Behavior and configuration should be separate where possible. Ideally you should be able to move a package through different environments (DEV -> TEST -> PROD) simply by altering configuration, never by opening up and altering connections, components and tasks. This approach makes packages easier to test (which means packages get tested more, improving quality) and simplifies deployment.</li>
<li><em>EncryptSensitiveWithUserKey</em> should not be used for <strong>ProtectionLevel</strong>.</li>
<li>Handle configuration with variables or configuration files.</li>
<li>If you are going to store sensitive information inside connection managers, at the very least choose <em>EncryptSensitiveWithPassword</em> for the <strong>ProtectionLevel</strong>. This way other team members can access the package (you&#8217;ll need to give them the password) without losing connection information and the team can deploy packages without having to reconfigure them on the target deployment machine. Don&#8217;t rely on the package password for security as much as for convenience.</li>
</ul>
<h2>Connections</h2>
<ul>
<li>Don&#8217;t use explicit server names in connection managers. This becomes confusing when you are moving a package between environments. Using a more granular name (the name of a database, the name of a file) that is not tied to a physical location is better. Example: Using <em>SQLETLPRD01.Datamart</em> is bad. Using just <em>Datamart</em> is better.</li>
<li>When you create flat file connections, don&#8217;t try to define the schema by hand in BIDS using the connection manager. Instead, go outside of BIDS, create a sample file using Notepad or Excel that is in the final flat file format and put some sample data it it. Then go back inside BIDS and point the connection manager to that file. BIDS  will build all the metadata it needs to define that flat file&#8217;s schema. You&#8217;ll need to review it but you&#8217;ll save a ton of work.</li>
</ul>
<h2>Containers</h2>
<ul>
<li>Break control flow tasks up into units of work using Sequence Containers.</li>
<li>Containers can help readability of a package. The can also be used to group units of work that can easily be tested or rerun together.</li>
</ul>
<h2>Deployment</h2>
<ul>
<li>(Painful. File system deployment seems like a clear winner in terms of deployment and maintenance but may not be as secure?)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li>Don&#8217;t forget that you can include documentation inside a package with annotations.</li>
<li>Documentation should include notes on deployment.</li>
<li>Documentation should note whether a package can be rerun after failure or whether it needs intervention by an operator, a package developer or a process owner.</li>
</ul>
<h2>Expressions</h2>
<ul>
<li>To use a backslash in an expression, you must escape it. For example, <em>C:\temp\</em> won&#8217;t work in an expression. You have to write it as <em>C:\\temp\\</em>.</li>
<li>Building a date tag is a pain. This snippet can help. It produces the current date in the form of DDMMYYYY:
<pre>RIGHT("0" + (DT_WSTR,2)MONTH(GETDATE()), 2)
+ RIGHT("0" + (DT_WSTR,2)DAY( GETDATE()), 2)
+ (DT_WSTR,4)YEAR(GETDATE())
</pre>
</li>
</ul>
<h2>Error Handling</h2>
<ul>
<li>A package should never fail a SQL Agent job for non-exceptional reasons. Example. Every Wednesday a job runs an SSIS package that downloads a remote file, transforms a few fields and writes the data to a database table. The SSIS package should not fail the job just because this Wednesday the file can&#8217;t be found on the remote server. This is a non-exceptional state for the process, meaning it&#8217;s not something that should be considered outside normal operation. It happens all the time in the real world. The SSIS package should be able to handle it gracefully and notify the process owner via email or some other method.</li>
</ul>
<h2>File Operations</h2>
<ul>
<li>Using wildcards (ex: <em>/*.dat</em>) does not work in the file system task.</li>
<li>Using a script task is often a better way of handling bulk file operations (like deletes) than using the foreach loop task. You&#8217;ll need to reference the <strong>.NET System.IO</strong> namespace. (Remember that you can access package variables inside script tasks.)</li>
<li>But use a foreach loop container if you need to execute other SSIS tasks each time through the loop.</li>
<li>It is easier to delete a directory full of files than to try to delete a large number of files using scripts or file system tasks (especially if you need a foreach loop container). So if you need to create a large number of files and then delete them later, put them all in a folder. Then just create/delete the folder using file system tasks.</li>
</ul>
<h2>FTP</h2>
<ul>
<li>Using wildcards (ex:<em> /*.dat</em>) does work in remote FTP paths.</li>
</ul>
<h2>Packages</h2>
<ul>
<li>Give packages a unique name instead of Package.dtsx.</li>
<li>A good package name might take the form of <em>Project-Module-Function.dtsx</em>.</li>
<li>Packages should not have too many functions. Smaller packages are easier to test and deploy. They minimize risk of breaking functionality when making changes and redeploying. If you need to use SSIS to provide multiple related functions in the same module of a project and run them on the same schedule, it may be better to create separate packages and put them in separate steps of a single SQL Agent job. That is often preferable to developing and managing a single monolithic package.</li>
<li>If functionality in a package is deprecated, take it out. If it needs to stay there for reference, clearly mark it as deprecated.</li>
</ul>
<h2>Logging</h2>
<ul>
<li>Log to a text file instead of a SQL table. A SQL table is convenient but the file system is a more robust subsystem than SQL in the event of database problems.</li>
<li>Be careful about the amount of information you include in logging. Production packages should generally only log errors (SQL Agent logs steps and run times). In other environments, more verbose output is ok.</li>
</ul>
<h2>Variables</h2>
<ul>
<li>Create as few variables as possible.</li>
<li>Using the package variable scope is usually just fine (vs. getting more granular).</li>
<li>Using variable expressions is an easy way to set variable values before the control flow starts. An alternative is to set variables at the start of the control flow using a script task. The drawback to that though is that if you want to only test part of a package you can&#8217;t just execute a single container to test it&#8212;you must disable all containers/components you don&#8217;t want to execute and then run the entire package to make sure those variables are set.</li>
<li>It&#8217;s a good practice to distinguish between directories and paths. A path is a directory + a filename. For example, <em>\\fileserver01\inbound\</em> is a directory while <em>\\fileserver01\inbound\2011-09-01.zip</em> is a path.</li>
<li>If you need to reference a path or a directory more than once in a package, put it in a variable.</li>
<li>If you only reference a path or directory once but it is dependant on some other variable (such as the home directory for a process, which changes from environment to environment), set it in that connection&#8217;s or component&#8217;s Expressions collection.</li>
</ul>
<p>Please leave a comment with any improvements and additions to this list. I&#8217;ll keep the list updated. Also, take a look at Jamie Thompson&#8217;s list of <a href="http://consultingblogs.emc.com/jamiethomson/archive/2006/01/05/SSIS_3A00_-Suggested-Best-Practices-and-naming-conventions.aspx">SSIS: Suggested Best Practices and naming conventions</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robsymonds.com/tips-tricks-and-hints-for-using-ssis-from-a-z/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SSIS Output to Multiple Files</title>
		<link>http://www.robsymonds.com/ssis-output-to-multiple-files/</link>
		<comments>http://www.robsymonds.com/ssis-output-to-multiple-files/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 23:59:42 +0000</pubDate>
		<dc:creator>Rob Symonds</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://www.robsymonds.com/?p=556</guid>
		<description><![CDATA[Export a large set of query results into multiple flat files using SSIS.]]></description>
				<content:encoded><![CDATA[<p>Let&#8217;s say a user asks you to create a flat file output from a database query. Piece of cake. Open SSMS, write the query, run it and copy the results (with headers using SSMS 2008) into a text file. Send the user the file and and you&#8217;re done with time left over for a siesta.</p>
<p> But oh wait&#8212;they want to be able to open it in an older version of Excel, which will only display ~ 65k rows per sheet. This file has 190k rows. So they ask you to write the output to multiple files, limiting the total rows per file to 60k. </p>
<p>Now what?</p>
<p>You could simply open the raw flat file, go to line 60,001 and cut-paste lines 60,001&#8211;120,000 into another file and repeat as necessary. That&#8217;s ok for a one-off task but not a good strategy if you are going to be doing this several times. It can be cumbersome and error prone to manually create several files this way.</p>
<p>No&#8212;the better approach is to make SSIS do the heavy lifting. I had to do this recently and thought I&#8217;d share my solution.<span id="more-556"></span></p>
<p>Here is how the process roughly breaks down:</p>
<ol>
<li>Pull the data from the source.</li>
<li>Stage the data.</li>
<li>Use the number of records returned and the max number of rows I want in each file to determine how many files I&#8217;ll need.</li>
<li>For each file I need, run through a loop, figure out which rows go into the current file, give the file a name and write the rows to the file.</li>
</ol>
<p>There are a few other details to cover too, like how to name output files and read from write to variables. We&#8217;ll look at all of that.</p>
<h4>Package Variables</h4>
<p>For this package I set up the following variables:</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-package-variables-1.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-package-variables-1.jpg" alt="" title="SSIS Package Variables" width="273" height="183" class="alignnone size-full wp-image-571" /></a></p>
<p>I&#8217;ve hidden the scope in this screen cap. They are all in the package scope.</p>
<h4>Package Overview</h4>
<p>And here is what the package looks like. It&#8217;s bare bones simple.</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-package-overview.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-package-overview-300x185.jpg" alt="" title="SSIS Package Overview" width="300" height="185" class="alignnone size-medium wp-image-570" /></a></p>
<h4>Create Staging Table</h4>
<p>I drop and create the staging table from scratch each time. It contains an identity field and I want to make sure I&#8217;m always starting with a seed value of 1. I could handle this differently but this method is simple and works reliably.</p>
<h4>Stage the Data</h4>
<p>Next, I stage the data. That Data Flow task looks like this:</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-stage-the-data.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-stage-the-data.jpg" alt="" title="SSIS Stage the Data" width="174" height="203" class="alignnone size-full wp-image-578" /></a></p>
<p>I query the source database, get the number of rows returned so I can update the TotalRowCount variable, then update the staging table.</p>
<h4>Determine Number of Files to Write</h4>
<p>For this particular request, the user wanted a maximum of 60,000 rows per file. I don&#8217;t show it above but the MaxRowsPerFile package variable value is set to 60000. The logic to determine number of files needed is simple:</p>
<pre>
NumFiles = Ceiling(TotalRowCount / MaxRowsPerFile)
</pre>
<p>So if the process returned 190k rows and we only wanted 60k per file:</p>
<pre>
190,000 / 60,000 = 3.16
Ceiling(3.16) = 4
NumFiles = 4
</pre>
<p>Pretty basic.</p>
<p>Here is the C# code to do that and set the NumFiles package variable:</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-script-get-numfiles.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-script-get-numfiles-300x57.jpg" alt="" title="SSIS Script Get NumFiles" width="300" height="57" class="alignnone size-medium wp-image-572" /></a></p>
<p>Remember to set your ReadOnlyVariables and ReadWriteVariables variables appropriately in the Script Task Editor:</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-get-numfiles-script-editor.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-get-numfiles-script-editor-300x69.jpg" alt="" title="SSIS Script Task Accessors" width="300" height="69" class="alignnone size-medium wp-image-567" /></a></p>
<p>At this point we have pulled our source data and put it into a staging table. We know how many total rows we have. And we know how many files we will be writing. Now we need to select from the staging table and write the results to output files.</p>
<h4>The For Loop Container</h4>
<p>In a For Loop Container, you create some kind of condition. The loop will execute until that condition is met. I use the NumFiles variable to control how many times I run through the loop. To do this, I used the LoopCounter variable and the NumFiles variable. I start with LoopCounter = 1 and I increment the LoopCounter each time the loop executes. The loop runs while LoopCounter &lt;= NumFiles. If I&#8217;m creating 4 files, the loop executes 4 times. Here is how the loop is configured:</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-for-loop-properties.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-for-loop-properties-300x74.jpg" alt="" title="SSIS For Loop Properties" width="300" height="74" class="alignnone size-medium wp-image-566" /></a></p>
<p>The @LoopCounter and @NumFiles variables reference package variables.</p>
<p>Inside the loop we have to do a few things:</p>
<ol>
<li>Determine which rows are going to be selected for output.</li>
<li>Name the output flat file.</li>
<li>Select the right data.</li>
<li>Write the data to the flat file.</li>
</ol>
<h4>Calculate Which Rows to Select</h4>
<p>How can I control which rows to select? Remember above I wrote that the staging table has an identity column and it is guaranteed to start at 1 each time I run this process. I called this field RecordNum. This means I can qualify my query using the RecordNum.</p>
<p>To do that, I&#8217;ll need to figure out which row to start on and which to end on each time I go through the loop. I&#8217;m going to refer to that as the window and it&#8217;s defined by two package variables: LoopWindowStart and LoopWindowEnd. The logic behind calculating the window is:</p>
<pre>
LoopWindowStart = (LoopCounter * MaxRecordsPerFile) - MaxRecordsPerFile
LoopWindowEnd = LoopWindowStart + MaxRecordsPerFile
</pre>
<p>Let&#8217;s use the same numbers again and say I only want 60k rows in each file.</p>
<p>The first time through the loop my window looks like this:</p>
<pre>
LoopCounter = 1
MaxRecordsPerFile = 60,000
 
LoopWindowStart = (1 * 60,000) - 60,000
LoopWindowStart = 0

LoopWindowEnd = 0 + 60,000
LoopWindowEnd = 60,000
</pre>
<p>The 2nd time through:</p>
<pre>
LoopCounter = 2
MaxRecordsPerFile = 60,000
 
LoopWindowStart = (2 * 60,000) - 60,000
LoopWindowStart = 60,000
 
LoopWindowEnd = 60,000 + 60,000
LoopWindowEnd = 120,000
</pre>
<p>The 3rd time through:</p>
<pre>
LoopCounter = 3
MaxRecordsPerFile = 60,000
 
LoopWindowStart = (3 * 60,000) - 60,000
LoopWindowStart = 120,000
 
LoopWindowEnd = 120,000 + 60,000
LoopWindowEnd = 180,000
</pre>
<p>And you can guess what the 4th time looks like.</p>
<p><em>But won&#8217;t there be overlapping values? </em></p>
<p>No. And you&#8217;ll see why below. But first, here is the C# script that shows how we set the LoopWindowStart and LoopWindowEnd variables:</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-script-task-calculate-window.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-script-task-calculate-window-300x295.jpg" alt="" title="SSIS Script Task to Calculate Window" width="300" height="295" class="alignnone size-medium wp-image-573" /></a></p>
<p>Again, don&#8217;t forget to set the ReadOnlyVariables and ReadWriteVariables. </p>
<h4>Name the Output File</h4>
<p>I created a Flat File Connection in the Connection Manager. (Hint: always create a sample file first with 1 row and create your flat file connection by pointing it to the sample. That way you don&#8217;t have to create the entire definition in the connection editor, which is about as appealing as getting jabbed in the eye with a rusty can opener.) In the flat-file connection properties, I used the Property Expression Editor to set the ConnectionString.</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-flat-file-connectionstring.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-flat-file-connectionstring-300x72.jpg" alt="" title="SSIS Flat File ConnectionString" width="300" height="72" class="alignnone size-medium wp-image-565" /></a></p>
<p>When I created the package initially, I set the HomeDir variable to point to my final output directory (including a trailing slash). The HomeDir might look like <em>C:\output\</em>. (Like the MaxRowsPerFile variable, I set this at design-time. It&#8217;s not something I set through scripting.)</p>
<p>OutFileName is a variable but we haven&#8217;t set it through any scripting. So how does it get set?</p>
<p>Go to the property editor for the variable and set EvaluateAsExpression to True.</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-outfilename-variable-properties.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-outfilename-variable-properties.jpg" alt="" title="SSIS OutFileName Variable Properties" width="157" height="142" class="alignnone size-full wp-image-569" /></a></p>
<p>Then go into the Expression Editor and use a combination of literal strings and the LoopCounter to create the filename:</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-outfilename-variable-expression.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-outfilename-variable-expression.jpg" alt="" title="SSIS OutFileName Variable Expression" width="215" height="106" class="alignnone size-full wp-image-568" /></a></p>
<p>Your outputfiles will evaluate to:</p>
<pre>
output-1.txt
output-2.txt
output-3.txt
etc...
</pre>
<p>Each time through the loop then you will be writing the following files:</p>
<pre>
C:\output\output-1.txt
C:\output\output-2.txt
C:\output\output-3.txt
etc...
</pre>
<h4>Select Output Data and Write to Output File</h4>
<p>Here we need to select specific rows to bring into the Data Flow. That Data Flow task looks like this:</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-select-output-write-output.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-select-output-write-output.jpg" alt="" title="SSIS Select Output Data and Write to Output File" width="210" height="154" class="alignnone size-full wp-image-577" /></a></p>
<p>The staging table query uses the LoopWindowStart and LoopWindowEnd variables. There are two parts to this. The first is to write the query with the parameter placeholders:</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-select-output-sql.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-select-output-sql.jpg" alt="" title="SSIS SELECT Command Text with Params" width="154" height="226" class="alignnone size-full wp-image-576" /></a></p>
<p>Notice how I&#8217;m using <em>WHERE RecordNum <span style="color:red;">&gt;</span> ?</em> with <em>AND RecordNum <span style="color:red;">&lt;=</span> ?</em>. This is why the records won&#8217;t overlap. Say I have 190k records and will be writing to 4 files. This means 4 times through the loop and it means 4 windows. Here is how things will look.</p>
<p><strong>1st Pass</strong> through loop:</p>
<pre>
LoopWindowStart = 0
LoopWindowEnd = 60,000

WHERE RecordNum > 0
AND RecordNum <= 60,000
</pre>
<p><em>Records 1 - 60,000 output to c:\output\output-1.txt</em></p>
<p><strong>2nd Pass</strong></p>
<pre>
LoopWindowStart = 60,000
LoopWindowEnd = 120,000

WHERE RecordNum > 60,000
AND RecordNum <= 120,000
</pre>
<p><em>Records 60,001 - 120,000 output to c:\output\output-2.txt</em></p>
<p><strong>3rd Pass</strong></p>
<pre>
LoopWindowStart = 120,000
LoopWindowEnd = 180,000

WHERE RecordNum > 120,000
AND RecordNum <= 180,000
</pre>
<p><em>Records 120,001 - 180,000 output to c:\output\output-3.txt</em></p>
<p><strong>4th Pass</strong></p>
<pre>
LoopWindowStart = 180,000
LoopWindowEnd = 240,000

WHERE RecordNum > 180,000
AND RecordNum <= 240,000
</pre>
<p><em>Records 180,001 - 190,000 output to c:\output\output-4.txt</em></p>
<p>Pass the variables to the query using the Parameters editor:</p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-select-output-params-button.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-select-output-params-button-300x35.jpg" alt="" title="SSIS Set Query Params Button" width="300" height="35" class="alignnone size-medium wp-image-574" /></a></p>
<p><a href="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-select-output-set-query-params.jpg"><img src="http://www.robsymonds.com/wp-content/uploads/2011/06/ssis-select-output-set-query-params-300x138.jpg" alt="" title="SSIS SELECT Set Query Parameters" width="300" height="138" class="alignnone size-medium wp-image-575" /></a></p>
<p>This pulls the rows I want into the Data Flow.</p>
<p>The last task simply points the Data Flow to the Output File. That's it.</p>
<p>I'm interested to see if anybody has come up with something better.</p>
<p>(This was a quick SSIS package I threw together to handle a simple request. It lacks error handling and logging and I wouldn't use it like this in a mission-critical scenario.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robsymonds.com/ssis-output-to-multiple-files/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Notes on Marketing and Promotion</title>
		<link>http://www.robsymonds.com/notes-on-marketing-and-promotion/</link>
		<comments>http://www.robsymonds.com/notes-on-marketing-and-promotion/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 15:44:44 +0000</pubDate>
		<dc:creator>Rob Symonds</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Online Business]]></category>
		<category><![CDATA[Social Medial]]></category>

		<guid isPermaLink="false">http://www.robsymonds.com/?p=542</guid>
		<description><![CDATA[I made these notes during last night&#8217;s HYPE event: Entrepreneur Roundtable &#8211; Marketing &#038; Promotion. The speakers were Caitlin Thayer of Barefoot Media and Andrew Wood of Mintz &#38; Hoke Communications Group. Caitlin and Andrew discussed brand, marketing, social media and small business success. These notes aren&#8217;t their words verbatim so if anything sounds wrong, [...]]]></description>
				<content:encoded><![CDATA[<p>I made these notes during last night&#8217;s <a href="http://metrohartford.com/hype/Default.aspx">HYPE</a> event: Entrepreneur Roundtable &#8211; Marketing &#038; Promotion. The speakers were <a href="http://twitter.com/#!/CTinCT">Caitlin Thayer</a> of Barefoot Media<br />
and <a href="http://twitter.com/#!/andrewood">Andrew Wood</a> of Mintz &amp; Hoke Communications Group. Caitlin and Andrew discussed brand, marketing, social media and small business success. These notes aren&#8217;t their words verbatim so if anything sounds wrong, the blame is mine. <span id="more-542"></span></p>
<p><strong>Caitlin on Facebook Business Pages and Twitter</strong></p>
<ul>
<li>Facebook is good for connecting with people you already know.</li>
<li>Twitter is great for getting to new people.</li>
<li>Post on both personal and business topics.</li>
<li>Personal posts help build trust.</li>
<li>Engage. Don&#8217;t just promote.</li>
<li>Ask questions, start conversations.</li>
<li>Use Twitter lists to help identify people you want to connect with.</li>
<li>Follow others that do the same thing that you do. Retweet them. Don&#8217;t be afraid to share.</li>
</ul>
<p><strong>Caitlin on Blogs</strong></p>
<ul>
<li>A blog is good because it&#8217;s interactive.</li>
<li>Think about blogs and social media in terms of sharing.</li>
<li>Even if you give people information, don&#8217;t think that means they won&#8217;t still need you to help them out. Don&#8217;t be afraid to share.</li>
<li>Don&#8217;t take easy things for granted. Share them. What may seem simple of obvious to you may be something that somebody else needs help with.</li>
</ul>
<p><strong>Caitlin on LinkedIn</strong></p>
<ul>
<li>Fill out your profile to 100% completion.</li>
<li>Link to Twitter, your blog and Facebook.</li>
<li><strong>LinkedIn is great for getting introduced to 2nd and 3rd degree connections.</strong> Connect with everybody you know. This will build your 2nd and 3rd degree connections.</li>
<li>Don&#8217;t send the default generic invite to people. Personalize it. Let the person know where you met them or how you know them.</li>
<li>Never SPAM people.</li>
<li>Ask for recommendations from the people you&#8217;ve done business with.</li>
<li>Use groups and discussion pages to connect with people.</li>
</ul>
<p><strong>Andrew on Brand and Clarity</strong></p>
<ul>
<li>When businesses stray from their core business values, they tend to falter or outright fail.</li>
<li>Brand Position = Expectation</li>
<li>Strategic Positioning = Sustainable Competitive Advantage (advantages to clients, advantages to self).</li>
<li>A sustainable competitive advantage is: doing different activities than competitors OR doing similar activities in a way that is different than competitors.</li>
<li>Have a clear position (what you say you stand for) and communicate it clearly.</li>
<li>Distinct or Extinct. It&#8217;s better to be rejected than ignored.</li>
</ul>
<p><strong>Andrew on Relationships and Social Media</strong></p>
<ul>
<li>Basic human relationship principles apply to business relationships. </li>
<li>As a business, ask yourself if you are right for the customer. Ask if they are right for you. Learn to say no when the fit is not there.</li>
<li>Customers are more active now in how they engage you.</li>
<li>Even if you don&#8217;t engage in social media you must at least listen and address social media feedback. What is the sentiment? How do people feel about you?</li>
<li>When clients ask for something, find out why they want it or think they need it. Just because they want it doesn&#8217;t mean it&#8217;s a good fit for their strategy. Some tactics can do more harm than good. It&#8217;s your job to help guide the client.</li>
<li>You can use social media to listen in on a conversation to understand how you may want to position a brand.</li>
<li>A business owner must answer the question: &#8220;What does a real lead look like to me?&#8221; Know what you want. Use BANT to qualify a lead. <strong>B</strong>udget, <strong>A</strong>uthority, <strong>N</strong>eed, <strong>T</strong>imetable. Does the client have a budget? Does the person you are working with have the authority to make a decision? Is there a clear and legitimate need <em>[My notes missed Need so I'm guessing a little on this one. - Rob]</em>? Does the client have a deadline?</li>
<li>It&#8217;s ok to say no and refer a lead to somebody that is a better fit.</li>
</ul>
<p><strong>Andrew on Websites</strong></p>
<ul>
<li>A website must deliver an experience that is consistent with the rest of your interactions.</li>
<li>A website doesn&#8217;t have to be amazing <em>[thank you for saying this - Rob]</em>. It merely has to be adequate. BUT! It must address and answer prospects questions.</li>
<li>Websites must support mobile even if it supports it in a very simple manner.</li>
</ul>
<p><strong>Andrew on Other Things</strong></p>
<ul>
<li>(A speaker gets points if they talk to audience members before the event then weave details of those conversations into the thread of their talk.)</li>
<li>Before you invest in something always consider: &#8220;What do I want to get out of this?&#8221;</li>
</ul>
<p>Andrew also talked about <strong>Some Keys to a Business that Will Survive</strong></p>
<p><strong>1. Establish your brand:</strong></p>
<ul>
<li>You need a Sustainable Competitive Advantage.</li>
<li>Be clear on who you are and who you are not.</li>
<li>Be clear on who you serve and who you do not serve.</li>
<li>Be clear on what you do and what you don&#8217;t do.</li>
<li>Pick your market and pick your battles.</li>
<li>Clarity is incredibly important in this.</li>
</ul>
<p><strong>2. Have an adequate website.</strong></p>
<p><strong>3. Talk to customers using their language (not your jargon).</strong></p>
<p><strong>4. Be authentic.</strong> This is a clear massive advantage small businesses have over bigger competitors. It is hard for big businesses / corporations to be authentic.</p>
<p>It was a great event. Caitlin and Andrew shared a lot of solid information. Also, <a href="http://twitter.com/#!/CitySteam">City Steam</a>&#8216;s ravioli was excellent.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robsymonds.com/notes-on-marketing-and-promotion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Jack Welch on Business Complexity</title>
		<link>http://www.robsymonds.com/jack-welch-on-business-complexity/</link>
		<comments>http://www.robsymonds.com/jack-welch-on-business-complexity/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 18:01:25 +0000</pubDate>
		<dc:creator>Rob Symonds</dc:creator>
				<category><![CDATA[Business]]></category>

		<guid isPermaLink="false">http://www.robsymonds.com/?p=533</guid>
		<description><![CDATA[People always overestimate how complex business is. This isn&#8217;t rocket science&#8212;we&#8217;ve chosen one of the world&#8217;s most simple professions. &#8212;Jack Welch]]></description>
				<content:encoded><![CDATA[<p>People always overestimate <a href="http://personalmba.com/what-it-takes-entrepreneur/">how complex business is</a>. This isn&#8217;t rocket science&#8212;we&#8217;ve chosen one of the world&#8217;s most simple professions.</p>
<p>&#8212;Jack Welch</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robsymonds.com/jack-welch-on-business-complexity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Well-Dressed DBA</title>
		<link>http://www.robsymonds.com/the-well-dressed-dba/</link>
		<comments>http://www.robsymonds.com/the-well-dressed-dba/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 19:25:40 +0000</pubDate>
		<dc:creator>Rob Symonds</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Work Life]]></category>

		<guid isPermaLink="false">http://www.robsymonds.com/?p=277</guid>
		<description><![CDATA[Don&#8217;t laugh. You may not be aware of this fact but DBAs (database administrators) are actually world renowned for their impeccable display of sartorial savvy. What the average man knows about fashion would fit nicely within a CHAR(4) field. What the DBA knows about fashion requires a VARCHAR(MAX) field. At least. By the way, the [...]]]></description>
				<content:encoded><![CDATA[<p>Don&#8217;t laugh.</p>
<p>You may not be aware of this fact but DBAs (<a href="http://en.wikipedia.org/wiki/Database_administrator">database administrators</a>) are actually <em>world renowned</em> for their impeccable display of sartorial savvy. What the average man knows about fashion would fit nicely within a <a href="http://msdn.microsoft.com/en-us/library/ms176089.aspx">CHAR</a>(4) field. What the DBA knows about fashion requires a <a href="http://msdn.microsoft.com/en-us/library/ms178158.aspx">VARCHAR</a>(MAX) field. At least.</p>
<p>By the way, the author would have you know that he can speak with total and complete authority on female DBA fashion as well as male. But he will let a female DBA tackle her own sex. Today he will tackle only the male. </p>
<p>Moving right along then, we will begin at the bottom and work our way to the top.<span id="more-277"></span></p>
<h3>Shoes</h3>
<p>The discerning DBA accepts only the finest shodding. He is always careful to balance the need to optimize for cost and speed vs the effort required for maintenance.</p>
<p>Shoe laces should be made with a material that facilitates speedy lacing to accommodate the DBA&#8217;s nimble fingers. If the DBA can get velcro, even better.</p>
<p>The sole should be thick and sturdy for kicking the stuffing out of servers. The shoes should fit snugly so they don&#8217;t fly off during these frequent maneuvers. The color, texture and material of the rest of the shoe is of absolutely no concern.</p>
<p>As everyone already knows, the first DBA was Herman Munster. So the respectful DBA will often try to find shoes that honor Herman&#8217;s memory and our shared DBA heritage.</p>
<p><img src="http://www.robsymonds.com/wp-content/uploads/2010/10/h-munster-234x300.jpg" alt="" title="Herman Munster: The First DBA" width="234" height="300" class="aligncenter size-medium wp-image-279" /></p>
<h3>Socks</h3>
<p>The sock of choice for the well-dressed DBA is the white knee-high tube sock.<br />
Stripes are preferred but the careful DBA will observe that too many stripes will make him look the dandy.</p>
<p><img src="http://www.robsymonds.com/wp-content/uploads/2010/10/tube-socks-150x150.jpg" alt="" title="Tube Socks: Clearly RAD" width="150" height="150" class="alignleft size-thumbnail wp-image-285" /></p>
<p>Tube socks are low maintenance and the color white is compatible with any color pants or shoes. This sock is also on the compatibility matrix for most versions and editions of Microsoft Windows Server.</p>
<p>A bonus is that tube socks hold their shape well and can be pressed into service as puppets when the DBA is elucidating DBA concepts to a non-DBA. </p>
<h3>Pants</h3>
<p>It is important for the DBA to always present a professional, polished look. The appropriate pair of pants is one of the keys to achieving this look.</p>
<p><img src="http://www.robsymonds.com/wp-content/uploads/2010/10/green-dockers-213x300.jpg" alt="" title="Green: The Color of Envy" width="213" height="300" class="alignright size-medium wp-image-289" /></p>
<p>The green, pleated, creased, elastic-waisted, stain-resisting, no-iron, no-wrinkle, tumble-dry-on-high khaki is the obvious pant of choice: green pants go well with white socks. They go well with everything else for that matter. </p>
<p>All professional pants are creased. The DBA is not going to be caught behind the curve so his pants will also be creased. Pleats and an elastic waist give the DBA a large degree of freedom and maneuverability, both necessary for communicating with his storage engineer and accommodating the digestion of late night pizzas.</p>
<p>After a few washings, the pants will become fasionably distressed. The edges of the creases will start to turn white giving the pants that &#8220;I live in these pants 24/7/365&#8243; look. This is <em>exactly</em> what the DBA wants. And he will consider himself lucky if he can get there after just a few washes. This is a subtle way the shrewd DBA demonstrates a commitment to hard work and thus boosts his worth in the eyes of his manager.</p>
<p>A belt is entirely optional. Bits of lashed together twine, rope or USB thumb drive lanyards are acceptable substitutes as they help the DBA convey his &#8220;I can fix anything, just like MacGyver&#8221; attitude.</p>
<p><img src="http://www.robsymonds.com/wp-content/uploads/2010/10/macgyver-300x208.jpg" alt="" title="MacGyver: He turned that missile into a plant potter." width="300" height="208" class="aligncenter size-medium wp-image-290" /></p>
<h3>Shirt</h3>
<p>The DBA&#8217;s shirt is the second mainstay of his professional look. To make sure his arms always stay cool, the pragmatic DBA chooses short sleeves.  Always. This also keeps his arms and hands moving freely while typing and making wild gesticulations to his storage engineer. All other details such as color, stitching, pattern, fabric and texture are entirely immaterial.</p>
<p><img src="http://www.robsymonds.com/wp-content/uploads/2010/10/milton.png" alt="" title="Sleeves: Always in the way" width="255" height="212" class="aligncenter size-full wp-image-291" /></p>
<p>Otherwise, the DBA will choose a short-sleeve polo shirt. They require some prep work before they can be worn however. Most polo shirts are made with too much material. Therefore it is crucial that the DBA run it through the washer and dryer on high heat multiple times to remove any billowing. It&#8217;s important that superfluous shirt doesn&#8217;t get in the way of getting the job done. </p>
<p>But how to know if the shirt fits properly? If the arms are lifted straight overhead, approximately 3 inches of belly should be showing above the belt but below the bottom of the shirt.</p>
<p>In certain cirumstances it may be necessary for the DBA to wear a clip-on tie. In this case, the button up short-sleeve shirt is often the best choice. A polo will certainly do just as well in a pinch.</p>
<h3>Above and Beyond</h3>
<p>It is hard to improve upon this look. It is vintage DBA. However, there are a few touches that can add that extra bit of oomph to the DBA&#8217;s look:</p>
<ol>
<li>Calculator watch for instant storage calculations.</li>
<li>Cell phone holster.</li>
<li>A second cell phone holster for a second phone.</li>
<li>Several pens for the shirt pocket (button up only).</li>
<li>Cheetos crumbs sprinkled liberally on shirt and pants.</li>
<li>A moustache. Just a moustache.</li>
<li>Cheetos crumbs sprinkled liberally on moustache.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.robsymonds.com/the-well-dressed-dba/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL Server 2005 How to Change Default Backup Location</title>
		<link>http://www.robsymonds.com/sql-server-2005-how-to-change-default-backup-location/</link>
		<comments>http://www.robsymonds.com/sql-server-2005-how-to-change-default-backup-location/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 19:05:33 +0000</pubDate>
		<dc:creator>Rob Symonds</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.robsymonds.com/?p=256</guid>
		<description><![CDATA[In SQL Server 2005, you can easily change the default location for log and data files. Open SSMS and connect to the instance you want to configure. Right-click on the instance and choose properties. Then select the Database Settings page and change the Database default locations. Clickity-click-done. (I know, being a DBA can be tough [...]]]></description>
				<content:encoded><![CDATA[<p>In SQL Server 2005, you can easily change the default location for log and data files. Open SSMS and connect to the instance you want to configure. Right-click on the instance and choose properties. Then select the Database Settings page and change the Database default locations. </p>
<p>Clickity-click-done. (I know, being a DBA can be tough sometimes.)  <span id="more-256"></span></p>
<p>Ok. But what about the default location for backups?</p>
<p>Microsoft has done you a favor by hiding this configuration value. Now is where you get to show off some real skills. </p>
<p>Click Start -> Run. Type <i>regedit</i> and click Ok.</p>
<p>Now that you&#8217;re in the Registry Editor, navigate as follows starting from My Computer:</p>
<pre>
-> HKEY_LOCAL_MACHINE
 -> SOFTWARE
  -> Microsoft
   -> Microsoft SQL Server
    -> MSSQL.1 (default instance)
     -> MSSQLServer
</pre>
<p>Look for the BackupDirectory REG_SZ entry. You can change this to wherever you usually put your backups. You don&#8217;t need the trailing slash. For example on one machine backups are on <i>S:</i>. On another, smaller machine, they are on <i>P:\Backups</i>.</p>
<p>I&#8217;m not sure why Microsoft didn&#8217;t expose this configuration value directly through SSMS but it&#8217;s no big deal to make the change.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robsymonds.com/sql-server-2005-how-to-change-default-backup-location/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
