FileWatcher 故障排除选项

Lei*_*fel 5 oracle oracle-11g-r2 jobs dbms

我已经设置了一个凭据/程序/程序/文件观察程序/作业来监视新文件的文件夹,但它不起作用。我想弄清楚我可以检查什么来解决为什么这不起作用。在将代码缩减到最低限度之后,以下是我已经完成的事情。

  • 验证是否正在监视的文件夹中创建文件 - 它们是。
  • 验证该过程是否可以自行运行 - 它可以。
  • 验证文件观察器是否显示在 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;
Run Code Online (Sandbox Code Playgroud)

小智 1

要使用文件监视程序,必须安装数据库 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
Run Code Online (Sandbox Code Playgroud)

已选择 8 行。

SQL> l
  1* select comp_name, status from dba_registry
Run Code Online (Sandbox Code Playgroud)