設定Windows Service(服務)的相依性

解決了上一篇服務啟動會逾時的問題之後,又出現了一個新的問題,那就是服務的啟動順序。

因為正式區的速度快,所以並沒有發生問題,但是測試區因為速度慢,問題就出現了。

問題如左:我們的DB與AP在一台,而AP需要等到DB啟動完成後才能啟動,不然會因為找不到DB而掛掉。

而當初正式區的AP、DB安裝完後,重新開機並沒有發生問題,所以就沒有設定相依性。

設定相依性可依下列的方式進行:

1、執行regedit進入登錄編輯程式

2、找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\選擇所要設定的Service

3、新增類別為[多字串值],名稱為DependOnService的機碼

4、機碼的值則填入欲相依的Service名稱(DisplayName),可輸入多個Service,表示這些都要先啟動完成

5、重新啟動相依的服務,是否會先被終止再啟動。如果沒有生效,可以重開機試試。



可以查看服務的相依性,應該就會出現了。




Windows Service(服務)無法自動啟動,出現逾時的錯誤

 我們有一台顧問幫忙裝好的HR系統,今天在做異機還原測試時,發生了系統開機後,相關服務沒有自動啟動。

於是我們先以手動的方式測試是否還原有問題,測試的結果手動啟動服務沒有問題。

檢查Windows的事件,發現有逾時的錯誤


原來Windows的服務有預設30秒的限制,在該限制秒數之內如果還沒有得到成功的回應,那該服務還是會被停掉,而我們這台還原測試的機器,硬體規格與正式區差異很大,所以開機的速度相當緩慢。

依據微軟的技術文件,將逾時的值改為120秒後,問題就解決了,需注意的是該方法會套用所有的服務。

執行的步驟如下:

1、啟動登錄編輯程式 (Regedit.exe) 。

2、找到登錄機碼: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

3、以滑鼠右鍵按一下 [ ServicesPipeTimeout ] DWORD 值,然後按一下 [ 修改]。

4、按一下 [ 十進位]。

5、輸入 60000(毫秒),然後按一下 [確定]。

如果沒有 [ ServicesPipeTimeout ] ,可依下列新增:

1、找到登錄機碼: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

2、在 [編輯]  -->  [新增],然後按一下 [DWORD 值]。

3、輸入名稱 ServicesPipeTimeout,然後按下確定

4、與上述的方式一樣,將值修改為 60000(毫秒)即可。





Oracle DB: ORA-12638: Credential retrieval failed

 今天新增了一台Windows平台的Oracle DB 19c,本機連線Oracle DB是沒有問題,DB也確認一切都正常運行。

在以我的Win 10筆電以SQL*Plus要連上這台DB時,出現了下列的錯誤:

ORA-12638: Credential retrieval failed

以指令tnsping測試DB是ok的:


其原因在於我的筆電中sqlnet.ora的一個設定值:

    SQLNET.AUTHENTICATION_SERVICES= (NTS)

將其值改為如下,就可以成功連線DB了:

    SQLNET.AUTHENTICATION_SERVICES= (NONE)

對於Windows平台,SQLNET.AUTHENTICATION_SERVICES = (NTS)會開啟作業系統認證登入,而不是用Oracle DB的帳號認證

在Windows中,是通過sqlnet.ora來實現驗證機制,而且其默認的預設值是NTS

下列是幾種情況:

1、sqlnet.ora是空的,或是用#注解 : 基於Oracle密碼文件驗證

2、SQLNET.AUTHENTICATION_SERVICES = (NTS) : 基於作業系統驗證

3、SQLNET.AUTHENTICATION_SERVICES = (NONE):基於Oracle密碼文件驗證

4、SQLNET.AUTHENTICATION_SERVICES = (NONE,NTS):基於作業系統驗證