Software Vendor vs. In-House Deployment

BTR2SQL serves two broad categories of customers, each with different deployment considerations:

  • Software Vendor — You ship a software product to many end-user sites. Migration and deployment must be repeatable, automated, and hands-off.

  • In-House — You maintain an internal application used by your own organization. Migration is typically a one-time event, and you have direct access to the machines.

Understanding which scenario applies to you will guide your choices for migration strategy, file layout, and configuration.

Software Vendor Deployment

As a software vendor, your goal is a deployment package that can be installed on customer machines with minimal manual intervention. Key considerations:

Migration strategy

Start by developing and testing your migration process in-house using the GUI Migration Utility or MdsMigrateTable command-line tool. The goal is to build a reproducible, scripted process using the command-line tools that can be run reliably at each existing customer site to migrate their data from Btrieve to SQL. For new customers who have no existing Btrieve data, use XML deployment with MdsMigrateTable to create tables and INT files as part of your installer.

Driver files

Bundle the Mertech replacement DLL, the license file (.cfg), and the mds_global.ini in your application’s installation directory. Use the 32-bit DLLs (w3btrv7.dll / wbtrv32.dll) or 64-bit DLLs (w64btrv.dll / wbtrv64.dll) to match your application’s bitness. See Runtime File Setup for the complete file list.

Connection configuration

Use the mds.ini file to define server, database, and credential settings. For secure credential storage, use MdsEncryptPassword or Windows Credential Manager integration.

Tracing in the field

Ship with production tracing enabled so that errors are captured on customer machines. This makes remote troubleshooting significantly easier.

In-House Deployment

As an in-house customer, you typically migrate once and manage the deployment directly. Key considerations:

Migration strategy

Use the GUI Migration Utility for the initial migration. This is the most straightforward approach when you have direct access to the Btrieve data files, DDFs, and the SQL backend. For tables without DDFs, MdsMigrateFile provides an alternative.

Driver files

Deploy the same set of runtime files as a software vendor (see Runtime File Setup), but you may choose to place shared files on a network path or distribute them through your organization’s software deployment tools.

Connection configuration

In an in-house environment, you may want to centralize connection settings. The mds.ini file supports folder-level inheritance, so a single mds.ini placed at a common root can serve multiple data directories.

Ongoing maintenance

Configure production tracing so that errors and warnings are always captured. Tracing settings can also be adjusted at runtime using MdsSetSetting or environment variables without restarting the application.

Important

The full BTR2SQL installation (Migration Utility, command-line tools, etc.) should not be deployed to end-user client machines. Only the runtime files listed in Runtime File Setup are needed. Installing the full toolkit on client machines exposes utilities such as MdsEncryptPassword that could be used to decrypt stored credentials, which is a security risk.

Choosing a Migration Approach

Scenario

Recommended Tool

Notes

First-time migration with DDFs

GUI Migration Utility or MdsMigrateTable

GUI is easiest for one-off migrations; command line is better for scripting.

Automated deployment to customer sites

MdsMigrateTable with XML configuration

XML files let you define the entire migration declaratively. See XML Deployment.

Migration without DDFs

MdsMigrateFile

Uses B_STAT to determine file structure. Intended as a last-resort approach.

Schema updates after initial migration

MdsMigrateTable with /createtable and /copydata

Use /overwrite to truncate and reload data when needed.

Validation after migration

MdsMigrateTable with /validate or MigrationValidator

Confirms that data was correctly transferred.