步骤摘要:
- 将 tnsnames.ora 文件复制到 tableau 用户有权访问的位置
- 在该文件上设置权限。
- 如果需要,更新环境变量 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 及更低版本,执行以下步骤:
- 导航到 tnsnames.ora 文件所在的文件路径。
- 通过运行以下命令授予文件权限:chmod 666 tnsnames.ora
- 使用以下命令验证文件权限: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 及更低版本:
- 在文本编辑器中,打开与您的 Tableau Server 版本匹配的文件:
- Server 2018.1.x - 2019.2 -- /var/opt/tableau/tableau_server/.local/share/systemd/user/tabsvc_0.service
- 添加以下一行,其中“/path/to/file-folder”是步骤 1 中您将 tnsnames.ora 复制到其中的目录:
- Environment=TNS_ADMIN=/path/to/file-folder
- 保存对文件所做的更改。
注意:环境路径不应具有结尾斜杠;如果路径的格式不正确,用户可能会遇到 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 文件,并且没有可从客户端工作站复制的该文件,则可以使用文本编辑器创建一个。请记住以下限制:
下面是一个潜在的条目模板。必须将括号中的元素替换为您从数据库管理员那里获取的值。
注意:尽管 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)
)
)