훗. ASP.NET 프론티어 주제에 SQL 까지 넘보고 있는 저는 접니다.

오늘 2012에 재밌는 기능이 하나 있어서 한번 같이 훑어 보고자 합니다.

이름하여 FileTable 입니다. 파일을 관리하는 테이블인 느낌이 확 오죠.

제가 왜 ASP.NET 주제에 이 강좌 올리는 이유는..

... 2012 강좌에 왜 시퀀스는 넣고 FileTable 은 딸랑 빠졌는지..

이 강좌는 RTM에서 직접 실행한 결과를 토대로 작성했습니다. 출시된지가 언젠데..


흐음.. 먼저 설정해야 할 것은 바로... 먼저 서버부터 설정해야합니다.

아우.. 귀찮아도 할수없죠. 시작 -> SQL Server 2012 -> 구성 도구 -> 구성 관리자

이렇게 갑니다. 그다음 SQL Server 서비스 간 뒤, 돌아가고 있는 SQL Server 에서 속성 클릭.

FILESTREAM 탭으로 갑니다.

capture18.png 

죄다 체크해주세요. 원격에서 사용 못하게 한다면야 원격 클라이언트 뭐시기에 체크 풀면 됩니다.

그리고 매니지먼트 스튜디오 가서 sa 나 윈도우 계정으로 접속한 다음, 아래 코드를 입력합니다.

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

그리고 서버를 재시작합니다. 이런.. 쉣..


이렇게 해서 재시작하면, 데이터베이스를 새로 만듭니다.

 capture19.png

만약 위처럼 서버 설정하면 FILESTREAM 부분에 추가 버튼이 활성화 되있을 겁니다. 그냥은 추가버튼 비활성화입니다.

어쨌든 추가해서 이름 아무렇게 입력하고 기본값에 체크합니다. 체크 안하면 나중에 귀찮아질겁니다.

capture20.png 

그다음 "파일" 로 갑니다 데이터베이스 파일 하나 추가 합니다. 이름 아무렇게나 잘 지어주세요.

그리고 방금 만든 파일 그룹을 선택합니다. 이제 저 논리적 이름은 파일 테이블의 루트 폴더가 됩니다.

capture21.png 

또 하나 거쳐야 할 것이 있는데 바로.. 일단 옵션 가셔서! FILESTREAM 부분에서

방금 만든 논리적 이름을 디렉터리에 추가하시고, 트랜잭션 하지 않은 엑세스를 FULL 로 하세요.

capture23.png

그리고 저장합니다. 질의문으로 작성하고자 하시는 분, 아래꺼 참고하시면 됩니다.

CREATE DATABASE MyFileTableTest
ON  PRIMARY
(
    NAME = N'MyFileTableTest', --DB명
    FILENAME = N'C:\FileTable\MyFileTableTest.mdf' --DB 파일 경로
),
FILEGROUP FilestreamFG CONTAINS FILESTREAM
(
    NAME = MyFileStreamData, --FILESTREAM 그룹명
    FILENAME= 'C:\FileTable\Data' --저장 경로
)
LOG ON
(
    NAME = N'MyFileTableTest_Log', --로그명
    FILENAME = N'C:\FileTable\MyFileTableTest_log.ldf' --로그경로

)
WITH FILESTREAM
(
    NON_TRANSACTED_ACCESS = FULL, --비트랜잭션 접근을 모두 허용
    DIRECTORY_NAME = N'FileTable' --FILESTREAM 적용 경로
)

참고로 폴더 알아서 만들어줄거라 생각하지 마세요. 디렉터리 못찾는다고 오류 만들면 얼렁 디렉터리 만들고 F5 치면 됩니다.

자. 어쨌든 DB 준비는 끝났으니 이제 본론으로 갈 시간! 파일테이블을 만들어 보죠.

테이블 -> FileTable 에 새 파일테이블 누르면 UI는 안나오고 쿼리문만 딸랑 나올겁니다.

capture11.png 

네.. 치사 빤스입니다..ㅋㅋ 걱정 마세요. 간단하게 작성 가능합니다.

USE MyFileTableTest
go

CREATE TABLE MyDocumentStore AS FileTable
WITH
(
    FileTable_Directory = 'MyDocumentStore',
    FileTable_Collate_Filename = database_default
);
GO

테이블 만들 때 테이블명 뒤에 AS FileTable 이 붙습니다 .그리고 칼럼명 만들 필요 없고,

대신 디렉터리와 정렬 이름을 지정하는거 2가지면 됩니다.

디렉터리는 그냥 하위 디렉터리이니 그냥 써주시고. 정렬 이름은 묻지도 따지지도 말고 database_default 하세요.

그럼 테이블 만들기 끝~


그럼 한번 셀렉트 날려봅시다.

capture24.png 


칼럼명 드릅게 많군요. 자. 이제 본격적으로 FileTable 이 어떻게 쓰는지 지금부터 시작합니다.

방금 서버에서 만든 경로로 이동합니다. 이동하려면 테이블 오른쪽 클릭 후 탐색 클릭!

capture25.png

그럼 탐색기에 해당 폴더로 이동됩니다.capture26.png 

흐음.. 아무것도 없군요. 파일 몇개 집어넣어 보도록 하겠습니다. 폴더가 심심해하니까 넣어주죠..

capture27.png 


그런 다음 파일 테이블을 다시 셀렉트 하겠습니다.

capture28.png


올ㅋ 탐색기에 올라간 3개의 파일이 눈에 보입니다. 이제 이녀석의 정체를 눈치채셨습니까?

바로 파일을 바로바로 테이블로 관리가 가능하다는 것이죠. 파일 하나 삭제하면? 네. 당연히 삭제한 파일은 뵈지도 않을 겁니다.

그럼 DB상에서 파일 다룰 수 있나요? 당연히 가능합니다. UPDATE 문으로 바로 예제 보여드립니다.

UPDATE MyDocumentStore
SET name = 'dummy.csv'
WHERE stream_id = '70B17C3A-698F-E111-A9A1-A6BB45ECFB35'

파일 이름을 바꿔봤습니다.

일단 테이블에서 보면? 반영이 잘되어 있습니다.

capture29.png

그렇다면 탐색기에서는?

capture30.png 

분명 아무짓도 안했는데 파일명이 바뀌어 있는 모습을 볼 수 있을 겁니다.


자. 여기까지 하겠습니다.

파일 테이블 둘러보면서 어떠셨나요? 아마 놀라울 겁니다.

여태까지 파일과 DB가 따로따로 놀았지만 이제는 아예 DB에서 퉁쳐버리는 이 SQL Server 의 센스를 보세요.

첨부파일 관리가 편리해지는 소리 들으셨습니까?


지금까지 FileTable 에 대해 알아봤습니다.

감솨~


참고자료 및 출처

Enable the Prerequisites for FileTable http://msdn.microsoft.com/en-us/library/gg509097.aspx

SQL Server 2012 FileTable – Part 1 http://www.geniiius.com/blog/sql-server-2012-filetable-part-1/





profile
20대 언제나 쿨한 개발(犬足)자.