게시 데이터베이스의 스키마 변경Make Schema Changes on Publication Databases

복제는 게시된 개체에 대한 다양한 스키마 변경을 지원합니다.Replication supports a wide range of schema changes to published objects. MicrosoftMicrosoft SQL ServerSQL Server 게시자에 게시된 개체에 대해 다음 스키마 변경을 수행하면 기본적으로 모든 SQL ServerSQL Server 구독자에 변경 내용이 전파됩니다.When you make any of the following schema changes on the appropriate published object at a MicrosoftMicrosoft SQL ServerSQL Server Publisher, that change is propagated by default to all SQL ServerSQL Server Subscribers:

  • ALTER TABLEALTER TABLE

  • 스키마 변경 복제가 활성화되어 있고 토폴로지에 SQL Server 2005SQL Server 2005 또는 SQL Server Compact 3.5SQL Server Compact 3.5 Subscribers.ALTER VIEW가 포함된 경우 ALTER TABLE SET LOCK ESCALATION을 사용해서는 안 됩니다.ALTER TABLE SET LOCK ESCALATION should not be used if schema change replication is enabled and a topology includes SQL Server 2005SQL Server 2005 or SQL Server Compact 3.5SQL Server Compact 3.5 Subscribers.ALTER VIEW

  • ALTER PROCEDUREALTER PROCEDURE

  • ALTER FUNCTIONALTER FUNCTION

  • ALTER TRIGGERALTER TRIGGER

    DDL(데이터 정의 언어) 트리거는 복제할 수 없기 때문에 DML(데이터 조작 언어) 트리거에 대해서만 ALTER TRIGGER를 사용할 수 있습니다.ALTER TRIGGER can be used only for data manipulation language [DML] triggers because data definition language [DDL] triggers cannot be replicated.

중요

테이블에 대한 스키마 변경은 Transact-SQLTransact-SQL 또는 SMO( SQL ServerSQL Server Management Objects)를 사용하여 수행해야 합니다.Schema changes to tables must be made by using Transact-SQLTransact-SQL or SQL ServerSQL Server Management Objects (SMO). SQL Server Management StudioSQL Server Management Studio에서 스키마를 변경하면 Management StudioManagement Studio 에서는 해당 테이블을 삭제하고 다시 만들려고 합니다.When schema changes are made in SQL Server Management StudioSQL Server Management Studio, Management StudioManagement Studio attempts to drop and re-create the table. 그러나 게시된 개체는 삭제할 수 없으므로 스키마 변경에 실패합니다.You cannot drop published objects, therefore the schema change fails.

트랜잭션 복제 및 병합 복제의 경우 배포 에이전트 또는 병합 에이전트가 실행될 때 스키마 변경이 증분 방식으로 전파됩니다.For transactional replication and merge replication, schema changes are propagated incrementally when the Distribution Agent or Merge Agent runs. 스냅숏 복제의 경우 새 스냅숏을 구독자에서 적용할 때 스키마 변경이 전파됩니다.For snapshot replication, schema changes are propagated when a new snapshot is applied at the Subscriber. 스냅숏 복제에서 스키마의 새 복사본은 동기화가 발생할 때마다 구독자로 전달됩니다.In snapshot replication, a new copy of the schema is sent to the Subscriber each time synchronization occurs. 그러므로 이전에 게시된 개체에 대한 모든 스키마 변경(위에서 나열한 것 이외의 스키마 변경도 포함)이 동기화를 수행할 때마다 자동으로 전파됩니다.Therefore, all schema changes (not just those listed above) to previously published objects are automatically propagated with each synchronization.

게시에서 아티클을 추가 및 제거하는 방법에 대한 자세한 내용은 기존 게시에 대한 아티클 추가 및 삭제를 참조하세요.For information about adding and removing articles from publications, see Add Articles to and Drop Articles from Existing Publications.

스키마 변경을 복제하려면To replicate schema changes

위에 나열된 스키마 변경은 기본적으로 복제됩니다.The schema changes listed above are replicated by default. 스키마 변경 복제를 해제하는 방법은 Replicate Schema Changes를 참조하십시오.For information about disabling the replication of schema changes, see Replicate Schema Changes.

스키마 변경에 대한 고려 사항Considerations for Schema Changes

스키마 변경 복제 시 다음 사항을 고려하십시오.Keep the following considerations in mind when replicating schema changes.

일반적인 고려 사항General Considerations

  • 스키마 변경에는 Transact-SQLTransact-SQL에서 설정한 제한 사항이 적용됩니다.Schema changes are subject to any restrictions imposed by Transact-SQLTransact-SQL. 예를 들어 ALTER TABLE을 사용하여 기본 키 열을 변경할 수 없습니다.For example, ALTER TABLE does not allow you to ALTER primary key columns.

  • 데이터 형식 매핑은 초기 스냅숏에 대해서만 수행됩니다.Data type mapping is performed only for the initial snapshot. 스키마 변경은 이전 버전의 데이터 형식으로 매핑되지 않습니다.Schema changes are not mapped to previous versions of data types. 예를 들어 ALTER TABLE ADD datetime2 column 에서 SQL Server 2012SQL Server 2012문을 사용하는 경우 데이터 형식이 ssVersion2005 구독자에 대한 SQL Server 2005SQL Server 2005 로 변환되지 않습니다.For example, if the statement ALTER TABLE ADD datetime2 column is used in SQL Server 2012SQL Server 2012, the data type is not translated to nvarchar for SQL Server 2005SQL Server 2005 Subscribers. 게시자에서 스키마 변경이 차단되는 경우도 있습니다.In some cases, schema changes are blocked on the Publisher.

  • 게시에서 스키마 변경을 전파할 수 있도록 설정하면 게시의 아티클에 대해 관련 스키마 옵션이 어떻게 설정되었는지에 상관없이 스키마 변경이 전파됩니다.If a publication is set to allow the propagation of schema changes, schema changes are propagated regardless of how the related schema option is set for an article in the publication. 예를 들어 테이블 아티클에 대해 FOREIGN KEY 제약 조건을 복제하지 않도록 선택하고 게시자의 테이블에 외래 키를 추가하는 ALTER TABLE 명령을 실행하면 구독자의 테이블에 외래 키가 추가됩니다.For example, if you select not to replicate foreign key constraints for a table article, but then issue an ALTER TABLE command that adds a foreign key to the table at the Publisher, the foreign key is added to the table at the Subscriber. 이를 방지하려면 ALTER TABLE 명령을 실행하기 전에 스키마 변경 전파를 해제합니다.To prevent this, disable the propagation of schema changes before issuing the ALTER TABLE command.

  • 스키마 변경은 구독자(재게시 구독자 포함)가 아닌 게시자에서만 수행해야 합니다.Schema changes should be made only at the Publisher, not at Subscribers (including republishing Subscribers). 병합 복제에서는 구독자에서 스키마를 변경할 수 없습니다.Merge replication prevents schema changes at the Subscriber. 트랜잭션 복제에서는 스키마를 변경할 수 있지만 이러한 변경으로 인해 복제가 실패할 수 있습니다.Transactional replication does not prevent the changes, but the changes can cause replication to fail.

  • 재게시 구독자로 전파된 변경 내용은 기본적으로 해당 구독자로 전파됩니다.Changes propagated to a republishing Subscriber are by default propagated to its Subscribers.

  • 스키마 변경이 게시자에는 존재하지만 구독자에는 존재하는 않는 개체 또는 제약 조건을 참조하면 게시자에서는 스키마 변경이 성공하지만 구독자에서는 실패합니다.If the schema change references objects or constraints existing on the Publisher but not on the Subscriber, the schema change will succeed on the Publisher but will fail on the Subscriber.

  • 외래 키를 추가할 때 참조되는 구독자에 있는 모든 개체의 이름 및 소유자는 게시자에 있는 해당 개체의 이름 및 소유자와 같아야 합니다.All objects on the Subscriber that are referenced when adding a foreign key must have the same name and owner as the corresponding object on the Publisher.

  • 명시적인 인덱스 추가, 삭제 및 변경은 지원되지 않습니다.Explicitly adding, dropping, or altering indexes is not supported. PRIMARY KEY 제약 조건과 같이 제약 조건에 대해 암시적으로 생성된 인덱스는 지원됩니다.Indexes created implicitly for constraints (such as a primary key constraint) are supported.

  • 복제에서 관리하는 ID 열은 변경 또는 삭제할 수 없습니다.Altering or dropping identity columns that are managed by replication is not supported. ID 열 자동 관리에 대한 자세한 내용은 ID 열 복제를 참조하세요.For more information about automatic management of identity columns, see Replicate Identity Columns.

  • 게시자 데이터와 구독자 데이터가 서로 달라질 수 있기 때문에(데이터 불일치성이라고 함) 비결정적 함수를 포함하는 스키마 변경은 지원되지 않습니다.Schema changes that include nondeterministic functions are not supported because they can result in data at the Publisher and Subscriber being different (referred to as non-convergence). 예를 들어 게시자: ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE()에서 다음 명령을 실행하는 경우 다른 명령이 구독자에 복제되고 실행되면 값은 달라집니다.For example, if you issue the following command at the Publisher: ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), the values are different when the command is replicated to the Subscriber and executed. 비결정적 함수에 대한 자세한 내용은 Deterministic and Nondeterministic Functions를 참조하십시오.For more information about nondeterministic functions, see Deterministic and Nondeterministic Functions.

  • 제약 조건의 이름을 명시적으로 지정하는 것이 좋습니다.It is recommended that constraints be explicitly named. 제약 조건의 이름을 명시적으로 지정하지 않은 경우 SQL ServerSQL Server 에서 제약 조건에 이름을 생성하며 이러한 이름은 게시자와 각 구독자에서 다르게 됩니다.If a constraint is not explicitly named, SQL ServerSQL Server generates a name for the constraint, and these names will be different on the Publisher and each Subscriber. 이로 인해 스키마 변경 복제 시 문제가 발생할 수 있습니다.This can cause issues during the replication of schema changes. 예를 들어 게시자에서 열을 삭제하여 종속 제약 조건이 삭제된 경우 복제에서 구독자의 제약 조건을 삭제하려고 시도하지만For example, if you drop a column at the Publisher and a dependent constraint is dropped, replication will attempt to drop the constraint at the Subscriber. 제약 조건의 이름이 다르기 때문에 구독자에서의 삭제 작업은 실패하게 됩니다.The drop at the Subscriber will fail because the name of the constraint is different. 제약 조건 명명 문제로 인해 동기화가 실패할 경우 구독자에서 수동으로 제약 조건을 삭제하고 병합 에이전트를 다시 실행하십시오.If synchronization fails because of a constraint naming issue, manually drop the constraint at the Subscriber and then rerun the Merge Agent.

  • 테이블을 복제용으로 게시하면 게시 스냅숏이 이미 생성되어 있는 경우 해당 테이블의 열을 XML 데이터 형식으로 변경할 수 없습니다. 열을 변경하려면 먼저 복제를 제거해야 합니다.If a table is published for replication, it is not possible to alter a column in that table to a data type of XML if a publication snapshot has already been generated To alter the column, you must first remove replication.

  • 커밋되지 않은 읽기는 게시된 테이블에서 DDL을 수행할 때 지원되는 격리 수준이 아닙니다.Read uncommitted is not a supported isolation level when doing DDL on a published table.

  • SET CONTEXT_INFO 는 게시된 개체에 대해 스키마 변경 내용이 수행된 트랜잭션 컨텍스트 수정에 사용할 수 없습니다.SET CONTEXT_INFO should not be used to modify the context of transactions where schema changes are performed against published objects.

열 추가Adding Columns

  • 테이블에 새 열을 추가한 후 이 열을 기존 게시에 포함하려면 ALTER TABLE <Table> ADD <Column>을 실행합니다.To add a new column to a table and include that column in an existing publication, execute ALTER TABLE <Table> ADD <Column>. 기본적으로 이 열은 모든 구독자로 복제됩니다.By default, the column is then replicated to all Subscribers. 이 열에는 NULL 값이 허용되거나 기본 제약 조건이 포함되어야 합니다.The column must allow NULL values or include a default constraint. 열을 추가하는 방법은 이 항목의 "병합 복제" 섹션을 참조하십시오.For more information about adding columns, see the "Merge Replication" section in this topic.

  • 테이블에 새 열을 추가한 후 이 열을 기존 게시에 포함시키지 않으려면 스키마 변경 복제를 해제한 다음 ALTER TABLE <Table> ADD <Column>을 실행합니다.To add a new column to a table and not include that column in an existing publication, disable the replication of schema changes, and then execute ALTER TABLE <Table> ADD <Column>.

  • 기존 게시에 기존 열을 포함시키려면 sp_articlecolumn(Transact-SQL), sp_mergearticlecolumn(Transact-SQL) 또는 게시 속성 - <Publication> 대화 상자를 사용합니다.To include an existing column in an existing publication, use sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL), or the Publication Properties - <Publication> dialog box.

    자세한 내용은 Define and Modify a Column Filter을 참조하세요.For more information, see Define and Modify a Column Filter. 이 작업을 수행하려면 구독을 다시 초기화해야 합니다.This will require subscriptions to be reinitialized.

  • 열이 구독자로 복제될 때 데이터가 일치하지 않을 수 있기 때문에 게시된 테이블에 ID 열을 추가할 수 없습니다.Adding an identity column to a published table is not supported, because it can result in non-convergence when the column is replicated to the Subscriber. 게시자의 ID 열 값은 영향을 받는 테이블 행이 실제로 저장된 순서에 따라 달라집니다.The values in the identity column at the Publisher depend on the order in which the rows for the affected table are physically stored. 구독자에서는 행이 다르게 저장될 수 있으므로 ID 열의 값이 같은 행에 대해 다를 수 있습니다.The rows might be stored differently at the Subscriber; therefore the value for the identity column can be different for the same rows.

열 삭제Dropping Columns

  • 기존 게시에서 열을 삭제하고 해당 열을 게시자의 테이블에서 삭제하려면 ALTER TABLE <Table> DROP <Column>을 실행합니다.To drop a column from an existing publication and drop the column from the table at the Publisher, execute ALTER TABLE <Table> DROP <Column>. 기본적으로 해당 열이 모든 구독자의 테이블에서 삭제됩니다.By default, the column is then dropped from the table at all Subscribers.

  • 열을 기존 게시에서는 삭제하지만 게시자의 테이블에서는 유지하려면 sp_articlecolumn(Transact-SQL), sp_mergearticlecolumn(Transact-SQL) 또는 게시 속성 - <게시> 대화 상자를 사용합니다.To drop a column from an existing publication but retain the column in the table at the Publisher, use sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL), or the Publication Properties - <Publication> dialog box.

    자세한 내용은 Define and Modify a Column Filter을 참조하세요.For more information, see Define and Modify a Column Filter. 이 작업을 수행하려면 새 스냅숏을 생성해야 합니다.This will require a new snapshot to be generated.

  • 삭제할 열은 데이터베이스에 있는 모든 게시 아티클의 필터 절에 사용할 수 없습니다.The column to be dropped cannot be used in the filter clauses of any article of any publication in the database.

  • 다음과 같이 게시된 아티클에서 열을 삭제할 때는 데이터베이스에 영향을 줄 수 있는 열의 제약 조건, 인덱스 또는 속성을When dropping a column from a published article, take into consideration any constraints, indexes, or properties of the column that could affect the database. 예를 들어For example:

    • 트랜잭션 게시 아티클에서 기본 키에 사용되는 열은 복제에 사용되므로 삭제할 수 없습니다.You cannot drop columns used in a primary key from articles in transactional publications, because they are used by replication.

    • 병합 게시 아티클의 rowguid 열이나 구독 업데이트를 지원하는 트랜잭션 게시 아티클의 mstran_repl_version 열은 복제에 사용되므로 삭제할 수 없습니다.You cannot drop the rowguid column from articles in merge publications or the mstran_repl_version column from articles in transactional publications that support updating subscriptions, because they are used by replication.

    • 인덱스 변경은 구독자에 전파되지 않습니다. 게시자에서 열을 삭제하여 종속 인덱스가 삭제된 경우 인덱스 삭제는 복제되지 않습니다.Index changes are not propagated to Subscribers: if you drop a column at the Publisher and a dependent index is dropped, the index drop is not replicated. 게시자에서 구독자로 복제 시에 열 삭제가 성공하려면 게시자에서 열을 삭제하기 전에 구독자에서 인덱스를 삭제해야 합니다.You should drop the index at the Subscriber before dropping the column at the Publisher, so that the column drop succeeds when it is replicated from the Publisher to the Subscriber. 구독자의 인덱스 때문에 동기화가 실패할 경우 수동으로 인덱스를 삭제하고 병합 에이전트를 다시 실행하십시오.If synchronization fails because of an index at the Subscriber, manually drop the index and then rerun the Merge Agent.

    • 삭제가 가능하려면 제약 조건의 이름이 명시적으로 지정되어야 합니다.Constraints should be explicitly named to allow for dropping. 자세한 내용은 이 항목의 앞에 나오는 "일반적인 고려 사항" 섹션을 참조하십시오.For more information, see the "General Considerations" section earlier in this topic.

트랜잭션 복제Transactional Replication

  • 스키마 변경은 이전 버전의 SQL ServerSQL Server를 실행하는 구독자로 전파되지만 DDL 문에는 구독자에서 해당 버전에 지원되는 구문만 포함되어야 합니다.Schema changes are propagated to Subscribers running previous versions of SQL ServerSQL Server, but the DDL statement should only include syntax supported by the version at the Subscriber.

    구독자에서 데이터를 다시 게시하면 열을 추가 및 삭제하는 스키마 변경만 지원됩니다.If the Subscriber republishes data, the only supported schema changes are adding and dropping a column. 이러한 변경은 게시자에서 ALTER TABLE DDL 구문이 아니라 sp_repladdcolumn(Transact-SQL)sp_repldropcolumn(Transact-SQL)을 사용하여 수행해야 합니다.These changes should be made on the Publisher using sp_repladdcolumn (Transact-SQL) and sp_repldropcolumn (Transact-SQL) rather than ALTER TABLE DDL syntax.

  • SQL Server 이외 구독자로는 스키마 변경이 복제되지 않습니다.Schema changes are not replicated to non-SQL Server Subscribers.

  • SQL ServerSQL Server 이외 게시자로부터는 스키마 변경이 전파되지 않습니다.Schema changes are not propagated from non- SQL ServerSQL Server Publishers.

  • 테이블로 복제되는 인덱싱된 뷰는 변경할 수 없습니다.You cannot alter indexed views that are replicated as tables. 인덱싱된 뷰로 복제되는 인덱싱된 뷰는 변경할 수 있지만 변경하면 인덱싱된 뷰가 아닌 일반 뷰가 됩니다.Indexed views that are replicated as indexed views can be altered, but altering them will cause them to become regular views, rather than indexed views.

  • 게시에서 즉시 업데이트 구독 또는 지연 업데이트 구독을 지원하면 스키마를 변경하기 전에 시스템을 정지해야 합니다. 즉, 게시된 테이블에 대한 모든 작업을 게시자와 구독자에서 중지하고 보류 중인 데이터 변경 내용을 모든 노드에 전파해야 합니다.If the publication supports immediate updating or queued updating subscriptions, the system must be quiesced before making schema changes: all activity on the published table must be stopped at the Publisher and Subscribers, and pending data changes must be propagated to all nodes. 스키마 변경을 모든 노드로 전파하면 게시된 테이블에 대한 작업을 재개할 수 있습니다.After the schema changes have propagated to all nodes, activity can resume on the published tables.

  • 피어 투 피어 토폴로지의 게시에서는 스키마를 변경하기 전에 시스템을 정지해야 합니다.If the publication is in a peer-to-peer topology, the system must be quiesced before making schema changes. 자세한 내용은 복제 토폴로지 정지(복제 Transact-SQL 프로그래밍)를 참조하세요.For more information, see Quiesce a Replication Topology (Replication Transact-SQL Programming).

  • 테이블에 타임스탬프 열을 추가하고 이 타임스탬프를 binary(8)로 매핑하면 아티클이 모든 활성 구독에 대해 다시 초기화됩니다.Adding a timestamp column to a table and mapping the timestamp to binary(8) causes the article to be reinitialized for all active subscriptions.

병합 복제Merge Replication

  • 병합 복제에서 스키마 변경을 처리하는 방법은 게시 호환성 수준 및 스냅숏이 기본 모드(기본값) 또는 문자 모드로 설정되었는지에 의해 결정됩니다.How merge replication handles schema changes is determined by the publication compatibility level, and whether the snapshot is set to native mode (default) or character mode:

    • 스키마 변경을 복제하려면 게시의 호환성 수준이 적어도 90RTM 이상이어야 합니다.To replicate schema changes, the compatibility level of the publication must be at least 90RTM. 구독자에서 이전 버전의 SQL ServerSQL Server를 실행하거나 호환성 수준이 90RTM 이하인 경우에도 sp_repladdcolumn(Transact-SQL)sp_repldropcolumn(Transact-SQL)을 사용하여 열을 추가 및 삭제할 수 있습니다.If Subscribers are running previous versions of SQL ServerSQL Server or the compatibility level is less than 90RTM you can use sp_repladdcolumn (Transact-SQL) and sp_repldropcolumn (Transact-SQL) to add and drop columns. 그러나 이러한 프로시저는 더 이상 사용되지 않습니다.However, these procedures are deprecated.

    • SQL Server 2008SQL Server 2008에서 도입된 데이터 형식의 열을 기존 아티클에 추가하려는 경우 SQL ServerSQL Server 는 다음과 같이 동작합니다.If you try to add to an existing article a column with a data type that was introduced in SQL Server 2008SQL Server 2008, SQL ServerSQL Server has the following behavior:

      100RTM, 기본 스냅숏100RTM, native snapshot 100RTM, 문자 스냅숏100RTM, character snapshot 다른 모든 호환성 수준All other compatibility levels
      hierarchyidhierarchyid 변경 허용Allow change 변경 차단Block change 변경 차단Block change
      geographygeometrygeography and geometry 변경 허용Allow change 변경 허용Allow change 변경 차단Block change
      filestreamfilestream 변경 허용Allow change 변경 차단Block change 변경 차단Block change
      date, time, datetime2datetimeoffsetdate, time, datetime2, and datetimeoffset 변경 허용Allow change 변경 허용Allow change 변경 차단Block change

      SQL Server Compact 구독자는 구독자에서의 이러한 데이터 형식을 변환합니다.SQL Server Compact Subscribers convert these data types at the Subscriber.

  • 스키마 변경을 적용할 때 오류(예: 구독자에서 사용할 수 없는 테이블을 참조하는 외래 키를 추가할 때 발생하는 오류)가 발생하면 동기화가 실패하므로 구독을 다시 초기화해야 합니다.If an error occurs when applying a schema change (such as an error resulting from adding a foreign key that references a table not available at the Subscriber), synchronization fails and the subscription must be reinitialized.

  • 조인 필터 또는 매개 변수가 있는 필터와 관련된 열에 스키마 변경을 수행하면 모든 구독을 다시 초기화하고 스냅숏을 다시 생성해야 합니다.If a schema change is made on a column involved in a join filter or parameterized filter, you must reinitialize all subscriptions and regenerate the snapshot.

  • 병합 복제에서는 문제를 해결하는 동안 스키마 변경을 건너뛸 수 있는 저장 프로시저를 제공합니다.Merge replication provides stored procedures to skip schema changes during troubleshooting. 자세한 내용은 sp_markpendingschemachange(Transact-SQL)sp_enumeratependingschemachanges(Transact-SQL)를 참조하세요.For more information, see sp_markpendingschemachange (Transact-SQL) and sp_enumeratependingschemachanges (Transact-SQL).

관련 항목:See Also

ALTER TABLE(Transact-SQL) ALTER TABLE (Transact-SQL)
ALTER VIEW(Transact-SQL) ALTER VIEW (Transact-SQL)
ALTER PROCEDURE(Transact-SQL) ALTER PROCEDURE (Transact-SQL)
ALTER FUNCTION(Transact-SQL) ALTER FUNCTION (Transact-SQL)
ALTER TRIGGER(Transact-SQL) ALTER TRIGGER (Transact-SQL)
데이터 및 데이터베이스 개체 게시 Publish Data and Database Objects
스키마 변경 내용을 반영하기 위해 사용자 지정 트랜잭션 프로시저 다시 생성 Regenerate Custom Transactional Procedures to Reflect Schema Changes