2017-09-21 78 views
8

Tôi có một vài thủ tục oracle:Làm thế nào để giải quyết ORA-27.475: "JOB" phải là một chương trình hay chuỗi

create or replace procedure receive_sms (p_to_date in date) 
is 
.. 
end; 

create or replace procedure send_sms (p_date in date) 
is 
.. 
end; 

và tôi muốn tạo một chuỗi dựa về các quy trình này và thêm các bước vào chuỗi và một số quy tắc:

BEGIN 
    DBMS_SCHEDULER.CREATE_CHAIN (
    chain_name   => 'mobile_archive_chain', 
    rule_set_name   => NULL, 
    evaluation_interval => NULL, 
    comments    => NULL); 
END; 
/

--- define three steps for this chain. Referenced programs must be enabled. 
BEGIN 
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('mobile_archive_chain', 'send', 'inforpilla.send_sms'); 
DBMS_SCHEDULER.DEFINE_CHAIN_STEP('mobile_archive_chain', 'receive', 'inforpilla.receive_sms'); 
END; 
/

--- define corresponding rules for the chain. 
BEGIN 
DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('mobile_archive_chain', 'TRUE', 'START send'); 
DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('mobile_archive_chain', 'send COMPLETED', 'Start receive'); 
DBMS_SCHEDULER.DEFINE_CHAIN_RULE ('mobile_archive_chain', 'receive COMPLETED', 'END'); 
END; 
/

--- enable the chain 
BEGIN 
DBMS_SCHEDULER.ENABLE('mobile_archive_chain'); 
END; 
/

--- create a chain job to start the chain daily at 1:00 p.m. 
BEGIN 
DBMS_SCHEDULER.CREATE_JOB (
    job_name  => 'start_archive', 
    job_type  => 'CHAIN', 
    job_action  => 'mobile_archive_chain', 
    repeat_interval => 'freq=daily;byhour=15;byminute=3;bysecond=0', 
    enabled   => TRUE); 
END; 
/

Nhưng kiểm tra bảng nhật ký Tôi thấy rằng công việc không thành công với mã ERROR: 27475

SELECT * from USER_SCHEDULER_JOB_RUN_DETAILS ORDER BY LOG_DATE DESC 

như đề nghị tôi loại bỏ các thông số thành các thủ tục, nhưng sau đó tôi nhận được các lỗi này:

CHAIN_LOG_ID="201095" 
CHAIN_LOG_ID="201095",STEP_NAME="RECEIVE", ORA-27475: "TEST.RECEIVE_SMS" must be a PROGRAM OR CHAIN 
CHAIN_LOG_ID="201095",STEP_NAME="SEND", ORA-27475: "TEST.SEND_SMS" must be a PROGRAM OR CHAIN 

Trả lời

1

Tôi nghĩ bạn phải sử dụng DBMS_SCHEDULER.CREATE_PROGRAM để tạo đối tượng chương trình và sau đó chuyển tên của đối tượng đó vào DBMS_SCHEDULER.DEFINE_CHAIN_STEP. Dường như đối số thứ ba cho DEFINE_CHAIN_STEP là tên chương trình và bạn xác định tên chương trình đó bằng lệnh gọi hàm CREATE_PROGRAM.

Manual url:

http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#ARPLS72235

5

Có vài điều bạn cần phải chắc chắn:

  1. Tốt hơn là chỉ định tên công việc đầy đủ trong OWNER.JOBNAME. Xem ai là chủ sở hữu của công việc

    select * from dba_scheduler_jobs where lower(job_name)='start_archive'; 
    
  2. Nếu start_date và repeat_interval còn lại null, sau đó công việc được lên kế hoạch để chạy ngay sau khi công việc được kích hoạt.

  3. Công việc này là người sắp xếp công việc, bạn không nên lên lịch công việc như SYS nếu bạn muốn sử dụng quyền người dùng hiện tại!

Tài liệu tham khảo: -

Oracle Community

Ask Tom

2

Vấn đề có thể là trong chuỗi, và tên bước chuỗi. Hãy thử sử dụng chữ hoa ở trên cho tất cả các công việc, chuỗi và chuỗi bước hoặc kèm theo tên với dấu ngoặc kép: ""

Trong định danh xử lý oracle như phân biệt chữ hoa chữ thường và chuyển đổi thành chữ hoa. Do đó, oracle không thể tìm thấy tên chuỗi của bạn. Tương tự áp dụng cho các bước chuỗi, quy tắc, v.v.

Ngoài ra, các thủ tục "gửi" và "nhận" tham số mong đợi (p_to_date) và các thông số này không được chuyển trong các cuộc gọi bước chuỗi. Điều này sẽ gây ra một vấn đề. Không có cách nào trực tiếp để truyền các tham số chuỗi. Hãy xem bài đăng này: community.oracle.com/message/1459336#1459336

+0

không nghĩ vậy. từ các tài liệu https://docs.oracle.com/cd/B28359_01/server.111/b28310/scheduse009.htm # ADMIN12456 –

+1

Ngoài ra, có một vấn đề khác trong chuỗi cuộc gọi của bạn. Các thủ tục bạn mong đợi tham số (p_to_date) và các tham số này không được thông qua trong các cuộc gọi bước chuỗi. Điều này sẽ gây ra một vấn đề. Không có cách nào trực tiếp để truyền các tham số chuỗi. Hãy xem bài đăng này: https://community.oracle.com/message/1459336#1459336 –

Các vấn đề liên quan