diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java index 595ec4e48..44775e11b 100644 --- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java +++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java @@ -136,6 +136,22 @@ public class OracleURLParser extends AbstractURLParser { private String[] splitDatabaseAddress(String address) { String[] hostSegment = address.split(":"); - return hostSegment; + if (hostSegment.length == 1 && super.fetchDatabaseNameFromURL().contains("/")) { + String[] portAndDatabaseName = super.fetchDatabaseNameFromURL().split("/"); + return new String[]{hostSegment[0], portAndDatabaseName[0]}; + } else { + return hostSegment; + } + } + + @Override + protected String fetchDatabaseNameFromURL() { + String databaseName = super.fetchDatabaseNameFromURL(); + if (databaseName.contains("/")) { + String[] portAndDatabaseName = databaseName.split("/"); + return portAndDatabaseName[1]; + } else { + return databaseName; + } } } diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java index 3eec7b031..bcf8b995d 100644 --- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java +++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java @@ -82,6 +82,14 @@ public class URLParserTest { assertThat(connectionInfo.getDatabasePeer(), is("localhost:1522")); } + @Test + public void testParseOracleSID() { + ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:@localhost:1522/orcl"); + assertThat(connectionInfo.getDBType(), is("Oracle")); + assertThat(connectionInfo.getDatabaseName(), is("orcl")); + assertThat(connectionInfo.getDatabasePeer(), is("localhost:1522")); + } + @Test public void testParseOracleServiceName() { ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:@//localhost:1521/orcl");