知识库

设置 Oracle 连接以使用 TNSNames.ora 或 LDAP.ora


发布时间: 29 Nov 2016
上次修改日期: 15 Sep 2020

问题

如何设置 Oracle 连接以使用 TNSNames.ora 或 LDAP.ora。


设置 TNSNames.ora 或 LDAP.ora 连接的好处。

可通过将数据连接设置为使用 TNSNames.ora 或 LDAP.ora 来纠正或避免以下常见 Oracle 错误。
  • ORA-12154:TNS:无法解析指定的连接标识符

  • ORA-12514:TNS 侦听器当前无法识别连接描述符中请求的服务

  • ORA-12541:TNS:无侦听器

  • ORA-12170:TNS:发生连接超时

  • ORA-12504:没有为 TNS 侦听器提供 CONNECT_DATA 中的 SERVICE_NAME

环境

  • Tableau Desktop
  • Tableau Server
  • Oracle

答案

 
单击以展开解决方案

Windows 版 Tableau Desktop

步骤 1:验证计算机上是否存在 TNSNames.ora 文件。

默认情况下,TNSNames.ora 文件可在 {oracle directory}\network\admin 中找到。 例如,C:\Oracle_Client\network\admin
如果计算机上没有 TNSNames.ora 文件,请使用文本编辑器创建一个。下面是一个潜在的条目模板。必须将括号中的元素替换为您从数据库管理员那里获取的值。

[net_service_name]=
(DESCRIPTION=
  (ADDRESS=[protocol_address_information])
    (CONNECT_DATA= (SERVICE_NAME=[service_name])
     )
  )


例如:
 
Production =
(DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = prod.corp.com)(PORT = 1521)
  )
 (CONNECT_DATA =
  (SERVICE_NAME= orcl)
  )
 )

步骤 2: 设置 TNS_Admin 环境变量。

  1. 选择“开始”>“控制面板”>“系统”
  2. 选择“高级系统设置”
  3. 在“系统属性”对话框中的“高级”选项卡上,选择“环境变量”。
  4. 在“系统变量”下,单击“新建”。
  5. 在“新建系统变量”对话框中,输入以下内容,然后单击“确定”:
    • 变量名称:TNS_ADMIN 
    • 变量值:包含 TNSNames.ora 文件的目录。
  6. 单击“环境变量”对话框和“系统属性”对话框中的“确定”。
  7. 重新启动计算机,确保新变量已识别。

步骤 3: 在 Tableau 中使用 Oracle 网络服务名称。

  1. 关闭所有打开的 Tableau 工作簿,然后打开一个新的 Tableau 实例。
  2. 在 Tableau Desktop 中,选择“连接到数据”>“Oracle”。
    • 对于“服务器”,输入 TNSNAmes.ora 文件中记录的 oracle“net_service_name”。
    • 根据情况输入用户名和密码。

通过 TNS_ADMIN 系统变量传达 TNSNames.ora 文件中连接详细信息的其余部分。请注意,您应将可选的服务名称和端口信息留空,否则它可能会通过复制信息对连接产生干扰。

单击以展开解决方案
Tableau Server 2020.2 及更高版本 (Windows):


创建包含以下文本的 oracle.properties 文件(示例):

oracle.net.tns_admin=C:\\Oracle_Client\\network\\admin

如有必要,请更改路径以引用主机文件系统内 tnsnames.ora 文件的位置。即使将 \\ 路径直接复制并粘贴到 Windows 文件资源管理器中 \\ 路径无法工作,双反斜杠 \\ 也是故意的,也是必需的。在此上下文中,只有使用双反斜杠时,oracle.properties 文件才能正常工作。

将文件放在以下位置:C:\ProgramData\Tableau\Tableau Server\data\tabsvc\vizqlserver\Datasources(或等效路径,如果使用备用安装位置)。如果该文件夹尚不存在,请确保创建它。

创建文件和文件夹后,请确保为用户运行身份提供对该文件的适当权限,然后重新启动 Tableau Server。

有关 JDBC 属性文件的更多信息可在此处找到:https://kb.tableau.com/articles/howto/Customizing-JDBC-Connections?lang=zh-cn?lang=zh-cn


在 Mac 上

步骤 1:

  1. 如果 Tableau Desktop 已打开,请将其关闭。
  2. 确保从 Tableau 的驱动程序页面下载并安装了适用于 Mac 的 Oracle 驱动程序。
  3. 将包含连接信息的现有 LDAP.ora 或 TNSNames.ora 文件复制到 /etc:
  • 在 Finder 中,选择“执行”>“转到文件夹”,然后键入 /etc。
  • 将 .ora 文件复制到 /etc。

步骤 2: 配置 TNS_ADMIN 环境变量

  1. 启动终端并键入以下命令:

    sudo nano /etc/launchd.conf

    注意: Nano 是一种基于文本的编辑器,始终可在 Mac 计算机上找到。

  2. 提示时键入您的密码。

  3. 键入以下命令:

    launch setenv TNS_ADMIN /etc

  4. 按 Ctrl-X,然后按 Y,接着按 Enter 保存更改并退出 nano。
  5. 重新启动 Mac。

步骤 3: 验证是否设置了 TNS_ADMIN 变量:

  1. 启动终端并键入以下命令:

    export

  2. 您将看到所有系统变量的列表。查找:

    declare -x TNS_ADMIN="/etc"

  3. 通过在终端或网络实用工具中 ping 主机名,确认 DNS 解析对于 .ora 文件中列出的主机名有效。使用完全限定的域名(例如 servername.domain.com),而不是简单的服务器名称。
现在,您应该能够在 Mac 上启动 Tableau Desktop 并连接到 Oracle 数据库,只提供 TNSNames.ora 或 LDAP.ora 文件中的服务器名称。 
 
单击以展开解决方案
在 Linux 上

步骤摘要:

  1. 将 tnsnames.ora 文件复制到 tableau 用户有权访问的位置
  2. 在该文件上设置权限。
  3. 如果需要,更新环境变量 TNS_ADMIN 以指向步骤 (1) 中的目录。

步骤 1:将 tnsnames.ora 文件复制到非特权用户 (tableau) 可访问的目录

对于版本 2019.3.x 及更高版本:
将 tnsnames.ora 文件复制到 /etc 目录。
对于版本 2019.2.x 及更低版本:
默认情况下,非特权用户名为“tableau”。所有 Tableau Server 进程都使用此帐户运行,并且它必须能够找到 tnsnames.ora 文件才能使用。
如果已安装了 Oracle 连接器,我们建议您将文件复制到目录 /opt/tableau/tableau_driver/oracle
可通过使用“su”更改为该帐户并切换到目录来确认用户可访问该目录。例如:
sudo su tableau
cd /opt/tableau/tableau_driver/oracle
如果这些步骤产生“permission denied”错误,您需要更新所使用目录的权限。

步骤 2: 为 tnsnames.ora 文件设置权限

2019.2.x 及更低版本,执行以下步骤:
  1. 导航到 tnsnames.ora 文件所在的文件路径。
  2. 通过运行以下命令授予文件权限:chmod 666 tnsnames.ora
  3. 使用以下命令验证文件权限:ls -l
注意:环境变量应有结尾斜杠。如果路径的格式不正确,用户可能会遇到 ORA-12154 错误。

2019.3 及更高版本:
由于 tabsvc 在 Linux 上不再存在,因此上面的步骤不再适用。在 Linux 计算机上,请将 tsnames.ora 文件改为放在 /etc 目录中。不需要环境变量。

2020.2 及更高版本:

创建包含以下文本的 /var/opt/tableau/tableau_server/data/tabsvc/vizqlserver/Datasources/oracle.properties 文件:

示例:oracle.net.tns_admin=/etc

如有必要,请更改 /etc 以指向文件系统内 tnsnames.ora 文件的路径。

有关 JDBC 属性文件的更多信息可在此处找到:https://kb.tableau.com/articles/howto/Customizing-JDBC-Connections?lang=zh-cn?lang=zh-cn
 

步骤 3: 将 TNS_ADMIN 环境变量设置为指向步骤 (1) 中的目录

对于版本 2019.3.x 及更高版本:您可以跳过此步骤;不需要环境变量。
对于版本 2019.2.x 及更低版本:
  1. 在文本编辑器中,打开与您的 Tableau Server 版本匹配的文件:
    • Tableau Server 10.5.x -- /etc/systemd/system/tabsvc_0.service
    • ​​Tabelau Server 2018.1.x - 2019.2 --  /var/opt/tableau/tableau_server/.local/share/systemd/user/tabsvc_0.service
  2. 添加以下一行,其中“/path/to/file-folder”是步骤 1 中您将 tnsnames.ora 复制到其中的目录:
Environment=TNS_ADMIN=/path/to/file-folder
  1. 保存对文件的更改。

注意:环境路径应具有结尾斜杠;如果路径的格式不正确,用户可能会遇到 ORA-12154 错误。

可选步骤

查找 tnsnames.ora 文件

如果服务器上安装了 Oracle 客户端,tnsnames.ora 文件将位于以下目录中:$ORACLE_HOME/network/admin。
可以使用以下命令验证此文件是否存在:

echo $ORACLE_HOME 
将输出文件路径。

sudo find / -iname tnsnames.ora
 将列出您的文件系统中任何 tnsnames.ora 文件的位置。

注意:不必安装 Oracle 客户端也可以将 tnsnames.ora 与 Tableau Server 结合使用。 此步骤只是帮助您处理任何现有安装。

从头开始创建新的 tnsnames.ora 文件

如果此计算机上没有 tnsnames.ora 文件,并且没有可从客户端工作站复制的该文件,则可以使用文本编辑器创建一个。请记住以下限制:

  • tnsnames.ora 文件名区分大小写,并且必须为全小写字母。 

  • 文件不应使用制表符间隔。

下面是一个潜在的条目模板。必须将括号中的元素替换为您从数据库管理员那里获取的值。
注意:尽管 Windows 或 Mac 计算机上的 TNSNames.ora 文件可能不需要 ADDRESS_LIST 条目,但 Linux 计算机上的 tnsnames.ora 文件需要此变量。
 

[net_service_name]=
(DESCRIPTION=
  (ADDRESS_LIST=
    (ADDRESS=[protocol_address_information])
   )
  (CONNECT_DATA= 
    (SERVICE_NAME=[service_name])
   )
 )

例如:

Production =
(DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = prod.corp.com)(PORT = 1521)
   )
  (CONNECT_DATA = 
    (SERVICE_NAME = orcl)
   )
 )

注意:如果在 Oracle 上配置了 SSL,请参见下面的附加步骤。

其他信息

其他配置步骤(如果在 Oracle 上配置了 SSL)

针对 Oracle 配置 ORACLE_HOME 和 TNS_ADMIN(如果在 Oracle 上配置了 SSL)

sudo su -l tableau
      touch /var/opt/tableau/tableau_server/.config/systemd/tableau_server.conf.d/oracle.conf
      echo "ORACLE_HOME=/u01/app/oracle/product/12.1.0/client_1" | tee -a /var/opt/tableau/tableau_server/.config/systemd/tableau_server.conf.d/oracle.conf
      echo "TNS_ADMIN=/u01/app/oracle/product/12.1.0/client_1/network/admin" | tee -a /var/opt/tableau/tableau_server/.config/systemd/tableau_server.conf.d/oracle.conf 
      chmod 744 /var/opt/tableau/tableau_server/.config/systemd/tableau_server.conf.d/oracle.conf
exit

cd /opt/tableau/tableau_server/packages/scripts.near.xx.xxxx.xxxx/
            sudo ./stop-administrative-services
            sudo ./start-administrative-services
source /etc/profile.d/tableau_server.sh


讨论本文... 反馈论坛
此文章是否已解决问题?