a

ABLY مقالات و مطالب مجموعه

صفحه اصلی / ABLY مقالات و مطالب مجموعه

بسم الله الرحمن الرحیم

برطرف کردن خطای Cannot open user default database

هر User در SQL Server یک Database Default دارد، شما می توانید Database پیش فرض یک User را از طریق بخش Security زیر منو Logins برای User خود مشخص کنید. در تصویر زیر ما بر روی کاربر Sa دابل کلیک کرده ایم.




همانطور که در تصویر بالا مشاهده می کنید، در اینجا پایگاه داده پیش فرض کاربر ما Master می باشد.
اگر شما به هر دلیلی پایگاه داده پیش فرض یک User را حذف کنید، خطای زیر اتفاق خواهد افتاد.

خطای Cannot open user default database

حال اگر شما تنها یک کاربر برای SQL Server خود داشته باشید و پایگاه داده پیش فرض این کاربر را حذف کنید، طبیعتا دیگر نمی توانید به Instance مربوطه Login کنید.
در این شرایط راه حل اول نصب یک Instance جدید بر

بسم الله الرحمن الرحیم

آموزش ساخت Full Text Catalog و Full Text Search در SQL Server

در این آموزش مفاهیم زیر را بررسی خواهیم کرد

  • ساخت Full-Text Search

    • ساخت Full-Text Catalog

    • ساخت Full-Text Index

  • نوشتن Query با استفاده از Full-Text Search

  •  استفاده از Full-Text Search  در پروژه های ASP.NET MVC  به کمک LINQ

تصور کنید وب سایتی دارید و میخواهید بر روی حجم زیادی از اطلاعات جستجو انجام دهید. وب سایت شما یک وب سایت آموزشی مانند ABLY.ir است و در آن متن های زیادی وجود دارد. شما میخواهید یک فرم جستجو برای جستجو در تمامی قسمت های وب سایت ایجاد کنید.
چطور می توانید این جستجو را با این ویژگی ها پیاده سازی کنید؟
1- جستجو در کلمات کلیدی
2- جستجو در میان نویسندگان
3- جستجو در مطالب
4- جستجو در عنوان فایل ها
و..

اولین راه حلی که انتخاب می شود JOIN کردن تمام جداول و نوشتن یک دستور SELECT با انجام WHERE بر روی همه ی ستون ها است!.  این راه حل بدترین راه حل ممکن است زیرا در صورتی که حجم اطلاعات شما افزایش یابد عملا سیستم جستجو شما دیگر پاسخگو نخواهد بود زیرا طبیعتا برای جستجو در متن ها باید از دستور LIKE استفاده کنید که این دستور خود به دلیل مقایسه تمامی عبارت های ذخیره شده به صورت بخش به بخش با متن درخواستی کاربر بسیار سرعت کمی دارد، همچنین هزینه JOIN بسیار سنگین خواهد بود و باعث می شود عملا این ویژگی غیر قابل استفاده شود.
SQL Server با ارائه دادن ابزاری به نام Full Text Search به شما این امکان را می دهد که به سادگی و با بهترین کارایی جستجحو های خود را بر روی متن ها انجام دهید.

Full Text Search

Full Text Search ابزاری است که به شما برای ایجاد انواع کوئری های پیچده بر روی داده های از نوع کاراکتر (Character) کمک می کند. این کوئری ها می توانند بر روی کلمات، جمله ها و عبارت ها مورد استفاده قرار گیرند. ما می توانیم یک full-text index را بر روی یک Table و یا یک indexed view ایجاد کنیم. full-text Search تنها می تواند بر روی یک Table و یا یک indexed view مورد استفاده قرار گیرد. Index می تواند تا 1024 ستون (Column) را در بر گیرد.

Full Text Index

Full Text Index از Token هایی تشکیل می شود که این Token ها در واقع همان کلمات درون یک فیلد شما هستند و این امر باعث می شود که بتوان بر روی متون index گذاری کرد و سرعت جستجو را افزایش داد.
مثال: من اسماعیل شیدایی هستم.
اگر مقدار یکی از رکوردهای ما به صورت بالا باشد پس از انجام عملیات full-text index این متن به صورت زیر ذخیره خواهد شد.
"من"
"اسماعیل"
"شیدایی"
"هستم"
این کار باعث می شود تا شما در سریعترین حالت ممکن بتوانید به اطلاعات مورد نظر خود برسید زیرا SQL Server اطلاعات شما را Index گذاری می کند در نتیجه به سرعت می تواند محل قرار گیری (شماره رکورد) هر کلمه را در جدول بازیابی کند.

طبیعتا راه حل پیش فرض برای جستجو در متن ها استفاده از دستور LIKE می باشد.  دستور Like بر روی کاراکترها جستج خود را انجام می دهد و مقدار درخواستی شما را با تمام متن ها مقایسه می کند اما در Full Text Search مقدار درخواستی شما با کلمات مقایسه می شود به همین دلیل تفاوت سرعت اجرای این دو دستور در کوئری های پیچیده بسیار مشخص خواهد بود.

برای ساخت Index می بایست ما مراحل زیر را انجام دهیم.


1.    Create a Full-Text Catalog

2.    Create a Full-Text Index

3.    Populate the Index


Create a Full-Text Catalog

ابتدا دیتابیس خود را انتخاب کرده، سپس از بخش Storage بر روی Full Text Catalog راست کلیک کرده و گزینه New Full-Text-Catalog را انتخاب می کنیم.

آموزش Full Text Search

در پنجره باز شده نامی را برای Full Text Catalog خود انتخاب می کنیم و سپس Ok را انتخاب کنید. Full Text Catalog ما با موفقیت ایجاد شد.

بسم الله الرحمن الرحیم

فراخوانی 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 می توانیم از روش های زیر کمک بگیریم.

بسم الله الرحمن الرحیم

همانطور که می دانید ما در SQL Server نوع داده ای با نام DateTime داریم. این نوع داده ای برای ذخیره اطلاعات تاریخ و ساعت در SQL Server استفاده می شود. در اینجا قصد داریم برخی از توابع مفید برای کار بر روی DateTime را بررسی کنیم.

بدست آوردن تاریخ جاری در SQL Server

برای بدست آوردن تاریخ و ساعت جاری سیستم می توانید از تابع زیر استفاده کنید

select  getdate()

DATEPART

بدست آوردن بخشی از یک تاریخ در SQL Server

اگر بخواهید بخشی از یک تاریخ و زمان را انتخاب کنید، (مثلا فقط روز یا فقط ساعت و....) می بایست از تابع DATEPART استفاده کنید این تابع دو پارامتر دریافت می کند.
پارامتر اول مشخص کننده بخشی از تاریخ و زمان که می بایست انتخاب شود و پارامتر دوم تاریخی است که شما می خواهید بر روی آن کار کنید.

DATEPART ( datepartEnum , yourDate )


به جای datepartEnum می توانید از مقادیر زیر استفاده کنید

datepart

بسم الله الرحمن الرحیم

بدست آوردن کانکشن های فعال در 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)

تصویر زیر خروجی دستور ما را نمایش می دهد

بسم الله الرحمن الرحیم



در این آموزش قصد دارم شما را با یکی دیگر از ویژگی های 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 استفاده کنید.

بسم الله الرحمن الرحیم

در پروژه های MVC شما نیاز خواهید پیدا کرد که دیتابیسی که به وسیله Entity Framework (معمولا در روش Code First) تغییر پیدا کرده است را به حالت قبل بازیابی کنید.

به ازای هر بار درخواست تغییر دیتابیس توسط EF یک شماره منحصر به فرد ایجاد می شود که می توانید در دیتابیس خود در تیبل Migration__  این پارت ها را مشاهده کنید.

برای برگرداندن دیتابیس خود به مرحله قبل می توانید به صورت زیر عمل کنید:

Update-Database -Target 2556

2556 شماره حالتی است که قبل از اعمال تغییرات ثبت شده بوده است.

بسم الله الرحمن الرحیم

در بعضی اگر شما بخواهید یک دستور اسکیوال را از طریق سی شارپ فراخوانی کنید که مدت زمان اجرای آن دستور بسیار طولانی باشد با خطای زیر مواجه می شوید:

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. The statement has been terminated

برای حل این مشکل شما باید مدت زمان Timeout را در SQL Command افزایش دهید و یا این پارامتر را غیر فعال کنید.

به صورت پیش فرض مدت زمان CommandTimeout در SqlCommand برابر با 30 ثانیه می باشد که شما می توانید به صورت زیر آن را تغییر دهید

SqlCommand sqlCommand= new SqlCommand("select * from table_EduOnline");

SqlCommand.CommandTimeout = 100;//100 secound

و یا با مساوی قرار دادن CommandTimeout برار با 0 آن را غیر فعال کنید

بسم الله الرحمن الرحیم

آموزش OLAP و OLTP

با توجه به تکنولوژی های مرتبط در خصوص طراحی و پیاده سازی پایگاه داده ها برای استفاده از سرویس های تحلیلی می توان این پایگاه داده را به دو

دسته کلی تقسیم کرد:

OLAP: همان طور که از نام این گروه مشخص است این پایگاه داده ها برای تحلیل و بررسی مورد استفاده قرار می گیرند که طبیعتا طراحی و ساختار آن با پایگاه داده های معمولی متفاوت خواهد بود. مثلا در طراحی این پایگاه داده ها از ایندکس های بیشتری استفاده می شود که سرعت واکشی و دسترسی به اطلاعات افزایش می یابد اما در عین حال سرعت درج و بر روز رسانی کاهش یافته که این مسئله باعث می شود همین کار در پایگاه داده های OLTP مناسب نباشد. معمولا این پایگاه داده را با کلمه DW خاتمه می یابند. DW مخفف عبارت Data warehouse می باشد که بیانگر پایگاه داده هایی است که برای تحلیل طراحی شده اند

OLTP: این پایگاه داده ها، همان پایگاه داده های اصلی هستند که طبیعتا هر مهندس DBA آن را برای بایگانی و جمع آوری اطلاعات ایجاد می کند. در مبحث BI  (یا همان Business Intelligence که قبلا  توضیحاتی را ارائه داده شد،BI  در واقع بیانگر تبدیل داده ها برای تفسیر و تحلیل برای تجارتی هوشمند می باشد) شما می بایست ابتدا پایگاه داده خود را به صورت ساختار یافته طراحی کنید و سپس برای مباحث DM  نسخه جدیدی از آن طراحی کنید البته معمولا در صورتی که پایگاه داده شما به درستی طراحی شده باشد تغییرات زیادی لازم نیست.

 

مفاهیم مربوط به طراحی OLAP

مهمترین مفهومی که در طراحی سرویس های تحلیلی وجود دارد، مکعب است. مکعب، نمایشی چند بعدی از مقدار کمی مورد تحلیل است. اگر بخواهیم خیلی صریح توضیحی ارائه دهیم، این مثال را در نظر بگیرید که شما می خواهید بدانید هر کالا با چه تعدادی و در چه زمان هایی و توسط چه مشتریانی خریداری شده است. خوب هر کدام از پارامتر ها را یک مقیاس در نظر بگیرید (طول، عرض و ارتفاع) اما نکته قابل توجه این مسئله است که در این مفاهیم می تواند بعد های بیشتری داشت، در این مثال پارامترهای دیگری چون فروشند گان، نوع فروش، سیستم کالا بر، و... پارامترهای دیگری را می توان دخیل کرد اما چون می خواهیم مثال ما ساده باشد همان سه بعد را در نظر می گیریم.

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس