بسم الله الرحمن الرحیم
خطای زیرا شاید خیلی از شما دوستان عزیز نیز مشاده کردید:
Introducing FOREIGN KEY constraint 'FK_dbo.aspnet_UsersInRoles_dbo.aspnet_Users_UserId' on table 'aspnet_UsersInRoles' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors
برای حل این مشکل می توانید از Fluid API استفاده کنید،
در این مثل اگر من کد زیر را به Context خود اضافه کنم مشکل بالا برطرف خواهد شد:
protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
modelBuilder.Entity<aspnet_UsersInRoles>().HasMany(i => i.Users).WithRequired().WillCascadeOnDelete(false);
}
همچنین با استفاده از این کد می توانید تمامی CASCADE DELETES ها را از بین ببرید:
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
اینم مشکل زمانی رخ می دهد که شما در طراحی دیتابیس خود یک چرخه یا Loop ایجاد کرده اید مانند تصویر زیر:
بسم الله الرحمن الرحیم
در این آموزش قصد دارم شما را با یکی دیگر از ویژگی های SQL Server آشنا کنم. متاسفانه بسیاری از افراد فکر می کنند SQL Server فقط یک ابزار برای نگهداری اطلاعات است! و از بسیاری از سرویس های SQL Server بی خبر هستند.
آموزش مانیتورینگ SQL Server و ثبت تغییرات ایجاد شده
SqlDependency
کلاس SqlDependency و Query notifications ابزارهایی هستند که به شما اجازه می دهند SQL Server را مانیتور کنید این ابزار ها در SQL Server 2005 ارائه شدند.
Query Notifications
Query Notifications به برنامه شما اجازه می دهد در صورتی که داده ای در دیتابیس تغییر داده شد، از این تغییر اطلاع پیدا کند.
هدف این کلاس ذخیره کردن اطلاعاتی جدیدی است که مداوم در دیتابیس ایجاد می شود.
اگر شما بخواهید این کار را بدون استفاده از این سرویس انجام دهید باید یک تایمر داشته باشید که در بازه های زمانی معین اطلاعات را بررسی و در صورتی که تغییری ایجاد شد این اطلاعات را برای شما ارسال کند که تعیین این تغییر خود امری دشوار خواهد بود، اگر بخواهیم ساده بگوییم شما کاری را که SQL Server قبلا انجام داده و آن را بهینه کرده است می خواهید انجام دهید!
قبلا در مباحث دیگرSQL Server Broker را توضیح داده ام، در اینجا نیز برای استفاده از این سرویس باید از Service Broker و QUEUE استفاده کنید.
بسم الله الرحمن الرحیم
بدست آوردن کانکشن های فعال در SQL Server
یکی از دوستان در خصوص نحوه بدست آوردن Connection هایی که به هر دیتابیس متصل است، سوالی مطرح کردند.
در SQL Server شما به سادگی می توایند اطلاعات تمامی کاربرانی که به Database ها متصل هستند را بدست آورید. برای بدست آوردن این اطلاعات کافی است که Query زیر را اجرا کنید.
SELECT DB_NAME(dbid) AS DBName,
COUNT(dbid) AS NumberOfConnections,
loginame
FROM sys.sysprocesses
GROUP BY dbid, loginame
ORDER BY DB_NAME(dbid)
تصویر زیر خروجی دستور ما را نمایش می دهد
بسم الله الرحمن الرحیم
آموزش ویندوز آژور و ایجاد یک وب سایت در Windows Azure
در این آموزش می خواهیم نحوه ایجاد یک وب سایت را بر روی Windows Azure Management Portal بررسی کنیم. برای این آمزوش یک وب سایت را publish خواهیم کرد. همچنین در مورد مزایای Web Deploy publishing توسط Windows Azure صحبت خواهیم کرد.
ساخت یک وب سایت به وسیله Windows Azure
برای شروع می بایست به ادرس Windows Azure Management Portal برویم و با استفاده از یک حساب کاربری Microsoft لاگین کنید.
در Windows Azure شما می تواند تا 10 وب سایت را به صورت رایگان میزبانی (Host) کنید.
برای ثبت نام می توانید از طریق این لینک اقدام کنید.
آموزش برنامه نویسی
بسم الله الرحمن الرحیم
آموزش بهینه سازی کوئری در MSSQL Server
یکی از جذاب ترین کارها برای من تعمیر و نگهداری و بهینه سازی سیستم ERP برای کارهای بزرگ است.در یک سیستم که ابتدا برای تعداد محدودی از وظایف طراحی شده بود مشکلاتی ایجاد شد و در طول زمان این سیستم رشد بسیار زیادی کرد و از حد انتظار فراتر رفت.
در این برنامه هنگامی که چند کاربر به طور همزمان از سیستم استفاده می کردند کار با این سیستم عملا غیر ممکن می شد. افزایش ظرفیت عملیاتی در سرور به طور کامل نمی تواند این چنین مشکلاتی را حل کند. پس باید از راه حلهای دیگری استفاده شود، بعد از اصلاح کردن business-functionality و بهینه سازی پرس وجو ها در استفاده از منابع، مشکل حل و فصل شد.
قبل از این که به این مقاله بپردازم در اینجا مقاله ای در خصوص نحوه بهینه سازی و چگونگی انتخاب یک Query توسط SQL Server توضیحاتی را ارائه داده ام. برای اجرا هر دستور چندین Plan توسط SQL Server طراحی می شود و بر اساس الگورتیم های متفاوت بهترین روش که کمترین هزینه را دارد، انتخاب و مورد استفاده قرار می گیرد.
همچنین شما باید بدانید که یک روش (Plan) به چه صورتی ایجاد می شود از این رو بهتر است مقاله ای که در این زمینه قبلا ارائه داده شد را مطالعه کنید.
برای رسیدن به حداکثر سرعت در اجرای یک دستور query optimizer (بخش های مختلف کدهای SQL Server را از یکدیگر تفکیک می کند) همیشه تلاش می کند تا یک روش با مجموعه از فعالیت ها که کمترین میزان ممکن از منابع را اشغال می کنند تولید کند.
هنگام ارزیابی هر روش قابل اجرا، بهینه ساز پرس و جو (query optimizer) در حساب های متفاوت فاکتورهای متفاوتی را ایجاد می کند: اشیا پایگاه داده دخالت داده شده، شرایط join شدن آنها با یکدیگر، لیست های بازیابی شده، حضورشاخص ها، در دسترس بود Index ها و آمارهای واقعی و غیره.
با این حال گاهی اوقات بهینه ساز پرس و جو نمی تواند با داده های واقعی کار کند و به همین دلیل ممکن است در زمان استفاده از روش های مختلف بیشتر یا کمتر از مقدار ارزیابی شده هزینه خود را محاسبه کند. همین امر موجب می شود در گاهی اوقات یک روش بهینه سازی نشده انتخاب شود!
SSMS اجازه می دهد روش
آموزش برنامه نویسی
بسم الله الرحمن الرحیم
آموزش SQL Server 2014
انشالله سعی خواهیم کرد در این دوره آموزشی برخی از مفاهیم و امکانات جدید SQL Server 2014 را بررسی کنیم.
در ابتدا برخی از مفاهیم پایه را بررسی خواهیم کرد و سپس در خصوص تغییرات ایجاد شده در نسخه جدید SQL Server بحث خواهیم کرد.
delayed durability
SQL Server 2014 ویژگی های زیادی را معرفی کرده است یکی از این ویژگی ها Delayed Transaction Durability که در performance و یا همان عملکرد SQL Server تاثیر بسزایی دارد. برای درک بهتر این ویژگی باید ابتدا Full Transaction Durability را بررسی کنیم. به صورت پیش فرض در حال حاضر SQL Server به صورت Full Transaction Durability عمل می کند. سوالی که بسیار مطرح می شود این هست چه نیازی است که ما از حالت پیش فرض به سمت delayed durability حرکت کنیم. جواب این پرسش را می توان اینگونه بیان کرد که اولویت با کارایی است نه با اتمام انجام یک عملیات.
وقتی در حال نوشتن این مقاله بودم نیاز بود تا چند مبحث مقدماتی را مطرح کنم و از همین رو این مباحث را جستجو کردم اما هیچ منبع فارسی پیدا نشد! واقعا عجیب است که همه بر ادعای خود در خصوص DBA پا فشاری می کنیم اما هیچ یک به مباحث پایه اساس بانک های اطلاعاتی اشراف
بسم الله الرحمن الرحیم
همانطور که می دانید ما در SQL Server نوع داده ای با نام DateTime داریم. این نوع داده ای برای ذخیره اطلاعات تاریخ و ساعت در SQL Server استفاده می شود. در اینجا قصد داریم برخی از توابع مفید برای کار بر روی DateTime را بررسی کنیم.
بدست آوردن تاریخ جاری در SQL Server
برای بدست آوردن تاریخ و ساعت جاری سیستم می توانید از تابع زیر استفاده کنید
select getdate()
DATEPART
بدست آوردن بخشی از یک تاریخ در SQL Server
اگر بخواهید بخشی از یک تاریخ و زمان را انتخاب کنید، (مثلا فقط روز یا فقط ساعت و....) می بایست از تابع DATEPART استفاده کنید این تابع دو پارامتر دریافت می کند.
پارامتر اول مشخص کننده بخشی از تاریخ و زمان که می بایست انتخاب شود و پارامتر دوم تاریخی است که شما می خواهید بر روی آن کار کنید.
DATEPART ( datepartEnum , yourDate )
به جای datepartEnum می توانید از مقادیر زیر استفاده کنید
datepart |
آموزش برنامه نویسی
بسم الله الرحمن الرحیم
SQL Injection
در این آموزش قصد داریم در خصوص امنیت در SQL Server به صورت مختصر صحبت کنیم.
معمولا بیشتر مشتریان نگران امنیت اطلاعاتشان هستند و از تدابیری برای جلوگیری از SQL Injection صحبت می کنند. بیشتر اتفاقاتی که در خصوص SQL Injection رخ می دهد به دلیل مشکلاتی است که در SQL Server توسط طراحان پایگاه داده و برنامه نویسان انجام می شود، زیرا بیشتر طراحان اطلاعات کافی در خصوص SQL Injection ندارند و تنها نام آن را شن
بسم الله الرحمن الرحیم
فراخوانی Stored Procedure
برای انجام هر کار طبیعتا روش های متفاوتی وجود دارد. در این مقاله قصد داریم نحوه یافتن یک Stored Procedure را در روش ها مختلف بررسی کنیم.
برای مثال در ابتدا یک Procedure به صورت زیر تعریف می کنیم.
CREATE PROCEDURE TESTING
(@OPTION INT)
AS
IF @OPTION=0
SELECT 1 AS NUMBER
ELSE
SELECT 100 AS NUMBER
GO
برای یافتن و مشاهده این Procedure می توانیم از روش های زیر کمک بگیریم.
کاربر ABLY
دقیقا همینطور هست که در متن گفتید. باید تخته هوشمند ...
کاربر ABLY
با سلام عالی بود. لطفا مبحث فلاتر رو هم ادامه ...
مدیر سایت
سلام و درود ممنون از لطفتان بله حتما ...
کاربر ABLY
درود و سپاس از مطلبتون درمورد WHILE @@FETCH_STATUS = 0 ...
کاربر ABLY
ممنونم. استفاده بردم. ...