Quando se tem apenas um banco de dados em um servidor Firebird, saber quantos usuários estão conectados é uma tarefa simples, bastando, por exemplo, dar uma olhada na tabela mon$attachments.
Mas e se houver dezenas de bancos de dados em um mesmo servidor? Como saber quantos usuários simultâneos estão conectados no FIREBIRD como um todo, e não especificamente em um banco de dados?
Obviamente seria possível conectar em cada banco, rodar o select na tabela mon$statements e ir somando os resultados. Ou mesmo usar o fb_lock_print e observar o owners, mas também teria que ser feito em cada base e ir somando os resultados.
Para quem usa a arquitetura Classic, o trabalho é um pouco mais fácil, bastando contar o número de processos do Firebird em execução, já que cada conexão é atendida por um processo do Classic. Mas no SuperServer e SuperClassic as conexões são atendidas por threads de um mesmo processo do Firebird, portanto, essa solução não funciona para elas.
Felizmente, a solução é mais fácil do que parece! Basta executar o comando abaixo, que usa o utilitário fbsvcmgr do Firebird, para obter a informação de quantos usuários estão conectados no Firebird e também quantos bancos de dados estão sendo acessados naquele momento!
fbsvcmgr.exe localhost:service_mgr user sysdba password masterkey info_svr_db_info
Exemplo:
C:\firebird3>fbsvcmgr.exe localhost:service_mgr user sysdba password masterkey info_svr_db_info
Databases:
Number of attachments: 3
Number of databases: 2
Database in use: C:\TEMP\TESTE.FDB
Database in use: C:\TEMP\TESTE-2.FDB
No exemplo acima, temos dois bancos de dados sendo usados, e 3 usuários/conexões (um dos bancos tem 2 usuários conectados, e o outro tem 1 usuário conectado).
Conexões embedded não entram na conta.
Autor: Carlos H. Cantu