AWS SCT 확장 팩을 사용하여 PostgreSQL에서 SQL Server 에이전트 에뮬레이션 - AWS Schema Conversion Tool

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS SCT 확장 팩을 사용하여 PostgreSQL에서 SQL Server 에이전트 에뮬레이션

SQL Server 에이전트는 SQL Server 작업을 실행하는 Microsoft Windows 서비스입니다. SQL Server 에이전트는 일정에 따라, 특정 이벤트 발생 시 또는 필요에 따라 작업을 실행합니다. SQL Server 에이전트에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

PostgreSQL은 SQL Server 에이전트와 동일한 기능을 제공하지 않습니다. SQL Server 에이전트 기능을 에뮬레이션하기 위해 AWS SCT는 확장 팩을 생성합니다. 이 확장 팩은 AWS Lambda와 Amazon CloudWatch를 사용합니다. AWS Lambda는 일정을 관리하고 작업을 실행하는 데 사용되는 인터페이스를 구현합니다. Amazon CloudWatch는 예약 규칙을 유지 관리합니다.

AWS Lambda와 Amazon CloudWatch는 JSON 파라미터를 사용하여 상호 작용합니다. 이 JSON 파라미터의 구조는 다음과 같습니다.

{ "mode": mode, "parameters": { list of parameters }, "callback": procedure name }

이전 예제에서 mode는 작업 유형이고 list of parameters는 작업 유형에 따라 달라지는 파라미터 집합입니다. 또한 procedure name은 작업이 완료된 후 실행되는 프로시저의 이름입니다.

AWS SCT는 하나의 Lambda 함수를 사용하여 작업을 제어하고 실행합니다. CloudWatch 규칙은 작업 실행을 시작하고, 작업을 시작하는 데 필요한 정보를 제공합니다. CloudWatch 규칙이 트리거되면 규칙의 파라미터를 사용하여 Lambda 함수를 시작합니다.

프로시저를 호출하는 단순 작업을 생성하려면 다음 형식을 사용합니다.

{ "mode": "run_job", "parameters": { "vendor": "mysql", "cmd": "lambda_db.nightly_job" } }

여러 단계가 포함된 작업을 생성하려면 다음 형식을 사용합니다.

{ "mode": "run_job", "parameters": { "job_name": "Job1", "enabled": "true", "start_step_id": 1, "notify_level_email": [0|1|2|3], "notify_email": email, "delete_level": [0|1|2|3], "job_callback": "ProcCallBackJob(job_name, code, message)", "step_callback": "ProcCallBackStep(job_name, step_id, code, message)" }, "steps": [ { "id":1, "cmd": "ProcStep1", "cmdexec_success_code": 0, "on_success_action": [|2|3|4], "on_success_step_id": 1, "on_fail_action": 0, "on_fail_step_id": 0, "retry_attempts": number, "retry_interval": number }, { "id":2, "cmd": "ProcStep2", "cmdexec_success_code": 0, "on_success_action": [1|2|3|4], "on_success_step_id": 0, "on_fail_action": 0, "on_fail_step_id": 0, "retry_attempts": number, "retry_interval": number }, ... ] }

PostgreSQL에서 SQL Server 에이전트 동작을 에뮬레이션하기 위해 AWS SCT 확장 팩은 다음 테이블과 프로시저도 생성합니다.

PostgreSQL에서 SQL Server 에이전트를 에뮬레이션하는 테이블

SQL Server 에이전트를 에뮬레이션하기 위해 확장 팩은 다음 테이블을 사용합니다.

sysjobs

작업에 대한 정보를 저장합니다.

sysjobsteps

작업의 단계에 대한 정보를 저장합니다.

sysschedules

작업 예약에 대한 정보를 저장합니다.

sysjobschedules

개별 작업의 예약 정보를 저장합니다.

sysjobhistory

예약된 작업의 실행 관련 정보를 저장합니다.

PostgreSQL에서 SQL Server 에이전트를 에뮬레이션하는 프로시저

SQL Server 에이전트를 에뮬레이션하기 위해 확장 팩은 다음 프로시저를 사용합니다.

sp_add_job

새 작업을 추가합니다.

sp_add_jobstep

작업에 단계를 추가합니다.

sp_add_schedule

Amazon CloudWatch에 새 예약 규칙을 생성합니다. 여러 작업에서 이 예약 일정을 사용할 수 있습니다.

sp_attach_schedule

선택한 작업의 예약을 설정합니다.

sp_add_jobschedule

Amazon CloudWatch에서 작업에 대한 예약 규칙을 생성하고 이 규칙의 대상을 설정합니다.

sp_update_job

이전에 생성한 작업의 속성을 업데이트합니다.

sp_update_jobstep

작업의 단계 속성을 업데이트합니다.

sp_update_schedule

Amazon CloudWatch에서 예약 규칙의 속성을 업데이트합니다.

sp_update_jobschedule

지정된 작업의 예약 속성을 업데이트합니다.

sp_delete_job

작업을 삭제합니다.

sp_delete_jobstep

작업에서 작업 단계를 삭제합니다.

sp_delete_schedule

일정을 삭제합니다.

sp_delete_jobschedule

Amazon CloudWatch에서 지정된 작업의 예약 규칙을 삭제합니다.

sp_detach_schedule

예약과 작업 간의 연결을 제거합니다.

get_jobs, update_job

AWS Elastic Beanstalk과 상호 작용하는 내부 프로시저입니다.

sp_verify_job_date, sp_verify_job_time, sp_verify_job, sp_verify_jobstep, sp_verify_schedule, sp_verify_job_identifiers, sp_verify_schedule_identifiers

설정을 확인하는 내부 프로시저입니다.

PostgreSQL에서 SQL Server 에이전트를 에뮬레이션하는 프로시저의 구문

확장 팩의 aws_sqlserver_ext.sp_add_job 프로시저는 msdb.dbo.sp_add_job 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_name varchar, par_enabled smallint = 1, par_description varchar = NULL::character varying, par_start_step_id integer = 1, par_category_name varchar = NULL::character varying, par_category_id integer = NULL::integer, par_owner_login_name varchar = NULL::character varying, par_notify_level_eventlog integer = 2, par_notify_level_email integer = 0, par_notify_level_netsend integer = 0, par_notify_level_page integer = 0, par_notify_email_operator_name varchar = NULL::character varying, par_notify_netsend_operator_name varchar = NULL::character varying, par_notify_page_operator_name varchar = NULL::character varying, par_delete_level integer = 0, inout par_job_id integer = NULL::integer, par_originating_server varchar = NULL::character varying, out returncode integer

확장 팩의 aws_sqlserver_ext.sp_add_jobstep 프로시저는 msdb.dbo.sp_add_jobstep 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_step_id integer = NULL::integer, par_step_name varchar = NULL::character varying, par_subsystem varchar = 'TSQL'::bpchar, par_command text = NULL::text, par_additional_parameters text = NULL::text, par_cmdexec_success_code integer = 0, par_on_success_action smallint = 1, par_on_success_step_id integer = 0, par_on_fail_action smallint = 2, par_on_fail_step_id integer = 0, par_server varchar = NULL::character varying, par_database_name varchar = NULL::character varying, par_database_user_name varchar = NULL::character varying, par_retry_attempts integer = 0, par_retry_interval integer = 0, par_os_run_priority integer = 0, par_output_file_name varchar = NULL::character varying, par_flags integer = 0, par_proxy_id integer = NULL::integer, par_proxy_name varchar = NULL::character varying, inout par_step_uid char = NULL::bpchar, out returncode integer

확장 팩의 aws_sqlserver_ext.sp_add_schedule 프로시저는 msdb.dbo.sp_add_schedule 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_schedule_name varchar, par_enabled smallint = 1, par_freq_type integer = 0, par_freq_interval integer = 0, par_freq_subday_type integer = 0, par_freq_subday_interval integer = 0, par_freq_relative_interval integer = 0, par_freq_recurrence_factor integer = 0, par_active_start_date integer = NULL::integer, par_active_end_date integer = 99991231, par_active_start_time integer = 0, par_active_end_time integer = 235959, par_owner_login_name varchar = NULL::character varying, *inout par_schedule_uid char = NULL::bpchar,* inout par_schedule_id integer = NULL::integer, par_originating_server varchar = NULL::character varying, out returncode integer

확장 팩의 aws_sqlserver_ext.sp_attach_schedule 프로시저는 msdb.dbo.sp_attach_schedule 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_schedule_id integer = NULL::integer, par_schedule_name varchar = NULL::character varying, par_automatic_post smallint = 1, out returncode integer

확장 팩의 aws_sqlserver_ext.sp_add_jobschedule 프로시저는 msdb.dbo.sp_add_jobschedule 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_name varchar = NULL::character varying, par_enabled smallint = 1, par_freq_type integer = 1, par_freq_interval integer = 0, par_freq_subday_type integer = 0, par_freq_subday_interval integer = 0, par_freq_relative_interval integer = 0, par_freq_recurrence_factor integer = 0, par_active_start_date integer = NULL::integer, par_active_end_date integer = 99991231, par_active_start_time integer = 0, par_active_end_time integer = 235959, inout par_schedule_id integer = NULL::integer, par_automatic_post smallint = 1, inout par_schedule_uid char = NULL::bpchar, out returncode integer

확장 팩의 aws_sqlserver_ext.sp_delete_job 프로시저는 msdb.dbo.sp_delete_job 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_originating_server varchar = NULL::character varying, par_delete_history smallint = 1, par_delete_unused_schedule smallint = 1, out returncode integer

확장 팩의 aws_sqlserver_ext.sp_delete_jobstep 프로시저는 msdb.dbo.sp_delete_jobstep 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_step_id integer = NULL::integer, out returncode integer

확장 팩의 aws_sqlserver_ext.sp_delete_jobschedule 프로시저는 msdb.dbo.sp_delete_jobschedule 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_name varchar = NULL::character varying, par_keep_schedule integer = 0, par_automatic_post smallint = 1, out returncode integer

확장 팩의 aws_sqlserver_ext.sp_delete_schedule 프로시저는 msdb.dbo.sp_delete_schedule 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_schedule_id integer = NULL::integer, par_schedule_name varchar = NULL::character varying, par_force_delete smallint = 0, par_automatic_post smallint = 1, out returncode integer

확장 팩의 aws_sqlserver_ext.sp_detach_schedule 프로시저는 msdb.dbo.sp_detach_schedule 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_id integer = NULL::integer, par_job_name varchar = NULL::character varying, par_schedule_id integer = NULL::integer, par_schedule_name varchar = NULL::character varying, par_delete_unused_schedule smallint = 0, par_automatic_post smallint = 1, out returncode integer

확장 팩의 aws_sqlserver_ext.sp_update_job 프로시저는 msdb.dbo.sp_update_job 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_id integer = NULL::integer par_job_name varchar = NULL::character varying par_new_name varchar = NULL::character varying par_enabled smallint = NULL::smallint par_description varchar = NULL::character varying par_start_step_id integer = NULL::integer par_category_name varchar = NULL::character varying par_owner_login_name varchar = NULL::character varying par_notify_level_eventlog integer = NULL::integer par_notify_level_email integer = NULL::integer par_notify_level_netsend integer = NULL::integer par_notify_level_page integer = NULL::integer par_notify_email_operator_name varchar = NULL::character varying par_notify_netsend_operator_name varchar = NULL::character varying par_notify_page_operator_name varchar = NULL::character varying par_delete_level integer = NULL::integer par_automatic_post smallint = 1 out returncode integer

확장 팩의 aws_sqlserver_ext.sp_update_jobschedule 프로시저는 msdb.dbo.sp_update_jobschedule 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_id integer = NULL::integer par_job_name varchar = NULL::character varying par_name varchar = NULL::character varying par_new_name varchar = NULL::character varying par_enabled smallint = NULL::smallint par_freq_type integer = NULL::integer par_freq_interval integer = NULL::integer par_freq_subday_type integer = NULL::integer par_freq_subday_interval integer = NULL::integer par_freq_relative_interval integer = NULL::integer par_freq_recurrence_factor integer = NULL::integer par_active_start_date integer = NULL::integer par_active_end_date integer = NULL::integer par_active_start_time integer = NULL::integer par_active_end_time integer = NULL::integer par_automatic_post smallint = 1 out returncode integer

확장 팩의 aws_sqlserver_ext.sp_update_jobstep 프로시저는 msdb.dbo.sp_update_jobstep 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_job_id integer = NULL::integer par_job_name varchar = NULL::character varying par_step_id integer = NULL::integer par_step_name varchar = NULL::character varying par_subsystem varchar = NULL::character varying par_command text = NULL::text par_additional_parameters text = NULL::text par_cmdexec_success_code integer = NULL::integer par_on_success_action smallint = NULL::smallint par_on_success_step_id integer = NULL::integer par_on_fail_action smallint = NULL::smallint par_on_fail_step_id integer = NULL::integer par_server varchar = NULL::character varying par_database_name varchar = NULL::character varying par_database_user_name varchar = NULL::character varying par_retry_attempts integer = NULL::integer par_retry_interval integer = NULL::integer par_os_run_priority integer = NULL::integer par_output_file_name varchar = NULL::character varying par_flags integer = NULL::integer par_proxy_id integer = NULL::integer par_proxy_name varchar = NULL::character varying out returncode integer

확장 팩의 aws_sqlserver_ext.sp_update_schedule 프로시저는 msdb.dbo.sp_update_schedule 프로시저를 에뮬레이션합니다. 소스 SQL Server 에이전트 프로시저에 대한 자세한 내용은 Microsoft 기술 문서를 참조하세요.

par_schedule_id integer = NULL::integer par_name varchar = NULL::character varying par_new_name varchar = NULL::character varying par_enabled smallint = NULL::smallint par_freq_type integer = NULL::integer par_freq_interval integer = NULL::integer par_freq_subday_type integer = NULL::integer par_freq_subday_interval integer = NULL::integer par_freq_relative_interval integer = NULL::integer par_freq_recurrence_factor integer = NULL::integer par_active_start_date integer = NULL::integer par_active_end_date integer = NULL::integer par_active_start_time integer = NULL::integer par_active_end_time integer = NULL::integer par_owner_login_name varchar = NULL::character varying par_automatic_post smallint = 1 out returncode integer

PostgreSQL에서 SQL Server 에이전트를 에뮬레이션하는 프로시저 사용 예제

새 작업을 추가하려면 다음과 같이 aws_sqlserver_ext.sp_add_job 프로시저를 사용합니다.

SELECT * FROM aws_sqlserver_ext.sp_add_job ( par_job_name := 'test_job', par_enabled := 1::smallint, par_start_step_id := 1::integer, par_category_name := '[Uncategorized (Local)]', par_owner_login_name := 'sa');

새 작업 단계를 추가하려면 다음과 같이 aws_sqlserver_ext.sp_add_jobstep 프로시저를 사용합니다.

SELECT * FROM aws_sqlserver_ext.sp_add_jobstep ( par_job_name := 'test_job', par_step_id := 1::smallint, par_step_name := 'test_job_step1', par_subsystem := 'TSQL', par_command := 'EXECUTE [dbo].[PROC_TEST_JOB_STEP1];', par_server := NULL, par_database_name := 'GOLD_TEST_SS');

단순 일정을 추가하려면 다음과 같이 aws_sqlserver_ext.sp_add_schedule 프로시저를 사용합니다.

SELECT * FROM aws_sqlserver_ext.sp_add_schedule( par_schedule_name := 'RunOnce', par_freq_type := 1, par_active_start_time := 233000);

작업 일정을 설정하려면 다음과 같이 aws_sqlserver_ext.sp_attach_schedule 프로시저를 사용합니다.

SELECT * FROM aws_sqlserver_ext.sp_attach_schedule ( par_job_name := 'test_job', par_schedule_name := 'NightlyJobs');

작업에 대한 예약을 생성하려면 다음과 같이 aws_sqlserver_ext.sp_add_jobschedule 프로시저를 사용합니다.

SELECT * FROM aws_sqlserver_ext.sp_add_jobschedule ( par_job_name := 'test_job2', par_name := 'test_schedule2', par_enabled := 1::smallint, par_freq_type := 4, par_freq_interval := 1, par_freq_subday_type := 4, par_freq_subday_interval := 1, par_freq_relative_interval := 0, par_freq_recurrence_factor := 0, par_active_start_date := 20100801, par_active_end_date := 99991231, par_active_start_time := 0, par_active_end_time := 0);

PostgreSQL에서 SQL Server 에이전트를 에뮬레이션하기 위한 사용 사례 예제

소스 데이터베이스 코드에서 SQL Server 에이전트를 사용하여 작업을 실행하는 경우 AWS SCT에 대한 SQL Server-PostgreSQL 확장 팩을 사용하여 이 코드를 PostgreSQL로 변환할 수 있습니다. 확장 팩은 AWS Lambda 함수를 사용하여 SQL Server 에이전트의 동작을 에뮬레이션합니다.

새 AWS Lambda 함수를 생성하거나 기존 함수를 등록할 수 있습니다.

새로운 AWS Lambda 함수를 생성하려면
  1. AWS SCT의 대상 데이터베이스 트리에서 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 열고 Apply extension pack for를 선택한 다음, PostgreSQL을 선택합니다.

    확장 팩 마법사가 표시됩니다.

  2. SQL Server Agent emulation service 탭에서 다음을 수행합니다.

    • AWS Lambda 함수 생성을 선택합니다.

    • Database login에 대상 데이터베이스 사용자의 이름을 입력합니다.

    • 데이터베이스 암호에 이전 단계에서 입력한 사용자 이름의 암호를 입력합니다.

    • Python library folder에 Python 라이브러리 폴더의 경로를 입력합니다.

    • AWS Lambda 함수 생성을 선택하고 다음을 선택합니다.

이전에 배포된 AWS Lambda 함수를 등록하려면
  • 대상 데이터베이스에서 다음 스크립트를 실행합니다.

    SELECT FROM aws_sqlserver_ext.set_service_setting( p_service := 'JOB', p_setting := 'LAMBDA_ARN', p_value := ARN)

    이전 예제에서 ARN은 배포된 AWS Lambda 함수의 Amazon 리소스 이름(ARN)입니다.

다음 예제에서는 한 단계로 구성된 단순 작업을 생성합니다. 이 작업은 5분마다 이전에 생성된 job_example 함수를 실행합니다. 이 함수는 job_example_table 테이블에 레코드를 삽입합니다.

이 단순 작업을 생성하려면
  1. 다음과 같이 aws_sqlserver_ext.sp_add_job 함수를 사용하여 작업을 생성합니다.

    SELECT FROM aws_sqlserver_ext.sp_add_job ( par_job_name := 'test_simple_job');
  2. 다음과 같이 aws_sqlserver_ext.sp_add_jobstep 함수를 사용하여 작업 단계를 생성합니다.

    SELECT FROM aws_sqlserver_ext.sp_add_jobstep ( par_job_name := 'test_simple_job', par_step_name := 'test_simple_job_step1', par_command := 'PERFORM job_simple_example;');

    작업 단계는 함수가 수행하는 작업을 지정합니다.

  3. 다음과 같이 aws_sqlserver_ext.sp_add_jobschedule 함수를 사용하여 작업에 대한 스케줄러를 생성합니다.

    SELECT FROM aws_sqlserver_ext.sp_add_jobschedule ( par_job_name := 'test_simple_job', par_name := 'test_schedule', par_freq_type := 4, /* Daily */ par_freq_interval := 1, /* frequency_interval is unused */ par_freq_subday_type := 4, /* Minutes */ par_freq_subday_interval := 5 /* 5 minutes */);

    작업 단계는 함수가 수행하는 작업을 지정합니다.

이 작업을 삭제하려면 다음과 같이 aws_sqlserver_ext.sp_delete_job 함수를 사용합니다.

PERFORM aws_sqlserver_ext.sp_delete_job( par_job_name := 'PeriodicJob1'::character varying, par_delete_history := 1::smallint, par_delete_unused_schedule := 1::smallint);