【问题标题】:Oracle database connections - what are all the fields I need to fill in?Oracle 数据库连接 - 我需要填写哪些字段?
【发布时间】:2010-11-01 11:58:18
【问题描述】:

我习惯使用 SQL Server,现在面临连接到 Oracle 的问题。对于我需要填写的所有字段,我能否得到一些完全明确的描述?

具体来说,我想了解这些是什么:

首页
主机名
港口
西德
服务名称

网络别名
连接标识符

我的基本理解是 hostname 是它所在的 pooter,但这与 home 不同吗? 端口是 TCP 端口,默认为 1521 - 这似乎很清楚。

我只需要提供 SID 或服务名称吗?有什么区别 - 为什么是一个或另一个?

如果我有 TNS 文件,网络别名和连接标识符是什么?如果我不使用 TNS 文件,这些字段是否与我拥有的其他字段相同?

对不起,我是个菜鸟,但我初步寻找答案仍然让我很困惑。

谢谢!

【问题讨论】:

  • 您是否尝试从 SQL*Plus、.NET、Java ... 进行连接?

标签: oracle connection service-name


【解决方案1】:
home:ORACLE_HOME,环境变量,指向位置 Oracle 二进制文件(实例从服务器或客户端运行的任何位置) 从客户端运行) 主机名:服务器的名称 端口:Listener 监听 Oracle 连接的端口 SID:**S**服务**ID**entifier。数据库的名称。这是 侦听器将公开的标识符之一 服务名称:侦听器可能公开的替代标识符

在现有的已配置站点上,查找这些详细信息的最简单方法是从客户端(或服务器)上的 tnsnames.ora 文件中获取与数据库的连接。查看 $ORACLE(下划线)HOME/network/admin。使用 set (Windows) 或 env (Unix) 命令查找 ORACLE(下划线)HOME。 tnsnames.ora 也可能位于变量 $TNS_ADMIN 指向的位置。

如果找不到 tnsnames.ora 并且您可以访问服务器,请尝试以下命令,通常以用户 Oracle 身份

lsnrctl 状态

lsnrctl 是监听器。状态将显示它知道的 SID 和服务名称(以及其他一些详细信息)

或者在$ORACLE_HOME/network/admin下或者环境变量$TNS_ADMIN指向的位置找到listener.ora和sqlnet.ora文件

通常每个主机会有一个监听器,因此每个主机有一个端口(可能有更多但不常见)

要连接到 Oracle,您必须将客户端指向由主机名/端口组合指定的位置的侦听器,并告诉它要连接哪个 SID 或服务。

DCookie 关于 SID 与服务名称的评论基本上是正确的。

可以通过(取决于版本)找到 SID

从 v$database 中选择 db_unique_name 要么 从 v$database 中选择 db_name

或者通过查看文件 $ORACLE_HOME/dbs/init(SID NAME).ora 或者通过执行

ps -ef | grep pmon

并注意进程名称的最后一部分,例如ora(下划线)pmon(下划线)SID

【讨论】:

    【解决方案2】:

    如果您使用Oracle 10g或以上,请使用Easy Connect语法:

    //servername/dbname
    

    ,如:

    sqlplus scott/tiger@//servername/dbname
    

    如果你需要使用TNS,这里是TNSNAMES.ORA的例子:

    XE = 
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = XE)
        )
      )
    

    CONNECT_DATA 中,您可以使用SERVICE_NAME(这是向侦听器注册的实例的标识符)或SID(这是数据库标识符)。

    简而言之:

    • SERVICE_NAME 是实例的标识符:您将连接到的正在运行的 Oracle 可执行文件
    • SID 是数据库的标识符:您的数据存储在其中的一组文件。

    一个数据库可以被多个Oracle 实例使用。

    如有疑问,请使用SERVICE_NAME

    在这种情况下,连接如下:

    sqlplus scott/tiger@XE
    

    【讨论】:

    • 我对 SERVICE_NAME 与 SID 的理解:服务名称是用 8i 引入的(基本上取代了 SID),并且是实例向 TNS 注册的值(对应于 SERVICE_NAME 初始化参数) .它比 SID 更灵活(您可以通过更改服务名称轻松地将一个实例与另一个实例交换,这对任何尝试连接的客户端都是透明的),并且允许域命名。更改服务名称比更改 SID 容易得多,这需要客户端更改 tnsnames.ora
    猜你喜欢
    • 2019-12-24
    • 2011-03-30
    • 1970-01-01
    • 2016-03-24
    • 2019-11-08
    • 2020-02-03
    • 2011-07-26
    • 2017-10-28
    • 2016-01-19
    相关资源
    最近更新 更多