SQL Server health check by SQLskills: Spring discount offer

Through the end of July, we’re offering a complete single-instance health-check for a flat fee of US$2,500… 

One of the most popular services we provide to new clients is a SQL Server Health Check, whether the new client is a Fortune-25 company or a small company with only a handful of employees. There’s a lot of healthy competition in the SQL Server world to provide this service, but we at SQLskills believe we provide the best value for money, because…

  • We automate the data collection process using a minimal-impact diagnostic tool that’s already installed with SQL Server, saving the client time and allowing data collection to be scheduled and handled by the client based on their schedule, rather than requiring many hours of data collection through an interactive online session.
  • We have custom data processing tools that we’ve developed that help us to analyze the data, saving the client money.
  • We document all our findings, and the report includes advice and justification (and links to deeper explanations) on remediation of each problem found, allowing the client to make the necessary changes on their own or investigate the problem further and plan/implement an appropriate fix. We also have a summary call with the client, allowing them to ask whatever questions they have on the information in the report. And of course, sometimes the client may choose to have us assist with or perform all the remediation work/further investigations – whatever works for them.
  • We only charge for the time we use (typically 12 hours or less per instance) rather than locking the client in to a costly, fixed-price engagement, saving the client money.
  • Our health check process has been developed and refined over the last 7 years based on the accumulated knowledge and experience of our small team (all Data Platform MVPs with a combined 80+ years of deep SQL Server experience), past client engagements and problems, and is constantly updated based on current trends and issues we see with SQL Server installations. Each of our consultants utilizes an internally-developed checklist of over 130 items that we look for during our health audits to ensure consistency and accuracy across our team, and we routinely review our processes to ensure that the team is current with new checks and findings with each release of SQL Server. Our process is constantly evolving to be more efficient and thorough based on our customer interactions.
  • For large environments, we encourage the client to pick representative instances to check, and then extrapolate the results to instances with common configurations, saving the client money.

We do all of this to take the least amount of our client’s time, and provide the best return on their investment, whether for small environments or large corporate data centers. Also, as our audit is engineered to be as efficient as possible, it allows small companies with small I.T. budgets to make use of our services.

Some of the clients we’ve been working with for many years started with a single-instance health check and come back to us a few times per year for help when they need it (and we don’t charge any retainer fee). It’s really fun to get to know our clients, watch how their environments grow and improve, and meet them in our classes and at conferences like SQLintersection.

Back to the point of my blog post… It’s Spring, so it’s time for some Spring Cleaning! Through the end of July, we’re offering new or existing clients a complete single-instance health-check for a flat fee of US$2,500 – that’s more than 1/3 off the usual price for a 12-hour health check. The discount price covers us performing the health check, documenting the results, and a wrap-up conference call or Webex to go over the results.

So no matter what your I.T. budget, you CAN afford to have SQLskills on your team. And if you’re from a large corporation, for US$2,500, you really CAN’T afford to pass up this opportunity!

If you’re interested in working with us, send us an email and we’ll get in touch with you right away.

We look forward to getting to know you and your data team – we promise you won’t be disappointed!

Corruption recovery using DBCC WRITEPAGE

A couple of week ago I kicked off a survey about the extent of your experience with the DBCC WRITEPAGE command. Here are the results:


The “Other” values are:

  • 9 x “Read your post on it, may practice it one day, but it’ll always be last resort to use.”
  • 6 x “I read your post on it.”
  • 4 x “I know about it (from your posts/immersion event) and it’s in my toolbox whenever I get called in to perform disaster recovery.”
  • 1 x “It’s like knowing the Unix recursive delete command as root, dangerous and powerful.”
  • 1 x “Not since 2k pages, and then PageEdit.exe was easier.”

For those of you who don’t know what DBCC WRITEPAGE is, it’s an undocumented command that allows you to make direct changes to data file pages. It’s an extremely powerful command that is very useful for creating corrupt databases, and in extreme cases, for helping to repair otherwise irretrievably-corrupt databases. I blogged about it a year ago in this post.

I never advocate using it to repair a corrupt database and then continue using that database in production, and in fact I refuse to do that if a client asks as there are just too many potential problems that could occur. I’ll only ever use it to help recover data from a damaged database, where there’s already a copy of the databases files in existence, and the client has signed an agreement acknowledging that any data file I use it on is a duplicate, is not on a production instance, and changes to it will in no way affect production.

There are all kinds of things I’ve used DBCC WRITEPAGE for to allow data recovery to progress, and in my Advanced Corruption Recovery Techniques course on Pluralsight course I demonstrate one of them, which I’m going to describe here.

Imagine a database that’s suffered corruption and there’s an off-row LOB data value that’s inaccessible because the owning data row is corrupt. Your mission is to retrieve the data. And to make it impractical to manually piece together the value using DBCC PAGE dumps, the LOB value is a few megabytes, so it’s stored on hundreds of linked text pages.

The process:

  • Create another row with an off-row LOB value (the ‘dummy’ row)
  • Find out the dummy row’s page and offset on the page
  • Calculate the offset of the dummy LOB value’s in-row root in the variable-length portion of the record
  • Calculate the offset of the dummy LOB in-row root’s size, text timestamp, and pointer fields
  • Find the corrupt row’s LOB in-row-root’s size, text timestamp, and pointer field values
  • Use DBCC WRITEPAGE to overwrite the dummy LOB in-row root fields
  • Select from the dummy row and you’ll get back the LOB value you wanted to save

Cool, eh? Desperate times call for clever measures, and with procedures like this I regularly recover data from client databases that Microsoft and other data recovery firms either can’t help with or have given up on. It’s not a fast process as it can take quite a while to figure out exactly what to modify to make things work, but when the data comes back, the clients are always ecstatic.

And with some knowledge of the data structures in a data file, careful use of DBCC WRITEPAGE, and plenty of practice, you can do it too.

Or call us to help you :-)

Our new website and April special offer

Our New Website

Late last year we finally decided to make time to revamp our blogs and website, and move onto WordPress. I  really wish we’d done it a lot sooner as WordPress is such a joy to work with compared to hand-coded ASP.NET, but client work always seemed to get in the way. Now we’ve upgraded, it’s so much easier to change website content and write blog posts.

Kimberly sourced our new logo using the 99 Designs website, which allows artists around the world to compete with each other to win a design competition. Our new blogs went live in January and we just launched our new website on Wednesday. It took us almost five months of elapsed time to do it, mostly waiting for me to populate content, but we did it all ourselves, on our own server hosted by Amazon.  Jonathan  and I spent many, many hours on con-calls figuring stuff out, and Jonathan now knows more about WordPress and WordPress plug-ins than he ever wanted to know and was the driving force behind getting this all done (he really is utterly fabulous – thank you Jon!). Overall, we’re really proud of what we achieved together – it’s a huge improvement over the old site.

By the way, if you haven’t seen them yet, check out the image rotators on the home page and on the training pages which showcase some of Kimberly’s finest underwater photography. You can get hi-res version of those photos here.

Special Offer

To celebrate getting our new website completely live, we’re offering all new clients a special offer. If you sign up for our signature SQL Server Health Check service during the month of April, it will only cost you US$2500. This covers the health check of a single SQL Server instance, plus up to an hour of email/phone review with us about the results, once you’ve read our comprehensive report. That’s more than a 1/3 saving over the usual price!

Check out our SQL Server Health Check description and then let us know that you’re interested.

We’re looking forward to helping you. It’s what we do best.