Thursday, December 31, 2009

Final Recap – 2009 Goals

Well, I set 7 professional goals for 2009 and I did okay in meeting them, but I was not successful in all and, really, that is only because I did not put in the time to get them all done.  So let’s go through them and see how I did:

  1. Learn SQL Server 2008, particularly policy-based management, resource governor, and service broker.
    • Well, I did learn some SQL Server 2008.  I run it on my laptop and have spent some time with it.
    • Policy-based Management – I have played with it, read about it, and attended a couple of presentations about it.  I’d call this one attained
    • Resource Governor – I did a little reading on it, but I did not study beyond that.  I have not played with it all.  I’d call this one missed.
    • Service Broker – I really need to learn this one, but I have not.  This a fail.
  2. Write 1 article per quarter for SQLServerCentral
      Man, I started out great with this one, but fell off in the second half of the year.  I still have a series on Profiler to complete, but I got stuck on a problem with Replaying a trace so I flamed out.  I had 2 in the first half and none in the second half.  This is a major fail and I have no excuse except lack of motivation.
  3. Record and submit 1 video per quarter for JumpstartTV (now SQLShare).
      I did one video in January and one in December (still to be approved at SQLShare).  So again, another fail because of lack of effort and planning.
  4. One blog post per week
      I met this one by average as there were weeks I did not have a post, but more weeks when I had multiple posts.  With this post I’ll have 113 posts in 2009 which is a little more than 2 per week.  I would say a large majority were technical/professional posts with a couple personal and some announcement type posts.  This one is ACHIEVED!
  5. Become more involved in leadership in my local user group (OPASS).
    • I am officially co-president and have been scheduling speakers and will be starting to work on sponsors in the coming weeks.  Definitely achieved!
      • Speak at 2 community events (user groups, SQLSaturday’s, etc…)
          I spoke at the Pensacola and Orlando SQLSaturday’s and the Tampa and Space Coast User Groups so this is definitely achieved.
      • Attend the PASS Summit
          I made it!  It was FANTASTIC!  I met at least 50 people, learned a ton, and made great contacts.  I can’t wait to go back in 2010.  Don’t forget it is only $995 until January 15th.  Believe me, it is worth it and I don’t plan on missing any in the future.

Overall a pretty good year as I was week in my contributions to SQLServerCentral and SQLShare, but I learned a lot about SQL Server 2008 even though I didn’t meet my specific goals, and I exceeded goals 4-6, and attained goal 7.

Even though I did not meet all my goals 2009 was a great year for my professional development.  I learned a lot, not just technically, but how to be a professional and how to contribute to the community, so I’ll call 2009 a success!

Monday, December 28, 2009

Presenting a Live Meeting vs. a Real Meeting

I recently had the opportunity to present,  Nuggets Found by Mining the Default Trace, for SQLLunch.  This was my first time presenting via Live Meeting (or any on-line meeting functionality for that matter) and it was quite different.  I have presented technical contant at several user groups and SQLSaturday’s, and have spoken at many churches, but all of those times have been in the front of a roomful of people.  Presenting on-line is definitely different than presenting in-person.  Here are my first impressions:

Pacing

When presenting in-person you can tell by the attendees expressions and body language if you are going at the right pace, but on-line you don’t get that immediate feedback.

Personality

I’m not sure that your personality as a presenter comes across on-line as well as in-person.  Again, the lack of feedback from visual cues makes it hard to tell if your style and personality is coming through or if it is appropriate based on the audience.

Interaction

I thrive on interaction with the attendees and there is very limited opportunity for this on-line, at least with my limited experience.  I like to take questions throughout my presentations and tell some jokes and I found this more difficult to do in a Live Meeting

My Conclusion

I think Live Meeting and similar technologies are great even though I prefer to present in-person. I do enjoy being able to hear some great speakers through Live Meeting. 

Where I Think Live Meeting Fits Best

Remote locations to have some top speakers present.  Similar to where I use to live in northern New Hampshire.  Let’s just say that being 2+ hours from the nearest airport and 3+ hours from the nearest big city (Boston or Montreal) isn’t conducive to bringing in speakers from away, but Live Meeting would allow a group to have some top speakers.

For organizations like PASS to give a taste of conferences like the Summit through events like the 24 Hours of Pass.

Going Forward

As Co-President of OPASS, we are going to be having our first meeting with a Live Meeting presention at our January meeting with Andy Leonard (@AndyLeonard) presenting.  My co-President, Andy Warren (@sqlandy), is a big thinker and wants to try to send 2-way video so that the presenter can see the group and, if possible, take questions during the presentation.  We will be doing some testing before to see how and if we can make it work, and then try to make it work well.   

Thursday, December 24, 2009

OT: What Christmas Means to Me

Merry Christmas to everyone.  As many of you know, at least I hope you do, I am a born-again Christian and try to live my life according to the Bible, so I’d like to share what Christmas means to me at this time.

There are many scripture passages that are regularly used in Christmas cards, sermons, blogs, and letters, but I’d the one I’ll share is a little different:

   
12 Therefore, just as through one man sin entered the world, and death through sin, and thus death spread to all men, because all sinned— 13 (For until the law sin was in the world, but sin is not imputed when there is no law. 14 Nevertheless death reigned from Adam to Moses, even over those who had not sinned according to the likeness of the transgression of Adam, who is a type of Him who was to come. 15 But the free gift is not like the offense. For if by the one man’s offense many died, much more the grace of God and the gift by the grace of the one Man, Jesus Christ, abounded to many. 16 And the gift is not like that which came through the one who sinned. For the judgment which came from one offense resulted in condemnation, but the free gift which came from many offenses resulted in justification. 17 For if by the one man’s offense death reigned through the one, much more those who receive abundance of grace and of the gift of righteousness will reign in life through the One, Jesus Christ.)
18 Therefore, as through one man’s offense judgment came to all men, resulting in condemnation, even so through one Man’s righteous act the free gift came to all men, resulting in justification of life. 19 For as by one man’s disobedience many were made sinners, so also by one Man’s obedience many will be made righteous.
20 Moreover the law entered that the offense might abound. But where sin abounded, grace abounded much more, 21 so that as sin reigned in death, even so grace might reign through righteousness to eternal life through Jesus Christ our Lord. (Romans 5:12-21, New King James Version)

There’s a lot in that passage, but the key idea is that, because Adam sinned ALL people are born sinners (vv. 12-15, 18-19), but because Jesus Christ was fully obedient (vv.18-19), God through His grace offers justification (Ephesians 2:8-9) to us.

The giving and receiving of gifts at Christmas is fun, and, believe it or not, I prefer the giving over receiving, but the birth, life, death, and resurrection of Christ and the free gift offered by God because of that is the greatest gift that can be given.  I’m glad that I accepted and opened that gift and I hope you have as well.

Wednesday, December 23, 2009

Speaking at SQLSaturday #32 – Tampa

I just found out that I’ve been accepted to speak at SQLSaturday #32 – Tampa on January 23, 2010.  My session will be:

Why Should I Use Stored Procedures?

With the proliferation of ORM Tools like Linq To SQL, NHibernate, there has been a move to no longer use stored procedures for Data Access, I personally disagree. This will be a professional and polite open discussion starting with why I believe stored procedures are the best way to access data in SQL Server. Alternate view points welcome.

I hope this will turn out to be a great, open discussion where there are different viewpoints presented and honest evaluation of the best way to access data in SQL Server.

Why Attend?

If you’ve never been to a SQLSaturday, I highly recommend that you check out the schedule as there are several events upcoming all around the US.  Where else can you find a full day of free training from some of the best minds in the SQL Server community.  There are usually several SQL Server MVP’s and authors presenting in addition to the best local SQL Server minds.  The time spent in conversation with your peers is well-worth a Saturday. 

Remember, YOU are responsible for your professional development.

Monday, December 21, 2009

SQLLunch Resources – Mining Nuggets from the Default Trace

I did my first SQLLunch today and it was fun.  I don’t know how many attended, my last look was 12, so not a huge crowd, but that’s okay.  It is definitely different presenting online versus in-person and there will be a blog post soon about how I found it different and where I struggled, but I digress.  I promised that I put the scripts up on my blog so here they are on SkyDrive since I can’t post them here:

Enjoy!  Oh, and as always, don’t trust any code you download from the internet, even mine always test it then improve it and then share it.

Friday, December 18, 2009

Have Lunch with Me

I know you all are clamoring for the opportunity to have lunch with me so I agreed to do a SQLLunch on Monday, December 21.  Doing it this way will allow more people to enjoy lunch with me.

I’ll be speaking on Nuggets Found by Mining the Default Trace.  Lunch starts at 11:30 am CST and will last for about 30 minutes with some time for questions.

Thursday, December 17, 2009

Where’d the Data Go?

The Reported Problem

A few weeks ago I was contacted by a former employer because an SSRS report I had written several years ago was no longer returning the data that was expected.  The report returned Manufacturing Instructions that were attached to an Order or Order Item and was used to ensure that everything was done as requested by the customer.  There are 2 groups on the report:

  1. Runs – a Run consists of orders that contain the same product.
  2. Orders

The detail section consists of the specific Manufacturing Instructions for each order in the run.  Well, the report was showing the Runs and the Orders but no Instructions.  Obviously this is bad since the whole point of the report is to show the instructions.

Troubleshooting the Problem

I vpn’ed into the network and opened up the report to find the SQL that was generating the report.  I knew I had authored the report, but could not remember what the data source was.  There were 2 possible data sources:  SQL Server or DB2 on the iSeries.  I was hoping it would be SQL Server.  It wasn’t.  I had a query similar to this (underlining added) in the report that was connecting to DB2 using the IBM DA400 OLE DB Driver:

SELECT
S.run_no,
O.order_no,
OI.instruction AS order_instruction,
S.start_date,
S.end_date
FROM
@orders O JOIN
@order_instructions OI
ON O.order_no = OI.order_no JOIN
@schedule S
ON O.order_no = S.order_no
WHERE
(S.start_date >= '12/17/2009' AND
S.end_date < '12/21/2009') OR
(
S.start_date < '12/21/2009' AND
S.end_date > '12/14/2009')
UNION ALL
SELECT
S.run_no,
O.order_no,
OII.instruction AS order_item_instruction,
S.start_date,
S.end_date
FROM
@orders O JOIN
@order_items OI
ON O.order_no = OI.order_no JOIN
@order_item_instructions OII
ON OI.order_item_no = OII.order_item_no JOIN
@schedule S
ON O.order_no = S.order_no
WHERE
(S.start_date >= '12/17/2009' AND
S.end_date < '12/21/2009') OR
(
S.start_date < '12/21/2009' AND
S.end_date > '12/14/2009')
ORDER BY
run_no,
O.order_no


I ran the query in the dataset designer in Visual Studio 2003 (yup, SSRS 2000) and got data back including instructions.  I couldn’t figure out why I wasn’t seeing instructions on the report, especially since this report had been running without problem.  Then I ran the query in a custom query tool and that’s when I noticed the instruction column was not being returned as instruction but as column 00003!  What! I don’t have that anywhere?  Well, look at the underlined text in query, notice how I aliased the instruction columns with different aliases.  Turns out THIS was the problem.  Apparently when an update (ptf) was applied to the iSeries the behavior of column aliases in a UNION changed.  If you run a query like that in SQL Server the ALIAS used in the FIRST query is returned as the column name.  This was also how it USED to work in DB2 on the iSeries, but apparently that changed and instead of getting EITHER of the ALIASES it returns the column number, in the case you’d get 00003 for the ALIASED column.



The Solution



Well, simple solution, I removed the ALIAS in the second part of the UNION query and, VIOLA!, the report now worked again.



Why did I have the separate ALIASes in the first place?  I think it was because when I was testing the queries for correct data I wanted to know which instructions were at the order level and which were at the order item level and I ran the queries separately.  Then when I was convinced the data was correct I UNION’ed the queries and stuck them in the report without removing the ALIASes. 



So in reality the query was returning the correct data, but the SSRS report was looking for a column named instructions and it didn’t exist, so it didn’t show it!



Next time, I’ll know better!

Monday, December 14, 2009

What is Your Biggest Weakness?

I was tagged by Ken Simmons (@kensimmons) in the blog chain started by David Stein (@made2mentor).  Here’s Ken’s post and the original.  There are several other posts including ones by Brent Ozar (@BrentO) and Thomas LaRock (@SQLRockstar).  So I guess I’ll add mine.

This is a very hard post for me to write for two reasons:

  1. Who likes to publicize where they struggle?  I know I prefer to talk about successes and strengths.
  2. I tend to be very critical of myself (and others many times), See Joe Healy’s comments on my blog post about areas where SQLSaturday #21 – Orlando could have been better, and others usually have higher regard for my knowledge/abilities than I do, so it’s hard for me to pick one weakness as my biggest.

Maybe procrastination is it, as I know you are all saying, “Get to the point, what’s your biggest weakness?”.  Okay, okay, I’ll pick one.

I’d say my biggest weakness is lack of confidence.  I know I may not come across that way, but while I may know something intellectually I hesitate to implement for fear I may be wrongIn some ways this is a good thing because it makes me plan, learn, and test more, but it can be a bad thing because it can make me get stuck in one place when I should be moving to another.  The funny part of it is, each time I finally move or when I do the thing that I’m afraid of, none of the things I worried about happened.  For example, whenever I speak, whether on technical topic or in elsewhere (I speak in church regularly), I’m EXTREMELY nervous and think “What if someone in the crowd knows more than me and shows where I’m wrong?” or “What if the projector or demos don’t work?”, but once the talk starts, I’m fine.  I’ve spoken probably hundreds of times, and I still fight the fear.  I do the same thing when I learn something new for SQL Server or when it’s time to apply a Service Pack or upgrade, “What if it doesn’t work?”.  Well, experience tells me it most likely will work, especially if I tested it, and experience also tells me that I’ve recovered from disasters before, so I can probably fix it.  It’s funny though because the only time I’ve had problems is when I didn’t worry at all, what does that mean?

I’m not sure all who have been tagged, so I’m not going to tag anyone else.

Thursday, December 10, 2009

Do You Use Projects/Solutions in SSMS?

When SQL Server 2005 was released Microsoft made a major change to the client tools provided with SQL Server, moving from Enterprise Manager for management tasks and Query Analyzer for scripting to the Visual Studio-based SQL Server Management Studio.  I have to admit that when SSMS was released I didn’t like it and continued using Query Analyzer for a while.  I have now adjusted to SSMS and, while I still wish I had a simple query tool, have grown to appreciate what it does.  My two favorite features are the Standard Reports and the ability to add Projects and Solutions like in Visual Studio.
I have to admit that I don’t use the Project and Solutions feature enough in my day to day work, but I do use it when I put together a blog post or presentation for a SQLSaturday or User Group.  By putting all the code for the demos in a Project I don’t have to go searching the file system to find a demo, I don’t have to have the code pre-loaded into SSMS, and I can stay in SSMS throughout the demos.  Here’s my project for my Default Trace presentation:
DefaultTraceProjectAs you can see it provides a single place for all your scripts.  You can also add the Project/Solution to your source control product of choice (I don’t have one installed on my personal laptop at this time). 
I will be working with this feature more to have projects for my database scripts, maintenance scripts, and my favorite queries in addition to using it for presentations and blogs.
I’d love to hear how you are using projects and solutions in SSMS.

Wednesday, December 9, 2009

OPASS December Meeting Recap

This was the first meeting where I really lead most of the meeting.  Andy Warren (@sqlandy) did the networking at the beginning and the raffle at the end while I did announcements and set the agenda.  As usual, I forgot to mention something at the beginning, the Florida Microsoft Speaker Idol competition for which we had two takers (Tommy Bolhoffer, probably misspelled, and Robert Hurwitz, again probably misspelled).  Exciting times at OPASS!

We started the meeting with some time to meet and talk to someone you didn’t know or didn’t know well.  I spoke with Ronnie, Lisa, Rob, and several others during this 10-15 minute time.  Then I went over the PASS November-December slide deck and announcements, and Andy, Kendal Van Dyke (@SQLDBA), and I shared some of our takeaways from the PASS Summit to show the value in attending and encourage others to attend.

Our main speaker was Gus Gwynne (GSquared on SQLServerCentral) speaking on “Auditing and Logging”.  He did a very good job.  He shared reasons for auditing (Blamethrower was my favorite, though not his), different types of auditing which include passive (log reading, tracing) and active (triggers, logging within the transaction).  He also shared several examples using triggers and had some good stories to illustrate how logging has helped in his workplace.  One of the interesting stories was when an outsourcing company updated the last name and password for all users in a database, and, because a trigger logged the changes, he was able to quickly (within minutes) undo the update.

We then raffled off a few prizes, a Microsoft Arcmouse, Office 2007 Standard, and Windows 7 Ultimate 64-bit were the big ticket items.  After the raffle we had some good discussion about speaking, self-promotion, and personality.

All in all a good night.  Now I need to find a speaker for January.  If you are interested contact me, @unclebiguns (blog post here for why that’s my handle) on Twitter or via the contact me link on the blog.  We are open to do a Live Meeting or having you come in person.

Tuesday, December 8, 2009

T-SQL Tuesday #001 – Dates and Times

T-SQL Tuesday was started by Adam Machanic (@AdamMachanic)  on his blog to encourage SQL Bloggers to share their tips and tricks about a specific topic once a month.  A great idea and a great way to get a topic to blog about!
I’ve been working with SQL Server since 1999 and it wasn’t until the last couple of years that I finally learned a better way to retrieve a date range.  I used to do:
SELECT
columns
FROM
TABLE
WHERE
date_column BETWEEN start_date AND end_date;

I’m guessing that there are people reading this that are saying, “I do that all the time and it works fine for me, so what’s the problem?”.  I understand where they are coming from, but I finally really understood that, until the specific DATE data type (date only) in SQL Server 2008, datetime and smalldatetime columns ALWAYS have a time part.  This can and does affect date range queries.  Here’s an example, albeit slightly contrived, but I’ve seen it happen in the real word:

DECLARE @sales TABLE (sale_id INT IDENTITY(1,1) PRIMARY KEY, sale_date DATETIME, sale_amt FLOAT);

WITH cteNums AS 
(
SELECT TOP 50
ROW_NUMBER() OVER (ORDER BY AC.NAME) AS N
FROM
sys.all_columns AS AC 
)
INSERT INTO @sales (
sale_date,
sale_amt
)
SELECT
DATEADD(DAY, -N, GETDATE()) AS sales_date,
N * ABS(CHECKSUM(NEWID()))/10000.00 AS sale_amt 
FROM
cteNums 

/* 
Setup for contrived example.
Make sure the first sale of the month is at midnight 
*/     
UPDATE @sales
SET sale_date = DATEADD(DAY, DATEDIFF(DAY, 0, sale_date), 0)
WHERE
DATEPART(DAY, sale_date) = 1

/*
Task is to get sales for the previous full month
*/
/*
Set up variables for the first and last day of th month
*/
DECLARE @start_date DATETIME,
@end_date DATETIME

/*
Set the variables to the first of last month and the last day of 
last month at the time of writing '2009-11-01' and '2009-11-30' See this blog post by Lynn Pettis for why I am using DATEADD and DATEPART with 0
*/        
SELECT
@start_date = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0),
@end_date = DATEADD(DAY, -1, DATEADD(MONTH, 1, @start_date))

SELECT @start_date, @end_date, DATEADD(DAY, 1, @end_date)

/*
My old method
*/
SELECT
COUNT(*) AS sales,
MIN(sale_date) AS first_sale,
MAX(sale_date) AS last_sale,
SUM(sale_amt) AS total_sales 
FROM
@sales
WHERE
sale_date BETWEEN @start_date AND @end_date 

/*
My new method - accurate
*/    
SELECT
COUNT(*) AS sales,
MIN(sale_date) AS first_sale,
MAX(sale_date) AS last_sale,
SUM(sale_amt) AS total_sales 
FROM
@sales
WHERE
sale_date >= @start_date AND 
/*First of the next month */
sale_date < DATEADD(DAY, 1, @end_date)

Now I'm sure someone out there will say, “Hey in your last example you are using the first day of the next month and you could do that with between.” Well yes I could and here is the query:

SELECT
COUNT(*) AS sales,
MIN(sale_date) AS first_sale,
MAX(sale_date) AS last_sale,
SUM(sale_amt) AS total_sales 
FROM
@sales
WHERE
sale_date BETWEEN @start_date AND DATEADD(DAY, 1, @end_date)

But this does not return the correct results either.  Here are the results for each query:


Count
First Sale
Last Sale
Total
1st Between
29
2009-11-01 00:00:00.000
2009-11-29 11:09:30.107
86362080.49
>= and <
30
2009-11-01 00:00:00.000
2009-11-30 11:09:30.107
86362080.49
2nd Between
31
2009-11-01 00:00:00.000
2009-12-01 00:00:00.000
86362080.49

All that to show that I believe you are better off using >= and < instead of BETWEEN when comparing dates.

Monday, December 7, 2009

Good Programmer = Lazy & Dumb?

Alternative title for programmers using C-derivatives and Java:

Good Programmer == Lazy & Dumb?

I read this blog post, Why Good Programmers Are Lazy and Dumb, and it struck me a being an excellent perspective.  Especially with these 2 quotes:

Lazy, because only lazy programmers will want to write the kind of tools that might replace them in the end.

My goal when working on a project it produce a product that takes me out of the loop on the project.  By that I mean that I want to provide the end users all the tools they need to manage the application once released to them.  No, I don’t want to have to manage in-application security, I want a tool provided to the appropriate person to do that.  I want to be a DBA\Developer, NOT an application administrator.  I want to be able to work on new and exciting projects, not stick with one.

But there’s a more crucial point why a good programmer must be dumb. That’s because for him to find the best solutions to problems, he must keep a fresh mindset and manage to think out of the box (or rather, know its actual shape).

Sometimes, the worst situation is the one where you are re-writing an existing application.  Why?  Because you, or someone else on the team, knows too much about it and can’t see new ways to do it.  A few years ago I moved to a new position and was put on a project with one of the existing developers who had been in the organization for several years and had written much of the current application.  Let’s just say this was a blessing and a curse.  They knew the processes well and what hadn’t worked well, but this also meant that they weren’t able to see other ways to do things which may be better.  I was the “dumb” programmer in this situation and tended to ask, “Why?” a lot and suggest alternate ways of doing things.

So the questions are:

  1. Are you trying to write software that replaces you?  Are you automating the routine tasks of being a DBA so that, with proper documentation, someone can come behind you and not miss a beat?

    I know I have a long way to go in regards to automation and documentation, but I’m working on it.

  2. Are you content with, “I’ve always done it that way”, or are you looking for new or better ways to do things?

    I’d like to think that this an area I do well in.  I’m always looking for a better way to do something, which is why I attend user group meetings, read books and blogs, and participate in the online SQL Community.

How about you?

Friday, December 4, 2009

Book Review: Apress Pro SQL Server 2008 Administration

Several months ago I received a copy of the Apress book, Pro SQL Server 2008 Administration (Amazon) by Ken Simmons (@kensimmons), a friend of mine, and Sylvester Carstarphen (this is my disclaimer that I didn’t buy the book).  Well, I finally finished the book and can post my thoughts.

General Impression

This was a good book, but my first thought was that I expected more from a “Pro” level book.  I’m not sure if this is because my expectations were too high, or because I underestimated my own knowledge.  What the book does cover it covers well and the writing is excellent, but I didn’t think that a “Pro” level book would include doing an install or upgrade from the GUI, which this book includes and I thought that there were a lot of pages on what I would consider basic level tasks (security, indexing, backup & restore).  

The Book

I liked how the book starts with a three chapter section, Introducing Microsoft SQL Server 2008, covering new features, pre-installation, and high-availability options. 

Part 2 – Getting Started

Three chapters on Installing, Upgrading, and Post-Installation. The end of chapter 5, Upgrading to Microsoft SQL Server 2008, where the authors covered post-upgrade tasks like changing compatibility levels, updating statistics, page-verify settings, etc.. was excellent as these are often forgotten or overlooked tasks. 

Part 3 – Administering Microsoft SQL Server 2008

The meat of the book with seven chapters on Multi-server Administration, Managing Security, Administering Database Level Objects, Indexing, Backups, Restore Strategies, and Automating Routine Maintenance. 
Chapter 7 which covers Multi-server Administration, including Policy Based Management and Central Management Servers was excellent, although I think more time could have been spent on these features, especially if less time was spent on the GUI install and upgrade. 
Chapters 8-11 did a good job explaining the mechanics and the how-to’s of security, managing objects, indexing, and backups, but I assumed this would have been covered in a beginner or intermediate level book and a pro book would have spent more on the strategies and why’s of these topics. 
Chapter 12 on Restore and Recovery Strategies does spend more time on the reason for the different restore options and did a better job hitting higher-level topics like Page restores, piecemeal restores, and online-restore options which is why this is one of my favorite chapters. 
Chapter 13 – Automating Routine Maintenance, was one I was a bit disappointed in.  It does a good job of covering Database Mail, SQL Server Agent, and Maintenance plans, but I thought that there would be more on writing and using scripts like Ola Hallengren’s Maintenance scripts or Michelle Ufford’s (@sqlfool) index maintenance script to show how the author’s or others automate and plan for maintenance.

Part 4 – Troubleshooting and Tuning

Three chapters on monitoring, auditing, and managing query performance.
Chapter 14 covers monitoring and does a good job explaining the tools available (Perfmon, DMV’s, DBCC, Profiler/Trace), including the counters and events to watch.  I especially liked how the authors showed how to get performance counter information both from PerfMon and the DMV’s.  Baselining is discussed but one thing is missing, and I haven’t found it anywhere yet, is how/where to store your baseline data for comparison later.  I know I could figure something out, but I want that one to be given to me.
Chapter 15 covers auditing.  Actually it covers the new enterprise edition only SQL Server Audit.  It’s a good chapter and covers it well, I guess, but since I don’t run enterprise edition, I didn’t really play with it all.  I still wish the book had covered some other ways like SQL Trace, the Default Trace, and Common Criteria auditing which are still available even at the non-enterprise level.
Chapter 16 was on managing query performance and included hints on using Profiler and PerfMon together, using the standard performance reports in SSMS, DMV’s, query hints, plan guides, and Resource Governor.  All in all a very informative chapter on performance monitoring/tuning for an administration book.  The chapter does mention another Apress book, SQL Server 2008 Query Performance Tuning Distilled (Amazon), as a more detailed resource for this information (I have it and it is, a review will be coming).

Part 5 - Conclusion

Two chapters covering Secrets to Excelling as a Professional DBA and What’s Next which were excellent as they talk about knowing your limitations, communicating, being a leader, and taking charge of your own professional development.  These are all areas where I can see myself needing growth.

My Conclusion

I recommend the book as I think people at all but the extremely low or extremely high levels will get something from it, but people moving from SQL Server 2000 to 2008 and junior DBA’s will get a lot from it.