刚学习Oracle没有几天,在配置网络问题时,遇到了这样一个问题,在远程连接数据库sqlplus username/passwd@host:port/dbname。这里为什么还要指定dbname这样一个问题,起初回答是Oracle可以创建多个数据库,所以要指明是哪里数据库,但老师说这样回答不准确,严格的说应该是Listener可以监听多个实例,所以这里要指定。
在这里对于数据库和实例的概念我还是没有理解有什么不同。希望高人能给指点下,最好能举个例子具体说下。由于刚学习,所以里面的一些专业的术语不是很明白。

解决方案 »

  1.   

    这里为什么还要指定dbname这样一个问题
    --为了指定进入哪个实例, 如果一个机子上跑了多个实例,就有必要指定了。oracle 习惯上说实例, 实例就是一个数据库,里面有多个表空间,每个表空间里面可以放N张表。 这就是oracle 的结构, 用久了就清楚了..
      

  2.   

    实例是内存和后台进程的组合。
    数据库逻辑上是由一系列的对象组成的,比如表,view,procedure,trigger,等等组成的,物理上是数据文件。后台进程是实例和数据库之间沟通的桥梁。
    dedicated模式下,一个实例对应一个数据库。
      

  3.   


    你这里不仅是数据库和实例的概念不清楚对ORacle提供的连接方式也有些不对哟Oracle提供3种连接方式
    1.  本地连接(默认支持)
            也就是直接sqlplus "username/password" 不通过监听
    2.  TNSNAME连接方式
            就是通过配置tnsname方式来连接,通过客户端net manager配置tnsname,或者直接修改tnsname.ora文件(高级用户),比如 sqlplus "user/password@tnsname"  需要通过监听
    3.  简单连接(EZConnection)
            不需要客户端配置,直接通过字符串方式 例如  sqlplus "username/[email protected]:1521/orcl" 这样的形式来连接。也就是你现在使用的方式,其实这样的方式和2最终是一样形式了,他还是翻译成tnsname的描述的字符串了,不过这个是透明的,你不需要关心,这点和jdbc的thin url方式一样。 需要通过监听后两种方式要在服务器的sqlnet.ora进行配置才能支持。
    NAMES.DIRECTORY_PATH= (TNSNAMES,EZConnection)
    如果是你这样的连接方式,需要在sqlplus username/passwd@host:port/dbname    这里dbname指定为SID,  其实和java thin连接的url类似。