2009-10-10 25 views
7

Khi ứng dụng của tôi kết nối với cơ sở dữ liệu Oracle, tôi muốn có thể xem bằng cách xem các phiên hoạt động trong cơ sở dữ liệu mà nó được kết nối. Hiện tại nó tự xác định là "JDBC Thin Client" vì đó là trình điều khiển tôi đang sử dụng, nhưng các ứng dụng dựa trên Java khác mà tôi có bằng cách nào đó có thể đặt giá trị này thành một cái gì đó có ý nghĩa hơn, như "SQL Developer". Tôi nghĩ rằng đó là tài sản của Connection hoặc OracleDataSource, nhưng tôi đã không quản lý để tìm một tài sản nào thực hiện thủ thuật. Điều này có thể không? Trong trường hợp nó quan trọng, tôi đang sử dụng Java 1.5, với Oracle 10g và trình điều khiển mỏng 10g.Làm cách nào để làm cho ứng dụng Java của tôi tự nhận dạng được với Oracle khi kết nối?

+0

Bạn đang hy vọng phân biệt giữa các ứng dụng khi xem các phiên hoạt động? –

Trả lời

13
java.util.Properties props = new java.util.Properties(); 
props.setProperty("password","mypassword"); 
props.setProperty("user","myusername"); 
props.put("v$session.osuser", System.getProperty("user.name").toString()); 
props.put("v$session.machine", InetAddress.getLocalHost().getCanonicalHostName()); 
props.put("v$session.program", "My Program Name"); 
DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); 
Connection conn= 
    DriverManager.getConnection("jdbc:oracle:thin:@myhostname:1521:mysid", props); 

SQL>select username,osuser,program,machine 
from v$session 
where username = 'ROB'; 

USERNAME OSUSER  PROGRAM    MACHINE 
--------- ----------- ------------------ ----------- 
ROB  rmerkw  My Program Name  machine 

Ở cấp độ ứng dụng mà bạn có thể sử dụng các phương pháp sau đây để thiết lập client_info, mô-đunhành động trong v $ session:

dbms_application_info.set_client_info 
dbms_application_info.set_module 
dbms_application_info.set_action 
2

Bạn cần xác định thuộc tính kết nối v$session.program trong nguồn dữ liệu của mình, sao cho thuộc tính đó sẽ được thêm vào mỗi kết nối. Làm thế nào bạn làm điều đó phụ thuộc vào việc thực hiện nguồn dữ liệu của bạn. Giá trị bạn đặt thuộc tính sẽ xuất hiện trong bảng phiên hoạt động của oracle.

2

Đây là một lso một hàm Oracle:

dbms_application_info.set_client_info('Client Info'); 

đặt cột ClientInfo trong phiên $.

Điều này có thể hữu ích nếu bạn chỉ có quyền truy cập vào Kết nối thay vì DataSource hoặc DriverManager cơ bản.

0

Kể từ oracle jdbc 12.1 bạn có thể đặt một số giá trị khách hàng-info qua api jdbc, tức là bạn có thể làm

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

đối với tài sản OCSID ...

HÀNH ĐỘNG, ClientId, ECID, MODULE, chuỗi số sequence_number và DBOP

Xem https://docs.oracle.com/database/121/JJDBC/jdbcvers.htm#JJDBC29006

Setting CHƯƠNG TRÌNH không hoạt động theo cách này, bạn có thể làm điều đó như mô tả trong câu trả lời chấp nhận hoặc dễ dàng hơn một chút bằng cách thiết lập thuộc tính hệ thống "oracle.jdbc.v $ session.program".

Các vấn đề liên quan