Multiple InterBase Instances

Way back in 2000, InterBase 6.0 was made open source. Soon a fork was made in the code and Firebird SQL was born. I started using this new powerful database engine and as InterBase went back to being a closed-source product, stuck with the free version or used other database engines. Many tools and Delphi component sets still support both IB and FB as they are still quite similar.

Recently, I was doing some research for a potential project dealing with InterBase and figured I should have IB installed for testing to make sure there were no surprises. I got the latest version installed and discovered the client had a previous version installed. Reading through the IB documentation, I discovered that IB allows for multiple versions to be installed simultaneously (this feature came out with version 7.5). The installer walks you through selecting a unique port and service name and sets it all up nicely.

The default service name and default port for IB are "gds_db" and 3050. Since I needed to install an earlier version (XE7), I now had two service names, one named "gds_db" and one named "XE7".

Since I like things named clearly and consistently, this just would not do. So, of course, I went looking through the documentation to figure out how to change it. I found an installer.log file and found it made several registry entries to start the Windows services. There are two services for each InterBase instance, a "guardian" service and the database service itself. (I believe the "guardian" service is there just to make sure the database service stays alive.) I figured I could just change a config file or a registry entry and clean up my naming and port assignments.

The registry entries to start the Windows services can be found in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services and they each start with IB so they weren't too difficult to find. And it looked like simply changing a couple of keys would do the trick: DisplayName and ImagePath. DisplayName is just the name that will be shown in the list of services and changing that is harmless. But the -p parameter in the ImagePath key defines the name of the service. It took me a while of trying to change that and finding InterBase would not start before I realized that the service name has to be uninstalled and reinstalled--I guess a copy of it (or a reference?) is buried somewhere deep in the Windows internals because I could never figure out how to change the service name from "gds_db" to anything more readable. (Looking back, I suppose I could've manually uninstalled the services and reinstalled using the sc command.)

If you want multiple instances of InterBase installed on the same machine simultaneously, you can do it, but use the installer--don't try to change the registry entries

One more thing, there's what looks like a config file in the installation folder for InterBase called, values.txt. That contains the port and service name setup during installation. I was hoping that changing the port number in that file (if assigned incorrectly during installation), would change what the IB engine runs. But even after shutting down the service, running Notepad as Administrator, changing the port and saving the file, then restarting the service, it was still trying to use the old port number.

So again, just use the InterBase installers if you need to change parameters!