- 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
It’s becoming more common to work on a team of technical professionals that are not in the same office, building, or even the same country. While the entire team is affected when they are not co-located, this situation brings up an interesting set of considerations for the data professional. In this article I’ll cover some tips and tricks I’ve learned along the way when I’ve been both a worker and a manager of development teams and data professionals.
Working in a distributed team can be challenging, especially if it is a change in the way your team has worked before. You might have had a larger team that changed its footprint, and that might cause some stress on a personal level. Or perhaps you are the one that has been brought in to a current team. That can be stressful as well.
Or perhaps you’re the lead technical resource or manager of a team that is now distributed. You have to juggle not only the tasks at hand, but personalities and even schedules that span the globe.
The key for the entire team is to realize that the point is to work together to solve problems. If you can keep that as the primary focus, it can actually be a rewarding experience. If you make getting your way, or doing things in a certain manner the focus, you can end up quite frustrated no matter what your role. I try and learn from everyone I can, so no matter how I work, I gain professional experiences that help me.
I’ll explain a few of the common concepts to keep in mind regardless of how your distributed team is arranged. I’ll follow on with some specific information for certain team configurations.
Common Attributes
No matter how your distributed team is arranged, some functions are essential for success. The order actually matters here — as I’ve worked in multiple teams I’ve seen these attributes become pivotal in importance to make sure everyone gets the work in on time, on budget and produces a quality product.
Coordination
The first step in a distributed team is to clearly identify the responsibilities and handoffs each member or location has to the other. For instance, when the distributed team is arranged in a component fashion (more on that in a moment), the testing team might be in a different location than the data development team. I’ve worked in several companies where the testing team is on a 12-hour offset from the development teams, allowing testing to be done at night (or during the day, if you’re in the testing team) and the development to be done during the day. It’s important in that case to have all of your code checked in by a certain time, and that the testing team starts on the code at a certain time.
While that specific example might be obvious, it illustrates the need for coordination. I’ve actually had code tests run on the wrong set of code for just this reason — the lack of coordination.
So the first place to start, whether you’re the manager or the worker on a distributed team, is to have a clear line of sight as to the responsibilities each team has. The less clarity here, the more friction between the teams and the more errors you introduce into the application.
It all starts, as always, with clear specifications. From there, the planning and tasks document (sometimes a formal project plan) are more essential when the team is distributed, since everyone is not always available to answer questions. If each team is empowered to make decisions for their area because of the coordination you have in place, each function can be autonomous for their area of responsibility.
And that brings up the next critical component — communication.
Communication
You might think that communication is not only a given, but should go first in this list. But in fact, communication is not always a given, even when we think that we’re doing a good job with it. I heard an interesting comment when I mentioned this fact in some training I gave a team I was leading:
“Well, it goes without saying that we need good communications between our teams.”
In fact, it had gone without saying — which was why we had to have the training. I had to teach the team to over-communicate, meaning that they had to put more information on wiki’s, in project documents, specifications and the like. The more verbose and clear you are (with a focus on clear more than verbose) the better the code will be, and the better the team will get along.
You might be tempted to pick a single communication method and enforce it. I’ve been on teams that required all communication through the check-in and check-out code control system. I’ve been at others that used wiki’s, web sites and project documents. I’ve found that no single system works. When possible, pick up a phone or video-chat package, use a chat client, Facebook posts, whatever you can that fosters constant chatter.
In some cases the communications for a particular item may be important enough to use an e-mail or other formal, recordable method, especially if it involves a code change. But for questions, comments and clarifications it’s essential to let the team find whatever methods work for them.
As a team, decide on the templates, T-SQL and other coding standards that you will follow and communicate them often. I’ve seen pitched battles over teams that implemented even error handling code in different ways. Agree to those standards, and communicate them clearly.
Collaboration
That being said, you should establish some clear guidelines on that communication, and the processes and procedures that go with it. I’ve used everything from SharePoint to a simple file directory structure to ensure that the team has a central, authoritative place to go to provide the latest updates, schedules and the like. While communication tools shouldn’t be restricted, you should pick a single collaboration tool, train the team on it, and use it.
In the collaboration tool, make sure you re-use as much collateral as possible. For those T-SQL templates and standards, point to a single corporate resource rather than copying them into the tool. That way you won’t get “drift” between projects and you’ll make everything better when you update the core location of the resource.
Collaboration also includes inter-personal skills, cross-training and shared purpose. Once again, the key is to recall that the entire team should focus on solving the problems at hand. When that focus drifts, the team will not collaborate as well.
I’m often asked about meetings. They are inevitable from time to time, but it’s important to realize that the inconveniences because of them should be shared.
I once was in charge of a global DBA team across a large company. We had DBAs in Europe, China the USA and South America. No matter what time I scheduled a meeting, someone was up early in the morning or late at night. My solution was to hold the meetings at a different time each month, inconveniencing one group at a time. If it’s a more temporary arrangement, that may not make sense for you. The important thing is to keep the meetings to a minimum, make them valuable for every single person that attends, and keep them short.
It’s worth investing in inexpensive web-cams so that each member of the team can see the other person as they speak. Studies have shown there is a stronger team connection when visible contact is made. And a stronger connection means that your team will work better together — and that brings us back to focusing on that common goal.
Modalities
Along with those common elements of working in distributed teams, the makeup of the team can make a difference. As the data professional, you’ll often be pivotal to the development effort, so it’s important for you to know how the team is constructed, and to what end. Knowing how your team functions is critical for helping you work with them in the best way.
Component Functions
The team may be constructed along functional lines. That means there will be one location that houses the User Interface (UI) developers, another for the testing function, and another for the data function. One or more of these may actually be co-located.
In this situation, the coordination phase mentioned earlier is paramount. It’s very simple to start “bleeding over” in a team’s function, especially on the data layer. For instance, which team will create the initial data design, who will write the stored procedure code, or even decide when server-side code (like stored procedures) will be used over dynamic SQL statements being sent from the client code? It’s vital to wall these decisions off early when you’re using this distributed team arrangement.
Phase or Workload
Another method of arranging a distributed team is by the phase of the work or the workload. I’ve seen testing in a development organization be a shared resource, so when the testing is required for an application the testing team is grafted in to the product team in this case.
Important considerations for this type of distributed arrangement include really clean documentation, a form of communication. Consider the team that comes into the project — if they have to get the histories and status directly from others, there is a chance of miscommunication, vague information, or even worse, different team members getting different information.
So in this type of team you want to ensure that you are keeping the documentation up to date, readable, and as complete as possible.
Temporary Skill Purchase
This is one of the easiest distributed teams to work in. I’ve most commonly been involved in this arrangement when we need “creative” talent, such as artwork, design and so on.
Even though this is a simple type of distributed component, it is fraught with danger. The most important implement you can have on this type of team is a requirements document. It forms the basis of the work the other team will do — in effect and in actuality, you’re contracting work to be done. If the other team is professional (and you should only deal with that kind) they will have legal counsel, and the requirements forms the basis of the contract you write with that team. You’ll have to pay for the work, even if they “get it wrong”, if your requirements are unclear — and that’s only fair. So take extra time on your requirements, and make them as detailed as they need to be.
Another important factor in this type of arrangement is to have a good fall-back plan if things go wrong. Since you’re contracting out, your schedule is probably impacted heavily if the other team does not deliver on time, or has to re-do any work that isn’t acceptable. Don’t make your schedule so brittle that this would sink the project.
Even with all these complexities, working within a distributed team can be a rewarding experience and you can learn a lot from the process. Not only that, but this new way of working is inevitable, and you will most likely face it in your career. Learn the information you need to make it successful for you, and you’ll be able to show that skill as a value to your employers.