트랜잭션 게시에 대해 업데이트할 수 있는 구독 만들기Create Updatable Subscription to Transactional Publication

이 항목 적용 대상: 예SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

참고

이 기능은 SQL ServerSQL Server 2012부터 2016 버전에서 계속 지원됩니다.This feature remains supported in versions of SQL ServerSQL Server from 2012 through 2016. Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다.This feature will be removed in a future version of Microsoft SQL Server. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하세요.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

트랜잭션 복제에서는 즉시 업데이트 구독 또는 지연 업데이트 구독을 사용하여 구독자에서 변경된 내용을 게시자에 다시 전파할 수 있습니다.Transactional replication enables changes made at a Subscriber to be propagated back to the Publisher using either immediate or queued updating subscriptions. 복제 저장 프로시저를 사용하여 프로그래밍 방식으로 업데이트 구독을 만들 수 있습니다.You can create an updating subscription programmatically using replication stored procedures. 트랜잭션 게시에 업데이트할 수 있는 구독 만들기(Management Studio)도 참조하세요.(Also, see Create an Updatable Subscription to a Transactional Publication (Management Studio).)

즉시 업데이트 끌어오기 구독을 만들려면To create an immediate updating pull subscription

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 즉시 업데이트 구독을 지원하는지 확인합니다.At the Publisher, verify that the publication supports immediate updating subscriptions by executing sp_helppublication.

    • 결과 집합의 allow_sync_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.If the value of allow_sync_tran in the result set is 1, the publication supports immediate updating subscriptions.

    • 결과 집합의 allow_sync_tran 값이 0이면 즉시 업데이트 구독을 설정하여 게시를 다시 만들어야 합니다.If the value of allow_sync_tran in the result set is 0, the publication must be recreated with immediate updating subscriptions enabled.

  2. 게시자에서 sp_helppublication을 실행하여 게시에서 끌어오기 구독을 지원하는지 확인합니다.At the Publisher, verify that the publication supports pull subscriptions by executing sp_helppublication.

    • 결과 집합의 allow_pull 값이 1이면 게시에서 끌어오기 구독을 지원합니다.If the value of allow_pull in the result set is 1, the publication supports pull subscriptions.

    • allow_pull 값이 0이면 sp_changepublication을 실행하여 allow_pull 에 대해 @property 을, true 에 대해 @value를 지정합니다.If the value of allow_pull is 0, execute sp_changepublication, specifying allow_pull for @property and true for @value.

  3. 구독자에서 sp_addpullsubscription을 실행합니다.At the Subscriber, execute sp_addpullsubscription. @publisher@publication를 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.Specify @publisher and @publication, and one of the following values for @update_mode:

    • sync tran - 구독에서 즉시 업데이트를 사용하도록 설정합니다.sync tran - enables the subscription for immediate updating.

    • failover - 즉시 업데이트 구독을 사용하고 지연 업데이트를 장애 조치(Failover) 옵션으로 설정합니다.failover - enables the subscription for immediate updating with queued updating as a failover option.

      참고

      failover 를 사용하려면 게시에서 지연 업데이트 구독도 설정해야 합니다.failover requires that the publication also be enabled for queued updating subscriptions.

  4. 구독자에서 sp_addpullsubscription_agent를 실행합니다.At the Subscriber, execute sp_addpullsubscription_agent. 다음을 지정합니다.Specify the following:

    • @publisher, @publisher_db@publication 매개 변수.The @publisher, @publisher_db, and @publication parameters.

    • @job_login@job_password에 대해 구독자에서 배포 에이전트가 실행되는 Microsoft Windows 자격 증명.The Microsoft Windows credentials under which the Distribution Agent at the Subscriber runs for @job_login and @job_password.

      참고

      Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정한 Windows 자격 증명을 사용합니다.Connections made using Windows Integrated Authentication are always made using the Windows credentials specified by @job_login and @job_password. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 구독자에 대한 로컬 연결을 만듭니다.The Distribution Agent always makes the local connection to the Subscriber using Windows Integrated Authentication. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 배포자에 연결합니다.By default, the agent connects to the Distributor using Windows Integrated Authentication.

    • (선택 사항) 0 에 대한 @distributor_security_mode 값과, @distributor_login@distributor_password에 대한 Microsoft SQL Server 로그인 정보(배포자에 연결할 때 SQL Server 인증을 사용 해야하는 경우).(Optional) A value of 0 for @distributor_security_mode and the Microsoft SQL Server login information for @distributor_login and @distributor_password, if you need to use SQL Server Authentication when connecting to the Distributor.

    • 이 구독에 대한 배포 에이전트 작업 일정.A schedule for the Distribution Agent job for this subscription.

  5. 구독 데이터베이스의 구독자에서 sp_link_publication을 실행합니다.At the Subscriber on the subscription database, execute sp_link_publication. @publisher, @publication그리고 @publisher_db에 대한 게시 데이터베이스 이름을 지정하고 @security_mode에 다음 값 중 하나를 지정합니다.Specify @publisher, @publication, the name of the publication database for @publisher_db, and one of the following values for @security_mode:

    • 0 - 게시자에서 업데이트할 때 SQL Server 인증을 사용합니다.0 - Use SQL Server Authentication when making updates at the Publisher. 이 옵션을 사용하려면 @login@password에 대해 게시자에 유효한 로그인을 지정해야 합니다.This option requires you to specify a valid login at the Publisher for @login and @password.

    • 1 - 게시자에 연결할 때 구독자에서 변경 작업을 수행하는 사용자의 보안 컨텍스트를 사용합니다.1 - Use the security context of the user making changes at the Subscriber when connecting to the Publisher. 이 보안 모드에 관한 제한 사항에 대해서는 sp_link_publication 을 참조하세요.See sp_link_publication for restrictions related to this security mode.

    • 2sp_addlinkedserver를 사용하여 만든 기존의 사용자 정의 연결된 서버 로그인을 사용합니다.2 - Use an existing, user-defined linked server login created using sp_addlinkedserver.

  6. 게시자에서 , , @publication를 지정하고 @subscriber에 대한 가져오기 값, @destination_db에 대해 3단계에서 지정한 동일한 값을 지정하여 @subscription_typesp_addsubscription @update_mode을 실행합니다.At the publisher, execute sp_addsubscription specifying @publication, @subscriber, @destination_db, a value of pull for @subscription_type, and the same value specified in step 3 for @update_mode.

이렇게 하면 게시자에서 끌어오기 구독이 등록됩니다.This registers the pull subscription at the Publisher.

즉시 업데이트 밀어넣기 구독을 만들려면To create an immediate updating push subscription

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 즉시 업데이트 구독을 지원하는지 확인합니다.At the Publisher, verify that the publication supports immediate updating subscriptions by executing sp_helppublication.

    • 결과 집합의 allow_sync_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.If the value of allow_sync_tran in the result set is 1, the publication supports immediate updating subscriptions.

    • 결과 집합의 allow_sync_tran 값이 0이면 즉시 업데이트 구독을 설정하여 게시를 다시 만들어야 합니다.If the value of allow_sync_tran in the result set is 0, the publication must be recreated with immediate updating subscriptions enabled.

  2. 게시자에서 sp_helppublication을 실행하여 게시에서 밀어넣기 구독을 지원하는지 확인합니다.At the Publisher, verify that the publication supports push subscriptions by executing sp_helppublication.

    • 결과 집합의 allow_push 값이 1이면 게시에서 밀어넣기 구독을 지원합니다.If the value of allow_push in the result set is 1, the publication supports push subscriptions.

    • allow_push 값이 0이면 sp_changepublication을 실행하여 allow_push 에 대해 @property 을, true 에 대해 @value를 지정합니다.If the value of allow_push is 0, execute sp_changepublication, specifying allow_push for @property and true for @value.

  3. 게시자에서 sp_addsubscription을 실행합니다.At the Publisher, execute sp_addsubscription. @publication, @subscriber, @destination_db를 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.Specify @publication, @subscriber, @destination_db, and one of the following values for @update_mode:

    • sync tran - 즉시 업데이트 지원을 설정합니다.sync tran - enables support for immediate updating.

    • failover - 즉시 업데이트 지원을 설정하고 지연 업데이트를 장애 조치 옵션으로 설정합니다.failover - enables support for immediate updating with queued updating as a failover option.

      참고

      failover 를 사용하려면 게시에서 지연 업데이트 구독도 설정해야 합니다.failover requires that the publication also be enabled for queued updating subscriptions.

  4. 게시자에서 sp_addpushsubscription_agent를 실행합니다.At the Publisher, execute sp_addpushsubscription_agent. 다음 매개 변수를 지정합니다.Specify the following parameters:

    • @subscriber, @subscriber_db@publication.@subscriber, @subscriber_db, and @publication.

    • @job_login@job_password에 대해 배포자에서 배포 에이전트가 실행되는 Windows 자격 증명The Windows credentials under which the Distribution Agent at the Distributor runs for @job_login and @job_password.

      참고

      Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정한 Windows 자격 증명을 사용합니다.Connections made using Windows Integrated Authentication are always made using the Windows credentials specified by @job_login and @job_password. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 배포자에 대한 로컬 연결을 만듭니다.The Distribution Agent always makes the local connection to the Distributor using Windows Integrated Authentication. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 구독자에 연결합니다.By default, the agent will connect to the Subscriber using Windows Integrated Authentication.

    • (선택 사항) 0 에 대한 @subscriber_security_mode 값과, @subscriber_login@subscriber_password에 대한 SQL Server 로그인 정보(구독자에 연결할 때 SQL Server 인증을 사용 해야하는 경우).(Optional) A value of 0 for @subscriber_security_mode and the SQL Server login information for @subscriber_login and @subscriber_password, if you need to use SQL Server Authentication when connecting to the Subscriber.

    • 이 구독에 대한 배포 에이전트 작업 일정.A schedule for the Distribution Agent job for this subscription.

  5. 구독 데이터베이스의 구독자에서 sp_link_publication을 실행합니다.At the Subscriber on the subscription database, execute sp_link_publication. @publisher, @publication그리고 @publisher_db에 대한 게시 데이터베이스 이름을 지정하고 @security_mode에 다음 값 중 하나를 지정합니다.Specify @publisher, @publication, the name of the publication database for @publisher_db, and one of the following values for @security_mode:

    • 0 - 게시자에서 업데이트할 때 SQL Server 인증을 사용합니다.0 - Use SQL Server Authentication when making updates at the Publisher. 이 옵션을 사용하려면 @login@password에 대해 게시자에 유효한 로그인을 지정해야 합니다.This option requires you to specify a valid login at the Publisher for @login and @password.

    • 1 - 게시자에 연결할 때 구독자에서 변경 작업을 수행하는 사용자의 보안 컨텍스트를 사용합니다.1 - Use the security context of the user making changes at the Subscriber when connecting to the Publisher. 이 보안 모드에 관한 제한 사항에 대해서는 sp_link_publication 을 참조하세요.See sp_link_publication for restrictions related to this security mode.

    • 2sp_addlinkedserver를 사용하여 만든 기존의 사용자 정의 연결된 서버 로그인을 사용합니다.2 - Use an existing, user-defined linked server login created using sp_addlinkedserver.

지연 업데이트 끌어오기 구독을 만들려면To create a queued updating pull subscription

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 지연 업데이트 구독을 지원하는지 확인합니다.At the Publisher, verify that the publication supports queued updating subscriptions by executing sp_helppublication.

    • 결과 집합의 allow_queued_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.If the value of allow_queued_tran in the result set is 1, the publication supports immediate updating subscriptions.

    • 결과 집합의 allow_queued_tran 값이 0이면 지연 업데이트 구독을 설정하여 게시를 다시 만들어야 합니다.If the value of allow_queued_tran in the result set is 0, the publication must be recreated with queued updating subscriptions enabled.

  2. 게시자에서 sp_helppublication을 실행하여 게시에서 끌어오기 구독을 지원하는지 확인합니다.At the Publisher, verify that the publication supports pull subscriptions by executing sp_helppublication.

    • 결과 집합의 allow_pull 값이 1이면 게시에서 끌어오기 구독을 지원합니다.If the value of allow_pull in the result set is 1, the publication supports pull subscriptions.

    • allow_pull 값이 0이면 sp_changepublication을 실행하여 allow_pull 에 대해 @property 을, true 에 대해 @value를 지정합니다.If the value of allow_pull is 0, execute sp_changepublication, specifying allow_pull for @property and true for @value.

  3. 구독자에서 sp_addpullsubscription을 실행합니다.At the Subscriber, execute sp_addpullsubscription. @publisher@publication를 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.Specify @publisher and @publication, and one of the following values for @update_mode:

    • queued tran - 지연 업데이트 구독을 설정합니다.queued tran - enables the subscription for queued updating.

    • queued failover - 지연 업데이트 지원을 설정하고 즉시 업데이트를 장애 조치 옵션으로 설정합니다.queued failover - enables support for queued updating with immediate updating as a failover option.

      참고

      queued failover 를 사용하려면 게시에서 즉시 업데이트 구독도 설정해야 합니다.queued failover requires that the publication also be enabled for immediate updating subscriptions. 즉시 업데이트로 장애 조치를 수행하려면 sp_link_publication 을 사용하여 구독자의 변경 내용을 게시자에 복제할 때 사용할 자격 증명을 정의해야 합니다.To fail over to immediate updating, you must use sp_link_publication to define the credentials under which changes at the Subscriber are replicated to the Publisher.

  4. 구독자에서 sp_addpullsubscription_agent를 실행합니다.At the Subscriber, execute sp_addpullsubscription_agent. 다음 매개 변수를 지정합니다.Specify the following parameters:

    • @publisher, @publisher_db@publication.@publisher, @publisher_db, and @publication.

    • @job_login@job_password에 대해 구독자에서 배포 에이전트가 실행되는 Windows 자격 증명The Windows credentials under which the Distribution Agent at the Subscriber runs for @job_login and @job_password.

      참고

      Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정한 Windows 자격 증명을 사용합니다.Connections made using Windows Integrated Authentication are always made using the Windows credentials specified by @job_login and @job_password. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 구독자에 대한 로컬 연결을 만듭니다.The Distribution Agent always makes the local connection to the Subscriber using Windows Integrated Authentication. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 배포자에 연결합니다.By default, the agent connects to the Distributor using Windows Integrated Authentication.

    • (선택 사항) 0 에 대한 @distributor_security_mode 값과, @distributor_login@distributor_password에 대한 SQL Server 로그인 정보(배포자에 연결할 때 SQL Server 인증을 사용 해야하는 경우).(Optional) A value of 0 for @distributor_security_mode and the SQL Server login information for @distributor_login and @distributor_password, if you need to use SQL Server Authentication when connecting to the Distributor.

    • 이 구독에 대한 배포 에이전트 작업 일정.A schedule for the Distribution Agent job for this subscription.

  5. 게시자에서 , , @publication를 지정하고 @subscriber에 대한 가져오기 값, @destination_db에 대해 3단계에서 지정한 동일한 값을 지정하여 @subscription_typesp_addsubscription @update_mode을 실행하고 게시자에서 구독자를 등록합니다.At the publisher, execute sp_addsubscriber to register the Subscriber at the Publisher, specifying @publication, @subscriber, @destination_db, a value of pull for @subscription_type, and the same value specified in step 3 for @update_mode.

이렇게 하면 게시자에서 끌어오기 구독이 등록됩니다.This registers the pull subscription at the Publisher.

지연 업데이트 밀어넣기 구독을 만들려면To create a queued updating push subscription

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 지연 업데이트 구독을 지원하는지 확인합니다.At the Publisher, verify that the publication supports queued updating subscriptions by executing sp_helppublication.

    • 결과 집합의 allow_queued_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.If the value of allow_queued_tran in the result set is 1, the publication supports immediate updating subscriptions.

    • 결과 집합의 allow_queued_tran 값이 0이면 지연 업데이트 구독을 설정하여 게시를 다시 만들어야 합니다.If the value of allow_queued_tran in the result set is 0, the publication must be recreated with queued updating subscriptions enabled. 자세한 내용은 방법: 트랜잭션 게시에 대한 구독 업데이트 설정(복제 Transact-SQL 프로그래밍)을 참조하세요.For more information, see How to: Enable Updating Subscriptions for Transactional Publications (Replication Transact-SQL Programming).

  2. 게시자에서 sp_helppublication을 실행하여 게시에서 밀어넣기 구독을 지원하는지 확인합니다.At the Publisher, verify that the publication supports push subscriptions by executing sp_helppublication.

    • 결과 집합의 allow_push 값이 1이면 게시에서 밀어넣기 구독을 지원합니다.If the value of allow_push in the result set is 1, the publication supports push subscriptions.

    • allow_push 값이 0이면 sp_changepublication을 실행하여 @property 에 대해 allow_push를, true 에 대해 @value를 지정합니다.If the value of allow_push is 0, execute sp_changepublication, specifying allow_push for @property and true for @value.

  3. 게시자에서 sp_addsubscription을 실행합니다.At the Publisher, execute sp_addsubscription. @publication, @subscriber, @destination_db를 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.Specify @publication, @subscriber, @destination_db, and one of the following values for @update_mode:

    • queued tran - 지연 업데이트 구독을 설정합니다.queued tran - enables the subscription for queued updating.

    • queued failover - 지연 업데이트 지원을 설정하고 즉시 업데이트를 장애 조치 옵션으로 설정합니다.queued failover - enables support for queued updating with immediate updating as a failover option.

      참고

      queued failover 옵션을 사용하려면 게시에서 즉시 업데이트 구독도 설정해야 합니다.The queued failover option requires that the publication also be enabled for immediate updating subscriptions. 즉시 업데이트로 장애 조치를 수행하려면 sp_link_publication 을 사용하여 구독자의 변경 내용을 게시자에 복제할 때 사용할 자격 증명을 정의해야 합니다.To fail over to immediate updating, you must use sp_link_publication to define the credentials under which changes at the Subscriber are replicated to the Publisher.

  4. 게시자에서 sp_addpushsubscription_agent를 실행합니다.At the Publisher, execute sp_addpushsubscription_agent. 다음 매개 변수를 지정합니다.Specify the following parameters:

    • @subscriber, @subscriber_db@publication.@subscriber, @subscriber_db, and @publication.

    • @job_login@job_password에 대해 배포자에서 배포 에이전트가 실행되는 Windows 자격 증명The Windows credentials under which the Distribution Agent at the Distributor runs for @job_login and @job_password.

      참고

      Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정한 Windows 자격 증명을 사용합니다.Connections made using Windows Integrated Authentication are always made using the Windows credentials specified by @job_login and @job_password. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 배포자에 대한 로컬 연결을 만듭니다.The Distribution Agent always makes the local connection to the Distributor using Windows Integrated Authentication. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 구독자에 연결합니다.By default, the agent connects to the Subscriber using Windows Integrated Authentication.

    • (선택 사항) 0 에 대한 @subscriber_security_mode 값과, @subscriber_login@subscriber_password에 대한 SQL Server 로그인 정보(구독자에 연결할 때 SQL Server 인증을 사용 해야하는 경우).(Optional) A value of 0 for @subscriber_security_mode and the SQL Server login information for @subscriber_login and @subscriber_password, if you need to use SQL Server Authentication when connecting to the Subscriber.

    • 이 구독에 대한 배포 에이전트 작업 일정.A schedule for the Distribution Agent job for this subscription.

예제Example

이 예에서는 즉시 업데이트 구독을 지원하는 게시에 대해 즉시 업데이트 끌어오기 구독을 만듭니다.This example creates an immediate updating pull subscription to a publication that supports immediate updating subscriptions. 로그인 및 암호 값은 sqlcmd 스크립팅 변수를 사용하여 런타임에 제공됩니다.Login and password values are supplied at runtime using sqlcmd scripting variables.

참고

이 스크립트는 sqlcmd 스크립팅 변수를 사용합니다.This script uses sqlcmd scripting variables. 형식은 $(MyVariable)입니다.They are in the form $(MyVariable). SQL Server Management Studio와 명령줄에서 스크립팅 변수를 사용하는 방법에 대한 내용은 복제 시스템 저장 프로시저 개념 항목의 복제 스크립트 실행섹션을 참조하세요.For information about how to use scripting variables on the command line and in SQL Server Management Studio, see the Executing Replication Scripts section in the topic Replication System Stored Procedures Concepts.

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2008R2';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @update_mode = N'failover', 
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication,
    @job_login = @login,
    @job_password = @password; 

-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication 
    @publisher = @publisher, 
    @publication = @publication,
    @publisher_db = @publicationDB, 
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks2008R2;
GO

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @subscriptionDB = N'AdventureWorks2008R2Replica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2008R2]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO

관련 항목:See Also

트랜잭션 복제를 위한 업데이트 가능 구독Updatable Subscriptions for Transactional Replication

스크립팅 변수와 함께 sqlcmd 사용Use sqlcmd with Scripting Variables

트랜잭션 게시에 업데이트할 수 있는 구독 만들기(Management Studio)Create an Updatable Subscription to a Transactional Publication (Management Studio)