Click to enlarge
Granular configuration of history settings

With HindSight 2005, administrators can enable history at the server, database, table, or column level. For example, consider an application that updates a column called [KeepAliveDateTime] every five seconds. Because this data may not be important for historical review, the column can be disabled for history using the console. An update to any other column--as well as an insertion or deletion of a record--generates a corresponding history record.

Click to enlarge
Using snapshots to retrieve data from a point in time

HindSight 2005 provides inline functions that automate the recovery of historical data. These snapshots are identical to normal T-SQL statements, except that each SELECT or JOIN clause is followed by a datetime field. Snapshots can be joined or aggregated like normal T-SQL statements, as long as each clause is followed by the datetime field. In fact, snapshots from different points in time can be compared to each other in order to derive a "metaview" of inserts, updates, and deletes over time.

Click to enlarge
Automatic schema synchronization

Changes to the structure of your production databases can be replicated to the history schema automatically. HindSight 2005 verifies database and table definitions, column properties, user and role permissions, and role memberships. The console notifies the administrator of any schema anomaly on the server, and allows the administrator to approve an automatic synchronization.

Click to enlarge
Measuring database history usage

HindSight 2005 offers a management interface for viewing system usage down to the column level. The interface shows the comparative size of production and history databases, as well as the aggregate count of inserts, updates, and deletes recorded by the system. System metrics are essential when deciding whether to disable history on databases, tables, and columns.

Click to enlarge
Purging unneeded history records

The system can be configured to remove historical data automatically on a periodic basis. History records can be purged by age or record count, and purge settings can be customized for individual tables, databases, or the entire server.