T-SQL kullanarak elastik işler oluşturma ve yönetme

Şunlar için geçerlidir:Azure SQL Veritabanı

Bu makalede, T-SQL kullanarak elastik işlerle çalışmaya başlamaya yönelik bir öğretici ve örnekler sağlanır. Elastik işler, bir veya daha fazla Transact-SQL (T-SQL) betiğinin birden fazla veritabanında paralel olarak çalıştırılmasını sağlar.

Bu makaledeki örneklerde iş veritabanında bulunan saklı yordamlar ve görünümler kullanılır.

Bu uçtan uca öğreticide, birden çok veritabanında sorgu çalıştırmak için gereken adımları öğreneceksiniz:

  • Elastik iş aracısı oluşturma
  • İşlerin hedeflerinde betik yürütebilmesi için iş kimlik bilgileri oluşturma
  • İşi çalıştırmak istediğiniz hedefleri (sunucular, elastik havuzlar, veritabanları) tanımlayın
  • Aracının işleri bağlaması ve yürütmesi için hedef veritabanlarında veritabanı kapsamlı kimlik bilgileri oluşturma
  • İş oluşturma
  • Bir işe iş adımları ekleme
  • Bir işin yürütülmesini başlatma
  • Bir işi izleme

Elastik iş aracısı oluşturma

Transact-SQL (T-SQL), işleri oluşturmak, yapılandırmak, yürütmek ve yönetmek için kullanılabilir.

Elastik iş aracısı oluşturma işlemi T-SQL'de desteklenmez, bu nedenle önce Azure portalını kullanarak bir elastik iş aracısı oluşturmanız veya PowerShell kullanarak elastik iş aracısı oluşturmanız gerekir.

İş kimlik doğrulamasını oluşturma

Elastik iş aracısı her hedef sunucuda veya veritabanında kimlik doğrulaması yapabilmelidir. İş aracısı kimlik doğrulaması oluşturma bölümünde açıklandığı gibi, önerilen yaklaşım Microsoft Entra kimlik doğrulamasını (eski adıYla Azure Active Directory) kullanıcı tarafından atanan yönetilen kimlikle (UMI) kullanmaktır. Daha önce tek seçenek veritabanı kapsamlı kimlik bilgileriydi .

İş yürütme için UMI ile Microsoft Entra kimlik doğrulamasını kullanma

Kullanıcı tarafından atanan yönetilen kimlikte (UMI) önerilen Microsoft Entra (eski adıYla Azure Active Directory) kimlik doğrulaması yöntemini kullanmak için aşağıdaki adımları izleyin. Elastik iş aracısı, Microsoft Entra kimlik doğrulaması aracılığıyla istenen hedef mantıksal sunuculara/veritabanlarına bağlanır.

Oturum açma bilgilerine ve veritabanı kullanıcılarına ek olarak, aşağıdaki betikteki komutların eklenmesine GRANT de dikkat edin. Bu izinler, bu örnek işte seçtiğimiz betik için geçerlidir. İşleriniz farklı izinler gerektirebilir. Örnek hedeflenen veritabanlarında yeni bir tablo oluşturduğundan, her hedef veritabanındaki veritabanı kullanıcısının başarıyla çalışması için uygun izinlere sahip olması gerekir.

Hedef sunucuların/veritabanlarının her birinde, UMI ile eşlenmiş bir kapsanan kullanıcı oluşturun.

  • Elastik işin mantıksal sunucusu veya havuz hedefleri varsa, hedef mantıksal sunucunun veritabanında UMI'ye master eşlenen kapsanan kullanıcıyı oluşturmanız gerekir.
  • Örneğin, adlı kullanıcı tarafından atanan yönetilen kimliği (UMI) job-agent-UMItemel alarak veritabanında kapsanan bir veritabanı oturum açma bilgileri master ve kullanıcı veritabanında bir kullanıcı oluşturmak için:
--Create a login on the master database mapped to a user-assigned managed identity (UMI)
CREATE LOGIN [job-agent-UMI] FROM EXTERNAL PROVIDER; 
--Create a user on a user database mapped to a login.
CREATE USER [job-agent-UMI] FROM LOGIN [job-agent-UMI];

-- Grant permissions as necessary to execute your jobs. For example, ALTER and CREATE TABLE:
GRANT ALTER ON SCHEMA::dbo TO jobuser;
GRANT CREATE TABLE TO jobuser;
  • Mantıksal sunucuda oturum açma gerekli değilse, bağımsız veritabanı kullanıcısı oluşturmak için:
--Create a contained database user on a user database mapped to a user-assigned managed identity (UMI)
CREATE USER [job-agent-UMI] FROM EXTERNAL PROVIDER; 

-- Grant permissions as necessary to execute your jobs. For example, ALTER and CREATE TABLE:
GRANT ALTER ON SCHEMA::dbo TO jobuser;
GRANT CREATE TABLE TO jobuser;

İş yürütme için veritabanı kapsamlı bir kimlik bilgisi kullanma

Veritabanı kapsamlı kimlik bilgileri, betik yürütme için hedef veritabanlarınıza bağlanmak için kullanılır. Kimlik bilgilerinin betiği başarıyla yürütmek için hedef grup tarafından belirtilen veritabanlarında uygun izinlere sahip olması gerekir. Mantıksal SQL sunucusu ve/veya havuz hedef grubu üyesi kullanılırken, iş yürütülme sırasında sunucunun ve/veya havuzun genişletilmesinden önce kimlik bilgilerini yenilemek için kullanılacak bir kimlik bilgisi oluşturmanız önerilir. Veritabanı kapsamlı kimlik bilgileri iş aracısı veritabanında oluşturulur.

Tüm hedef veritabanlarında Oturum Açma Veritabanı İzinleri vermek için Oturum Açma Oluşturma ve Oturum Açmadan Kullanıcı Oluşturma için aynı kimlik bilgileri kullanılmalıdır.

--Connect to the new job database specified when creating the elastic job agent

-- Create a database master key if one does not already exist, using your own password.  
CREATE MASTER KEY ENCRYPTION BY PASSWORD='<EnterStrongPasswordHere>';  

-- Create two database-scoped credentials.  
-- The credential to connect to the Azure SQL logical server, to execute jobs
CREATE DATABASE SCOPED CREDENTIAL job_credential WITH IDENTITY = 'job_credential',
    SECRET = '<EnterStrongPasswordHere>';
GO
-- The credential to connect to the Azure SQL logical server, to refresh the database metadata in server
CREATE DATABASE SCOPED CREDENTIAL refresh_credential WITH IDENTITY = 'refresh_credential',
    SECRET = '<EnterStrongPasswordHere>';
GO

Ardından, hedef sunucularda oturum açma bilgileri veya hedef veritabanlarında kapsanan veritabanı kullanıcıları oluşturun.

Önemli

Her hedef sunucu/veritabanındaki oturum açma/kullanıcı, iş kullanıcısı için veritabanı kapsamlı kimlik bilgilerinin kimliğiyle aynı ada ve iş kullanıcısının veritabanı kapsamlı kimlik bilgileriyle aynı parolaya sahip olmalıdır.

Mantıksal SQL sunucusunun veritabanında ve her kullanıcı veritabanındaki kullanıcılarda oturum açma bilgileri master oluşturun.

--Create a login on the master database
CREATE LOGIN job_credential WITH PASSWORD='<Enter_same_StrongPassword_as_database_scoped_credential>';
--Create a user on a user database mapped to a login.
CREATE USER [job_credential] FROM LOGIN [job_credential];

-- Grant permissions as necessary to execute your jobs. For example, ALTER and CREATE TABLE:
GRANT ALTER ON SCHEMA::dbo TO job_credential;
GRANT CREATE TABLE TO job_credential;

Mantıksal sunucuda oturum açma gerekli değilse, bağımsız bir veritabanı kullanıcısı oluşturun. Genellikle bunu yalnızca bu elastik iş aracısı ile yönetecek tek bir veritabanınız varsa yaparsınız.

--Create a contained database user on a user database mapped to a Microsoft Entra account
CREATE USER [job_credential] WITH PASSWORD='<Enter_same_StrongPassword_as_database_scoped_credential>';

-- Grant permissions as necessary to execute your jobs. For example, ALTER and CREATE TABLE:
GRANT ALTER ON SCHEMA::dbo TO job_credential;
GRANT CREATE TABLE TO job_credential;

Hedef sunucuları ve veritabanlarını tanımlama

Aşağıdaki örnekte, bir sunucudaki tüm veritabanlarında bir işin nasıl yürütülecekleri gösterilmektedir.

job_database Bağlan ve hedef grubu ve hedef üyeyi eklemek için aşağıdaki komutu çalıştırın:

-- Connect to the job database specified when creating the job agent

-- Add a target group containing server(s)
EXEC jobs.sp_add_target_group 'ServerGroup1';

-- Add a server target member
EXEC jobs.sp_add_target_group_member
@target_group_name = 'ServerGroup1',
@target_type = 'SqlServer',
@server_name = 'server1.database.windows.net';

--View the recently created target group and target group members
SELECT * FROM jobs.target_groups WHERE target_group_name='ServerGroup1';
SELECT * FROM jobs.target_group_members WHERE target_group_name='ServerGroup1';

Tek bir veritabanını dışlama

Aşağıdaki örnekte, adlı MappingDBveritabanı dışında bir işin bir sunucudaki tüm veritabanlarında nasıl yürütülecekleri gösterilmektedir.

Microsoft Entra kimlik doğrulamasını (eski adıyla Azure Active Directory) kullanırken, yalnızca veritabanı kapsamlı kimlik bilgileri kullanılırken sağlanması gereken parametresini atla @refresh_credential_name . Aşağıdaki örneklerde parametresi açıklama @refresh_credential_name satırı yapılır.

job_database Bağlan ve aşağıdaki komutu çalıştırın:

--Connect to the job database specified when creating the job agent

-- Add a target group containing server(s)
EXEC [jobs].sp_add_target_group N'ServerGroup';
GO

-- Add a server target member
EXEC [jobs].sp_add_target_group_member
@target_group_name = N'ServerGroup',
@target_type = N'SqlServer',
--@refresh_credential_name = N'refresh_credential', --credential required to refresh the databases in a server
@server_name = N'London.database.windows.net';
GO

-- Add a server target member
EXEC [jobs].sp_add_target_group_member
@target_group_name = N'ServerGroup',
@target_type = N'SqlServer',
--@refresh_credential_name = N'refresh_credential', --credential required to refresh the databases in a server
@server_name = 'server2.database.windows.net';
GO

--Exclude a database target member from the server target group
EXEC [jobs].sp_add_target_group_member
@target_group_name = N'ServerGroup',
@membership_type = N'Exclude',
@target_type = N'SqlDatabase',
@server_name = N'server1.database.windows.net',
@database_name = N'MappingDB';
GO

--View the recently created target group and target group members
SELECT * FROM [jobs].target_groups WHERE target_group_name = N'ServerGroup';
SELECT * FROM [jobs].target_group_members WHERE target_group_name = N'ServerGroup';

Hedef grup oluşturma (havuzlar)

Aşağıdaki örnekte, bir veya daha fazla elastik havuzdaki tüm veritabanlarını hedefleme gösterilmektedir.

Microsoft Entra kimlik doğrulamasını (eski adıyla Azure Active Directory) kullanırken, yalnızca veritabanı kapsamlı kimlik bilgileri kullanılırken sağlanması gereken parametresini atla @refresh_credential_name . Aşağıdaki örneklerde parametresi açıklama @refresh_credential_name satırı yapılır.

job_database Bağlan ve aşağıdaki komutu çalıştırın:

--Connect to the job database specified when creating the job agent

-- Add a target group containing pool(s)
EXEC jobs.sp_add_target_group 'PoolGroup';

-- Add an elastic pool(s) target member
EXEC jobs.sp_add_target_group_member
@target_group_name = 'PoolGroup',
@target_type = 'SqlElasticPool',
--@refresh_credential_name = 'refresh_credential', --credential required to refresh the databases in a server
@server_name = 'server1.database.windows.net',
@elastic_pool_name = 'ElasticPool-1';

-- View the recently created target group and target group members
SELECT * FROM jobs.target_groups WHERE target_group_name = N'PoolGroup';
SELECT * FROM jobs.target_group_members WHERE target_group_name = N'PoolGroup';

İş ve adımlar oluşturma

T-SQL ile iş veritabanında sistem saklı yordamlarını kullanarak işler oluşturun: jobs.sp_add_job ve jobs.sp_add_jobstep. T-SQL komutları söz dizimi, SQL Server'da SQL Aracısı işleri ve iş adımları oluşturmak için gereken adımlara benzer.

İş veritabanında iç katalog görünümlerini güncelleştirmemelisiniz. Bu katalog görünümlerini el ile değiştirmek iş veritabanını bozabilir ve hataya neden olabilir. Bu görünümler yalnızca salt okunur sorgulama içindir. İş veritabanınızdaki şemada jobs saklı yordamları kullanabilirsiniz.

  • Hedef sunucularda/veritabanlarında kimlik doğrulaması yapmak üzere Bir Microsoft Entra Kimliği veya kullanıcı tarafından atanan yönetilen kimlik için Microsoft Entra kimlik doğrulaması kullanılırken, veya için sp_add_jobstepsp_update_jobstep@credential_name bağımsız değişkeni sağlanmamış olmalıdır. Benzer şekilde, isteğe bağlı @output_credential_name ve @refresh_credential_name bağımsız değişkenlerini atlar.
  • Hedef sunucularda/veritabanlarında kimlik doğrulaması yapmak için veritabanı kapsamlı kimlik bilgileri kullanılırken ve sp_update_jobstepiçin sp_add_jobstep @credential_name parametresi gerekir.
    • Örneğin, @credential_name = 'job_credential'.

Aşağıdaki örnekler, elastik işlerle ortak görevleri gerçekleştirmek için T-SQL kullanarak iş ve iş adımları oluşturmaya yönelik kılavuzlar sağlar.

Örnekler

Birçok veritabanına yeni şema dağıtma

Aşağıdaki örnekte yeni şemanın tüm veritabanlarına nasıl dağıtılacağı gösterilmektedir.

job_database Bağlan ve aşağıdaki komutu çalıştırın:

--Connect to the job database specified when creating the job agent

--Add job for create table
EXEC jobs.sp_add_job @job_name = 'CreateTableTest', @description = 'Create Table Test';

-- Add job step for create table
EXEC jobs.sp_add_jobstep @job_name = 'CreateTableTest',
@command = N'IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = object_id(''Test''))
CREATE TABLE [dbo].[Test]([TestId] [int] NOT NULL);',
@target_group_name = 'PoolGroup';

Yerleşik parametreleri kullanarak veri toplama

Birçok veri toplama senaryosunda, işin sonuçlarının işlenmesine yardımcı olmak için bu betik değişkenlerinden bazılarını eklemek yararlı olabilir.

  • $(job_name)
  • $(job_id)
  • $(job_version)
  • $(step_id)
  • $(step_name)
  • $(job_execution_id)
  • $(job_execution_create_time)
  • $(target_group_name)

Örneğin, aynı iş yürütmesinden elde edilen tüm sonuçları birlikte gruplandırmak için aşağıdaki komutta gösterildiği gibi kullanın $(job_execution_id) :

@command= N' SELECT DB_NAME() DatabaseName, $(job_execution_id) AS job_execution_id, * FROM sys.dm_db_resource_stats WHERE end_time > DATEADD(mi, -20, GETDATE());'

Not

Elastik işlerdeki tüm zamanlar UTC saat dilimindedir.

Veritabanı performansını izleme

Aşağıdaki örnek, birden çok veritabanından performans verilerini toplamak için yeni bir iş oluşturur.

Varsayılan olarak, iş aracısı döndürülen sonuçları depolamak için çıkış tablosunu oluşturur. Bu nedenle, çıktı kimlik bilgileriyle ilişkili veritabanı sorumlusunun en azından şu izinlere sahip olması gerekir: CREATE TABLE veritabanında, , ALTERSELECT, , INSERT, DELETE çıkış tablosunda veya şemasında ve SELECT sys.indexes katalog görünümünde.

Tabloyu önceden el ile oluşturmak istiyorsanız aşağıdaki özelliklere sahip olması gerekir:

  1. Sonuç kümesi için doğru ada ve veri türlerine sahip sütunlar.
  2. benzersizleştiricinin veri türüne sahip için ek sütun internal_execution_id .
  3. Sütunda internal_execution_id adlı IX_<TableName>_Internal_Execution_ID bir kümelenmemiş dizin.
  4. Veritabanındaki izinler dışında CREATE TABLE daha önce listelenen tüm izinler.

İş veritabanına Bağlan ve aşağıdaki komutları çalıştırın:

--Connect to the job database specified when creating the job agent

-- Add a job to collect perf results
EXEC jobs.sp_add_job @job_name ='ResultsJob', @description='Collection Performance data from all customers'

-- Add a job step w/ schedule to collect results
EXEC jobs.sp_add_jobstep
@job_name = 'ResultsJob',
@command = N' SELECT DB_NAME() DatabaseName, $(job_execution_id) AS job_execution_id, * FROM sys.dm_db_resource_stats WHERE end_time > DATEADD(mi, -20, GETDATE());',
@target_group_name = 'PoolGroup',
@output_type = 'SqlDatabase',
@output_server_name = 'server1.database.windows.net',
@output_database_name = '<resultsdb>',
@output_table_name = '<output_table_name>';

--Create a job to monitor pool performance

--Connect to the job database specified when creating the job agent

-- Add a target group containing elastic job database
EXEC jobs.sp_add_target_group 'ElasticJobGroup';

-- Add a server target member
EXEC jobs.sp_add_target_group_member
@target_group_name = 'ElasticJobGroup',
@target_type = 'SqlDatabase',
@server_name = 'server1.database.windows.net',
@database_name = 'master';

-- Add a job to collect perf results
EXEC jobs.sp_add_job
@job_name = 'ResultsPoolsJob',
@description = 'Demo: Collection Performance data from all pools',
@schedule_interval_type = 'Minutes',
@schedule_interval_count = 15;

-- Add a job step w/ schedule to collect results
EXEC jobs.sp_add_jobstep
@job_name='ResultsPoolsJob',
@command=N'declare @now datetime
DECLARE @startTime datetime
DECLARE @endTime datetime
DECLARE @poolLagMinutes datetime
DECLARE @poolStartTime datetime
DECLARE @poolEndTime datetime
SELECT @now = getutcdate ()
SELECT @startTime = dateadd(minute, -15, @now)
SELECT @endTime = @now
SELECT @poolStartTime = dateadd(minute, -30, @startTime)
SELECT @poolEndTime = dateadd(minute, -30, @endTime)

SELECT elastic_pool_name , end_time, elastic_pool_dtu_limit, avg_cpu_percent, avg_data_io_percent, avg_log_write_percent, max_worker_percent, max_session_percent,
        avg_storage_percent, elastic_pool_storage_limit_mb FROM sys.elastic_pool_resource_stats
        WHERE end_time > @poolStartTime and end_time <= @poolEndTime;
',
@target_group_name = 'ElasticJobGroup',
@output_type = 'SqlDatabase',
@output_server_name = 'server1.database.windows.net',
@output_database_name = 'resultsdb',
@output_table_name = '<output_table_name>';

İşi çalıştırma

Aşağıdaki örnekte, bir işin el ile ve planlanmamış eylem olarak hemen nasıl başlatılmaya başlandığı gösterilmektedir.

job_database Bağlan ve aşağıdaki komutu çalıştırın:

--Connect to the job database specified when creating the job agent

-- Execute the latest version of a job
EXEC jobs.sp_start_job 'CreateTableTest';

-- Execute the latest version of a job and receive the execution ID
declare @je uniqueidentifier;
exec jobs.sp_start_job 'CreateTableTest', @job_execution_id = @je output;
select @je;

-- Monitor progress
SELECT * FROM jobs.job_executions WHERE job_execution_id = @je;

İşin yürütülmesini zamanlama

Aşağıdaki örnekte, gelecekteki yürütme için her 15 dakikada bir yinelenen olarak bir işin nasıl zamanlandığı gösterilmektedir.

job_database Bağlan ve aşağıdaki komutu çalıştırın:

--Connect to the job database specified when creating the job agent

EXEC jobs.sp_update_job
@job_name = 'ResultsJob',
@enabled=1,
@schedule_interval_type = 'Minutes',
@schedule_interval_count = 15;

İş tanımlarını görüntüleme

Aşağıdaki örnekte geçerli iş tanımlarının nasıl görüntüleyebileceğiniz gösterilmektedir.

job_database Bağlan ve aşağıdaki komutu çalıştırın:

--Connect to the job database specified when creating the job agent

-- View all jobs
SELECT * FROM jobs.jobs;

-- View the steps of the current version of all jobs
SELECT js.* FROM jobs.jobsteps js
JOIN jobs.jobs j
  ON j.job_id = js.job_id AND j.job_version = js.job_version;

-- View the steps of all versions of all jobs
SELECT * FROM jobs.jobsteps;

İş yürütme durumunu izleme

Aşağıdaki örnekte tüm işler için yürütme durumu ayrıntılarının nasıl görüntüleyebileceğiniz gösterilmektedir.

job_database Bağlan ve aşağıdaki komutu çalıştırın:

--Connect to the job database specified when creating the job agent

--View top-level execution status for the job named 'ResultsPoolJob'
SELECT * FROM jobs.job_executions
WHERE job_name = 'ResultsPoolsJob' and step_id IS NULL
ORDER BY start_time DESC;

--View all top-level execution status for all jobs
SELECT * FROM jobs.job_executions WHERE step_id IS NULL
ORDER BY start_time DESC;

--View all execution statuses for job named 'ResultsPoolsJob'
SELECT * FROM jobs.job_executions
WHERE job_name = 'ResultsPoolsJob'
ORDER BY start_time DESC;

-- View all active executions
SELECT * FROM jobs.job_executions
WHERE is_active = 1
ORDER BY start_time DESC;

Bir işi iptal etme

Aşağıdaki örnekte, bir iş yürütme kimliğinin nasıl alınıp bir iş yürütme işleminin nasıl iptal edileceği gösterilmektedir.

job_database Bağlan ve aşağıdaki komutu çalıştırın:

--Connect to the job database specified when creating the job agent

-- View all active executions to determine job execution ID
SELECT * FROM jobs.job_executions
WHERE is_active = 1 AND job_name = 'ResultPoolsJob'
ORDER BY start_time DESC;
GO

-- Cancel job execution with the specified job execution ID
EXEC jobs.sp_stop_job '01234567-89ab-cdef-0123-456789abcdef';

Eski iş geçmişini silme

Aşağıdaki örnekte, belirli bir tarihten önce iş geçmişinin nasıl silineceği gösterilmektedir.

job_database Bağlan ve aşağıdaki komutu çalıştırın:

--Connect to the job database specified when creating the job agent

-- Delete history of a specific job's executions older than the specified date
EXEC jobs.sp_purge_jobhistory @job_name='ResultPoolsJob', @oldest_date='2016-07-01 00:00:00';

--Note: job history is automatically deleted if it is >45 days old

Bir işi ve tüm iş geçmişini silme

Aşağıdaki örnekte bir işin ve tüm ilgili iş geçmişinin nasıl silineceği gösterilmektedir.

job_database Bağlan ve aşağıdaki komutu çalıştırın:

--Connect to the job database specified when creating the job agent

EXEC jobs.sp_delete_job @job_name='ResultsPoolsJob';
EXEC jobs.sp_purge_jobhistory @job_name='ResultsPoolsJob';

--Note: job history is automatically deleted if it is >45 days old

İş saklı yordamları

Aşağıdaki saklı yordamlar işler veritabanındadır. Benzer şekilde adlandırılırlar ancak SQL Server Agent hizmeti için kullanılan sistem saklı yordamlarından ayrı olarak farklıdırlar.

Saklı yordam Açıklama
sp_add_job Yeni bir iş ekler.
Sp_update_job Var olan bir işi Güncelleştirmeler.
Sp_delete_job Var olan bir işi siler.
Sp_add_jobstep İşe adım ekler.
sp_update_jobstep bir iş adımı Güncelleştirmeler.
sp_delete_jobstep İş adımlarını siler.
Sp_start_job bir işi yürütmeye başlar.
sp_stop_job bir iş yürütmeyi durdurur.
sp_add_target_group Bir hedef grup ekler.
sp_delete_target_group Hedef grubu siler.
sp_add_target_group_member Hedef gruba veritabanı veya veritabanı grubu ekler.
sp_delete_target_group_member Hedef grup üyesini hedef gruptan kaldırır.
Sp_purge_jobhistory bir işin geçmiş kayıtlarını kaldırır.

İş görünümleri

İşler veritabanında aşağıdaki görünümler kullanılabilir.

Göster Açıklama
job_executions İş yürütme geçmişini gösterir.
Işleri Tüm işleri gösterir.
job_versions Tüm iş sürümlerini gösterir.
Jobsteps Her işin geçerli sürümündeki tüm adımları gösterir.
jobstep_versions Her işin tüm sürümlerindeki tüm adımları gösterir.
target_groups Tüm hedef grupları gösterir.
target_group_members Tüm hedef grupların tüm üyelerini gösterir.

Sonraki adım