본 게시물은 개인적인 의견으로 작성되었으니 절대적인 정보가 아닐 수 있습니다. 참고만 하시고 궁금한 사항이 있으시면 연락주세요.

티스토리 뷰

 

방법. 2 Attach(연결)로 해보자.

MoveDB.mdf, ldf 를 COPY하여 연결하면 아래와 같이 메타데이터가 생성이 된다.

2005의 메타데이터정보만 존재한다. 신규 ndf 파일이 생성 되지 않았다.

 

use MoveDB

go

 

select * from sys.database_files

select * from sys.master_files where database_id = db_id('MoveDB')

 

-- SQL Server 2012

use MoveDB

GO

SELECT * FROM sys.fulltext_catalogs

 

 

별도 ftrow_FTCatalog 가 생성되지 않았다. 그럼 어디에 인덱싱이 되어 있을까? 좀 찝찝하다.

 

정상적으로 하기 위해서는 아래와 같이 하는 방법이 좋을 것 같다.

MDF, LDF & 카탈로그 추가를 해주면 좋을 것 같다.

SQL Server 2005에서 아래와 같이 COPY를 해준다.

카탈로그 폴더도 같은 위치에 COPY를 해주고 해당 폴더는 기존의 2005에서 생성했던 파일 전체를 COPY를 하자.

 

SSMS에서 디비연결을 하자.

 

여기서 [카탈로그 추가]를 클릭하여 COPY한 폴더를 선택한다.

단, 주의할 것은 최상위 폴더를 선택해야 된다. 하위 폴더를 선택을 하게 되면 연결 실패가 발생한다.

 

카탈로그를 추가하여 [확인]을 누르면 놀라운 일이 발생한다.

기존의 COPY 했던 카탈로그폴더가 없어지고 ftrow_FTCatalog.ndf 이 생성이 된다.

 

데이터베이스의 메타데이터 정보를 확인해보자.

백업/복원했던 메타정보와 동일하게 생성이 되었다.

 

use MoveDB

go

 

select * from sys.database_files

select * from sys.master_files where database_id = db_id('MoveDB')

 

메타정보에 대하여 좀 더 확인해보자.

기존의 sysft_FTCatalog 에 대한 데이터파일 정보는 어떻게 되는 것일까?

select file_id, type, type_desc, name, replace(physical_name, 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL', '...'), state

from sys.database_files

여기서 state 값으로 확인하면 된다.

0 = ONLINE, 6 = OFFLINE 이다. 해당 2005에 대한 데이터메타정보는 오프라인으로 사용되지 않는 것을 볼 수 있다.

 

참고.1 전체카탈로그 및 인덱스의 정보를 확인해보자.

아래 쿼리는 해당 인덱싱정보가 어느 파일그룹에 존재하는지 확인하면 좋을 것 같다.

위에서 카탈로그 추가를 안하고 Attach만 했을 경우에는 인덱싱정보가 Primary 파일그룹에 생성이 된다.

 

use MoveDB

go

 

SELECT

    t.name AS TableName,

    c.name AS FTCatalogName ,

    f.name AS FileGroupName,

    i.name AS UniqueIdxName,

    cl.name AS ColumnName

FROM sys.tables t

INNER JOIN sys.fulltext_indexes fi ON t.[object_id] = fi.[object_id]

INNER JOIN sys.fulltext_index_columns ic ON ic.[object_id] = t.[object_id]

INNER JOIN sys.columns cl ON     ic.column_id = cl.column_id    AND ic.[object_id] = cl.[object_id]

INNER JOIN sys.fulltext_catalogs c ON fi.fulltext_catalog_id = c.fulltext_catalog_id

INNER JOIN sys.filegroups f ON fi.data_space_id = f.data_space_id

INNER JOIN sys.indexes i ON fi.unique_index_id = i.index_id    AND fi.[object_id] = i.[object_id];

 

 

SELECT display_term, column_id, document_count

FROM sys.dm_fts_index_keywords (DB_ID('MoveDB'), OBJECT_ID('orders'))

 

-- 지정된 테이블에 연결된 전체 텍스트 인덱스의 문서 수준 내용에 대한 정보를 반환합니다

SELECT *

FROM sys.dm_fts_index_keywords_by_document (DB_ID('MoveDB'), OBJECT_ID('orders'))

 

 

[참고문서]

sys.dm_fts_index_keywords(Transact-SQL)

https://msdn.microsoft.com/ko-kr/library/cc280900(v=sql.120).aspx

지정된 테이블에 대한 전체 텍스트 인덱스 내용에 관한 정보를 반환합니다.

 

 

참고.2 오류 시나리오.

위에서 언급했던 카탈로그 추가 시 상위폴더(FTCatalog) 선택이 아닌 하위폴더(FTCatalog\MssearchCatalogDir)까지 선택을 하게 되면 아래와 같이 오류가 발생한다.

 

물리적 파일 "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER2\MSSQL\DATA\FTCatalog\MssearchCatalogDir"을(를) 열 수 없습니다. 운영 체제 오류 5: "5(액세스가 거부되었습니다.)". (Microsoft SQL Server, 오류: 5120)

 

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday