Firebird support running as service or application mode. It always confuse me and I don't know what is the best working mode in my daily development and deployment environment.
Running Firebird as application
Running Firebird as application provide developer greater control during development process. It allow user to start and stop the application anytime. It also allow user to run various version of Firebird easily without performing any installation in privilege account.
The following example show deployment strategy of running few instances of Firebird as application. First, obtain the following zip archive files from Firebird installation repositories:
- Firebird-188.8.131.5285-0_Win32.zip / Firebird-184.108.40.20685-0_x64.zip
- Firebird-220.127.116.11074-0_Win32.zip / Firebird-18.104.22.168074-0_x64.zip
Extract the zip archive files in your account profile: e.g: %USERPROFILE% (c:\Users\my-account)
Open Windows Registry Editor, and locate the key:[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
Enter the following entries:"FB156"="C:\Users\my-account\Firebird-22.214.171.12426-0_win32\bin\fbserver -a"
"FB213"="C:\Users\my-account\Firebird-126.96.36.19985-0_x64\bin\fbserver -a -p 3213"
"FB250"="C:\Users\my-account\Firebird-188.8.131.52074-0_x64\bin\fbserver -a -p 3250"
Parameter –a indicates the application should run as application. Parameter –p specify the port number the application should listen to. Please note that port number is should be used by application exclusively.
You should logoff from your account and logon again to activate the changes.
The above example deploy 3 instance of Firebird:
- Firebird-184.108.40.20626-0_win32 listen on default port 3050
- Firebird-220.127.116.1185-0_x64 listen on port 3213
- Firebird-18.104.22.168074-0_x64 listen on port 3250
Running Firebird as service
If you run Firebird 1.5 or Firebird 2.0/2.1 binary setup file, you may specify if you want to run Firebird as application or service. For Windows 2000, XP, Vista and above, you should choose to run Firebird as service. You may also configure the running mode after installation in Firebird Control Panel Applet.
It is not necessary to run Firebird Guardian for Firebird running in service mode.
Install Firebird service with command line tool
Apart from the common GUI configuration we familiar for Firebird startup configuration, we may also use the command line tool to perform the configuration. The tool is call "instsvc.exe" that is usually located in "%ProgramFiles\Firebird\Firebird_X_X\bin". We may use the tool to configure the running mode, and start or stop the Firebird Service:
instsvc i[nstall] [ -s[uperserver]* | -c[lassic] ]
[ -a[uto]* | -d[emand] ]
[ -g[uardian] ]
[ -l[ogin] username [password] ]
sta[rt] [ -b[oostpriority] ]
This utility should be located and run from the 'bin' directory
of your Firebird installation.
'*' denotes the default values
'-z' can be used with any other option, prints version
'username' refers by default to a local account on this machine.
Use the format 'domain\username' or 'server\username' if appropriate.
- Start cmd In Administrator Account
"C:\Program Files\Firebird\Firebird_1_5\bin\instsvc" -i -s
to configure Firebird running as service
"C:\Program Files\Firebird\Firebird_1_5\bin\instsvc" start
to start the service
Running both Firebird 1.5 and 2.1 service in same machine
It is possible to run more than one instance or one version of Firebird service in single operating system. This is particularly useful in development environment where we want to make sure our application works fine for various versions of Firebird service.
Firebird service listen to TCP port 3050. All Firebird versions listen to same port 3050 by default. One TCP port may listened by one instance of Firebird service only.
To get the job done, we have to choose different port for another instance of Firebird service. For example, we may configure Firebird 1.5 listen to port 3050 and Firebird 2.1 listen to port 3052.
Windows Service Name
Another obstacle is both Firebird 1.5 and Firebird 2.1's instsvc tool will use the same service name ("DefaultInstance"). Window service name must be unique at all time. Fortunately, Firebird 2.1's instsvc supports installing service with custom service name.
Here is an example to show you how to install both Firebird 1.5 and 2.1 in single machine:
- Run the following in privilege account.
- Install Firebird 1.5 running in service mode. Start the service after installation
- Install Firebird 2.1, the setup should prompt you that another instance of Firebird is running and you have to configure Firebird 2.1 service manually.
- Start cmd in privilege account and run "notepad %ProgramFiles%\Firebird\Firebird_2_1\firebird.conf" to configure the Firebird Service listen to port 3052:
RemoteServicePort = 3052
- Configure the Firebird 2.1 service to run as difference instance name ("Firebird 2.1"):
"%ProgramFiles%\Firebird\Firebird_2_1\bin\instsvc" i -name "Firebird 2.1"
- Start Firebird 2.1: "%ProgramFiles%\Firebird\Firebird_2_1\bin\instsvc" start
- Remember to configure your Firewall for port 3052
- The hostname setting for client connection is something like "host-name/3052"
To check both service is installed properly, you may open Windows services (Start | Control Panel | Administrative Tools | Services):
You may now enjoy both Firebird 1.5 and 2.1 in same machine. The same steps may apply to future version of Firebird and you may install as many version of Firebird you want provided you choose the port number and service name carefully.
Running more than one instance of Firebird
Using the same technique as "Running both Firebird 1.5 and 2.1 in one machine", you may also running more than one instance of Firebird service. For example, running 3 instances of Firebird 1.5 in same machine. To get the job done, you may obtain the Firebird Zip installation file and extract the zip files into 3 difference folders. Just follow the above steps to configure the Firebird services.
Maximize GBAK performance
GBAK is a command line tool that allow us to perform Firebird database backup and restore operations. We may use the tool with degraded performance if we didn't use it properly. GBAK allow us to perform backup or restore remotely.
Restore database from Host A to Host B
In this scenario, Host A has the backup file and Host B is the machine we want the database to restore to. We may issue the command from Host A:
gbak -c -v backup.fbk HostB:c:\...\db.fdb
This operation will degrade GBAK as it has to travel through a TCP/IP layer to transport the data packet.
To maximize performance of the operation, we copy the backup file to Host B and execute GBAK with service_mgr. Both backup and database file are located in same Host B machine. You will be amazed by the performance of the GBAK operations:
gbak -c -v -se HostB:service_mgr c:\..\backup.fbk c:\...\db.fdb