Oracle

使用分佈式 Lobs 創建視圖

  • January 15, 2020

我有兩個 Oracle 18c 實例(實例 1 具有模式 DB1,實例 2 具有模式 DB2)並且我知道自 12.2 以來就支持分佈式 lob。所以我做了以下事情:

CREATE TABLE DB1.TEST_TABLE ID NUMBER, FOO CLOB;
INSERT INTO DB1.TEST_TABLE (ID, FOO) VALUES (1, "RANDOM TEXT");

現在我創建了 da databaselink 以從實例 2 訪問 DB1

SELECT * FROM DB1.TEST_TABLE@REMOTE_LINK

選擇完美。但是如果我想用這個選擇創建一個視圖,我會得到一個錯誤:

CREATE VIEW DB2.V_TEST_TABLE AS SELECT * FROM DB1.TEST_TABLE@REMOTE_LINK

ORA-22992: cannot use LOB locators selected from remote tables
22992. 00000 -  "cannot use LOB locators selected from remote tables"
*Cause:    A remote LOB column cannot be referenced.
*Action:   Remove references to LOBs in remote tables.

我不明白為什麼選擇分發 lob 可以正常工作,但不能創建此選擇的視圖。

如果返回的所有對像都是標量而不是 lob,則可以使用視圖。在這種情況下,如果您返回了 LOB 的前 4000 個字元,那麼文件表明只要返回的結果不是 LOB,就允許使用在源上創建臨時 lob 的函式。

12 的文件在這裡。它並沒有說創建視圖將以 Oracle 方式工作,這意味著只有他們描述的內容才能工作:

  • create table t as select * from ...
  • insert into t select * from ...
  • 使用返回標量的函式,例如 DBMS_LOB.SUBSTR(your_lob, 32767, 1);

另一種解決方法是在源數據庫上創建帶有修剪 lob 的視圖,然後在目標數據庫上創建視圖的視圖。

請注意,將 LOBS 選擇到目標中的對象會自動將其轉換為目標的字元集的小問題。解決方法是轉換為 RAW 並選擇然後轉換回。

引用自:https://dba.stackexchange.com/questions/257455