بازسازی دیتابیس MSDB

سلام.

اگر هنگام Backup گرفتن از دیتابیس بهتون خطا داد که دیتابیس MSDB با مشکل روبرو شده ولی Backup گیری درست  انجام شده است، باید برای رفع مشکل مراحل زیر را طی کنید.

دیتابیس MSDB دیتابیسی هست که تمام کارهای SQL Agent داخل آن ذخیره می شود همچنین تمام History مربوط به Backup و Restore و replication نیز داخل ان ذخیره می شود.

اگر در SQL  تنظیمات خاصی برای Backup,Restore یا Replication صورت نگرفته باشد ، میتوان دیتابیس رو از نو ایجاد کرد.ولی اگر دارای تنظیمات خاصی باشد یا Job خاصی تنظیم شده باشد با طی کردن مراحل زیر دیتابیس درست خواهد شد.

Alter Database Msdb set Single_user

Go

Dbcc checkdb('Msdb',Repair_rebuild)

Go

Alter Database Msdb Set multi_user

Go

با این دستورات ابتدا دیتابیس msdb رو به حالت تک کاربره می بریم. برای اینکار حتما باید sql agent غیر فعال شود.

سپس با استفاده از دستور dbcc checkdb تمام دیتابیس چک شده و اگر ایرادی داشته باشه ، اون موارد رفع می شود.

سپس دیتابیس رو دوباره به حالت Multi_user بر می گردانیم.

با اینکار مشکل رفع خواهد شد.

اگر دیتابیس Msdb کلا خراب شده باشد و هیچ backup هم نداشته باشیم و بخواهیم دیتابیس رو از اول ایجاد کنیم باید مراحل زیر رو انجام بدیم:

ابتدا سرویس مربوط به sql server رو stop میکنیم. بعد در منوی Run تایپ کنید cmd. و در پنجره باز شده دستور زیر رو تایپ کنید.

C:\program files\microsoft sql server\mssql\binn\sqlservr.exe –c –t 3604

سپس در یک پنجره جدید

cmd دستورات زیر رو تایپ کنید.

Osql –S . –E –q"sp_detach_db 'msdb'"

سپس از مسیر نصب شده sql server  فایلهای دیتابیس msdb که msdbdata.mdf و msdblog.ldf رو حذف کنید یا تغییر نام بدید.سپس دستور زیر رو اجرا کنید.

Osql –S  . –E  -I"c:\program files\microsoft sql server\mssql\install\instmsdb.sql"

پس از اتمام دستور sql server رو shutdown کرده مجدد به صورت عادی اونو start کنید.

با اینکار دیتابیس msdb از ابتدا ساخته خواهد شد.

 

کلاسهای آموزش SQL server 2008

سلام.

دوستانی که تمایل دارند در دوره های SQl Server 2008 Design@implementation  و دوره SQL server 2008 Advanced T-sql شرکت کنند با همراه بنده تماس بگیرند.

هزینه دوره ها به ساعتی 15000 تومان کاهش یافت.

طی روزهای آتی لیست کلاسهای این دوره رو قرار میدهم.

مابقی سرفصل دروس SQL server 2008 Administrator

در ادامه مطلب ، بخش سوم سرفصل دروس SQL Server 2008 Administrator خدمتتان ارائه می گردد.

ادامه نوشته

ادامه سرفصل دروس SQL Server 2008 administrator

در ادامه مطلب ، ادامه سرفصل  دروس SQL Server2008 Administrator خدمتتان ارائه می گردد.

ادامه نوشته

سرفصل دروس SQL Server 2008 Administrator

سلام دوستان.

در ادامه مطلب ، بخشی از سرفصل دروس SQL Server 2008 Administrator می باشد که به صورت خصوصی تدریس میکنم.

دوستانی که تمایل داشتند میتوانند با شماره 8014-246-0912 تماس بگیرند.

هزینه کلاس ساعتی 20000 تومان می باشد.مدت زمان کلاس 78 ساعت و 26 جلسه می باشد.

مکان کلاس در خیابان گاندی می باشد.

همچنین امکان برگزاری کلاسها به صورت گروهی برای شرکتها و سازمانها می باشد.

حداکثر ظرفیت کلاسها به صورت نیمه خصوصی حداکثر 3 نفر می باشد.

با تشکر.

ادامه نوشته

نحوه کار Pivot در SQL Server 2008

Pivot :

این دستور العمل برای تبدیل مقادیر موجود در سطرها به ستونها و استفاده از توابع محاسباتی می باشد و عملیاتی مانند Cross-Tab در Excel را پیاده سازی می کند.

ساختار دستوری به شکل زیر می باشد:

Select Field1,Field2

From(

Table_Source

)

Pivot ( Aggregate Function(Value_Column)

For Pivot Column

In()

) Table Alias

در Select اول فیلدهایی را که در Column_list قسمت Pivot استفاده کرده و فیلدهایی که براساس آن میخواهیم اطلاعات گروه بندی شود را می آوریم.

در قسمت Table_Source که در واقع یک Derived Table هست ، اطلاعات مورد نیاز از جدولی که میخواهیم محاسبات را انجام دهیم فراخوانی می کنیم.

در قسمت Pivot تابع محاسباتی روی یکی از فیلدهای Select دوم صورت خواهد گرفت .

بخش For نام ستونی که میخواهیم مقادیر آن ستون را به ستونهای مختلف تبدیل کنیم می آوریم.

بخش In لیست مقادیری که میخواهیم به ستون تبدیل شود.

برای روشن شدن مطلب به مثال زیر توجه کنید:

یک جدول هدر فاکتور فروش با مشخصات زیر داریم:

Create Table HdrSale

(     Id Int,

      FactorDate char(8),

      Cust_Name Varchar(30)

)

 

 

یک جدول ریز فاکتور فروش با مشخصات زیر داریم :

Create Table DetailSale

(     Id Int,

      IdHdrSale int,

      Quantity int,

      ProductCode int

)

 

در جدول اول اطلاعات زیر را اضافه می کنیم :

Insert into Hdrsale 

      values(1,'89/10/01','Mohammadi'),

              (2,'89/10/02','Karimi'),

              (3,'89/10/02','Sadeghi'),

              (4,'89/10/01','Mohammadi'),

              (5,'89/10/02','Karimi')

در جدول دوم اطلاعات زیر را وارد می کنیم :

Insert into DetailSale

      Values(1,1,2,10),

              (2,1,3,20),

              (1,2,10,10),

              (1,3,5,20),

              (2,3,10,10),

              (1,4,5,10),

              (2,4,4,20),

              (1,5,20,10)

 

حال اگر Query زیر را اجرا کنیم لیست تمام فاکتورهای مشتری در تاریخ های مختلف را خواهیم داشت .

       Select Hs.FactorDate,Ds.Quantity,Hs.Cust_Name

       From HdrSale Hs

            Inner Join

      DetailSale DS

            On Ds.IdHdrSale=Hs.Id

 

حال ما میخواهیم به تفکیک افراد ببینیم در هر روز چه تعداد جنس فروخته شده است.

میخواهیم نتیجه زیر را داشته باشیم:

Date

Karimi

Sadeghi

Mohammadi

89/10/01

0

0

14

89/10/02

30

15

0

 

برای اینکار باید از Pivot استفاده کنیم:


 

با اجرای Query زیر نتیجه بالا بدست خواهد آمد :

Select FactorDate,Isnull([Karimi],0) as [Karimi],isNull([Mohammadi],0) as [Mohammadi],

            IsNull([Sadeghi],0) as [Sadeghi]

From(

       Select Hs.FactorDate,Ds.Quantity,Hs.Cust_Name

       From HdrSale Hs

            Inner Join

      DetailSale DS

            On Ds.IdHdrSale=Hs.Id

      ) As A

Pivot

(Sum(A.Quantity)

      For Cust_Name In([Karimi],[Mohammadi],[Sadeghi])

) As B

Order by FactorDate

 

در Select دوم که داخل From هست هر فیلدی که از جداول بیاریم مانند فیلدهای جلوی Group By می ماند و نتیجه Query بدست آمده تغییر خواهد کرد. به طور مثال اگر فیلد Hs.id نیز اضافه شود دیگر نتیجه فوق را نخواهیم داشت و Sum براساس Group By براساس فیلدهای تاریخ و Id خواهد بود.