知识库

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


发布时间: 29 Nov 2016
上次修改日期: 15 Jul 2021

问题

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


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

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

  • ORA-12514: TNS listener does not currently know of service requested in connect descriptor(ORA-12514: TNS 侦听器当前无法识别连接描述符中请求的服务)

  • ORA-12541: TNS: no listener(ORA-12541: TNS: 无侦听器)

  • ORA-12170: TNS:Connect timeout occurred(ORA-12170: TNS:发生连接超时)

  • ORA-12504: TNS listener was not given the SERVICE_NAME in CONNECT_DATA(ORA-12504: 没有为 TNS 侦听器提供 CONNECT_DATA 中的 SERVICE_NAME)

环境

  • Tableau Desktop
  • Tableau Server
  • Oracle

答案

单击以展开解决方案
Windows 上的 Tableau Desktop 和/或 Server、OCI 客户端

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

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

步骤 2:在 Tableau 中使用 Oracle 网络服务名称连接到 Oracle。 

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

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

单击以展开解决方案
Tableau Desktop 和 Server 2020.2 及更高版本、Windows、JDBC 驱动程序
 
创建一个包含以下文本的 oracle.properties 文件(示例):

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

如有必要,请更改路径以引用 tnsnames.ora 文件在主机文件系统中的位置。即使将 \\ 路径直接复制并粘贴到 Windows 文件资源管理器中,该路径将不起作用,但双反斜杠是有意且必需的。 在这种情况下,oracle.properties 文件只有在使用双反斜杠时才能正常运行。

将文件放在以下位置:
桌面:Documents\My Tableau Repository\Datasources 
服务器:C:\ProgramData\Tableau\Tableau Server\data\tabsvc\vizqlserver\Datasources(或等效路径,如果使用备用安装位置)。如果该文件夹尚不存在,请务必创建该文件夹。

仅限服务器:创建文件和文件夹后,确保用户运行身份具有对文件的适当权限,并重新启动 Tableau Server。

可以在此处找到有关 JDBC 属性文件的更多信息:https://kb.tableau.com/articles/howto/Customizing-JDBC-Connections?lang=zh-cn
 
单击以展开解决方案
在 Mac 上

步骤 1:

  1. 如果 Tableau Desktop 已打开,请将其关闭。 
  2. 确保从 Tableau 的驱动程序页面下载并安装了适用于 Mac 的 Oracle 驱动程序。
  3. 将包含连接信息的现有 LDAP.ora 或 TNSNames.ora 文件复制到 /etc: 
  • 在 Finder 中,选择 Go > Go To Folder,然后键入 /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 及更高版本:
在 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
 

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

对于版本 2019.3.x 及更高版本:您可以跳过此步骤;不需要环境变量。
对于版本 2019.2.x 及更低版本:
  1. 在文本编辑器中,打开与您的 Tableau Server 版本匹配的文件:
    • Tableau Server 10.5.x -- /etc/systemd/system/tabsvc_0.service
    • ​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
  3. 保存对文件所做的更改。

注意:环境路径应具有结尾斜杠;如果路径的格式不正确,用户可能会遇到 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 配置 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
退出

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


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