{"id":7649,"date":"2019-07-04T08:22:58","date_gmt":"2019-07-04T07:22:58","guid":{"rendered":"https:\/\/blog.capdata.fr\/?p=7649"},"modified":"2019-09-13T10:36:37","modified_gmt":"2019-09-13T09:36:37","slug":"elastic-job-agent-lagent-sql-server-pour-le-paas-azure","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/","title":{"rendered":"Elastic Job Agent : l&#8217;Agent SQL Server pour le PaaS Azure"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7649&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7649&#038;title=Elastic%20Job%20Agent%20%3A%20l%E2%80%99Agent%20SQL%20Server%20pour%20le%20PaaS%20Azure\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Elastic%20Job%20Agent%20%3A%20l%E2%80%99Agent%20SQL%20Server%20pour%20le%20PaaS%20Azure&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7649\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p>&nbsp;<\/p>\n<p>Officiellement, il n&#8217;existe pas d&#8217;agent SQL Server dans l&#8217;offre PaaS Azure : SQL Database. Microsoft proposait donc des solutions de contournement depuis des ann\u00e9es : utiliser l&#8217;agent d&#8217;une instance en IaaS ou OnPremise, Automation etc&#8230; Mais il n&#8217;y avait pas vraiment de solution propres et simple.<\/p>\n<p>C&#8217;est d\u00e9sormais en cours de r\u00e9solution gr\u00e2ce \u00e0 un service, encore en phase de Preview : <em><strong>Elastic Job Agent<\/strong><\/em>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7662 size-medium\" title=\"Elastic\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/07\/elastic-300x169.jpg\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/07\/elastic-300x169.jpg 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/07\/elastic-768x432.jpg 768w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/07\/elastic-1024x576.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Ce service est d\u00e9di\u00e9 \u00e0 l&#8217;ex\u00e9cution de t\u00e2ches SQL Database. Son ajout se fait simplement par le portail et doit \u00eatre associ\u00e9 \u00e0 une base de donn\u00e9es SQL Database qui servira \u00e0 contenir un ensemble d&#8217;objets (tables, proc\u00e9dures stock\u00e9es etc&#8230;) servant \u00e0 piloter la solution. Celle-ci peut-\u00eatre la m\u00eame que votre base m\u00e9tier. Cette base doit \u00eatre au minimum une S0. Il n&#8217;y a pas de configuration particuli\u00e8re \u00e0 r\u00e9aliser, le portail affichera des informations mais aucune administration des jobs n&#8217;est r\u00e9alisable jusqu&#8217;\u00e0 pr\u00e9sent. Peut-\u00eatre qu&#8217;\u00e0 l&#8217;avenir, plus d&#8217;options seront possibles.<\/p>\n<p>A partir de maintenant, toutes les actions \u00e0 r\u00e9aliser sont c\u00f4t\u00e9 base de donn\u00e9es, en T-SQL. Les \u00e9tapes sont les suivantes :<\/p>\n<ul>\n<li>Ajouter une Master Key sur la base de donn\u00e9es pilotant les jobs<\/li>\n<li>Cr\u00e9er un compte de connexion capable d&#8217;\u00e9num\u00e9rer les bases sur le serveur et le credential associ\u00e9<\/li>\n<li>Cr\u00e9er un compte de connexion d\u00e9di\u00e9 au job que l&#8217;on souhaite r\u00e9aliser et le credential associ\u00e9<\/li>\n<li>Cr\u00e9er un &#8220;Target Group&#8221; et y int\u00e9grer le serveur SQL qui nous int\u00e9resse<\/li>\n<li>Cr\u00e9er un job SQL<\/li>\n<\/ul>\n<h2>Ajout de la Master Key :<\/h2>\n<p>Pour assurer des communications s\u00e9curis\u00e9s avec les credentials, la base de donn\u00e9es qui pilote l&#8217;Elastic Job Agent doit avoir une master key. Celle-ci se cr\u00e9\u00e9 tr\u00e8s simplement :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\r\nif not exists(select 1 from sys.symmetric_keys)\r\nbegin\r\nCREATE MASTER KEY ENCRYPTION BY PASSWORD = N'MonGrosMotDePasse!2019';\r\nend\r\n\r\n<\/pre>\n<p>Ici, le mot de passe est d\u00e9di\u00e9 \u00e0 prot\u00e9ger la master key et \u00e0 pouvoir l&#8217;exporter si besoin.<\/p>\n<h2>Cr\u00e9ation des comptes sur la base cible :<\/h2>\n<p>Il est n\u00e9cessaire de disposer de deux comptes au moins, sur la base de donn\u00e9es SQL Database que vous souhaitez cibler. Ou plus pr\u00e9cis\u00e9ment : un sur la base Master du serveur de votre base PaaS, et l&#8217;autre sur votre base utilisateur.<\/p>\n<p>On commence donc par la base de donn\u00e9es Master :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\r\nCREATE LOGIN MyMasterUser with PASSWORD = 'MonGrosMotDePasseMaster2019!' ;\r\nCREATE USER MyMasterUser FOR LOGIN MyMasterUser ;\r\n\r\n<\/pre>\n<p>Puis on enchaine en se pla\u00e7ant dans la base utilisateur, en y :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\r\nCREATE LOGIN MyJobUser with PASSWORD = 'MonGrosMotDePasseUser2019?' ;\r\nCREATE USER MyJobUser for LOGIN MyJobUser with DEFAULT_SCHEMA = dbo;\r\n\r\n<\/pre>\n<p>En y ajoutant les privil\u00e8ges n\u00e9cessaires \u00e0 ce que l&#8217;on souhaite r\u00e9aliser, bien s\u00fbr :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\r\nGRANT VIEW DATABASE STATE TO MyJobUser;\r\nGO\r\nALTER ROLE db_ddladmin ADD MEMBER MyJobUser ;\r\nGO\r\nGRANT VIEW DATABASE STATE TO MyJobUser ;\r\nGO\r\n\r\nGRANT EXECUTE ON IndexOptimize TO MyJobUser ;\r\nGO\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>D\u00e9sormais, il faut que l&#8217;Agent soit capable d&#8217;ex\u00e9cuter du code sur la base utilisateur. Pour permettre cette comunication &#8220;externe&#8221;, on va utiliser des <em>CREDENTIALS .<\/em> On va donc les cr\u00e9er sur la base de donn\u00e9es qui pilote l&#8217;Agent. Le sch\u00e9ma utilis\u00e9 sur la page de documentation Microsoft est plus clair qu&#8217;un long discours :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-7654\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/07\/job-credentials.png\" alt=\"\" width=\"539\" height=\"305\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/07\/job-credentials.png 539w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/07\/job-credentials-300x170.png 300w\" sizes=\"auto, (max-width: 539px) 100vw, 539px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>On va donc cr\u00e9er nos deux credentials :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\r\nCREATE DATABASE SCOPED CREDENTIAL MyMasterCredential\r\nWITH IDENTITY = 'MyMasterUser', SECRET = N'MonGrosMotDePasseMaster2019!' ;\r\ngo\r\nCREATE DATABASE SCOPED CREDENTIAL MyJobCredential\r\nWITH IDENTITY = 'MyJobUser', SECRET = N'MonGrosMotDePasseUser2019?' ;\r\ngo\r\n\r\n<\/pre>\n<p>On notera donc que le credential pointe vers le login \/ mot de passe du compte cr\u00e9\u00e9 sur la base m\u00e9tier.<\/p>\n<p>&nbsp;<\/p>\n<h2>Cr\u00e9ation d&#8217;un Target Group et int\u00e9gration de la base \u00e0 celui-ci :<\/h2>\n<p>L&#8217;Elastic Job Agent \u00e9tant un composant mutualisable entre plusieurs serveurs \/ bases de donn\u00e9es PaaS, il y a une notion d&#8217;affectation des jobs. On cr\u00e9\u00e9 un objet qui s&#8217;appelle le Target Group, auquel on donnera un nom fonctionnel (ici par exemple &#8220;Index and Statistics Maintenance Target Group&#8221;), puis on y ajoutera les serveurs que l&#8217;on veut concerner. Par d\u00e9faut, toutes les bases associ\u00e9es \u00e0 un serveur seront trait\u00e9es, il faut exclure celles-ci qui ne nous int\u00e9ressent pas.<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\r\nEXEC jobs.sp_add_target_group \r\n   @target_group_name = 'Index and Statistics Maintenance Target Group';\r\n\r\nEXEC jobs.sp_add_target_group_member \r\n   @target_group_name = 'Index and Statistics Maintenance Target Group',\r\n   @membership_type = 'Include' ,\r\n   @target_type = 'SqlServer',\r\n   @refresh_credential_name = 'MyMasterCredential',\r\n   @server_name = 'vdesql.database.windows.net' ;\r\n\r\n<\/pre>\n<p>On notera que &#8220;target_type&#8221; peut prendre comme param\u00e8tre &#8220;sqldatabase&#8221;, mais dans la documentation, \u00e0 l&#8217;heure o\u00f9 j&#8217;\u00e9cris cest lignes, il faut mettre &#8220;SqlServer&#8221;&#8230;\u00a0 Allez comprendre&#8230; On peut par contre mettre &#8220;sqlElasticPool&#8221; si on travaille avec un mod\u00e8le Elastic Pool.<\/p>\n<p>On notera \u00e9galement qu&#8217;il est possible d&#8217;exclure une base avec :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\r\nEXEC [jobs].sp_add_target_group_member\r\n   @target_group_name = N'Index and Statistics Maintenance Target Group',\r\n   @membership_type = N'Exclude',\r\n   @target_type = N'SqlDatabase',\r\n   @server_name = N'vdesql.database.windows.net',\r\n   @database_name =N'MaBaseAExclure'\r\nGO\r\n\r\n<\/pre>\n<h2>Cr\u00e9ation du job :<\/h2>\n<p>Dans mon exemple je planifie l&#8217;ex\u00e9cution d&#8217;une t\u00e2che de maintenance issue de la solution d&#8217;Ola Hallengren :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nEXEC jobs.sp_add_job @job_name = N'Index Maintenance Job',\r\n@description = 'Reindex et calcul de stat quotidien',\r\n@enabled = 1,\r\n@schedule_interval_type = N'Days',\r\n@schedule_interval_count = 1,\r\n@schedule_start_time = N'20190703 23:00:00' ;\r\n;\r\n\r\nDECLARE @Command NVARCHAR(MAX) = N'EXECUTE dbo.IndexOptimize\r\n@Databases = ''USER_DATABASES'',\r\n@FragmentationLow = NULL,\r\n@FragmentationMedium = ''INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE'',\r\n@FragmentationHigh = ''INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE'',\r\n@FragmentationLevel1 = 5,\r\n@FragmentationLevel2 = 30,\r\n@UpdateStatistics = ''ALL''' ;\r\n\r\nEXEC jobs.sp_add_jobstep @job_name = N'Index Maintenance Job',\r\n@step_name = N'Index and stat maintenance',\r\n@command = @Command,\r\n@credential_name = 'MyJobCredential',\r\n@target_group_name = 'My Index maintenance Target Group',\r\n@max_parallelism = 4\r\n;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>On notera que curieusement, il\u00a0 a \u00e9t\u00e9 int\u00e9gr\u00e9, comme param\u00e8tre de l&#8217;ex\u00e9cution d&#8217;un job, son degr\u00e9 de parall\u00e9lisme maximum.<\/p>\n<p>&nbsp;<\/p>\n<p>On peut lancer le job sans attendre sa planification par :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\r\nEXEC jobs.sp_start_job @job_name = N'Index Maintenance Job'\r\n\r\n<\/pre>\n<p>Diff\u00e9rentes tables sont disponibles dans le sch\u00e9ma &#8220;jobs&#8221; de la base qui h\u00e9berge l&#8217;agent, on peut par exemple regarder le statut de notre t\u00e2che et \u00e9ventuellement la d\u00e9bugger gr\u00e2ce \u00e0 la colonne &#8220;last_message&#8221; :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n\r\nselect * from jobs.job_executions order by current_attempt_start_time desc\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>On notera globalement que tout \u00e7a manque un peu de raffinement et de simplification avec un outillage graphique \u00e9quivalent \u00e0 ce que l&#8217;on trouve historiquement dans SQL Server, mais l&#8217;orientation DevOps du Cloud rend de toute fa\u00e7on l&#8217;approche initiale appropri\u00e9e.<\/p>\n<p>La documentation n&#8217;est pas toujours tr\u00e8s claire, voir buggu\u00e9e, mais elle a le m\u00e9rite d&#8217;exister : <a href=\"https:\/\/docs.microsoft.com\/fr-fr\/azure\/sql-database\/elastic-jobs-tsql\">https:\/\/docs.microsoft.com\/fr-fr\/azure\/sql-database\/elastic-jobs-tsql<\/a><\/p>\n<p>&nbsp;<\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7649&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7649&#038;title=Elastic%20Job%20Agent%20%3A%20l%E2%80%99Agent%20SQL%20Server%20pour%20le%20PaaS%20Azure\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Elastic%20Job%20Agent%20%3A%20l%E2%80%99Agent%20SQL%20Server%20pour%20le%20PaaS%20Azure&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7649\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>&nbsp; Officiellement, il n&#8217;existe pas d&#8217;agent SQL Server dans l&#8217;offre PaaS Azure : SQL Database. Microsoft proposait donc des solutions de contournement depuis des ann\u00e9es : utiliser l&#8217;agent d&#8217;une instance en IaaS ou OnPremise, Automation etc&#8230; Mais il n&#8217;y avait&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":7662,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[282,5],"tags":[326,327],"class_list":["post-7649","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure","category-sqlserver","tag-elastic-job-agent","tag-sql-server-agent"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Elastic Job Agent : l&#039;Agent SQL Server pour le PaaS Azure - Capdata TECH BLOG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Elastic Job Agent : l&#039;Agent SQL Server pour le PaaS Azure - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"&nbsp; Officiellement, il n&#8217;existe pas d&#8217;agent SQL Server dans l&#8217;offre PaaS Azure : SQL Database. Microsoft proposait donc des solutions de contournement depuis des ann\u00e9es : utiliser l&#8217;agent d&#8217;une instance en IaaS ou OnPremise, Automation etc&#8230; Mais il n&#8217;y avait&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-04T07:22:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-09-13T09:36:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/07\/elastic.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2496\" \/>\n\t<meta property=\"og:image:height\" content=\"1404\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Capdata team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Capdata team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/\"},\"author\":{\"name\":\"Capdata team\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/bfd9395c8ba4fa125792a543377035e9\"},\"headline\":\"Elastic Job Agent : l&#8217;Agent SQL Server pour le PaaS Azure\",\"datePublished\":\"2019-07-04T07:22:58+00:00\",\"dateModified\":\"2019-09-13T09:36:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/\"},\"wordCount\":1131,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"Elastic Job Agent\",\"SQL Server Agent\"],\"articleSection\":[\"Azure\",\"SQL Server\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/\",\"name\":\"Elastic Job Agent : l'Agent SQL Server pour le PaaS Azure - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2019-07-04T07:22:58+00:00\",\"dateModified\":\"2019-09-13T09:36:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Elastic Job Agent : l&#8217;Agent SQL Server pour le PaaS Azure\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/bfd9395c8ba4fa125792a543377035e9\",\"name\":\"Capdata team\",\"sameAs\":[\"https:\/\/www.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Elastic Job Agent : l'Agent SQL Server pour le PaaS Azure - Capdata TECH BLOG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/","og_locale":"fr_FR","og_type":"article","og_title":"Elastic Job Agent : l'Agent SQL Server pour le PaaS Azure - Capdata TECH BLOG","og_description":"&nbsp; Officiellement, il n&#8217;existe pas d&#8217;agent SQL Server dans l&#8217;offre PaaS Azure : SQL Database. Microsoft proposait donc des solutions de contournement depuis des ann\u00e9es : utiliser l&#8217;agent d&#8217;une instance en IaaS ou OnPremise, Automation etc&#8230; Mais il n&#8217;y avait&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2019-07-04T07:22:58+00:00","article_modified_time":"2019-09-13T09:36:37+00:00","og_image":[{"width":2496,"height":1404,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/07\/elastic.jpg","type":"image\/jpeg"}],"author":"Capdata team","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Capdata team","Dur\u00e9e de lecture estim\u00e9e":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/"},"author":{"name":"Capdata team","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/bfd9395c8ba4fa125792a543377035e9"},"headline":"Elastic Job Agent : l&#8217;Agent SQL Server pour le PaaS Azure","datePublished":"2019-07-04T07:22:58+00:00","dateModified":"2019-09-13T09:36:37+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/"},"wordCount":1131,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["Elastic Job Agent","SQL Server Agent"],"articleSection":["Azure","SQL Server"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/","url":"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/","name":"Elastic Job Agent : l'Agent SQL Server pour le PaaS Azure - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2019-07-04T07:22:58+00:00","dateModified":"2019-09-13T09:36:37+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/elastic-job-agent-lagent-sql-server-pour-le-paas-azure\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Elastic Job Agent : l&#8217;Agent SQL Server pour le PaaS Azure"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/bfd9395c8ba4fa125792a543377035e9","name":"Capdata team","sameAs":["https:\/\/www.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/7649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=7649"}],"version-history":[{"count":14,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/7649\/revisions"}],"predecessor-version":[{"id":7666,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/7649\/revisions\/7666"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/7662"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=7649"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=7649"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=7649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}