적용 대상:SQL Server
파일을 FileTable로 로드 또는 마이그레이션하는 방법에 대해 설명합니다.
FileTable로 파일 로드 또는 마이그레이션
파일을 FileTable로 로드하거나 마이그레이션하기 위해 선택하는 방법은 파일이 현재 저장된 위치에 따라 달라집니다.
| 파일의 현재 위치 | 마이그레이션 옵션 |
|---|---|
| 파일이 현재 파일 시스템에 저장되어 있습니다. SQL Server에서는 파일에 대해 알지 못합니다. |
FileTable은 Windows 파일 시스템의 폴더로 표시되므로 파일을 이동하거나 복사하는 데 사용할 수 있는 방법을 사용하여 파일을 새 FileTable에 쉽게 로드할 수 있습니다. 이러한 메서드에는 Windows 탐색기, xcopy 및 robocopy를 포함한 명령줄 옵션, 사용자 지정 스크립트 또는 애플리케이션이 포함됩니다. 기존 폴더를 FileTable로 변환할 수 없습니다. |
| 파일이 현재 파일 시스템에 저장되어 있습니다. SQL Server에서는 파일에 대한 포인터가 포함된 메타데이터의 테이블이 포함되어 있습니다. |
첫 번째 단계는 앞에서 설명한 방법 중 하나를 사용하여 파일을 이동하거나 복사하는 것입니다. 두 번째 단계는 파일의 새 위치를 가리키도록 기존 메타데이터 테이블을 업데이트하는 것입니다. 자세한 내용은 이 문서의 예: 파일 시스템에서 FileTable로 파일 마이그레이션을 참조하세요. |
방법: FileTable로 파일 로드
다음과 같은 방법을 사용하여 파일을 FileTable로 로드할 수 있습니다.
Windows 탐색기에서 원본 폴더의 파일을 새 FileTable 폴더로 끌어 옵니다.
명령 프롬프트 또는 일괄 처리 파일 또는 스크립트에서
move,copy,xcopy또는robocopy와 같은 명령줄 옵션을 사용합니다.C# 또는 Visual Basic .NET 파일을 이동하거나 복사하는 사용자 지정 애플리케이션을 작성합니다.
System.IO네임스페이스에서 메서드를 호출합니다.
예: 파일 시스템에서 FileTable로 파일 마이그레이션
이 시나리오에서는 파일이 파일 시스템에 저장되고 SQL Server에 파일에 대한 포인터가 포함된 메타데이터 테이블이 있습니다. 파일을 FileTable로 이동한 다음 메타데이터에 있는 각 파일의 원래 UNC 경로를 FileTable UNC 경로로 바꾸려고 합니다. GetPathLocator 함수를 사용하면 이 목표를 달성하는 데 도움이 됩니다.
이 예의 경우 사진에 대한 데이터가 들어 있는 PhotoMetadata이라는 기존 데이터베이스 테이블이 있다고 가정합니다. 이 테이블에는 UNCPath 파일의 실제 UNC 경로가 포함되어 있는 varchar(512) 형식의 .jpg열이 있습니다.
파일 시스템의 이미지 파일을 FileTable로 마이그레이션하려면 다음을 수행해야 합니다.
파일을 저장할 새 FileTable을 만듭니다. 이 예에서는 테이블 이름으로
dbo.PhotoTable을 사용하지만 테이블을 만드는 코드는 표시되지 않습니다.xcopy 또는 유사한 도구를 사용하여 디렉터리 구조가 있는
.jpg파일을 FileTable의 루트 디렉터리에 복사합니다.다음 예제와 유사한 코드를 사용하여
PhotoMetadata테이블의 메타데이터를 수정합니다.
-- Add a path locator column to the PhotoMetadata table.
ALTER TABLE PhotoMetadata ADD pathlocator HIERARCHYID;
-- Get the root path of the Photo directory on the File Server.
DECLARE @UNCPathRoot VARCHAR(100) = '\\RemoteShare\Photographs';
-- Get the root path of the FileTable.
DECLARE @FileTableRoot VARCHAR(1000);
SELECT @FileTableRoot = FileTableRootPath('dbo.PhotoTable');
-- Update the PhotoMetadata table.
-- Replace the File Server UNC path with the FileTable path.
UPDATE PhotoMetadata
SET UNCPath = REPLACE(UNCPath, @UNCPathRoot, @FileTableRoot);
-- Update the pathlocator column to contain the pathlocator IDs from the FileTable.
UPDATE PhotoMetadata
SET pathlocator = GetPathLocator(UNCPath);
FileTable로 파일 대량 로드
FileTable은 대량 작업에 대한 일반 테이블처럼 동작합니다. FileTable에는 파일 및 디렉터리 네임스페이스의 무결성이 유지되도록 하는 시스템 정의 제약 조건이 있습니다. 이러한 제약 조건은 FileTable에 대량으로 로드된 데이터에 대해 확인해야 합니다. 일부 대량 삽입 작업을 사용하면 테이블 제약 조건을 무시할 수 있으므로 다음 요구 사항이 적용됩니다.
제약 조건을 적용하는 대량 로드 작업은 다른 테이블과 마찬가지로 FileTable에 대해 실행할 수 있습니다. 이 카테고리에는 다음과 같은 작업이 포함됩니다.
-
절을 사용하는
CHECK_CONSTRAINTS. -
BULK INSERT절을 사용하는CHECK_CONSTRAINTS. -
INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)절을 사용하지 않는IGNORE_CONSTRAINTS.
-
절을 사용하는
FileTable 시스템 정의 제약 조건을 사용하지 않도록 설정하지 않으면 제약 조건을 적용하지 않는 대량 로드 작업이 실패합니다. 이 카테고리에는 다음과 같은 작업이 포함됩니다.
-
절을 사용하지 않는
CHECK_CONSTRAINTS. -
BULK INSERT절을 사용하지 않는CHECK_CONSTRAINTS. -
INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)이(가) 포함된IGNORE_CONSTRAINTS절.
-
절을 사용하지 않는
방법: FileTable로 파일 대량 로드
다양한 방법을 사용하여 FileTable에 파일을 대량 로드할 수 있습니다.
CHECK_CONSTRAINTS 절을 사용하여 호출합니다.
FileTable 네임스페이스를 사용하지 않도록 설정하고, CHECK_CONSTRAINTS 절을 사용하지 않고 호출합니다. 그런 다음에 FileTable 네임스페이스를 다시 사용하도록 설정합니다.
FileTable 제약 조건을 해제하는 방법은 FileTables 관리를 참조하세요.
방법: 대량 로드에 대한 FileTable 제약 조건 사용 안 함
시스템 정의 제약 조건을 적용하는 오버헤드 없이 파일을 FileTable로 대량 로드하려면 제약 조건을 일시적으로 사용하지 않도록 설정할 수 있습니다. 자세한 내용은 FileTables 관리를 참조하세요.