כיצד מבצעים Select מטבלה דרך Linked Server?

26/11/2014

התשובה לשאלה בכותרת ברורה לכל טירון: Select * From MyLinkedServer.MyDB.dbo.MyTable (וכל הוואריאציות המתבקשות).זה אמנם נכון כשהכל תקין, אך מה קורה כשיש בעייה והשרת אינו מחובר?אפשרות אחת היא לבדוק אם יש חיבור בעזרת פרוצדורה מפוסט קודם. הפרוצדורה ההיא עובדת, אך עדיין יש בעייה ביצירת פרוצדורה שפונה ל-Linked Server שאינו פעיל; כפי שנראה בהמשך.ננסה להסתדר בלי הפרוצדורה הנ”ל, וראשית חוכמה ניצור Linked Server הפונה לשרת kukuku שלא היה ולא נברא (כולל איפשור RPC כדי שיהיה ניתן להפעיל פרוצדורות בהמשך): Exec master.dbo.sp_addlinkedserver @server = N'LSnot', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'Kukuku';Exec master.dbo.sp_serveroption @server=N'LSnot', @optname=N'rpc', @optvalue=N'true';Exec master.dbo.sp_serveroption @server=N'LSnot', @optname=N'rpc out', @optvalue=N'true';Go וכעת פרוצדורה ששולפת ערך דרכו,...
אין תגובות

מעקב אחר Deadlocks בעזרת Traceflag 1222

18/11/2014

Deadlock הוא אחד מכוחות הרשע שקמו עלינו לכלותנו: שני תהליכים חוסמים זה את זה, אף אחד אינו יכול להמשיך בטרם האחר ישחרר לו את האובייקט שנעל; והם היו נידונים להמשיך ולהמתין זה לזה עד קץ כל הדורות אלמלא תיקנו חכמי מיקרוסופט תקנת שעה (או ליתר דיוק- תקנת 5 שניות) שבמקרה כזה המערכת “תהרוג” את אחד התהליכים לאחר 5 שניות של נעילה הדדית, ותאפשר לאחר להסתיים בהצלחה.בחלק מהמקרים ניתן לפתור זאת על ידי אינדקסים ושיפורי ביצועים שיגרמו לראשון להסתיים לפני שהשני מתחיל, אך במקרים אחרים מדובר בבעייה מערכתית וצריך לערוך שינויים בסיסיים במערכת.כך או כך- יש לדעת על Deadlocks, לטפל...
תגובה אחת

הפתעות בבדיקת יעילות של שאילתות

05/11/2014

נתונות שתי טבלאות, למשל אלו: Select * Into #T_Messages From sys.messages;Alter Table #T_Messages Add Constraint PK_#T_Messages Primary Key Clustered (message_id,language_id);Go Select * Into #T_Languages From sys.syslanguages;Alter Table #T_Languages Add Constraint PK_#T_Languages Primary Key Clustered (lcid);Go ואני רוצה לבדוק את היעילות של שאילתת ה-Left Join הבאה – כמה זמן הריצה נמשכת, כמה Pages נקראים, אולי השוואה לשאילתה דומה שכתובה קצת אחרת וכו’: Select *From #T_Messages MLeft Join #T_Languages L On M.language_id=L.lcid; מכיוון שמדובר בשליפה של מאות אלפי שורות – יש לברר מי צריך את כל זה: מישהו מתכוון לעיין בכובד...
אין תגובות

בדיקת תקשורת

04/11/2014

הלו? אני באדי הום?אנחנו פונים בקוד לשרת אחר דרך Linked Server. מה קורה אם אין קשר (השרת למטה, אין הרשאות, הקישור לא קיים..)? בדרך כלל נעוף עם הודעת שגיאה או שנעוף מה-Try ל-Catch ושם הכל יטופל כחוק וכו’.היה עדיף לבצע בדיקה אם יש תקשורת, ורק אם כן- לבצע את הפקודה הפונה ל-Linked Server.להלן פרוצדורה שתקבל שם של שרת כפרמטר, תבצע בדיקה האם יש תקשורת, ותחזיר בהתאם 1 או 0: If Object_ID('P_LinkedServerConnected','P') Is Not Null Drop Proc P_LinkedServerConnected;GoCreate Proc P_LinkedServerConnected @Server Sysname, ...
3 תגובות