מי פונה לעמודות בטבלה?

יום שלישי, מאי 30, 2017

אפשר בקלות יחסית לכתוב סקריפט שמוצא אילו אובייקטים (פרוצדורות, views וכו’) פונים לטבלה מסויימת בעזרת טבלת המערכת sys.sql_dependencies או קליק ימני ו-Dependencies על הטבלה בממשק הגרפי ב-SSMS; אך יותר מאתגר למצוא מי פונה לעמודות מסויימות בטבלה: הריי לא נרצה לקבל שמות של כמה עשרות אובייקטים שרובם פונים לעמודות אחרות שאינן מעניינות אותנו..השליפה (תואמת SQL 2016 ו-Azure): Declare @Obj Varchar(256)='dbo.MyTbl', @Col Varchar(Max)='Col1,Col2,Col3';With T As(Select Concat(Object_Schema_Name(D.object_id,DB_ID()),'.',Object_Name(D.object_id,DB_ID())) ObjectName, Concat(Object_Schema_Name(D.referenced_major_id,DB_ID()),'.',Object_Name(D.referenced_major_id,DB_ID())) ReferencedObjectName, D.is_selected, ...
אין תגובות

sys.dm_db_index_usage_stats: האם יש שימוש לאינדקסים

יום שישי, אוגוסט 14, 2015

הפוסט הקודם שלי עסק בפקודות Insert לטבלה מאונדקסת, והראה את המחיר שלהם: הרווח ב-Select ידוע, אך יש לזכור שאנחנו משלמים על כך בכל פקודת Insert/Update/Delete, ויש לבחון שאיננו מחזיקים אינדקסים מיותרים שעולים לנו בתחזוקתם, אך אינני משתמשים בהם ומפיקים מהם תועלת.המקור למידע לגבי השימוש באינדקסים נמצא בטבלת המערכת המצויינת בכותרת. צריך כמובן לברר איזו טבלה עומדת מאחורי כל object_id, איזה אינדקס מאחורי כל index_id, מה המבנה של האינדקס וכו’; וכדי לעשות “לונג סטורי שורט”, להלן השליפה עם כל מה שצריך: Declare @TableName Varchar(200)='dbo.MyTbl';With Idx As(Select I.object_id, I.index_id,...

אובייקטים התלויים בעמודה

יום ראשון, מאי 31, 2015

אנחנו משנים עמודה בטבלה: אולי משנים אותה מ-(Varchar(10 ל-(NVarchar(20, אולי מוחקים אותה לגמרי, וכו’; ורוצים למצוא היכן נעשה בה שימוש במפורש או במרומז (פנייה מסוג * Select) כדי לתקן את הקוד: יש להכניס אליה או לשלוף ממנה בעזרת משתנים מהסוג המתאים, או לבטל פניות אליה.בקיצור- להלן הסקריפט: Declare @Tbl Varchar(200)='dbo.MyTbl', @Col Sysname='MyCol';Select CA1.ReferencedObject, CA2.ReferencingObject, C.name, ...
אין תגובות

רשימה של כל ה-Logins & Users בשרת

יום חמישי, דצמבר 11, 2014

אתם בוודאי מכירים את זה- לשונית ה-Security בשרת מתמלאת בכל מיני דמויות לא מזוהות, וכך גם בדטבייסים השונים;כל מיני User-ים מיותמים שה-Login-ים שלהם נמחקו והם נותרו גלמודים, Login-ים שנמחקו מה-Active Directory אך עדיין קיימים בשרת,ובכלל- הרשאות שניתנו כפתרון זמני וכמו כל דבר זמני הפכו לקבועות וכו’.בקיצור- רשימה של כ-ו-ל-ם כולל הגדרות ה-Role-ים שלהם ברמת השרת וברמת הדטבייס: Declare @SQL Varchar(Max);Select @SQL=IsNull(@SQL+' Union All'+Char(13)+Char(9)+Char(9),'')+Concat('Select ''',name,''' DB, P1.sid, ...
אין תגובות

דוח הרשאות חריגות של משתמשים

יום חמישי, יולי 31, 2014

פרטים על ההרשאות ניתן לקבל על ידי קליקים ימניים ב-SSMS, והם גם נשמרים בטבלאות המערכת, רק שבמקרה זה צריך לפעמים קצת להתאמץ כדי לקבל את התוצאה המבוקשת.הבעייה שניצבנו בפניה מוכרת לי ממקומות עבודה קודמים: בודקים ומגלים שלמשתמש (Login) פלוני יש הרשאות מסויימות ברמת השרת ו\או ברמת הדטבייס (בכל דטבייס הרשאות אחרות). לכאורה זה שנצפה למצוא ב-Security; אלא שלא כך עובדים: הרשאות יש לתת לקבוצות ולא למשתמשים ספציפיים.למשל- יוסי מהשיווק זקוק להרשאות כאלה ואחרות כדי לתחקר את הנתונים המעניינים אותו. במקום לתת לו אישית את ההרשאות המתאימות ראוי שניצור קבוצה של אנליסטים או אנשי שיווק, נשייך אותו אליה, וניתן לקבוצה...
אין תגובות

פונקציות עזר לחקירת טבלאות מערכת

יום רביעי, מרץ 9, 2011

כדי להגיע למידע שאינו נשמר במישרין בטבלת מערכת כלשהי- יש לבצע Join בינה לבין טבלאות מערכת אחרות שמשלימות את החסר, ומהן הלאה לעוד טבלאות; ולעיתים זה יוצר שאילתות מסורבלות למדי שתפקידן אינו לשלוף את המידע השמור בדטבייס אלא בסך הכל מטה-דטה, מידע על המידע. ב-SQL Server יש די הרבה פונקציות עזר שמאפשרות לקצר הליכים ולהגיע למטה-דטה יותר בקלות. לא משהו שלא ניתן להגיע אליו אחרת, אלא קצת פחות קוד מסורבל.. להלן מספר דוגמאות המדברות בעד עצמן: Select Schema_Name(Schema_ID) Schema_Name, ...
אין תגובות