oracledatabae12cのテーブルへ、1レコードをインサートさせて事前に作成したトリガーが正常に動作するか検証しようとしたところ
インサートが出来ず、エラーが発生しました。
インサート処理で失敗し、かつトリガーのエラーも出力されていました。
原因調査中となります。
※インサート処理
SQL> desc INPUT_TEST 名前 NULL? 型 ----------------------------------------- -------- ---------------------- ID NOT NULL NUMBER(8) NUM NUMBER(12,2) STR CHAR(8) VARSTR VARCHAR2(8) DT DATE TIME0 TIMESTAMP(0) TIME6 TIMESTAMP(6) TIME9 TIMESTAMP(9) SQL> SQL> select count(*) from INPUT_TEST; COUNT(*) ---------- 255 SQL> insert into INPUT_TEST ( 2 ID,NUM,STR 3 ) values ( 4 '256', '2849', 'chr1' 5 ); insert into INPUT_TEST ( * 行1でエラーが発生しました。: ORA-27486: 権限が不足しています ORA-06512: "SYS.DBMS_ISCHED", 行175 ORA-06512: "SYS.DBMS_SCHEDULER", 行288 ORA-06512: "SYSTEM.EMBULK_TR", 行12 ORA-04088: トリガー'SYSTEM.EMBULK_TR'の実行中にエラーが発生しました
※トリガーを使わずに実行した結果
SQL> begin 2 IF INSERTING THEN 3 dbms_output.put_line('-------------------------'); 4 dbms_output.put_line('OracleDB to BigQuery Bulk Insert Start'); 5 DBMS_SCHEDULER.CREATE_JOB ( 6 JOB_NAME => 'EmbulkTest', 7 JOB_TYPE => 'EXECUTABLE', 8 JOB_ACTION => 'C:\Users\yazaki\Desktop\embulk\oracle_to_bigquery.bat'); 9 DBMS_SCHEDULER.ENABLE('EmbulkTest'); 10 dbms_output.put_line('OracleDB to BigQuery Bulk Insert End'); 11 dbms_output.put_line('-------------------------'); 12 END IF; 13 end; 14 / PL/SQLプロシージャが正常に完了しました。 SQL> SQL> SQL> SQL> insert into INPUT_TEST (ID,NUM,STR) values ('312', '2849', 'chr1'); 1行が作成されました。 SQL> SQL> commit; コミットが完了しました。 SQL> SQL> select owner,job_name,state from dba_scheduler_jobs where job_name = 'EmbulkTest'; レコードが選択されませんでした。 SQL>
※再トライ
SQL> create or replace trigger embulk_tr 2 3 after insert on INPUT_TEST for each row 4 5 DECLARE pragma autonomous_transaction; 6 7 begin 8 IF INSERTING THEN 9 10 dbms_output.put_line('-------------------------'); 11 dbms_output.put_line('OracleDB to BigQuery Bulk Insert Start'); 12 13 DBMS_SCHEDULER.CREATE_JOB ( 14 JOB_NAME => 'EmbulkTest', 15 JOB_TYPE => 'EXECUTABLE', 16 JOB_ACTION => 'C:\WINDOWS\system32\cmd.exe /c C:\Users\yazaki\Desktop\embulk\oracle_to_bigquery.bat', 17 start_date => TO_DATE('2018/11/13 00:00:00','yyyy/mm/dd hh24:mi:ss'), 18 end_date => TO_DATE('2999/12/31 00:00:00','yyyy/mm/dd hh24:mi:ss'), 19 repeat_interval => 'FREQ=SECONDLY;interval=1', 20 auto_drop => TRUE, 21 enabled => TRUE 22 ); 23 24 25 dbms_output.put_line('OracleDB to BigQuery Bulk Insert End'); 26 dbms_output.put_line('-------------------------'); 27 28 END IF; 29 end; 30 / トリガーが作成されました。 SQL> select owner,job_name,state from dba_scheduler_jobs where job_name = 'EMBULKTEST'; OWNER JOB_NAME STATE ------------------------------ ------------------------------ ------------------------------ SYSTEM EMBULKTEST SCHEDULED SQL> SQL> select trigger_name,status,triggering_event,action_type,TRIGGER_BODY from dba_triggers where trigger_name = 'EMBULK_TR'; TRIGGER_NAME STATUS TRIGGERING_EVEN ACTION_TYPE TRIGGER_BODY --------------- --------------- --------------- --------------- -------------------------------------------------- EMBULK_TR ENABLED INSERT PL/SQL DECLARE pragma autonomous_transaction; begin IF INSERTING THEN dbms_output.put
※2回目のインサートでエラー
SQL> insert into INPUT_TEST (ID,NUM,STR) values ('333', '2849', 'chr1'); insert into INPUT_TEST (ID,NUM,STR) values ('333', '2849', 'chr1') * 行1でエラーが発生しました。: ORA-27477: "SYSTEM"."EMBULKTEST"はすでに存在します ORA-06512: "SYS.DBMS_ISCHED", 行175 ORA-06512: "SYS.DBMS_SCHEDULER", 行288 ORA-06512: "SYSTEM.EMBULK_TR", 行9 ORA-04088: トリガー'SYSTEM.EMBULK_TR'の実行中にエラーが発生しました
※ジョブ作成時に引数を与えてリトライ
create or replace trigger embulk_tr after insert on INPUT_TEST for each row DECLARE pragma autonomous_transaction; begin dbms_output.put_line('-------------------------'); dbms_output.put_line('OracleDB to BigQuery Bulk Insert Start'); IF INSERTING THEN DBMS_SCHEDULER.CREATE_JOB ( JOB_NAME => 'Embulk_Test', JOB_TYPE => 'EXECUTABLE', JOB_ACTION => 'C:\WINDOWS\system32\cmd.exe', number_of_arguments => 3, start_date => TO_DATE('2018/11/13 00:00:00','yyyy/mm/dd hh24:mi:ss'), end_date => TO_DATE('2999/12/31 00:00:00','yyyy/mm/dd hh24:mi:ss'), repeat_interval => 'FREQ=SECONDLY;interval=1', auto_drop => FALSE ); DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('Embulk_Test',1, '/q'); DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('Embulk_Test',2, '/c'); DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('Embulk_Test',3, 'C:\Users\yazaki\Desktop\embulk\test.bat'); DBMS_SCHEDULER.ENABLE('Embulk_Test'); END IF; dbms_output.put_line('OracleDB to BigQuery Bulk Insert End'); dbms_output.put_line('-------------------------'); end; / トリガーが作成されました。 ※アラートログ 2018-11-15T10:59:32.125731+09:00 Errors in file C:\USERS\YAZAKI\DESKTOP\EMBULKDB\diag\rdbms\orcl\orcl\trace\orcl_j001_4908.trc: ORA-12012: ジョブ"SYSTEM"."EMBULK_TEST"の自動実行エラーが発生しました ORA-27369: タイプEXECUTABLEのジョブが、次の終了コードで失敗しました: 1 A N Z X ? ? B
※2018/11/16トリガー文
create or replace trigger embulk_tr after insert on INPUT_TEST for each row DECLARE pragma autonomous_transaction; begin dbms_output.put_line('-------------------------'); dbms_output.put_line('OracleDB to BigQuery Bulk Insert Start'); IF INSERTING THEN DBMS_SCHEDULER.CREATE_JOB ( JOB_NAME => 'Embulk_Test', JOB_TYPE => 'EXECUTABLE', -- JOB_ACTION => '"C:\WINDOWS\system32\cmd.exe" /q /c "C:\Users\yazaki\Desktop\embulk\test.bat"', JOB_ACTION => 'C:\WINDOWS\system32\cmd.exe', number_of_arguments => 3, start_date => TO_DATE('2018/11/13 00:00:00','yyyy/mm/dd hh24:mi:ss'), end_date => TO_DATE('2999/12/31 00:00:00','yyyy/mm/dd hh24:mi:ss'), repeat_interval => 'FREQ=SECONDLY;interval=300', auto_drop => FALSE ); DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('Embulk_Test',1, '/q'); DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('Embulk_Test',2, '/c'); DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('Embulk_Test',3, 'C:\Users\yazaki\Desktop\embulk\test.bat'); DBMS_SCHEDULER.ENABLE('Embulk_Test'); -- DBMS_SCHEDULER.RUN_JOB ( -- JOB_NAME => 'Embulk_Test', -- USE_CURRENT_SESSION => FALSE -- ); END IF; dbms_output.put_line('OracleDB to BigQuery Bulk Insert End'); dbms_output.put_line('-------------------------'); end; /
※batファイル
dir >> C:\Users\yazaki\Desktop\embulk\test.txt

回答3件
あなたの回答
tips
プレビュー