Oracle

FileWatcher 故障排除選項

  • September 8, 2020

我已經設置了憑據/程序/程序/文件觀察程序/作業來監視文件夾中的新文件,但它不起作用。我試圖弄清楚我可以檢查什麼來解決為什麼這不起作用。在將程式碼縮減到最低限度之後,這是我已經完成的一些事情。

  • 驗證文件是否正在被監視的文件夾中創建 - 它們是。
  • 驗證該過程是否可以自行執行 - 它可以。
  • 驗證文件觀察器是否顯示在 DBA_Scheduler_File_Watchers 中並已啟用。- 確實如此。
  • 驗證 DBA_Scheduler_Job_Run_Details 是否顯示成功執行 - 它不顯示此作業的任何條目。
  • 檢查警報日誌 - 沒什麼有趣的。
  • 檢查其他跟踪文件 - 我得到了匹配的跟踪文件*_j000_*.trc,但他們只是有這個:FILE_TRANSFER error is:後面什麼都沒有。

有人可以解釋我做錯了什麼或給我一種方法來進一步解決這個問題嗎?這是我的測試程式碼:

--Create Credential.
BEGIN
   sys.dbms_scheduler.create_credential(
       username => 'oracle',
       password => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
       database_role => NULL,
       windows_domain => NULL,
       comments => NULL,
       credential_name => 'TestCredential'
   );
END;
/


CREATE TABLE FilesFound(FoundDate Date);


CREATE OR REPLACE PROCEDURE TestProcedure(iFileInfo In sys.scheduler_filewatcher_result) AS
BEGIN
  INSERT INTO FilesFound VALUES (sysdate);
  COMMIT;
END;
/


BEGIN
  DBMS_SCHEDULER.create_program(
     program_name => 'TestProgram',
     program_type => 'stored_procedure',
     program_action => 'TestProcedure',
     number_of_arguments => 1,
     enabled => False);
  DBMS_SCHEDULER.define_metadata_argument(
     program_name => 'TestProgram',
     metadata_attribute => 'event_message',
     argument_position => 1);
END;
/



BEGIN
dbms_scheduler.create_file_watcher(
  file_watcher_name => 'TestFileWatcher',
  directory_path => '/u01/test',
  file_name => '*.*',
  credential_name => 'TestCredential',
  destination => NULL,
  enabled => False);
END;
/


BEGIN
  dbms_scheduler.create_job(
  job_name => 'TestJob',
  program_name => 'TestProgram',
  event_condition => NULL,
  queue_spec => 'TestFileWatcher',
  auto_drop => False,
  enabled => False);

  --Enable Everything.
  dbms_scheduler.enable('TestProgram, TestFileWatcher, TestJob');
end;
/

--Set a one minute check interval.
BEGIN
 DBMS_SCHEDULER.set_attribute(
   'file_watcher_schedule',
   'repeat_interval',
   'freq=minutely; interval=1');
END;
/

--Create a file.
DECLARE
 vFile utl_file.file_type;
BEGIN
 EXECUTE IMMEDIATE 'create or replace directory TESTDIRECTORY as ''/u01/test''';
 vFile := utl_file.fopen('TESTDIRECTORY', 'TestFileWatcher.txt', 'w', NULL);
 utl_file.put_line(vFile, 'File has arrived '||SYSTIMESTAMP, TRUE);
 utl_file.fclose(vFile);
END;
/


--Delay to give time for file to appear.
BEGIN
  DBMS_LOCK.SLEEP(120);
END;
/

--Check the table.
BEGIN
  FOR vx IN (select count(*) ct from sys.FilesFound) LOOP
     If (vx.ct = 0) Then
        DBMS_Output.Put_Line('Failed - No File Watcher Activity.');
     Else
        DBMS_Output.Put_Line('Success - File Watcher Activity Found.');
     End If;
  END Loop;
END;
/

--Cleanup.
EXECUTE dbms_scheduler.drop_job(job_name => 'TestJob');
EXECUTE dbms_scheduler.drop_program(program_name => 'TestProgram');
EXECUTE dbms_scheduler.drop_file_watcher(file_watcher_name => 'TestFileWatcher');
EXECUTE DBMS_SCHEDULER.drop_credential(credential_name => 'TestCredential');
drop table FilesFound;
drop procedure TestProcedure;
drop directory TestDirectory;

到目前為止,已經確定了一些問題,但我們還沒有讓這個工作。

  • 如果尚未安裝 libpam.so,請安裝它。
  • 修改 $ORACLE_HOME/rdbms/admin/externaljob.ora 的內容,指定擁有 oracle 程序的使用者和組。
  • 安裝更新檔 10363801 以解決在 11.2.0.2 上刪除作業的錯誤。
  • 漏洞 17256073 已開放供 Oracle 開發團隊進一步調查。

當我有更多資訊時,我會更新這個。

要使用文件觀察程序,必須安裝數據庫 Java 虛擬機 (JVM) 組件。

檢查是否安裝了java:

COMP_NAME                                          STATUS
-------------------------------------------------- -----------
Oracle Expression Filter                           VALID
Oracle Enterprise Manager                          VALID
Oracle Workspace Manager                           VALID
Oracle Database Catalog Views                      VALID
Oracle Database Packages and Types                 VALID
JServer JAVA Virtual Machine                       VALID
Oracle XDK                                         VALID
Oracle Database Java Packages                      VALID

選擇了 8 行。

SQL> l
 1* select comp_name, status from dba_registry

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