=head1 NAME

fbsvcmgr - access services API of Firebird

=head1 SYNOPSYS

=over

=item fbsvcmgr service_mgr I<parameter...>

=item fbsvcmgr host:service_mgr I<parameter...>

=back

=head1 DESCRIPTION

Firebird (like interbase 6 and before) never had a way to access services API
from command line. With the exception of B<-service> switch of L<gbak(1)> and
total use of services API in L<gsec(1)> since version 2.0, to use services one
had to use third party GUI or write himself a program using C or other
programming language. Use of GUI is almost always not a problem, when you work
with local machine or machine in your LAN. But in case, when you connect to
remote unix server using any text-only connection, use of services is almost
impossible. And this is really a problem sometimes.

The B<fbsvcmgr> utility solves this problem. With it you may use any service,
implemented by firebird. To use this utility you should be familiar with
firebird services API - B<fbsvcmgr> does NOT emulate traditional utilities'
switches, it is just frontend to the services API.

The first required parameter of command line is services manager you want to
connect to. For local connection use simply I<service_mgr>, to attach to remote
machine something like I<hostname:service_mgr> is required. When required,
additional service parameter blocks (SPB), including any values, follow. Any of
them may (or may not) be prefixed with single B<-> (minus) sign for clarity.
For long command lines, typical for fbsvcmgr, use of '-' makes command line
better human-readable and has no other effects.

Compare:

 fbsvcmgr service_mgr user sysdba password \
 masterke action_db_stats \
 dbname employee sts_hdr_pages

and

 fbsvcmgr service_mgr -user sysdba -password \
 masterke -action_db_stats -dbname \
 employee -sts_hdr_pages

Syntax of service parameter blocks, as understood by B<fbsvcmgr>, almost
exactly matches the one you may see in F<ibase.h> include file or Borland
InterBase 6.0 API documentation. To save typing and make command line a bit
shorter, slightly abbreviated form is used. All SPB parameters have one of two
forms: I<isc_spb_VALUE> or I<isc_VALUE1_svc_VALUE2>. Accordingly in the first
case you should type simply I<VALUE>, and for the second - I<VALUE1_VALUE2>.
For example:

    present in ibase.h          becomes
    -------------------------   -----------------
    isc_spb_dbname              dbname
    isc_action_svc_backup       action_backup
    isc_spb_sec_username        sec_username
    isc_info_svc_get_env_lock   info_get_env_lock

and so on. As an exception, I<isc_spb_user_name> may be specified as either
I<user_name> or simply I<user>.

The full description of all SPB parameters can be found int the InterBase 6.0
beta documentation. It is some 40 pages long, so it is not duplicated here.
There are a couple of differences, though, which are described below. Another
reference is the F<ibase.h> file distributed by the Firebird project.

=over

=item multiple actions in single request

Using fbsvcmgr you may perform single action (and get results of it's
execution when available) or get multiple information items from services
manager. For example:

    fbsvcmgr service_mgr -user sysdba -password masterke -action_display_user

will list all users of local firebird server:

    SYSDBA            Sql Server Administrator      0    0
    QA_USER1                                        0    0
    QA_USER2                                        0    0
    QA_USER3                                        0    0
    QA_USER4                                        0    0
    QA_USER5                                        0    0
    GUEST                                           0    0
    SHUT1                                           0    0
    SHUT2                                           0    0
    QATEST                                          0    0

And:

    fbsvcmgr service_mgr -user sysdba -password masterke \
    -info_server_version -info_implementation

will report both server version and it's implemenation:

    Server version: LI-T2.1.0.15740 Firebird 2.1 Alpha 1
    Server implementation: Firebird/linux AMD64

But attempt to mix all of this in single command line:

    fbsvcmgr service_mgr -user sysdba -password masterke \
    -action_display_user -info_server_version -info_implementation

raises an error:

    Unknown switch "-info_server_version"

=item Buggy documentation

Some parameters have buggy form in Borland beta documentation. When in trouble,
consult F<ibase.h> first for correct form.

I<isc_spb_rpr_list_limbo_trans> was forgotten in Borland beta documentation,
but present in fbsvcmgr.

=item No licensing stuff

Everything concerning licensing was removed from interbase 6.0 and therefore
not supported here.

=item No access to config file

Config file view/modification is not supported in firebird since 1.5 and
therefore is not implemented here.

=item Items added in firebird 2.1

=over

=item I<trusted_auth>

(Windows-only) Forces use of windows trusted authentication.

=item I<dbname>

(Only for actions related to security). It is equivalent to the  I<-database>
switch of the L<gsec(1)> utility. Note that in L<gsec(1)> this switch is mostly
used to specify remote server you want to administer. In B<fbsvcmgr> the name
of the server is already given in services manager name (first parameter),
therefore this parameter in most cases is not needed.

=back

=item Items added in firebird 2.5

=over

=item bkp_no_triggers

specify it to avoid executing database-wide triggers

=back

=back

=head1 AUTHOR

Alex Peshkov, L<peshkoff at mail.ru>

This manual page was written by Damyan Ivanov L<dmn@debian.org> for the Debian
project. Permission is granted to use this document, with or without
modifications, provided that this notice is retained. If we meet some day, and
you think this stuff is worth it, you can buy me a beer in return.
