(8.0.26)
https://qiita.com/magaming/items/6a941ef1c2f673de8ae7
drop procedure proc1;
delimiter //
create procedure proc1(in p1 int)
begin
start transaction;
update tab1 set col1 = p1;
commit;
end
//
delimiter ;
select @@event_scheduler;
create event event1
on schedule every 1 day starts '2022-03-19 00:00:00'
do
call proc1(11);
select * from information_schema.EVENTS;
show events\G
現在の日付と時間を指定するには、CURRENT_TIMESTAMP を使用できます。
このような場合、イベントは、作成されるとすぐに機能します。
select * from tab1;
show create event event1;
alter event event1
on schedule every 1 day starts current_timestamp;
alter event event1
on schedule every 1 day starts '2022-03-19 00:00:00';
select * from tab1;
show create event event1;
drop event event1;
(19c)
create or replace procedure proc1(p1 in integer) as
ret integer;
begin
update tab1 set col1 = p1;
commit;
exception when others then
raise;
end;
/
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'JOB1',
job_type => 'STORED_PROCEDURE',
job_action => 'TEST.PROC1',
number_of_arguments => 1,
start_date => TO_DATE('2001/01/01 00:00:00','YYYY/MM/DD HH24:MI:SS'),
repeat_interval => 'FREQ=DAILY;INTERVAL=1',
end_date => TO_DATE('2030/12/31 23:59:59','YYYY/MM/DD HH24:MI:SS'),
auto_drop => FALSE,
comments => 'JOB1');
END;
/
BEGIN
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
job_name =>'JOB1',
argument_position =>1 ,
argument_value =>'11' );
END;
/
alter session set nls_timestamp_tz_format = 'YYYY/MM/DD HH24:MI:SS';
select * from DBA_SCHEDULER_JOBS where job_name = 'JOB1';
select * from ALL_SCHEDULER_JOB_ARGS where job_name = 'JOB1';
select * from tab1;
BEGIN
DBMS_SCHEDULER.RUN_JOB(
JOB_NAME => 'JOB1',
USE_CURRENT_SESSION => TRUE);
END;
/
select * from tab1;
BEGIN
DBMS_SCHEDULER.DROP_JOB ('JOB1');
END;
/
(14)
OS:CentOS8
https://www.pgadmin.org/download/pgadmin-4-rpm/
https://www.pgadmin.org/docs/pgadmin4/6.7/pgagent.html
https://qiita.com/mkyz08/items/86ddc3e909b55eb16fd9
--1. pgAdmin4のインストール
rpm -i https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm
dnf install -y pgadmin4
/usr/pgadmin4/bin/setup-web.sh
--2. pgAgentのインストール
dnf install -y pgagent_14
※postgresデータベースに接続して実行
CREATE EXTENSION pgagent;
CREATE LANGUAGE plpgsql;
--3. 動作確認用プロシージャ作成
※testデータベースに接続して実行
create or replace procedure proc1(p1 in integer)
language plpgsql
as $$
declare
begin
update tab1 set col1 = p1;
exception when others then
raise;
end;
$$;
--4. パスワードファイル作成
vim ~/.pgpass
#ホスト名:ポート番号:データベース名:ユーザ名:パスワード
192.168.137.70:5432:postgres:postgres:postgres
192.168.137.70:5432:test:postgres:postgres
chmod 600 ~/.pgpass
--5. pgagent起動
/usr/bin/pgagent_14 hostaddr=192.168.137.70 dbname=postgres user=postgres
※dnfでインストールされるsystemctlで起動した場合、ジョブ動作確認できなかった
--6. ジョブ登録
※pgAdmin4で実行
http://192.168.137.70/pgadmin4
※ジョブ登録時のホストエージェント名は下記SQLで取得した値をセットする
IPアドレス指定では動作しないため注意
SELECT jagstation FROM pgagent.pga_jobagent;
call proc1(11);
ジョブを右クリックしてRun nowで実行可能
--7. ジョブ実行結果確認
※postgresデータベースに接続して実行
select * from pgagent.pga_schedule;
select * from pgagent.pga_job;
select * from pgagent.pga_joblog;
select * from pgagent.pga_jobsteplog;
※testデータベースに接続して実行
select * from tab1;
(2019)
use test ;
GO
create or alter procedure proc1(@p1 integer) as
begin
begin try
begin transaction;
update tab1 set col1 = @p1;
commit;
end try
begin catch
throw;
end catch
end;
GO
use msdb ;
GO
EXEC dbo.sp_add_job
@job_name = N'job1' ;
GO
EXEC dbo.sp_add_jobstep
@job_name = N'job1',
@step_name = N'job1-1',
@subsystem = N'TSQL',
@command = N'test.dbo.proc1 11',
@retry_attempts = 3,
@retry_interval = 3 ;
GO
EXEC dbo.sp_add_schedule
@schedule_name = N'schedule1',
@freq_type = 4,
@freq_interval = 4,
@active_start_date = 20010101,
@active_end_date = 20301231,
@active_start_time = 000000,
@active_end_time = 235959
;
GO
EXEC dbo.sp_attach_schedule
@job_name = N'job1',
@schedule_name = N'schedule1';
GO
EXEC dbo.sp_add_jobserver
@job_name = N'job1';
GO
select * from dbo.sysjobs
select * from dbo.sysschedules
select * from dbo.sysjobschedules
select * from dbo.sysjobservers
select * from test.dbo.tab1;
EXEC dbo.sp_start_job
@job_name = N'job1';
GO
select * from test.dbo.tab1;
EXEC dbo.sp_delete_jobserver
@job_name = N'job1',
@server_name = N'MMM063';
GO
EXEC dbo.sp_detach_schedule
@job_name = N'job1',
@schedule_name = N'schedule1';
GO
EXEC dbo.sp_delete_schedule
@schedule_name = N'schedule1';
GO
EXEC dbo.sp_delete_job
@job_name = N'job1' ;
GO