아티클 속성 보기 및 수정
적용 대상: SQL Server Azure SQL Managed Instance
이 주제에서는 SQL Server Management Studio, Transact-SQL 또는 RMO(복제 관리 개체)를 사용하여 SQL Server에서 아티클 속성을 보거나 수정하는 방법에 대해 설명합니다.
항목 내용
시작하기 전 주의 사항:
다음을 사용해 아티클 속성을 보고 수정하려면
시작하기 전에
제한 사항
- 게시를 만든 후에는 일부 속성을 수정할 수 없으며 게시에 대한 구독이 있는 경우에는 다른 속성을 수정할 수 없습니다. 수정할 수 없는 속성은 읽기 전용으로 표시됩니다.
권장 사항
- 게시를 만든 후 일부 속성 변경에는 새 스냅샷이 필요합니다. 게시에 구독이 있는 경우 일부 변경 내용을 변경하려면 모든 구독을 다시 초기화해야 합니다. 자세한 내용은 게시 및 아티클 속성 변경 및 기존 게시에 아티클 추가 및 삭제를 참조하세요.
SQL Server Management Studio 사용
Microsoft SQL Server Management Studio 및 복제 모니터에서 사용할 수 있는 게시 속성 - <게시> 대화 상자에서 아티클 속성을 보고 수정합니다. 복제 모니터를 시작하는 방법은 복제 모니터 시작을 참조하세요.
일반 페이지에는 게시 이름 및 설명, 데이터베이스 이름, 게시 유형 및 구독 만료 설정이 포함되어 있습니다.
아티클 페이지는 새 게시 마법사의 아티클 페이지에 해당합니다. 이 페이지를 사용하여 아티클을 추가 및 삭제하고 아티클의 속성 및 열 필터링을 변경할 수 있습니다.
행 필터 페이지는 새 게시 마법사의 테이블 행 필터 페이지에 해당합니다. 이 페이지를 사용하여 모든 유형의 게시에 대한 정적 행 필터를 추가, 편집 및 삭제하고 병합 게시에 대한 매개 변수가 있는 행 필터 및 조인 필터를 추가, 편집 및 삭제할 수 있습니다.
스냅샷 페이지를 사용하면 스냅샷의 형식 및 위치, 스냅샷의 압축 여부 및 스냅샷이 적용되기 전과 후에 실행할 스크립트를 지정할 수 있습니다.
FTP 스냅샷 페이지(스냅샷 및 트랜잭션 게시의 경우, SQL Server 2005 이전 버전을 실행하는 게시자에 대한 병합 게시)를 사용하면 구독자가 FTP(파일 전송 프로토콜)를 통해 스냅샷 파일을 다운로드할 수 있는지 여부를 지정할 수 있습니다.
FTP 스냅샷 및 인터넷 페이지(SQL Server 2005 이상을 실행하는 게시자의 병합 게시용)를 사용하면 구독자가 FTP를 통해 스냅샷 파일을 다운로드할 수 있는지 여부와 구독자가 HTTPS를 통해 구독을 동기화할 수 있는지 여부를 지정할 수 있습니다.
구독 옵션 페이지에서는 모든 구독에 적용되는 다양한 옵션을 설정할 수 있습니다. 사용할 수 있는 옵션은 게시 유형에 따라 달라집니다.
게시 액세스 목록 페이지에서 게시에 액세스할 수 있는 로그인 및 그룹을 지정할 수 있습니다.
에이전트 보안 페이지에서는 다음 에이전트가 실행되는 계정에 대한 설정에 액세스하고 복제 토폴로지의 컴퓨터에 연결할 수 있습니다. 즉, 모든 게시에 대한 스냅샷 에이전트, 모든 트랜잭션 게시에 대한 로그 판독기 에이전트 및 지연 업데이트 구독을 허용하는 트랜잭션 게시에 대한 큐 판독기 에이전트입니다.
데이터 파티션 페이지(SQL Server 2005 이후 버전을 실행하는 게시자의 병합 게시의 경우)를 사용하면 매개 변수가 있는 필터가 있는 게시에 대한 구독자가 스냅샷을 사용할 수 없는 경우 스냅샷을 요청할 수 있는지 여부를 지정할 수 있습니다. 또한 한 번 또는 되풀이 일정에 따라 하나 이상의 파티션에 대한 스냅샷을 생성할 수 있습니다.
아티클 속성을 보고 수정하려면
게시 속성 - <게시>> 대화 상자의 아티클 페이지에서 아티클을 선택한 후 아티클 속성을 클릭합니다.
속성 변경 내용을 적용할 아티클을 선택합니다.
강조 표시된 <ObjectType> 아티클의 속성 설정을 클릭하여 아티클 속성 - <ObjectName> 대화 상자를 시작합니다. 이 대화 상자에서 변경한 속성은 아티클 페이지의 개체 창에 강조 표시된 개체에만 적용됩니다.
모든 <ObjectType> 아티클의 속성 설정을 클릭하여 모든 <ObjectType> 아티클에 대한 속성 대화 상자를 시작합니다. 이 대화 상자에서 변경한 속성은 아티클 페이지의 개체 창에 있는 해당 형식의 모든 개체에 적용됩니다(아직 게시하도록 선택되지 않은 개체 포함).
참고 항목
모든 <ObjectType> 아티클의 속성 대화 상자에서 변경한 속성은 아티클 속성 - <ObjectName> 대화 상자에서 이전에 수행한 내용을 재정의합니다. 예를 들어 개체 형식의 모든 아티클에 대해 여러 기본값을 설정하지만 개별 개체에 대한 일부 속성을 설정하려면 먼저 모든 아티클의 기본값을 설정합니다. 그런 다음 개별 개체에 대한 속성을 설정합니다.
필요한 경우 속성을 수정한 다음 확인을 클릭합니다.
게시 속성 - <게시> 대화 상자에서 확인을 클릭합니다.
Transact-SQL 사용
아티클은 수정할 수 있으며 속성은 복제 저장 프로시저를 사용하여 프로그래밍 방식으로 반환됩니다. 사용되는 저장 프로시저는 아티클이 속한 게시 유형에 따라 달라집니다.
스냅샷 또는 트랜잭션 게시에 속한 아티클의 속성을 보려면
sp_helparticle을 실행하고
@publication
매개 변수에 게시의 이름을,@article
매개 변수에 아티클의 이름을 지정합니다.@article
을 지정하지 않으면 게시의 모든 아티클 정보가 반환됩니다.테이블 아티클에 대한 sp_helparticlecolumns을 실행하여 기본 테이블에서 사용할 수 있는 모든 열을 나열합니다.
스냅샷 또는 트랜잭션 게시에 속한 아티클의 속성을 수정하려면
테이블 아티클에 대해 sp_changearticle을 실행하고
@property
매개 변수에 변경되는 아티클 속성을,@value
매개 변수에 아티클의 이름을 지정합니다.참고 항목
변경으로 인해 새 스냅샷을 생성해야 하는 경우
@force_invalidate_snapshot
에1
값을 지정해야 하며, 변경으로 인해 구독자를 다시 초기화해야 하는 경우@force_reinit_subscription
에1
값을 지정해야 합니다. 변경된 경우 새 스냅샷 또는 다시 초기화가 필요한 속성에 대한 자세한 내용은 게시 및 아티클 속성 변경을 참조하세요.
병합 게시에 속한 아티클의 속성을 보려면
sp_helpmergearticle을 실행하고
@publication
매개 변수에 게시의 이름을,@article
매개 변수에 아티클의 이름을 지정합니다. 이러한 매개 변수를 지정하지 않으면 게시 또는 게시자에 있는 모든 아티클에 대한 정보가 반환됩니다.테이블 아티클에 대한 sp_helpmergearticlecolumn을 실행하여 기본 테이블에서 사용할 수 있는 모든 열을 나열합니다.
병합 게시에 속한 아티클의 속성을 수정하려면
테이블 아티클에 대해 sp_changemergearticle을 실행하고
@property
매개 변수에 변경되는 아티클 속성을,@value
매개 변수에 아티클의 이름을 지정합니다.참고 항목
변경으로 인해 새 스냅샷을 생성해야 하는 경우
@force_invalidate_snapshot
에1
값을 지정해야 하며, 변경으로 인해 구독자를 다시 초기화해야 하는 경우@force_reinit_subscription
에1
값을 지정해야 합니다. 변경된 경우 새 스냅샷 또는 다시 초기화가 필요한 속성에 대한 자세한 내용은 게시 및 아티클 속성 변경을 참조하세요.
예(Transact-SQL)
이 트랜잭션 복제 예에서는 게시된 아티클에 대한 속성을 반환합니다.
DECLARE @publication AS sysname;
SET @publication = N'AdvWorksProductTran';
USE [AdventureWorks2022]
EXEC sp_helparticle
@publication = @publication;
GO
이 트랜잭션 복제 예에서는 게시된 아티클에 대한 스키마 옵션을 변경합니다.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));
-- Change the schema options to replicate schema with XML.
USE [AdventureWorks2022]
EXEC sp_changearticle
@publication = @publication,
@article = @article,
@property = N'schema_option',
@value = @option,
@force_invalidate_snapshot = 1;
GO
이 병합 복제 예에서는 게시된 아티클에 대한 속성을 반환합니다.
DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
USE [AdventureWorks2022]
EXEC sp_helpmergearticle
@publication = @publication;
GO
이 병합 복제 예제에서는 게시된 아티클에 대한 충돌 검색 설정을 변경합니다.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';
-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle
@publication = @publication,
@article = @article,
@property = N'column_tracking',
@value = N'true',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
GO
RMO(복제 관리 개체) 사용
RMO(복제 관리 개체)를 사용하여 프로그래밍 방식으로 아티클을 수정하고 해당 속성에 액세스할 수 있습니다. 아티클 속성을 보거나 수정하는 데 사용하는 RMO 클래스는 아티클이 속한 발행물 유형에 따라 다릅니다.
스냅샷 또는 트랜잭션 게시에 속한 아티클의 속성을 보거나 수정하려면
ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.
TransArticle 클래스의 인스턴스를 만듭니다.
Name, PublicationName및 DatabaseName 속성을 설정합니다.
ConnectionContext 속성에 1단계의 연결을 설정합니다.
LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다. 이 메서드가 false를 반환하는 경우 3단계에서 아티클 속성이 올바르게 정의되지 않았거나 아티클이 존재하지 않는 것입니다.
(옵션) 속성을 변경하려면 설정할 수 있는 TransArticle 속성 중 하나에 대해 새 값을 설정합니다.
(옵션) CachePropertyChanges에 대해 true 값을 지정했으면 CommitPropertyChanges 메서드를 호출하여 서버의 변경 내용을 커밋합니다. (기본값)에 대해 CachePropertyChanges false 값을 지정한 경우 변경 내용이 즉시 서버로 전송됩니다.
병합 게시에 속하는 아티클의 속성을 보거나 수정하려면
ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.
MergeArticle 클래스의 인스턴스를 만듭니다.
Name, PublicationName및 DatabaseName 속성을 설정합니다.
ConnectionContext 속성에 1단계의 연결을 설정합니다.
LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다. 이 메서드가 false를 반환하는 경우 3단계에서 아티클 속성이 올바르게 정의되지 않았거나 아티클이 존재하지 않는 것입니다.
(옵션) 속성을 변경하려면 설정할 수 있는 MergeArticle 속성 중 하나에 대해 새 값을 설정합니다.
(옵션) CachePropertyChanges에 대해 true 값을 지정했으면 CommitPropertyChanges 메서드를 호출하여 서버의 변경 내용을 커밋합니다. (기본값)에 대해 CachePropertyChanges false 값을 지정한 경우 변경 내용이 즉시 서버로 전송됩니다.
예제(RMO)
다음은 병합 아티클을 변경하여 아티클에서 사용하는 비즈니스 논리 처리기를 지정하는 예제입니다.
// Define the Publisher, publication, and article names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";
string articleName = "SalesOrderHeader";
// Set the friendly name of the business logic handler.
string customLogic = "OrderEntryLogic";
MergeArticle article = new MergeArticle();
// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Set the required properties for the article.
article.ConnectionContext = conn;
article.Name = articleName;
article.DatabaseName = publicationDbName;
article.PublicationName = publicationName;
// Load the article properties.
if (article.LoadProperties())
{
article.ArticleResolver = customLogic;
}
else
{
// Throw an exception of the article does not exist.
throw new ApplicationException(String.Format(
"{0} is not published in {1}", articleName, publicationName));
}
}
catch (Exception ex)
{
// Do error handling here and rollback the transaction.
throw new ApplicationException(String.Format(
"The business logic handler {0} could not be associated with " +
" the {1} article.",customLogic,articleName), ex);
}
finally
{
conn.Disconnect();
}
' Define the Publisher, publication, and article names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"
Dim articleName As String = "SalesOrderHeader"
' Set the friendly name of the business logic handler.
Dim customLogic As String = "OrderEntryLogic"
Dim article As MergeArticle = New MergeArticle()
' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Set the required properties for the article.
article.ConnectionContext = conn
article.Name = articleName
article.DatabaseName = publicationDbName
article.PublicationName = publicationName
' Load the article properties.
If article.LoadProperties() Then
article.ArticleResolver = customLogic
Else
' Throw an exception of the article does not exist.
Throw New ApplicationException(String.Format( _
"{0} is not published in {1}", articleName, publicationName))
End If
Catch ex As Exception
' Do error handling here and rollback the transaction.
Throw New ApplicationException(String.Format( _
"The business logic handler {0} could not be associated with " + _
" the {1} article.", customLogic, articleName), ex)
Finally
conn.Disconnect()
End Try