ApexSQL Log API release notes

Release: 2011.03.1090
Date: May 17, 2013
Description: Hot-fix release

Fixes:

  • The "Cannot read from shared memory (9)" error is encountered when attempting to connect to a SQL Server installed on a system with Data Execution Prevention (DEP) turned on, or on a system that’s had its hardware ID changed

Release: 2011.03.1087
Date: January 25, 2013
Description: Hot-fix release

Fixes:

  • The "System.PlatformNotSupportedException" error is encountered when the application is running on Windows XP and a full database backup is added

Release: 2011.03.1086
Date: January 22, 2013
Description: Hot-fix release

Fixes:

  • Update operations can’t be reconstructed when a database is restored from a backup and multiple sets of full database and transaction log backups are used as additional data sources
  • Some operations are not detected when the latest transaction log backup, created prior to a full database backup from which the database has been restored, is used as an additional data source
  • Depending on the data size, up to 20 operations from the first segment of the transaction log are skipped when reading multiple sets of full database and transaction log backups stored in the same backup file

Release: 2011.03.1081
Date: December 05, 2012
Description: Hot-fix release

Fixes:

  • The "Object reference not set to an instance of an object" error is encountered on SQL Server 2005 or later when exporting transactions to HTML
  • The "ExecQuery failed: File device name not found due to following error (1): CreateFile() failed : The system cannot find the path specified. [0x00000003] [0x20000005]" error is encountered in SQL Server 2005 or later, when auditing a database restored from a backup made after the database had been set to read-only
  • The "Attempted to read or write protected memory" error is encountered in SQL Server 2005 or later when auditing a database restored from a backup made after the database had been set to read-only
  • The "SafeCast<> from __int64 (-65536) to unsigned int failed" error is encountered in SQL Server 2005 or later when auditing a database restored from a backup made after the database had been set to read-only
  • The "Object reference not set to an instance of an object" error is encountered when auditing a database with large BLOBs

Release: 2011.03.1072
Date: October 18, 2012
Description: Hot-fix release

Fixes:

  • "ExecQuery failed: File device name not found due to following error (1): CreateFile() failed : The system cannot find the path specified. [0x00000003] [0x20000005]" error is encountered on SQL Server 2005 or later when auditing a database restored from a backup made after the database was put in read-only mode

Release: 2011.03.1071
Date: October 04, 2012
Description: Hot-fix release

Fixes:

  • "Gap in log source detected" warning message is written to the application log when auditing transaction a log backup file if not all operations were found in the file itself

Release: 2011.03.1067
Date: September 06, 2012
Description: Hot-fix release

Fixes:

  • "Auditor initialization failed" error is encountered during auditing process when using server side auditing in up to 1% cases

Release: 2011.03.1066
Date: August 13, 2012
Description: Hot-fix release

Fixes:

  • "Check the prerequisites on the target server" error is encountered when auditing server with highly restrictive security settings

Release: 2011.03.1065
Date: August 10, 2012
Description: Hot-fix release

Fixes:

  • 'Last 'N' minutes/hours' transaction filter doesn't exclude all operations that do not belong to the specified time range
  • 'Check the prerequisites on the target server' error is encountered when auditing server with highly restrictive security settings

Release: 2011.03.1062
Date: August 09, 2012
Description: Minor feature, minor fix release

Enhancements:

  • The API is now FIPS compliant
  • Improved server side auditing stability and performance up to 5%

Fixes:

  • 'Online file not found' error message is encountered when auditing databases that contain multiple transaction logs on SQL server 2005 and later
  • 'Conversion from class _variant_t to short failed' error message is encountered when auditing database that contains short data type in variant fields
  • 'Insufficient permissions to access log file' error message is encountered when auditing database that contains multiple transaction logs on SQL Server 2005 or later
  • All rows from Tables are not read from compressed backups that are internally optimized by SQL Server

Release: 2011.02.1055
Date: May 18, 2012
Description: Minor feature, medium fix release

Enhancements:

  • Natively compressed transaction log and database backups can now be audited
  • Server Side Components installation will no longer ask for credentials if run from an administrator account
  • Visual C++ run-time components will now install automatically on the remote server during the Server Side Components installation process
  • Up to 40% increase in performance when auditing transaction logs
  • DML undo and redo scripts can now be generated using the Auditor class

Changes:

  • API assemblies are compiled for .NET Framework 3.5 with SP1 target

Known limitations:

  • Changes from WRITETEXT and UPDATETEXT commands are not detected
  • UPDATE operations affecting only data in obsolete BLOB data types (TEXT, NTEXT, IMAGE) are not detected
  • Changing the table data compression renders reconstruction of previous table data changes impossible

Release: 2011.01.1039
Date: December 16, 2011
Description: Major feature, minor fix release

Enhancements:

  • Application now supports auditing of SQL Server Denali CTP3 databases
  • API now fully supports auditing of the following SQL Server Denali CTP3 DDL operations: CREATE/ALTER/DROP SEQUENCE
    CREATE/ALTER/DROP TABLE … AS FILETABLE
    CREATE/DROP COLUMNSTORE INDEX
  • Application stability has been improved when auditing larger than 32 GB transaction logs
  • Memory consumption has been improved when auditing transaction logs larger than 2 GB by preventing memory overuse
  • Performance has been improved by 40% when auditing transaction logs with more than 1,000,000 operations
  • The following new events have been added: ApexSql.Log.Auditor.OnMatchingOperationFound event is fired by Auditor object for each ILogOperation object that passed the given filter
    ApexSql.Log.Auditor.OnAuditingCompleted event is fired when auditing process is finished by any reason
  • The following new exceptions can now be thrown: InsufficientFileAccessPermissionsException thrown when file cannot be created or deleted during installation of Server Side Components
  • Auditing of page and row compressed tables is now supported
  • Auditing of SPARSE columns is now supported
  • Application can now reconstruct changes made with SELECT INTO statements
  • Application can now reconstruct changes to numeric data stored in the vardecimal storage format

Fixes:

  • Old table ID mapping doesn't work when transaction log processing is performed on the server

Changes:

  • Server Side Components of all older versions will now be uninstalled from the server when installing a newer version
  • The following methods have been marked as obsolete: ApexSql.Log.Auditor.Kill (ApexSql.Log.Auditor.Abort should be used instead)
  • The following delegates have been marked as obsolete: ApexSql.Log.Auditor.MatchingDmlOperationsFoundEventHandler (MatchingOperationFoundEventHandler should be used instead)
    ApexSql.Log.Auditor.AuditingFinishedEventHandler (AuditingCompletedEventHandler should be used instead)
  • The following events have been marked as obsolete: ApexSql.Log.Auditor.OnMatchingDmlOperationsFound (ApexSql.Log.Auditor.OnMatchingOperationFound should be used instead)
    ApexSql.Log.Auditor.OnAuditingFinished (ApexSql.Log.Auditor.OnAuditingCompleted should be used instead)
  • The following properties have been marked as obsolete: ApexSql.Log.Engine.Log (ApexSql.Common.Logging.Logger should be used instead)
    ApexSql.Engine.IDataSource.Tables (ApexSql.Engine.IDataSource.TablesCollection should be used instead)
    ApexSql.Log.ITable.IsApplicationTable (ApexSql.Log.ITable.IsApexSqlApplicationTable should be used instead)
    ApexSql.Log.Column.FullTypeName (ApexSql.Log.Column.FullTypeDeclaration should be used instead)
    ApexSql.Log.LogOperation.ClusteredIndexValues (ApexSql.Log.LogOperation.ClusteredKey should be used instead)
    ApexSql.Log.Row.ClusteredIndex (ApexSql.Log.Row.ClusteredKey should be used instead)

Known limitations:

  • Changes from WRITETEXT and UPDATETEXT commands are not detected
  • UPDATE operations affecting only data in obsolete BLOB data types (TEXT, NTEXT, IMAGE) are not detected
  • Change to the table data compression option renders reconstruction of older changes to the table data impossible
Release: 2010.02.1004
Date: February 16, 2011
Description: Major feature, medium fix release

Enhancements:

  • All transaction log processing can now be done on the server with only results sent to the client
  • Depending on the case auditing performed on the server can significantly improve overall performance vs. auditing performed locally on the client (from 10% to more than 400%)
  • API now fully supports auditing of the following DDL operations: CREATE/ALTER/DROP TABLE, CREATE/ALTER/DROP FUNCTION, CREATE/ALTER/DROP PROCEDURE, CREATE/ALTER/DROP TRIGGER, CREATE/ALTER/DROP VIEW, CREATE/DROP CHECK CONSTRAINT, CREATE/DROP DEFAULT, CREATE/DROP DEFAULT CONSTRAINT, CREATE/DROP FOREIGN KEY, CREATE/DROP INDEX, CREATE/DROP PRIMARY KEY, CREATE/DROP RULE, CREATE/DROP SCHEMA, CREATE/DROP STATISTICS, CREATE/DROP TYPE, GRANT PERMISSIONS, RENAME OBJECT, REVOKE PERMISSIONS
  • Encrypted SQL Server objects get fully decrypted in auditing of DDL operations
  • API now supports filtering by Unknown transaction state
  • Specific backup sets can now be used as a data source
  • Installing Server Side Components remotely now doesn’t require administrative shares on the remote server (requires membership in the sysadmin server role)
  • UPDATE reconstruction has been improved and now covers even more edge cases which results in improved accuracy of auditing trail
  • Performance of UPDATE reconstruction has been improved for rarely updated rows (up to 400% depending on internal state of the operation)
  • Amount of memory required for UPDATE reconstruction has been reduced by 10% on average
  • Online transaction logs and available database backups are now identified faster (proportionally to their count)
  • New Operation Range filter is now available (when specified LSNs are not available nearest existing ones are used instead)
  • BinaryStream class has been improved by new BLOB-to-BLOB stream comparison capability
  • The following new namespaces have been added: ApexSql.Engine
  • The following new interfaces have been added: ApexSql.Engine.IBackup allows an object to act as a source of backup data ApexSql.Engine.IBackupSource allows an object to act as a source of backups ApexSql.Engine.IColumn describes common interface for all column types ApexSql.Engine.IDataSource describes common interface for all database types ApexSql.Engine.IField describes common interface for all field types ApexSql.Engine.IFieldFilter allows an object to filter IField objects ApexSql.Engine.IFieldVisitor allows an object to visit objects implementing IField interface ApexSql.Engine.IOfflineDataSource describes common interface for all offline database types ApexSql.Engine.IRow describes common interface for all row types ApexSql.Engine.IRowFilter allows an object to filter IRow objects ApexSql.Engine.ISystemProperties describes common interface for all system property types ApexSql.Engine.ITable describes common interface for all table types ApexSql.Engine.ITableDataReader describes common interface for all table data reader types ApexSql.Engine.ITableFilter allows an object to filter ITable objects ApexSql.Log.IAuditingFilter allows an object to act as auditing filter for Auditor class ApexSql.Log.IDdlLogOperation describes common interface for all DDL operation types ApexSql.Log.IDdlLogOperationFilter allows an object to filter DdlLogOperation objects ApexSql.Log.IDdlLogOperationProcessorFactory allows an object to create objects that implement ILogOperationProcessor and that are used in DDL processing ApexSql.Log.IDdlLogOperationVisitor allows an object to visit DdlLogOperation objects ApexSql.Log.ILogOperation describes common interface for all transaction log operations ApexSql.Log.ILogOperationFilter allows an object to filter ILogOperation objects ApexSql.Log.ILogOperationProcessor allows an object to process ILogOperation objects and transform them into other ILogOperation objects ApexSql.Log.ILogOperationSource allows an object to act as a source of ILogOperation objects ApexSql.Log.ILogOperationSourceReader allows an object to read operations from transaction log source ApexSql.Log.ILogOperationSourceSequntialReader allows an object to sequentially read operations from a transaction log source in either forward or backward direction ApexSql.Log.ILogOperationSourceRandomReader allows an object to randomly read operations from a transaction log source ApexSql.Log.ILogOperationVisitor allows an object to visit transaction log operations ApexSql.Log.ITransactionFilter allows an object to filter Transaction objects ApexSql.Log.IDmlLogOperationFilter allows an object to filter DmlLogOperation objects ApexSql.Log.ITransactionAuditor allows an object to audit transactions from a transaction log ApexSql.Log.IDmlLogOperation describes common interface for all DML operation types
  • The following new classes have been added: ApexSql.Engine.BackupId uniquely identifies a backup in any backup source ApexSql.Log.AuditingParameters holds input parameters for an auditing process ApexSql.Log.AuditingFilter implements IDmlLogOperationFilter interface ApexSql.Log.BinaryData used as wrapper for communication between CLI and Native code ApexSql.Log.TransactionAuditor used to read transactions sequentially from the transaction log sources ApexSql.Log.LogSource allows you to read operations from a transaction log
  • The following new methods have been added: ApexSql.Log.Auditor.GetOperations() returns ILogOperation objects ApexSql.Log.Database.FindTableMapping() returns the mapped table ID for the given table ID or the given table ID if the mapping doesn't exist ApexSql.Log.Engine.CreateBackupSource() returns an object implementing IBackupSource for the given files ApexSql.Log.Engine.CreateOfflineDatabase() returns OfflineDatabase object to reads the given backup files ApexSql.Log.Engine.ReleaseMemory() releases memory used object-independent and object-dependent caches ApexSql.Log.Field.SetBinaryStream() sets binary stream object for reading BLOB values ApexSql.Log.Transaction.GetReversedEnumerator() creates and returns an enumerator that traverses operations done in the transaction from the end to the beginning ApexSql.Log.Transaction.GetReversedOperations() creates and returns an object that traverses all transaction operations in the reverse order ApexSql.Log.Transaction.GetFilteredEnumerator() creates and returns an enumerator that traverses all transaction operations that pass the given filter ApexSql.Log.Transaction.GetFilteredOperations() creates and returns an object that traverses all transaction operations that pass the given filter
  • The following new properties have been added: ApexSql.Log.Config.LoggingConfiguration.useInterprocessLogger allows synchronous writing from several different processes to the same log file at the same time ApexSql.Log.Config.LoggingConfiguration.additionalHeaderInfo defines what is added to each log file entry after common header and before specific message ApexSql.Log.Transaction.BeginLsn returns 1st LSN of the transaction ApexSql.Log.Transaction.EndLsn returns last LSN of the transaction ApexSql.Log.Transaction.UserIsKnown indicates whether info on the user initiated the transaction is available ApexSql.Log.Transaction.ClientHostIsKnown indicates whether info on the client host the transaction was initiated on is available ApexSql.Log.Transaction.ApplicationIsKnown indicates whether info on the application the transaction was initiated from is available ApexSql.Log.Row.SlotId is the slot ID of the row ApexSql.Log.Auditor.DataSource is Database object being audited ApexSql.Log.Database.ServerInstanceName returns server instance name as returned by SERVERPROPERTY('servername') T-SQL function ApexSql.Log.Database.ServerBinnPath returns server instance Binn path ApexSql.Log.RowFieldComparisonItem.regex handles custom regular expressions comparison ApexSql.Log.Column.SqlServerTypeDeclaration is strict SQL Server type declaration ApexSql.Log.Column.FullTypeDeclaration is user defined or SQL Server type declaration from the given database
  • The following new exceptions can now be thrown: OperationDoesNotExistException thrown when GetOperation(s) is invoked with unavailable LSN UnknownFileFormatException thrown when the given input files are of unknown format SsaFailedException thrown when Server Side Auditing stops working ApexSql.Engine.EngineException base class for all exceptions
  • The following new enums have been added: ApexSql.Log.AuditingOutputOption represents possible operation output from auditing process options ApexSql.Log.LogReadingDirection represents possible directions of transaction log reading ApexSql.Engine.BackupType represents possible backup types

Changes:

  • Server Side Components are no longer installed in SQL Server's Binn directory (except for extended stored procedures dll which has to be installed there due to limitations of SQL Server)
  • Auditor.OperationVisitedEventHandler delegate and its event have been removed
  • ApexSql.Log.Transaction class now implements IEnumerable interface
  • ApexSql.Engine.BinaryStream class now implements IEquatable, IComparable and IComparable interfaces
  • The following properties have been marked as obsolete: ApexSql.Log.Column.FullTypeName (FullTypeDeclaration should be used instead) ApexSql.Log.Auditor.RunSmall (both obsolete and ignored; AuditingParameters.RunSmall should be used instead) ApexSql.Log.DmlFilter (AuditingFilter should be used instead) ApexSql.Table.IsApplicationTable (IsApexSqlApplicationTable should be used instead)
  • Transaction.LogOnTime property type has been changed from String to DateTime
  • All exceptions now inherit ApexSql.Engine.EngineException instead of System.Exception
  • LogSourceProperties and DataSourceProperties have been converted to be immutable classes
  • LogSourceProperties.type and LogSourceProperties.fileName fields have been hidden behind Type and FileName properties respectively
  • DataSourceProperties.type and DataSourceProperties.fileName fields have been hidden behind Type and FileName properties respectively
  • The following types have been moved to ApexSql.Engine namespace: ApexSql.Log.LogSourceType ApexSql.Log.DataSourceType ApexSql.Log.LogSourceProperties ApexSql.Log.DataSourceProperties ApexSql.Log.DatabaseFieldType
  • The following types and type members have been renamed: ApexSql.Engine.DatabaseFieldType.SmallDatetime class to ApexSql.Engine.DatabaseFieldType.SmallDateTime ApexSql.Log.Transaction.LoginTime property to ApexSql.Log.Transaction.LogOnTime
  • Obsolete Auditor.Start() and Auditor.StartReversed() methods have been removed

Changes:

  • Corrupted Connection Monitor tables can cause performance degradation (up to 2 times and more)
  • SQL Server 2005 transaction logs cannot be read on SQL Server 2008 instances
  • Connection Monitor does not start with an exception on databases with trailing spaces or special connection string characters ('[];) in the name
  • Nothing is returned from auditing if path to temporary directory is too long
  • Server Side Components cannot be installed on Windows Vista/2008 Server/7 with User Account Control (UAC) ON
  • "SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM." error is encountered on attempt to audit detached transaction logs from different databases at the same time
  • SQL Server service shuts down if installation of Server Side Components fails
  • "QueryDosDevice() failed - Access is denied" error is logged into application log in case SQL Server service is running under built-in Network Service account
  • “ExecQuery failed: Unknown exception occurred” error is logged into application log on installation of Server Side Components in case the account SQL Server is running under has no EXECUTE permissions on xp_ApexSqlLog2008 or xp_ApexSqlLogApi2008 extended stored procedures
  • Server Side Components cannot be uninstalled from local SQL Server 2008 instance under Windows Authentication
  • “Incorrect DBCC statement” error is encountered when installing Server Side Components if selected SQL Server account has insufficient permissions
  • System.Net.Sockets.SocketException exception is encountered on attempt to audit transaction log backups or detached transaction logs on remote SQL Server instance
  • System.OutOfMemoryException exception is encountered when auditing databases with more than 1M operations
  • “External component has thrown an exception” error is encountered when auditing SQL Server 2005 databases with more than 2G BLOB fields
  • Nothing is returned when auditing databases from a local SQL Server instance with AuditorType.ServerSide parameter

Known limitations:

  • Changes from WRITETEXT and UPDATETEXT commands are not detected
  • UPDATE operations affecting only data in obsolete BLOB data types (TEXT, NTEXT, IMAGE) are not detected

Known issues:

  • “Attempted to read or write protected memory” error is encountered on uninstalling not yet installed server-side components
  • Auditor object created with AuditorType.ServerSide parameter for local database won’t return any data to the client

Release: 2008.05.0834
Date: December 14, 2009
Description: Medium feature, medium fix release

Fixes:

  • The following new classes have been added to the API: ApexSql.Log.InsertDeleteRowOperation class used between InsertRowOperation and DeleteRowOperation on one hand and DmlLogOperation on the other
  • The following new methods have been added: Utility.CheckSource() method for log sources checks accessibility of a log source Utility.CheckSource() and Utility.CheckSources() methods for data sources check accessibility of data sources ServerSideComponentsManager.StartConnectionMonitor() method starts Connection Monitor if it is already enabled Database.ProcessServerSideLogMessages() method retrieves server-side logs from the server Auditor.StartReversed() method audits operations in backward order; used for UNDO operations Config.ConfigureIntermediateFilesPath() method configures path for the intermediate files created during auditing RowHistory.GetColumnType() method retrieves Column Type ServerSideComponentsManager.EnableConnectionMonitor() method enables Connection Monitor but doesn't start it ServerSideComponentsManager.StartConnectionMonitor() method starts Connection Monitor on the server if it is enabled ServerSideComponentsManager.StopConnectionMonitor() method stops Connection Monitor on the server ServerSideComponentsManager.StopAndDisableConnectionMonitor() method stops and disables Connection Monitor on the server ServerSideComponentsManager.DeleteAllConnectionMonitorData() method deletes all login data from APEXSQL_LOGIN, APEXSQL_LOG_CONNECTION_MONITOR_SESSION tables used by Connection Monitor ServerSideComponentsManager.InstallComponentsWithDefaultServerLogon() method tries to install server-side components using Windows account that SQL Server is running from ServerSideComponentsManager.UninstallComponentsWithDefaultServerLogon() method tries to uninstall server side components using Windows account that SQL Server is running from ServerSideComponentsManager.InstallComponentsWithServerLogon() method tries to install server side components using specified Windows account information ServerSideComponentsManager.UninstallComponentsWithServerLogon() method tries to uninstall server side components using specified Windows account information ServerSideComponentsManager.StartServerHelperWithServerLogon() method starts Server Helper service using specified Windows account information ServerSideComponentsManager.StartServerHelperWithDefaultServerLogon() method starts Server Helper service using Windows account that SQL Server is running from ServerSideComponentsManager.SetConnectionMonitorCleanupInterval() method sets time interval in seconds which indicates how often data should be purged from APEXSQL_LOGIN, APEXSQL_LOG_CONNECTION_MONITOR_SESSION tables used by Connection Monitor ServerSideComponentsManager.GetConnectionMonitorCleanupInterval() methods gets time interval in seconds which indicates how often data should be purged from APEXSQL_LOGIN, APEXSQL_LOG_CONNECTION_MONITOR_SESSION tables used by Connection Monitor ServerSideComponentsManager.CheckConnectionMonitorDatabaseName() method checks if specific database can be used by Connection Monitor ServerSideComponentsManager.SetConnectionMonitorDatabaseName() method sets database name that should be used by Connection Monitor; Database will not be created ServerSideComponentsManager.GetConnectionMonitorDatabaseName() method gets database name that is currently used by Connection Monitor ServerSideComponentsManager.SetConnectionMonitorServerLogon() method sets account information under which Connection Monitor is running ServerSideComponentsManager.CheckConnectionMonitorServerLogon() method checks if Connection Monitor can run under specified account information
  • The following new properties have been added: ServerSideComponentsManager.ServerHelperServiceStatus is the current status of Server Helper service ServerSideComponentsManager.ComponentsVersion is the version of currently installed Server Side Components Field.Type is the SQL type of the field Field.Column is the Column object Field.ColumnId is the ID number of the column Row.Table is the Table object to which the row belongs to ServerSideComponentsManager.ConnectionMonitorStatus is the current status of Connection Monitor Config.Initialized signals if the API has been initialized Transaction.UserIdSid returns SID if it is available or ID of the user that created this transaction Transaction.LoginTime returns login time of the connection on which this transaction was created Database.Id returns the ID of the database Database.FamilyGuid returns family GUI of the database Database.Collation returns collation ID of the database Database.DateCreated returns database creation date Database.KeepConnectionOpen indicates whether database connection should be kept open all the time or be immediately closed after use
  • The following new exceptions can now be thrown from the API: CannotAccessDataSourceException InsufficientCredentialsException BadConnectionMonitorConfiguration ConnectionMonitorErrorException InsufficentInstallPermissionsException InsufficentExecPermissionsException
  • The following new enums have been added: ApexSql.Log.ConnectionMonitorAuthentication ApexSql.Log.ServiceStatus
  • Field.GetBinaryStream() method can now return binary stream for any data type not just BLOBs
  • BLOB reading now consumes less memory (up to 50% less)

Fixes:

  • It's impossible to connect to SQL Server using Windows Authentication under Vista with active UAC
  • When a machines' hardware ID changes, the server's activation status becomes invalid and re-activating is not possible
  • "Unknown SQL Server version" error is thrown when reading SQL Server 2000 backups
  • Online transaction log files sometimes cannot be accessed on an x86 OS that has more than 4 GB of RAM
  • SPID values are incorrectly outputted for SQL Server 2008
  • The application fails when trying to read SQL Server 2000 database backups
  • Servers with expired evaluation can’t be activated
  • Online transaction log and database files hosted on Windows 2000 cannot be read
  • BLOBs whose data type has been changed are outputted incorrectly
  • UPDATE operations are sometimes not reconstructed correctly even when there is enough data to do so
  • SMALLMONEY values are outputted incorrectly
  • Table filters work incorrectly for SQL Server 2000 transaction logs audited under SQL Server 2005/2008
  • Server Helper service can’t be started correctly if installed over older version of Server-side Components

Changes:

  • API now throws ApexSql.Log.Exception instead of System.Exception. ApexSql.Log.Exception inherits System.Exception so no user code needs to be changed
  • Server-side components have been split to two independent sets: server-side components for ApexSQL Log and server-side components for ApexSQL Recover. On upgrade, un-used server-side components are deleted. Split ApexSqlServerXprocs2008.dll into ApexSqlLog2008Xprocs.dll and ApexSqlRecover2008Xprocs.dll Split ApexSqlServerHelper2008.exe into ApexSqlLog2008ServerHelper.exe and ApexSqlRecover2008ServerHelper.exe Split ApexSqlServerHelper2008.sys into ApexSqlLog2008ServerHelper.sys and ApexSqlRecover2008ServerHelper.sys
  • Renamed xp_ApexSqlConnectionMonitor2008* extended procedures to xp_ApexSqlLog2008ConnectionMonitor*
  • Renamed sp_ApexSqlConnectionMonitor2008* stored procedures to xp_ApexSqlLog2008ConnectionMonitor*
  • All server-side logs for the application's server-side components are consolidated into one log file: ApexSqlLog2008.log
  • All application logs, both client and server-side, are now in UNICODE
  • Evaluation period for each server has been changed from 30 to 14 days
  • The following methods of ApexSql.Log.ServerSideComponentsManager class have been marked as obsolete: ForceStartConnectionMonitor DisableConnectionMonitor InstallComponents UninstallComponents

Release: 2008.03.0716
Date: August 13, 2009
Description: Minor fix release

Fixes:

  • Not all operations are shown in the main grid for SQL Server 2008 transaction logs
  • Uninstaller doesn't remove server-side components from server
  • Installation of server-side components after auto-updating from previous major version fails
  • CHAR and NCHAR values having trailing spaces in output
  • Some DateTimeOffset values cause exceptions
  • MONEY, SMALLMONEY, DATE, DATETIME2, DATETIMEOFFSET and TIME values have wrong output
  • Binary data was not read correctly
  • "]" character in column names and object names causes incorrect results
  • UNICODE collations are reported as invalid collations
  • Unknown SQL Server version is being reported in some rare situations
  • Logging statistics can cause exceptions in some rare situations
  • Server-side issue with identifying correct device names

Release: 2008.01.0609
Date: November 11, 2008
Description: Major release
Note: In 2008, ApexSQL Log was split into two products: ApexSQL Log and ApexSQL Recover. The functionality of the Recovery Wizard of ApexSQL Log has been moved to this new product, ApexSQL Recover. ApexSQL Log will continue to exist and will primarily be used for auditing

Enhancements:

  • Added support for reading SQL Server 2008 transaction logs (MAJOR ENHANCEMENT)
  • Added support for new SQL Server 2008 types (MAJOR ENHANCEMENT): DATE, DATETIME2, DATETIMEOFFSET, TIME, HIERARCHYID, GEOMETRY, GEOGRAPHY
  • Added database backups as optional source of auditing data (MAJOR ENHANCEMENT)
  • Added support for COLLATE and code pages in auditing and recovery (MAJOR ENHANCEMENT)
  • Improved scalability when working with very large transaction log files by an order of magnitude (MAJOR ENHANCEMENT)
  • Improved general auditing performance by approximately 25%
  • Added support for filtering uncommitted transactions
  • Added support for in-row values of XML data type
  • Added integrity check for server-side components
  • Added tabled IDs to CREATE/DROP TABLE statements
  • Improved statistics logging for queries and global memory

Changes:

  • Moved application log and other temporary application files from "Program Files" to user's own directories

Changes:

  • Performance problem when reconstructing updates on tables with clustered indexes
  • A problem with transaction log reading
  • A minor problem with application's finalization
  • A minor problem with logging
  • A problem with MONEY and SMALLMONEY formatting

Release: 2005.11.0534
Date: June 3, 2008
Description: Medium fix release

Enhancements:

  • Improved transaction log reading performance
  • Added reading of transaction logs for February CTP of SQL Server 2008

Changes:

  • Moved application log and other temporary application files from "Program Files" to user's own directories

Fixes:

  • A problem with UPDATE reconstruction when row has versioning info data (MAJOR FIX)
  • A problem with row reading when row has versioning info data (MAJOR FIX)
  • A problem with UNDO statements not being output in reverse
  • A problem with clustered indexes with more than one variable length column
  • A problem with UPDATE reconstruction when analyzing databases created on SQL7/2000 but now hosted on SQL 2005/2008
  • A problem with passing through invalid rows when field filtering is used
  • A rare problem with transaction log reading on SQL Server 2005/2008
  • A rare problem with transaction log reading on SQL Server 2005/2008 with databases upgraded from SQL Server 7/2000
  • A rare problem with tempdb getting blocked on SQL Servers with very high load level

Release: 2005.10.0502
Date: November 5, 2007
Description: Initial release