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

12/07/2010

שימוש ב- File Stream

שייך לקטגוריה: 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 של התגובות לרשומה הזאת טרקבאק קישור

להגיב

Fill in your details below or click an icon to log in:

WordPress.com Logo

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

Twitter picture

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

Facebook photo

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

Connecting to %s

ערכת עיצוב: Shocking Blue Green. בלוג בוורדפרס.קום.

Follow

Get every new post delivered to your Inbox.