Документ создан: 28.12.2017

Создание executable scheduler job'ов в linux.

Настройка.

  1. Файл $ORACLE_HOME/bin/extjob должен принадлежать пользователю root, группе oinstall и иметь атрибуты 4750:
    $ ls -l $ORACLE_HOME/bin/extjob
    -rwsr-x---. 1 root oinstall 1254244 Апр  5  2016 /opt/oracle/product/11.2.0/dbhome_1/bin/extjob

    Если это не так, от root необходимо выполнить:

    $ chmod 4750 $ORACLE_HOME/bin/extjob
    $ chown root:oinstall $ORACLE_HOME/bin/extjob
  2. Файл $ORACLE_HOME/rdbms/admin/externaljob.ora должен принадлежать пользователю root, группе oinstall и иметь атрибуты 640:
    $ ls -l $ORACLE_HOME/rdbms/admin/externaljob.ora
    -rw-r-----. 1 root oinstall 1575 Дек 22 12:36 /opt/oracle/product/11.2.0/dbhome_1/rdbms/admin/externaljob.ora

    Если это не так, от root необходимо выполнить:

    $ chmod 640 $ORACLE_HOME/rdbms/admin/externaljob.ora
    $ chown root:oinstall $ORACLE_HOME/rdbms/admin/externaljob.ora
  3. Файл $ORACLE_HOME/rdbms/admin/externaljob.ora должен содержать имя пользователя и имя группы, от чьего имени будут выполняться команды ОС:
     $ cat $ORACLE_HOME/rdbms/admin/externaljob.ora
    run_user = oracle
    run_group = oinstall
  4. Пользователю oracle необходимо выдать полномочия на создание job и external job, например:
    GRANT CREATE job TO test;
    GRANT CREATE external job TO test;

Пример.

  • Со стороны ОС:
    1. создаём файл /home/oracle/test.sh следующего содержания:
      #!/bin/bash
       
      infile="$1"
      outfile="${2:-/home/oracle/df_opt.tst}"
      df -h "${infile}" > "${outfile}"
    2. Выдаём полномочия:
      chmod +x test.sh
  • Со стороны Oracle:
    1. Создаём и выполняем job:
      DECLARE
          v_job_name VARCHAR2(50) := 'test_job';
      BEGIN
          BEGIN
              dbms_scheduler.drop_job(v_job_name);
          EXCEPTION WHEN OTHERS
              THEN NULL;
          END;
          dbms_scheduler.create_job ( job_name=> v_job_name
                                    , job_type=>'executable'
                                    , job_action=>'/home/oracle/test.sh'
                                    , number_of_arguments => 2
                                    , enabled => FALSE
                                    );
          dbms_scheduler.set_job_argument_value(job_name=>v_job_name,argument_position=>1, argument_value=>'/');
          dbms_scheduler.set_job_argument_value(job_name=>v_job_name,argument_position=>2, argument_value=>'/home/oracle/df.tst');
          dbms_scheduler.enable(v_job_name);
      END;
      /

После того, как отработает job, можно посмотреть его статус:

SELECT job_name, error#, log_date, status, ADDITIONAL_INFO from all_scheduler_job_run_details where job_name='TEST_JOB' order by log_date;

и файл /home/oracle/df.tst в ОС.

 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate