- 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
I’ve covered the concepts of Microsoft SQL Server Replication in a previous overview, so if you’re not familiar with the various terms and processes regarding Replication, make sure you check that article out first (pun intended). I’ll use those terms and concepts in this tutorial, and I’ll show you how to build a working replication scenario from end-to-end in this article.
I’ll begin with the same definition I explained in the overview:
A Publisher has a Publication which is composed of Articles that are sent by the Distributor to one or more Subscribers which have Subscriptions.
In this tutorial, I’ll show you how to set up replication, and then how you can watch the replicated data move from one system to another. A word of caution here, however. Setting up Replication makes changes to your system that cannot be undone without running a few stored procedures for cleanup. That’s not a bad thing; it just means that once your system is set up for Replication it will always be there unless you do some more work. That doesn’t mean that it will always replicate data somewhere, just that it can. The “plumbing,” so to speak, stays with the Instance of SQL Server from then on without extra steps.
This means that if you want to follow along with this example, you should ensure that you are using a test system that you don’t care about. This example sets up all parts of the Replication structure (Publisher, Distributor, Subscriber) on one system, so it’s a perfect place to use Virtual PC (which is free) from Microsoft to set up a test system. That way it isn’t on your domain, doesn’t affect your other clients and so on. You can also use that software to create “snapshots,” so that you can do this again and again. I cover that software for use with SQL Server in this article.
OK — you’re on a test system, that you don’t mind completely re-installing if you had to. I don’t think it will come to that, but I just want to emphasize that you don’t want to try this simple test using your production system. I’m going to set this up in such a manner that you can follow along using only one SQL Server 2008 Instance — Standard Edition or higher. I’ll set up a simple Transactional replication system, which means that as I add data to a table at the source (Publisher), the data (Article) will queue up and be sent (Distributor) to the destination (Subscriber). I’ll use a Push method, meaning that the Subscriber will get the data automatically without having to ask for it. There are, of course, lots of other arrangements, but this is what I’m after in this simple example.
The first step in setting up Replication is to ensure that you have the SQL Server Agent service running on all systems involved. In my case, that’s only one box, but in production all of the systems need to have Agent running. You can find that out by looking in SQL Server Management Studio at the SQL Server Agent node. If the Agent is running, you’ll see a green arrow next to the icon, and if not, you can right-click that node to start it.
The next thing you’ll need to do is ensure that you have network connectivity between the systems in the Replication schema — that means that the Publisher, Distributor and all Subscribers can all see each other on the network.
Finally, you need to make sure that the Publisher and Distributor have enough room to store the data that will be transferred. Depending on the kind of Replication you choose, you’ll need at least as much as the Articles being transferred available in addition to the database storage itself. I can’t emphasize this enough — over 80% of the problems I see with Replication involve the Agent service not running or a space issue.
I’ve done all that, and now I’m ready to start my example. First, I’ll need a database to hold the data I’ll replicate out. You can use any of the sample databases, but I’ll keep this simple and make a small table that holds only a few values so that I can watch it work as I go. Here’s the code I run on the system I designate as the Publisher (which is of course the same in this case as the Distributor and the Subscriber!):
/* Source Database */ CREATE DATABASE SourceDatabase; GO USE SourceDatabase; GO /* Table for source data */ CREATE TABLE SourceDataTable (c1 int PRIMARY KEY, c2 VARCHAR(25)) GO /* Destination Database */ CREATE DATABASE DestinationDatabase; GO USE DestinationDatabase; GO /* Table for source data */ CREATE TABLE DestinationDataTable (c1 int PRIMARY KEY, c2 VARCHAR(25)) GO /* Insert some data: Note the SQL Server 2008 syntax with repeating VALUES, won't work in lower versions */ USE SourceDatabase; GO INSERT INTO SourceDataTable VALUES (1, 'Thing One'), (2, 'Thing Two'), (3, 'Thing Three') SELECT * FROM SourceDataTable; GO
Now I’m all set, and everything is ready for the Replication Wizards. I open SQL Server Management Studio (SSMS) and right-click the Replication Node and select Configure Distribution from the menu that appears:
That brings up a Welcome screen, so I click Next there to bring up the Distribution Node configuration panel.
Here I’m leaving the system as the test system I’m working with, but in practice it’s often best to separate out the Publisher, Distributor and of course the Subscribers. I click Next here to bring up the Agent configuration panel, which states not only that the Agent must be set to Auto-start, but it must have administrator privileges on my system.
It does, so I click Next here to bring up the panel that sets the location for the snapshot. As you’ll recall from the Overview article, all Replication needs a “starting point,” so it sends over a complete copy of whatever data you’ll replicate, known as a snapshot. Since I’m going to push out the data, I can leave this set to my local drive. If I wanted the clients to be able to ask for the data (called a Pull Subscription), I would have to place the snapshot on a network share that the Distributor and the Subscribers could all access.
I’ll leave this location as-is for this test, and click Next to bring up the Distribution database creation step. The distribution database will accept all of the data transfers (the individual Article rows) that will replicate down to the Subscribers.
I click Next there to bring up the panel that sets the servers that can use the Distributor I’m creating. Again, this is normally done against multiple servers, but in this case I’ll just leave this same server as the one that can Publish to this Distributor.
Clicking Next here brings me to the panel that will either do the work, save the steps to a script, or even both.
After I click Next and then Finish on the final panel, the system configures itself to be a Distributor, and to grant rights to the system I named to be the Publisher. It also configures the Agent as requested.
Now I’m ready to start replicating my data. I’ll stay in the Replication node in SSMS, and then right-click the Replication node again, and then select New and then Publication from the menu that appears.
You can also right click the Local Publication sub-nodes, and either one will bring up the welcome panel on the Wizard. I click next there to show the Publication database selection.
Here I select SourceDatabase and click Next.
Now I select the type of Replication I want. In this case, I want each line of data sent to the Subscribers just after I enter them, so I’ll pick Transactional Replication and then select Next.
In this panel I select the data I want to transfer — the Article. As you’ll recall from the Overview article, that can be a table, view, or even Transact-SQL code. I’ll keep it simple for this example, and send the entire table, which in this case happens to be duplicated on the Subscriber. That doesn’t have to be the case, but I’ll cover that in other tutorials. Clicking Next after those selections brings up the Filter panel.
This allows me to send only the rows that meet a certain criteria, but I want them all so I’ll just click Next to bring up the Snapshot Agent schedule.
I want the snapshot to be taken immediately, but in a production situation this might bog the system down so I might schedule it for later if that were the case. Click Next here brings up the panel that sets the security for the snapshot. I’ll enter my domain information.
After I fill in that information and click Next, I’m brought to the Wizard completion panel where I can set the action to happen or script again. I click Next there and then I’m brought to the summary panel.
Here I have to name the Publication so that I can track it later. I’ll call it TestReplication and then click Finish, and watch the progress.
The first half of the process is now complete. My Distributor is ready, the Publisher is set up to use it, and I have an Article that has been set up with a snapshot and a “watching” Agent job. All that I need now is a Subscriber to ask for the data.
I’ll create that on the same test system, but of course you’ll normally do this on another Instance of SQL Server. In SSMS, under the Replication and then Local Subscriptions node, I right click and select New Subscription from the menu that appears.
Click Next at the Welcome Panel brings up the selection for the Publication I want — note that I select the Publication, not the Articles.
After I make that selection, the Next button brings up the push or pull method of subscribing. Since I want the data as soon as it is entered, I make that selection.
Clicking Next on this panel brings up the databases where the data will end up. I make my selection for the DestinationDatabase.
Clicking Next here brings up the panel that sets the Distribution security, just as I did earlier. I’ll enter my domain credentials again.
Clicking Next here brings me to the scheduling tab. If I want the data to pile up at the Distributor and then go out periodically, I would select a schedule here, but I want the data immediately, so I leave the default selection.
Clicking Next on this panel brings up the selection for when I want the Subscription to start – and I want it now, so I leave the default selection and click Next.
I get the choice to do the previous actions or script them, and I click Next and then Finish on the summary panel. My subscription is now running.
To check that, there are several graphical tools in SSMS, but I’ll just perform a simple SELECT statement to see if the snapshot data went from the Publisher to the Subscriber. I’ll also enter some data and then watch it replicate as well:
/* Check the data to ensure the snapshot worked */ USE DestinationDatabase; GO SELECT * FROM DestinationDataTable; GO /* Insert more values, watch the transfer */ USE SourceDatabase; GO INSERT INTO SourceDataTable VALUES (4, 'Thing Four'), (5, 'Thing Five'), (6, 'Thing Six') SELECT * FROM SourceDataTable; GO USE DestinationDatabase; GO SELECT * FROM DestinationDataTable; GO
There you have it — a simple Replication example. In future tutorials I’ll cover more complex, real-world examples, but this process should give you everything you need to begin experimenting with your own.
InformIT Articles and Sample Chapters
If you want to play with Replication in SQL Server 2005, check out the sample chapter Enterprise Data Management in SQL Server 2005
Books and eBooks
More information on Replication for SQL Server 2005 is in my book, Administrator's Guide to SQL Server 2005.
Online Resources
The official SQL Server Replication information from Microsoft is here.