將永久訊息與儲存在雲端物件存放區中的訊息搭配使用
關於與 DBMS_PIPE 的持續性訊息傳遞
DBMS_PIPE
的持續性訊息傳遞可讓一或多個資料庫階段作業在相同區域或跨區域與儲存在雲端物件存放區中的訊息進行通訊。
DBMS_PIPE
中的持續性訊息:
-
允許您傳送及擷取非常大的訊息。
-
支援傳送大量管道訊息。
-
支援跨多個資料庫和不同區域的資料庫,在單一資料庫內傳送及接收訊息。
-
支援使用相同雲端物件存放區位置 URI 的多個管道。
永久訊息傳遞管道可以在任何支援的 DBMS_PIPE
類型中建立:
- 隱含管:使用
DBMS_PIPE.SEND_MESSAGE
函數以不明的管路名稱傳送訊息時,會自動建立訊息。 - 明確管線:使用
DBMS_PIPE.CREATE_PIPE
函數與使用者指定的管線名稱建立。 - 公用管道:任何具備
DBMS_PIPE
套裝軟體EXECUTE
權限的使用者均可存取。 - 私人管道:具有與管道建立者相同之使用者的階段作業可存取。
附註:
Oracle 建議您在傳送或接收含有永久訊息的訊息之前,先建立明確管道。使用DBMS_PIPE.CREATE_PIPE
建立明確管道,可確保建立具有您所要之存取權限的管道 (透過設定 private
參數)。
下列顯示含有永久訊息之 DBMS_PIPE
的一般工作流程:

database-pipe-persistent-messaging.eps 圖解描述
使用 DBMS_PIPE
的現有應用程式可在最少的變更下繼續作業。您可以使用登入觸發程式或使用其他初始化常式,設定使用 DBMS_PIPE
搭配證明資料物件和位置 URI 的現有應用程式。設定 DBMS_PIPE
證明資料和位置 URI 之後,不需要進行其他變更即可使用永久訊息。管道的所有後續使用都會將訊息儲存在雲端物件存放區,而不是儲存在資料庫記憶體中。這可讓您在進行最少的變更時,將記憶體內的訊息儲存體方法變更為永久的雲端物件儲存體。
永久訊息簡介與功能
使用永久訊息的 DBMS_PIPE
功能:
-
可以在相同區域或跨區域的多個 Autonomous Database 執行處理之間傳送和擷取訊息。
-
持續性訊息保證只能由一個程序寫入或讀取。這可避免因並行讀取和寫入而導致訊息內容不一致。
DBMS_PIPE
僅允許一項作業、傳送訊息或接收訊息到指定時間為作用中,且這些作業受到鎖定機制的保護。不過,如果因進行中的作業而無法執行作業,則程序會定期重試,直到達到timeout
值為止。 -
DBMS_PIPE
使用DBMS_CLOUD
來存取雲端物件存放區。訊息可以儲存在任何支援的雲端物件存放區中。如需詳細資訊,請參閱雲端物件儲存 URI 格式。 DBMS_PIPE
使用DBMS_CLOUD
來存取「雲端物件存放區」,並且提供所有支援的證明資料類型:DBMS_CLOUD.CREATE_CREDENTIAL
:如需詳細資訊,請參閱 CREATE_CREDENTIAL 程序。
DBMS_PIPE 權限授權與安全性
DBMS_PIPE
程序會以呼叫者的權限執行。專用管道是由目前使用者所擁有,而使用者所建立的專用管道只能由同一使用者使用。這適用於儲存訊息至雲端物件存放區的記憶體內管和永久訊息管道。傳送與接收在呼叫者的綱要中執行的訊息。
使用將訊息儲存至「雲端物件存放區」的專用管道時,必須要有證明資料物件,才能使用由 location_uri
參數識別的雲端物件存放區進行認證。呼叫使用者必須具備使用 credential_name
參數指定之證明資料物件的 EXECUTE
權限,才能存取物件存放區。
若要使用公用管道,使用者 (資料庫階段作業) 必須具備 DBMS_PIPE
的執行權限。對於使用永久訊息並將訊息儲存至「雲端物件存放區」的公用管道,使用者、資料庫階段作業必須具備 DBMS_CLOUD
的執行權限,並且對證明資料物件執行權限 (或者您可以建立可存取包含訊息之位置 URI 的證明資料物件)。
DBMS_PIPE 限制
DBMS_PIPE
套裝軟體不支援在使用不同字元集的資料庫之間傳送訊息。例如,如果您有一個使用 AL32UTF8 的 Autonomous Database 執行處理,以及另一個使用 WE8MSWIN1252 的執行處理,就無法在這兩個資料庫之間傳送含有 DBMS_PIPE
的訊息。在此情況下,如果您嘗試在這兩個資料庫之間傳送含有 DBMS_PIPE
的訊息,系統將會發出錯誤 ORA-12704
。
請參閱 Character Set Selection for Autonomous Database 以瞭解詳細資訊。
擷取相同資料庫的永久訊息
描述從相同 Autonomous Database 例項 (訊息傳送的例項) 上明確管道擷取永久訊息的步驟。
在 Autonomous Database 例項上,您可以接收從不同階段作業傳送至管道的訊息。DBMS_PIPE
程序是呼叫者的權限程序,並以目前呼叫的使用者身分執行。
專用管道是由建立管道的目前使用者所擁有。專用管道只能由建立管道的相同使用者存取。這適用於使用記憶體內訊息的管道,以及使用永久訊息與儲存在雲端物件存放區中訊息的管道。
具備 DBMS_PIPE
執行權限的任何資料庫階段作業都可以存取公用管道。這適用於使用記憶體內訊息的管道,以及使用永久訊息與儲存在雲端物件存放區中訊息的管道。
如需詳細資訊,請參閱 SET_CREDENTIAL_NAME 程序和 GET_LOCATION_URI 函數。
如需詳細資訊,請參閱 RECEIVE_MESSAGE 函數。