在這個例子中,我使用的源表emp_location
在查詢,您的樣品臺。緩存文件也以emp_location*
開頭。
我在您的主會話之前創建了2個虛擬會話。
創建一個運行表,並保存最後一次運行時間。
select *
from run_history
where process_name='EMP_DIM'
+--------------+----------------------+
| PROCESS_NAME | LAST_READ_TIME |
+--------------+----------------------+
| EMP_DIM | 15-MAY-2016 12:00:07 |
+--------------+----------------------+
在主會話的會話前任務中,使用類似這樣的內容。
update run_history
set last_read_time = sysdate
where process_name='EMP_DIM';
現在找到的時候,你的表進行了更新。如果表沒有update time
列,請使用它獲取表的最新更新時間。
select scn_to_timestamp(max(ora_rowscn))
from emp_location;
現在是第一個虛擬會話,使用此查詢。如果last_read_time
之後源表中有更新,它將返回1行。如果不是,那麼它將返回0行。
select 1 from dual
where
(select scn_to_timestamp(max(ora_rowscn))
from emp_location)
>
(select last_read_time
from run_history
where process_name='EMP_DIM')
在鏈接任務,把作爲條件,$s_check_last_update.TgtSuccessRows=1
。
所以下一次會議只會在真正發生變化時纔會運行。在其post_session_task
中運行清除緩存文件的命令。
Windows:
del $PMCacheDir\emp_location*
Unix:
rm -rf $PMCacheDir\emp_location*
此鏈接任務都會有類似情況。 IIF($s_check_last_update.TgtSuccessRows=1,0,1)
。
在主會話中,打開General
選項卡並使用Treat Input links as OR
。
現在,集成服務將重新創建新的緩存文件,如果它們被刪除。
或者,您也可以通過外殼/ bash腳本,將連接到Oracle和檢查,如果有什麼東西在表更新,最後讀取時間後達到同樣的事情。如果屬實,它應該刪除緩存文件。
我還沒試過這個,但我認爲這會給出所需的輸出。 –