 




<?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>SQL Server with Mr. Denny &#187; SQL Server 2012</title>
	<atom:link href="http://itknowledgeexchange.techtarget.com/sql-server/tag/sql-server-denali/feed/" rel="self" type="application/rss+xml" />
	<link>http://itknowledgeexchange.techtarget.com/sql-server</link>
	<description></description>
	<lastBuildDate>Fri, 17 May 2013 17:04:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Using Event Viewer Logging for SSIS Performance Trouble Shooting</title>
		<link>http://itknowledgeexchange.techtarget.com/sql-server/using-event-viewer-logging-for-ssis-performance-trouble-shooting/</link>
		<comments>http://itknowledgeexchange.techtarget.com/sql-server/using-event-viewer-logging-for-ssis-performance-trouble-shooting/#comments</comments>
		<pubDate>Wed, 27 Mar 2013 14:00:51 +0000</pubDate>
		<dc:creator>Denny Cherry</dc:creator>
				<category><![CDATA[BIDS]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://itknowledgeexchange.techtarget.com/sql-server/?p=2131</guid>
		<description><![CDATA[So while working with a client recently I was going some performance tuning on SSIS for them.  While SSIS isn&#8217;t exactly my normal workload, the problem wasn&#8217;t really in SSIS, but just normal SQL Statements being called from SSIS. While attacking this problem, the first thing that I did was look into the SSIS package [...]]]></description>
				<content:encoded><![CDATA[<p>So while working with a client recently I was going some performance tuning on SSIS for them.  While SSIS isn&#8217;t exactly my normal workload, the problem wasn&#8217;t really in SSIS, but just normal SQL Statements being called from SSIS.</p>
<p>While attacking this problem, the first thing that I did was look into the SSIS package and see what I had gotten myself into.  There were hundreds of objects within SSIS, most of them T-SQL Scripts of Data Pump Tasks.  So simply going through them one by one wasn&#8217;t going to be all that helpful.  The client didn&#8217;t have any logging to SQL Server or to a text file setup, but they did have the SSIS package setup to log to the Windows event log.</p>
<p>Opening the Application log greated me with one event for the start of each task, and one for the completion of each task.  Not exactly the most useful information ever, but better than nothing, so I&#8217;ll take what I can get.  The first thing that I did was export the Application Event log to a CSV file and download it to my desktop so that I could do the processing on my local machine.  The CSV file has a few hundred thousand lines, so I needed to figure out what I had via scripting.  The first problem that I had was that for each SSIS event there were multiple lines within the csv when opened in Excel which you can see below.</p>
<p><img class="alignnone" src="http://mrdenny.com/wp-content/uploads/2012/07/excel.jpg" alt="" width="755" height="179" /></p>
<p>Thankfully this made the rows pretty unique looking, so an Excel Macro was able to clean this up pretty easily.  Before I got started I added some column headers into the excel sheet.  The default columns from Event Viewer are Date, Time, Source, Severity, Category, EventID, User, Computer, Description.  This covered columns A through I.  After that I put columns J through P as being Operator, SourceName, SourceID, Execution, StartTime, EndTime and DataCode as these are the specific items that SSIS is logging that you can see above.  Then it was time to bust out a little VBA and flatten out all this data.  The macro shown below looped through the data and flattened everything out so that all the data was on a single line.  Then is went through and removed all the white lines.  This macro took about 3 hours to run.</p>
<p><code>Sub CleanUpData()<br />
Dim Row As Long<br />
Dim DataRow As Long<br />
Row = 32768<br />
Do While Range("A" &amp; Row).Value = ""<br />
If Range("B" &amp; Row).Value = "" Then<br />
DataRow = Row<br />
Range("A" &amp; Row).Select<br />
Else<br />
If Left(Range("A" &amp; Row).Value, 4) = " Mes" Then<br />
Range("A" &amp; Row).Value = ""<br />
End If<br />
If Left(Range("A" &amp; Row).Value, 4) = " Ope" Then<br />
Range("J" &amp; DataRow).Value = Range("A" &amp; Row).Value<br />
Range("A" &amp; Row).Value = ""<br />
End If<br />
If Left(Range("A" &amp; Row).Value, 9) = " Source N" Then<br />
Range("K" &amp; DataRow).Value = Range("A" &amp; Row).Value<br />
Range("A" &amp; Row).Value = ""<br />
End If<br />
If Left(Range("A" &amp; Row).Value, 10) = " Source ID" Then<br />
Range("L" &amp; DataRow).Value = Range("A" &amp; Row).Value<br />
Range("A" &amp; Row).Value = ""<br />
End If<br />
If Left(Range("A" &amp; Row).Value, 4) = " Exe" Then<br />
Range("M" &amp; DataRow).Value = Range("A" &amp; Row).Value<br />
Range("A" &amp; Row).Value = ""<br />
End If<br />
If Left(Range("A" &amp; Row).Value, 4) = " Sta" Then<br />
Range("N" &amp; DataRow).Value = Range("A" &amp; Row).Value<br />
Range("A" &amp; Row).Value = ""<br />
End If<br />
If Left(Range("A" &amp; Row).Value, 4) = " End" Then<br />
Range("O" &amp; DataRow).Value = Range("A" &amp; Row).Value<br />
Range("A" &amp; Row).Value = ""<br />
End If<br />
If Left(Range("A" &amp; Row).Value, 4) = " Dat" Then<br />
Range("P" &amp; DataRow).Value = Range("A" &amp; Row).Value<br />
Range("A" &amp; Row).Value = ""<br />
End If<br />
End If<br />
Row = Row + 1<br />
Loop</code></p>
<p>Do While Row 2<br />
If Range(&#8220;A&#8221; &amp; Row).Value = &#8220;&#8221; Then<br />
Range(Row &amp; &#8220;:&#8221; &amp; Row).Select<br />
Selection.Delete<br />
End If<br />
Row = Row &#8211; 1<br />
Loop<br />
End Sub</p>
<p>Once that was done I needed to set the start times for each event on the same line as the end time for each event. That way I wasn&#8217;t scrolling through looking for stuff while trying to do my data analysis. This I was also able to do with a little Macro. In this case I started on row 14 as that was the first entry that had SSIS data. You may need to change the EndRow=14 line to what ever line your data starts on. This puts the start time and the end time into Columns R and S, but only on the line which is the OnPostExecute line.</p>
<p><code>Sub FindRunTimes()<br />
Dim EndRow As Long<br />
Dim StartRow As Long<br />
Dim SourceName As String<br />
EndRow = 14<br />
Do While Range("A" &amp; EndRow).Value = ""<br />
If Range("I" &amp; EndRow).Value = " Event Name: OnPostExecute" Then<br />
StartRow = EndRow + 1<br />
Do Until Range("K" &amp; EndRow).Value = Range("K" &amp; StartRow).Value And Range("I" &amp; StartRow).Value = " Event Name: OnPreExecute"<br />
If Range("I" &amp; StartRow).Value = "" Then<br />
MsgBox "Ran out of rows to process for ending row " &amp; EndRow<br />
Exit Sub<br />
End If<br />
StartRow = StartRow + 1<br />
Loop<br />
Range("S" &amp; EndRow).Value = Range("B" &amp; EndRow).Value<br />
Range("R" &amp; EndRow).Value = Range("B" &amp; StartRow).Value<br />
'Range("T" &amp; EndRow).Value = DateDiff("mi", Range("A" &amp; StartRow).Value &amp; " " &amp; Range("B" &amp; StartRow).Value, Range("A" &amp; EndRow).Value &amp; " " &amp; Range("B" &amp; EndRow).Value)<br />
Range("R" &amp; EndRow).Select<br />
End If<br />
EndRow = EndRow + 1<br />
Loop<br />
End Sub</code></p>
<p>Once that Macro was finished I needed to figure out which of the statements was taking to long to run. Putting a formula into the column Q marked the rows that I needed to look into a little more. In this case I was using anything with a run time of 20 minutes or longer as needing to be looked at.</p>
<p><code>=IF(HOUR(R595)=HOUR(S595)*60+MINUTE(S595),"", "X"), IF(HOUR(R595)*60+MINUTE(R595)+19&gt;=HOUR(S595)*60+MINUTE(S595)+1440,"", "X"))</code></p>
<p>Once that formula was in there all the rows that were SSIS objects that took a long time to run had an X next to them. Now I still needed to ignore the rows which were containers, but those were pretty easy to figure out from the names of the objects as most of them had container in them (in the SourceName column which was column K of my Worksheet). At this point I was able to move back to the SSIS package and start digging through the package finding the objects which had long runtimes and getting those looked at.</p>
<p>The whole reason I went through this process instead of just adding logging to the SSIS package was for a few different reasons.</p>
<ul>
<li>I didn&#8217;t want to make ANY changes to production if I didn&#8217;t have to. This SSIS package loads a production data warehouse which the business uses to run their company, so making changes to it wasn&#8217;t something I wanted to try.</li>
<li>If I had simply put logging into place I would have had to have waited another day to being looking at the problems as the ETL process only runs once a day.</li>
<li>The SSIS package takes 8+ hours to run, so sitting around waiting for it to run wasn&#8217;t exactly the best use of my time, or the clients money.</li>
</ul>
<p>If you get stuck in this same sort of problem, hopefully this approach will help you out.<br />
Denny</p>
<!-- wpms-network-global-inserts -->]]></content:encoded>
			<wfw:commentRss>http://itknowledgeexchange.techtarget.com/sql-server/using-event-viewer-logging-for-ssis-performance-trouble-shooting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deleting LOB Data and Shrinking the Database</title>
		<link>http://itknowledgeexchange.techtarget.com/sql-server/deleting-lob-data-and-shrinking-the-database/</link>
		<comments>http://itknowledgeexchange.techtarget.com/sql-server/deleting-lob-data-and-shrinking-the-database/#comments</comments>
		<pubDate>Wed, 13 Mar 2013 14:00:52 +0000</pubDate>
		<dc:creator>Denny Cherry</dc:creator>
				<category><![CDATA[Andre Kamman]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Database Administration]]></category>
		<category><![CDATA[DBCC PAGE]]></category>
		<category><![CDATA[Mladen Prajdić]]></category>
		<category><![CDATA[Paul Randal]]></category>
		<category><![CDATA[SQL Saturday]]></category>
		<category><![CDATA[SQL Saturday 194]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[System Objects]]></category>
		<category><![CDATA[Tables]]></category>

		<guid isPermaLink="false">http://itknowledgeexchange.techtarget.com/sql-server/?p=2564</guid>
		<description><![CDATA[While attending SQL Saturday 194 in Exeter over in England one of the attendees came to Mladen Prajdić, Andre Kamman and myself with an interesting problem.  She had a database table which was about 200 Gigs in size which she wanted to delete about half of the data from the table.  The catch was that the [...]]]></description>
				<content:encoded><![CDATA[<p>While attending <a href="http://www.sqlsaturday.com/194/eventhome.aspx">SQL Saturday 194</a> in Exeter over in England one of the attendees came to Mladen Prajdić, Andre Kamman and myself with an interesting problem.  She had a database table which was about 200 Gigs in size which she wanted to delete about half of the data from the table.  The catch was that the database table was full of LOB data where the rows were very large, with an average LOB data size of over a meg.  She also needed to shrink the database after the database was deleted so that she could reclaim the space from the database.  Oh and all this had to be done on SQL Server 2005 Standard Edition. (Everything here applies to SQL Server up through SQL Server 2012 as well.)</p>
<p>Deleting the data from the database is the easy part, a simple delete loop will handle that nicely.  The problem is when you delete rows from a table which contains LOB data the LOB pages aren&#8217;t cleared when they are deallocated.  We can see this by running the following code.</p>
<p><code>CREATE DATABASE Lobtest<br />
GO<br />
use Lobtest<br />
GO<br />
CREATE TABLE t1 (c1 int IDENTITY(1,1) PRIMARY KEY, c2 ntext)<br />
GO<br />
INSERT INTO T1 (c2) VALUES (replicate('a', 20000))<br />
GO<br />
DBCC IND ('LobTest', 't1', 1)<br />
GO<br />
DBCC TRACEON(5201, -1)<br />
GO<br />
DELETE FROM t1<br />
GO<br />
DBCC IND ('LobTest', 't1', 1)<br />
GO<br />
DECLARE @dbid as int = db_id('Lobtest')<br />
DBCC PAGE (@dbid, 1, 231, 3)<br />
GO</code></p>
<p>You can see that page 231 is a LOB page which is allocated to the table t1. When you look at the actual page using DBCC PAGE after the row has been deleted we can see that there is data in the page, and that the page header shows that the page is still allocated to the table t1. This can be seen by looking in the header of the page for the header value labeled &#8220;Metadata: ObjectId = 245575913&#8243;.</p>
<p>When you go to shrink the database the SQL Server engine will get to the LOB pages and it will need to figure out if the LOB row is a part of a row which still exists or not. In order to do this SQL Server will need to scan through the pages which make up the table looking for any rows which reference the page it is trying to delete.</p>
<p>When doing shrinks after deleing large amounts of LOB data SQL Server will generate large amounts of IO while figuring this out and the shrink operation will take an extremely long time. (Paul Randle talks more about <a href="http://www.sqlskills.com/blogs/paul/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006/">it here</a>.)</p>
<p>So the question that this person at SQL Saturday had was, how can I reclaim the space from my database within a reasonable time.</p>
<p>The solution that we came up with was actually pretty simple.  Do the database deletion as normal.  Then backup and restore the database.  Then do the shrink, followed by rebuilding the clustered indexes in order to fix the fragmentation issue which the shrink will introduce.</p>
<p>This works for a pretty simple reason, because the PFS page shows that the LOB page isn&#8217;t allocated even though the page is full of data (you can verify this by looking at page 1 in file 1 in the sample database created by the script above).  When the database engine backups up the database the database engine looks at the PFS pages to figure out which pages to back up.  Because the PFS pages show that the pages are empty the database engine doesn&#8217;t bother to backup the pages, so when the pages are restored they are restored as blank pages.  This means that after the restore the shrink operation can run without an issue.</p>
<p>In the case of this application there was a maintenance window which could be taken advantage of which would allow the backup and the restore to happen.</p>
<p>Another option which we came up with which would require less downtime involved using database mirroring.  By configuring database mirroring (which is initialized via a backup and restore process giving us the same basic approach) and then failing over to the mirror we would end up in the same position.  We could then shrink the database without issue (probably pausing database mirroring so that we didn&#8217;t have to wait for the second server to process the shrink in real time) and then fail back the database to the original server.</p>
<p>As geeky as it was, Mladen, Andre and I had a great time figuring this out, and the attendee had a great time watching us go through all the possible options as we excluded them one by one.  And most importantly she got her problem solved.</p>
<p>So if you end up in this situation here&#8217;s a solution that will help you shrink the database so that you can reclaim the space that the LOB data pages are taking up without having to wait forever.</p>
<p>Denny</p>
<!-- wpms-network-global-inserts -->]]></content:encoded>
			<wfw:commentRss>http://itknowledgeexchange.techtarget.com/sql-server/deleting-lob-data-and-shrinking-the-database/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL Saturday 177 Slide Deck</title>
		<link>http://itknowledgeexchange.techtarget.com/sql-server/sql-saturday-177-slide-deck/</link>
		<comments>http://itknowledgeexchange.techtarget.com/sql-server/sql-saturday-177-slide-deck/#comments</comments>
		<pubDate>Mon, 25 Feb 2013 23:44:34 +0000</pubDate>
		<dc:creator>Denny Cherry</dc:creator>
				<category><![CDATA[SQL Saturday]]></category>
		<category><![CDATA[SQL Saturday 177]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[SQL Server 2012]]></category>

		<guid isPermaLink="false">http://itknowledgeexchange.techtarget.com/sql-server/?p=2553</guid>
		<description><![CDATA[This last weekend I had the privilege of speaking at SQL Saturday 177 in Mountain View, CA.  One of the great things about this SQL Saturday is that in some ways it is an extension of the MVP Summit as for the second year in a row (that I know of) this SQL Saturday has been [...]]]></description>
				<content:encoded><![CDATA[<p>This last weekend I had the privilege of speaking at SQL Saturday 177 in Mountain View, CA.  One of the great things about this SQL Saturday is that in some ways it is an extension of the MVP Summit as for the second year in a row (that I know of) this SQL Saturday has been scheduled the weekend after the MVP summit.  This means that they are able to attack a large number of MVPs from all over the country (and hopefully next year the world) as they all stop by on their way home.  This gives us MVPs a couple of extra days of hanging out and catching up and it gives the attendees the chance to see some speakers that they might not normally be able to get access to.</p>
<p>I gave one presentation this year, and it was a session of table partitioning.  The slide deck has been uploaded to the SQL Saturday site as has the sample code.  You can download it from the <a href="http://www.sqlsaturday.com/viewsession.aspx?sat=177&amp;sessionid=13266">session page for my session</a>.</p>
<p>I hope that everyone liked the session, and I hope to see everyone at a future SQL Saturday.</p>
<p>Denny</p>
<!-- wpms-network-global-inserts -->]]></content:encoded>
			<wfw:commentRss>http://itknowledgeexchange.techtarget.com/sql-server/sql-saturday-177-slide-deck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cross Database Chaining</title>
		<link>http://itknowledgeexchange.techtarget.com/sql-server/cross-database-chaining/</link>
		<comments>http://itknowledgeexchange.techtarget.com/sql-server/cross-database-chaining/#comments</comments>
		<pubDate>Wed, 26 Dec 2012 14:00:05 +0000</pubDate>
		<dc:creator>Denny Cherry</dc:creator>
				<category><![CDATA[Data Security]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Database security]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2000]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[SQL Server 2012]]></category>

		<guid isPermaLink="false">http://itknowledgeexchange.techtarget.com/sql-server/?p=1091</guid>
		<description><![CDATA[Cross database chaining in SQL Server is actually a fairly old feature, first introduced in SQL Server 2000 SP3.  However this feature isn&#8217;t often understood mostly because it isn&#8217;t often used. Database chaining is when permissions cascade from one object to another because they are used by the parent object.  The perfect example is a [...]]]></description>
				<content:encoded><![CDATA[<p>Cross database chaining in SQL Server is actually a fairly old feature, first introduced in SQL Server 2000 SP3.  However this feature isn&#8217;t often understood mostly because it isn&#8217;t often used.</p>
<p>Database chaining is when permissions cascade from one object to another because they are used by the parent object.  The perfect example is a stored procedure which accesses a table.  The user only needs rights to the parent object (the stored procedure) and the rights to access the table exist automatically because the stored procedure accesses the child object (the table).</p>
<p>Cross database chaining uses this exact same concept except that the parent object is in one database and the child object is in another database.  In order to use cross database chaining the feature needs to be enabled on both databases.  This is done by using the ALTER DATABASE statement as shown below on both databases.</p>
<blockquote><p>ALTER DATABASE A_Database SET DB_CHAINING ON</p></blockquote>
<p>Once this is done, the login which is mapped to the user within the database which has the parent object needs to be mapped to a login within the database which has the child object.  The user within the database which owns the child object doesn&#8217;t need any specific rights other than to be a member of the public role.  Once this is done the cross database permission chain will be made and the stored procedure (or other parent object such as a trigger or function) will begin working.</p>
<p>Denny</p>
<!-- wpms-network-global-inserts -->]]></content:encoded>
			<wfw:commentRss>http://itknowledgeexchange.techtarget.com/sql-server/cross-database-chaining/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Least Expensive SQL Server 2012 High Availability Solution</title>
		<link>http://itknowledgeexchange.techtarget.com/sql-server/the-least-expensive-sql-server-2012-high-availability-solution/</link>
		<comments>http://itknowledgeexchange.techtarget.com/sql-server/the-least-expensive-sql-server-2012-high-availability-solution/#comments</comments>
		<pubDate>Wed, 12 Dec 2012 14:00:48 +0000</pubDate>
		<dc:creator>Denny Cherry</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Database Administration]]></category>
		<category><![CDATA[Microsoft Cluster Service]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[MSCS]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[Storage]]></category>

		<guid isPermaLink="false">http://itknowledgeexchange.techtarget.com/sql-server/?p=2268</guid>
		<description><![CDATA[As we all know by now AlwaysOn Availability Groups are an enterprise edition feature and SQL Server Clustering is a standard edition feature.  Butt what happens when you have a small business that is running its apps on SQL Server Express.  Can&#8217;t SQL Express have any sort of high availability? Officially the answer is no, [...]]]></description>
				<content:encoded><![CDATA[<p>As we all know by now AlwaysOn Availability Groups are an enterprise edition feature and SQL Server Clustering is a standard edition feature.  Butt what happens when you have a small business that is running its apps on SQL Server Express.  Can&#8217;t SQL Express have any sort of high availability?</p>
<p>Officially the answer is no, however with a little bit of creative configuration you sure can.</p>
<p><strong>The Overall Environment</strong></p>
<p>To setup SQL Server Express in a Windows Cluster I&#8217;m building this on a two node Windows Server 2012 cluster using a file share hosted on my domain controller to host the actual databases.  To ensure that the domain controller is rebooted as little as possible the domain controller is installed in core mode.  The cluster nodes are Windows Server 2012 standard edition (which now supports clustering) as is the domain controller.</p>
<p><strong>Installation</strong></p>
<p>As SQL Server 2012 express edition doesn&#8217;t support Windows Clustering out of the box the installation will be a little different from doing a normal clustered install under standard or enterprise edition.  To install I did a normal SQL Express install on node1.  The only change from a normal install that I made was that I configured the SQL Server instance to start under a domain account.  When I got to the data directories part I configured the data folder to a network share on the domain controller.</p>
<p>Once the installation on node1 was completed I stopped the SQL Server services.  Then I renamed the folder that I installed the SQL Server database files into.  The reason for this is that I need to configure the second instance to put the database files into the same location.  I can then install SQL Server 2012 express edition onto the second node.</p>
<p>The installation on node2 is done exactly like it was done on node1.</p>
<p>Once the installation is done on both nodes configure the SQL Server service to have a startup type as &#8220;Manual&#8221; instead of disabled or automatic.  Leave the SQL Agent service as disabled as even though SQL Express installs the SQL Agent the SQL Agent isn&#8217;t supported on SQL Express.</p>
<p><strong>Configuring Clustering</strong></p>
<p>Once the installation on Node2 is done the cluster can be configured.  To do this bring up the Failover Cluster Administrator on one of the nodes and connect to the cluster.  If the cluster hasn&#8217;t been configured yet run through the normal Clustering Configuration wizard.</p>
<p>We&#8217;ll now configure a new cluster role on the cluster.  To do this right click on &#8220;Role&#8221; then select &#8220;Configure Role&#8221; from the context menu as shown below.</p>
<p><a href="http://itknowledgeexchange.techtarget.com/sql-server/?attachment_id=2270" rel="attachment wp-att-2270"><img class="alignnone size-full wp-image-2270" src="http://cdn.ttgtmedia.com/ITKE/uploads/blogs.dir/20/files/2012/08/NewRole.jpg" alt="" width="287" height="326" /></a></p>
<p>When the wizard opens click next to get to the list of services.  Then select the Generic Service item from the list as shown below.</p>
<p><a href="http://itknowledgeexchange.techtarget.com/sql-server/?attachment_id=2271" rel="attachment wp-att-2271"><img class="alignnone size-full wp-image-2271" src="http://cdn.ttgtmedia.com/ITKE/uploads/blogs.dir/20/files/2012/08/SelectRole.jpg" alt="" width="683" height="470" /></a></p>
<p>On the next screen you&#8217;ll be asked what service you wish to cluster.  From this list select the SQL Server service as shown below.</p>
<p><a href="http://itknowledgeexchange.techtarget.com/sql-server/?attachment_id=2272" rel="attachment wp-att-2272"><img class="alignnone size-full wp-image-2272" src="http://cdn.ttgtmedia.com/ITKE/uploads/blogs.dir/20/files/2012/08/SelectService.jpg" alt="" width="683" height="470" /></a></p>
<p>On the next screen you&#8217;ll be asked to name the resource group.  Give the group a name which is unique on the domain and click next.  The next screen will ask you to select the needed storage.  Simply click next on this screen as we aren&#8217;t using any local shared storage.  The next screen asks you if any registry settings need to be replicated between the machines.  We don&#8217;t need to replicate anything as SQL Server doesn&#8217;t make much use of the registry for the actual SQL Server service so we can simply click next on this screen as well.  The next screen is simply a screen to review the changes which will be made.  You can simply click next on this screen after reviewing the information on the screen.  When the summary screen displays click finish.</p>
<p>Post Clustering SQL Config Changes</p>
<p>The first change that you&#8217;ll need to make is to enable the TCP network protocol on both nodes.  By default SQL Express has the TCP network protocol disabled which need to be corrected before uses will be able to connect to the SQL Server service.</p>
<p>The next change that you&#8217;ll need to make is to change the local server name in the master database from the name of the last node which was installed to the cluster name using a script similar to the one shown below.  In the case of this script the nodes are named node1 and node2 and the cluster name is clustersql.  Once this script has been run the SQL Server instance should be restarted or failed over to the other node.</p>
<blockquote><p>exec sp_dropserver &#8216;nodeb&#8217;<br />
GO<br />
exec sp_addserver &#8216;clustersql&#8217;, local<br />
GO</p></blockquote>
<p>&nbsp;</p>
<p>At this point the cluster is up and running and applications can have their databases configured on the SQL Server Instance.</p>
<p>Denny</p>
<!-- wpms-network-global-inserts -->]]></content:encoded>
			<wfw:commentRss>http://itknowledgeexchange.techtarget.com/sql-server/the-least-expensive-sql-server-2012-high-availability-solution/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Backup Databases on Creation</title>
		<link>http://itknowledgeexchange.techtarget.com/sql-server/backup-databases-on-creation/</link>
		<comments>http://itknowledgeexchange.techtarget.com/sql-server/backup-databases-on-creation/#comments</comments>
		<pubDate>Sat, 17 Nov 2012 14:00:56 +0000</pubDate>
		<dc:creator>Denny Cherry</dc:creator>
				<category><![CDATA[Backup & recovery]]></category>
		<category><![CDATA[BACKUP DATABASE]]></category>
		<category><![CDATA[CREATE TRIGGER]]></category>
		<category><![CDATA[Data Loss]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Database Administration]]></category>
		<category><![CDATA[DDL Trigger]]></category>
		<category><![CDATA[Recovery]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[T/SQL]]></category>
		<category><![CDATA[Transactions]]></category>
		<category><![CDATA[Trigger]]></category>
		<category><![CDATA[xp_create_subdir]]></category>

		<guid isPermaLink="false">http://itknowledgeexchange.techtarget.com/sql-server/?p=2194</guid>
		<description><![CDATA[One of the companies which I work with has the occasion to create new databases when they do releases of their software.  Normally this isn&#8217;t a problem, except that they are setup to use maintenance plans to handle the backup and pruning of their transaction logs.  As all the new databases are created in the [...]]]></description>
				<content:encoded><![CDATA[<p>One of the companies which I work with has the occasion to create new databases when they do releases of their software.  Normally this isn&#8217;t a problem, except that they are setup to use maintenance plans to handle the backup and pruning of their transaction logs.  As all the new databases are created in the full recovery model this can end up causing some problems for them as within 12 minutes they start getting emails saying that the transaction log backup job has failed.  And these emails will keep coming in, possibly for hours until the full backup job kicks in later that night.</p>
<p>To solve this problem, I added a DDL trigger to the server which will cause the new database to be backed up as soon as the database is created.  The trigger itself is rather simple.  Most of the trigger is setting variables.  Then I make sure that the database isn&#8217;t a database snapshot, as database snapshots can&#8217;t be backed up.  If it isn&#8217;t a snapshot we continue with everything else.</p>
<p>Then I create a subfolder for the backups to be put into (the backups for each database go into their own folder, so as this is a new database the folder needs to be created).  Then I commit the transaction, as database backups can&#8217;t be taken within a transaction.  Then we do the actual database backup.  I then throw a message to the end user using the RAISERROR statement telling them that they can ignore the other error that they are going to get about the transaction being closed before the trigger was complete.  This is just an annoyance of my needing to commit the transaction before taking the backup.  Sure I could have setup a job which takes the backup and emails if there was a failure, but that just seems to complex for something so simple.  The code for my trigger is below.</p>
<blockquote><p>CREATE TRIGGER BackupNewDatabase<br />
ON ALL SERVER<br />
FOR CREATE_DATABASE<br />
AS<br />
declare @database sysname, @event_data XML = EVENTDATA(), @folder nvarchar(4000), @file nvarchar(4000)</p>
<p>SET @database = @event_data.value(&#8216;(/EVENT_INSTANCE/DatabaseName)[1]&#8216;, &#8216;sysname&#8217;)</p>
<p>set @folder = &#8216;X:\Backups\&#8217; + @database</p>
<p>set @file = @folder + &#8216;\&#8217; + @database + &#8216;.bak&#8217;</p>
<p>if exists (select * from sys.databases where name = @database and source_database_id is null)<br />
BEGIN<br />
EXEC master.dbo.xp_create_subdir @folder</p>
<p>COMMIT</p>
<p>BACKUP DATABASE @database to disk=@file</p>
<p>raiserror( &#8216;You can ignore the error message which says that the transaction ended within the trigger.&#8217;, 16,1)<br />
END<br />
GO</p></blockquote>
<p>Hopefully you find this solution helpful if you get into a situation like this,<br />
Denny</p>
<!-- wpms-network-global-inserts -->]]></content:encoded>
			<wfw:commentRss>http://itknowledgeexchange.techtarget.com/sql-server/backup-databases-on-creation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL PASS Day 1 Keynote</title>
		<link>http://itknowledgeexchange.techtarget.com/sql-server/sql-pass-day-1-keynote/</link>
		<comments>http://itknowledgeexchange.techtarget.com/sql-server/sql-pass-day-1-keynote/#comments</comments>
		<pubDate>Wed, 07 Nov 2012 17:52:53 +0000</pubDate>
		<dc:creator>Denny Cherry</dc:creator>
				<category><![CDATA[AlwaysOn]]></category>
		<category><![CDATA[Availability Groups]]></category>
		<category><![CDATA[SQL PASS]]></category>
		<category><![CDATA[SQL PASS 2012]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2012]]></category>

		<guid isPermaLink="false">http://itknowledgeexchange.techtarget.com/sql-server/?p=2438</guid>
		<description><![CDATA[Today was the 1st day of the SQL PASS Summit and the keynote was full of some great announcements and demos.&#160; The keynotes are a massive with almost all of the 3894 conference attendees from 57 different countries. All of the keynotes from this years conference not only are the keynotes being streamed live, but [...]]]></description>
				<content:encoded><![CDATA[<p>Today was the 1st day of the SQL PASS Summit and the keynote was full of some great announcements and demos.&#160; The keynotes are a massive with almost all of the 3894 conference attendees from 57 different countries.</p>
<p>All of the keynotes from this years conference not only are the keynotes being streamed live, but many of the sessions are also being streamed live via the <a href="http://www.sqlpass.org">SQL PASS</a> website on PASS TV.&#160; The full schedule can found on the <a href="http://www.sqlpass.org/summit/2012/Sessions/MoreLearning/PASSTV.aspx">PASS TV</a> page.</p>
<p>Bill Grazino told us turning his keynote that pass has sponsored 9 non-PASS events around the world.&#160; Including these 9 events, pass has provided well over 500,000 hours of training to members of the community, much of it like SQL Saturday’s, User Groups, etc. being available to the attendees free of charge.&#160; PASS has created a business analytics specific conference which will be held April 10-12 2013 in Chicago, IL.&#160; More information will be available on the <a href="http://www.sqlpass.org/">SQL PASS website</a> shortly.</p>
<p>When Ted Kummert took the stage he talked about some of the great products that Microsoft has released this year including SQL Server 2012, the Surface, Windows Server 2012, Office 2013 as well as many others.&#160; </p>
<p>Ted announced that SQL Server 2012 has been released as of today.&#160; This release aligns with Office 2013 and the new SharePoint 2012.&#160; Ted also announced project Hekaton which is a new in memory database engine which will be introduced within the next major release of SQL Server.&#160; Project Hekaton is a fully in-memory database engine which will greatly improve OLTP performance.&#160; While this new engine is a part of the SQL Server database engine, this portion has been totally rewritten to really maximize the hardware under the SQL Server database engine.</p>
<p>Including Product Hekaton is the Hekaton AMR Tool which (when renamed) will help identify bottlenecks which can be resolved by converting the database to a Hekaton database engine.&#160; Because the Hekaton engine is running with the entire database being in memory latching has effectively been removed.&#160; Hekaton also supports recompiling stored procedures from running T-SQL to running as native machine code.&#160; This allows the stored procedures to run much, much faster without any actual code change.&#160; While not all workloads are going to be right for the Hekaton database engine, but those that are should see a massive performance improvement.&#160; Because project Hekaton runs within the same database engine that we have today if you know SQL Server you will already know how to work with a project Hekaton database.</p>
<p>Another great announcement is the clustered column store which will be introduced in the next major release of SQL Server.&#160; Along with the clustered column store index we will also be able to update tables which have column store indexes created on them, no matter if the column store index is a clustered column store index or a non-clustered column store index.&#160; This will introduce massive performance improvements to real time data warehouses and make data warehouses much easier to setup and performance tune; even with the largest workload.</p>
<p>For the non-relational side of things you can today download the Microsoft HDInsight Server CTP which is Microsoft’s Hadoop offering.</p>
<p>Ted also announced a new update to the Microsoft PDW which will be available in the 1st half of 2013 and will be called the SQL Server 2012 Parallel Data Warehouse.&#160; This update will include some of the features which will be included in the next major release of SQL Server such as the updatable column store index.&#160; Another big enhancement of the new SQL Server 2012 PDW is that SQL Server Management Studio will now be the query tool which is used to run the queries against the PDW system.&#160; During the demo against the PDW doing a simple count against a 1PB table the query ran in just a few seconds.&#160; Doing data aggregations against the same table for a real world style reporting query the query again ran in just a few seconds.</p>
<p>The next announcement was Polybase.&#160; Polybase allows you to query data from an external source from within the SQL Server 2012 PDW.&#160; This will allow you to create an external table which simply links to a Hadoop cluster.&#160; This will be done with the CREATE EXTERNAL TABLE&#160; statement which accepts the schema that you want and a hdfs URL to Hadoop without needing to create a linked server to the Hadoop cluster. </p>
<p>The next step of BI is here in SQL Server 2012 SP1 and Office 2013.&#160; Office 2013 includes PowerView natively within the product.&#160; It also supports some new mapping features natively within Office 2013 without any additional downloads or plugins.&#160; This support includes term extraction which is done through HDInsight.&#160; This allows us to view text data and extract names, sentiment, locations, etc. from simple text data and use those extracted strings in order to build PowerView reports.&#160; PowerView also now supports DAX queries to a MOLAP cube straight out of the box.</p>
<p>Stay tuned for more updates from the <a href="http://www.sqlpass.org/summit/2012/">PASS Summit</a> through out the week.</p>
<p>Denny</p>
<!-- wpms-network-global-inserts -->]]></content:encoded>
			<wfw:commentRss>http://itknowledgeexchange.techtarget.com/sql-server/sql-pass-day-1-keynote/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Passive AlwaysOn Replicas, not as free as you might think</title>
		<link>http://itknowledgeexchange.techtarget.com/sql-server/passive-alwayson-replicas-not-as-free-as-you-might-think/</link>
		<comments>http://itknowledgeexchange.techtarget.com/sql-server/passive-alwayson-replicas-not-as-free-as-you-might-think/#comments</comments>
		<pubDate>Wed, 07 Nov 2012 14:00:10 +0000</pubDate>
		<dc:creator>Denny Cherry</dc:creator>
				<category><![CDATA[AlwaysOn]]></category>
		<category><![CDATA[Availability Groups]]></category>
		<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Microsoft Cluster Service]]></category>
		<category><![CDATA[MSCS]]></category>
		<category><![CDATA[SQL Licensing]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2012]]></category>

		<guid isPermaLink="false">http://itknowledgeexchange.techtarget.com/sql-server/?p=2073</guid>
		<description><![CDATA[With the release of SQL Server 2012 and specifically the AlwaysOn feature we need to rethink the way that we handle the licensing for servers that will be passive servers.  In the past it&#8217;s been assumed that passive servers didn&#8217;t need to be licensed, and that was true, for the most part.  The official docs [...]]]></description>
				<content:encoded><![CDATA[<p>With the release of SQL Server 2012 and specifically the AlwaysOn feature we need to rethink the way that we handle the licensing for servers that will be passive servers.  In the past it&#8217;s been assumed that passive servers didn&#8217;t need to be licensed, and that was true, for the most part.  The official docs read that you get one passive server per active server that you have licensed, provided that you have a current Enterprise Agreement.  Without the Enterprise Agreement in place any and all passive servers need to be licensed.</p>
<p>With SQL Server 2012&#8242;s AlwaysOn feature we have an active server called the Primary Replica and we have up to 4 secondary replicas.  Even if none of those 4 secondary replicas are in use for anything, you will still need to license two of them to be properly licensed.  This is because when licensing SQL Server&#8217;s each licensed server gets you only a single free passive server.  So for a 5 instance AlwaysOn Availability Group deployment you&#8217;ll need to license at least 3 of those instances which would give you two passive instances.  As long as those two passive instances aren&#8217;t being used for read access they are free.</p>
<p>Thanks,</p>
<p>Denny</p>
<!-- wpms-network-global-inserts -->]]></content:encoded>
			<wfw:commentRss>http://itknowledgeexchange.techtarget.com/sql-server/passive-alwayson-replicas-not-as-free-as-you-might-think/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>There is still time to sign up for SQL PASS PreCons</title>
		<link>http://itknowledgeexchange.techtarget.com/sql-server/there-is-still-time-to-sign-up-for-sql-pass-precons/</link>
		<comments>http://itknowledgeexchange.techtarget.com/sql-server/there-is-still-time-to-sign-up-for-sql-pass-precons/#comments</comments>
		<pubDate>Tue, 16 Oct 2012 17:56:44 +0000</pubDate>
		<dc:creator>Denny Cherry</dc:creator>
				<category><![CDATA[AlwaysOn]]></category>
		<category><![CDATA[SQL PASS]]></category>
		<category><![CDATA[SQL PASS 2012]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2012]]></category>

		<guid isPermaLink="false">http://itknowledgeexchange.techtarget.com/sql-server/?p=2383</guid>
		<description><![CDATA[This year the PASS Summit has 14 fantastic PreCons which are available for attendees to sign up for at an additional cost of just $395 per precon.  These precons are full day sessions with some fantastic presenters including myself, Louis Davisson, Rod Colledge, Jessica Moss, Brian Knight, Allen White, Itzik Ben-Gan, Bob Ward, Allan Hirt [...]]]></description>
				<content:encoded><![CDATA[<p>This year the <a href="http://www.sqlpass.org/summit/2012/">PASS Summit</a> has <a href="http://www.sqlpass.org/summit/2012/Sessions/PreConferenceSessions.aspx">14 fantastic PreCons</a> which are available for attendees to sign up for at an additional cost of just <a href="http://www.sqlpass.org/summit/2012/Registration.aspx">$395 per precon</a>.  These precons are full day sessions with some fantastic presenters including myself, Louis Davisson, Rod Colledge, Jessica Moss, Brian Knight, Allen White, Itzik Ben-Gan, Bob Ward, Allan Hirt and Grant Fritchey as well as a several others.</p>
<p>These sessions are a fantastic deal as you get a full day session, hand out, lunch plus lots of time to chat with the presenter and attendees before the sessions, during the breaks as well as after the session.</p>
<p>Can&#8217;t decide which session you want to attend?  No problem there are two days of PreCons so you&#8217;ll be able to turn the 3 day PASS Summit into a 5 day conference for just a few hundred dollars more.  If you are heading out to the PASS Summit I&#8217;d really encourage you to sign up for one of the pre-cons.  I&#8217;d love to have you in my pre-con called &#8220;<a href="http://www.sqlpass.org/summit/2012/Sessions/SessionDetails.aspx?sid=2651">SQL Server 2012 in a Highly Available World</a>&#8221; where we are going to walk through all of the high availability options which are available in SQL Server 2012 (as well as in the older versions as well), learn how to get them setup and most importantly figure out when we should be using each one.</p>
<p>If you are already signed up you can modify <a href="https://www.regonline.com/register/checkin.aspx?MethodId=0&amp;eventsessionId=c09266791bfa4138b026b094a3a7eb89&amp;eventID=1018613">your registration</a> or contact the registration contact listed on the <a href="https://www.regonline.com/register/checkin.aspx?MethodId=0&amp;eventsessionId=c09266791bfa4138b026b094a3a7eb89&amp;eventID=1018613">registration page</a> and she&#8217;ll be happy to add a pre-con onto your registration.</p>
<p>I look forward to seeing you at the summit, and at my precon,</p>
<p>Denny</p>
<!-- wpms-network-global-inserts -->]]></content:encoded>
			<wfw:commentRss>http://itknowledgeexchange.techtarget.com/sql-server/there-is-still-time-to-sign-up-for-sql-pass-precons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Second Edition of Securing SQL Server now longer available for pre-order. It&#8217;s Shipping! (repost)</title>
		<link>http://itknowledgeexchange.techtarget.com/sql-server/second-edition-of-securing-sql-server-now-longer-available-for-pre-order-its-shipping-repost/</link>
		<comments>http://itknowledgeexchange.techtarget.com/sql-server/second-edition-of-securing-sql-server-now-longer-available-for-pre-order-its-shipping-repost/#comments</comments>
		<pubDate>Thu, 09 Aug 2012 14:00:50 +0000</pubDate>
		<dc:creator>Denny Cherry</dc:creator>
				<category><![CDATA[AlwaysOn]]></category>
		<category><![CDATA[Availability Groups]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Data Loss]]></category>
		<category><![CDATA[Data Security]]></category>
		<category><![CDATA[Database Administration]]></category>
		<category><![CDATA[Database security]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server 2000]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[Storage]]></category>

		<guid isPermaLink="false">http://itknowledgeexchange.techtarget.com/sql-server/?p=2236</guid>
		<description><![CDATA[In case you missed the blog post over on securingsqlserver.com, I wanted to repost it here&#8230; I&#8217;m afraid that I&#8217;ve got some bad news.  You can no longer pre-order Securing SQL Server 2nd Edition from Amazon. Instead you have to settle for ordering the book outright and having it shipped to you.  That&#8217;s right, no [...]]]></description>
				<content:encoded><![CDATA[<p>In case you missed the blog post over on <a href="http://www.securi">securingsqlserver.com</a>, I wanted to repost it here&#8230;</p>
<p>I&#8217;m afraid that I&#8217;ve got some bad news.  You can no longer pre-order <a href="http://www.amazon.com/gp/product/1597499471/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1597499471&amp;linkCode=as2&amp;tag=sesqse-20">Securing SQL Server 2nd Edition</a> from Amazon.</p>
<p>Instead you have to settle for <a href="http://www.amazon.com/gp/product/1597499471/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1597499471&amp;linkCode=as2&amp;tag=sesqse-20">ordering the book outright </a>and having it shipped to you.  That&#8217;s right, no more being a pre-order book, it&#8217;s published and available to be shipped directly to you.  Currently Amazon is selling the book at full price which is $49.95, but if you have Amazon Prime it is available for Amazon Prime shipping.  Because it is considered to be a text book you get a $5 Amazon MP3 Credit (what ever terms and conditions that Amazon chooses do apply).</p>
<p>This is a totally <a href="http://www.amazon.com/gp/product/1597499471/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1597499471&amp;linkCode=as2&amp;tag=sesqse-20">updated edition</a> of the book including all sorts of new information about security within SQL Server 2012.  I of course cover things like how to secure AlwaysOn Availability Groups, how to use user defined server roles, contained users, etc. I also dive into how to properly secure SQL Server Reporting Services and SQL Server Analysis Services so they can&#8217;t be used to access data that people shouldn&#8217;t have access to.</p>
<p>All in all this book is much larger with Amazon showing it at 408 pages compared to just 272 pages for the 1st edition.  If you find someone cheaper to purchase it make sure that you are in fact ordering the second edition.  The ISBN number is <a href="http://www.amazon.com/gp/product/1597499471/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1597499471&amp;linkCode=as2&amp;tag=sesqse-20">1597499471</a>.</p>
<p>I hope that you pick up a copy of the book and that it is useful for you in securing your SQL Server environment.</p>
<p>Denny</p>
<!-- wpms-network-global-inserts -->]]></content:encoded>
			<wfw:commentRss>http://itknowledgeexchange.techtarget.com/sql-server/second-edition-of-securing-sql-server-now-longer-available-for-pre-order-its-shipping-repost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
