all news and tips for database administrators and BI Architects
יום רביעי, 31 ביולי 2019
יום שבת, 19 ביולי 2014
Take your SQL Server development process forward!
יום ראשון, 9 בפברואר 2014
פורום בסיסי נתונים
רוצים להתייעץ עם DBA -ים בתחום?
רוצים להכיר את קהילת ה- DBA -ים בישראל?
אתם מוזמנים לפורום בסיסי נתונים באתר תפוז :
http://www.tapuz.co.il/forums2008/forumpage.aspx?forumid=193
יום חמישי, 29 בדצמבר 2011
SSRS - Graph With Dynamic Colurs



יום חמישי, 10 בנובמבר 2011
Evaluation Period Has Expired
שאלה:

אני מעוניין להזין את הרישיון שקניתי ל- Sql server ולשדרג את הגרסה מגרסת ניסיון, מה עליי לעשות?
תשובה:
הפתרון למקרה הינו די פשוט, כל מה שעליך לעשות הינו להריץ את קובץ ההתקנה של ה- Sql server, תחת קטגוריית ה- maintenance עליך לבחור בפונקציית : edition upgrade.
ב- wizard שיפתח לך יהיה עלייך להזין את מספר הרישיון שברשותך ולאחר מספר קליקים גרסת ה- sql server שבשרתך תהפוך להיות חוקית!
בהצלחה!
יום שני, 11 ביולי 2011
כמה ימי ראשון יש בין שני תאריכים?
שלום רב,
שאלה:
יש לי מערכת לחישוב שעות עבודה המבוססת כמובן בסיס נתונים מסוג sql server :) .
בחברה שלנו מוגדר כי יום ראשון בשבוע הינו חצי יום עבודה ולכן על מנת לחשב שעות נוספות ליום עבודה ספציפי זה , אני צריך לחשב כמה ימי ראשון יש לי בין שני תאריכים.
כיצד ניתן לחשב ב - sql server כמה ימי ראשון לדוגמא יש לי בין שני תאריכים?
תשובה:
על מנת לחשב כמה ימי ראשון, ובכלל כמה "שמות" ימים יש לי בין שני תאריכים אני אקרא בהתחלה לפונקציות dateadd ו- datename על מנת לקבל את מספר היום -
datename(weekday,dateadd(day,number,@date1).
לאחר מכן, אני אעזר בטבלת המערכת master..spt_values אשר מכילה כ- 2500 פרמטרים על מנת לפענח את שם היום.
הפתרון הינו:
declare @date1 datetime, @date2 datetime
select
@date1='2011-07-01', @date2='2011-07-11'
select
sum(case when datename(weekday,dateadd(day,number,@date1))='sunday' then 1 else 0 end)
as sundays,
sum(case when datename(weekday,dateadd(day,number,@date1))='Monday' then 1 else 0 end)
as Monday,
sum(case when datename(weekday,dateadd(day,number,@date1))='Tuesday' then 1 else 0 end)
as Tuesday,
sum(case when datename(weekday,dateadd(day,number,@date1))='Wednesday' then 1 else 0 end)
as Wednesday,
sum(case when datename(weekday,dateadd(day,number,@date1))='Thursday' then 1 else 0 end)
as Thursday,
sum(case when datename(weekday,dateadd(day,number,@date1))='Friday' then 1 else 0 end)
as Friday,
sum(case when datename(weekday,dateadd(day,number,@date1))='Saturday' then 1 else 0 end)
as Saturday
from master..spt_values
where type='p' and dateadd(day,number,@date1)<=@date2
כמובן שאפשר עוד לייעל את השליפה. ובמידה ויש לכם רעיונות נוספים לפתרון הבעיה אשמח לשמוע!!
בהצלחה!
יום שלישי, 15 במרץ 2011
Generate Script ב- SQL Server 2008 R2
בגרסת ה- manganese studio 2005 באופציית ה- generate script היתה לנו את היכולת להחליט את המאפיינים של יצירת הסקריפט (לדוגמא: האם להוסיף בדיקת הימצאות האובייקט לפני היצירה?, האם לייצר סקירפט לייצר אינדקסים וכו'...) . ובגרסת management studio 2008 בחירת מאפיינים אלו נעלמה...

כיצד אפשר בגרסת 2008 לבחור את מאפייני ה- Generate script?
תשובה:
אכן בגרסת 2008 כאשר בוחרים את אופציית ה- Generate Script ה- wizard כולל בתוכו רק את בחירת האובייקטים הנדרשים ללא יכולת בחירת המאפיינים.
בגרסת manganese studio 2008 R2 אנו מגדירים את מאפייני ה- Generate Script בחלון ה- option .

בהצלחה!!
http://blogs.microsoft.co.il/blogs/itaib/archive/2011/03/15/generate-script-sql-server-2008-r2.aspx
יום רביעי, 6 בינואר 2010
Trigger with insert select
עלתה דרישה אצל אחד מהלקוחות שלי שאחרי כל הכנסת לקוח בטבלת הלקוחות תרוץ פרוצדורה שמקבלת את מספר הלקוח ושולחת לו מייל עם פרטי ההרשמה.
במבט ראשון, הפתרון הינו פשוט :
נקים טריגר על הטבלה , שאחרי כל Insert לטבלת הלקוחות , הטריגר יקבל את מספר הלקוח מטבלת המערכת - inserted שבטריגר ויעביר אותה לפרוצדורה.
בדרך כלל הטריגר יראה כך:
CREATE TRIGGER [dbo].[tri_TRIGGER_test_insert]
ON [dbo].[t_test_trigger]
AFTER INSERT
AS
declare @id int
select @id = id from inserted
exec p_send_mail @id
GO
הטריגר יעבוד מצויין להכנסה בודדת של לקוחות לטבלה, אך שימו לב מה יקרה כאשר אני אבצע הכנסה של מספר רשומות בו זמנית:
ראשית ניצור טבלה:
CREATE table t_test_trigger
( id int)
go
להלן טריגר אשר אחרי כל הכנסת רשומה ידפיס את המספר הלקוח שהוכנס:
alter TRIGGER [dbo].[tri_TRIGGER_test_insert]
ON [dbo].[t_test_trigger]
AFTER INSERT
AS
declare @id int
select @id = id from inserted
select @id
GO
במידה ונבצע הכנסת נתונים בדרך הבאה, הכל יעבוד כשורה והטריגר יקפוץ 3 פעמים:
insert into t_test_trigger values (1)
insert into t_test_trigger values (2)
insert into t_test_trigger values (3)
אך שימו לב שאם נבצע הכנסת נתונים בו זמנית, הטריגר יקפוץ פעם אחד בלבד:
insert into t_test_trigger
select *
from t_test_trigger
במקרה שכזה הפרוצדורה תרוץ רק פעם אחת, ורק לקוח אחד יקבל מייל...
פתרון:
במקרים בהם אנו יודעים שאופי הכנסת הנתונים מול הטבלה הינה גם על ידי
insert and select
הפתרון הינו לשים לולאה בתוך הטריגר אשר תרוץ על נתוני טבלת ה- inserted וכך הפרוצדורה שלנו תרוץ על כל הרשומות.
לדוגמא:
alter TRIGGER [dbo].[tri_TRIGGER_test_insert]
ON [dbo].[t_test_trigger]
AFTER INSERT
AS
DECLARE @id int
DECLARE uniques_cursor CURSOR FOR
select id from inserted
OPEN uniques_cursor
FETCH NEXT
FROM uniques_cursor
INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
select @id
FETCH NEXT
FROM uniques_cursor
INTO @id
END
CLOSE uniques_cursor
DEALLOCATE uniques_cursor
GO
מוסר השכל - לפני כתיבת הקוד ויישום פתרון בבסיס הנתונים ובכלל חשוב לבצע מיפוי ואפיון לעומק על מנת להבין ולמצוא גם את מקרי הקצה - וזאת על מנת למנוע באגים !
בהצלחה.
יום רביעי, 2 בדצמבר 2009
העלאת גרסת בסיס נתונים
יש לבית תוכנה שלנו מוצר שמתשמש ב SQL SERVER ומותקן בשרתים של לקוחות שונים.
המסד נתונים של המוצר כל הזמן בתהליך פיתוח ומדי פעם שאנו באים אנו רוצים לעדכן
את המסד נתונים שלו לגרסא האחרונה כולל טבלאות.
מה היא הדרך הטובה ביותר לפעולה הזו?
האם יש כלים צד שלישי לכך?
תשובה:
ראשית, בעת עליית גרסה חשוב לבדוק מה השינויים בין הגרסה החדשה לבין הגרסה
הקודמת - לטובת העניין תוכל להשתמש בכלי צד שלישי אשר משווים בין סביבות.
לאחר מכן, את סכמת הטבלאות , וקטעי הקוד בבסיס הנתונים תוכל להעלות על ידי
סקירפט - (קליק ימני על בסיס הנתונים המבוקש).
כמו-כן, בגרסת SQL Server Management Studio של ה- 2008 אתה יכול לכלול בסקריפט
גם data (ולא רק סכמה).
כמובן, שבמידה ואתה רוצה לדרוס את הסביבה הקיימת בסביבה החדשה תמיד תוכל לעשות
גיבוי ושחזור.
בהצלחה.
יום שני, 12 באוקטובר 2009
בעיית הרשאות ב SSIS
אני מריץ package ב SSIS והוא עבוד מצוין .
ושאני מפעיל אותו דרך הJOB יש לי הודעת שגיאה
Executed as user: DWH-LOADER\SYSTEM.
... 9.00.3042.00 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 11:23:39 AM Error: 2009-10-08 11:23:39.54 Code: 0xC0202009 Source: MainMap Connection manager "ICQ" Description: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E4D. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E4D Description: "Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.". End Error Error: 2009-10-08 11:23:39.54 Code: 0xC020801C Source: MainMap Log provider "SSIS log provider for SQL Server" Description: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "ICQ" failed with error code 0xC0202009. There may be error messages posted before this with more information on why the AcquireConnection method call failed. COM error object... The package execution fa... The step failed.
שאני מסתכל בdatasource ב JOBS
אלו שני ה connection string שאיתם אני מתחברData Source=DWH-DB;Initial Catalog=ICQ;Provider=SQLOLEDB.1;Integrated Security=SSPI;Auto Translate=True;Data Source=DWH-DB;Initial Catalog=ICQ;Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Info=True;
למה יש לי הודעת שגיאה ?
תשובה:
1. במידה ואתה מגדיר ב- datasource שם משתמש (login) וסיסמה ה- job מצליח?
כלומר בנפילת SSIS ע"י ה- JOB חשוב לוודא מה מקור הבעיה, בהחלט יכול להיות שמקור הבעיה הינה Integrated Security.
2. תוודא של- owner של ה- job יש הרשאות.
בהצלחה.
יום חמישי, 30 באפריל 2009
שחרור טרזנצקיות של משתמש
יש לי בסיס נתונים שאני רוצה למחוק אותו אבל קיים יוזר שמשתמש בו כרגע.
אני לא רוצה למחוק את ההרשאות של היוזר אבל אני רוצה להעיף אתו כרגע. מה לעשות ?
תשובה:
תריץ את הפקודה sp_who2 , ולאחר מכן תבצע kill ל- spid של היוזר הרלוונטי.
בהצלחה.
יום רביעי, 18 במרץ 2009
The product level is insufficient
בעת ייבוא Flat File או Excel File בSQL 2005 SP1
אני מקבלת הודעת שגיאה בשלב האימות:
Validating (Error)
Error 0xc00470fe: Data Flow Task: The product level is insufficient for
component "
(SQL Server Import and Export Wizard)
בדקתי האם יש חיבור לSSIS ואכן הוא לא מותקן..
אני עומדת לבצע את ההתקנה של SSIS.
תודה!
