- 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
This is part two of a series that I’m covering as a monitoring exercise for longer-running (not necessarily performance-related) activities. You can find Part One here.
To recap, I’m looking at monitoring two broad categories of activities on my server:
- Maintenance From how long each backup takes to index reorgs and rebuilds, this information is invaluable.
- Jobs and Scheduled Tasks Most all of us have SQL Server Agent Jobs, and developing a schedule of how long they are running is also useful. This bucket also includes things like replication, Database Mirroring on so on.
Of course, this is in addition to the monitoring I normally do for my queries and hardware and platform bottlenecks to determine how tune my server. The monitoring for these longer-running actions (such as backups) is primarily to facilitate server planning, capacity management and even disaster recovery efforts.
I mentioned in the first tutorial in this series that you have a couple of options for this information you can look at it “real time,” meaning just running whatever query you want and looking at the data, or you can store the data for historical analysis. For my money, it makes more sense to store the data, and I’ll store it in SQL Server. In fact, I’ll store it in the SQL Server Central Management System (SQLCMS) that I created in another series of articles that you can read here on InformIT.
I also mentioned that there are multiple ways of collecting the data:
- Querying the system databases and tables in SQL Server
- Querying the system functions and stored procedures in SQL Server
- Querying the Dynamic Management Views (DMV’s)
- Accessing the Performance Monitor (or Windows System Monitor) counters and objects
- Using the Windows Management Interface
- Accessing the Windows Event Logs
- Reading the SQL Server Error Logs (lots of ways to do this, from T-SQL functions to text file reads)
- Reading other system log files or mechanisms
In this tutorial I’ll show you an example of a few of these methods, so that you can develop your own.
Agent History Example Using SQL Server System Tables and Views
I’ll show you the example query that I have that uses the SQL Server System Tables and Views to grab data. You can find more examples in my series on performance tuning, Backups and Recoveries, and the SQLCMS. For instance
The items to pay attention to here are that I had to join a couple of tables to get this information it gets even more difficult if you’re using a Maintenance Plan created by the Wizards. That information is involved in different joins based on the version of SQL Server you are running. This is also a bit of a challenge with Replication there are multiple tables there as well.
But not to despair there are lots of tables, functions and views you can use to find this information. Most everything that deals with the SQL Server Agent is in the msdb database, and a quick web search reveals the queries you can use. As always, research anything you find on the web to ensure that the query is safe and accurate.
Notice also the way I’ve gathered the time information for this query separating out the date formats as needed, because of the kind of data this query returns. That brings up another good point. To the best of your ability, lay out all of the things you want to track, and then an example of the results you’ll get from your chosen collection method. Then ensure the target database can handle the type of data that you need to store. Another option is to use multiple tables based on what you’re storing and a key to join it all back. That allows more flexibility for the target, and this is what I’ve been doing lately.
Here’s that query I don’t have the INSERT statements from it, since I’m actually using the bcp method I mentioned earlier. Feel free to try this on a test server (remember, always on a test server):
/* SQL Server Agent Example Finds information using system tables */ USE msdb GO SELECT jobs.name AS JobName ,steps.step_name AS StepName , CONVERT(CHAR(10), CAST(STR(steps.run_date,8, 0) AS dateTIME), 111) AS DateRun , STUFF(STUFF(RIGHT('000000' + CAST ( steps.run_time AS VARCHAR(6 ) ) ,6),5,0,':'),3,0,':') AS TimeRun , steps.run_duration AS StepDurationinSeconds FROM sysjobhistory steps INNER JOIN sysjobs jobs ON jobs.job_id = steps.job_id ORDER BY steps.run_date, steps.run_time GO
The ORDER BY isn’t strictly necessary, of course, since the storage order isn’t guaranteed anyway.
There are a few ways to find out how to join up the tables like I’ve done here. In some cases the join information is right inside Books Online something you can look up easily to figure out the relationships with the system tables. Another method is to do a web search on the goal of your query or the actual table name itself. This can be problematic you’re never sure of the skill level of the person you’re reading, or whether you’re looking at the right version and edition of the product. Over time these relationships might change (although that’s not very common) so you want to be careful with that approach.
I actually follow another approach I open SQL Server Profiler and capture the statements run against my test server. Then I open SQL Server Management Studio and drill either into the Standard Reports or the Graphical Interface and look at the Transact-SQL (T-SQL) that it runs against the server.
Uptime Using Windows Management Instrumentation (WMI) or Event Logs
Another method you can use to track longer-running activities is Windows Management Instrumentation or WMI calls. This has a few firewall, security and other ramifications, but it has the advantage of being able to get to just about anything running on a Windows box. It isn’t always easy to learn WMI queries, but as I mentioned earlier I’m using PowerShell (version 2.0) for these examples, which makes it pretty easy to use WMI.
I’m using the following query to get the uptime for the various SQL Server processes on my server. Keep in mind there are a few security implications for using WMI, which I’ll link to at the bottom of this tutorial. You can also use other tools for the WMI queries; I just find PowerShell to be more user-friendly:
forEach ($process in (Get-Process | where {$_.name -eq "sqlservr"})) { $uptime=(get-date).Subtract($process.starttime); write-Host $process.Path $uptime.Days $uptime.hours $uptime.minute $uptime.seconds }
This is run on each server, and shows me the time the service has been up and running. For saving this data as a variable and then inserting that data into a SQL Server table, check out my tutorial series here on working with PowerShell and SQL Server.
Using the Logs from Windows
Another great source of information about processes on the system are the Windows Event Logs. There are several Event Logs, from the “System” log to the “application” log. There are also other logs that can be created, but these are the main ones to look at. In specific, SQL Server stores a great deal of information
$ServerStart =foreach ($InstanceStarted in (Get-EventLog -LogName application | Where-Object { $_.eventID -eq 17126})) {write-host $InstanceStarted.Source " started at " $InstanceStarted.TimeGenerated} $ServerStop = foreach ($InstanceStopped in (Get-EventLog -LogName application | Where-Object { $_.eventID -eq 17148})) {write-host $InstanceStopped.Source " stopped at " $InstanceStopped.TimeGenerated}
There are some interesting things to note here – What I’ve done is to set a variable for the start times from the log I’m interested in called $ServerStart. I then loop through the “Application” Event log looking for event id 17126. This is a startup message for SQL Server. I write out the start time for that Instance. From there I perform the same process for event 17148 for the stop time. Then I can calculate the difference between the two.
Something to keep in mind is that the service might have actually failed with another error code, so this might not be the most trustworthy method. I actually don’t use this method anymore for uptime, but I do use it for other information that I want to track. I’m showing it here so you can see how to get the time variables.
Once again, I write this out and then put it up into SQL Server from bcp.
Using the SQL Server Error Log
The SQL Server “Error” logs are actually a text-based report on far more than just errors. It has some great information, including the start and stop times. By default, the error log is located at Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG, but you can set that, so it’s important to track where you installed it.
The same caveat for tracking start and stop times applies here it’s possible to have a really bad failure and the log not be written to for the stop times. However, you’ll probably know pretty quickly if your server crashes and this monitoring isn’t intended for that kind of thing anyway.
You can use multiple methods to read a text file the important thing is that you’re looking for the start and stop times. They are just at the top of the file, and just there at the bottom. I actually use PowerShell (surprise surprise) and search for the text “all Rights” as in “All Rights reserved”. It appears a second or two (close enough for what I need to know) after the server boots. You could also look for the master database to come online, a particular database and so on, all depending on what you want to know. With PowerShell this is a simple command, but you can use any number for tools to open, read and search for strings. Here’s what I do, again running from the directory where the log sites:
cat ERRORLOG | select-String –pattern “All Rights”
The first 22 characters are the date and time, and there you have it. You can use this method as I mentioned to search within the ErrorLog for other information that you would like to track.
Other Object to Track
It doesn’t stop there. Using the methods I’ve described in this short series you can gather information of lots of other longer-termed events in SQL Server, such as:
- Backups
- Transaction-log shipping
- Mirroring numbers
- Replication
Y mucho mas. I’ll leave it to you to try these simple tips and come up with your own methods.
InformIT Articles and Sample Chapters
I mentioned the Windows Management Interface in this update. You can get a wealth of information about this technology in Programming with Windows Management Instrumentation.
Books and eBooks
And there’s tons of info on WMI in the books Developing WMI Solutions: A Guide to Windows Management Instrumentation and Windows Management Instrumentation (WMI).