Applies ToSQL Server 2012 Enterprise

תופעות

שקול את התרחיש הבא:

  • התקנת מופע של Microsoft SQL Server 2005, של Microsoft SQL Server 2008 או של Microsoft SQL Server 2008 R2.

  • המופע של SQL Server נקרא INST1 ומארח מסד נתונים בשם Test_RO_FG_DB.

  • מסד הנתונים מכיל את קבוצות הקבצים הבאות:

    • ראשי

    • RO_FG

    • RW_FG

  • ה-filegroup הנקרא RO_FG מסומן כREAD_ONLY.

  • התקנת מופע חדש של Microsoft SQL Server 2012. מופע זה של SQL Server 2012 נקרא INST2.

  • ניתוק מסד הנתונים של Test_RO_FG_DB מ-INST1.

  • אתה מנסה לצרף את מסד הנתונים הTest_RO_FG_DB ל-INST2.

  • אתה מקבל הודעת שגיאה הדומה להודעה הבאה:

    Msg 3415, Level 16, State 2, Line 1Database ' Test_RO_FG_DB ' לא ניתן לשדרג מכיוון שהוא לקריאה בלבד, יש קבצים לקריאה בלבד או שלמשתמש אין הרשאות לשינוי חלק מהקבצים. הפוך את מסד הנתונים או הקבצים לניתן לכתיבה והפעל מחדש שחזור.

  • אתה מנסה לחבר משוב את מסד הנתונים של Test_RO_FG_DB ל-INST1.

בתרחיש זה, אין באפשרותך לחבר משוב את מסד הנתונים ל-INST1. לאחר מכן, אתה מקבל את הודעת השגיאה הבאה ביומן השגיאות של SQL Server:

הערה בעיה זו מתרחשת רק כאשר אתה מנסה לצרף מסד נתונים המכיל filegroup המסומן READ_ONLY. בעיה זו אינה מתרחשת כאשר אתה מנסה להעביר מסד נתונים של READ_ONLY שבו כל הנתונים מסומנים READ_ONLY.

סיבה

בעיה זו מתרחשת מאחר ש-SQL Server 2012 אינו מזהה את הfilegroup לקריאה בלבד לפני שהוא מתחיל לשדרג את מסד הנתונים. לאחר הפעלת השדרוג, SQL Server 2012 כותב ערכים ליומן הטרנזאקציות. לגירסאות קודמות אין אפשרות לקרוא את ערכי יומן הטרנזאקציות החדשים.

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המופיעים בסעיף "חל על".

פתרון

מידע אודות עדכון מצטבר

SQL Server 2012

התיקון לבעיה זו הופץ לראשונה בעדכון המצטבר 2 עבור SQL Server 2012. לקבלת מידע נוסף אודות חבילת עדכון מצטברת זו, לחץ על מספר המאמר הבא כדי להציג את המאמר ב-Microsoft Knowledge Base:

2703275 חבילת עדכון מצטבר 2 עבור SQL Server 2012הערה מאחר שבונה הגירסאות מצטבר, כל מהדורת תיקון חדשה מכילה את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו במהדורת התיקון הקודמת של SQL Server 2012. Microsoft ממליצה לשקול להחיל את מהדורת התיקון העדכנית ביותר המכילה תיקון חם זה. לקבלת מידע נוסף, לחץ על מספר המאמר הבא כדי להציג את המאמר ב-Microsoft Knowledge Base:

2692828 SQL Server 2012 בונה שהופצו לאחר ש-SQL Server 2012 הופץ עליך להחיל תיקון חם של SQL Server 2012 על התקנה של SQL Server 2012.

פתרון

כדי לעקוף בעיה זו, השתמש באחת מהשיטות הבאות.שיטה 1שחזר גיבוי של מסד הנתונים מ-INST1 ב-INST2.הערה הבעיה המתוארת בסעיף "מאפייני הבעיה" אינה מתרחשת ב-SQL Server 2012 בעת שחזור גיבוי מגירסה קודמת.שיטה 2בצע שדרוג מקומי של הגירסה הקודמת של SQL Server ל-SQL Server 2012.שיטה 3העברת מסד נתונים המכיל filegroup לקריאה בלבד למופע של SQL Server 2012. לשם כך, בצע את השלבים הבאים.הערה בצע את שלבים 4 עד 11 בשרת שבו פועל SQL Server 2012. לדוגמה, בצע את שלבים 4 עד 11 ב-INST2.

  1. ב-INST1, נתק את מסד הנתונים. לדוגמה, נתק את מסד הנתונים של Test_RO_FG_DB.

  2. העבר את קבצי מסד הנתונים לשרת שמארח את מופע INST2.

  3. נסה לצרף את מסד הנתונים ל-INST2. הקוד לדוגמה הבא מראה כיצד לעשות זאת:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACH;GO

    הערה תקבל את הודעת השגיאה 3425 המוזכרת בסעיף ' מאפייני הבעיה '.

  4. בשורת פקודה, שנה את שם קבצי מסד הנתונים. הפקודה הבאה לדוגמה מראה כיצד לעשות זאת:

    rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf 
  5. ב-SQL Server Management Studio, צור מסד נתונים בעל שם ומבנה פיזי זהים לאלה של מסד הנתונים שברצונך לצרף. הקוד לדוגמה הבא מראה כיצד לעשות זאת:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
  6. הגדר את מסד הנתונים כלא מקוון. לשם כך, הפעלת הפקודה הבאה:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. בשורת הפקודה, שנה את שם הקבצים במסד הנתונים החדש. הפקודה הבאה לדוגמה מראה כיצד לעשות זאת:

    rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf 
  8. בשורת הפקודה, שנה את שם הקבצים במסד הנתונים שהעברת בשלב 2. שנה את שמות הקבצים כך שיתאימו למסד הנתונים שיצרת בשלב 4. הפקודה הבאה לדוגמה מראה כיצד לעשות זאת:

    rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf 
  9. הגדר את מסד הנתונים למקוון. לשם כך, הפעלת הפקודה הבאה:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. ודא שמסד הנתונים מקוון וצור מחדש את הפונקציונליות של ברוקר השירות.

  11. מחק את קבצי מסד הנתונים שאינם נחוצים. הפקודה הבאה לדוגמה מראה כיצד לעשות זאת:

    del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf 

שיטה 4צרף מספר מסד נתונים המכיל filegroup לקריאה בלבד למופע הקודם של SQL Server. לשם כך, בצע את השלבים הבאים.הערות

  • מסד הנתונים מכיל גם את ערכי יומן הטרנזאקציות החדשים מהשדרוג שנכשל.

  • בצע את שלבים 3 עד 10 בשרת שפועל בו גירסה קודמת של SQL Server. לדוגמה, בצע את שלבים 3 עד 10 ב-INST1.

  1. העבר את קבצי מסד הנתונים למופע של SQL Server המארח את INST1.

  2. נסה לצרף את מסד הנתונים ל-INST1. הקוד לדוגמה הבא מראה כיצד לעשות זאת:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACHGO

    הערה תקבל את הודעת השגיאה 3624 המוזכרת בסעיף ' מאפייני הבעיה '. בנוסף, תקבל הודעת שגיאה של 1813.

  3. בשורת הפקודה, שנה את שם קבצי מסד הנתונים ב-INST1. הפקודה הבאה לדוגמה מראה כיצד לעשות זאת:

    rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf 
  4. ב-SQL Server Management Studio, צור מסד נתונים בעל שם ומבנה פיזי זהים לאלה של מסד הנתונים שברצונך לצרף. הקוד לדוגמה הבא מראה כיצד לעשות זאת:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
  5. הגדר את מסד הנתונים כלא מקוון. לשם כך, הפעלת הפקודה הבאה:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. בשורת הפקודה, שנה את שם הקבצים במסד הנתונים החדש. הפקודה הבאה לדוגמה מראה כיצד לעשות זאת:

    rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf 
  7. בשורת הפקודה, שנה את שם הקבצים במסד הנתונים שהעברת בשלב 2. שנה את שמות הקבצים כך שיתאימו למסד הנתונים שיצרת בשלב 4. הפקודה הבאה לדוגמה מראה כיצד לעשות זאת:

    rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf 
  8. הגדר את מסד הנתונים למצב חירום ובצעו תיקון. לשם כך, הפעלת הפקודה הבאה.הערה יומני הטרנזאקציות של מסדי הנתונים מובנים מחדש בשלב זה. פעולה זו עלולה לגרום לאובדן נתונים. לכן, מומלץ לגבות את מסד הנתונים לפני שתבצע שלב זה.

    ALTER DATABASE Test_RO_FG_DB SET EMERGENCYGOALTER DATABASE Test_RO_FG_DB SET SINGLE_USERGODBCC CHECKDB (Test_RO_FG_DB, repair_allow_data_loss) WITH ALL_ERRORMSGSGOALTER DATABASE Test_RO_FG_DB SET MULTI_USERGO 
  9. ודא שמסד הנתונים מקוון וצור מחדש את הפונקציונליות של ברוקר השירות.

  10. מחק את קבצי מסד הנתונים שאינם נחוצים. הפקודה הבאה לדוגמה מראה כיצד לעשות זאת:

    del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf 

מידע נוסף

קיימים כמה שלבים המתרחשים כאשר מסד נתונים מצורף למופע של SQL Server. שלבים אלה כוללים שחזור מסד הנתונים ושדרוג הקבצים מגירסאות קודמות של SQL Server. בנושא המתואר בסעיף ' מאפייני הבעיה ', SQL Server 2012 מתחיל את תהליך השדרוג לפני שזוהו הקבצים לקריאה בלבד במסד הנתונים. שלבי השדרוג כוללים התחלת טרנזקציה כדי לנקות את הסיבית "כיבוי נקי" בעמוד האתחול של מסד הנתונים. לגירסאות קודמות של SQL Server אין אפשרות לקרוא את רשומת התחלת הטרנזקציה. לכן, מסד הנתונים אינו שמיש בגירסאות קודמות של SQL Server ו-SQL Server יוצר את שגיאת 3624.שדרוגים במקום כאשר מסד נתונים מסומן לקריאה בלבדבעת ביצוע שדרוג במקום של מופע של SQL Server המכיל מסד נתונים לקריאה בלבד שנקרא Test_RO_DB ל-SQL Server 2012, ייתכן שתקבל הודעות שגיאה הדומות לבאות ביומן השגיאות של SQL Server:

בסוף תהליך השדרוג, מסד הנתונים של Test_RO_DB יופיע במצב RECOVERY_PENDING. עליך להשתמש בפקודה ' שנה מסד נתונים ' כדי להגדיר את מסד הנתונים לREAD_WRITE. לאחר מכן השתמש בפקודה ' שנה מסד נתונים ' כדי להגדיר את מסד הנתונים לREAD_ONLY. פעולה זו מאפשרת למנוע SQL Server לשדרג את מסד הנתונים לגירסה הנכונה.שדרוגים במקום כאשר מסד נתונים של קריאה/כתיבה מכיל קבוצות קבצים המסומנות לקריאה בלבדבעת ביצוע שדרוג מקומי ל-SQL Server 2012, ייתכן שתקבל הודעות הדומות לבאות ביומן השגיאות של SQL Server. בעיה זו מתרחשת כאשר המופע הקודם של SQL Server מארח מסד נתונים של קריאה/כתיבה ומכיל קבוצות קבצים המסומנות READ_ONLY. עם זאת, תהליך השדרוג מסתיים כצפוי, ומסד הנתונים מופעל באופן מקוון.הערה בהודעת השגיאה הבאה, מסד הנתונים נקרא Test_RO_FG:

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.

קהילות עוזרות לך לשאול שאלות ולהשיב עליהן, לתת משוב ולשמוע ממומחים בעלי ידע עשיר.