AWS RDS 환경에서 SQL Server Agent 를 사용하는데 다소 제약사항이 있습니다.
보통은 SQL Server Agent 에 백업을 위해 유지관리기간이나 백업 기간 예약작업을 설정하는데요. AWS RDS 에서는 알아서 DB 인스턴스를 백업해 주기 때문에 해당 기능을 굳이 사용할 필요가 없어졌습니다.
그리고 activex , windows cmdshell, windows powershell 을 이용하여 복제작업이나 명령스크립트 부분을 지원하지 않는다고 합니다. 그리고 SQL Server Agent 에서 강제 수동으로 시작이나 종료를 할 수 있는데 이 부분도 할 수 없고 job 설정한 일정에 맞게만 작동하도록 auto 환경을 제공한답니다.
그리고 이메일 알림 메시지도 사용이 안된다고 하네요. 대부분 고급기능들이 많이 지원되지 않는 부분이 아쉽네요.
이제 본론으로 넘어가서. SQL Server Agent 을 사용하기 위한 사용자 생성 및 역할을 지정해 보도록 하죠.
AWS RDS 에서 기본적으로 SQL Server 에이전트가 비활성화 되어 있는데, 이를 사용하기 위해서는 master 테이블에 로그인 사용자 계정을 생성하고, msdb 에서 사용자 계정을 로그인 계정에 매칭을 한 다음, 최종 마지막으로 SQLAgentUserRole 그룹에 할당해야 합니다.
--Initially set context to master database
USE [master];
GO
--Create a server-level login named theirname with password theirpassword
CREATE LOGIN [dbid_sqlAgentUser] WITH PASSWORD = 'pass!@#$';
GO
--Set context to msdb database
USE [msdb];
GO
--Create a database user named theirname and link it to server-level login theirname
CREATE USER [dbid_sqlAgentUser] FOR LOGIN [dbid_sqlAgentUser];
GO
--Added database user theirname in msdb to SQLAgentUserRole in msdb
EXEC sp_addrolemember [SQLAgentUserRole], [dbid_sqlAgentUser];
만약에 sql server agent 에서 job 을 하나 만들고 나서, 이를 삭제할때는 툴 자체에서 삭제를 할 경우 오류가 발생합니다.
이를 삭제하기 위해서는 msdb 데이터베이스에서 sp_delete_job 실행 구문을 작성하여 실행해야 제거됩니다.
EXEC msdb..sp_delete_job @job_name = 'jobname';