步驟摘要:
- 將 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
如果這些步驟導致「權限遭拒」錯誤,則需要更新所使用目錄的權限。
步驟 2:為 tnsnames.ora 檔案設定權限
2019.2.x 及更舊版本,請依照下列步驟:
- 巡覽至 tnsnames.ora 檔案所在的檔案路徑。
- 透過執行以下指令授予檔案權限:chmod 666 tnsnames.ora
- 使用以下指令驗證檔案權限:ls -l
附註:環境路徑的結尾
不應該有斜線。如果路徑格式不正確,使用者可能會遇到 ORA-12154 錯誤。
2019.3 和更新版本:在 Linux 機器上的
/etc 目錄中,放置 tsnames.ora 檔案。不需要任何環境變數。
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-tw
步驟 3:設定 TNS_ADMIN 環境變數以指向步驟 (1) 的目錄。
對於 2019.3.x 版及更新版本:您可以跳過此步驟;不需要任何環境變數。
對於 2019.2.x 版及更舊版本:
- 在文字編輯器中,開啟符合 Tableau Server 版本的檔案:
- Tabelau 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)
)
)