ALTER FULLTEXT INDEX(Transact-SQL)

전체 텍스트 인덱스의 속성을 변경합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

ALTER FULLTEXT INDEX ON table_name
   { ENABLE 
   | DISABLE
   | SET CHANGE_TRACKING { MANUAL | AUTO | OFF }
   | ADD ( column_name 
     [ TYPE COLUMN type_column_name ] 
     [ LANGUAGE language_term ] [,...n] )
     [ WITH NO POPULATION ]
   | DROP ( column_name [,...n] )
     [ WITH NO POPULATION ] 
   | START { FULL | INCREMENTAL | UPDATE } POPULATION
   | {STOP | PAUSE | RESUME } POPULATION 
   | SET STOPLIST { OFF| SYSTEM | stoplist_name }
     [ WITH NO POPULATION ] 
   }
[;]

인수

  • table_name
    전체 텍스트 인덱스에 있는 열을 포함하는 테이블 또는 인덱싱된 뷰의 이름입니다. 선택적으로 데이터베이스 및 테이블 소유자 이름을 지정할 수 있습니다.

  • ENABLE | DISABLE
    table_name에 대한 전체 텍스트 인덱스 데이터를 수집할지 여부를 SQL Server에 알립니다. ENABLE은 전체 텍스트 인덱스를 활성화하고 DISABLE은 전체 텍스트 인덱스를 비활성화합니다. 인덱스가 비활성화되어 있으면 테이블에서 전체 텍스트 쿼리가 지원되지 않습니다.

    전체 텍스트 인덱스를 비활성화하면 변경 내용 추적 기능을 해제할 수 있지만 전체 텍스트 인덱스는 유지할 수 있으므로 ENABLE을 사용하여 언제든지 다시 활성화할 수 있습니다. 전체 텍스트 인덱스를 비활성화해도 전체 텍스트 인덱스 메타데이터는 시스템 테이블에 유지됩니다. 전체 텍스트 인덱스가 비활성화되어 있는 경우 CHANGE_TRACKING이 활성화된 상태(자동 또는 수동 업데이트)이면 인덱스 상태가 고정되고 진행 중인 탐색이 중지되며 테이블 데이터 변경 내용이 추적 또는 인덱스에 전파되지 않습니다.

  • SET CHANGE_TRACKING {MANUAL | AUTO | OFF}
    SQL Server에서 전체 텍스트 인덱스가 적용되는 테이블 열의 변경 내용(업데이트, 삭제 또는 삽입)을 전체 텍스트 인덱스에 전파할지 여부를 지정합니다. WRITETEXT 및 UPDATETEXT를 통한 데이터 변경 내용은 전체 텍스트 인덱스에 반영되지 않고 변경 내용 추적 시 선택되지도 않습니다.

    [!참고]

    변경 내용 추적과 WITH NO POPULATION 간의 상호 작용에 대한 자세한 내용은 이 항목의 뒷부분에 나오는 "주의"를 참조하십시오.

  • MANUAL
    ALTER FULLTEXT INDEX … START UPDATE POPULATION Transact-SQL 문을 호출하면 추적된 변경 내용이 수동으로 전파되도록 지정합니다(수동 채우기). SQL Server 에이전트를 사용하여 이 Transact-SQL 문을 주기적으로 호출할 수 있습니다.

  • AUTO
    기본 테이블에서 데이터가 수정되면 추적된 변경 내용이 자동으로 전파되도록 지정합니다(자동 채우기). 변경 내용은 자동으로 전파되지만 전체 텍스트 인덱스에 즉시 반영되지 않을 수 있습니다. 기본값은 AUTO입니다.

  • OFF
    SQL Server에서 인덱싱된 데이터의 변경 내용 목록을 유지하지 않도록 지정합니다.

  • ADD | DROP column_name
    전체 텍스트 인덱스에서 추가하거나 삭제할 열을 지정합니다. 열은 char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary 또는 varbinary(max) 형식이어야 합니다.

    이전에 전체 텍스트 인덱싱을 위해 활성화된 열에서만 DROP 절을 사용하십시오.

    ADD 절에서 TYPE COLUMN 및 LANGUAGE를 사용하여 column_name에서 이러한 속성을 설정할 수 있습니다. 열이 추가되면 이 열에 대해 전체 텍스트 쿼리가 실행되도록 테이블의 전체 텍스트 인덱스를 다시 채워야 합니다.

    [!참고]

    전체 텍스트 인덱스에서 열을 추가하거나 삭제한 후 전체 텍스트 인덱스가 채워지는지 여부는 변경 내용 추적이 설정되어 있는지 여부와 WITH NO POPULATION이 지정되어 있는지 여부에 따라 달라집니다. 자세한 내용은 이 항목의 뒷부분에 나오는 "주의"를 참조하십시오.

  • TYPE COLUMN type_column_name
    varbinary, varbinary(max) 또는 image 문서의 문서 유형을 보관하는 데 사용되는 테이블 열의 이름인 type_column_name을 지정합니다. 유형 열이라고 하는 이 열에는 사용자 제공 파일 확장명(.doc, .pdf, .xls 등)이 포함됩니다. 유형 열은 char, nchar, varchar 또는 nvarchar 유형이어야 합니다.

    TYPE COLUMN type_column_name은 column_name이 varbinary, varbinary(max) 또는 image 열을 지정하여 데이터가 이진 데이터로 저장되는 경우에만 지정합니다. 그렇지 않으면 SQL Server에서 오류가 반환됩니다.

    [!참고]

    인덱싱할 때 전체 텍스트 엔진은 각 테이블 행의 유형 열에 있는 약어를 사용하여 column_name의 문서에 사용할 전체 텍스트 검색 필터를 식별합니다. 이 필터는 문서를 이진 스트림으로 로드하고 서식 정보를 제거하며 문서의 텍스트를 단어 분리기 구성 요소로 보냅니다. 자세한 내용은 전체 텍스트 검색 필터를 참조하십시오.

  • LANGUAGE language_term
    column_name에 저장된 데이터의 언어입니다.

    language_term은 옵션이며 언어의 LCID(로캘 ID)에 해당하는 문자열, 정수 또는 16진수 값으로 지정할 수 있습니다. language_term을 지정할 경우 해당 언어는 검색 조건의 모든 요소에 적용됩니다. 값이 지정되지 않으면 SQL Server 인스턴스의 기본 전체 텍스트 언어가 사용됩니다.

    sp_configure 저장 프로시저를 사용하여 SQL Server 인스턴스의 기본 전체 텍스트 언어에 대한 정보에 액세스할 수 있습니다. 자세한 내용은 default full-text language 옵션을 참조하십시오.

    문자열로 지정하는 경우 language_term은 syslanguages 시스템 테이블의 alias 열 값에 해당합니다. 문자열은 'language_term'과 같이 작은따옴표로 묶어야 합니다. 정수로 지정하는 경우 language_term은 언어를 식별하는 실제 LCID입니다. 16진수 값으로 지정하는 경우 language_term은 0x로 시작하는 16진수 LCID 값입니다. 16진수 값은 선행 0을 포함하여 8자리 수를 초과할 수 없습니다.

    값이 DBCS(더블바이트 문자 집합) 형식인 경우 SQL Server는 값을 유니코드로 변환합니다.

    단어 분리기 및 형태소 분석기와 같은 리소스는 language_term으로 지정된 언어에 사용해야 합니다. 이러한 리소스가 지정된 언어를 지원하지 않는 경우 SQL Server에서 오류를 반환합니다.

    비 BLOB 및 비 XML 열이 여러 언어로 된 텍스트 데이터를 포함하거나 열에 저장된 텍스트의 언어를 알 수 없는 경우 중립(0x0) 언어 리소스를 사용합니다. XML 유형 또는 BLOB 유형의 열로 저장된 문서의 경우 인덱싱 시에 문서 내의 언어 인코딩이 사용됩니다. 예를 들어 XML 열에서는 XML 문서의 xml:lang 특성으로 언어를 식별합니다. 쿼리할 때 language_term이 전체 텍스트 쿼리의 일부로 지정되지 않은 경우에는 language_term에 지정된 이전 값이 전체 텍스트 쿼리의 기본 언어로 사용됩니다.

  • [ ,...n]
    ADD 또는 DROP 절에 대해 여러 열을 지정할 수 있음을 나타냅니다. 여러 열을 지정하는 경우 각 열을 쉼표로 구분하십시오.

  • WITH NO POPULATION
    ADD 또는 DROP 열 작업이나 SET STOPLIST 작업 후 전체 텍스트 인덱스가 채워지지 않도록 지정합니다. 사용자가 START...POPULATION 명령을 실행하는 경우에만 인덱스가 채워집니다.

    NO POPULATION이 지정되어 있는 경우 SQL Server에서는 인덱스를 채우지 않습니다. 인덱스는 사용자가 ALTER FULLTEXT INDEX...START POPULATION 명령을 제공하는 경우에만 채워집니다. NO POPULATION이 지정되어 있지 않은 경우에는 SQL Server에서 인덱스를 채웁니다.

    CHANGE_TRACKING을 활성화하고 WITH NO POPULATION을 지정하면 SQL Server에서 오류를 반환합니다. CHANGE_TRACKING이 설정되어 있고 WITH NO POPULATION이 지정되어 있지 않은 경우 SQL Server에서는 인덱스에 대해 전체 채우기를 수행합니다.

    [!참고]

    변경 내용 추적과 WITH NO POPULATION 간의 상호 작용에 대한 자세한 내용은 이 항목의 뒷부분에 나오는 "주의"를 참조하십시오.

  • START {FULL|INCREMENTAL|UPDATE} POPULATION
    table_name의 전체 텍스트 인덱스 채우기를 시작하도록 SQL Server에 알립니다. 전체 텍스트 인덱스 채우기가 이미 진행 중이면 SQL Server에서 경고를 반환하고 채우기를 새로 시작하지 않습니다.

    • FULL
      행이 이미 인덱싱된 경우에도 전체 텍스트 인덱싱을 위해 테이블의 모든 행을 검색하도록 지정합니다.

    • INCREMENTAL
      전체 텍스트 인덱싱을 위해 마지막 채우기 이후 수정된 행만 검색하도록 지정합니다. INCREMENTAL은 테이블에 timestamp 유형의 열이 있는 경우에만 적용할 수 있습니다. 전체 텍스트 카탈로그의 테이블에 timestamp 유형의 열이 없으면 테이블은 FULL 채우기를 수행합니다.

    • UPDATE
      변경 내용 추적 인덱스가 마지막으로 업데이트된 후에 모든 삽입, 업데이트 또는 삭제를 처리하도록 지정합니다. 변경 내용 추적 채우기는 테이블에서 활성화해야 하지만 백그라운드 인덱스 업데이트 또는 자동 변경 내용 추적을 설정해서는 안 됩니다.

  • {STOP | PAUSE | RESUME } POPULATION
    진행 중인 채우기를 중지 또는 일시 중지하거나, 일시 중지된 채우기를 중지 또는 다시 시작합니다.

    STOP POPULATION으로 자동 변경 내용 추적 또는 백그라운드 인덱스 업데이트가 중지되지는 않습니다. 변경 내용 추적을 중지하려면 SET CHANGE_TRACKING OFF를 사용합니다.

    PAUSE POPULATION 및 RESUME POPULATION은 전체 채우기에만 사용할 수 있습니다. 다른 채우기는 탐색이 중지된 위치부터 다시 시작하기 때문에 두 옵션이 적용되지 않습니다.

  • SET STOPLIST { OFF| SYSTEM | stoplist_name }
    인덱스와 연결된 전체 텍스트 중지 목록을 변경합니다.

    • OFF
      중지 목록을 전체 텍스트 인덱스와 연결하지 않도록 지정합니다.

    • SYSTEM
      기본 전체 텍스트 시스템 STOPLIST가 이 전체 텍스트 인덱스에 사용되도록 지정합니다.

    • stoplist_name
      전체 텍스트 인덱스와 연결할 중지 목록의 이름을 지정합니다.

    자세한 내용은 중지 단어 및 중지 목록을 참조하십시오.

주의

xml 열에서는 XML 요소의 내용을 인덱싱하지만 XML 태그를 무시하는 전체 텍스트 인덱스를 만들 수 있습니다. 특성 값은 숫자 값이 아니면 전체 텍스트 인덱싱됩니다. 요소 태그는 토큰 경계로 사용됩니다. 여러 언어를 포함하는 올바른 형식의 XML 또는 HTML 문서와 조각이 지원됩니다. 자세한 내용은 XML 열의 전체 텍스트 인덱스를 참조하십시오.

변경 내용 추적과 NO POPULATION 매개 변수 간의 상호 작용

전체 텍스트 인덱스가 채워지는지 여부는 변경 내용 추적이 설정되어 있는지 여부와 ALTER FULLTEXT INDEX 문에 WITH NO POPULATION이 지정되어 있는지 여부에 따라 달라집니다. 다음 표에서는 이러한 상호 작용의 결과를 요약합니다.

변경 내용 추적

WITH NO POPULATION

결과

설정 안 됨

지정 안 됨

인덱스에 대해 전체 채우기가 수행됩니다.

설정 안 됨

지정됨

ALTER FULLTEXT INDEX...START POPULATION 문이 실행될 때까지 인덱스 채우기가 발생하지 않습니다.

사용

지정됨

오류가 발생하고 인덱스가 변경되지 않습니다.

사용

지정 안 됨

인덱스에 대해 전체 채우기가 수행됩니다.

전체 텍스트 인덱스 채우기에 대한 자세한 내용은 전체 텍스트 인덱스 채우기를 참조하십시오.

사용 권한

사용자는 테이블 또는 인덱싱된 뷰에 대한 ALTER 사용 권한을 가지거나 sysadmin 고정 서버 역할, db_ddladmin 또는 db_owner 고정 데이터베이스 역할의 멤버여야 합니다.

SET STOPLIST를 지정한 경우 사용자는 중지 목록에 대한 REFERENCES 사용 권한이 있어야 합니다. 이 사용 권한은 STOPLIST 소유자가 부여할 수 있습니다. 또한 REFERENCES 사용 권한을 부여하려면 ALTER FULLTEXT CATALOG 사용 권한이 필요합니다.

[!참고]

public에는 SQL Server의 기본 중지 목록에 대한 REFERENCE 권한이 부여됩니다.

1. 수동 변경 내용 추적 설정

다음 예에서는 AdventureWorks2008R2 데이터베이스의 JobCandidate 테이블에서 전체 텍스트 인덱스에 대한 수동 변경 내용 추적을 설정합니다.

USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   SET CHANGE_TRACKING MANUAL;
GO

2. 전체 채우기 시작

다음 예에서는 AdventureWorks2008R2 데이터베이스의 JobCandidate 테이블에서 전체 텍스트 인덱스에 대한 전체 채우기를 시작합니다.

USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate 
   START FULL POPULATION;
GO