יום שני, נובמבר 21, 2011

Denali is a great feture ...

 טוב קיבלתי לידי התקנת SQL Denali , מה אני יכול לספר אם זה ייציב בשביל מפתחים אז מישהוא אימץ את  שיטת שהמשתמשים יעשו QA.

רק לספר לכם על התהליך שהמכונה הזאת עברה (משידרוג של sql server 2008 R2) - כמה שגיאות מדהימות בשביל התענוג :
הכל התחיל מexceptions מבסיס נתונים

אז אמרתי טוב בשביל מה יש בסיס התקנה לידך :



בשביל לתקן את זה צריך לייצר חשבון משתמש שונה מnetbios name (שם מחשב), טוב אמרתי יאללה אולי שווה לי לעבוד עם denali ?






אהה מה עושים במצב כזה תשאלו ?
מקללים ומסירים כל דבר שקשור ל SQL Server (כולל compat) - לפני זה תכינו את הדיסק של VS2010 כי ההתקנה שלכם הולכת פיפאן.
מקללים עוד קצת כי אז מקבלים :


זה בסדר תרגישו טוב אתם רק בודקי תוכנה בחינם :-)

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


משהוא חשוב בשביל לספר לכם תחזיקו שני instances של סביבת העבודה שלכם אחת ל SQL ואחת ל C הסיבה היא פשוטה: ביום אחד קרוב ל12 נפילות של הclient , אם חשבתם ש VS 2010 הוא איטי (על מחשב עם 4 ג"ב זכרון וכונן 7200) אז תתכונו לסיוט.
משהוא קטן אני עובד עם win7 מעודכן ללא שום תוכנות חיצוניות פרט לנדרשות (אני מהאנשים שאסרו עליהם להתקין vim).

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

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

לפתע אני לא מצליח להתחבר מ freetds עם שגיעה קריפטית:



UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE' 
DIAG [08S01] [FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist   

DIAG [S1000] [FreeTDS][SQL Server]Unable to connect to data source 
אם אתם יודעים על מה מדובר על הכבוד לכם , זו דוגמה מצויינת להודעת שגיעה (כי היא משגעת ).
מדובר למעשה על בעיית חיבור שלא מתורגמת כמו שצריך.

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


בסדר נגמר יש אפילו חיבור :

#include <stdio.h>
#include <sql.h>
#include <sqlext.h>


static void extract_error(
    char *fn,
    SQLHANDLE handle,
    SQLSMALLINT type);

main() {
  SQLHENV env;
  SQLHDBC dbc;
  SQLHSTMT stmt;
  SQLRETURN ret; /* ODBC API return status */
  SQLCHAR outstr[1024];
  SQLSMALLINT outstrlen;

  /* Allocate an environment handle */
  SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
  /* We want ODBC 3 support */
  SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
  /* Allocate a connection handle */
  SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
  /* Connect to the DSN mydsn */
  ret = SQLDriverConnect(dbc, NULL, "Driver=FreeTds;SERVER=192.168.1.2\\SQLEXPRESS;UID=username;PWD=pwd;DATABASE=master", SQL_NTS,
                         outstr, sizeof(outstr), &outstrlen,
                         SQL_DRIVER_COMPLETE);
  if (SQL_SUCCEEDED(ret)) {
    printf("Connected\n");
    printf("Returned connection string was:\n\t%s\n", outstr);
    if (ret == SQL_SUCCESS_WITH_INFO) {
      printf("Driver reported the following diagnostics\n");
      extract_error("SQLDriverConnect", dbc, SQL_HANDLE_DBC);
    }
    SQLDisconnect(dbc);         /* disconnect from driver */
  } else {
    fprintf(stderr, "Failed to connect\n");
    extract_error("SQLDriverConnect", dbc, SQL_HANDLE_DBC);
  }
  /* free up allocated handles */
  SQLFreeHandle(SQL_HANDLE_DBC, dbc);
  SQLFreeHandle(SQL_HANDLE_ENV, env);
}

void extract_error(
    char *fn,
    SQLHANDLE handle,
    SQLSMALLINT type)
{
    SQLINTEGER   i = 0;
    SQLINTEGER   native;
    SQLCHAR      state[ 7 ];
    SQLCHAR      text[256];
    SQLSMALLINT  len;
    SQLRETURN    ret;

    fprintf(stderr,
            "\n"
            "The driver reported the following diagnostics whilst running "
            "%s\n\n",
            fn);

    do
    {
        ret = SQLGetDiagRec(type, handle, ++i, state, &native, text,
                            sizeof(text), &len );
        if (SQL_SUCCEEDED(ret))
            printf("%s:%ld:%ld:%s\n", state, i, native, text);
    }
    while( ret == SQL_SUCCESS );
}

אין תגובות:

הוסף רשומת תגובה