oracle数据库在没有tns条目的情况下连接

时间:2014-12-08 04:13:43

标签: oracle11g

我是oracle数据库的新手。 我在我的机器上安装了OracleXE 11g。我从oracle默认数据库(XE)创建了一个单独的测试数据库[SID:testDB],引用此video。我在下面创建了一些东西:

  1. 使用以下cmd创建了Windows服务 - OracleServicetestDB: oradim -new -sid testDB -startmode auto -pfile initTestDB.ora
  2. 创建数据库
  3. 执行了sql脚本 SQL> @?\ RDBMS \ ADMIN \的catalog.sql SQL> @?\ RDBMS \管理员\ catproc.sql
  4. 已创建用户
  5. 为这个新数据库创建用户/模式后,我可以从sql developer和java / jdbc程序连接到网络上的其他机器。

    我很惊讶我没有在tnsnames.ora中为这个数据库创建任何TNS监听器或TNS条目,但我仍然可以在本地和远程连接这个数据库。 我期待以下问题的答案:

    1. 我的testDB如何在没有tns条目的情况下连接?
    2. 如果testDB依赖于XE服务/监听器,我如何配置OracleServicetestDB以分离XE服务?
    3. 列表项
    4. java / jdbc代码:

      import java.sql.Connection;
      import java.sql.DriverManager;
      
      public class FirstExample {
      	// JDBC driver name and database URL
      	static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
      	static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:testDB";
      
      	// Database credentials
      	static final String USER = "testDBUser";
      	static final String PASS = "password";
      
      	public static void main(String[] args) {
      		Connection conn = null;
      		try {
      			// STEP 2: Register JDBC driver
      			Class.forName(JDBC_DRIVER);
      
      			// STEP 3: Open a connection
      			System.out.println("Connecting to database...");
      			conn = DriverManager.getConnection(DB_URL, USER, PASS);
      			System.out.println("Connected.");
      
      			conn.close();
      		} catch (Exception e) {
      			e.printStackTrace();
      		}
      	}
      }

1 个答案:

答案 0 :(得分:0)

tnsnames.ora用于开启者(应用程序/工具),具体取决于使用的驱动程序和somtimes连接设置; Java驱动程序可以处理大多数没有 tnsnames的情况,请参阅http://docs.oracle.com/cd/E11882_01/java.112/e16548/urls.htm#JJDBC08200并注意" TNSnames别名"只是几种选择中的一种。

侦听器在ORAHOME / network / admin / listener.ora 中配置,通常默认值不需要任何更改。在Windows上,侦听器作为服务运行(Windows服务,不要与Oracle服务名称混淆!)并自动启动。在Unix和Windows上,即使您有多个数据库实例/ SID,也有一个侦听器。