tag:blogger.com,1999:blog-1607070822338846302009-07-02T07:05:46.322-04:00ApexSQL KnowledgebaseTips, reviews, videos, and articles on how to get the most out of ApexSQL Tools and Microsoft SQL ServerBrian Lockwoodhttp://www.blogger.com/profile/12031458710231708487noreply@blogger.comBlogger92125tag:blogger.com,1999:blog-160707082233884630.post-70420167866355753062009-06-26T00:50:00.000-04:002009-06-26T00:55:41.851-04:00Download links to old versions<span class="fullpost"><strong>DESCRIPTION</strong></span><br />Here are the download links to the 2005 versions of our ApexSQL tools if you want to (or have been advised to by ApexSQL support) downgrade to the 2005 version<span class="fullpost">:<br /><br /><strong>LINKS</strong><br /><a href="http://www.apexsql.com/zips/apexsqlauditviewer2005.exe" target="_blank">ApexSQL Audit Viewer 2005.01</a> <br /><a href="http://www.apexsql.com/zips/apexsqlaudit2005.exe" target="_blank">ApexSQL Audit 2005.07</a> <br /><a href="http://www.apexsql.com/zips/apexsqledit2005.exe" target="_blank">ApexSQL Edit 2005.26</a> <br /><a href="http://www.apexsql.com/zips/apexsqldiff2005.exe" target="_blank">ApexSQL Diff 2005.14</a> <br /><a href="http://www.apexsql.com/zips/apexsqldoc2005.exe" target="_blank">ApexSQL Doc 2005.13</a> <br /><a href="http://www.apexsql.com/zips/apexsqlcode2005.exe" target="_blank">ApexSQL Code 2005.13</a> <br /><a href="http://www.apexsql.com/zips/ApexSQLCode2005050064.exe" target="_blank">ApexSQL Code 2005.05</a> - Supports legacy VBScript templates <br /><a href="http://www.apexsql.com/zips/apexsqlclean2005.exe" target="_blank">ApexSQL Clean 2005.09</a> <br /><a href="http://www.apexsql.com/zips/apexsqllog2005.exe" target="_blank">ApexSQL Log 2005.11</a> <br /><a href="http://www.apexsql.com/zips/ApexSQLScript2005.exe" target="_blank">ApexSQL Script 2005.11</a> <br /><a href="http://www.apexsql.com/zips/apexsqlreport2005.exe" target="_blank">ApexSQL Report 2005.02</a><br /><br /><strong>AUTHOR</strong><br />Alexey Daryin<br /><br /><strong>LAST REVIEW DATE</strong><br />26 June 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-7042016786635575306?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Alexey Daryinhttp://www.blogger.com/profile/07565087539210331732noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-76348699680938630692009-06-22T05:02:00.023-04:002009-06-22T06:12:01.470-04:00Can ApexSQL Edit 2005 and 2008 use the same Source Control project?<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />This article describes how to map your database to a Source Control system project if you want to use ApexSQL Edit 2005 and ApexSQL Edit 2008 at the same time.<span Class="fullpost"><br /><br /><strong>SOLUTION</strong><br />If you want to run ApexSQL Edit 2005 and 2008 at the same time and use the Source Control functionality for a database mapped to a Source Control project, then you should map your database to <b>different</b> Source Control projects in each ApexSQL Edit version.<br />One Source Control project should be used by ApexSQL Edit 2005 and the other one by ApexSQL Edit 2008 as on the screen shot below:<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr1-795000.PNG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 290px;" src="http://www.apexsql.com/training/uploaded_images/scr1-794994.PNG" border="0" alt="" /></a><br /><br />Such a configuration is required because both application versions handle database mappings in a different way. Using the same Source Control project for both application versions will result in a non consistent status of database objects mapped to a Source Control system.<br /><br /><b>Note:</b> If you upgrade ApexSQL Edit 2005 to 2008 you should <b>remap</b> your database to allow the new application version manage correctly a database mapped to a Source Control system. Just remove database mapping and then map your database to a Source Control again.<br /><br /><strong>SEE ALSO</strong><br /><a href="http://www.apexsql.com/training/2008/12/configuring-apexsql-edit-to-work-with.htm">Configuring ApexSQL Edit to work with ApexSQL Source Control</a><br /><br /><br /><strong>AUTHOR</strong><br />Anna Lesniak<br /><br /><strong>LAST REVIEW DATE</strong><br />22 June 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-7634869968093863069?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Anna Lesniakhttp://www.blogger.com/profile/02431393332730737446noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-66215265399087166372009-06-15T12:44:00.011-04:002009-06-18T17:12:43.781-04:00How do I get my Hardware ID?<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />This article describes the different ways you can get your hardware ID.<span Class="fullpost"><br /><br /><strong>What is a hardware ID?</strong><br />A hardware ID is a string containing a set of numbers, characters, and/or symbols that uniquely identifies your computer/server. A Hardware ID may look like this: kfEgHSUTRK=.<br /><br />It is used by ApexSQL to identify the machine you activated your ApexSQL software on.<br /><br /><strong>How do I get my machine's hardware ID?</strong><br /><br />1) You can get your hardware ID from the Activation Form that pops up when you start your ApexSQL software if you're using the trial version:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/activation_form-742070.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 304px; height: 320px;" src="http://www.apexsql.com/training/uploaded_images/activation_form-742050.jpg" border="0" alt="" /></a><br /><br />2) If the trial period of not software has not yet expired or if you're using an already activated software, you can start the application and go to Help | About to get the hardware ID:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/about_form-702697.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 210px;" src="http://www.apexsql.com/training/uploaded_images/about_form-702679.jpg" border="0" alt="" /></a><br /><br />3) If for any reason you can't access any of the above forms because you can't start your ApexSQL Software, install another ApexSQL application using the <a href="http://www.apexsql.com/download.asp">ApexSQL Installer</a>. Next, use #1 or #2 to get the hardware ID.<br /><br />4) For ApexSQL Log and ApexSQL Recover, what's activated is the server. To get the hardware ID of the server, you must first be able to connect to the server successfully. Next, use #1 or #2 to get the hardware ID. <br /><br />If the trial period has expired and you are unable to successfully connect to the server, execute the following commands on your SQL Server:<br /><br />a) For ApexSQL Log 2005<br />EXEC master.dbo.xp_ApexSqlLog 20061002<br /><br />b) For ApexSQL Log 2008<br />EXEC master.dbo.xp_ApexSqlLog2008 20061002<br /><br />c) For ApexSQL Recover<br />EXEC master.dbo.xp_ApexSqlRecover2008 20061002<br /><br />Note that ApexSQL Log or ApexSQL Recover must be installed to execute these statements.<br /><br /><strong>AUTHOR</strong><br />Janice Lee<br /><br /><strong>LAST REVIEW DATE</strong><br />18 June 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-6621526539908716637?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Janice Leehttp://www.blogger.com/profile/07336545127156403186noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-79199692404805034012009-06-12T14:12:00.007-04:002009-06-12T15:05:04.935-04:00ApexSQL Log Pre-Installation Considerations<strong>DESCRIPTION</strong><br />This article describes things you should know before installing ApexSQL Log's server-side components on your SQL Server. It enumerates what exactly is installed on your server. ApexSQL Log's installation requirements are fairly small and their overall effect on performance is negligible. <span Class="fullpost"><br /><br /><strong>What does ApexSQL Log install on my SQL Server?</strong><br /><br /><strong>A. At the file level</strong>, ApexSQL Log installs the following; these are saved in the SQL Server instance’s ‘Binn’ folder. <br /><br />For ApexSQL Log 2005: <br /><br />1) ApexSqlServerXprocs.dll - the DLL containing all extended procedures used by ApexSQL Log and other ApexSQL products with server-side components.<br />2) ApexSqlConnectionMonitor.exe - the executable for Connection Monitor component of ApexSQL Log.<br />3) ApexSqlServerHelper.exe - the executable used by ApexSQL Log extended procedures for task done externally to SQL Server process.<br />4) ApexSqlServerHelper.sys - the service executable used by ApexSQL Log extended procedures.<br />5) ApexSqlLogActivation.exe - the executable used by ApexSQL Log to keep track of activation and evaluation states. <br />6) ApexSqlLogApiActivation.exe - the executable used by ApexSQL Log API to keep track of activation and evaluation states.<br /><br />For ApexSQL Log 2008, the names were changed and ApexSQL Recover activation was added: <br /><br />1) ApexSqlServerXprocs2008.dll<br />2) ApexSqlConnectionMonitor2008.exe<br />3) ApexSqlServerHelper2008.exe<br />4) ApexSqlServerHelper2008.sys<br />5) ApexSqlLogActivation2008.exe<br />6) ApexSqlLogApi2008Activation.exe<br />7) ApexSqlRecover2008Activation.exe - the executable used by ApexSQL Recover to keep track of activation and evaluation states.<br /><br /><strong>B. At the server-object level</strong>, the following are added to the master database:<br /><br /><em>For ApexSQL Log 2005--</em><br />xp_ApexSqlConnectionMonitor<br />xp_ApexSqlConnectionMonitor_Info<br />xp_ApexSqlConnectionMonitor_Stop<br />xp_ApexSqlConnectionMonitor_Enable<br />xp_ApexSqlConnectionMonitor_Disable<br />xp_ApexSqlLog<br />sp_ApexSqlConnectionMonitor_Start <br /><br /><em>For ApexSQL Log 2008--</em><br />xp_ApexSqlConnectionMonitor2008 <br />xp_ApexSqlConnectionMonitor2008_Info <br />xp_ApexSqlConnectionMonitor2008_Stop <br />xp_ApexSqlConnectionMonitor2008_Enable <br />xp_ApexSqlConnectionMonitor2008_Disable <br />xp_ApexSqlLog2008 <br />sp_ApexSqlConnectionMonitor2008_Start<br />xp_ApexSqlLogApi2008<br />xp_ApexSqlRecover2008<br /><br /><strong>C. New table added to the MSDB database</strong><br />One table called msdb..APEXSQL_LOG_LOGIN is also added. It's used for storing login information as part of ApexSQL Log’s Connection Monitor (see below for more information on the connection monitor).<br /><br /><strong>What is the ApexSQLConnectionMonitor.exe for? </strong><br />To obtain NT user name and other connection specific information, ApexSQL Log uses active connection monitoring through the ApexSQLConnectionMonitor.exe process. This process is designed to be very lightweight, fast, and non-intrusive so it does not interrupt the normal functioning of Microsoft SQL Server. Once the Connection Monitor is installed (it is a part of installed server side components), it will, for each new connection, store a row into the APEXSQL_LOG_LOGIN table. During auditing, ApexSQL Log queries the login table to obtain connection specific information for each transaction. ApexSQL Log returns this information as blank if information cannot be obtained. <br /><br />Note: Connection monitoring works only for Microsoft SQL Server 2000 and SQL Server 2005. It requires that the account under which SQL Server service is running has login permission to the SQL Server itself. <br /><br />Connection monitoring also allows user names on operations from linked servers (that occurred while it was alive) to be known. Moreover, with connection monitoring, ApexSQL Log can show user names even for dropped users. As not to consume machine resources, ApexSQL Log stops the process when it fails consecutively for 5 times in 1 minute or less. <br /><br />The ApexSQL Log Connection Monitor inserts one new row into msdb.dbo.APEXSQL_LOG_LOGIN database for each new login. So this table grows directly in proportion to the number of logins made to the server. The amount of data is dependent on the number of logins. Please see this troubleshooting item for more information: click <a href="http://www.apexsql.com/knowledgebase/2007/08/troubleshooting -very-large.htm">here</a>.<br /><br /><strong>Do all these cause performance overhead?</strong><br />ApexSQL Log has no performance overhead during audit trail capture since it is not involved in it at all. The application simply reads the transaction logs to gather audit data. This allows auditing to be performed during low load times or even be offloaded to another server. Additional login information (NT user name, application name, and client host name), which is not available from the transaction log of SQL7 and SQL2000, is the only information that is actively captured. This capturing process is done by ApexSQL's Connection Monitor which has minimal overhead. SQL2005 and SQL2008 database's transaction log contains NT user's SID information from which full user name can be extracted. In this case, if application name and client host name are not necessary, ApexSQL's Connection Monitor can be stopped and disabled. <br /><br /><strong>SEE ALSO</strong><br /><em><strong>Managing the Connection Monitor process</strong></em><br />Here's a KB article that describes exactly what you need to do to stop, start, enable, or disable the connection monitor WITHOUT uninstalling it: <a href="http://www.apexsql.com/training/2009/06/managing-apexsqlconnectionmonitor2008ex.htm">Managing the ApexSQLConnectionMonitor2008.exe process</a>. <br /><br /><em><strong>Uninstalling ApexSQL Log's Server-side Components</strong></em><br />To uninstall the server-side components completely, please refer to this article: <a href="http://www.apexsql.com/training/2007/08/how-to-uninstall-ape xsqlconnectionmonit_09.htm">http://www.apexsql.com/training/2007/08/how-to-uninstall-ape xsqlconnectionmonit_09.htm</a>.<br /><br /><strong>AUTHOR</strong><br />Janice Lee<br /><br /><strong>LAST REVIEW DATE</strong><br />12 June 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-7919969240480503401?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Janice Leehttp://www.blogger.com/profile/07336545127156403186noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-29828122704535376722009-06-11T18:16:00.009-04:002009-06-11T19:17:21.542-04:00How to synchronize data from various off-line sources into a central data repository?<span class="fullpost"><strong>DESCRIPTION</strong></span><br />This article describes a typical data merging scenario, between the 2 data tables, and explains how to customize that scenario.<span class="fullpost"><br /><br /><strong>SOLUTION</strong><br />A common problem that can be solved using ApexSQL Data Diff data synchronization tool is synchronizing data from various off-line sources into a central data repository. This is a case when mobile devices (laptops) are used to capture data, and later the data is merged to the central data repository.<br /><br />Here are defined <span style="font-weight: bold;">Central </span>and <span style="font-weight: bold;">Mobile </span>databases with the <span style="font-weight: bold;">Person</span> table.<pre>-- Create script for the Central database<br />CREATE DATABASE Central<br />GO<br />USE Central<br />GO<br />CREATE TABLE Person (<br />ID int PRIMARY KEY IDENTITY(1,1),<br />personID int NOT NULL,<br />name NVARCHAR(255) NOT NULL,<br />address NVARCHAR(255)<br />)<br />-- Insert scripts for table: Person<br />SET IDENTITY_INSERT [dbo].[Person] ON<br />INSERT INTO [dbo].[Person] ([ID], [personId], [name], [address]) <br />VALUES (1, 1001, N'Central 1', N'Kings Place 200')<br />INSERT INTO [dbo].[Person] ([ID], [personId], [name], [address]) <br />VALUES (2, 1002, N'Central 2', N'Kings Place 200')<br />INSERT INTO [dbo].[Person] ([ID], [personId], [name], [address]) <br />VALUES (3, 1003, N'Central 3', N'Kings Place 200')<br />INSERT INTO [dbo].[Person] ([ID], [personId], [name], [address]) <br />VALUES (4, 1004, N'Central 4', N'Kings Place 200')<br /><br />SET IDENTITY_INSERT [dbo].[Person] OFF<br />-- Create script for the Mobile database<br />CREATE DATABASE Mobile<br />GO<br />USE Mobile<br />GO<br />CREATE TABLE Person (<br />ID int PRIMARY KEY IDENTITY(1,1),<br />PersonID int NOT NULL,<br />NameID NVARCHAR(255) NOT NULL,<br />Address NVARCHAR(255)<br />)<br />-- Insert scripts for table: Person<br />SET IDENTITY_INSERT [dbo].[Person] ON<br />INSERT INTO [dbo].[Person] ([ID], [personId], [name], [address]) <br />VALUES (1, 2001, N'Mobile 1', N'Blumen')<br />INSERT INTO [dbo].[Person] ([ID], [personId], [name], [address]) <br />VALUES (2, 2002, N'Mobile 2', N'Blumen')<br />INSERT INTO [dbo].[Person] ([ID], [personId], [name], [address]) <br />VALUES (3, 2003, N'Mobile 3', N'Blumen')<br /><br />SET IDENTITY_INSERT [dbo].[Person] OFF</pre><br />Now, try to merge <span style="font-weight: bold;">Mobile </span>persons to a <span style="font-weight: bold;">Central </span>in the following steps:<br /><span style="font-weight: bold;"><br />Step 1. Select data sources</span><br /><br />Set the <span style="font-weight: bold;">Mobile </span>database as a source data source and the <span style="font-weight: bold;">Central </span>database as a destination data source in ApexSQL Data Diff.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-762929.png"><img style="cursor: pointer; width: 400px; height: 290px;" src="http://www.apexsql.com/training/uploaded_images/1-762927.png" alt="" border="0" /></a><br /><br />After pressing the Compare button, we will get 3 different rows and a single additional row.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-783313.png"><img style="cursor: pointer; width: 400px; height: 244px;" src="http://www.apexsql.com/training/uploaded_images/1-783310.png" alt="" border="0" /></a><br /><br />Notice a key sign near the ID field. It means Comparison Key is set to the ID field.<br />However, this showcase needs to differentiate persons based on personID field, not on ID. The next step will describe how to do that.<br /><br /><span style="font-weight: bold;">Step 2. Set a Comparison Key </span><br /><br />From <span style="font-weight: bold;">Project Settings -> Object Filter</span> tab find a Person table, and from the Comparison Key column choose to <span style="font-weight: bold;">Edit Custom Comparison Key</span> as in the image (set a <span style="font-weight: bold;">personID </span>field as a comparison key and click <span style="font-weight: bold;">OK</span>).<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-788946.png"><img style="cursor: pointer; width: 400px; height: 268px;" src="http://www.apexsql.com/training/uploaded_images/1-788943.png" alt="" border="0" /></a><br /><br />Missing persons by <span style="font-weight: bold;">personID </span>will be automatically selected for synchronization.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-712312.png"><img style="cursor: pointer; width: 400px; height: 245px;" src="http://www.apexsql.com/training/uploaded_images/1-712309.png" alt="" border="0" /></a><br /><br />The problem is the additional rows. If you left them selected they will be deleted from the Central database. You should unselect them as in the image.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-704604.png"><img style="cursor: pointer; width: 400px; height: 244px;" src="http://www.apexsql.com/training/uploaded_images/1-704601.png" alt="" border="0" /></a><br /><br /><span style="font-weight: bold;">Step 3. Press the Synchronize button to open the Synchronization Wizard</span><br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-778737.png"><img style="cursor: pointer; width: 400px; height: 227px;" src="http://www.apexsql.com/training/uploaded_images/1-778734.png" alt="" border="0" /></a><br /><br />Make sure that the destination is the <span style="font-weight: bold;">Central </span>database.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-770803.png"><img style="cursor: pointer; width: 400px; height: 227px;" src="http://www.apexsql.com/training/uploaded_images/1-770801.png" alt="" border="0" /></a><br /><br />Make sure <span style="font-weight: bold;">Missing Records</span> are selected in the Record Filter step.<br />After you press <span style="font-weight: bold;">Synchronize </span>button you will get the following script:<pre>USE [Central]<br />GO<br /><br />BEGIN TRAN<br /><br />-- =======================================================<br />-- Synchronization Script for Table: [dbo].[Person]<br />-- =======================================================<br />Print 'Synchronization Script for Table: [dbo].[Person]'<br /><br />SET IDENTITY_INSERT [dbo].[Person] ON<br />INSERT INTO [dbo].[Person] ([personID], [ID], [name], [address]) <br />VALUES (2001, 1, N'Mobile 1', N'Blumen')<br />INSERT INTO [dbo].[Person] ([personID], [ID], [name], [address]) <br />VALUES (2002, 2, N'Mobile 2', N'Blumen')<br />INSERT INTO [dbo].[Person] ([personID], [ID], [name], [address]) <br />VALUES (2003, 3, N'Mobile 3', N'Blumen')<br />SET IDENTITY_INSERT [dbo].[Person] OFF<br /><br />COMMIT</pre>Problem with this script is that the primary key <span style="font-weight: bold;">ID </span>for the Person table is scripted also causing the error:<pre>Violation of PRIMARY KEY constraint 'PK__Person__3214EC277F60ED59'.<br />Cannot insert duplicate key in object 'dbo.Person'.</pre>Solution to that problem is not to use the <span style="font-weight: bold;">ID </span>field when synchronizing—use the <span style="font-weight: bold;">Columns </span>column (Project Settings Object Filter tab), and unselect the <span style="font-weight: bold;">ID </span>field as in the image.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-714209.png"><img style="cursor: pointer; width: 400px; height: 268px;" src="http://www.apexsql.com/training/uploaded_images/1-714206.png" alt="" border="0" /></a><br /><br />Now after we repeat the <span style="font-weight: bold;">step 3</span> the synchronization will went fine.<pre>USE [Central]<br />GO<br /><br />BEGIN TRAN<br /><br />-- =======================================================<br />-- Synchronization Script for Table: [dbo].[Person]<br />-- =======================================================<br />Print 'Synchronization Script for Table: [dbo].[Person]'<br /><br />SET IDENTITY_INSERT [dbo].[Person] ON<br />INSERT INTO [dbo].[Person] ([personID], [name], [address]) <br />VALUES (2001, N'Mobile 1', N'Blumen')<br />INSERT INTO [dbo].[Person] ([personID], [name], [address]) <br />VALUES (2002, N'Mobile 2', N'Blumen')<br />INSERT INTO [dbo].[Person] ([personID], [name], [address]) <br />VALUES(2003, N'Mobile 3', N'Blumen')<br />SET IDENTITY_INSERT [dbo].[Person] OFF<br /><br />COMMIT</pre><br /><span style="font-weight: bold;">Summary</span><br />ApexSQL Data Diff enables you to:<br />* Select a <span style="font-weight: bold;">Comparison Key</span> (what column or columns ApexSQL Data Diff will track for missing/different/additional records)<br />* Select <span style="font-weight: bold;">Columns </span>you want to synchronize.<br />* Select <span style="font-weight: bold;">row types</span> to synchronize (Different, Missing, Additional)<br />* Select <span style="font-weight: bold;">individual rows</span> to synchronize (using the checkboxes)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-797893.png"><img style="cursor: pointer; width: 393px; height: 131px;" src="http://www.apexsql.com/training/uploaded_images/1-797891.png" alt="" border="0" /></a><br /><br />Also the other options in ApexSQL Data Diff we haven’t explained here are :<br /><br />* <a href="http://www.apexsql.com/help/apexsqldatadiff/HTML/datadiff.htm#Data_Sync_Configuration.htm">Disable Foreign Keys and Triggers</a><br />* <a href="http://www.apexsql.com/help/apexsqldatadiff/HTML/datadiff.htm#Data_Sync_Configuration.htm">Drop not Unique Indexes</a><br />* <a href="http://www.apexsql.com/help/apexsqldatadiff/HTML/datadiff.htm#Data_Sync_Configuration.htm">Disable Check Constraints</a><br />* <a href="http://www.apexsql.com/help/apexsqldatadiff/HTML/datadiff.htm#Data_Sync_Configuration.htm">Apply Data Format</a><br />* <a href="http://www.apexsql.com/help/apexsqldatadiff/HTML/datadiff.htm#Filtering_Rows_for_Comparison.htm">Filtering Rows for Comparison</a><br /><br /><br /><strong>LAST REVIEW DATE</strong><br />Jun 12 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-2982812270453537672?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Batanjachttp://www.blogger.com/profile/07872639969843407609noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-52974072621366889642009-06-11T06:56:00.007-04:002009-06-11T16:38:02.612-04:00How to use ApexSQL Script C# solutions to execute ApexSQL Diff synchronization scripts<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />This article describes how to use ApexSQL Script C# solutions for execution ApexSQL Diff synchronization scripts that will update your database: once compiled you can use the gotten .Net package to update client databases on different machines<span Class="fullpost"><br /><br /><strong>SOLUTION</strong><br /><br />Before creating a .Net Package that will apply your changes to a database you need a C# solution. To obtain such a solution you can choose among two options:<br /> - Download the ready solution from <a href="https://internal.apexsql.com/internal/db_backups/project.zip">here</a>. Then you can skip the step 1) below<br /> - Use ApexSQL Script to create it: then please proceed with the step 1)<br /> <br />1) For the result C# solution created by ApexSQL Script you need at least one SQL Server 2000, 2005 or 2008 available at your network. Then you can use any database (for example, AdventureWorks or master database) to manually create a stub solution as follows:<br /><br /> a) Start ApexSQL Script and select any object(s) from any database to script: select a database at the right hand Select Database panel and select an object or objects in the main grid:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/1-754698.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 131px;" src="http://www.apexsql.com/training/uploaded_images/1-754694.png" border="0" alt="" /></a><br /><br /> b) Run the Script Wizard and select C# Project as Output type: <br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/2-711943.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 238px;" src="http://www.apexsql.com/training/uploaded_images/2-711940.png" border="0" alt="" /></a><br /><br /> c) Click the Create button and select the directory where your project will be created:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/3-767931.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://www.apexsql.com/training/uploaded_images/3-767926.png" border="0" alt="" /></a><br /><br />After the step is passed the stub C# project is created and is ready to use for the next step. <br /><br />2) If you have already had a ready synchronization script: please skip this step. Otherwise use ApexSQL Diff.<br /><br /> a) Start ApexSQL Diff and select necessary databases for synchronization:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/4-794485.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 157px;" src="http://www.apexsql.com/training/uploaded_images/4-794482.png" border="0" alt="" /></a><br /><br /> b) Using the Project Settings Wizard define necessary comparison options and object filters<br /><br /> c) Click the Compare button <br /><br /> d) Select the necessary objects to synchronize in the main grid and click the Synchronize tool button to start the Synchronization Wizard<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/5-791586.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 175px;" src="http://www.apexsql.com/training/uploaded_images/5-791583.png" border="0" alt="" /></a><br /><br /> e) In the Synchronization Wizard define all necessary options and then select the <strong>Write Script To File Only</strong> option at the Output Options Step. Define the directory where your script will be saved. You can save your file in the directory containing C# project made at the previous step:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/6-780718.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 204px;" src="http://www.apexsql.com/training/uploaded_images/6-780715.png" border="0" alt="" /></a><br /><br /> f) Click the Synchronization button and your script will be created and saved at the chosen folder<br /><br />3) At this step you should have a stub C# project and a synchronization script you want to apply to your database. To build the .Net package with the synchronization script please proceed with the next steps:<br /><br /> a) Open the directory where your C# project is saved. Enter to the directory with your Project name (in the example it is LOCAL@SQL2005.Aworks2005 Installer). Find the file with the *.dat extension. Actually it is a SQL script with objects scripted from the 1) step that can be deleted without a problem. Then find the synchronization script (file with *.sql extension – in the example “Synchronization.sql”)<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/7-778179.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://www.apexsql.com/training/uploaded_images/7-778175.png" border="0" alt="" /></a><br /><br />and rename it to “LOCAL@SQL2005.Aworks2005 Installer.dat”. <br /><br /> b) Return back to the main project directory and start the *.sln file. Then Microsoft Visual Studio with this C# project will be opened<br /><br />Now to create a .Net package just build the solution and then it will be ready to use on your environment.<br /><br /><strong>AUTHOR</strong><br />Andrew Guselnikov<br /><br /><strong>LAST REVIEW DATE</strong><br />11 June 2008</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-5297407262136688964?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Andrew Guselnikovhttp://www.blogger.com/profile/00826044128214915893noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-41267658901220689782009-06-10T14:43:00.010-04:002009-06-16T02:02:59.595-04:00Managing the ApexSQL ConnectionMonitor 2008.exe process<strong>DESCRIPTION</strong><br />This article describes how to stop, start, enable, or disable the ApexSQL Log Connection Monitor. It also describes how to get its current status (e.g. Is it running? Disabled? etc.)<span Class="fullpost"><br /><br />For more information about ApexSQLConnectionMonitor.exe and how to uninstall it (and ApexSQL Log's other server-side components), please click <a href="http://www.apexsql.com/training/2007/08/how-to-uninstall-apexsqlconnectionmonit_09.htm">here</a>.<br /><br /><strong>SOLUTION</strong><br />To manage the ApexSQLConnectionMonitor2008.exe process, run the following commands in Microsoft SQL Server's master database:<br /><br /><em>To start the ApexSQLConnectionMonitor2008.exe process</em><br /><font face="Courier New" size="2"><br /><font color = "blue">EXEC</font>&nbsp;<font color = "blue">MASTER</font><font color = "silver">.</font><font color = "maroon">dbo</font><font color = "silver">.</font><font color = "#FF0080"><b>Sp_apexsqlconnectionmonitor2008_start</font></b><br /></font><br /><br />The connection monitor must be enabled before it can be started.<br /><br /><em>To stop the ApexSQLConnectionMonitor.exe process</em><br /><font face="Courier New" size="2"><br /><font color = "blue">EXEC</font>&nbsp;<font color = "blue">MASTER</font><font color = "silver">.</font><font color = "maroon">dbo</font><font color = "silver">.</font><font color = "#FF0080"><b>Xp_apexsqlconnectionmonitor2008_stop</font></b><br /></font> <br /><br />When the server restarts, the ApexSQLConnectionMonitor2008.exe process will start again. If you don't want this to happen, disable the process after stopping it.<br /><br /><em>To disable the ApexSQLConnectionMonitor.exe process</em><br /><font face="Courier New" size="2"><br /><font color = "blue">EXEC</font>&nbsp;<font color = "blue">MASTER</font><font color = "silver">.</font><font color = "maroon">dbo</font><font color = "silver">.</font><font color = "#FF0080"><b>Xp_apexsqlconnectionmonitor2008_disable</font></b><br /></font><br /><br /><em>To enable the Connection Monitor</em><br /><font face="Courier New" size="2"><br /><font color = "blue">EXEC</font>&nbsp;<font color = "blue">MASTER</font><font color = "silver">.</font><font color = "maroon">dbo</font><font color = "silver">.</font><font color = "#FF0080"><b>Xp_apexsqlconnectionmonitor2008_enable</font></b><br /></font><br /><br /><em>To see the current status of the Connection Monitor</em><br /><font face="Courier New" size="2"><br /><font color = "blue">EXEC</font>&nbsp;<font color = "blue">MASTER</font><font color = "silver">.</font><font color = "maroon">dbo</font><font color = "silver">.</font><font color = "#FF0080"><b>Xp_apexsqlconnectionmonitor2008_info</font></b><br /></font><br /><br /><strong>AUTHOR</strong><br />Janice Lee<br /><br /><strong>LAST REVIEW DATE</strong><br />10 June 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-4126765890122068978?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Janice Leehttp://www.blogger.com/profile/07336545127156403186noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-38578193118127870822009-06-10T08:16:00.011-04:002009-06-15T08:38:15.086-04:00How to configure What Is dialog to remain opened even if it loses focusIn ApexSQL Edit 2008, What Is dialog closes when it loses focus. This is default behavior. However, users might want to change such behavior and keep What Is dialog opened even if it loses focus.<span class="fullpost"><br /><br /><strong>SOLUTION</strong><br />To keep What Is dialog opened even if it loses focus, you should perform the following steps:<br /><br />1) Open "AllSettings" dialog using Ctrl + Shift + S hot-key combination<br />2) Locate property "WhatIsCloseOnDeactivate" <br />Fastest way to accomplish this is by filtering "Setting" column by entering part of the property name/full name:<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/kb01-768619.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 289px;" src="http://www.apexsql.com/training/uploaded_images/kb01-768617.jpg" border="0" alt="" /></a><br /><br />3) Change property value in "Value" column from "true" to "false" (without quotes) and close the dialog.<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/kb01-708774.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 289px;" src="http://www.apexsql.com/training/uploaded_images/kb01-708771.jpg" border="0" alt="" /></a><br /><br />After this procedure, What Is window should remain open even if it loses focus.<br /><br /><strong>AUTHOR</strong><br />Dejan Apostolovic<br /><br /><strong>LAST REVIEW DATE</strong><br />10 June 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-3857819311812787082?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Apostolovichttp://www.blogger.com/profile/03558478275836884341noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-56682438887289192932009-06-08T10:34:00.035-04:002009-06-15T04:23:35.251-04:00How to automatically change the case of SQL keywords into uppercase when they are typed in a Query Editor window?<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />This article describes how to configure ApexSQL Edit to automatically change the case of SQL keywords in SQL statements to uppercase without using the reformatting feature.<span Class="fullpost"><br /><br /><strong>SOLUTION</strong><br />It is possible to configure ApexSQL Edit to change automatically SQL keywords typed in a Query Editor window into uppercase. Just press the Ctrl+Shift+S keyboard shortcut to display the All Settings dialog box.<br />Find the <b>UpperCaseReservedWords</b> setting (you can filter all settings by typing the text ‘*Upper*’ in the filter row of this dialog box, like displayed on the screen shot below) and change its value to <b>True</b>.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr1-786666.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 124px;" src="http://www.apexsql.com/training/uploaded_images/scr1-786663.png" border="0" alt="" /></a><br /><br />From now on, all your SQL keywords will be changed to uppercase after they are typed in a Query Editor window and after the Enter key is pressed at the end of the line, like displayed on the screen shots below:<br /><br />SQL keywords before pressing the Enter key:<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr2-799705.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 117px;" src="http://www.apexsql.com/training/uploaded_images/scr2-799702.png" border="0" alt="" /></a><br />SQL keywords after pressing the Enter key:<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr3-783619.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 118px;" src="http://www.apexsql.com/training/uploaded_images/scr3-783616.png" border="0" alt="" /></a><br /><br /><b>Note</b>: You can also change the case of the whole text typed in a Query Editor window to uppercase, lowercase and ‘proper’ case using the Ctrl+U keyboard shortcut. This keyboard shortcut can be applied to comments included into your SQL scripts or to scripts themselves, if your database is not case sensitive. <br />Just select the text you want to change and press Ctrl+U:<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr1-703793.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 61px;" src="http://www.apexsql.com/training/uploaded_images/scr1-703791.png" border="0" alt="" /></a><br /><br />The marked text will be changed to uppercase.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr2-740062.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 58px;" src="http://www.apexsql.com/training/uploaded_images/scr2-740060.png" border="0" alt="" /></a><br /><br />Press the U key again holding down the Ctrl key and the text will be changed to lowercase:<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr3-776407.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 60px;" src="http://www.apexsql.com/training/uploaded_images/scr3-776405.png" border="0" alt="" /></a><br /><br />Press the U key again holding down the Ctrl key and the text will be changed to ‘proper’ case:<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr4-709691.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 63px;" src="http://www.apexsql.com/training/uploaded_images/scr4-709676.png" border="0" alt="" /></a><br /><br />The Ctrl+U keyboard shortcut works in a round robin way.<br /><br /><strong>SEE ALSO</strong><br /><a href="http://www.apexsql.com/sql_tools_refactor.asp">ApexSQL Refactor</a><br /><a href="http://www.apexsql.com/help/apexsqledit/HTML/Formatting_Options.htm">ApexSQL Edit Help - Formatting options</a><br /><br /><strong>AUTHOR</strong><br />Anna Lesniak<br /><br /><strong>LAST REVIEW DATE</strong><br />15 June 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-5668243888728919293?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Anna Lesniakhttp://www.blogger.com/profile/02431393332730737446noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-26280351429131662212009-06-04T08:00:00.005-04:002009-06-15T08:34:16.965-04:00How to start logging feature of ApexSQL Edit 2008In ApexSQL Edit 2005, logging feature was always active, recording problems encountered when using the application. This log file was helpful to the developers to locate cause of problems experienced by customers. In ApexSQL Edit 2008, this feature is turned Off by default.<span class="fullpost"><br /><br />This article should help you turning ON logging feature of ApexSQL Edit 2008.<br /><br /><strong>SOLUTION</strong><br />To turn ON logging feature in ApexSQL Edit 2008, you should perform the following steps:<br /><br />1) Locate at your desktop the shortcut you are using for starting the application<br />2) Highlight it and open its properties (right-click the shortcut and click the <b>Properties</b> command from the context menu)<br />3) Locate the <b>Target</b> input box and modify its content by adding " log" (without quotes) at the end. <br />In example, change:<br />"C:\Program Files\ApexSQL\ApexSQLEdit2008\ApexSQLEdit.exe"<br />to<br />"C:\Program Files\ApexSQL\ApexSQLEdit2008\ApexSQLEdit.exe" log<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/02-721408.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 231px; height: 320px;" src="http://www.apexsql.com/training/uploaded_images/02-721405.jpg" border="0" alt="" /></a><br /><br />4) Click the OK button to save changes<br /><br />Next time you start the application, "apexsqledit.log" file will be created in the installation folder (in the example: "C:\Program Files\ApexSQL\ApexSQLEdit2008")<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/02a-778399.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://www.apexsql.com/training/uploaded_images/02a-778394.jpg" border="0" alt="" /></a><br /><br /><strong>AUTHOR</strong><br />Dejan Apostolovic<br /><br /><strong>LAST REVIEW DATE</strong><br />04 June 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-2628035142913166221?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Apostolovichttp://www.blogger.com/profile/03558478275836884341noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-2017315246257392872009-06-04T07:32:00.012-04:002009-06-18T13:31:04.231-04:00How to subscribe to a forum topic<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />This article should help you subscribing to the desired forum topic if you are <a href="http://www.apexsql.com/forum/registration_rules.asp?FID=0" target="_blank">registered</a> on the forum.<span Class="fullpost"><br /><br /><strong>SOLUTION</strong><br />To subscribe to the desired forum topic you need to perform the following steps:<br />1) Open forum topic link in internet browser application (all popular browsers are supported, like IExplorer 6.x - 8.x, Firefox 3.x ...)<br />2) Check the bottom of the page and locate "Watch the topic for reply" link:<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/02-796575.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 153px;" src="http://www.apexsql.com/training/uploaded_images/02-796572.jpg" border="0" alt="" /></a><br /><br />3) Click on the link, and after short period confirmation message box will pop up:<br /><br /></span><span class="fullpost"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer;" src=" http://www.apexsql.com/training/uploaded_images/03-704241.jpg" border="0" alt="" /><br /><br />As result of subscribing process, you will get notified of the forum update via email.<br /><br /><strong>AUTHOR</strong><br />Dejan Apostolovic<br /><br /><strong>LAST REVIEW DATE</strong><br />18 June 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-201731524625739287?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Apostolovichttp://www.blogger.com/profile/03558478275836884341noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-38652233872652368422009-06-01T08:37:00.004-04:002009-06-01T13:45:05.702-04:00Getting started with ApexSQL Report 2008 source code<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />This article should help you getting started with ApexSQL Report 2008 source code.<br /><br /><strong>SOLUTION</strong><br />The fastest way to get start working with the ApexSQL Report 2008 source code is to perform the following steps:<br /><br />1. Create database used by ApexSQL Report 2008 by: <br />a) Creating empty database on your SQL Server 2005 (name it as you like)<br />b) Executing ApexSQLReportSetup.sql (found in Depending/Files folder)<br /><br />2. Open web.config file (you can find it in the "ApexSQL Report 20008" solution folder), locate "apexsqlreport" tag and edit highlighted sections:<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/KB_Getting_Strarted-742090.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 124px;" src="http://www.apexsql.com/training/uploaded_images/KB_Getting_Strarted-742088.jpg" border="0" alt="" /></a><br /><br />NOTE: You can also choose “Windows” as authentication mode but please make sure that sql server built in account ASPNET has dbo privileges for database used.<br /><br />Initial credentials when you login for the first time are:<br />Username: <span style="font-weight:bold;">Admin</span><br />Password: <span style="font-weight:bold;">123</span><br /><br />We have bypassed activation component by adding compiler directive NOACTIVATION to project (it is used in Global.asax.cs file). If needed you may remove reference to activation dll and just comment out couple more lines of code.<br /><br /><br /><strong>AUTHOR</strong><br />Dejan Apostolovic<br /><br /><strong>LAST REVIEW DATE</strong><br />01 June 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-3865223387265236842?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Apostolovichttp://www.blogger.com/profile/03558478275836884341noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-27550752385183684152009-05-28T15:25:00.014-04:002009-05-29T12:05:15.694-04:00Welcome to the ApexSQL KnowledgebaseWelcome to the ApexSQL Knowledgebase. This is an online resource that contains Technical Tips, How-to articles, and other tutorials about ApexSQL Tools.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-2755075238518368415?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Anna Lesniakhttp://www.blogger.com/profile/02431393332730737446noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-81239361941801522302009-05-26T08:49:00.019-04:002009-05-28T16:06:13.212-04:00What kind of additional information I can send about the problem I encountered in ApexSQL applications?<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />If you find a defect inside our applications, it would help us to duplicate the issue if you provide us additional information.<span Class="fullpost"><br /><br /><strong>SOLUTION</strong><br />Could you please send us the following information:<br /><br /><b>General</b>:<br />• What is the exact application name and version you are using– please select the Help | About … command to verify them.<br />• What operating system is installed on the same machine as ApexSQL application?<br />• What is your processor and how much RAM your machine has?<br />• Do you work in a domain or in a workgroup?<br />• What is the SQL Server version you are working with. Use the following query to check it: SELECT @@version<br /><br /><b>Issue specific</b>:<br />• Can you duplicate repeatedly the problem encountered?<br />• Does duping require a particular script/code/database structure?<br />• What actions were done prior the issue occurred?<br />• Can you send us the description of steps and screen shot, which will allow easily reproducing the problem?<br /><br /><b>Classified</b>:<br />• Could you please provide us a database snapshot or ddl scripts of particular objects required for reproducing the issue? Please send any classified files to the <a href=mailto:support@apexsql.com>support@apexsql.com</a> email address.<br /><br /><strong> SEE ALSO </strong><br /><a href="http://www.apexsql.com/knowledgebase/2008/06/what-should-i-do-when-have-encountered.htm"> What should I do when I encounter a problem in ApexSQL Log? </a><br /><br /><strong>AUTHOR</strong><br />Anna Lesniak<br /><br /><strong>LAST REVIEW DATE</strong><br />26 May 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-8123936194180152230?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Anna Lesniakhttp://www.blogger.com/profile/02431393332730737446noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-21213888278060146782009-05-26T07:18:00.005-04:002009-05-28T12:38:19.291-04:00How to transfer ApexSQL Edit formatting options between computersThis Knowledgebase article discusses how to transfer ApexSQL Edit formatting options between computers. This can be very useful if you are using several computers (in example, work station in the office and laptop at home).<span class="fullpost"><br /><br /><strong>SOLUTION</strong><br />In ApexSQL Edit 2008, to be transfer formatting options between computers, you must perform the following steps:<br /><br />1) Open Formatting options dialog on "source" computer (computer where you have desired formatting options). You can do this via Tools | Formatting Options command or by pressing Ctrl + F8 key combination.<br /><br />2) Click Export button to create and save FormattingSettings.xml file on desired location: <br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/KB01-726037.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 207px;" src="http://www.apexsql.com/training/uploaded_images/KB01-726034.jpg" border="0" alt="" /></a><br /><br />Default location for saving formatting options file is ApexSQLEdit2008 folder in My Documents\ApexSQL folder, like:<br />C:\Documents and Settings\{windows_user_name}\My Documents\ApexSQL\ApexSQLEdit2008\<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/KB01a-744351.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 238px;" src="http://www.apexsql.com/training/uploaded_images/KB01a-744349.jpg" border="0" alt="" /></a><br /><br />3) Copy file created to "destination" computer (computer which formatting options you wish to make equal to formatting options on "source" computer).<br /><br />4) Open Formatting options dialog on "destination" computer.<br /><br />5) Click Import button and browse to FormattingSettings.xml file you copied. <br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/KB01b-794637.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 207px;" src="http://www.apexsql.com/training/uploaded_images/KB01b-794610.jpg" border="0" alt="" /></a><br /><br />6) Click Apply command and close Formatting Options dialog.<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/KB01c-700830.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 207px;" src="http://www.apexsql.com/training/uploaded_images/KB01c-700827.jpg" border="0" alt="" /></a><br /><br />As result of this command, new formatting options will be applied and you will have formatting options on "destination" computer equal to formation options on "source" computer.<br /><br /><br /><strong>AUTHOR</strong><br />Dejan Apostolovic<br /><br /><strong>LAST REVIEW DATE</strong><br />26 May 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-2121388827806014678?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Apostolovichttp://www.blogger.com/profile/03558478275836884341noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-65281926365085086532009-05-25T06:57:00.022-04:002009-05-26T06:00:24.516-04:00Why I'm experiencing slowdowns in ApexSQL Edit Schema Explorer after mapping a database to a Source Control.<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />After my database is mapped to a Source Control system and actions like:<br /><br />• adding a new object to a Source Control system or<br />• refreshing a database folder <br /><br />are run,<br />then, ApexSQL Edit can work significantly slower and can consume the substantial amount of system resources if a database contains <b>many mapped objects</b>.<br /><span Class="fullpost"><br /><br /><strong>SOLUTION</strong><br />The current implementation of ApexSQL Edit retrieves many detailed information about the state of each mapped object, when you are working with the Schema Explorer. It checks for example:<br /><br />• if database objects differ from their Source Control versions,<br />• if objects are checked out and by whom (and others).<br /><br />This process can be resource/time consuming, if many database objects are mapped to a Source Control system.<br /><br />You can do the following to avoid delays:<br /><br />• Map only the necessary objects to your Source Control system. <br />• Additionally, when you are mapping your database to a Source Control system, choose NOT to remember a password for a Source Control user. Each next time you start ApexSQL Edit, just CANCEL the dialog box asking about a Source Control user password. Your Source Control system will be unavailable and the application will display the password dialog box at time to time, <b>but the Schema Explorer will work faster</b>.<br /><br /><b>Note</b>: We are working on a completely new approach to ApexSQL Edit / Source Control integration. The new design should fix many current issues, also those related to slowdowns in the Schema Explorer. Please check our <a href="http://www.apexsql.com/devblog/index.htm">Developers Blog</a> for the newest information about the work progress.<br /><br /><br /><strong>SEE ALSO</strong><br /><a href="http://www.apexsql.com/training/2008/12/configuring-apexsql-edit-to-work-with.htm">Configuring ApexSQL Edit to work with ApexSQL Source Control</a><br /><a href="http://www.apexsql.com/training/2009/03/how-to-create-new-source-control.htm">How to create a new Source Control project using ApexSQL Edit</a><br /><br /><br /><strong>AUTHOR</strong><br />Anna Lesniak<br /><br /><strong>LAST REVIEW DATE</strong><br />25 May 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-6528192636508508653?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Anna Lesniakhttp://www.blogger.com/profile/02431393332730737446noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-4739692880318416622009-05-22T10:16:00.016-04:002009-05-29T16:57:43.856-04:00Geting started with ApexSQL Console<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />This article will help you getting started with ApexSQL Console applications or CLI (Command Line Interface) applications.<span Class="fullpost"><br /><br /><strong>SOLUTION</strong><br />The ultimate engineering need today, when working with databases, is to schedule and run different database jobs unattended, overnight, at predefined time etc. directly on database servers...<br />The perfect way to do that job is to use Console applications, because they consume less memory then GUI counterpart, and typically are easy controllable and manageable just by using several lines of text or even better using the .BAT files or batches. <br /><br />ApexSQL has a rich set of products coming together with the CLI (Command Line Interface) Support. The CLI applications are designed as separate executables having the <b>.com</b> extension. For instance in the case of ApexSQL Diff we are having the 2 executables:<br />* One for the GUI (Grapic User Interface) application—ApexSQLDiff.exe, and <br />* One for the CLI application—ApexSQLDiff.com.<br /><br />As you may notice these extensions are standard for all ApexSQL applications.<br /><br />Being practical let us make a simple examination of typical ApexSQL CLI application. We can demonstrate all important elements of the typical ApexSQL application in a case of ApexSQL Diff.<br /><br /><B>How to instantiate the console application?</B><br />* We just need to open the Windows Console (in my case found at C:\Windows\system32\cmd.exe)<br />* Go to the ApexSQL Diff application folder (or make sure that the environment variable <b>PATH</b> has a link to the ApexSQLDiff.com application)<br />* Call either<pre>ApexSQLDiff.com ...</pre>or<pre>ApexSQLDiff ...</pre>followed the switches, parameters we want.<br /><br /><B>How to dump all the switches ApexSQL Diff provides</B>.<br />We can use the following line:<pre>ApexSQLDiff.com /help</pre>and we will get...<br /><pre>ApexSQL Diff 2008.07, Copyright (C) 1999-2009 ApexSQL LLC<br /><br />Connection Options:<br /> /s1:arg [ /server1 ] : source server name ("(local)" if omitted)<br /> /s2:arg [ /server2 ] : destination server name ("(local)" if omitted)<br /> /d1:arg [ /database1 ] : source database name<br /> /d2:arg [ /database2 ] : destination database name<br /> /u1:arg [ /user1 ] : source login (trusted connection if omitted)<br /> /u2:arg [ /user2 ] : destination login (trusted connection if omitted)<br />...<br /><br />Additional options:<br /> /? [ /help ] : prints help message<br /> /af:arg [ /argfile ] : an XML file with options<br /> /cw:arg [ /console_width ] : specifies the width of console output<br /> /f [ /force ] : overrides existing file of same name<br /> /out:arg [ /out_to ] : redirects console output to specified file<br /> /t [ /test ] : outputs parsed command line switches without<br /> taking any actions<br /> /v [ /verbose ] : prints messages that are suppressed by default</pre><br />Here we have shortened the whole instruction set and provided only several lines as a showcase.<br /><br /><b>Organization of the switches</b><br />Important to notice; every ApexSQL application has a set of instructions organized into groups.<br /><br />In the case of ApexSQL Diff we are having the following groups:<br />* Connection Options:<br />* Specific Options:<br />* General Synchronization Options:<br />* Structure Comparison Options:<br />* Structure Synchronization Options:<br />* Structure Reporting Options:<br />* Additional options:<br /><br />The instruction groups differ from product to product, but what is important the grouping helps a lot in cases we need to find some particular instruction; it will be easy to navigate the specific instruction by recognizing its group...<br /><br />Also note that these three instruction groups:<br />* Connection Options,<br />* Specific Options, and<br />* Additional Options <br />are the “three amigos” (instruction groups being present in every ApexSQL console application).<br /><br /><B>The Format of Switches</B><br />1. Switches are case insensitive, i.e. /S: = /s:<br />2. Switches are preceded with one forward slash (/), i.e. /db:pubs.<br />3. Switches are followed with a colon (:), i.e. /db:pubs.<br />4. There are two types of all switches - abbreviated/alias (1-3 chars) and Full - with full name of switch. i.e. /p and /project<br />5. Default values for omitted parameters are used in most cases. Default values are specified in the following format in /help switch ("<default>" if omitted), i.e. ("(local)" if omitted) as illustrated in the following example.<br /><br /><B>Passing Values to switches</B><br />1. Values should be passed to switches in the following format (see examples). <br /><pre>apexsqldiff.com /switch:value<br />apexsqldiff.com /switch:"value with spaces"</pre><br />2. Use Double quotes for values that contain spaces.<br />3. Do not put a space between the colon and the value<br /><br /><B>How can we automate ApexSQLDiff.com?</B><br />We can achieve that by the help of .BAT files or batches. See the <b>SEE ALSO</b> section.<br /><br /><B>Where I should find the help for the CLI instructions</B><br />Every ApexSQL CLI supported application has a corresponding <b>Command Line</b> section in its help. For example the <a href="http://www.apexsql.com/help/apexsqldiff/HTML/diff.htm">help for ApexSQL Diff application</a> has a top level section "Command Line" describing all the command line options, switches, examples, etc.<br /><br /><B>Is GUI having more instructions then CLI?</B><br />No. GUI and the CLI should have the same number of instructions. In general everything you can do from the GUI, it can be done from CLI.<br /><br /><br /><strong>SEE ALSO</strong><br /><a href="http://www.apexsql.com/training/2009/02/how-to-schedule-cli-command-execution_12.htm">How to schedule CLI command execution with Windows Scheduler </a><br /><br /><br /><strong>LAST REVIEW DATE</strong><br />May 22 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-473969288031841662?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Batanjachttp://www.blogger.com/profile/07872639969843407609noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-56284881366233987832009-05-22T01:34:00.012-04:002009-06-04T15:08:48.907-04:00Setting up automated alerts from audit triggers via SMTP in ApexSQL Audit<span class="fullpost"><strong>DESCRIPTION</strong></span><br />The Article describes how to setup automated alerts to be sent from your audit triggers via SMTP<span class="fullpost"><br /><br /><strong>SOLUTION</strong><br /><br />The automated alerts can be setup with help of MS SQL Server tools in MS SQL 2005 and MS SQL 2008 as there the Database Mail concept was implemented. In SQL 2000 or SQL Server 7.0 if you want to send mail using SMTP in your query, you will have to rely on third party COM components.<br /><br />To setup automated alerts via SMTP at MS SQL 2005/2008 you have to do several preparation steps:<br /><br />1) First you need to configure Database Mail on your SQL Server. In the SQL Server Managment Studio right click over the Database Mail node:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/Invoke-Mail-731410.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 301px; height: 320px;" src="http://www.apexsql.com/training/uploaded_images/Invoke-Mail-731407.jpg" alt="" border="0" /></a>In the appeared dialog, please enter your e-mail address, SMTP server address and authentication parameters:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/Setup-Mail-717699.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 273px;" src="http://www.apexsql.com/training/uploaded_images/Setup-Mail-717696.jpg" alt="" border="0" /></a><br />2) Then you have to update your triggers architecture to use this functionality. Make also several steps:<br /><br />- Open the triggers template<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/Invoke-architecture-792192.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 126px;" src="http://www.apexsql.com/training/uploaded_images/Invoke-architecture-792189.jpg" alt="" border="0" /></a><br /><br />- Prepare necessary variables. To do this in the opened template find such pieces of code:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/Insert-variables-751803.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 239px;" src="http://www.apexsql.com/training/uploaded_images/Insert-variables-751799.jpg" alt="" border="0" /></a><br />Insert the code below where the arrow points.<br /><br /> 'Customize values below<br />Mail_Profile = "local_mail"<br />Mail_Recipients = "YorMail@yourMail.com"<br />Mail_Body = "Please verify database change."<br />Mail_Subject = "Unauthorized Database Change<br /><br />- In every trigger(DELETE, INSERT, UPDATE) find such a piece of code:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/Insert-code-730460.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 262px;" src="http://www.apexsql.com/training/uploaded_images/Insert-code-730456.jpg" alt="" border="0" /></a><br /><br />And Insert the code below where the arrow points:<br /><br />--Send email alert<br />EXEC msdb.dbo.sp_send_dbmail<br /> @profile_name = '{% Audit.Print Mail_Profile %}',<br /> @recipients = '{% Audit.Print Mail_Recipients %}',<br /> @body = '{% Audit.Print Mail_Body %}' ,<br /> @subject = '{% Audit.Print Mail_Subject %}'<br /><br />3) Create your triggers. If you want to create some triggers that do not send alerts, remove this section from the trigger create script before clicking the Play button:<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/ready-715008.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 260px;" src="http://www.apexsql.com/training/uploaded_images/ready-715004.jpg" alt="" border="0" /></a><br /><br />Also you can download the example of such architecture from <a href="http://www.apexsql.com/support/audit_hotfix/ApexSQL2048_Mail.zip">here</a><br /><br /><strong>Andrew Guselnikov</strong><br /><br /><strong>LAST REVIEW DATE</strong><br />22 May 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-5628488136623398783?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Andrew Guselnikovhttp://www.blogger.com/profile/00826044128214915893noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-48425948548596903352009-05-21T08:44:00.007-04:002009-05-28T12:30:05.430-04:00How to span the graphical dependencies report over multiple pages in ApexSQL CleanThis Knowledgebase article discusses how to span a graphical dependencies report over the multiple pages in ApexSQL Clean 2008. This is very useful if the report contains a lot of database objects making single page layout useless.<span class="fullpost"><br /><br /><strong>SOLUTION</strong><br />In ApexSQL Clean 2008, to be able to use the multiple pages layout for printing, you must perform the following steps:<br /><br />1. After your database has been analyzed and object appears in the main application grid, open Dependencies Viewer form. To do this click Dependency Viewer command in Outlook-like toolbar:<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/DepPrn00-770653.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 69px; height: 320px;" src="http://www.apexsql.com/training/uploaded_images/DepPrn00-770650.jpg" border="0" alt="" /></a><br /><br />2. Open Options dialog for Dependencies Viewer form. To do this click Options menu | Options command or press F8 key: <br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/DepPrn01-731653.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 224px;" src="http://www.apexsql.com/training/uploaded_images/DepPrn01-731648.jpg" border="0" alt="" /></a><br /><br />3. On the General tab, deselect “Fit to Page Printing” option:<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/DepPrn02-794440.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 163px;" src="http://www.apexsql.com/training/uploaded_images/DepPrn02-794437.jpg" border="0" alt="" /></a><br /><br />4. Modify scale parameter (value entered will inflict pages count displayed in Print Preview)<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/DepPrn03-727485.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 163px;" src="http://www.apexsql.com/training/uploaded_images/DepPrn03-727483.jpg" border="0" alt="" /></a><br /><br />In example, for printing dependencies for AdventureWorks SQL Server 2005 demo database, (all database objects, default settings), you should enter scales:<br /><br />a) 15.00 % -> 2 pages<br />b) 20.00 % -> 4 pages <br />b) 30.00 % -> 6 pages<br /><br />5. Select Print Preview command. To do this click File menu | Print Preview command:<br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/DepPrn04-755115.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://www.apexsql.com/training/uploaded_images/DepPrn04-755111.jpg" border="0" alt="" /></a><br /><br />6. As result, report will spans on multiple pages (depending on data and scale %): <br /><br /></span><span class="fullpost"><a href="http://www.apexsql.com/training/uploaded_images/DepPrn05-717581.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 235px;" src="http://www.apexsql.com/training/uploaded_images/DepPrn05-717578.jpg" border="0" alt="" /></a><br /><br /><br /><strong>AUTHOR</strong><br />Dejan Apostolovic<br /><br /><strong>LAST REVIEW DATE</strong><br />22 May 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-4842594854859690335?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Apostolovichttp://www.blogger.com/profile/03558478275836884341noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-3188264016382426422009-05-14T18:57:00.015-04:002009-05-15T16:14:38.356-04:00Performance hit on SQL Server when using ApexSQL Diff<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />This article describes ApexSQL Diff impact on SQL Server performance.<span Class="fullpost"><br /><br /><strong>THE STORY</strong><br />In general: ApexSQL Diff cannot harm SQL Server performance even if we are dealing with the biggest SQL Server databases, or even when you are executing biggest SQL Server synchronizing scripts. Microsoft SQL Server is the one that will actually distribute and do the job.<br /><br /><B>The impact of the ApexSQL Diff comparison phase</B><br />In its comparison phase ApexSQL Diff will try to get the metadata of the compared databases. This is not considered as a heavy or "killer" task in almost all cases because in general DDL database data is usually small even for the greatest databases.<br /><br /><B>The impact of the ApexSQL Diff synchronization phase</B><br />In its synchronization phase ApexSQL Diff will just provide the needed scripts for the execution to the SQL Server. These scripts may be 100Gb or so, but in fact Microsoft SQL Server will distribute the job of the scripts execution in the best possible way.<br /><br />Having said that, depending on the SQL Server you have, you can control different parameters of the SQL Server Environment. Some of these are:<br /><br />* The number of the SQL Server processors we use<br />* Maximum number of worker threads we use<br />* SQL Server process priority value<br />* SQL Server memory usage<br />...<br /><br />By controlling these and other parameters you can control SQL Server availability and overall SQL Server performance comparing to the other processes of the server system...<br /><br />Here are some figures how much time (measured in seconds) ApexSQL Diff will need to execute different operations for the well-known databases...<br />Here the databases are: NW = Northwind, AW = AdventureWorks 2005, AW2008 = AdventureWorks 2008.<br /><br /><B>Platform: Pentium 4 Processor, 2G or RAM, Windows XP</B><br /><a parent="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-776725.png"><img style="cursor:pointer; cursor:hand;" src="http://www.apexsql.com/training/uploaded_images/1-776723.png" border="0" alt="" /></a><br /><br /><strong>LAST REVIEW DATE</strong><br />May 15 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-318826401638242642?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Batanjachttp://www.blogger.com/profile/07872639969843407609noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-24366369265301046672009-04-10T09:40:00.003-04:002009-04-22T16:43:40.757-04:00How can I use ApexSQL Log on server where server side components aren’t allowed?<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />Article describes how to use ApexSQL Log to audit production database when server-side components are not allowed to be installed on it for some reasons:<br />1. Too intensive load of the production server to overload it with audit tasks;<br />2. Installation of third-party components is not allowed for some security reasons;<br /><span Class="fullpost"><br /><strong>SOLUTION</strong><br />I. First of all, please restore production database on the auditing server, the best solution is detach it on production server, make its files copy and attach these copies to on the auditing server. Another solution is to make Full database and transaction log backups and restore them on the auditing server. This is needed for two reasons: <br /> 1. Meta-data on the auditing database needs to match exactly the meta-data on the production database. Just running a script to create the schema on the production database will not, in general case, be sufficient for this as SQL Server randomly assigns table ID so table A would most likely have one ID in the production database and another ID in the auditing database. This could still be handled by the software using manual mapping of old/new table IDs but it's much better if the db is simply restored from the production server. <br /> 2. SQL Server logs very differently INSERT/DELETE operations on one hand and UPDATE operations on the other. While INSERT/DELETE operations are logged with entire row state, UPDATE operations are logged only with the minimum of change set data. To reconstruct changes logged by UPDATE statement we sometimes use current database state so it's very important that auditing server reflects some recent database state. <br /><br />II. Once the database is restored, start creating transaction log backups on the production server and then sending them to auditing server for auditing. The thing to keep in mind here is that the restored database isn't changing so in order to leverage the data in it for UPDATE reconstruction the full change of transaction log backups since the restored db backup needs to be maintained (if it's not the application will still work but UPDATE reconstruction won't be as complete as it could be.). <br /><br /><span style="font-style:italic;">Suggestion: To avoid building up too many transaction log backups you could frequently restore the most recent state of the production database - that way old transaction log backups can be deleted.<br /></span><br /><span style="font-style:italic;">Special Note: One thing that cannot be obtained without server-side components are application and client host names for the connections that made the changes. This information is not logged into transaction log and needs to be actively captured which our server-side components handle. Also, to obtain correct NT user names of the users connecting to the production database, you need to keep auditing server and production server in the same domain. <br /></span><br />III. Once all this is setup, database on auditing server is ready for use for responsible person. Just the reference to all relevant transaction log backups should be specified before audit is started. <br /><br />IV. Another alternative would be to create an automated auditing process where ApexSQL Log would be invoked through its command line interface (CLI) directly on the server. This job would produce auditing results depending on the filters you pass them and then this could be loaded into a specialized auditing database for querying. The auditing tables (there are two of them) can contain auditing data from different servers and databases so this auditing data from all your databases is stored right there and queries for these two tables need to be run only. <br /><br /><strong>AUTHOR</strong><br />Dmitriy Dyubchenko<br /><br /><strong>LAST REVIEW DATE</strong><br />10 April 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-2436636926530104667?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dmitriy Dyubchenkohttp://www.blogger.com/profile/03842291815446023867noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-78249403721986646362009-04-02T15:28:00.028-04:002009-04-29T16:32:26.950-04:00The ApexSQL InstallerThe ApexSQL Installer is a universal installer that installs most of ApexSQL's tools.<br /><span class="fullpost"><br /><br /><strong>Where can I download the Installation Setup</strong><br />The installer can be downloaded <a href="http://www.apexsql.com/zips/ApexSQLInstaller.exe">here</a>.<br /><br /><strong>Installation Types</strong><br />There are several predefined installation types in the setup:<br /> <br />Default installation – All client applications/utilities are selected for installation<br />Custom Installation – The user selects specific applications to install<br />ApexSQL Universal Studio (Full Installation) - installs all applications, Add-ins and APIs which are all included in ApexSQL Universal Studio. This is equivalent to a Full Installation<br />ApexSQL Developer Studio - installs all tools included in ApexSQL Developer Studio<br />ApexSQL SSMS Plus - installs all tools included in ApexSQL SSMS Plus<br />ApexSQL Recovery Studio - installs all tools included in ApexSQL Recovery Studio<br />ApexSQL Comparison Studio - installs all tools included in ApexSQL Comparison Studio<br />ApexSQL DBA Studio - installs all tools included in ApexSQL DBA Studio<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/installation_types-767225.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 247px;" src="http://www.apexsql.com/training/uploaded_images/installation_types-767205.jpg" border="0" alt="" /></a><br /><br />Note: None of the above includes ApexSQL Report, ApexSQL Audit Viewer, ApexSQL Snapshot Utility, and ApexSQL Log and ApexSQL Recover's server-side components.<br /><br /><strong>Which applications cannot be installed using the ApexSQL Installer?</strong><br />ApexSQL Report, ApexSQL Audit Viewer, ApexSQL Snapshot Utility, and ApexSQL Log & ApexSQL Recover's server-side components (client-side components can be installed using the ApexSQL Installer).<br /><br /><strong>Where can I download the installers for applications that are not included in the ApexSQL Installer?</strong><br /><br /><a href="http://www.apexsql.com/zips/ApexSqlReport.exe">ApexSQL Report</a><br /><a href="http://www.apexsql.com/zips/ApexSqlAuditViewer.exe">ApexSQL Audit Viewer</a><br /><a href="http://www.apexsql.com/zips/ApexSQLSnapshotUtility.exe">ApexSQL Snapshot Utility</a><br /><br />You will be prompted to install the server-side components of ApexSQL Log and ApexSQL Recover when you start using the app and connect to a server.<br /><br /><img style="display:block; margin:0px auto 10px; text-align:center; width: 614px; height: 100px;" src="http://www.apexsql.com/training/uploaded_images/image003-724430-723792.png" border="0" alt="" /><br /><br /><strong>Which applications should I select to install?</strong><br /><br /><em><strong>To install individual applications</strong></em><br />Check the box corresponding to the application you want to install.<br /><br /><br /><img style="display:block; margin:0px auto 10px; text-align:center; " src="http://www.apexsql.com/training/uploaded_images/install-746511.png" border="0" alt="" /><br /><br /><br /><em><strong>To install a bundle</strong></em><br />Select the bundle from the installation type. Below matrix shows which tools will be installed per selected bundle.<br /><br /><a target="_blank" href="http://www.apexsql.com/training/uploaded_images/bundle-724739.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 593px; height: 410px;" src="http://www.apexsql.com/training/uploaded_images/bundle-724739.jpg" border="0" alt="" /></a><br /><br /><em><strong>To install the server-side components of ApexSQL Log and ApexSQL Recover</strong></em><br />Start each application. You will be prompted to install the server-side components when you connect to a server that doesn't have the server-side components installed.<br /><br />If you encounter problems installing on a remote server, download the individual installers of ApexSQL Log and/or ApexSQL Recover. Read <a href="http://www.apexsql.com/knowledgebase/2009/04/installing-server-side-components-only.htm">Installing server-side components only to a remote server</a> for more information.<br /><br /><strong>Can I use the ApexSQL Installer to upgrade my application to the most recent version?</strong><br />Yes. ApexSQL Installer is updated every time there is a new product or a new version. Simply download the installer again and select the application that you want to install.<br /><br /><strong>Can I use the ApexSQL Installer to install an older version of a particular application?</strong><br />No. The ApexSQL Installer is updated every time there is a new version.<br /><br /><strong>Where can I download the installers to old versions?</strong><br />Installers to old versions can be found here: <a href="http://www.apexsql.com/forum/forum_posts.asp?TID=9711&PN=1">http://www.apexsql.com/forum/forum_posts.asp?TID=9711&PN=1</a>.<br /><br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-7824940372198664636?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Janice Leehttp://www.blogger.com/profile/07336545127156403186noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-39209423112874408732009-03-27T19:01:00.021-04:002009-03-31T09:10:31.894-04:00Setup the minimum rights for ApexSQL Diff user (for the comparison and script generation only)<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />Here is explained how to setup the SQL user (login) with minimum rights to be used from ApexSQL Diff for comparison and script generation purpose only; without the need to execute the scripts from ApexSQL Diff.<br /><br /><span Class="fullpost"><strong>SOLUTION</strong><br />For script execution ApexSQL Diff requires the user with <b>db_owner</b> permission granted. However, for comparison and for the script generating only (without executing the scripts) you will need the user with:<br />* The membership in the public role (this is by default)<br />* The permission CONNECT SQL granted (this is selected by default)<br />* The VIEW DEFINITION permission granted<br /><br />Here are the steps that your DBA has to undertake to create such a user.<br /><br />1. From the SSMS.exe (Object Explorer) right click the Logins folder to add the new login=user.<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/0-786545.png"><img style="cursor:pointer; cursor:hand;" src="http://www.apexsql.com/training/uploaded_images/0-786543.png" border="0" alt="" /></a><br /><br />2. Set the login name, SQL Server authentication password<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-720027.png"><img style="cursor:pointer; cursor:hand;" src="http://www.apexsql.com/training/uploaded_images/1-720025.png" border="0" alt="" /></a><br /><br />3. Make sure the public server role is selected (by default it is so)<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/2-755110.png"><img style="cursor:pointer; cursor:hand;" src="http://www.apexsql.com/training/uploaded_images/2-755108.png" border="0" alt="" /></a><br /><br />4. From the user mappings tab select the databases (usually all) you want to make available to the user.<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/5-772319.png"><img style="cursor:pointer; cursor:hand;" src="http://www.apexsql.com/training/uploaded_images/5-772317.png" border="0" alt="" /></a><br /><br />5. Now click the SQL Sever instance properties from the context menu<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/10-730939.png"><img style="cursor:pointer; cursor:hand;" src="http://www.apexsql.com/training/uploaded_images/10-730938.png" border="0" alt="" /></a><br /><br />6. From the permissions tab make sure "Connect SQL" and "View any definition" persmisions are granted to your user<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/3-796267.png"><img style="cursor:pointer; cursor:hand;" src="http://www.apexsql.com/training/uploaded_images/3-796264.png" border="0" alt="" /></a><br /><br />7. You will have the effective permissions like this<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/4-747836.png"><img style="cursor:pointer; cursor:hand;" src="http://www.apexsql.com/training/uploaded_images/4-747834.png" border="0" alt="" /></a><br /><br />8. Now when you open ApexSQL Diff and right after you choose the data sources with the new login (user) and start the comparison process you will get the prompt like this:<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/6-768181.png"><img style="cursor:pointer; cursor:hand;" src="http://www.apexsql.com/training/uploaded_images/6-768178.png" border="0" alt="" /></a><br /><br /><pre>You are not a member of db_owner role in databases:<br />AdventureWorks2005, ...<br />You can continu but some functions may not work because of lack of rights.<br />Continue?</pre><br /><br />After your confirmation you are ready to go, but remember: You will not be able to execute the scripts from the ApexSQL Diff! <br /><br /><br /><strong>SEE ALSO</strong><br /><a href="http://msdn.microsoft.com/en-us/library/ms175808.aspx">VIEW DEFINITION permission</a><br /><br /><strong>LAST REVIEW DATE</strong><br />March 30 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-3920942311287440873?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Batanjachttp://www.blogger.com/profile/07872639969843407609noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-67658952634387729032009-03-25T15:39:00.040-04:002009-03-26T16:52:45.540-04:00How to prepare an existing SourceGear Vault project to be mapped in ApexSQL Edit multi user environment.<span Class="fullpost"><strong>DESCRIPTION</strong></span><br />This article describes how to prepare an existing SourceGear Vault project to be mapped in ApexSQL Edit multi user environment.<span Class="fullpost"><br /><br /><strong>SOLUTION</strong><br />I assume that the axEdit_Repository was created in SourceGear Vault system to store projects for ApexSQL Edit. This repository has its working folder in the C:\Vault_WorkingFolder\axEdit_Repository_WF folder.<br />I also assume that SourceGear Vault is used by two users. <br />The first user mapped the axEdit_Dev database to the SourceGear Vault Server and assigned the database objects to the Vault repository.<br /><br />The second user would like to use already existing project in the Vault Repository. <br />She should:<br /><br />a) assign a local working folder to an existing project using Vault Client.<br /><br />To enable ApexSQL Edit to work with already existing projects within SourceGear Vault, the second user needs first to <b><u>create locally all Vault repository items </u></b> (projects/folders and script files).<br />She uses the Vault Client application and connects to axEdit_Repository. Then she selects the <b>Set Working Folder</b> command for the existing axEdit_Dev project. <br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr1-763222.PNG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 177px;" src="http://www.apexsql.com/training/uploaded_images/scr1-763210.PNG" border="0" alt="" /></a><br />And she assigns a local folder as the project’s working folder:<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr2-795574.PNG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 121px;" src="http://www.apexsql.com/training/uploaded_images/scr2-795571.PNG" border="0" alt="" /></a><br />At the end she runs the <b>Get Latest Version</b> command for the axEdit_Dev project. This command will copy all files for the project (and its sub-projects) to the local working folder. <br /><b>Note:</b> This configuration must be done to allow ApexSQL Edit working with existing projects defined in SourceGear Vault (existing Vault projects are not seen by ApexSQL Edit due to MSSCCI limitations unless they have at least one file inside).<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/scr3-723907.PNG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 201px;" src="http://www.apexsql.com/training/uploaded_images/scr3-723903.PNG" border="0" alt="" /></a><br /><br />b) map a database and its objects to an existing project using the Map Database command and Source Control Mapping Wizard.<br /><br /><strong>SEE ALSO</strong><br /><a href="http://www.apexsql.com/training/2009/03/how-to-map-database-to-source-control.htm" target="_blank">How to map a database to a Source Control System via MSSCCI driver using ApexSQL Edit</a><br /><br /><br /><strong>AUTHOR</strong><br />Anna Lesniak<br /><br /><strong>LAST REVIEW DATE</strong><br />25 March 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-6765895263438772903?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Anna Lesniakhttp://www.blogger.com/profile/02431393332730737446noreply@blogger.com0tag:blogger.com,1999:blog-160707082233884630.post-59619830991304247252009-03-17T17:48:00.025-04:002009-06-03T10:24:34.090-04:00How to configure Microsoft Visual SourceSafe to work with native Source Control drivers<span class="fullpost"><strong>DESCRIPTION</strong></span><br />This article describes important Microsoft Visual SourceSafe post installation steps and how to use it from ApexSQL applications.<span class="fullpost"><br /><br /><strong>SOLUTION</strong><br />We will cover the usage of Microsoft Visual SourceSafe 2005 but it is very same with the older Microsoft Visual SourceSafe 6.x versions.<br /><br />In Microsoft Visual SourceSafe you should have databases to work with. Let's say our database name is Production. Each database has a corresponding location on disk. To get a location of your database use the VSS Administrator tool, click CTRL+O and you will get Open Source Save Database Dialog like at the image.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/10-751362.png"><img style="cursor: pointer;" src="http://www.apexsql.com/training/uploaded_images/10-751355.png" alt="" border="0" /></a><br /><br />As you can see from the image our Production database is located in the folder <pre>c:\installed VSS</pre>Now we should set this folder as a network share.<br />If you are using XP system you should set the network easily as follows:<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/30-723798.png"><img style="cursor: pointer;" src="http://www.apexsql.com/training/uploaded_images/30-723794.png" alt="" border="0" /></a><br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/31-747090.png"><img style="cursor: pointer;" src="http://www.apexsql.com/training/uploaded_images/31-747067.png" alt="" border="0" /></a><br /><br />If you are using Vista system you should make something like this.<br /><br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/40-752572.png"><img style="cursor: pointer;" src="http://www.apexsql.com/training/uploaded_images/40-752566.png" alt="" border="0" /></a><br /><br />Now when the network share is set we are able to set the Microsoft Visual SourceSafe Source Control Data Source from ApexSQL applications...<br /><br /><b>Setting up the connection to a Microsoft Visual SourceSafe project</b><br /><br />Here I used ApexSQL Diff application as a showcase, but in general connecting to a Microsoft Visual SourceSafe is similar throughout all ApexSQL applications supporting Source Control.<br /><br />1. Choose a Source Control data Source type and click "Edit"<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/0-794088.png"><img style="cursor: pointer;" src="http://www.apexsql.com/training/uploaded_images/0-794086.png" alt="" border="0" /></a><br /><br />2. Select Microsoft Visual SourceSafe native driver<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/1-712820.png"><img style="cursor: pointer;" src="http://www.apexsql.com/training/uploaded_images/1-712818.png" alt="" border="0" /></a><br /><br />3. Set Microsoft Visual SourceSafe project access parameters<br /><a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apexsql.com/training/uploaded_images/2-736988.png"><img style="cursor: pointer;" src="http://www.apexsql.com/training/uploaded_images/2-736986.png" alt="" border="0" /></a><br /><br /><br />Let’s explain the fields that are in the image:<br /><br />* The <b>User</b> and the <b>Password</b> are the user credentials for accessing the Microsoft Visual SourceSafe server.<br />* The <b>Database</b> represents the path to a Microsoft Visual SourceSafe repository. It has the form HOSTNAME/REPOSITORY. HOSTNAME is a name of a Server machine where the Microsoft Visual SourceSafe server is installed; this name should be pingable from the network and it may be either NET BIOS name or the DNS name. REPOSITORY is a network share name from the HOST machine.<br />* The <b>Project</b> is a Project you made within your Microsoft Visual SourceSafe database (here within Production database)<br />* The <b>Working Folder</b> is some folder on your hard disk you have chosen to be your Microsoft Visual SourceSafe stub<br />* The <b>Version</b> can be either "latest version" or some labeled version chosen from the drop down select box.<br /><br /><br />You can always test the Connection using the Test button. In the case of problems you will receive the descriptive information about the problems when establishing a connection; otherwise you are ready to go.<br /><br /><strong>SEE ALSO</strong><br /><a href="http://msdn.microsoft.com/en-us/virtuallabs/aa740435.aspx">Microsoft Visual SourceSafe</a><br /><br /><strong>LAST REVIEW DATE</strong><br />March 18 2009</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/160707082233884630-5961983099130424725?l=www.apexsql.com%2Ftraining%2Findex.htm'/></div>Dejan Batanjachttp://www.blogger.com/profile/07872639969843407609noreply@blogger.com0