none
Sqlcmd: Error: Internal error at ReadAndHandleColumnData (Reason: Error reading column data) RRS feed

  • שאלה

  • I have a stored procedure that selects 2 million rows from my SQL data-base.

    I EXEC this stored procedure from SQLCMD, in order to dump the output into a file.

    The SQLCMD bat file runs properly on other pc's, but aborts on my pc with the above error message. 

    I have already re-imaged my pc to Win7, and installed again SQLCMD, but I still get this error message.

    Any idea?


    יום חמישי 16 מאי 2013 13:11

תשובות

  • שבת שלום

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

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

    אפיון בסיסי שאתה מציג:

    יש לך SP שמחזיר כמות רשומות גדולות
    יש לך קובץ bat שפונה אל הפרוצדורה (לא רשמת מה הקשר בין הקובץ ל SP אז אני אניח שהוא אמור לקבל חזרה את כל הרשומות).

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

    מי מנהל אצלך באפליקציה את הרשומות שחזורות? האם יש לך מקום בזכרון לכל כמות הרשומות האלו? האם יש לך משאבים לניהול הנתונים שחזרו מה SP לצורך המשך עבודה בקובץ ה BAT.

    הבסיס לבעיות רבות נובע מכך ששוכחים שקובץ BAT לא עובד כמו טרנזקציה הרצה בשרת אלא דומה יותר לאופן עבודה של אפליקציה חיצונית הניגשת לשרת ומפעילה עליו פעולות.

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

    הצעה: (1). בדוק את האפשרות שמקור הבעיה היא כפי שסברתי מעל. (2). אם אתה רוצה לנטר תבצע ניטור של משאבים ברמת מערכת ההפעלה ולא רק ברמ ת השרת SQL.

    * אם תצרף לנו את הקודים של ה SP+קובץ הBAT וכמובן DDL+DML נוכל לעזור כניראה יותר.


    signature

    • נערך על-ידי pituachMVP, Editor יום שישי 17 מאי 2013 13:38
    • סומן כתשובה על-ידי TirzaK יום ראשון 19 מאי 2013 08:34
    יום שישי 17 מאי 2013 13:37
    מנחה דיון
  • שלום,

    כמה שאלות:
    מה גרסת ה SQL Server ?  ומה גרסת ה SQLcmd (בהנחה שהם לא באותו שרת)
    האם ה client  כלומר SQLCMD רץ ב 64bit ? 
    עצם העובדה שמחשב אחד עובד והשני לא, יכול לרמז על בעיית משאבים או תאימות גרסאות.
    אשמח אם תוכל להעתיק את כל הפלט עם השגיאה במלואו

    מה לגבי השרת? האם מופיעה שגיאה ב errorlog באותו זמן?

    מקווה שעזרתי,
    נועם

    • סומן כתשובה על-ידי TirzaK יום ראשון 19 מאי 2013 08:33
    יום שישי 17 מאי 2013 11:45

כל התגובות

  • שלום,

    כמה שאלות:
    מה גרסת ה SQL Server ?  ומה גרסת ה SQLcmd (בהנחה שהם לא באותו שרת)
    האם ה client  כלומר SQLCMD רץ ב 64bit ? 
    עצם העובדה שמחשב אחד עובד והשני לא, יכול לרמז על בעיית משאבים או תאימות גרסאות.
    אשמח אם תוכל להעתיק את כל הפלט עם השגיאה במלואו

    מה לגבי השרת? האם מופיעה שגיאה ב errorlog באותו זמן?

    מקווה שעזרתי,
    נועם

    • סומן כתשובה על-ידי TirzaK יום ראשון 19 מאי 2013 08:33
    יום שישי 17 מאי 2013 11:45
  • שבת שלום

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

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

    אפיון בסיסי שאתה מציג:

    יש לך SP שמחזיר כמות רשומות גדולות
    יש לך קובץ bat שפונה אל הפרוצדורה (לא רשמת מה הקשר בין הקובץ ל SP אז אני אניח שהוא אמור לקבל חזרה את כל הרשומות).

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

    מי מנהל אצלך באפליקציה את הרשומות שחזורות? האם יש לך מקום בזכרון לכל כמות הרשומות האלו? האם יש לך משאבים לניהול הנתונים שחזרו מה SP לצורך המשך עבודה בקובץ ה BAT.

    הבסיס לבעיות רבות נובע מכך ששוכחים שקובץ BAT לא עובד כמו טרנזקציה הרצה בשרת אלא דומה יותר לאופן עבודה של אפליקציה חיצונית הניגשת לשרת ומפעילה עליו פעולות.

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

    הצעה: (1). בדוק את האפשרות שמקור הבעיה היא כפי שסברתי מעל. (2). אם אתה רוצה לנטר תבצע ניטור של משאבים ברמת מערכת ההפעלה ולא רק ברמ ת השרת SQL.

    * אם תצרף לנו את הקודים של ה SP+קובץ הBAT וכמובן DDL+DML נוכל לעזור כניראה יותר.


    signature

    • נערך על-ידי pituachMVP, Editor יום שישי 17 מאי 2013 13:38
    • סומן כתשובה על-ידי TirzaK יום ראשון 19 מאי 2013 08:34
    יום שישי 17 מאי 2013 13:37
    מנחה דיון
  • שלום נועם ופיתוח,

    אתם שניכם צודקים שהבעיה היא ברמה של משאבי המחשב.

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

    אין לי אפשרות לשנות את פרוצדורת ה-sql ולכן אני מסתפקת במצב הקיים.

    תודה לכם על שהקדשתם זמן לחקירת המקרה שלי והצעתם צעדים להמשך החקירה.

    כל טוב,

    תרצה

    יום ראשון 19 מאי 2013 08:38
  • בכיף :-)

    גלישה מהנה


    signature

    יום ראשון 19 מאי 2013 14:06
    מנחה דיון