Sunday, December 28, 2014

Oracle Data Compare v2 with support for Oracle 12c released

A new version of the Oracle Data Compare with full support for Oracle 12c and many other improvements is now available for download from our site: http://www.xsql.com/download/oracle_data_compare/

If you have an active maintenance you may download and use the new version of the Oracle Data Compare with the current license.

Send questions and comments to support@xsql.com

xSQL Schema Compare v5 released

We released a new version of our Schema Compare SDK with full support for SQL Server 2014, improved schema filters and some minor bug fixes. You can download the new version of the Schema Compare SDK from: http://www.xsql.com/download/sdk/sql_server_schema_compare/

If you have an active maintenance or a current Gold Subscription you can simply download and use the new version with the license you have.

As always, comments and suggestions are greatly appreciated.

Tuesday, December 9, 2014

SQL Server Compare tools - new build available

New builds of xSQL Schema Compare and xSQL Data Compare are available for download. The new Schema Compare build includes:
  • some improvements in the user interface such as a new ribbon control, improved docking, tabs and UI style;
  • A fix for an issue with the TEXTIMAGE_ON table clause - it now performs additional checks and only includes the clause when it is required by the table script;
  • A fix for a dependency issue between tables and stored procedures that occurred when the compatibility level was set to SQL Server 2005.
The new build of the Data Compare includes:
  • improvements in the user interface such as a new ribbon control, improved docking, tabs and UI style;
  • improved data grid for displaying row differences.
Both compare tools can be downloaded together as one package from our site at: http://www.xsql.com/download/sql_server_comparison_bundle/

If you are interested in acquiring a license you can either purchase a perpetual license from our site at http://www.xsql.com/order/sql_server_comparison_bundle/ or you can purchase a silver subscription that includes 5 tools or the gold subscription that also includes the xSQL Schema Compare SDK.

Wednesday, November 26, 2014

New RSS Reporter for SQL Server released

We just released a completely redesigned, new version of RSS Reporter for SQL Server. New and/or improved features of version 4 of the RSS Reporter for SQL Server include:
  • Atom or RSS feeds: standard, customizable, Atom or RSS feeds that can be consumed from any connected device.
  • SQL Server 2014 support: full support for all editions of SQL Server 2005, SQL Server 2008/R2, SQL Server 2012, and SQL Server 2014.
  • Fully customizable feeds:  all predefined job and database feeds are fully customizable, you can choose which fields to include/exclude from the field by modifying the web.config file.
  • Significantly improved query feeds: ad-hoc query feeds now have title templates, field labels, ability to set a url for a feed item and more.
  • Admin interface: provides a convenient way for the administrators to create or manage RSS Reporter users and the feeds associated with each user.
  • Simplified licensing: per user, unlimited SQL Server instances, unlimited feed readers.
You can download the new version from: http://www.xsql.com/download/rss_reporter/

Monday, October 20, 2014

Give the gift of SQL tools and enter to win an iPad

From now until November 30, 2014 purchase a new license for any of our tools or a new subscription (http://www.xsql.com/order/) and you will get:
  1. a second license/subscription (the same) at no additional cost to give to a friend
  2. a chance to win an iPad during our end of year holiday drawing
You must use the code GGOTTF14 on checkout - plug in the code into the "Discount" textbox on the shopping cart page.
 
We will send you the second license within 2 business days from the time you purchase the first license.

Wednesday, August 20, 2014

Free Silver Subscription today and tomorrow - treasure hunt

Today and tomorrow only (August 20 and 21 of 2014), you can get a free 6 months Silver Subscription license that includes 4 of our most popular tools, xSQL Schema Compare, xSQL Data Compare, Script Executor and xSQL Builder, normally $249. To get the license you will need to first find the discount code which is composed of the first letter of the third feature (under the "Features" section on the product page) of the following products in order: xSQL Schema Compare, xSQL Schema Compare SDK, xSQL Data Compare, xSQL Script Executor, xSQL Profiler, xSQL Documenter, xSQL Builder, xSQL RSS Reporter - so the code will have 8 letters. Once you find the code then do the following:
  • go to the Purchase / Silver Subscription
  • select the SN6M-1L1U (Single-User, 6-Month license) 
  • on the shopping cart page plug in the discount code that you identified above and click on "Apply Discount" - that will subtract the full $249 from the price
  • proceed with the checkout to obtain your license.
Rules:
  • One license per customer.
  • Licenses cannot be resold or transferred.
  • Do not publish the code - any licenses obtained by individuals that did not visit each of the 8 product pages above will be invalidated.
  • The deal expires on 11:59 PM EST on August 21, 2014
Post any comments and/or suggestions here please - we will respond as promptly as we can.

Monday, June 23, 2014

xSQL Schema Compare - Entity Filters

In cases when the two SQL Server databases being compared have a large number of objects and you know that a good percentage of those objects are the same on both of those databases it may be beneficial to only compare a subset of the objects.

xSQL Schema Compare provides a very flexible and powerful facility called entity filters that allow you to specify which objects you wish to compare and synchronize based on the object type and the name of the object. An example of an entity filter is shown in the screen shot below:
Entity filters can be accessed from the context menu of the comparison results grid. Once a schema filter is set, it's definition is stored in the comparison session so if you run the same compare again you do not need to redefine the filters.

Wednesday, April 9, 2014

xSQL Builder V5 with support for SQL Server 2014 released

We just released a new version of xSQL Builder with full support for SQL Server 2014. In addition of supporting SQL Server 2014, the new version also adds support for schema filters and filegroup mapping. You can download the xSQL Builder v5 from our site: http://www.xsql.com/download/sql_database_deployment_builder/

xSQL Builder allows SQL Server developers and particularly software publishers to automate the deployment of SQL Server databases to their clients eliminating the need for the client to have any advanced computer knowledge other than simply executing a package.

xSQL Builder supports SQL Server 2014, SQL Server 2012, SQL Server 2008/R2, SQL Server 2005.

Thursday, April 3, 2014

Schema Compare new build - schema filters are back

A new build of xSQL Schema Compare for SQL Server is available for download now. Here is what the new build brings:
  • Adds the new entity filters for schema compare UI and schema compare command line. The entity filters can be accessed from the context menu of the comparison results grid. Filter definitions are stored as part of the comparison session so you only need to set them once.  
  • Fixes an issue with extended properties associated with view columns.
  • Fixes an issue with cyclical dependencies
  • Minor user-interface improvements
xSQL Schema Compare supports all editions of SQL Server from SQL Server 2005 to SQL Server 2014 and it is completely free (no strings attached) for SQL Server Express.
 
You can download the new build from our site: http://www.xsql.com/download/sql_server_comparison_bundle/
 

Tuesday, March 18, 2014

SQL Server max memory and number of processors by edition

SQL Server scale limitations, maximum memory and maximum number of processors utilized for each edition and version of SQL Server, from SQL Server 2005 to SQL Server 2014, are presented in this one page, easy to print pdf document:  http://www.xsql.com/content/SQL_Server_Max_Memory_And_Processors_By_Edition.pdf

The information contained in the document has been collected from publicly available sources and is presented as is. If you find any inaccuracies or misrepresentations in the document please contact us.

While you are here, take a few minutes to check out our recently released xSQL Schema Compare and xSQL Data Compare tools - they are the best tools for the job and they are totally free for SQL Server Express, no restrictions, no limitations.

Monday, March 10, 2014

xSQL Compare Bundle V5 with support for SQL Server 2014 released

We just released version 5 of our SQL Server comparison and synchronization tools, xSQL Schema Compare and xSQL Data Compare, with full support for SQL Server 2014. The release notes provide a more detailed description of what's new in this version. Here is a summary:
  • SQL Server 2014 support: full support for SQL Server 2014 including all new and improved SQL Server 2014 objects such as memory-optimized filegroups, memory-optimized tables, hash and range indexes, columnstore indexes, memory-optimized table types, natively-compiled stored procedures, primary and secondary selective xml indexes, Xml index and namespace paths, etc.
  • New comparison options:  in xSQL Schema Compare you can now choose to include/exclude database filegroups and memory-optimized tables from the comparison and synchronization, whereas in xSQL Data Compare you can now choose to include/exclude from the comparison memory-optimized tables and columnstore tables.
  • Filegroup mapping: xSQL Schema Compare version 5 introduces filegroup mappings feature that allows you to easily handle complex database comparison scenarios involving databases with different filegroup structures.
  • Improved workspace: consistent look, feel and functionality in both comparison tools the xSQL Schema Compare and the xSQL Data Compare; new coloring scheme for comparison sessions allowing you to better organize the comparison sessions in the workspace; separate tab for schema snapshots etc.
xSQL Schema Compare V5 supports SQL Server 2014, SQL Server 2012, SQL Server 2008/2008R2, and SQL Server 2005.
 
xSQL Data Compare V5 supports SQL Server 2014, SQL Server 2012, SQL Server 2008/2008R2, SQL Server 2005, and SQL Server 2000.
 
You can download the new version of the comparison tools as one package from: http://www.xsql.com/download/sql_server_comparison_bundle/

Thursday, February 6, 2014

How to script a SQL Server database object using xSQL Schema SDK

Using the xSQL Schema Compare SDK it is very easy to generate the CREATE, DROP and ALTER (when alter is supported) scripts for any database object. The following example shows how to generate the CREATE script for the table Employees from the AdventureWorks database:

using xSQL.Schema.Core;
using xSQL.Schema.SqlServer;
using xSQL.SchemaCompare.SqlServer;

namespace xSQL.Sdk.SchemaCompare.Examples
{
    class Scripting
    {
        /// <summary>

        /// This method reads the schema of the database AdventureWorks and scripts the table Employee.
        /// </summary>
        public static void Script()
        {
            SqlServer server;
            SqlDatabase database;
            SqlTable table;
            ScriptingOptions options;
            try
            {
                //--create the SQL Server object

                server = new SqlServer(@"(local)");

                //--create the database object

                database = server.GetDatabase("AdventureWorks");

                //--attach an event handler to database.SchemaOperation event in order to get progress information during the schema read

                database.SchemaOperation += new EventHandler<SchemaOperationEventArgs>(database_SchemaOperation);

                //--read the database schema

                database.ReadSchema();

                //--create scripting options;

                options = new ScriptingOptions();
                options.CreateScript = true;
                options.DropScript = false;
                options.AlterScript = false;

                //--locate and script the Employee table

                table = database.SqlTables["HumanResources", "Employee"];
                if (table != null)
                    Console.Write(table.GetScript(options));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        private static void database_SchemaOperation(object sender, SchemaOperationEventArgs e)
        {
            //--exclude verbose messages

            if (e.Message.MessageType != OperationMessageTypeEnum.Verbose)
                Console.WriteLine(e.Message.Text);
        }
    }
}

Tuesday, February 4, 2014

Step by step - compare and sync two sql database schemas in your .NET app using xSQL SDK

Step 1: reference the three namespaces required by xSQL Schema Compare SDK
      using xSQL.Schema.Core;
      using xSQL.Schema.SqlServer;
      using xSQL.SchemaCompare.SqlServer;


Step 2: Create the SqlServer objects for the left and right SQL Server
      SqlServer xServer, yServer;
      // create the left SQL Server object - let's assume you are using Windows authentication

      xServer = new SqlServer(@"(local)\LeftServer");
      // create the right SQL Server - let's assume you are using SQL Server authentication

      yServer = new SqlServer(@"(local)\RightServer", "<user>", "<password>");

Step 3: Create database objects for the two databases being compared
      SqlDatabase xDatabase, yDatabase;
      // create the left database

      xDatabase = xServer.GetDatabase("Source");
      // create the right database

      yDatabase = yServer.GetDatabase("Target");

Step 4: Create the schema comparer object
      SqlSchemaCompare comparer;
      comparer = new SqlSchemaCompare(xDatabase, yDatabase);


Step 5: (optional) Change the comparison options if you need to
      comparer.Options.CompareUsers = false;
      comparer.Options.CompareSchemas = false;
      comparer.Options.CompareDatabaseRoles = false;
      comparer.Options.CompareApplicationRoles = false;


Step 6: (optional/recommended) it is a good practice to attach event handlers to some of the schema events in order to get progress information during the comparison.
      comparer.LeftDatabase.SchemaOperation += new EventHandler<SchemaOperationEventArgs>(database_SchemaOperation);
      comparer.RightDatabase.SchemaOperation += new EventHandler<SchemaOperationEventArgs>(database_SchemaOperation);
      comparer.SchemaOperation += new EventHandler<SchemaOperationEventArgs>(database_SchemaOperation);


      private static void database_SchemaOperation(object sender, SchemaOperationEventArgs e)
      {
            //--exclude verbose messages             if (e.Message.MessageType != OperationMessageTypeEnum.Verbose)
                  Console.WriteLine(e.Message.Text);
      }


Step 7: Compare the schemas of the two databases
      // step 1: read the schema
      comparer.ReadSchema();

      // step 2: pair the database objects

      comparer.PairObjects();

      // step 3: compare the database schema

      comparer.Compare();

      // check for errors that could have occurred during the schema compare.

      // some errors are handled quietly and do not stop the process; those that are critical throw exceptions
      // quiet errors are collected and stored into the ErrorRepository object
      if (ErrorRepository.Instance.HasErrors())
      {
            Console.WriteLine("Some errors occurred during the database compare");
            Console.Write(ErrorRepository.Instance.GetErrors());
      }

      // check the database status; exit if no schema differences are found.

      if (comparer.SqlDatabasePair.ComparisonStatus == ComparisonStatusEnum.Equal)
            return;


Step 8: Generate the synchronization script for the target database and execute it (let's assume here that the right database is the target - you can substitute left for right if the left database is your target)
      // get the T-SQL script intended for the right database; that is the script that should be executed
      // on Target database to make it the same as the Source database
      sqlScript = comparer.GetRightDatabaseScript();
      if (!sqlScript.IsEmpty())
      {
            // print the synchronization log

            Console.Write(sqlScript.GetLog());
            // print the synchronization script

            Console.Write(sqlScript.GetScript());
            // attach event handlers to ScriptManager object to get some progress info during the script execution

            sqlScript.SchemaScriptExecuting += new EventHandler<SchemaScriptEventArgs>(sqlScript_SchemaScriptExecuting);
            // execute the sync script

            status = sqlScript.Execute();
            // check the execution and print any errors

            if (status == ScriptExecutionStatusEnum.Succeeded)
            {
                  Console.WriteLine("Database synchronization finished successfully");
            }
            else if (status == ScriptExecutionStatusEnum.Canceled)
            {
                  Console.WriteLine("Database synchronization was canceled");
            }
            else
            {
                  // check for errors

                  if (ErrorRepository.Instance.HasErrors())
                  {
                        Console.WriteLine("Some errors occurred during the script execution");
                        Console.Write(ErrorRepository.Instance.GetErrors());
                  }
            }
      }

      private static void sqlScript_SchemaScriptExecuting(object sender, SchemaScriptEventArgs e)
      {
            Console.WriteLine("{0} {1}", DateTime.Now.ToString("HH:mm:ss"), e.Script);
      }


Step 9: Catching exception. All exceptions are listed here for clarity, but you can reduce this section by catching just the top-level Exception
      catch (ConnectionException ex)
      {
            // a connection exception

            Console.Write(ex.ToString());
      }
      catch (SchemaException ex)
      {
            // a schema-read exception

            Console.Write(ex.ToString());
      }
      catch (SchemaCompareException ex)
      {
            // a schema compare exception

            Console.Write(ex.ToString());
      }
      catch (ScriptExecutionException ex)
      {
            // a script execution exception

            Console.Write(ex.ToString());
            Console.WriteLine("Script fragments that failed:");
            foreach (string err in ex.Errors)
                  Console.WriteLine(err);
      }
      catch (Exception ex)
      {
            // a generic exception

            Console.WriteLine("An unexpected error occurred.");
            Console.Write(ex.Message);
      }


You are done - your app can now compare and synchronize the schemas of two databases and it took you 5 minutes! And here it is, all of it in one place to make it easier for you to copy and paste:

using xSQL.Schema.Core;
using xSQL.Schema.SqlServer;
using xSQL.SchemaCompare.SqlServer;

namespace xSQL.Sdk.SchemaCompare.Examples
{
    class Examples
    {

        /// <summary>

        /// This example demonstrates a typical database comparison scenario.
        /// </summary>
        public static void SimpleCompare()
        {
            SqlServer xServer, yServer;
            SqlDatabase xDatabase, yDatabase;
            SqlSchemaCompare comparer;
            ScriptManager sqlScript;
            ScriptExecutionStatusEnum status;
            try
            {
                // create the left SQL Server object using Windows authentication

                xServer = new SqlServer(@"(local)");

                // create the right SQL Server using SQL Server authentication

                yServer = new SqlServer(@"(local)", "<user>", "<password>");

                // create the left database

                xDatabase = xServer.GetDatabase("Source");

                // create the right database

                yDatabase = yServer.GetDatabase("Target");

                // create the schema comparer

                comparer = new SqlSchemaCompare(xDatabase, yDatabase);

                // exclude some database objects

                comparer.Options.CompareUsers = false;
                comparer.Options.CompareSchemas = false;
                comparer.Options.CompareDatabaseRoles = false;
                comparer.Options.CompareApplicationRoles = false;

                // attach event handlers to these events in order to get some progress information during the schema read and compare

                comparer.LeftDatabase.SchemaOperation += new EventHandler<SchemaOperationEventArgs>(database_SchemaOperation);
                comparer.RightDatabase.SchemaOperation += new EventHandler<SchemaOperationEventArgs>(database_SchemaOperation);
                comparer.SchemaOperation += new EventHandler<SchemaOperationEventArgs>(database_SchemaOperation);

                // step 1: read the schema

                comparer.ReadSchema();

                // step 2: pair the database objects

                comparer.PairObjects();

                // step 3: compare the database schema

                comparer.Compare();

                // check for errors that could have occurred during the schema compare.

                // some errors are handled quietly and do not stop the process; those that are critical throw exceptions
                // quiet errors are collected and stored into the ErrorRepository object
                if (ErrorRepository.Instance.HasErrors())
                {
                    Console.WriteLine("Some errors occurred during the database compare");
                    Console.Write(ErrorRepository.Instance.GetErrors());
                }

                // check the database status; exit if no schema differences are found.

                if (comparer.SqlDatabasePair.ComparisonStatus == ComparisonStatusEnum.Equal)
                    return;

                // step 4: get the T-SQL script intended for the right database; that is the script that should be executed

                // on Target database to make it the same as the Source database
                sqlScript = comparer.GetRightDatabaseScript();
                if (!sqlScript.IsEmpty())
                {
                    // print the synchronization log

                    Console.Write(sqlScript.GetLog());

                    // print the synchronization script

                    Console.Write(sqlScript.GetScript());

                    // attach event handlers to ScriptManager object to get some progress info during the script execution                     sqlScript.SchemaScriptExecuting += new EventHandler<SchemaScriptEventArgs>(sqlScript_SchemaScriptExecuting);

                    // execute the sync script

                    status = sqlScript.Execute();

                    // check the execution and print any errors

                    if (status == ScriptExecutionStatusEnum.Succeeded)
                    {
                        Console.WriteLine("Database synchronization finished successfully");
                    }
                    else if (status == ScriptExecutionStatusEnum.Canceled)
                    {
                        Console.WriteLine("Database synchronization was canceled");
                    }
                    else
                    {
                        // check for quiet errors

                        if (ErrorRepository.Instance.HasErrors())
                        {
                            Console.WriteLine("Some errors occurred during the script execution");
                            Console.Write(ErrorRepository.Instance.GetErrors());
                        }
                    }
                }
            }
            catch (ConnectionException ex)
            {
                // a connection exception

                Console.Write(ex.ToString());
            }
            catch (SchemaException ex)
            {
                // a schema-read exception

                Console.Write(ex.ToString());
            }
            catch (SchemaCompareException ex)
            {
                // a schema compare exception

                Console.Write(ex.ToString());
            }
            catch (ScriptExecutionException ex)
            {
                // a script execution exception

                Console.Write(ex.ToString());
                Console.WriteLine("Script fragments that failed:");
                foreach (string err in ex.Errors)
                    Console.WriteLine(err);
            }
            catch (Exception ex)
            {
                // a generic exception

                Console.WriteLine("An unexpected error occurred.");
                Console.Write(ex.Message);
            }

        }
        private static void database_SchemaOperation(object sender, SchemaOperationEventArgs e)
        {
            //--exclude verbose messages

            if (e.Message.MessageType != OperationMessageTypeEnum.Verbose)
                Console.WriteLine(e.Message.Text);
        }

        private static void sqlScript_SchemaScriptExecuting(object sender, SchemaScriptEventArgs e)
        {
            Console.WriteLine("{0} {1}", DateTime.Now.ToString("HH:mm:ss"), e.Script);
        }
    }
}

//


You can download xSQL Schema Compare SDK from: http://www.xsql.com/download/sdk/sql_server_schema_compare/

Thursday, January 16, 2014

New xSQL Documenter with full support for SQL Server 2012 released

We have just released a new version of  xSQL Documenter:
  • Full support for SQL Server 2012, Analysis Server 2012, Report Server 2012 and Integration Server 2012
  • Improved diagrams with GraphWiz
  • Dropped support for SVG diagrams
  • Ability to exclude synonyms and sequences in Oracle
  • Bug fixes
If you have an active maintenance agreement you do not need to contact us, you will receive a new license for this version of the xSQL Documenter in the next two days.
 
You can download the new version from: http://www.xsql.com/download/database_documenter/  Notice that there are 3 different packages for download depending on which set of the SQL Server Client tools you might have installed on your machine. Also, each package contains 2 builds, a 64 bit version and a 32 bit version.