Introduction
The following review covers a function that is the bane of any DBA's life,
that being database synchronization. This particular tool covers all
database DDL, there is another product for data synchronisation that will be
covered in a future review.
Environment
My PC - (where the SW is running) is a P4 1.2,
256Mb RAM, Windows 2000 Pro
The test database I used in all cases has the
following properties: 631 tables (131 triggers and associated audit tables), 152
views, 680 stored procedures, 656 indexes, 23 functions.
The servers used are HP E800 NetServer, 1Gb RAM,
2xRAID-1 15K drives, Dual PIII 800Mhz running Windows 2003 Enterprise Server Ed.
The instance is SQL Server 2k EE SP3a.
Installation
There is nothing technical in the installation, follow the prompts, pick a
folder and that is it. De-installation was error free and complete.
Using AdeptSQL Diff
Test 1 - Compare Databases
Total time: 15 sec average
The product is very quick indeed and first time around I left my desk for
lunch as I do with other products currently on the market. The initial
screens are simple enough, asking you for two connection strings or if its the
same instance, then check a option and select the other database (no double
entering, its simple but this sort of thinking flows through the entire
application - a nice change!). The user is presented with the
following screen after the compare:
The overall interface takes a while to get used to and I tend to forget the
colour coding, but this is expected with any new software. All items shown
are hooked to pop-ups reminding you of the primary and secondary servers and
what you are actually comparing. I had no issues with the comparison, no
errors or warning or missing objects.
The main screen summarises from the primary server point of view (you
cant switch this around), this is little matter and presents a clean, susinct
view of the database. We are shown a summary of the comparison:
The blue colouring indicates the object is on the primary, but not the
secondary server. The red coloured text (see extended properties) is the
reverse of this. Click the filter button and hide identical objects to
make life easier, especially in my case. Note that the indexes list doesnt
show indexes partaking in constraints, namely primary key indexes. To get this,
drill through at the table level. Double click to refresh the right hand
panel showing the differences, again all colour coded; the information is
presented instantly to the user.
There are a range of editor, compare and schema
options providing a good selection of control over the product and its scripting
options. Some of the nicer options include:
a) eliminate redundant indexes
b) choice of including fill factors,
filegroups, extended properties
c) retrieve all objects (any owner) or we
can filter on specific owners
d) insert statements - can control how
statements are batched, and if column list is always specified
e) turn on/off quoted identifiers, ansi-nulls
f) switch between MS Visual Studio or
Borland Delphi key mappings (nice!)
on changing any of these options the compare
results are quickly refreshed for immediate review.
Test 2 - Sync and Scripting Databases
Scripting is very simple and again lightning fast. In your left panel,
select any part of the tree shown (drill down as required) and push the left or
right buttons with green arrows (left button - script changes to be made on the
primary server and visa versa for the right button). The generation
of my entire secondary server sync script was under 2 seconds, very impressive.
The generated script is shown it a custom different sql script window,
that allows the user to step through, begin/end transactions, skip current
selected statements, bulk comment out code, breakpoints (very handy) etc.
This is somewhat different to other products that generate a complete package of
code with the transactions all built in. As you would think, the script is
full editable:
Be very careful in this window, it is easy to make mistakes and with no
explict transactions. I was feeling game so I ran the script presented to
sync my secondary database. Unfortunately, I had errors, the first being
an attempt at dropping a primary key but this was not possible due to other
foreign key references. The script stops, and points you at the statement
that caused the error, I skipped over the error, carried on then hit others
related to this:
alter
table
dbo.contract_question_rule
alter
column
contractquestionrule_parameter_blob text
go
the error being of course:
I get a little nervous now as I am not sure that skipping statements is
resulting in more issues later on, or simplying skipping items that I actually
want synchronised. I was also presented with errors related to inserts
over identity columns. Overall, I wasnt too impressed with the results of
the script run and skipping around issues left me with a bad taste of "where is
my backup" to get back to square one..
Test 3 - Sync Specific Object Types
A full sync didn't really work for me, so I opted for individual object
types, namely tables then views etc. My first attempt was all tables, the
script generated very quickly, but on running the script I got foreign key
errors related to a table that is actually created later on in the script.
Again, this is not ideal and made life much harder.
Technical Support
Support is via email or via their website feedback form.
Conclusions
Due to its speed, I had early hopes for this product. I have used a
variety of other comparison tools on the market and none compare to AdeptSQL's
raw performance. What let this particular product down though was in the
running of synchronisation scripts. The DBA is after a single script that
takes into consideration foreign keys, object dependencies etc, that can be run
as a single unit of work and be done with it. From my tests to date, the
product had some issues in this area that made synchronisation a painful
experience. That said, the product has huge potential and would definitely
keep an eye on its progress in future versions.
Ratings
Ease of Use | 4 | A very easy to use product that is simple, quick and accurate on the comparisons. |
Feature Set | 4 | A good set of options that make sense, simple to understand the see the impact of. |
Lack of Bugs | 1 | Too many issues with the final scripts, so much so I couldn't use the product to perform a synchronisation. |
Value | 2 | Unfortunately due to the issues I was presented with in the large scale sync, the value wasnt really there for me. For $240US at the time of this review and v1.09, I would wait a couple more releases and try again. |
Technical Support | N/A | Did not review |
Documentation | 2 | A little sparse and not overall comprehensive. Even so, the product is simple enough for the user to cover out all options in under 1hr. |
Performance | 5 | Super fast comparisons and scripting; the fastest I have seen in relation to similar market products. |
Installation | 5 | Very simple, quick and error free. It misses an automatic update option over the internet which seems to be a standard facility these days for software. |
Learning Curve | 4 | No issues here and marries up with documentation. The screens are straight forward and easy to use without loosing too much functionality. |
Overall | 2 | This product has a lot of potential, it is quick, easy to use and has all the right features. What lets it down? in my opinion the sync scripts need a lot more work as this review has shown. This is critical in very large schemas where syncing needs to be as quick and painless as possible (data issues aside of course). |
Production Information
You can download a 30 day trial of AdeptSQL Diff and Workshop from their
website: http://www.adeptsql.com/. For a change there is no signing up, no logins or emails sent, its simple,
private and well worth a look.
Addendum
From SSC Owners: We usually send the review to the vendor to see
if there are any glaring errors before we publish. In this case we forwarded to
the author, Alex Reatov, and got back some great comments. With his permission,
we are including some of those comments here. Please also note that Alex
indicated that there would a point release of the product around November 10th
that includes both fixes and new features.
In the list of features:
"(a) eliminate redundant indexes"
It would be better to skip this one: nobody (including myself) would tell you
exactly how this feature works and if it really does anything useful. You won't
see it in the new version, and it will take some very thorough thinking before
the feature would reappear in one of the future versions.
"(d) insert statements - can control how statements are batched, and if column
list is always specified"
That was a bug rather than a feature: a leftover from a different product,
AdeptSQL Workshop, which could really produce the INSERTs.
The version being reviewed, Diff 1.09, didn't work with table data, so the
INSERTs option page was completely useless.
In the new 1.50 Beta this option page is being revived, as now it can really be
linked to the SQL generation code of the new DataDiff module.
3) Instant side-by-side comparison of SQL definitions is, I believe, one of the
strong points of AdeptSQL Diff, especially when you need to see differences in
lengthy stored procedures, triggers or views. It _is_ briefly mentioned in the
review, but unfortunately none of the screenshots clearly show this side-by-side
view.
4) Drag-and-drop SQL generation doesn't add much to the functionality, but it is
neat, convenient and, AFAIK, unique among the competing tools.
You can drag-n-drop any selected items from the schema tree to the built-in SQL
editor or to any external editor supporting OLE drag-n-drop (e.g. MS Query
Analyzer). The operation can produce one of 6 different scripts
(CREATE/DROP/ALTER, in either left-to-right or right-to-left direction),
depending on various Ctrl-Alt-Shift combinations.
5) Drilling down to constraints:
"Note that the indexes list doesnt show indexes partaking in constraints, namely
primary key indexes. To get this, drill through at the table level."
About this, I just want to ask a question. You can see that certain schema
elements, specifically indexes, triggers and xprops, are shown twice in the
tree: under the table (or other object) where they belong and again under the
"Summary collections" node. It is really easy to do the same thing with table
constraints. Do you think I should do this?
6) The Code Viewer and errors in scripts.
I have to agree with Chris that code generation is the weakest part in the
current version. The program is more suitable for tracking down individual
schema changes than for automatic generation of a complete synchro script. I
tried to compensate for this by providing more powerful editing capabilities and
step-by-step execution commands.
"Be very careful in this window, it is easy to make mistakes and with no explict
transactions."
Well, the scripting window does support transactions (see the toolbar buttons
there). When you start a transaction, the editor also remembers the current
execution point and if you rollback, the execution point also rolls back to its
original location (so you can fix up the script and retry).
In v1.50, there is already an option to put an explicit transaction around any
generated script.