方式一:
    java.sql.Connection conn = DriverManager.getConnection(“jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=orcl)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))”,”scott”,”tiger”);

    方式二:
    java.sql.Connection conn = DriverManager.getConnection(“jdbc:oracle:thin:@orcl:1521/orcl”,”scott”,”tiger”);

    前面orcl为数据库域名

    使用下面脚本将客户端连接执行过程打印

    1. cat Demo.java
    2. import java.sql.DriverManager;
    3. import java.util.logging.*;
    4. import javax.management.*;
    5. import java.lang.management.*;
    6. public class Demo{
    7. public static void main(String[] args) throws Exception{
    8. Class.forName("oracle.jdbc.driver.OracleDriver");
    9. enableOracleLogging();
    10. // 方法一
    11. java.sql.Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=scan)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xiamen)))","scott","tiger");
    12. // 方法二
    13. //java.sql.Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@orcl:1521/orcl","scott","tiger");
    14. java.sql.Statement stmt = conn.createStatement();
    15. java.sql.ResultSet rs = stmt.executeQuery("select instance_name from v$instance");
    16. while(rs.next()){
    17. System.out.println(rs.getString(1));
    18. }
    19. }
    20. private static void enableOracleLogging(){
    21. try {
    22. Handler fh = new FileHandler("./oracle_jdbc_log.log");
    23. fh.setLevel(Level.ALL);
    24. fh.setFormatter(new SimpleFormatter());
    25. Logger.getLogger("").addHandler(fh);
    26. Logger.getLogger("").setLevel(Level.ALL);
    27. MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
    28. String loader = Thread.currentThread().getContextClassLoader().toString().replaceAll("[,=:\"]+", "");
    29. ObjectName pattern = new ObjectName("com.oracle.jdbc:type=diagnosability,name=" + loader);
    30. ObjectName diag = ((ObjectName[]) (mbs.queryNames(pattern, null).toArray(new ObjectName[0])))[0];
    31. mbs.setAttribute(diag, new Attribute("LoggingEnabled", true));
    32. }catch(Exception e) {
    33. e.printStackTrace();
    34. }
    35. }
    36. }
    1. 编译:
    2. javac Demo.java
    3. 如果报错,换一个办法编译
    4. [root@orcl ~]# javac -version
    5. javac 1.8.0_301
    6. 使用ojdbc6进行连接
    7. java -classpath /u01/app/oracle/product/11.2.0/db_1/jdbc/lib/ojdbc6_g.jar:./ Demo

    方法一的日志:(直接将完整字符串发送到数据库,让数据库的dns进行解析)
    如果数据库服务器上没有配置DNS解析,就会报ORA-12516的错误

    1. Aug 18, 2021 2:21:45 PM oracle.net.ns.Packet send
    2. TRACE_20: 3F0EE7CB Debug:
    3. 00 E3 00 00 01 00 00 00 |........|
    4. 01 36 01 2C 0C 41 20 00 |.6.,.A..|
    5. 7F FF 4F 98 00 00 00 01 |..O.....|
    6. 00 A9 00 3A 00 00 00 00 |...:....|
    7. 81 81 00 00 00 00 00 00 |........|
    8. 00 00 00 00 00 00 00 00 |........|
    9. 00 00 00 00 00 00 00 00 |........|
    10. 00 00 28 44 45 53 43 52 |..(DESCR|
    11. 49 50 54 49 4F 4E 3D 28 |IPTION=(|
    12. 41 44 44 52 45 53 53 5F |ADDRESS_|
    13. 4C 49 53 54 3D 28 41 44 |LIST=(AD|
    14. 44 52 45 53 53 3D 28 50 |DRESS=(P|
    15. 52 4F 54 4F 43 4F 4C 3D |ROTOCOL=|
    16. 54 43 50 29 28 48 4F 53 |TCP)(HOS|
    17. 54 3D 6F 72 63 6C 29 28 |T=orcl)(|
    18. 50 4F 52 54 3D 31 35 32 |PORT=152|
    19. 31 29 29 29 28 43 4F 4E |1)))(CON|
    20. 4E 45 43 54 5F 44 41 54 |NECT_DAT|
    21. 41 3D 28 43 49 44 3D 28 |A=(CID=(|
    22. 50 52 4F 47 52 41 4D 3D |PROGRAM=|
    23. 4A 44 42 43 20 54 68 69 |JDBC.Thi|
    24. 6E 20 43 6C 69 65 6E 74 |n.Client|
    25. 29 28 48 4F 53 54 3D 5F |)(HOST=_|
    26. 5F 6A 64 62 63 5F 5F 29 |_jdbc__)|
    27. 28 55 53 45 52 3D 6F 72 |(USER=or|
    28. 61 63 6C 65 29 29 28 53 |acle))(S|
    29. 45 52 56 49 43 45 5F 4E |ERVICE_N|
    30. 41 4D 45 3D 6F 72 63 6C |AME=orcl|
    31. 29 29 29 |))) |
    32. Aug 18, 2021 2:21:45 PM oracle.net.ns.Packet send

    方法二的日志:(在应用端解析完后,再将IP发送给数据库)

    1. Aug 18, 2021 2:28:05 PM oracle.net.ns.Packet send
    2. TRACE_20: 7DC36524 Debug:
    3. 01 1B 00 00 01 00 00 00 |........|
    4. 01 36 01 2C 0C 41 20 00 |.6.,.A..|
    5. 7F FF 4F 98 00 00 00 01 |..O.....|
    6. 00 E1 00 3A 00 00 00 00 |...:....|
    7. 81 81 00 00 00 00 00 00 |........|
    8. 00 00 00 00 00 00 00 00 |........|
    9. 00 00 00 00 00 00 00 00 |........|
    10. 00 00 28 44 45 53 43 52 |..(DESCR|
    11. 49 50 54 49 4F 4E 3D 28 |IPTION=(|
    12. 41 44 44 52 45 53 53 3D |ADDRESS=|
    13. 28 50 52 4F 54 4F 43 4F |(PROTOCO|
    14. 4C 3D 54 43 50 29 28 48 |L=TCP)(H|
    15. 4F 53 54 3D 31 39 32 2E |OST=192.|
    16. 31 36 38 2E 32 34 37 2E |168.247.|
    17. 31 37 31 29 28 50 4F 52 |171)(POR|
    18. 54 3D 31 35 32 31 29 29 |T=1521))|
    19. 28 43 4F 4E 4E 45 43 54 |(CONNECT|
    20. 5F 44 41 54 41 3D 28 43 |_DATA=(C|
    21. 49 44 3D 28 50 52 4F 47 |ID=(PROG|
    22. 52 41 4D 3D 4A 44 42 43 |RAM=JDBC|
    23. 20 54 68 69 6E 20 43 6C |.Thin.Cl|
    24. 69 65 6E 74 29 28 48 4F |ient)(HO|
    25. 53 54 3D 5F 5F 6A 64 62 |ST=__jdb|
    26. 63 5F 5F 29 28 55 53 45 |c__)(USE|
    27. 52 3D 6F 72 61 63 6C 65 |R=oracle|
    28. 29 29 28 53 45 52 56 49 |))(SERVI|
    29. 43 45 5F 4E 41 4D 45 3D |CE_NAME=|
    30. 6F 72 63 6C 29 28 43 49 |orcl)(CI|
    31. 44 3D 28 50 52 4F 47 52 |D=(PROGR|
    32. 41 4D 3D 4A 44 42 43 20 |AM=JDBC.|
    33. 54 68 69 6E 20 43 6C 69 |Thin.Cli|
    34. 65 6E 74 29 28 48 4F 53 |ent)(HOS|
    35. 54 3D 5F 5F 6A 64 62 63 |T=__jdbc|
    36. 5F 5F 29 28 55 53 45 52 |__)(USER|
    37. 3D 6F 72 61 63 6C 65 29 |=oracle)|
    38. 29 29 29 |))) |
    39. Aug 18, 2021 2:28:05 PM oracle.net.ns.Packet send