all groups > sql server replication > december 2005 >
You're in the

sql server replication

group:

Snapshot Replication - locking .


Snapshot Replication - locking . Rebecca York
12/7/2005 4:46:53 PM
sql server replication: Hi,

I have a problem at the moment with replication.

Publisher & distributer - SQL2000 Server
Subscriber - SQL2000 Server
Transational Replication


Here is a simplified schema.

CREATE TABLE ClientData ( CID CHAR(17) primary key , Code1 VARCHAR(6) NOT
NULL , otherFields varchar(10) Null )
CREATE TABLE InternalLookup ( ILookupID INT PRIMARY KEY ,
InternalDescription VARCHAR(50) NOT NULL )

CREATE TABLE ClientLookup ( Code1 VARCHAR(6) PRIMARY KEY , ClientDescription
VARCHAR(50) NOT NULL , ILookupID INT NULL )

CREATE TABLE InternalData ( IID INT PRIMARY KEY , CID CHAR(17) NOT NULL
UNIQUE , ILookupID INT NULL )

All these tables are located and maintained locally on our lan servers.


ClientData - contains the records sent by the client, this is imported from
files they ftp to us. It has children tables that are related by
CID(char17).

ClientLookup - is a distinct list of Code1 Records and their descriptions,
ILookupID is edited Manually based on out own internal lookup descriptions.

InternalLookup - is our own internally maintained list of records, these
belong to a 3NF schema and contains multiple client information.

InternalData - Our own version of the client data, converted to 3NF, child
tables are now linked by IID, not CID.

InternalData contains apx to 500,000 records, with the distribution of Code1
at about 5-10%.

InternalData is replicated to a read-only subscriber which is hosted on a
remote webserver.


Sometimes the client sends Code1 in ClientData before we get the record in
ClientLookup and so, for a period of time we do not know which record in our
system it needs to be mapped to.


When we find out what Code1 is, it is mapped in InternalLookup and
InternalData is updated for the affected records - which is where the
problem lies.

Because the records are updated in one update statement - a lock is put on
the subscriber, the commands are sent to the subscriber one command at a
time, and then the lock is released.

This freezes the front end until the subscriber has received all the
commands for that transaction - other than upgrading to SQL2k5 Enterprise
and using Row versioning, is there anyway to stop this lock being placed?
Creating a loop to write the updates would be possible, but it would take an
age to update the table.



Thanks








RE: Snapshot Replication - locking . Paul Ibison
12/8/2005 4:08:03 AM
Please see my reply to your post 'replication locking...'.
Cheers,
Paul Ibison, SQL Server MVP
AddThis Social Bookmark Button