<?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"
	>

<channel>
	<title>Squirrel's SQL Server Blog</title>
	<atom:link href="http://www.lockergnome.com/sqlsquirrel/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lockergnome.com/sqlsquirrel</link>
	<description>Everything SQL Server!</description>
	<pubDate>Thu, 03 Sep 2009 20:57:24 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>Optimizing Transaction Logs</title>
		<link>http://www.lockergnome.com/sqlsquirrel/2009/08/29/optimizing-transaction-logs/</link>
		<comments>http://www.lockergnome.com/sqlsquirrel/2009/08/29/optimizing-transaction-logs/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 23:28:18 +0000</pubDate>
		<dc:creator>sqlsquirrel</dc:creator>
		
		<category><![CDATA[Administration]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[SQL Server 2005]]></category>

		<category><![CDATA[sqlskills]]></category>

		<category><![CDATA[transaction log]]></category>

		<category><![CDATA[VLF]]></category>

		<category><![CDATA[VLFs]]></category>

		<guid isPermaLink="false">http://www.lockergnome.com/sqlsquirrel/?p=109</guid>
		<description><![CDATA[Welcome back and Happy Saturday!
Today I wanted to share with you that some DBAs seem to overlook the transaction log when thinking about optimizing database performance.  I myself was guilty of not considering optimizing the transaction logs for my production databases.  I am going to blog about Virtual Log Files (VLFs) and why it is important [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome back and Happy Saturday!</p>
<p>Today I wanted to share with you that some DBAs seem to overlook the transaction log when thinking about optimizing database performance.  I myself was guilty of not considering optimizing the transaction logs for my production databases.  I am going to blog about Virtual Log Files (VLFs) and why it is important to consider this option when talking about overall database health and performance.  Here is a little background first&#8230; I first learned about VLFs when I attended the last Dev Connections Conference in Las Vegas for SQL Server 2008.  At his conference I learned about VLFs from one of the prominent SQL Server experts Kimberly Tripp.  Here is a more detailed breakdown of Virtual Log Files:</p>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"><strong>Virtual Log Files</strong></span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> The Transaction Log is divided into Virtual Log Files</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> To get more information about Log file utilization you can run DBCC LogInfo</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> When you add space or Autogrow</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> &lt; 64 MB creates 4 new VLFs</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> &gt;= 64 MB and 1 &lt; GB creates 8 new VLFs</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> &gt;= 1 GB creates 16 new VLFs</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> A VLF fills up before moving on to the next</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> Log Backup does not clear a VLF until you have moved into the next one</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> (so you don&#8217;t want a very small number of </span><span style="font-size: x-small;font-family: Tahoma">huge VLFs)</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> Too many and you get <span style="text-decoration: underline">poor</span> write performance</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> If more than 50 VLFs time to trim</span></div>
<div dir="ltr"><span style="font-size: x-small;font-family: Tahoma"> Ideally around 20 VLFs</span></div>
<p>For Performance Impact please refer to Linchi Shea&#8217;s post on SQLBlog (link must be cut and pasted into your browser):</p>
<p><strong>http://sqlblog.com/blogs/linchi_shea/archive/2009/02/09/performance-impact-a-large-number-of-virtual-log-files-part-i.aspx</strong></p>
<p>For more information, please refer to Kimberly&#8217;s posts on her website (also, these must be cut and pasted into your browser as the direct links will not work):</p>
<p><strong>http://www.sqlskills.com/BLOGS/KIMBERLY/post/8-Steps-to-better-Transaction-Log-throughput.aspx</strong></p>
<p><strong>http://www.sqlskills.com/BLOGS/KIMBERLY/post/Transaction-Log-VLFs-too-many-or-too-few.aspx</strong></p>
<p>I hope I have given all of you something new to ponder as you are getting ready to optimize performance on your production databases.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lockergnome.com/sqlsquirrel/2009/08/29/optimizing-transaction-logs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fixing Orphaned Users In SQL Server 2005</title>
		<link>http://www.lockergnome.com/sqlsquirrel/2009/05/16/fixing-orphaned-users-in-sql-server-2005/</link>
		<comments>http://www.lockergnome.com/sqlsquirrel/2009/05/16/fixing-orphaned-users-in-sql-server-2005/#comments</comments>
		<pubDate>Sat, 16 May 2009 18:36:55 +0000</pubDate>
		<dc:creator>sqlsquirrel</dc:creator>
		
		<category><![CDATA[Administration]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[microsoft]]></category>

		<category><![CDATA[sid]]></category>

		<category><![CDATA[sids]]></category>

		<category><![CDATA[sp_change_users_login]]></category>

		<category><![CDATA[SQL]]></category>

		<category><![CDATA[SQL Server 2005]]></category>

		<category><![CDATA[sync logins]]></category>

		<category><![CDATA[syslogins]]></category>

		<category><![CDATA[TSQL]]></category>

		<guid isPermaLink="false">http://www.lockergnome.com/sqlsquirrel/?p=95</guid>
		<description><![CDATA[The other day i restored a QA database in compatibility level 90 (SQL Server 2005) to a production server that had SQL Server 2005 installed.  The restore went as expected however, the logins that were already there on the SQL Server had different SIDs than the users in the database that was restored.  We maintain three [...]]]></description>
			<content:encoded><![CDATA[<p>The other day i restored a QA database in compatibility level 90 (SQL Server 2005) to a production server that had SQL Server 2005 installed.  The restore went as expected however, the logins that were already there on the SQL Server had different SIDs than the users in the database that was restored.  We maintain three different environments for production databases (dev, qa and production) and in each environment the logins have different SIDs and passwords.  So after promoting the databases from one environment to another we need to re-sync the SIDs.</p>
<p>Now back in the days of SQL Server 2000 and earlier you needed to write a T-SQL script that allowed access to the system tables, grab the SIDS from syslogins (sysxlogins) and update the SIDs in the user database.  Now lets fast forward to SQL Server 2005&#8230; Microsoft recogonized the need to sync database users to logins and vice versa for different servers.  So in SQL Server 2005 came the stored procedure <span style="color: #800000">sp_change_users_login</span><span style="color: #000000">.  To find out more information on this stored procedure you can visit this site:   <a href="http://technet.microsoft.com/en-us/library/ms174378.aspx">http://technet.microsoft.com/en-us/library/ms174378.aspx</a> . </span></p>
<p>Here is a T-SQL script that you run in a query window to allow you to sync database users to SQL Server logins.  Now one thing to note here&#8230; make sure you run the script in the context of the database that you want to sync the users for.  Here is the script:</p>
<p><span style="color: #0000ff">SET NOCOUNT ON<br />
SET QUOTED_IDENTIFIER OFF</span><br />
GO</p>
<p><span style="color: #0000ff">USE</span> &lt;database name&gt;<br />
GO</p>
<p><span style="color: #0000ff">DECLARE</span> @sql <span style="color: #0000ff">varchar</span>(100);</p>
<p><span style="color: #0000ff">DECLARE</span> curSQL <span style="color: #0000ff">CURSOR FOR</span><br />
<span style="color: #0000ff">SELECT</span> <span style="color: #ff0000">&#8216;EXEC sp_change_users_login &#8221;UPDATE_ONE&#8221;, &#8221;&#8217; </span>+ <span style="color: #0000ff">name</span> + <span style="color: #ff0000">&#8221;&#8217;, &#8221;&#8217;</span> + <span style="color: #0000ff">name</span> + <span style="color: #ff0000">&#8221;&#8221;<br />
</span> <span style="color: #0000ff">FROM</span> sysusers<br />
<span style="color: #0000ff">WHE</span>RE issqluser = 1<br />
AND <span style="color: #ff00ff">suser_sname</span>(<span style="color: #0000ff">sid</span>) IS NULL<br />
AND <span style="color: #0000ff">name</span> NOT IN (<span style="color: #ff0000">&#8216;dbo&#8217;</span>, <span style="color: #ff0000">&#8216;guest&#8217;</span>)</p>
<p><span style="color: #0000ff">OPEN</span> curSQL</p>
<p><span style="color: #0000ff">FETCH</span> curSQL <span style="color: #0000ff">INTO</span> @sql</p>
<p><span style="color: #0000ff">WHILE</span> <span style="color: #ff00ff">@@FETCH_STATUS</span> = 0 <span style="color: #0000ff">BEGIN</span><br />
<span style="color: #0000ff">EXEC</span> (@sql)<br />
<span style="color: #0000ff">PRINT</span> @sql<br />
<span style="color: #0000ff">FETCH</span> curSQL <span style="color: #0000ff">INTO</span> @sql<br />
<span style="color: #0000ff">END</span></p>
<p><span style="color: #0000ff">CLOSE</span> curSQL<br />
<span style="color: #0000ff">DEALLOCATE</span> curSQL<br />
GO</p>
<p>I hope this helps! Let us know if you have another way to sync database users to SQL Server logins.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lockergnome.com/sqlsquirrel/2009/05/16/fixing-orphaned-users-in-sql-server-2005/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Querying DTS Tables For Log Information</title>
		<link>http://www.lockergnome.com/sqlsquirrel/2009/03/27/querying-dts-tables-for-log-information/</link>
		<comments>http://www.lockergnome.com/sqlsquirrel/2009/03/27/querying-dts-tables-for-log-information/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 20:58:28 +0000</pubDate>
		<dc:creator>sqlsquirrel</dc:creator>
		
		<category><![CDATA[Administration]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[DTS]]></category>

		<category><![CDATA[dts packages]]></category>

		<category><![CDATA[jobs]]></category>

		<category><![CDATA[lineage]]></category>

		<category><![CDATA[log]]></category>

		<category><![CDATA[logging]]></category>

		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.lockergnome.com/sqlsquirrel/?p=89</guid>
		<description><![CDATA[Today I was looking the SQL Server Agent jobs on one of my SQL Server 2000 production database servers.  I noticed one job that failed with a very cryptic error.  This was the error message reported:
DTSRun OnStart:  DTSStep_DTSDataPumpTask_6   DTSRun OnProgress:
DTSStep_DTSDataPumpTask_6; 1000 Rows have been transformed or copied.;
PercentComplete = 0; ProgressCount = 1000   DTSRun OnProgress:
DTSStep_DTSDataPumpTask_6; 2000 [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was looking the SQL Server Agent jobs on one of my SQL Server 2000 production database servers.  I noticed one job that failed with a very cryptic error.  This was the error message reported:</p>
<p>DTSRun OnStart:  DTSStep_DTSDataPumpTask_6   DTSRun OnProgress:<br />
DTSStep_DTSDataPumpTask_6; 1000 Rows have been transformed or copied.;<br />
PercentComplete = 0; ProgressCount = 1000   DTSRun OnProgress:<br />
DTSStep_DTSDataPumpTask_6; 2000 Rows have been transformed or copied.;<br />
PercentComplete = 0; ProgressCount = 2000   DTSRun OnProgress:<br />
DTSStep_DTSDataPumpTask_6; 3000 Rows have been transformed or copied.;<br />
PercentComplete = 0; ProgressCount = 3000   DTSRun OnProgress: <br />
DTSStep_DTSDataPumpTask_6; 4000 Rows have been transformed or copied.;<br />
PercentComplete = 0; ProgressCount = 4000   DTSRun OnProgress: <br />
DTSStep_DTSDataPumpTask_6; 5000 Rows have been transformed or copied.;<br />
PercentComplete = 0; ProgressCount = 5000   DTSRun OnProgress: <br />
DTSStep_DTSDataP&#8230;  Process Exit Code 1.  The step failed.</p>
<p>Now looking at this error message does not really provide all the detail as to why and what failed.  So I did some searching through BOL, MSDB and Google and I finally found what I was looking for.  IF you have logging enabled on the DTS package (I do for all of mine) and have the option to write to SQL Server instead of a log file then you can query for the exact error message produced.  Here is what you need to do:</p>
<p>In SQL Server 2000 open up a Query Analyzer window and select &#8216;MSDB&#8217; from the drop down or type in &#8216;<span style="color: #0000ff">USE</span> MSDB&#8217; and execute that and you will now be placed into the context of MSDB.  Next, look at the job that failed and notice the name of the of the DTS package being called.  Take the name and then type and execute the following T-SQL statement:</p>
<p>    <span style="color: #0000ff">select </span>*<br />
    <span style="color: #0000ff">from </span>sysdtspackagelog<br />
    <span style="color: #0000ff">where </span><span style="color: #0000ff">name </span>= <span style="color: #ff0000">&#8216;SendCustomerData&#8217;</span> <span style="color: #008000"> &#8212; this is the name of your DTS package</span><br />
    <span style="color: #0000ff">order by </span>starttime <span style="color: #0000ff">desc</span></p>
<p>In the result set look at the first record and look for the column that reads &#8216;lineagefull&#8217; and copy that value in the first record.  The value will look something like this:  E1E90023-93EB-4355-B995-43A762AD43C1</p>
<p>After grabbing that value, execute the following T-SQL statements and use that value in the WHERE clause.</p>
<p>     <span style="color: #0000ff">select </span>*<br />
     <span style="color: #0000ff">from </span>sysdtssteplog<br />
     <span style="color: #0000ff">where </span>lineagefull = <span style="color: #ff0000">&#8216;E1E90023-93EB-4355-B995-43A762AD43C1&#8242;</span> </p>
<p>The table sysdtssteplog displays all of the tasks in the DTS package so 1 task equal 1 record in the table.  Scroll over to your left in the result set pane and look for a column called: </p>
<p><em>errordescription</em></p>
<p>Here you will be able to view the actual error that was generated by one or more tasks in your DTS package!</p>
<p>I hope you found this helpful!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lockergnome.com/sqlsquirrel/2009/03/27/querying-dts-tables-for-log-information/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Collecting Performance Counters For A Baseline In SQL Server</title>
		<link>http://www.lockergnome.com/sqlsquirrel/2009/03/18/collecting-performance-counters-for-a-baseline-in-sql-server/</link>
		<comments>http://www.lockergnome.com/sqlsquirrel/2009/03/18/collecting-performance-counters-for-a-baseline-in-sql-server/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 05:19:54 +0000</pubDate>
		<dc:creator>sqlsquirrel</dc:creator>
		
		<category><![CDATA[Administration]]></category>

		<category><![CDATA[baseline]]></category>

		<category><![CDATA[hardware bottlenecks]]></category>

		<category><![CDATA[load]]></category>

		<category><![CDATA[perf mon]]></category>

		<category><![CDATA[performance counters]]></category>

		<category><![CDATA[performance monitor]]></category>

		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.lockergnome.com/sqlsquirrel/?p=84</guid>
		<description><![CDATA[Hello again and welcome back!
The other day I was posting in the SQL Server news groups and I came across a person asking about which performance counters should be collected to obtain a performance load \ baseline in their production SQL Server environment.  It occurred to me there is a lot of information out there [...]]]></description>
			<content:encoded><![CDATA[<p>Hello again and welcome back!</p>
<p>The other day I was posting in the SQL Server news groups and I came across a person asking about which performance counters should be collected to obtain a performance load \ baseline in their production SQL Server environment.  It occurred to me there is a lot of information out there about performance counters and what shoud be collected to determine a true load \ baseline for a production environment.  Now granted everyone&#8217;s production SQL Server environment is different however, the following performance counters can be used to give you a wide or general overview of the activity going on in your environment.</p>
<p>In the past I have worked with a company called Scalability Experts on a very large SQL Server consolidation project.  Scalability Experts ran the same counters to get a general overview\load\baseline on all production SQL Servers.  These counters can be ran on SQL Server 2000, 2005 and 2008 in either a stand-alone or cluster configuration.  Here are the performance counters to run within Performance Monitor:</p>
<p>Memory - Page Reads/sec<br />
Memory - Page Writes/sec<br />
Memory - Pages Input/sec<br />
Memory - Pages Output/sec<br />
Memory - Pages/sec<br />
Network Interface(*) - Bytes Total/sec<br />
Network Interface(*) - Output Queue Length<br />
Network Interface(*) - Packets/sec<br />
PhysicalDisk(*) - % Disk Time<br />
PhysicalDisk(*) - Avg. Disk Bytes/Read<br />
PhysicalDisk(*) - Avg. Disk Bytes/Write<br />
PhysicalDisk(*) - Avg. Disk Queue Length<br />
PhysicalDisk(*) - Avg. Disk Read Queue Length<br />
PhysicalDisk(*) - Avg. Disk sec/Read<br />
PhysicalDisk(*) - Avg. Disk sec/Write<br />
PhysicalDisk(*) - Avg. Disk Write Queue Length<br />
PhysicalDisk(*) - Disk Read Bytes/sec<br />
PhysicalDisk(*) - Disk Reads/sec<br />
PhysicalDisk(*) - Disk Transfers/sec<br />
PhysicalDisk(*) - Disk Write Bytes/sec<br />
PhysicalDisk(*) - Disk Writes/sec<br />
Process(sqlservr) - % Privileged Time<br />
Process(sqlservr) - % Processor Time<br />
Process(sqlservr) - % User Time<br />
Process(sqlservr) - IO Data Operations/sec<br />
Process(sqlservr) - Page Faults/sec<br />
Process(sqlservr) - Private Bytes<br />
Process(sqlservr) - Thread Count<br />
Process(sqlservr) - Virtual Bytes<br />
Process(sqlservr) - Working Set<br />
Processor(*) - % Interrupt Time<br />
Processor(*) - % Privileged Time<br />
Processor(*) - % Processor Time<br />
Processor(*) - % User Time<br />
SQLServer:Buffer Manager - *<br />
SQLServer:Cache Manager(*) - *<br />
SQLServer:Databases(*) - Data File(s) Size (KB)<br />
SQLServer:Databases(*) - Log File(s) Size (KB)<br />
SQLServer:Databases(*) - Transactions/sec<br />
SQLServer:General Statistics - *<br />
SQLServer:Locks(*) - *<br />
SQLServer:Memory Manager - *<br />
SQLServer:SQL Statistics - Batch Requests/sec<br />
SQLServer:SQL Statistics - SQL Compilations/sec<br />
SQLServer:SQL Statistics - SQL Re-Compilations/sec<br />
System - Context Switches/sec<br />
System - Processor Queue Length</p>
<p>My next post will be demostrating how to add these counters into Performance Monitor and setting the specifics (duration, frequency, etc) on the the log.  If you have any other performance counters that you use please post them here!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lockergnome.com/sqlsquirrel/2009/03/18/collecting-performance-counters-for-a-baseline-in-sql-server/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Black Box Trace In SQL Server</title>
		<link>http://www.lockergnome.com/sqlsquirrel/2009/03/17/black-box-trace-in-sql-server/</link>
		<comments>http://www.lockergnome.com/sqlsquirrel/2009/03/17/black-box-trace-in-sql-server/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 03:01:07 +0000</pubDate>
		<dc:creator>sqlsquirrel</dc:creator>
		
		<category><![CDATA[Administration]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[black box trace]]></category>

		<category><![CDATA[perf counters]]></category>

		<category><![CDATA[performance issues]]></category>

		<category><![CDATA[sql profiler]]></category>

		<category><![CDATA[SQL Server]]></category>

		<category><![CDATA[sql trace]]></category>

		<guid isPermaLink="false">http://www.lockergnome.com/sqlsquirrel/?p=82</guid>
		<description><![CDATA[The other day I was looking on a production SQL Server and I noticed a trace file that was running but was not able to associate it to SQL Profile session. I queried sysprocesses and was unable to find a spid that was running SQL Profile. I was perplexed for a little while and started [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I was looking on a production SQL Server and I noticed a trace file that was running but was not able to associate it to SQL Profile session. I queried sysprocesses and was unable to find a spid that was running SQL Profile. I was perplexed for a little while and started searching the Internet high and low and came across &#8220;black box&#8221; traces in SQL Server.</p>
<p>So what I did was&#8230; I opened up the trace file in SQL Profiler and I was able to view the events and columns for the trace. Then I compared the events and columns to what I found in the trace file to what I found on the Internet. The comparison turned out to be an exact match for events as well as columns. So I started asking around and nobody seemed to know how it got there on the server and if it was being used. Of course when it comes to something like this nobody wants to fess up.</p>
<p>Here is the idea of a &#8220;black box&#8221; trace. A black box trace records the last 5MB of activity on the SQL Server when it becomes problematic. The trace captures the queries and\or errors right before the server becomes unrepsonsive or crashes. This information is useful for sending to Microsoft to help diagnose the problem. The black box trace records the following:<br />
Stored Procedure Execution (RPC:Starting)<br />
T-SQL Batch Execution (SQL:BatchStarting)<br />
Errors and Warnings (Attention and Exception)</p>
<p>You can go to google and query &#8220;sql server black box trace&#8221; and you will get a lot more information. From what I have read and I can tell on my own server the black box trace does not cause any performance issues. If you have experience using the black box trace feature please post and let us know!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lockergnome.com/sqlsquirrel/2009/03/17/black-box-trace-in-sql-server/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Inserting DBCC CHECKDB Results Into A Table</title>
		<link>http://www.lockergnome.com/sqlsquirrel/2009/03/11/inserting-dbcc-checkdb-results-into-a-table/</link>
		<comments>http://www.lockergnome.com/sqlsquirrel/2009/03/11/inserting-dbcc-checkdb-results-into-a-table/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 04:52:58 +0000</pubDate>
		<dc:creator>sqlsquirrel</dc:creator>
		
		<category><![CDATA[Administration]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[DBCC]]></category>

		<category><![CDATA[DBCC CHECKDB]]></category>

		<category><![CDATA[into table]]></category>

		<category><![CDATA[SQL Server]]></category>

		<category><![CDATA[SQL Server 2005]]></category>

		<category><![CDATA[T-SQL]]></category>

		<category><![CDATA[with tableresults]]></category>

		<guid isPermaLink="false">http://www.lockergnome.com/sqlsquirrel/?p=76</guid>
		<description><![CDATA[Hello again and welcome back!
I thought today&#8217;s posting to my blog should cover how to get the results of DBCC CHECKDB into a table.  Unfortunately, Microsoft does not allow you easily per se to insert the results into a table so that you might be able to generate administrative reports off of.  Well in my [...]]]></description>
			<content:encoded><![CDATA[<p>Hello again and welcome back!</p>
<p>I thought today&#8217;s posting to my blog should cover how to get the results of <span style="color: #0000ff">DBCC</span> CHECKDB into a table.  Unfortunately, Microsoft does not allow you easily per se to insert the results into a table so that you might be able to generate administrative reports off of.  Well in my case that is exactly why I developed this process&#8230; to generate administrative reports off of.</p>
<p>Now what I did as you will see in the T-SQL scripts below, I created a table based upon the result set of the <span style="color: #0000ff">DBCC</span> CHECKDB execution.  Once I had the column names and data types I went ahead and created the table.  The next step was to write a stored procedure that would iterate through all databases on the server, run the<span style="color: #0000ff"> DBCC</span> CHECKDB statement and record the output into the table I just created.  So after much testing and a little taste of success I give you the scripts below.  I call the stored procedure in a SQL Server Agent job and schedule the job to run in the early hours of the morning and &#8217;off peak&#8217; hours.  So in the morning I can review the results of <span style="color: #0000ff">DBCC</span> CHECKDB from the previous night.  Now you can modify this process to just append the data or just truncate it like I did.  I hope you find this code helpful!&#8230; Let us know!&#8230;</p>
<p>Here is the table script (this script is for the SQL Server 2005 CHECKDB output)</p>
<p><span style="color: #0000ff">SET ANSI_NULLS ON</span><br />
GO<br />
<span style="color: #0000ff">SET QUOTED_IDENTIFIER ON</span><br />
GO<br />
<span style="color: #0000ff">SET ANSI_PADDING ON</span><br />
GO<br />
<span style="color: #0000ff">CREATE TABLE</span> [dbo].[CheckDBResult](<br />
 [ServerName] [varchar](100) <span style="color: #0000ff">COLLATE</span> SQL_Latin1_General_CP1_CI_AS <span style="color: #808080">NULL</span>,<br />
 [Error] [int] <span style="color: #808080">NULL</span>,<br />
 [Level] [int] <span style="color: #808080">NULL</span>,<br />
 [State] [int] <span style="color: #808080">NULL</span>,<br />
 [MessageText] [varchar](7000) <span style="color: #0000ff">COLLATE</span> SQL_Latin1_General_CP1_CI_AS <span style="color: #808080">NULL</span>,<br />
 [RepairLevel] [int] <span style="color: #808080">NULL</span>,<br />
 [Status] [int] <span style="color: #808080">NULL</span>,<br />
 [DbId] [int] <span style="color: #808080">NULL</span>,<br />
 [Id] [int] <span style="color: #808080">NULL</span>,<br />
 [IndId] [int] <span style="color: #808080">NULL</span>,<br />
 [PartitionId] [int] <span style="color: #808080">NULL</span>,<br />
 [AllocUnitId] [int] <span style="color: #808080">NULL</span>,<br />
 [File] [int] <span style="color: #808080">NULL</span>,<br />
 [Page] [int] <span style="color: #808080">NULL</span>,<br />
 [Slot] [int] <span style="color: #808080">NULL</span>,<br />
 [RefFile] [int] <span style="color: #808080">NULL</span>,<br />
 [RefPage] [int] <span style="color: #808080">NULL</span>,<br />
 [RefSlot] [int] <span style="color: #808080">NULL</span>,<br />
 [Allocation] [int] <span style="color: #808080">NULL</span>,<br />
 [insert_date] [datetime] <span style="color: #808080">NOT NULL </span><span style="color: #0000ff">CONSTRAINT </span>[DF_CheckDBResult_insert_date]  <span style="color: #0000ff">DEFAULT </span>(<span style="color: #ff00ff">getdate</span>())<br />
) <span style="color: #0000ff">ON</span> [PRIMARY]</p>
<p>GO<br />
<span style="color: #0000ff">SET ANSI_PADDING OFF</span></p>
<p>Here is the <span style="color: #0000ff">CREATE PROCEDURE </span>script that utilizes the CHECKDB 2005 output and here is the T-SQL syntax to execute the procedure: <span style="color: #0000ff">EXEC </span>mDBMaintenance <span style="color: #ff0000">&#8216;Lumiere&#8217; </span>&lt;- server name to run the script against</p>
<p><span style="color: #0000ff">EXEC</span> Admin_GetCheckDBResults<span style="color: #ff0000"> &#8217;server name&#8217;</span></p>
<p><span style="color: #0000ff">set ANSI_NULLS ON<br />
set QUOTED_IDENTIFIER ON</span><br />
GO<br />
<span style="color: #0000ff">CREATE PROCEDURE</span> [dbo].[Admin_GetCheckDBResults]<br />
 @ServerName <span style="color: #0000ff">VARCHAR</span>(100)<br />
 <br />
<span style="color: #0000ff">AS<br />
DECLARE</span> @Database <span style="color: #0000ff">SYSNAME</span><br />
 <br />
<span style="color: #339966">&#8211; Remove Previous Weeks Results<br />
</span><span style="color: #0000ff">TRUNCATE TABLE</span> DBA_Admin.dbo.CheckDBResult<br />
 <br />
<span style="color: #0000ff">DECLARE </span>cDatabases <span style="color: #0000ff">CURSOR FOR</span><br />
<span style="color: #0000ff">SELECT</span> [name] <span style="color: #0000ff">from </span>master..sysdatabases <span style="color: #0000ff">AS </span>sdb<br />
<span style="color: #0000ff">WHERE </span>sdb.[name] NOT IN (<span style="color: #ff0000">&#8216;tempdb&#8217;</span>)<br />
<span style="color: #0000ff">OPEN </span>cDatabases<br />
<span style="color: #0000ff">FETCH FROM </span>cdatabases <span style="color: #0000ff">INTO </span>@Database<br />
<span style="color: #0000ff">WHILE </span>( <span style="color: #ff00ff">@@FETCH_STATUS </span>= 0)<br />
<span style="color: #0000ff">BEGIN<br />
 SET NOCOUNT ON</span><br />
 <br />
 <span style="color: #0000ff">INSERT INTO</span> DBA_Admin.dbo.CheckDBResult(<br />
  Error,<br />
  [Level],<br />
  [State],<br />
  MessageText,<br />
  RepairLevel,<br />
  [Status],<br />
  [DbId],<br />
  Id,<br />
  IndId,<br />
  PartitionId,              &#8212; specific to SQL Server 2005, remove for SQL Server 2000 results<br />
  AllocUnitId,             &#8212; specific to SQL Server 2005, remove for SQL Server 2000 results<br />
  [File],<br />
  Page,<br />
  Slot,<br />
  RefFile,<br />
  RefPage,<br />
  RefSlot,<br />
  Allocation<br />
  )<br />
 <span style="color: #0000ff">EXEC</span> (<span style="color: #ff0000">&#8216;DBCC </span><span style="color: #ff0000">CHECKDB(&#8221;&#8217;</span> + @Database + <span style="color: #ff0000">&#8221;&#8217;) WITH TABLERESULTS&#8217;</span>)<br />
 <br />
<span style="color: #0000ff">FETCH FROM</span> cdatabases <span style="color: #0000ff">INTO </span>@Database<br />
<span style="color: #0000ff">END<br />
CLOSE</span> cDatabases<br />
<span style="color: #0000ff">DEALLOCATE </span>cDatabases<br />
 <br />
<span style="color: #008000">&#8211; Remove all details except CHECKDB information</span><br />
<span style="color: #0000ff">DELETE<br />
FROM</span> DBA_Admin.dbo.CheckDBResult<br />
<span style="color: #0000ff">WHERE </span>MessageText <span style="color: #808080">NOT LIKE </span><span style="color: #ff0000">&#8216;CHECKDB%&#8217;<br />
</span> <br />
<span style="color: #008000">&#8211; Update server Name</span><br />
<span style="color: #0000ff">UPDATE </span>DBA_Admin.dbo.CheckDBResult<br />
<span style="color: #0000ff">SET </span>ServerName = @ServerName<br />
 <br />
<span style="color: #008000">&#8211; Select Statment To Return Rows</span><br />
<span style="color: #0000ff">SELECT</span> ServerName,<br />
 MessageText,<br />
 Error,<br />
 [Level],<br />
 [State],<br />
 RepairLevel,<br />
 [Status],<br />
 [DbId],<br />
 Id,<br />
 IndId,<br />
 PartitionId,          <span style="color: #008000">&#8211; specific to SQL Server 2005, remove for SQL Server 2000 results</span><br />
 AllocUnitId,         <span style="color: #008000">&#8211; specific to SQL Server 2005, remove for SQL Server 2000 results</span><br />
 [File],<br />
 Page,<br />
 Slot,<br />
 RefFile,<br />
 RefPage,<br />
 RefSlot,<br />
 Allocation,<br />
 Insert_Date<br />
<span style="color: #0000ff">FROM </span>DBA_Admin.dbo.CheckDBResult<br />
GO</p>
<p>Now as you can see I only want to see the last line in the <span style="color: #0000ff">DBCC </span>CHECKDB command&#8230; however, you can modify it keep all the detail from the execution.  I hope this code helps and let us know how you are using it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lockergnome.com/sqlsquirrel/2009/03/11/inserting-dbcc-checkdb-results-into-a-table/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Using Double Quoted Identifiers In Linked Servers</title>
		<link>http://www.lockergnome.com/sqlsquirrel/2009/02/28/using-double-quoted-identifiers-in-linked-servers/</link>
		<comments>http://www.lockergnome.com/sqlsquirrel/2009/02/28/using-double-quoted-identifiers-in-linked-servers/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 22:26:19 +0000</pubDate>
		<dc:creator>sqlsquirrel</dc:creator>
		
		<category><![CDATA[Administration]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[double quoted identifiers]]></category>

		<category><![CDATA[linked servers]]></category>

		<category><![CDATA[openquery]]></category>

		<category><![CDATA[SQL Server 2005]]></category>

		<guid isPermaLink="false">http://www.lockergnome.com/sqlsquirrel/?p=72</guid>
		<description><![CDATA[The other day I was trying to obtain connection information from master.dbo.sysprocesses via a linked server call using SQL Server 2005. So the statement I was running looked like this:

INSERT INTO connection
SELECT DISTINCT [name],
hostname,
program_name,
loginame,
nt_username,
net_address,
last_batch, 
getdate()
FROM OPENQUERY(&#8221;SQL1\V01&#8243;, &#8216;SELECT d.[name], p.hostname, p.program_name, p.loginame, p.nt_username,&#160;p.net_address, p.last_batch, getdate() FROM master.dbo.sysprocesses as p inner join master.dbo.sysdatabases as d on p.dbid = d.dbid&#8216;)

When I execute the insert\select statement it works in [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: arial">The other day I was trying to obtain connection information from master.<span class="blsp-spelling-error">dbo</span>.<span style="color: #006600"><span class="blsp-spelling-error">sysprocesses</span> </span>via a linked server call using <span class="blsp-spelling-error">SQL</span> Server 2005. So the statement I was running looked like this:</span><br />
<span style="font-family: arial"><span style="color: #3366ff"><br />
<span style="color: #3333ff">INSERT INTO</span> </span><span style="color: #000000">connection</span></span><br />
<span style="font-family: arial"><span style="color: #3333ff">SELECT DISTINCT</span> [name],</span><br />
<span style="font-family: arial"><span class="blsp-spelling-error">hostname</span>,</span><br />
<span style="font-family: arial">program_name,</span><br />
<span style="font-family: arial"><span class="blsp-spelling-error">loginame</span>,</span><br />
<span style="font-family: arial"><span class="blsp-spelling-error">nt</span>_<span class="blsp-spelling-error">username</span>,</span><br />
<span style="font-family: arial">net_address,</span><br />
<span style="font-family: arial">last_batch, </span><br />
<span style="font-family: arial"><span style="color: #cc33cc"><span class="blsp-spelling-error">getdate</span></span>()</span><br />
<span style="font-family: arial"><span style="color: #3333ff">FROM <span class="blsp-spelling-error">OPENQUERY</span></span>(&#8221;<span class="blsp-spelling-error">SQL</span>1\V01&#8243;, <span style="color: #ff0000">&#8216;SELECT d.[name], p.<span class="blsp-spelling-error">hostname</span>, p.program_name, p.<span class="blsp-spelling-error">loginame</span>, p.<span class="blsp-spelling-error">nt</span>_<span class="blsp-spelling-error">username</span>,&nbsp;<a href="http://p.net" title="http://p. " target="_blank">p.net</a>_address, p.last_batch, <span class="blsp-spelling-error">getdate</span>() FROM master.dbo.sysprocesses as p inner join master.dbo.sysdatabases as d on p.<span class="blsp-spelling-error">dbid</span> = d.<span class="blsp-spelling-error">dbid</span>&#8216;</span>)</span><br />
<span style="font-family: arial"><br />
When I execute the insert\select statement it works in a query window. However, when I run this statement in a job step the step fails. The error message states that there is an incorrect <span class="blsp-spelling-corrected">syntax near</span> <span class="blsp-spelling-error">SQL</span>1\V01. So after much frustration I switched from double quote identifiers to brackets. You know what&#8230; it worked! I was not able to find much information in <span class="blsp-spelling-error">BOL</span> and the Internet about this &#8220;nuance&#8221;. So I now use brackets when referencing instance names via linked server calls.  Has anyone run into this issue before? Let us know!</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lockergnome.com/sqlsquirrel/2009/02/28/using-double-quoted-identifiers-in-linked-servers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bug with db_name?</title>
		<link>http://www.lockergnome.com/sqlsquirrel/2009/01/08/bug-with-db_name/</link>
		<comments>http://www.lockergnome.com/sqlsquirrel/2009/01/08/bug-with-db_name/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 00:01:59 +0000</pubDate>
		<dc:creator>sqlsquirrel</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[db_name]]></category>

		<category><![CDATA[linked server]]></category>

		<category><![CDATA[SQL Server 2005]]></category>

		<category><![CDATA[sysdatabases]]></category>

		<category><![CDATA[sysprocesses]]></category>

		<category><![CDATA[TSQL]]></category>

		<guid isPermaLink="false">http://www.lockergnome.com/sqlsquirrel/?p=68</guid>
		<description><![CDATA[The other day I was pulling data from the sysprocesses table on a remote SQL Server 2000 server. I was on a database server that has SQL Server 2005 Service Pack 2 on it and I have the destination (remote) SQL Server 2000 setup as a linked server on the SQL Server 2005 server. With [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I was pulling data from the sysprocesses table on a remote SQL Server 2000 server. I was on a database server that has SQL Server 2005 Service Pack 2 on it and I have the destination (remote) SQL Server 2000 setup as a linked server on the SQL Server 2005 server. With a query window open on the SQL Server 2005 server I ran the following statment:</p>
<p><span style="color: #3366ff">select</span> <span style="color: #cc66cc">db_name</span>(<span style="color: #000000">dbid</span>) <span style="color: #3366ff">as</span> [database name],<br />
hostname,<br />
program_name,<br />
nt_username,<br />
loginame,<br />
net_address,<br />
last_batch<br />
<span style="color: #3366ff">from</span> SQL1.master.dbo.<span style="color: #009900">sysprocesses</span></p>
<p>The problem here is&#8230; the function <span style="color: #cc33cc">db_name</span>() was pulling the &#8220;local&#8221; database name for the remote dbid on the SQL Server 2000 server. I was unable to find documentation on this &#8220;issue&#8221; on BOL and the Internet. I found a workaround for this. Here is the work around:</p>
<p><span style="color: #3366ff">select</span> d.[name] <span style="color: #3366ff">as</span> [database name],<br />
p.hostname,<br />
p.program_name,<br />
p.nt_username,<br />
p.loginame,<br />
&nbsp;<a href="http://p.net" title="http://p.<br />
" target="_blank">p.net</a>_address,<br />
p.last_batch<br />
<span style="color: #3366ff">from</span> SQL1.master.dbo.<span style="color: #009900">sysprocesses</span> as p<br />
<span style="color: #999999">inner join</span> SQL1.master.dbo.<span style="color: #009900">sysdatabases</span> as d<br />
<span style="color: #3366ff">on</span> p.dbid = d.dbid</p>
<p>This solution pulls the database name for the remote server and not the local database name on the SQL Server 2005 server. If you have experienced this issue or if this a known &#8220;bug&#8221; or not a &#8220;bug&#8221; please post and let us know!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lockergnome.com/sqlsquirrel/2009/01/08/bug-with-db_name/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Better Ways To Monitor SQL Server 2005!</title>
		<link>http://www.lockergnome.com/sqlsquirrel/2008/06/10/better-ways-to-monitor-sql-server-2005/</link>
		<comments>http://www.lockergnome.com/sqlsquirrel/2008/06/10/better-ways-to-monitor-sql-server-2005/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 05:43:32 +0000</pubDate>
		<dc:creator>sqlsquirrel</dc:creator>
		
		<category><![CDATA[Administration]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[dmv]]></category>

		<category><![CDATA[dmvs]]></category>

		<category><![CDATA[dm_exec_query_stats]]></category>

		<category><![CDATA[dynamic management view]]></category>

		<category><![CDATA[SQL Server 2005]]></category>

		<category><![CDATA[sys]]></category>

		<guid isPermaLink="false">http://www.lockergnome.com/sqlsquirrel/2008/06/10/better-ways-to-monitor-sql-server-2005/</guid>
		<description><![CDATA[The other day I found myself looking at new\different ways to monitor the health of my production SQL Server 2005 servers.  I thought that there must be a better way to monitor in SQL Server 2005 than in SQL Server 2000.  So as I was looking through books online and perusing the internet [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I found myself looking at new\different ways to monitor the health of my production SQL Server 2005 servers.  I thought that there must be a better way to monitor in SQL Server 2005 than in SQL Server 2000.  So as I was looking through books online and perusing the internet I came across Dynamic Management Views (DMVs).</p>
<p>DMVs return server metric information that can be used to monitor the health of an instance, diagnose problems, and performance tune.  One of the things I was looking for was a way to identify slow performing queries outside of using SQL Profiler.  I came across the following script on <a href="http://www.sql-server-performance.com/articles/per/tsql_statement_performance_p1.aspx">SQL Server Performance</a> website.  This script returns a result set that contains queries that are performing slowly.</p>
<p><font color="#0000ff">SELECT</font> creation_time,<br />
last_execution_time<br />
,total_physical_reads<br />
,total_logical_reads<br />
,total_logical_writes<br />
, execution_count<br />
, total_worker_time<br />
, total_elapsed_time<br />
, total_elapsed_time / execution_count avg_elapsed_time<br />
,<font color="#ff00ff">SUBSTRING</font>(st.text, (qs.statement_start_offset/2) + 1,<br />
((<font color="#0000ff">CASE </font>statement_end_offset<br />
<font color="#0000ff">WHEN </font>-1 <font color="#0000ff">THEN </font><font color="#ff00ff">DATALENGTH</font>(st.text)<br />
<font color="#0000ff">ELSE </font>qs.statement_end_offset <font color="#0000ff">END</font><br />
- qs.statement_start_offset)/2) + 1) <font color="#0000ff">AS </font>statement_text<br />
<font color="#0000ff">FROM </font><font color="#008000">sys.dm_exec_query_stats</font> AS qs<br />
<font color="#999999">CROSS APPLY</font> sys.dm_exec_sql_text(qs.sql_handle) st<br />
<font color="#0000ff">ORDER BY </font>total_elapsed_time / execution_count <font color="#0000ff">DESC</font>;</p>
<p>The <font color="#008000">sys.dm_exec_query_stats</font> view returns aggregate performance statistics for cached query plans.  To find out more about this view click <a href="http://technet.microsoft.com/en-us/library/ms189741.aspx"> here</a>.  In my upcoming posts I will be covering the different DMVs in SQL Server 2005 in great detail.  If you have other scripts that utilize this view please post them here!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lockergnome.com/sqlsquirrel/2008/06/10/better-ways-to-monitor-sql-server-2005/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How To Calculate If Hour Is Even Or Odd In T-SQL..</title>
		<link>http://www.lockergnome.com/sqlsquirrel/2008/05/29/how-to-calculate-if-hour-is-even-or-odd-in-t-sql/</link>
		<comments>http://www.lockergnome.com/sqlsquirrel/2008/05/29/how-to-calculate-if-hour-is-even-or-odd-in-t-sql/#comments</comments>
		<pubDate>Fri, 30 May 2008 01:02:08 +0000</pubDate>
		<dc:creator>sqlsquirrel</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[datepart]]></category>

		<category><![CDATA[getdate]]></category>

		<category><![CDATA[modulo]]></category>

		<category><![CDATA[SQL Server 2005]]></category>

		<category><![CDATA[T-SQL]]></category>

		<category><![CDATA[TSQL]]></category>

		<guid isPermaLink="false">http://www.lockergnome.com/sqlsquirrel/2008/05/29/how-to-calculate-if-hour-is-even-or-odd-in-t-sql/</guid>
		<description><![CDATA[Hello there&#8230;
Today is going to be a short posting on how to calculate whether or not the hour in either the function getdate() or a datetime field in a table is either even or odd. I am using this to determine which tables (evenhour or oddhour) are recording page impressions. Here is the T-SQL script:  select datepart(hour,getdate())%2 [...]]]></description>
			<content:encoded><![CDATA[<p>Hello there&#8230;</p>
<p>Today is going to be a short posting on how to calculate whether or not the hour in either the function <font color="#ff00ff">getdate</font>() or a <font color="#0000ff">datetime</font> field in a table is either even or odd. I am using this to determine which tables (evenhour or oddhour) are recording page impressions. Here is the T-SQL script:  <font color="#0000ff">select</font> <font color="#ff00ff">datepart</font>(<font color="#0000ff">hour</font>,<font color="#ff00ff">g</font><font color="#ff00ff">etdate</font>())%2 <font color="#0000ff">as</font> evenodd</p>
<p>The % is know in SQL Server as <em>&#8220;modulo&#8221;</em> and what this does is it provides the remainder of one number divided by another.  When using % with the <font color="#ff00ff">datapart</font> and <font color="#ff00ff">getdate</font> functions it returns either <em>zero</em> if the hour of <font color="#ff00ff">datepart</font> is even or will return <em>one</em> if the hour of <font color="#ff00ff">datepart</font> is odd.</p>
<p>This logic comes in very handy when you need to know which hour table (even or odd) you need to process hits, impressions, clicks, etc.  Tomorrow I will show you how to implement this in a SSIS package to calculate the even or odd hour and to move the data to their respected tables based upon the result of %.  So keep checking back tomorrow for this solution!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lockergnome.com/sqlsquirrel/2008/05/29/how-to-calculate-if-hour-is-even-or-odd-in-t-sql/feed/</wfw:commentRss>
		</item>
	  <item> 
  <title>How to Handle Remote Tech Support</title>
  <description>
  &lt;em&gt;Using &lt;a href=&quot;http://www.gotoassist.com/chris&quot;&gt;GoToAssist&lt;/a&gt; is the easiest way to view and control another person's computer online. Use it to provide instant technical support to family, friends and customers. Start a session with just one click, and instantly connect with the other party. &lt;/em&gt;
  </description>
  <author>chris@lockergnome.com (Chris Pirillo)</author>
  <category>Partner</category>
  <pubDate>Mon, 13 Jul 2009 06:30:00 GMT</pubDate>
  <link>http://gotoassist.com/chris/</link>
  <guid>http://gotoassist.com/chris/</guid>
  </item>

  <item>
  <title>Network Tools for Windows</title>
  <description>You need these network tools, no matter which operating systems and networks you have to support. &lt;a href=&quot;http://support.solarwinds.com/updates/New-Customer.cfm?ProdID=568&amp;campaign=ipmon_DL_lockergnome&amp;CMP=BAC-ipmonDL_lockergnome&quot;&gt;SolarWinds ipMonitor&lt;/a&gt;: Affordable Network Monitoring for SMBs. Get turnkey network, server and application availability monitoring with SolarWinds ipMonitor v9.0. This easy-to-use, reliable solution for SMBs delivers out-of-the-box availability monitoring so you always know exactly what's up with Active Directory, DNS, Exchange, FTP, Web, IMAP, MS SQL Server, and SMTP. &lt;a href=&quot;http://support.solarwinds.com/updates/New-Customer.cfm?ProdID=568&amp;campaign=ipmon_DL_lockergnome&amp;CMP=BAC-ipmonDL_lockergnome&quot;&gt;Download your free trial today&lt;/a&gt;. Or, try their &lt;a href=&quot;http://www.solarwinds.com/products/freetools/&quot;&gt;totally free tools&lt;/a&gt;! And, through 2/29, save 20% when you purchase &lt;a href=&quot;http://store.solarwinds.com/s.nl/sc.16/.f&quot;&gt;ipMonitor 9.0&lt;/a&gt;.
  </description>
  <author>chris@lockergnome.com (Chris Pirillo)</author>
  <category>Partner</category>
  <pubDate>Mon, 25 Feb 2008 06:30:00 GMT</pubDate>
  <link>http://support.solarwinds.com/updates/New-Customer.cfm?ProdID=568&amp;campaign=ipmon_DL_lockergnome&amp;CMP=BAC-ipmonDL_lockergnome</link>
  <guid>http://support.solarwinds.com/updates/New-Customer.cfm?ProdID=568&amp;campaign=ipmon_DL_lockergnome&amp;CMP=BAC-ipmonDL_lockergnome</guid>
  </item>
  
  <item>
  <title>Get Your Own Web Site</title>
  <description>Starting at just $3.99/month, web hosting from &lt;a href=&quot;http://www.godaddy.com/gdshop/default.asp?isc=cp2&quot;&gt;GoDaddy&lt;/a&gt; includes 99.9% uptime, 24/7 support and free access to GoDaddy Hosting Connection, THE place to install over 30 FREE applications sure to help you get the most from your hosting plan and Web site. Enter &lt;a href=&quot;http://www.godaddy.com/gdshop/default.asp?isc=cp2&quot;&gt;code CP2&lt;/a&gt; at checkout, and save an additional 10% on any order.
  &lt;p&gt;Plus, as a friend of Chris Pirillo, enter code &lt;a href=&quot;http://www.godaddy.com/gdshop/default.asp?isc=chris7&quot;&gt;CHRIS7&lt;/a&gt;, that's C-H-R-I-S and the number 7, when you check out, and save an additional 10% on any order. Get your piece of the internet at &lt;a href=&quot;http://www.godaddy.com/gdshop/default.asp?isc=chris7&quot;&gt;GoDaddy.com&lt;/a&gt;.&lt;/p&gt;
  </description>
  <author>chris@lockergnome.com (Chris Pirillo)</author>
  <category>Partner</category>
  <pubDate>Mon, 25 Feb 2008 06:30:00 GMT</pubDate>
  <link>http://www.godaddy.com/gdshop/default.asp?isc=cp1</link>
  <guid>http://www.godaddy.com/gdshop/default.asp?isc=cp1</guid>
  </item>

  <item>
  <title>VMware and Parallels for Virtual Machines</title>
  <description>
  It doesn't matter if you're running on Windows or Mac OS X - every power user needs either &lt;a href=&quot;http://send.onenetworkdirect.net/z/13766/rn_a32755/&quot;&gt;Parallels&lt;/a&gt; or &lt;a href=&quot;http://send.onenetworkdirect.net/z/17081/rn_a32755/&quot;&gt;VMware&lt;/a&gt; (or both). There's never been an easier way to test software without destroying your primary operating system's stability. Think of how many times you wish you could press a 'reverse' button on your computer. Plus, there's no easier way to try new Linux distributions - see what all the fuss is about. Run Windows in OS X, run Linux in Windows, but the best way to do either is with &lt;a href=&quot;http://send.onenetworkdirect.net/z/17081/rn_a32755/&quot;&gt;VMware&lt;/a&gt; and/or &lt;a href=&quot;http://send.onenetworkdirect.net/z/13766/rn_a32755/&quot;&gt;Parallels&lt;/a&gt;.
  </description>
  <author>chris@lockergnome.com (Chris Pirillo)</author>
  <category>Partner</category>
  <pubDate>Mon, 25 Feb 2008 06:30:00 GMT</pubDate>
  <link>http://chris.pirillo.com/2008/02/19/parallels-or-vmware/</link>
  <guid>http://chris.pirillo.com/2008/02/19/parallels-or-vmware/</guid>
  </item>

  <item>
  <title>Coupons for Online Shopping</title>
  <description>&lt;p style=&quot;color: red&quot;&gt;This feed is fueled by Lockergnome &lt;a href=&quot;http://www.lockergnome.com/buy/&quot;&gt;Online Shopping and Coupon Codes&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;
 Before you shop next time, see if we have &lt;a href=&quot;http://coupons.lockergnome.com/&quot;&gt;a coupon&lt;/a&gt; first.
&lt;/p&gt;
  </description> 
  <author>chris@lockergnome.com (Chris Pirillo)</author> 
  <category>Partner</category> 
  <pubDate>Sat, 12 Jul 2008 07:56:13 GMT</pubDate>
  <link>http://coupons.lockergnome.com/</link> 
  <guid>http://coupons.lockergnome.com/</guid>
  </item>
</channel>
</rss>
