הבלוג של גרי רשף

12/07/2010

שימוש ב- File Stream

Filed under: Uncategorized — תגיות: , — גרי רשף @ 10:23

אחת הבעיות שנתקלים אלו שרוצים לשמור בבסיס הנתונים קבצים כמו תמונות או וידאו וכו' בתוך שדות BLOB הוא שזה מנתח את קבצי הדטבייס, ומאוד לא שימושי מעשית בשל כך.
ה-File Stream שהתווסף בגרסת 2008 מאפשר להוסיף קבצים כך שהם מאוחסנים כקבצים נפרדים במחיצה יעודית ואינם משפיעים על גודלו של הדטבייס.

ניצור דטבייס חדש במחיצה מתאימה:

Use Master

Go


If Exists (Select Name From sys.databases Where Name = 'FileStream') Drop Database FileStream

Go


xp_cmdshell 'If Exist C:\FileStream RD C:\FileStream/S/Q'

Go


xp_cmdshell 'MD C:\FileStream'

Go


Create Database FileStream  On Primary(Name='FileStream',

                        FileName='c:\FileStream\FileStream.mdf')

        Log On (Name='FileStreamDB_log',

                FileName = 'c:\FileStream\FileStreamDB_log.ldf')

Go


Alter Database FileStream

Add FileGroup FileStreamGroup Contains FileStream

Go


Alter Database FileStream

Add File (Name = N'FileStreamDB_FSData',

        FileName = N'c:\FileStream\FileStreamData')

To FileGroup FileStreamGroup

Go

ניצור טבלה מתאימה:

Use FileStream

Go


Create Table T_FileStream(ID Int Identity(1,1) Not Null,

                        FileStream VarBinary(Max) FileStream Null,

                        FileStreamGuid UniqueIdentifier RowGuidCol Not Null Unique Default NewSequentialID(),

                        Taarih DateTime Default GetDate())

                        FileStream_On FileStreamGroup

Go

כדי לאפשר שימוש ב-File Stream יש לאפשר זאת בשלב ראשון כך:

Exec sp_configure 'show advanced options'

Go

Exec sp_configure filestream_access_level, 2

Go

Reconfigure With Override

Go

ולאחר מכן, בתפריט של SQL Server (דרך Start/התחל) => Configuration Tools => ו-SQL Server Configuration Manager:

יש לבחור ב-SQL Server Services, קליק ימני על השרת המתאים (אם יש כמה), Properties ולסמן את שלוש האפשרויות.

image

יש להכין מספר קבצים, למשל- את חמשת הקבצים הבאים ניתן לשמור במחיצה C:\Tmp בשם x.jpg (כאשר ס בדוגמה שלהלן הוא 1 או 2 או 3 או 4 או 5) על ידי קליק ימני ו-Save File As:

image image image image image

(אלו הם חמישה קבצים גרפיים- מעשה ידי להתפאר, למי שתמה על מקור יצירות האומנות האלו)

ונייבא אותם לטבלה הנ"ל כך:

Insert Into T_FileStream (FileStream)

Select * From OpenRowset(Bulk N'C:\Tmp\1.jpg' ,Single_Blob) T;

Insert Into T_FileStream (FileStream)

Select * From OpenRowset(Bulk N'C:\Tmp\2.jpg' ,Single_Blob) T;

Insert Into T_FileStream (FileStream)

Select * From OpenRowset(Bulk N'C:\Tmp\3.jpg' ,Single_Blob) T;

Insert Into T_FileStream (FileStream)

Select * From OpenRowset(Bulk N'C:\Tmp\4.jpg' ,Single_Blob) T;

Insert Into T_FileStream (FileStream)

Select * From OpenRowset(Bulk N'C:\Tmp\5.jpg' ,Single_Blob) T;

Go

בטבלה לא נראה כמובן אף תמונה אלא רק קודים הקסדצימליים, אך אם נחטט במחיצות שמתחת ל-c:\FileStream\FileStreamData נמצא תת-תת-מחיצה בה יש חמישה קבצים כנגד חמשת הקבצים שקלטנו לטבלה, ומי שיעתיק אחד מהם למחיצה אחרת וישנה את הסיומת שלו למקורית (jpg בדוגמה הזו) – יוכל לפתוח אותו כקובץ גרפי.

ל-SQL Serverעצמו אין יכולת מובנית לשחזור הקבצים או ליצוא שלהם מהטבלה למחיצה (כשם שאפשר לייבא), ולמיטב הבנתי יש צורך בכלים אחרים כדי לעשות זאת או כדי להשתמש במידע שבטבלה.

מודעות פרסומת

6 תגובות »

  1. […] פי הצורך, וליצור ממשק משתמש משל עצמנו. מגרסת 2008 התווספה אופציית ה-FileStream: כעת יש אפשרות לשמור את הקבצים החיצוניים כך שאינם חלק […]

    פינגבאק של FileTable ב-SQL Server 2012 - גרי רשף — 22/12/2011 @ 21:02

  2. […] פי הצורך, וליצור ממשק משתמש משל עצמנו. מגרסת 2008 התווספה אופציית ה-FileStream: כעת יש אפשרות לשמור את הקבצים החיצוניים כך שאינם חלק […]

    פינגבאק של FileTable ב-SQL Server 2012 « הבלוג של גרי רשף — 22/12/2011 @ 20:54

  3. […] בנפרד על הדיסק והדטבייס שומר על גודל שפוי (כתבתי על כך פוסט בעבר), אבל אני אעסוק כאן דווקא בפתרון […]

    פינגבאק של שמירת קבצים בתוך טבלה - גרי רשף — 18/09/2011 @ 18:45

  4. […] בנפרד על הדיסק והדטבייס שומר על גודל שפוי (כתבתי על כך פוסט בעבר), אבל אני אעסוק כאן דווקא בפתרון […]

    פינגבאק של שמירת קבצים בתוך טבלה « הבלוג של גרי רשף — 18/09/2011 @ 18:42

  5. דוגמא לקריאה וכתיבה באמצעות קוד
    http://www.mssqltips.com/tip.asp?tip=1489
    העניין הוא שיש מקרים נדירים להשתמש בשמירה מסוג זה.

    תגובה של פלג — 12/07/2010 @ 14:04

    • תודה על המידע!
      דוט נט אינו התחום שלי, אבל ביום מן הימים אצטרך להתיידד איתו יותר..

      תגובה של גרי רשף — 14/07/2010 @ 14:11


RSS feed for comments on this post. TrackBack URI

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

בלוג בוורדפרס.קום.

%d בלוגרים אהבו את זה: