12
votes

Comment faire mon application Java s'identifie à Oracle sur la connexion?

Lorsque mon application se connecte à une base de données Oracle, je souhaite pouvoir voir en examinant les sessions actives de la base de données connectée. Actuellement, il s'identifie comme "client mince JDBC" car c'est le pilote que j'utilise, mais d'autres applications basées sur Java que j'ai sont en quelque sorte capables de définir cette valeur à quelque chose de plus significatif, comme "développeur SQL". Je pensais que c'était une propriété de la connexion ou du oracledatasource , mais je n'ai pas réussi à en trouver un qui fait l'affaire. Est-ce possible? Au cas où il importe, j'utilise Java 1.5, avec Oracle 10G et le conducteur mince 10G.


1 commentaires

Vous espérez distinguer les applications lors de la visualisation de sessions actives?


5 Réponses :


2
votes

Vous devez définir la propriété de connexion v $ session.program dans votre source de données, de telle manière que cette propriété sera ajoutée à chaque connexion. Comment vous faites cela dépend de votre mise en œuvre de la source de données. La valeur que vous définissez La propriété apparaîtra dans la table de session active de Oracle.


0 commentaires

23
votes
dbms_application_info.set_client_info
dbms_application_info.set_module
dbms_application_info.set_action

1 commentaires

Méfiez-vous de Limites de longueur arbitraire pour ces V $ Session. * Propriétés



2
votes

Il y a aussi une fonction Oracle: xxx

qui définit la colonne clientInfo en V $ Session.

Ceci pourrait être utile si vous n'avez que l'accès à la connexion plutôt que la source de données ou le drivermanager sous-jacent.


0 commentaires

3
votes

Depuis Oracle JDBC 12.1, vous pouvez définir des valeurs de client-info via JDBC API, c'est-à-dire que vous pouvez faire

connection.setClientInfo("OCSID.CLIENTID", "MyClientId");


0 commentaires

1
votes

commençant par 12.1 Le setendtoendMetrics est obsolète, vous pouvez utiliser setClientInfo Voir la documentation pour 12.2 ici

Voici un extrait de l'utilisation xxx

Vous pouvez voir le réglage dans v $ SESSION avec cette requête de la session correspondante xxx

mais seulement après une instruction suivante est exécutée avec cette connexion . L'appel de setClientInfo déclenche sans tension supplémentaire Cette information est passée avec l'appel suivant.

Notez également que vous devez utiliser la conengence Oracle (non emballée) - Vérifier Ce pour référence.


1 commentaires

Merci! Je n'ai pas réalisé que le changement est effectué après le traitement de la déclaration. Je ne comprends pas pourquoi la connexion doit être non emballée si la méthode fait partie de l'API JDBC, et non la connexion interne Oracle uniquement (même le wrapper de la connexion au pool de serveurs d'applications porte l'interface de connexion)?