- SQL Server Reference Guide
- Introduction
- SQL Server Reference Guide Overview
- Table of Contents
- Microsoft SQL Server Defined
- SQL Server Editions
- SQL Server Access
- Informit Articles and Sample Chapters
- Online Resources
- Microsoft SQL Server Features
- SQL Server Books Online
- Clustering Services
- Data Transformation Services (DTS) Overview
- Replication Services
- Database Mirroring
- Natural Language Processing (NLP)
- Analysis Services
- Microsot SQL Server Reporting Services
- XML Overview
- Notification Services for the DBA
- Full-Text Search
- SQL Server 2005 - Service Broker
- Using SQL Server as a Web Service
- SQL Server Encryption Options Overview
- SQL Server 2008 Overview
- SQL Server 2008 R2 Overview
- SQL Azure
- The Utility Control Point and Data Application Component, Part 1
- The Utility Control Point and Data Application Component, Part 2
- Microsoft SQL Server Administration
- The DBA Survival Guide: The 10 Minute SQL Server Overview
- Preparing (or Tuning) a Windows System for SQL Server, Part 1
- Preparing (or Tuning) a Windows System for SQL Server, Part 2
- Installing SQL Server
- Upgrading SQL Server
- SQL Server 2000 Management Tools
- SQL Server 2005 Management Tools
- SQL Server 2008 Management Tools
- SQL Azure Tools
- Automating Tasks with SQL Server Agent
- Run Operating System Commands in SQL Agent using PowerShell
- Automating Tasks Without SQL Server Agent
- Storage – SQL Server I/O
- Service Packs, Hotfixes and Cumulative Upgrades
- Tracking SQL Server Information with Error and Event Logs
- Change Management
- SQL Server Metadata, Part One
- SQL Server Meta-Data, Part Two
- Monitoring - SQL Server 2005 Dynamic Views and Functions
- Monitoring - Performance Monitor
- Unattended Performance Monitoring for SQL Server
- Monitoring - User-Defined Performance Counters
- Monitoring: SQL Server Activity Monitor
- SQL Server Instances
- DBCC Commands
- SQL Server and Mail
- Database Maintenance Checklist
- The Maintenance Wizard: SQL Server 2000 and Earlier
- The Maintenance Wizard: SQL Server 2005 (SP2) and Later
- The Web Assistant Wizard
- Creating Web Pages from SQL Server
- SQL Server Security
- Securing the SQL Server Platform, Part 1
- Securing the SQL Server Platform, Part 2
- SQL Server Security: Users and other Principals
- SQL Server Security – Roles
- SQL Server Security: Objects (Securables)
- Security: Using the Command Line
- SQL Server Security - Encrypting Connections
- SQL Server Security: Encrypting Data
- SQL Server Security Audit
- High Availability - SQL Server Clustering
- SQL Server Configuration, Part 1
- SQL Server Configuration, Part 2
- Database Configuration Options
- 32- vs 64-bit Computing for SQL Server
- SQL Server and Memory
- Performance Tuning: Introduction to Indexes
- Statistical Indexes
- Backup and Recovery
- Backup and Recovery Examples, Part One
- Backup and Recovery Examples, Part Two: Transferring Databases to Another System (Even Without Backups)
- SQL Profiler - Reverse Engineering An Application
- SQL Trace
- SQL Server Alerts
- Files and Filegroups
- Partitioning
- Full-Text Indexes
- Read-Only Data
- SQL Server Locks
- Monitoring Locking and Deadlocking
- Controlling Locks in SQL Server
- SQL Server Policy-Based Management, Part One
- SQL Server Policy-Based Management, Part Two
- SQL Server Policy-Based Management, Part Three
- Microsoft SQL Server Programming
- An Outline for Development
- Database
- Database Services
- Database Objects: Databases
- Database Objects: Tables
- Database Objects: Table Relationships
- Database Objects: Keys
- Database Objects: Constraints
- Database Objects: Data Types
- Database Objects: Views
- Database Objects: Stored Procedures
- Database Objects: Indexes
- Database Objects: User Defined Functions
- Database Objects: Triggers
- Database Design: Requirements, Entities, and Attributes
- Business Process Model Notation (BPMN) and the Data Professional
- Business Questions for Database Design, Part One
- Business Questions for Database Design, Part Two
- Database Design: Finalizing Requirements and Defining Relationships
- Database Design: Creating an Entity Relationship Diagram
- Database Design: The Logical ERD
- Database Design: Adjusting The Model
- Database Design: Normalizing the Model
- Creating The Physical Model
- Database Design: Changing Attributes to Columns
- Database Design: Creating The Physical Database
- Database Design Example: Curriculum Vitae
- NULLs
- The SQL Server Sample Databases
- The SQL Server Sample Databases: pubs
- The SQL Server Sample Databases: NorthWind
- The SQL Server Sample Databases: AdventureWorks
- The SQL Server Sample Databases: Adventureworks Derivatives
- UniversalDB: The Demo and Testing Database, Part 1
- UniversalDB: The Demo and Testing Database, Part 2
- UniversalDB: The Demo and Testing Database, Part 3
- UniversalDB: The Demo and Testing Database, Part 4
- Getting Started with Transact-SQL
- Transact-SQL: Data Definition Language (DDL) Basics
- Transact-SQL: Limiting Results
- Transact-SQL: More Operators
- Transact-SQL: Ordering and Aggregating Data
- Transact-SQL: Subqueries
- Transact-SQL: Joins
- Transact-SQL: Complex Joins - Building a View with Multiple JOINs
- Transact-SQL: Inserts, Updates, and Deletes
- An Introduction to the CLR in SQL Server 2005
- Design Elements Part 1: Programming Flow Overview, Code Format and Commenting your Code
- Design Elements Part 2: Controlling SQL's Scope
- Design Elements Part 3: Error Handling
- Design Elements Part 4: Variables
- Design Elements Part 5: Where Does The Code Live?
- Design Elements Part 6: Math Operators and Functions
- Design Elements Part 7: Statistical Functions
- Design Elements Part 8: Summarization Statistical Algorithms
- Design Elements Part 9:Representing Data with Statistical Algorithms
- Design Elements Part 10: Interpreting the Data—Regression
- Design Elements Part 11: String Manipulation
- Design Elements Part 12: Loops
- Design Elements Part 13: Recursion
- Design Elements Part 14: Arrays
- Design Elements Part 15: Event-Driven Programming Vs. Scheduled Processes
- Design Elements Part 16: Event-Driven Programming
- Design Elements Part 17: Program Flow
- Forming Queries Part 1: Design
- Forming Queries Part 2: Query Basics
- Forming Queries Part 3: Query Optimization
- Forming Queries Part 4: SET Options
- Forming Queries Part 5: Table Optimization Hints
- Using SQL Server Templates
- Transact-SQL Unit Testing
- Index Tuning Wizard
- Unicode and SQL Server
- SQL Server Development Tools
- The SQL Server Transact-SQL Debugger
- The Transact-SQL Debugger, Part 2
- Basic Troubleshooting for Transact-SQL Code
- An Introduction to Spatial Data in SQL Server 2008
- Performance Tuning
- Performance Tuning SQL Server: Tools and Processes
- Performance Tuning SQL Server: Tools Overview
- Creating a Performance Tuning Audit - Defining Components
- Creating a Performance Tuning Audit - Evaluation Part One
- Creating a Performance Tuning Audit - Evaluation Part Two
- Creating a Performance Tuning Audit - Interpretation
- Creating a Performance Tuning Audit - Developing an Action Plan
- Understanding SQL Server Query Plans
- Performance Tuning: Implementing Indexes
- Performance Monitoring Tools: Windows 2008 (and Higher) Server Utilities, Part 1
- Performance Monitoring Tools: Windows 2008 (and Higher) Server Utilities, Part 2
- Performance Monitoring Tools: Windows System Monitor
- Performance Monitoring Tools: Logging with System Monitor
- Performance Monitoring Tools: User Defined Counters
- General Transact-SQL (T-SQL) Performance Tuning, Part 1
- General Transact-SQL (T-SQL) Performance Tuning, Part 2
- General Transact-SQL (T-SQL) Performance Tuning, Part 3
- Performance Monitoring Tools: An Introduction to SQL Profiler
- Performance Tuning: Introduction to Indexes
- Performance Monitoring Tools: SQL Server 2000 Index Tuning Wizard
- Performance Monitoring Tools: SQL Server 2005 Database Tuning Advisor
- Performance Monitoring Tools: SQL Server Management Studio Reports
- Performance Monitoring Tools: SQL Server 2008 Activity Monitor
- The SQL Server 2008 Management Data Warehouse and Data Collector
- Performance Monitoring Tools: Evaluating Wait States with PowerShell and Excel
- Practical Applications
- Choosing the Back End
- The DBA's Toolbox, Part 1
- The DBA's Toolbox, Part 2
- Scripting Solutions for SQL Server
- Building a SQL Server Lab
- Using Graphics Files with SQL Server
- Enterprise Resource Planning
- Customer Relationship Management (CRM)
- Building a Reporting Data Server
- Building a Database Documenter, Part 1
- Building a Database Documenter, Part 2
- Data Management Objects
- Data Management Objects: The Server Object
- Data Management Objects: Server Object Methods
- Data Management Objects: Collections and the Database Object
- Data Management Objects: Database Information
- Data Management Objects: Database Control
- Data Management Objects: Database Maintenance
- Data Management Objects: Logging the Process
- Data Management Objects: Running SQL Statements
- Data Management Objects: Multiple Row Returns
- Data Management Objects: Other Database Objects
- Data Management Objects: Security
- Data Management Objects: Scripting
- Powershell and SQL Server - Overview
- PowerShell and SQL Server - Objects and Providers
- Powershell and SQL Server - A Script Framework
- Powershell and SQL Server - Logging the Process
- Powershell and SQL Server - Reading a Control File
- Powershell and SQL Server - SQL Server Access
- Powershell and SQL Server - Web Pages from a SQL Query
- Powershell and SQL Server - Scrubbing the Event Logs
- SQL Server 2008 PowerShell Provider
- SQL Server I/O: Importing and Exporting Data
- SQL Server I/O: XML in Database Terms
- SQL Server I/O: Creating XML Output
- SQL Server I/O: Reading XML Documents
- SQL Server I/O: Using XML Control Mechanisms
- SQL Server I/O: Creating Hierarchies
- SQL Server I/O: Using HTTP with SQL Server XML
- SQL Server I/O: Using HTTP with SQL Server XML Templates
- SQL Server I/O: Remote Queries
- SQL Server I/O: Working with Text Files
- Using Microsoft SQL Server on Handheld Devices
- Front-Ends 101: Microsoft Access
- Comparing Two SQL Server Databases
- English Query - Part 1
- English Query - Part 2
- English Query - Part 3
- English Query - Part 4
- English Query - Part 5
- RSS Feeds from SQL Server
- Using SQL Server Agent to Monitor Backups
- Reporting Services - Creating a Maintenance Report
- SQL Server Chargeback Strategies, Part 1
- SQL Server Chargeback Strategies, Part 2
- SQL Server Replication Example
- Creating a Master Agent and Alert Server
- The SQL Server Central Management System: Definition
- The SQL Server Central Management System: Base Tables
- The SQL Server Central Management System: Execution of Server Information (Part 1)
- The SQL Server Central Management System: Execution of Server Information (Part 2)
- The SQL Server Central Management System: Collecting Performance Metrics
- The SQL Server Central Management System: Centralizing Agent Jobs, Events and Scripts
- The SQL Server Central Management System: Reporting the Data and Project Summary
- Time Tracking for SQL Server Operations
- Migrating Departmental Data Stores to SQL Server
- Migrating Departmental Data Stores to SQL Server: Model the System
- Migrating Departmental Data Stores to SQL Server: Model the System, Continued
- Migrating Departmental Data Stores to SQL Server: Decide on the Destination
- Migrating Departmental Data Stores to SQL Server: Design the ETL
- Migrating Departmental Data Stores to SQL Server: Design the ETL, Continued
- Migrating Departmental Data Stores to SQL Server: Attach the Front End, Test, and Monitor
- Tracking SQL Server Timed Events, Part 1
- Tracking SQL Server Timed Events, Part 2
- Patterns and Practices for the Data Professional
- Managing Vendor Databases
- Consolidation Options
- Connecting to a SQL Azure Database from Microsoft Access
- SharePoint 2007 and SQL Server, Part One
- SharePoint 2007 and SQL Server, Part Two
- SharePoint 2007 and SQL Server, Part Three
- Querying Multiple Data Sources from a Single Location (Distributed Queries)
- Importing and Exporting Data for SQL Azure
- Working on Distributed Teams
- Professional Development
- Becoming a DBA
- Certification
- DBA Levels
- Becoming a Data Professional
- SQL Server Professional Development Plan, Part 1
- SQL Server Professional Development Plan, Part 2
- SQL Server Professional Development Plan, Part 3
- Evaluating Technical Options
- System Sizing
- Creating a Disaster Recovery Plan
- Anatomy of a Disaster (Response Plan)
- Database Troubleshooting
- Conducting an Effective Code Review
- Developing an Exit Strategy
- Data Retention Strategy
- Keeping Your DBA/Developer Job in Troubled Times
- The SQL Server Runbook
- Creating and Maintaining a SQL Server Configuration History, Part 1
- Creating and Maintaining a SQL Server Configuration History, Part 2
- Creating an Application Profile, Part 1
- Creating an Application Profile, Part 2
- How to Attend a Technical Conference
- Tips for Maximizing Your IT Budget This Year
- The Importance of Blue-Sky Planning
- Application Architecture Assessments
- Transact-SQL Code Reviews, Part One
- Transact-SQL Code Reviews, Part Two
- Cloud Computing (Distributed Computing) Paradigms
- NoSQL for the SQL Server Professional, Part One
- NoSQL for the SQL Server Professional, Part Two
- Object-Role Modeling (ORM) for the Database Professional
- Business Intelligence
- BI Explained
- Developing a Data Dictionary
- BI Security
- Gathering BI Requirements
- Source System Extracts and Transforms
- ETL Mechanisms
- Business Intelligence Landscapes
- Business Intelligence Layouts and the Build or Buy Decision
- A Single Version of the Truth
- The Operational Data Store (ODS)
- Data Marts – Combining and Transforming Data
- Designing Data Elements
- The Enterprise Data Warehouse — Aggregations and the Star Schema
- On-Line Analytical Processing (OLAP)
- Data Mining
- Key Performance Indicators
- BI Presentation - Client Tools
- BI Presentation - Portals
- Implementing ETL - Introduction to SQL Server 2005 Integration Services
- Building a Business Intelligence Solution, Part 1
- Building a Business Intelligence Solution, Part 2
- Building a Business Intelligence Solution, Part 3
- Tips and Troubleshooting
- SQL Server and Microsoft Excel Integration
- Tips for the SQL Server Tools: SQL Server 2000
- Tips for the SQL Server Tools – SQL Server 2005
- Transaction Log Troubles
- SQL Server Connection Problems
- Orphaned Database Users
- Additional Resources
- Tools and Downloads
- Utilities (Free)
- Tool Review (Free): DBDesignerFork
- Aqua Data Studio
- Microsoft SQL Server Best Practices Analyzer
- Utilities (Cost)
- Quest Software's TOAD for SQL Server
- Quest Software's Spotlight on SQL Server
- SQL Server on Microsoft's Virtual PC
- Red Gate SQL Bundle
- Microsoft's Visio for Database Folks
- Quest Capacity Manager
- SQL Server Help
- Visual Studio Team Edition for Database Professionals
- Microsoft Assessment and Planning Solution Accelerator
- Aggregating Server Data from the MAPS Tool
A data professional is probably one of the most cautious information technology workers there is. We know that our systems “live” for quite a long time the platform they run (like SQL Server) are not upgraded every month, year or even every five years. We know that when the database server is down, it affects not only one or two users or applications, but potentially dozens, hundreds or even thousands of them.
So it follows that with an older system and lots of folks depending on it, a data professional shouldn’t just slide the DVD of a new version of SQL Server and type “Setup”. There’s a bit more work that we need to do before we decide to take the plunge and upgrade an Instance of SQL Server.
Faced with a new version of SQL Server, you should evaluate whether it makes sense for your organization and for that Instance of SQL Server in particular. In every upgrade to the product, SQL Server has more security enhancements and features, better performance and other features that you may want to implement. Depending on your licensing model, you may be able to upgrade your software without additional costs, or it may take more money to legally own the product.
Once you’ve determined that you want to upgrade your system, there are a few steps you should evaluate for the process. Even with the tools provided by Microsoft (which you should run) there are things you should do to make the upgrade successful. I break the steps down into six general phases of operation.
First Phase: System Review
I start by reviewing the documentation from Microsoft for the upgrade. I do this when the product comes out, even before I decide to upgrade or not. This is a data-point that helps me understand what would be involved for instance, a particular hardware setup may not be supported any more, or perhaps a feature I’m using is no longer supported. In that case, knowing the documentation can help me to plan to buy new hardware or change over the technology I’m using to another strategy.
After I’ve read the upgrade documentation from Microsoft, I’ll often do a quick web search to see if anyone has documented their experiences from the same kind of upgrade. I’ll hit the social media sites (like FaceBook, Twitter or LinkedIn) and ask if anyone there has had any experiences with that situation.
From there, I take a look at my documentation for the SQL Server Instance. I’ve explained how to do a SQL Server “Application Profile” before, and that’s what I use here. This also tells me who is on my system, and who will be affected by the upgrade.
I develop an estimate of the time I think it will take to perform the upgrade, usually building in all of the steps I list out here. That’s what I communicate to my users, unless my system is using Database Mirroring, Log Shipping or a Cluster, in which case I might be able to do a non-downtime upgrade but that’s another tutorial.
Next, I download and run the SQL Server Upgrade Advisor. This is a tool that has been around since SQL Server 2005, and it’s essential that you run it to gain confidence in the upgrade. It’s a fantastic tool, and I’ll reference the link for it at the end of this article.
Second Phase: Back-Out Strategy
With all of the information in hand and my users notified, I next focus on what happens if things don’t go as planned. After all, the data professional is a nervous soul with a focus on being paranoid, so we expect failure and are thrilled when things actually work.
To that end, I start with a complete database backup for every database I don’t rely on last night’s backup. If I can, I stop the applications and take the backups with nobody on the system. I backup all of the system databases, meta-data databases and user databases completely, and I verify the backups. This is my primary security if the upgrade just destroys the system, which of course is a pretty remote possibility. But I’ve had systems from mainframes to microcomputers and every platform from DB/2 to Oracle and SQL Server give me issues on an upgrade, although as time goes on that happens less and less.
There are times when this isn’t possible, or necessary. Once again, if you’re using a Database Mirror or Cluster, you may be able to perform the upgrade with little or no downtime. You might have a database so large that backing it up completely would take longer than you have available for the upgrade. In those cases, more planning and coordination is probably needed.
I also like to have a complete Operating System backup when and where I can. Sometimes that’s not possible, such as when the system is used for more than just SQL Server, or when that would lengthen the window that you need to do the upgrade. The reason I do like to have this is that in many cases the upgrade to SQL Server involves an upgrade to the Operating System as well, so I like to have a really good fallback. In some shops I’ve been able to take a “bare metal” backup, which is kind of a snapshot of the hard drive in a certain state. Love those. This is also a great place for Virtual Machine technology a simple click and you’ve got a “snapshot” of the system to fall back to.
The point here is to think through (before you touch anything) what you would need to do to get the system back into the shape it is before you start. Taking the time to have a good plan here is essential. If things go south you can fix it, and you can give your nervous users an estimate of when your system will be available.
Third Phase: Perform the Upgrade
Users know what is going on, I’ve learned what I need to know, and I’ve made the system as safe as possible. I’m ready to make changes to my system.
Based on what I learned from the documentation and the Upgrade Advisor, I may or may not need to make changes in the Operating System such as patches, settings and so on. I make those next. Sometimes the upgrade process downloads and applies those automatically, which is another reason I like that OS backup.
Now I run the upgrade process, normally by just sliding the DVD in the drive and running the Autoplay feature, or by clicking on Setup. I watch the process, and note any messages. I’ll review those in a moment.
If there are any issues, the system normally rolls back pretty well. But just in case, I have all of those backups ready to restore.
Fourth Phase: Configure New Features
Just after the upgrade completes, I start the system and ensure everything comes up properly. I’ll evaluate that more fully in a moment, but I still have some changes to make.
The new version probably introduces features that need to be configured, from an operational or security standpoint. Based on the documentation I’ve read, I’ll know what those are. This is the time to make those changes if I test first, and then make changes to the system I’ve negated the test. So I have to configure everything here first.
I normally also run maintenance again here. I don’t take a backup, since none of the data has changed, but I do run the standard DBCC commands and I update the statistics on the indexes. This last step isn’t always necessary, but I do it anyway. This is also a kind of test it ensures that whatever maintenance I have still works.
Fifth Phase: Test and Verify
Now I can fully test the system. I start with a reboot, to ensure everything comes up. Again, this is only needed if I don’t have Mirroring or Clustering or some other in-place strategy.
After that I review the Windows Event logs, looking for anything out of the ordinary.
SQL Server setups and upgrades always create a log file of their actions. At the end of the setup and upgrade program the log locations are displayed, as well as in the documentation I read in the first step. I review those to ensure the upgrade didn’t report anything unusual.
I then check the SQL Server Error Logs, and look for anything unusual there.
After all my checks are made, I allow a small group of users back on the system and have them check the “main” parts of the software packages that run against the database. Depending on how critical and complex the database is, this might be a very formal set of tests or a series of major steps in the applications.
As a final check, I make sure I can get back in to the system with the Dedicated Administration Connection, or DAC. I have the system isolated, so it’s a great time to test that this still works.
Sixth Phase: Return to Production
Now I let everyone back on to the system, and stay close by for monitoring.
Speaking of monitoring, when the users come back online I start my baseline monitoring to compare against my earlier numbers with any luck, the new version should be faster, and I should be able to prove that out here. If you do this as well, make sure you let the system run for a while with the users on before you monitor so that the cache buffers are all primed up.
Following this thought process will help you develop your own list of things to consider again, you configuration will be different, probably for each server you upgrade. But thinking it through will help you have a successful upgrade.
InformIT Articles and Sample Chapters
If you’ve never documented your systems, now is the time. I show you how in this overview called The SQL Server Runbook.
Books and eBooks
Formal processes like these are included in ITIL which you can read about in Implementing ITIL Configuration Management.
Online Resources
The Microsoft Upgrade Advisor for SQL Server 2008 is here. You can do a web search for other versions.