Replication is an advanced feature of Microsoft SQL Server, allowing you to move data and schema changes from one database server to another. In this article, I’ll show you how to set up transactional replication in a simple environment using SQL Server 2005. Subsequent articles in this series will discuss maintaining and troubleshooting transactional replication and replicating code modules.
The examples in this article are based on SQL Server 2005 Service Pack 1. Although this article isn’t intended to be a comparison of features between versions 2000 and 2005, I will underline the improvements that I consider worth observing. This article teaches you how to set up transactional replication using wizards and scripts. In most cases, you’ll set up the initial publication and subscribers using wizards; however, if you need to apply the same publication in multiple environments, you’ll appreciate the option of applying the scripts as opposed to going through wizards time and again.
Configuring a Distributor
SQL Server 2005 introduced numerous welcome improvements to replication, not the least of which is shorter wizards. Following a wizard isn’t difficult, but fewer wizard screens certainly make replication setup quicker. As a rule, replication wizards in SQL Server 2005 are nearly 50% shorter than those in SQL Server 2000.
The first step in configuring replication is designating a server that will take care of storing and delivering replicated transactions—the distributor. A single server can act as a publisher, distributor, and a subscriber, all at the same time. However, in a realistic scenario you’re likely to use two different servers as publisher and subscriber. Using a separate server as the distributor can help to reduce the load on the publisher.
To invoke the Configure Distribution Wizard, connect to an instance of SQL Server by using the SQL Server Management Studio (SSMS), navigate to the "replication" folder, right-click this folder, and choose Configure Distribution from the pop-up menu. Replication wizards are no longer modal; that is, you can continue working with SSMS while the wizard is active. The first screen of the wizard simply informs you of the tasks that this wizard can help you to accomplish. If you don’t ever want to see this screen again, simply check the option to skip the introductory screen in the future.
The next screen asks whether you want to use the local server or a different server as the distributor (see Figure 1).
If you want to use a remote distributor, you must first run the Configure Distribution Wizard on that server. For this example, I’ll use the same instance as both publisher and distributor. The next screen allows you to specify the snapshot folder where data and schema of the published database will be stored (see Figure 2). By default, the snapshot folder is called ReplData and is created within the directory where the current SQL Server instance is installed.
Notice the warning in the dialog box, indicating that the current directory doesn’t support pull subscriptions. To use pull subscriptions, you need a network folder for storing snapshots. Because both publisher and subscriber instances of SQL Server in this example will reside on the same computer, I can safely disregard this message, and simply click Next.
The following screen allows for configuring the distribution database’s name and the location for its data and transaction log files. By default, the distribution database is called distribution; you can modify the name if you have a compelling reason to do so. For example, if you have dozens or hundreds of publications, you might want to have multiple distribution databases, with descriptive names for each one. The wizard will use the default location for database and log files. You can configure the default location on the Database Settings tab in the Server Properties dialog box in SSMS (right-click the server and choose Properties to access the dialog box). Alternatively, you can change file locations in the wizard, as shown in Figure 3.
The next screen enables servers to use the current distributor when they’re configured as publishers (see Figure 4). This screen has a couple of interesting options. First, if you click the ellipsis (...) button next to a publisher, you’ll get a dialog box that allows you to configure the log reader agent’s security credentials as well as the snapshot folder for this publisher, as shown in Figure 5.
Second, the Add button allows you to add a SQL Server or Oracle publisher. This feature is worth your attention because using the distribution database for an Oracle publisher wasn’t available in previous versions.
After you’ve enabled the publishers, you can set a password for remote publishers (see Figure 6). You must enter the same password twice. SQL Server 2005 allows the administrator to enforce password policies and password expiration. Hence, the wizard warns you that the password you enter for a remote publisher must meet the password policy requirements.
After you click Next on this screen, you can configure distribution right away, save the script for later execution, or perform both actions. If you choose to save the script, you’ll be asked for the location where you want to save the file. At this point, the wizard presents a synopsis of the steps it’s about to undertake; once you click Finish, the wizard will create the script for adding a distributor and/or save the script, depending on what you specified.
Listing 1 shows a script for configuring a distributor and adding a publisher.
Listing 1 Sample script for configuring a distributor and adding a publisher.
use master GO exec sp_adddistributor @distributor = N’server\instance’, @password = N’’ GO /* create and configure distribution database */ exec sp_adddistributiondb @database = N’distribution’, @data_folder = N’C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data’, @data_file_size = 4, @log_folder = N’C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data’, @log_file_size = 2, @min_distretention = 0, @max_distretention = 72, @history_retention = 48, @security_mode = 1 GO use [distribution] if (not exists (select * from sysobjects where name = ’UIProperties’ and type = ’U ’)) create table UIProperties(id int) if (exists (select * from ::fn_listextendedproperty(’SnapshotFolder’, ’user’, ’dbo’, ’table’, ’UIProperties’, null, null))) EXEC sp_updateextendedproperty N’SnapshotFolder’, N’C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\ReplData’, ’user’, dbo, ’table’, ’UIProperties’ else EXEC sp_addextendedproperty N’SnapshotFolder’, ’C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\ReplData’, ’user’, dbo, ’table’, ’UIProperties’ GO /* add a publisher */ exec sp_adddistpublisher @publisher = N’server\instance’, @distribution_db = N’distribution’, @security_mode = 1, @working_directory = N’C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\ReplData’, @trusted = N’false’, @thirdparty_flag = 0, @publisher_type = N’MSSQLSERVER’ GO
Once you’ve configured the distribution database, you can read or modify the distributor properties by right-clicking the replication folder and choosing Distributor Properties. The resulting dialog box has two pages—a "general" page and a "publishers" page. The "general" page allows you to view distribution database properties and modify settings for transaction retention and/or history retention (see Figure 7).
Notice that you’re also allowed to create and configure a queue reader agent from this screen. The queue reader agent is beyond the scope of this article.
The "publishers" page of the Distribution Database Properties dialog box lets you add a publisher or change existing publishers’ properties.