Comments
13 comments
-
Hmm... that obviously shouldn't be happening if the keys do actually match. What datatype are the columns that make up your comparison key?
Also, am I right in thinking you're comparing two live databases here, rather than backups?
Thanks,
Robert -
I'm experiencing the same thing, though this is the 1st situation where I know for sure it's happening.
I'm comparing two tables with identical schemas, one on the local (2005) machine, and one on a remote (2000) machine.
I'm using a 2-field index as a key, and because the tables involved are large (1.2 billion rows) and the suspect portions are relatively small, I'm using a WHERE clause on the key to limit the area checked. (Yes, this is the same pair of tables I discuss 3 threads after this one)
When I limit the fields to compare to JUST the keys, the comparison results are thus (a only, diff, b only, same):
92599, 0, 0, 566192 (total 658,791)
This is what I expect to see. However, if I allow it to match ALL fields, then these are the numbers I get:
636788, 36, 544189, 21967 (total 1,202,980)
Needless to say, this freaked me out big time until I figured out that it wasn't real.
So, at this point, I can't use the program to sync these two tables; all I can do is use it to generate inserts for the keys, send it to a file, and manipulate it to build a list of keys to feed into a query to bcp out of the one database and into the other.
The behavior is duplicable every time right now; I'd be happy to work with you in the next couple of days to track down what's causing the glitch.
BTW, after reading another post I think I should add --though it shouldn't have anything at all to do with it -- that the 2005 table is partitioned, the 2000 is not. All data being compared is in the same partition. -
Charles,
This definitely sounds like something isn't working as it should. To help us attempt to replicate this it would be useful to know the datatypes of the 2 fields in the key. Presumably the WHERE clause is filtering using both these fields. The more information you can give us the better.
Regards
Chris -
Table Definition:
CREATE TABLE [dbo].[cider_detail]( [trsource] [char](1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [sourceid] [int] NOT NULL, [subscriberid] [smallint] NOT NULL, [logon] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [clientnum] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [accountnum] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [accountid] [int] NULL, [datetime] [datetime] NULL, [Date] [datetime] NULL, [Time] [datetime] NULL, ...and a bunch more (27 fields total) ) ON [psCider]([trsource])
Indices:CREATE NONCLUSTERED INDEX [IX_cider_detail_sourceid] ON [dbo].[cider_detail] ( [trsource] ASC, [sourceid] ASC )WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [psCider]([trsource]) CREATE CLUSTERED INDEX [ix-clust_cider_detail_sub_date] ON [dbo].[cider_detail] ( [subscriberid] ASC, [Date] ASC, [Time] ASC )WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [psCider]([trsource])
(of course, on the 2000 machine, they're on a filegroup, rather than a partition scheme)
WHERE clause:trsource='f' and sourceid between 49428637 and 50087444
trsource/sourceid form a unique key for this group of records (though it is not guaranteed unique for all values of trsource)
That's all I can think of now that might be relevant; please feel free to request any other specific info. -
Just looking at your numbers there I'm not sure the WHERE clause is working as you expect it to on the database that is in 'a'.
566192 (your key only total) = 544189 + 36 + 21967 + (3 which I assume is the database being used)
So the in1 (a) values are the rest of the database.
I'd check how you've got the WHERE clause setup in the tables & views tab of the options. Apart from that have a look at the .sdc file itself which is in XML and there is a set of 'User actions' at the bottom of the file where the WHERE clause should also be - to make sure it's in there correctly. -
Sorry guys, we fixed our issue but I neglected to post a resolution.
We discovered a couple of option settings that managed to resolve the issue although I can't say for sure why. If you are in Edit Project and click on options, we checked all the boxes in the Comparison Behaviour section. Specifically Trim Trailing Spaces and Force Binary Collation.
Hope that helps -
kevin wrote:We discovered a couple of option settings that managed to resolve the issue
You managed to duplicate the problem!
You couldn't duplicate it with those options set...
I had started off with none of the comparison options checked. I checked the top two (trim, force), no change. I tried it with the 3rd (show) checked, still no result. I unchecked "show" just so I could force the 4th (use) to be checked, then re-checked it so that all 4 boxes show checked...and still no diffrence. It didn't solve the problem on my system. -
Any more ideas? This is a pretty important table to us, and it would be nice to know that the product we're considering buying will do what we need it to.
Thanks! -
I've created your table on a test server and populated it with 100,000 rows of test data covering the WHERE clause ranges and I can't seem to get it to fail in the way you're seeing.
Like I said before it's as if when you include all the extra columns for comparison it stops using the WHERE clause. I was confused by your comment of 'Needless to say, this freaked me out big time until I figured out that it wasn't real.' - what do you mean it wasn't real?
Also can I check you're using SQL Data Compare 6.
If you can send me your .sdc project files to richard.mitchell@red-gate.com
I'll have a look at them and see if there is anything obvious wrong with the user actions.
Not sure what else to suggest at the moment as it doesn't seem to be a schema problem. The only other thing is if you have strange characters in your other columns names. You can run a profiler on the database in both situations to see exactly what SQL SDC6 is sending to request the rows - that may help. -
I'm sorry, Richard, I totally missed your post right before Kevin's! My fault.richardjm wrote:I was confused by your comment of 'Needless to say, this freaked me out big time until I figured out that it wasn't real.' - what do you mean it wasn't real?richardjm wrote:Also can I check you're using SQL Data Compare 6.richardjm wrote:If you can send me your .sdc project filesrichardjm wrote:You can run a profiler on the database in both situations
Thanks again! -
Charles wrote:BTW, It's a bit classier than one of my products where it brings up a cheap pong game
Oh, how fun -- it *is* a game! Turns into a little puzzle after a while. I like it! -
Problem solved. Yes, I was doing something stupid. :oops:
I had been making changes to the WHERE clause and didn't want to lose track of them, so the code looked something like this:fld1 = 'x' and fld2 between 100 and 300 --fld2 between 50 and 600
Bad decision to use that style of comment -- you never know what's going to be appended to it! Indeed, it was coming out as:fld1 = 'x' and fld2 between 100 and 300 --fld2 between 50 and 600 ORDER BY fld1,fld2
Of course, the ORDER BY was commented out!
Adding an extra blank line after the comment would fix the problem, but if you must include a comment, it's safer to use this style:fld1 = 'x' and fld2 between 100 and 300 /*fld2 between 50 and 600*/
so there's a definite closure.
Strangely, list compares work much better when the two lists are in the same order.... :roll:
Thanks for the help, guys! -
I just saw your email with the details. Like I said I'd never have thought of people putting comments into the WHERE clause however we should certainly cope with it.
The SQL Profiler would have shown that up in it's trace I'm sure of it.
We must replace that game at some point too, there's a nice bug in it where it's only actually solvable 50% of the time :twisted:
Glad it's working for you and I'll place a bug in our system to get it patched for the next release.
Add comment
Please sign in to leave a comment.
This occurs on Tables or Views and in keys which are one or many fields so i can't seem to narrow it down to anything in particular.
Anything I'm missing ?