
צריכים להוציא טבלה אחת מ־SQL Server, ולא את כל המסד? יש מצבים שבהם זה שימושי: ייצוא נתונים, מעבר מערכת או עותק נוסף לפני שינוי. אבל כאן חשוב לעצור לרגע: קובץ עם נתוני טבלה אינו גיבוי מלא של מסד הנתונים. נבין מתי העתקה כזאת מתאימה, איך משתמשים ב־BCP ומה היא משאירה בחוץ.
טבלה היא חלק מהמסד
- ייצוא שומר נתונים
- מבנה ורכיבים נשמרים בנפרד
- גיבוי מסד נבדק בשחזור
מתי באמת צריך רק טבלה אחת?
ברוב תרחישי הגיבוי והשחזור, צריך גיבוי של המסד כולו. טבלה אחת לא מחליפה אותו. עם זאת, במקרים הבאים עותק של טבלה יכול להיות כלי עבודה שימושי:
- העתקות תכופות של טבלאות גדולות: במסדי נתונים בגודל טרה־בייט, יצירת גיבוי מלא במהירות עלולה להיות קשה. אפשר ליצור עותק נפרד של טבלה מסוימת לפני תחזוקת שרת, שינויי מידע נרחבים או שדרוג גרסה.
- רכיב נוסף בתוכנית התאוששות מורכבת: גם כאשר קיימים אשכול נתונים מבוזר וגיבוי מחוץ לאתר, ייתכן שתרצו להחזיק עותק של טבלה מסוימת כאפשרות נוספת למוצא אחרון.
- ייבוא או ייצוא מידע: בתהליכי מעבר מורכבים, אפשר להעדיף ייבוא או ייצוא של טבלה מסוימת על פני מעבר של מסד הנתונים כולו.
טבלה יכולה להיראות עצמאית עד שמגלים שהיא תלויה בעוד שלוש טבלאות. עותק שלה בלבד לא שומר את כל הקשרים ושלמות המסד. הוא מתאים יותר לטבלה עצמאית או לצורך מוגדר בנתונים ובמבנה; אחרת צריך לשמור ולשחזר גם את התלויות, למשל באמצעות סקריפטים לסכמה.
מייצאים עם BCP — ובודקים מה נוצר
BCP, קיצור של Bulk Copy Program, הוא כלי שורת פקודה להעברת נתונים אל SQL Server וממנו. כדי לייצא או לייבא נתונים בכמות גדולה, צריך גם הרשאות מתאימות — לא רק את הפקודה הנכונה.
נציג את תהליך המקור, עם סימון התיקונים הנדרשים. הפקודות כאן מסבירות את הדוגמה; הן אינן הוראה לשנות שרת ייצור. במיוחד, אין צורך להפעיל xp_cmdshell כדי להריץ bcp מחוץ למנוע SQL.
השלב הראשון במקור: הפעלת xp_cmdshell
המקור מציע להפעיל את הרכיב xp_cmdshell, שעשוי להיות כבוי כברירת מחדל, באמצעות הפקודות הבאות בעורך שאילתות SQL:
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'xp_cmdshell', 1;
GO
RECONFIGURE;
GO
השלב השני במקור: בניית פקודת הייצוא
אחרי בחירת הטבלה, המקור בונה את שם קובץ הייצוא ומריץ את הפקודה מתוך SQL Server:
DECLARE @table VARCHAR(128), @file VARCHAR(255), @cmd VARCHAR(512);
SET @table = 'dbo.spt_monitor';
SET @file = 'C:\Backup\' + @table + '_' + CONVERT(CHAR(8), GETDATE(), 112) + '.dat';
SET @cmd = 'bcp ' + @table + ' out ' + @file + ' -n -T';
EXEC master..xp_cmdshell @cmd;
יש להחליף את שם הטבלה שבמשתנה @table בשם הטבלה הרצויה, ואת התיקייה C:\Backup\ בתיקיית היעד. בדוגמה נוסף לשם הקובץ תאריך בפורמט שנה, חודש ויום.
דוגמת ייצוא מתוקנת משורת הפקודה, בלי הפעלת xp_cmdshell:
bcp ExampleDB.dbo.ExampleTable out "C:/Backup/example-table.dat" -S SERVERNAME -T -n
החליפו את ExampleDB, את שם הטבלה, את SERVERNAME ואת הנתיב בערכים המתאימים. -T משתמש באימות Windows; -n בוחר בפורמט הנתונים המקורי. חשבון ההרצה צריך הרשאות מתאימות, ונתיב הקובץ מתייחס למחשב שבו bcp מופעל.
השלב השלישי: בדיקת תוצאות ההרצה
בדוגמה הועתקה הטבלה הקטנה dbo.spt_monitor ממסד master. בטבלה גדולה יותר יופיעו יותר נתונים בתוצאות. בדקו שאין שגיאות ושמספר השורות תואם לציפיות. זה שנוצר קובץ בתיקייה לא אומר שכל מה שצריך כבר נמצא בו.
השלב הרביעי במקור: ייבוא הנתונים בחזרה
המקור מציג את הפקודה הבאה לייבוא העותק:
bcp dbo.spt_monitor IN "C:\Backup\dbo.spt_monitor_20180801.bak" -T -n
עותק שימושי, עם גבולות ברורים
לצורכי גיבוי ושחזור רגילים, גיבוי של מסד הנתונים הוא בדרך כלל הדרך המתאימה והפשוטה יותר, עם תמיכה בכלי הגיבוי המתאימים.
כשצריך רק נתונים מטבלה מסוימת, אפשר ליצור עותק באמצעות BCP או כלי מתאים אחר. זכרו מה לא מגיע איתו: תלות בטבלאות אחרות, אובייקטי SQL נוספים, סכמה ורכיבים חשובים. זה כלי שימושי בארגז — אבל לא כל ארגז הגיבוי.
מקור להערות התיקון: תיעוד Microsoft לכלי bcp והגדרת xp_cmdshell.
נוסח עברי מלא המבוסס על גוף המאמר בקובץ ה־PDF שסופק, בעריכת שפה לקריאה נוחה. הערות דיוק ותיקונים למקור מסומנים בנפרד. דוגמאות הסבר נוספו לפי הצורך; תפריטי אתר, מודעות וקישורי המלצות אינם חלק מגוף המאמר.
מקור: SQL Server Table Backup Guide.pdf מאת MSP360. למאמר המקורי.


