لوحة التحكم
الصفحة الرئيسية
admin's Blog
الوصف:

09 Aug, 2008

  

السلام عليكم ورحمة الله وبركاته ...

 وقعت بالصدفة قبل فترة على موقع VistaDB و الحقيقة فوجئت لما وجدت داخله ...

أولاً: ما هو VistaDB ؟

VistaDB هي قاعدة بيانات SQL ... مصممة خصيصاً لمطوري بيئة الدوت نت NET. تعمل على الـ Microsoft .NET Framework و على Compact Framework الخاصة بالأجهزة الكفية و على Mono على لينكس.

 

 

ثانياًُ: ماذا يميز VistaDB ؟

طبعاً من تعريف VistaDB السابق، نجد انها لم تقدم شيء جديد!! و لكن VistaDB هي قاعدة بيانات خفيفة جداً صغيرة الحجم (أقل من 1 ميقا). و هي ملف DLL واحد فقط. أي ان محرك قواعد البيانات ليس EXE و لكنه ملف DLL واحد فقط تستطيع إدراجه في مشروعك و هو كما قلت أقل من وحد ميقا.

و ما يميز VistaDB أيضاً هو ان قواعد البيانات الخاصة بها هي أيضاً ملف واحد و لا يوجد Log file و Data file و لكن يوجد ملف واحد امتداده VDB3. و تستطيع عمل نسخة إحتياطية لقاعدة بيانات بأمر XCopy أو نسخ الملف الموجود فقط و تستطيع استرجاع قاعدة البيانات بلصق الملف فقط.

VistaDB تستطيع تحمل حجم 4 تيرابايت لكل قاعدة بيانات. و 65,535 جدول لكل قاعدة بيانات و 65,535 عمود لكل جدول و 65,535 Index لكل جدول أيضاً.

تدعم VistaDB النسخة الثالثة SQL-99 و لمزيد من المعلومات عن ذلك يمكنك زيارة الموقع هنا.

كما أن VistaDB تدعم Unicode و ذلك لكتابة باللغة العربية على سبيل المثال.

تستطيع التعامل مع VistaDB عن طريق T-SQL بنفس الطريقة مع MS SQL Server 2005 و تستطيع استخدام CLR باستخدام السي# أو VB.net.

يوجد منها نسخة Exress مجانية و لمزيد من المعلومات عنها تفضل هنا.

كما أن VistaDB مطورة بالكامل باستخدام #C.

و توجد عدد من الأدوات للتطوير باستخدام VistaDB مثل Data Migration Wizard و ذلك لنقل بياناتك من MS Access أو MS SQL Server إلى VistaDB .

كما يوجد Data Builder و التي تعطيك شاشات للتعامل مع قواعد بيانات داخل VistaDB حيث تستطيع إنشاء أو تعديل او حذف جدول كما تستطيع انشاء indexes, triggers, constraints, columns. و تسطيع عمل database encryption من خلالها.

كما انه لا يوجد حد لعدد CPU أو RAM الذي يدعمها.

 

ثالثاً: كيف تعمل VistaDB ؟

كما قلت سابقاً، محرك قواعد بيانات VistaDB هو ملف DLL واحد فقط، و قاعدة البيانات هي عبارة عن ملف VDB3 واحد. و باستخدام اداة مثل ILMerge تستطيع ان تضمن ملف DLL داخل ملف EXE الخاص ببرنامج.

و الشكل أدناه يبين آلية عمل VistaDB و  البرنامج الذي تبنيه. كما يبين الشكل ان VistaDB ستكون جزءً من البرنامج أو الموقع الذي تبنيه.

 

 

 

و عند ذلك لا داعي أن نحمل محرك قواعد البيانات مثلاً MS SQL Server 2005 في جهاز العميل الذي يستخدم الموقع أو البرنامج. كما أنه عند البحث عن مستضيف موقعك الشخصي لن تقلق إذا كان يدعم MS SQL Server أم لا فكل ما تحتاجه هو NET. فقط لكي تعمل VistaDB .

 

اتمنى أن يكون طرحي مفيداً و موفقاً و سوف اختبر المنتج و أبدي لكم رأيي فيه متى ما سمحت الفرصة.

 

 ولمزيد من المعلومات يمكنكم زيارة الموقع الرسمي http://www.vistadb.net/

 

مع تحياتي ,,, طلال الحضبي.

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

السلام عليكم ورحمة الله وبركاته ...

أخواني أقدم لكم اليوم برنامج (الموسوعة القرآنية)  للجوال بالرسم العثماني + بحث + تفسير الطبري  و تفسير المنتخب ( لعلماء الأزهر ) + أسـباب النزول (للنيسابوري) +  تلاوة.خاص لنوكيا الجيل الثالث ( مثل N95 , N73 , N82 , N81 .......إلخ )

 

مزايا البرنامج:

- النص الكامل للقرآن الكريم و بالرسم العثماني الكامل

- تغيير لون خلفية الشاشة بالضغط على رقم 4  او  رقم 5 لتغيير لون الحركات اما اسود او احمر

-بضغط على الزر الايسر العلوي في الجوال ننتقل الى التفسير

- ويمكنك الانتقال الى التفسير الاخر  بضغط على الزر الايسر العلوي اثناء تواجدك في صفحة التفسير كما في الصوره التاليه

 

-كما يمكنك البحث في القرآن بجذر الكلمة

 

تحميل البرنامج
عند تحميل البرنامج تجد اربع ملفات
ثبت البرنامج الرئيسي  ( القرآن )  ( على ذاكرة الهاتف )
ثم ثبت باقي الملفات  لايهم الترتيب ( على ذاكرة البطاقة)

 

ملاحظه مهمه :
عن التثبيت بيطلع لك رساله تقول ان الشهاده منتهية

لتخطي الرساله  رجع تاريخ جوالك لعام 2007 وبعد ماتخلص مثبت البرنامج رجع التاريخ الى وضعه الاول
طريقة ترجيع التاريخ
الأدوات ثم  الضبط  ثم  عام ثم التاريخ و الوقت

تثبيت البرنامج من هنا

almwsw3h.zip (1.88 mb)

 

مع تحياتي ... طلال.

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

 

السلام عليكم ورحمة الله وبركاته ...

كما هو في العنوان، نريد ان نبح عن جملة "String" في جدول معين، و لكن المشكلة هي أننا نريد البحث في جميع حقول هذا الجدول و ليس في حقل واحد ... لكي نجعل البحث عام بشكل أكبر ...

الحل هو استخدام الكود التالي، و هو ينشئ Stored Procedure داخل قاعدة البيانات Master باسم sp_FindStringInTable و تقوم هذه الدالة بالبحث عن جمله داخل جدول...

الدالة sp_FindStringInTable تأخذ ثلاثة متغيرات للبحث ... هي:

stringToFind و هي الجملة المراد البحث عنها ...

schema و هي الschema المراد البحث داخلها ...

table و هو الجدول المراد البحث داخله ...

سنقوم كما قلت بانشاء هذه الدالة داخل قاعدة البيانات Master لكي يمكن استخدامها في اي قاعدة بيانات تكون موجودة لديك ...

USE master
GO

CREATE PROCEDURE sp_FindStringInTable @stringToFind VARCHAR(100), @schema sysname, @table sysname
AS

DECLARE @sqlCommand VARCHAR(8000)
DECLARE @where VARCHAR(8000)
DECLARE @columnName sysname
DECLARE @cursor VARCHAR(8000)

BEGIN TRY
   SET @sqlCommand = 'SELECT * FROM ' + @schema + '.' + @table + ' WHERE'
   SET @where = ''

   SET @cursor = 'DECLARE col_cursor CURSOR FOR SELECT COLUMN_NAME
   FROM ' + DB_NAME() + '.INFORMATION_SCHEMA.COLUMNS
   WHERE TABLE_SCHEMA = ''' + @schema + '''
   AND TABLE_NAME = ''' + @table + '''
   AND DATA_TYPE IN (''char'',''nchar'',''ntext'',''nvarchar'',''text'',''varchar'')'

   EXEC (@cursor)

   OPEN col_cursor  
   FETCH NEXT FROM col_cursor INTO @columnName  

   WHILE @@FETCH_STATUS = 0  
   BEGIN  
       IF @where <> ''
           SET @where = @where + ' OR'

       SET @where = @where + ' ' + @columnName + ' LIKE ''' + @stringToFind + ''''
       FETCH NEXT FROM col_cursor INTO @columnName  
   END  

   CLOSE col_cursor  
   DEALLOCATE col_cursor

   SET @sqlCommand = @sqlCommand + @where
   --PRINT @sqlCommand
   EXEC (@sqlCommand)
END TRY
BEGIN CATCH
   PRINT 'There was an error'
   IF CURSOR_STATUS('variable', 'col_cursor') <> -3
   BEGIN
       CLOSE col_cursor  
       DEALLOCATE col_cursor
   END
END CATCH

الآن هذا الكو قام بانشاء الدالة sp_FindStringInTable .

و لكي نستخدمها من الممك ان نستخدم هذا الكود:

USE AdventureWorks
GO
EXEC sp_FindStringInTable '%land%', 'Person', 'Contact'

و لاحظ أننا استخدمنا علامة % و من الممكن أن نستخدم * أيضاً لتحديد البحث بشكل أكبر ...

 

أتمنىأن تكون هذه الدالة مفيدة ...

نصيحة شخصية: لا تستخدم هذا الأسلوب في البحث إلا في الضرورة القصوى، حاول أن تستخدم بحث محدد في حقول و جداول محددة و ذلك لرفع كفائة الإستعلام Query الذي تكتبه.

إن كنت تريد البحث باللغة العربية استبدل varchar بـ nvarchar.

 

طلال الحضبي.

المصدر: MSSQLTips.com

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

السلام عليكم ورحمة الله وبركاته ...

 اليوم سوف اتكلم عن مفهوم Membership و Role Management في بيئة ASP.NET...

كثير من الأحيان نحتاج في برامجنا إلى تحديد مستخدمين للنظام(Members)، و هاؤلاء المستخدمين سوف تكون لهم مجموعة من المهام (Roles) و كل مجموعة منهم سوف تكون لهم خصائص و صلاحيات معينة.

على سبيل المثال، يوجد لدينا نظام إدارة مكتب عقاري، سوف تكون هناك صفحات للمستخدم العادي لكي يبحث عن العروض و تفاصيلها و سوف تكون هناك صفحات أيضاً لمسؤول النظام لكي يعمل على إدارة النظام من خلاله "إضافة عروض" على سبيل المثال.

لابد أن نتأكد في برنامجنا من أن المستخدم العادي للنظام لا يستطيع الوصول إلى صفحات إدارة النظام.

هناك طريقتين لعمل ذلك: الأولى هي أن نقوم بهذه المهمة برمجياً و هي معرضه للأخطاء طبعاً. و الأخرى هي استخدام   ASP.NET Membership &  Roles.

في سبيل استخدام هذه الخصائص لابد لك من وسيلة تخزن فيها اسماء المستخدمين و معلوماتهم، و بالتأكيد سوف نستخدم MS SLQ Server.

في البداية، دعونا نقوم بانشاء قاعدة بيانات باسم MyNewDB "طبعاً لابد من استخدام اسم افضل، و انا استخدمت هذه الاسم لدواعي العرض فقط" كما في الصورة:

الآن لدينا قاعدة بيانات فارغة و نريد من ASP.NET بملئ هذه القاعدة بالجداول المطلوبه، و ذلك عن طريق الأداة aspnet_regsql تستطيع الوصول إليها عن طريق:

 Start ثم All programs  ثم  Microsoft Visual Studio 2005 ثم Visual Studio Tools ثم Visual Studio 2005 Command Prompt. كما في الصورة:

اضغط على الصورة لتكبيرها

 

الان سوف تفتح نافذة اكتب فيها aspnet_regsql كما في الصورة:

اضغط على الصورة لتكبيرها

 

الآن سوف تفتح إداة تكون الجداول كما في الصورة:

اضغط على الصورة لتكبيرها

 

اضغط next ثم اختر الخيار الأول للإضافة كما في الصورة:

اضغط على الصورة لتكبيرها

 

و بعد ذلك اضغط على next ثم ثم باختيار اسم سيرفر قواعد البيانات "إذا كانت قواعد البيانات في نفس الجهاز اكتب localhost" و اختر اسم قاعدة البيانات الفارغة التي قمنا بانشائها كما في الصورة:

اضغط على الصورة لتكبيرها

 

و هنا انا استخدمت توثيق  Windows و بالامكان استخدام توثيق SQL إذا رغبت.

بعد ذلك اضغط على next و في النافذة الأخيرة اضغط على Finish كما في الصورة:

اضغط على الصورة لتكبيرها

 

الآن لو تفحصت قاعدة البينات التي انشئتها سوف تجد جداول Tables و View و Stored Procedures قد تم انشائها و كل ذلك للتعامل مع Roles و الـ Members في ASP.NET. كما في الصورة:

 

اضغط على الصورة لتكبيرها

 

في التدوينة القادمة إن شاء الله سوف أتكلم عن استخدام تعريف الـ Roles و Memebership في ASP.NET.

 

بالتوفيق...

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

بسم الله الرحمن الرحيم ...

السلام عليكم ورحمة الله وبركاته ...

 تطرقنا في الدوينة الماضية إلى الدرس الأول: إنشاء قاعدة بيانات Membership و Role في ASP.NET و اليوم سوف نتطرق إن شاء الله إلى كيفية تعريف الـ Roles و Members في ASP.NET.

في البداية يفترض أنك قمت بانشاء قاعدة البيانات التي سوف نستخدمها كما فعلنا في الدرس السابق الدرس الأول: إنشاء قاعدة بيانات Membership و Role في ASP.NET.

الآن افتح الفجول ستديو 2005 أو 2008 أيهما تشاء ... أنا سوف استخدم النسخة 2005.

الآن انشئ موقع ويب جديد كما في الصورة:

 

اختر اسم الموقع و لغة البرمجة التي سوف تستخدمها، أنا سوف اختار اسم "MyMembershipSite" و سوف اختار لغة سي# في هذا الدرس كما في الصورة:

 

اضغط على الصورة لتكبيرها

 

ثم اضغط على OK ثم اختر View ثم Solution Explorer إذا لم يكن ظاهراً لديك.

بعد ذلك، بزر الفأرة الأيمن اضغط على الـ Solution ثم Add New Item كما في الصورة:

 

ثم من النافذة اختر Web Configration File ثم Add و لا تغير شيء كما في الصورة:

 

اضغط على الصورة لتكبيرها

 

الآن نحتاج أن نضيف ConnectionString إلى قاعدة البيانات التي انشئناها في الدرس الأول.

نضيف الكود التالي داخل Web.Config:

<add name="MyNewDBConnectionString" connectionString="Data Source=[Server];Initial Catalog=MyNewDB;Integrated Security=True" />

و استبدل [server] باسم الجهاز الذي يوجد فيه قاعدة البيانات. و هذا الكود يخبر ASP.NET بأن قاعدة بياناتنا موجودة في الجهاز [server] و سوف نستخدم قاعدة البيانات التي اسمها MyNewDB و سوف نستخدم توثيق وندوز.

و بعد ذلك في System.Web اكتب الكود التالي:

<membership defaultProvider="CustomizedProvider">
    <providers>
 <add name="CustomizedProvider"
       type="System.Web.Security.SqlMembershipProvider"
      connectionStringName="MyNewDBConnectionString"
      applicationName="MyMembershipSite"
      minRequiredPasswordLength="5"
      minRequiredNonalphanumericCharacters="0" />
    </providers>
</membership>


<roleManager enabled="true" defaultProvider="CustomizedRoleProvider">
        <providers>
          <add name="CustomizedRoleProvider"
               type="System.Web.Security.SqlRoleProvider"
               connectionStringName="MyNewDBConnectionString" />
        </providers>
</roleManager>

و هذا الكود يخبر ASP.NET بأننا سوف نستخدم مزود للـ Membership و الذي هو SqlMembership (اي يخزن و يقرأ من SQL) و أخبرناه عن طريق الـ ConnectionString بمكان قاعدة البيانات.  و كذلك الحال بالنسة للـ RoleManager.

و لاحظ أننا كتبنا اسم التطبيق و هذا مهم للغاية لكي لا يحدث لك مشاكل أثناء نشر Deploy الموقع. و لاحظ اننا حددنا بعض القيود و الشروط على كلمة السر، فجعلنا أنه لابد لمستخدمي النظام من استخدام كلمة سر بطول خمسة حروف على الأقل و من الممكن أن تغيرها إلى ما تشاء.

الآن شكل Web.config كالتالي:

 و من الممكن تحميل ملف Web.Config من الرابط في الاسفل و ذلك للتأكد من الخصائص لديك ...

Web.config (2.53 kb)

 

بعد ذلك اضغط على رز ASP.NET Configration كما هو موجود في المربع الاحمر في الصورة أدناه أو اذهب إلى WebSite ثم ASP.NET Configration .

الآن سوف تفتح لك نافذة Internet Explorer مثل هذه:

 

اضغط على الصورة لتكبيرها

 

الآن اذهب إلى الTab العلوي Security كما في الصورة:

 

الآن التوثيق المستخدم في النظام (و ليس قاعدة البيانات) هو وندوز، و نريد ان نغيره إلى Form و يمكننا ذلك عن طريق تعديل Web.Config مباشرة أو الذهاب إلى Select Authentication Type كما في الصورة:

 

ثم اختر الاختيار الأول From the Internet كما في الصورة:

و عندما يتم التغيير و عندما تذهب إلى ملف Web.Config سوف تجد رسالة تشبه هذه:

 

اضغط على الصورة لتكبيرها

 

و هي تفيد بأنه تم تغيير في ملف web.config، ببساطة اضغط على Yes to All. و هذا لأن ASP.NET Web Admin Tool قام بعمل تغيير على web.config عندما غيرنا توثيق ASP.NET إلى Form بدلاً من Windows.

 

و الآن من المفترض أن يكون الشكل كالتالي:

 

اضغط على الصورة لتكبيرها

 

ثم بعد ذلك لنقوم بإنشاء عدد 2 Role و احدة للـ Admin و الأخرى Users. و ذلك عن طريق الضغط على Create or Manage Roles.

ثم ادخل اسم Role و اضغط على Add كما في الصورة:

و بنفس الطريقة اضف Role اخرى باسم UserRole.

و الآن لدينا 2 Role و 0 User.

و على سبيل التجربة اضف عدد 3 مستخدمين عن طريق الرابط Create User. و اجعل واحد باسم Admin في AdminRole و الآخر User في الـ UserRole و الثالث AnyUser و لا تجعله ضمن أي Role كما في الصورة:

اضغط على الصورة لتكبيرها

 

و بعد اضافة الثلاثة مستخدمين سيكون الشكل كالتالي:

 

و في النهاية لو ذهبت إلى قاعدة البيانات عن طريق الـ MS Sql Server Managment Studio  و ذهب إلى قاعدة البيانات MyNewDB و ذهبت إلى الجدول aspnet_Users على سبيل المثال سوف تجد المستخدمين اللذين أضفتهم و كذلك الجدول aspnet_Roles.

 

في الدرس القادم سوف ندخل بشكل أعمق في ASP.NET و استخدام الـ Login Controls و سوف نرى أيضاً كيف يمكننا تحديد صلاحيات على مستوى الصفحة و على مستوى المجلد أيضاً.

 

مع تحياتي ... طلال الحضبي.

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

السلام عليكم ورحمة الله وبركاته ...

 

في بعض الأحيان تحدث مشكلة في تقرير معين في MS SQL Reporting Services، و لكن عرض التقرير بالطبع سيكون خارج السيرفر الذي يستضيف التقرير. لذلك إن كان هناك خطأ ما لن نتمكن من عرضه بسبب أن التقرير يعرض عن بعد Remotly.

و لتفعيل إظهار الأخطاء عن بعد يمكن اتباع الطريقة التالية:

افتح برنامج الـ Notepad و اكتب السكريبت التالي:

Public Sub Main()
  Dim P As New [Property]()
  P.Name = "EnableRemoteErrors"
  P.Value = True
  Dim Properties(0) As [Property]
  Properties(0) = P
  Try
    rs.SetSystemProperties(Properties)
    Console.WriteLine("Remote errors enabled.")
  Catch SE As SoapException
    Console.WriteLine(SE.Detail.OuterXml)
  End Try
End Sub

و احفظ الملف بالامتداد rss باسم EnableRemoteErrors.rss على سبيل المثال.

اذهب إلى Start ثم Run ثم اكتب cmd و سوف يظهر لك محرر الأوامر Console اذهب إلى مكان الملف الذي انشأته.

و الآن اكتب الأمر

rs -i EnableRemoteErrors.rss -s http://servername/ReportServer 

و استبدل servername باسم السيرفر الذي يستضيف التقرير و استبدل ReportServer بالـ Virtual Path الخاص بالتقارير.

 

طبعاً في النهاية عدل الكود أعلاه و استبدل P.Value = True بـ P.Value = False

لأنك لا تريد أن تدع الـ RemoteError ظاهرة للجميع كإحتياط أمني Cool

 

مع تحياتي ... طلال الحضبي.

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

SQL Execution Plan

السلام عليكم ورحمة الله وبركاته ...

ما يميز لغة SQL عن لغات البرمجة الإعتيادية هو أن لغات البرمجة الإعتيادية مثل C, C#, Java, VB.net هو انه لابد للمبرمج أن يخبر البرنامج عن طريق الكود كيف سيعمل البرنامج!
فمثلاً لو كان لدينا ملف يوجد به بيانات و أردنا أن نبحث داخل هذه البيانات لابد من أخبار لغة البرمجة ما الذي يجب عمله بالتحديد، أي كتابة خوارزمية خطوة بخطوة لتنفيذ البحث و لن يتخذ البرنامج قراراً بدون أن برمجه ليتخذ هذا القرار.
و لكن في SQL لو أردنا البحث داخل جدول كل ما علينا عمله هو كتابة Select...From...Where و محرك قواعد البيانات سواء كان Oracle أو SQL Server سيتولى مهمة كيفية البحث بالتحديد عن المبرمج. أي أننا سنقول له "ابحث" و قاعدة البينات ستتولى طريقة البحث بما تراه مناسباً.

و لكي يقوم محرك قواعد البيانات بالبحث، توجد هناك عدة خطوات تدور خلف الكواليس لهذه الآلية، و الهدف من هذه الآليات هو أن تقدم لك البيانات بأسرع و أفضل طريقة ممكنة.

ملاحظة: يستطيع محرك قواعد البيانات البحث بعدة طرق، و لكن توجد طرق أفضل غيرها للبحث و سيحرص محرك قواعد البيانات أن يعطيك أفضل نتيجة ممكنة.

و هذه الخطوات تتم عند إرسال أي استعلام Query لمحرك قواعد البيانات مراراً و تكراراً.

و يمكن تقسيم هذه الخطوات إلى خطوتين أسايتين هما:
1. خطوات تتم في المحرك العلائقي Relational Engine.
2. حطوات تتم في محرك التخزين Storage Engine.

في المحرك العلائقي، يتم تحليل Parse جملة الإستعلام Query ثم تمرر إلى محسن الاستعلام Query Optimizer و الذي يقوم بتوليد خطة التنفيذ Execution Plan الخاصة الجملة.
ثم يتم تمرير "خطة التنفيذ Execution Plan" إلى محرك التخزين Storage Engine على هيئة 0 و 1 (Binary Format). عند ذلك يقوم محرك التخزين Storage Engine باستخدام هذه الخطة للوصول إلى البيانات الأصلية أو تحديثها. و داخل محرك التخزين Storage Engine توجد العمليات مثل قفل الصف Row Lock و استخدام Index و ما إلى ذلك.

تحليل الاستعلام Query Optimizer:
عند ارسال جملة الاستعلام، فأول خطوة سوف تتم هي ارسالها إلى محلل الإستعلام، و يتم التأكد من صحة طريقة كتابة الجملة. و محلل الاستعلام يستقبل جملة الإستعلام كمدخل Input و سيولد شجرة التحليل Parser Tree كمخرج Output. و هذه الشجرة تمثل الخطوات المنطقية Logical Steps لكي يتم تنفيذ جملة الاستعلام.
بعد ذلك ترسل شجرة التحليل إلى عملية الجبرية Algebra Procces و التي تقوم بدورها بتوصيل Resolve جميع اسماء الجداول و الحقول إلى الاسماء المكتوبة في جملة الاستعلام. كما يقوم هذا المحرك "Algebra Procces" بتأكد من أنواع الحقول المكتوبة في الجملة بالتي توجد في جدول الأصلي مثل Int, Varchar و ما إلى ذلك.
و العملية الجبرية مهمة للغاية حيث أننا في جملة الاستعلام من الممكن ان نستخدم aliases و synonyms و التي لا توجد في قاعدة البيانات، كما أنه من الممكن أن توجد اسماء غير موجودة أصلاً في قاعدة البيانات و هي ليست aliases  أو synonyms.
و عند الانتهاء من العملية الجبرية Algebra Procces يتم اخراج شجرة Query Processor tree و التي تمرر إلى محسن الاستعلام Query Optimizer.

محسن الاستعلام Query Optimizer:
محسن الاستعلام هو عبارة عن برنامج موجود داخل محرك قواعد البيانات و الذي يقوم بإخبار محرك قواعد البيانات بكيفية العمل.
و باستخدام شجرة Query Processor tree و التي تم اصدارها من قبل محلل الاستعلام و باستخدام بعض الإحصائيات statistics التي يقوم محرك قواعد البيانات بجمعها، يتم اصدار خطة التنفيذ التي يرى محرك قواعد البينات أنها الأنسب.
يقوم محسن الاستعلام بتحديد إمكانية الوصول إلى البيانات عن طريق Inedx؟ ماهو نوع الـ Jion الذي سيستخدم؟ و يتم تحديد هذه الأمور بناء على تحديد كلفة Cost خطة العمل execution Plan التي سيتم اصدارها و التي تعتمد على حجم استخدام المعالج CPU و على كلفة القراءة و الوصول إلى المعلومات I/O و كم هي سرعة الوصول.
سيقوم محسن الاستعلام باصدار عدة خطط تنفيذ، و بعد ذلك سيقوم بالمقارنة بينها بناء على المعطيات أعلاه، و سيتم اختيار أقل هذه الخطط كلفة على محرك قواعد البيانات و الذي يستخدم الموارد بأقل قدر ممكن. (الموارد: CPU, I/O).
و في بعض الأحيان سوف يختار المحرك أي خطة إذا اعتقد أن المقارنة فيما بينها سوف تأخذ وقت أكبر من وقت المقارنة فيما بينها.
"إذا كانت خطة التنفذ لاستعلام معين موجودة في الـ Cache من قبل لن يتم تنفيذ كل هذه الخطوات من جديد."

في النهاية عندما يقوم محسن الاستعلام باختيار خطة التنفيذ سوف يقوم بحفظها في الـ cache لكي يتم الاستفادة منها مستقبلاً.

منفذ الاستعلام Query Execution:
بعد اصدار خطة التنفيذ، سيتم ارسالها إلى منفذ الاستعلام، و سيتم الدخول إلى محرك النخزين Storage Engine و الذي سيتم التنفيذ فعلاً داخله.
بعد ذلك سوف تعاد نتيجة الاستعلام إليك.

كل هذه الخطوات سيتم نفيذها عندما ترسل جملة استعلام Query Statment إلى محرك قواعد البيانات لديك.


في القريب إن شاء الله سوف أتطرق إلى حطة التنفيذ Execution Plans و كيف تستطيع قرائتها و كيف من الممكن ان تستفيد من هذه الخطة في سبيل تحسين جملة الاستعلام التي نكتبها.


مع تحياتي ... طلال.

 

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

السلام عليكم ورحمة الله وبركاته ...

 

في كثير من الأحيان نراقب أداء محرك قواعد البيانات SQL Server 2005 مثلاً عن طريق برامج مثل Microsoft Management Console ...كما في الشكل ادناه:

اضغط على الصورة للتراها بحجمها الطبيعي

و لكن هذه الطريقة من المراقبة فعالة عندما نكون نراقب وقت معين و نقوم بمراقبة counters قليلة العدد.

 

و لكن عندما يكون لدينا عدد كبير من counters، و نريد ان نعرف مستوى اداء محرك قواعد البيانات في فترة يوم كامل أو أسبوع أو حتى شهر، فاستخدام Microsoft Management Console مباشرة لا يعود بالكثير من النفع.

الطريقة الأمثل لهذا الوضع هو استخدام برنامج Microsoft Management Console و لكن نقوم بعمل Log File لهذه الـ Counters و من ثم عرضها في Excel و توليد بعض التقارير بناء على هذه البيانات.

أولاً: لن أقوم بشرح طريقة عمل الأداة Microsoft Management Console.

ثانياً: اضغط على Start ثم run ثم اكتب perfmon.msc. بعد ذلك ستظهر لك نافذة مثل هذا الشكل:

اضغط على الصورة للتراها بحجمها الطبيعي

 

و من ثم اضغط على Performance Log and Alter و من ثم بزر الفأرة اليمين اضغط على Counter Log و اختر New Log Settings كما في الصورة.

 

الآن ادخل الاسم الذي تريد، أنا سوف استخدم MyLog.

الان سوف تفتح لك نافذة كما في الشكل ادناه:

 

اضغط على الزر Add Counters كما في المربع الأحمر.

سوف تفتح لك نافذة مثل الشكل التالي:

 

في المربع رقم (1) اختر اسم السيرفر الذي تود عمل مراقبة عليه.

في المربع رقم (2) اختر الـ Object الذي تود مراقبته.

في المربع رقم (3) اختر Counter الذي تريد.

 

في سبيل التجربة سوف نستخدم 3 counters كمثال.

 لنختر الـ Object مثلاً Processor  و نختر Counter مثلاً Proccessor Time.

لنختر أيضاً Memory و counter مثلاُ Available MB

لنختر أيضاً SQL Server:Databases و counter مثلاُ  Total Active Transactions. ليكون الشكل كالتالي:

 

الان اضغط على Log Files و من Log File Type اختر text File (Comma delimited) كما في الصورة:

ثم اختر End File Name بـ YYYYMMDD لكي يكون اسم الملف ينتهي بالتاريخ.

و احفظ مكان تخزين الملف، في حالتي سيكون: C:\PerfLogs\MyLog_20080705.csv

 

الان ارجع إلى الـ tab الذي اسمه General...

و في Sample Data Every اختر 5 دقائق كما في الصورة

ثم اذهب إلى Schedual و اختر الوقت الذي تريد فيه ان يعمل، أنا سوف اختار ان يعمل من الآن و يتوقف بعد يوم واحد.

الآن اضغط على OK و سوف يوجد لديك  في الصفحة Log الجديد الذي اسمه MyLog كما في الشكل:

 

الـ Log الأول في الصورة هو Log استخدمه في مراقبة قواعد البيانات لدي، و الثاني هو اللذي قما بانشائه قبل قليل. و الأخير هو خاص بالنظام و لا تعدل عليه.

و الآن اضغط بزر الفأرة اليمين على MyLog ثم اختر start و سوف يتحول لونها إلى الأخضر، دليل انها تعمل حالياً كما في الرسم:

 

ملاحظة: قد تحتاج في خصائص الـ Log أن تحدد القيمة Run As و كلمة المرور الخاصة بالمستخدم.

 

الآن لندع الـ Log يعمل لهذا اليوم، و في التدوينة القادمة سوف نتطرق لكيفية عرض هذه البيانات في برنامج Excel و كيف من الممكن نظهر بعض الرسوم التوضيحية لأداء السيرفر.

 

مع تحياتي ... طلال الحضبي.

 
Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

السلام عليكم ورحمة الله وبركاته ...

تكلمنا في الدرس السابق عن طريقة صنع تقارير عن آداء MS SQL Server بواسطة Excel... في هذا الرابط...  الدرس الأول: كيف تصنع تقارير عن آداء SQL Server بواسطة Excel؟

اليوم سوف نكمل ما قمنا به الدرس السابق ...

الآن و بعد انتظار دام 24 ساعة (يوم كامل) كما حددنا MyLog ... أصبح ملف Excel جاهز للاستخدام ... كما في الصورة ... اذهب إلى مكان تخزين ملف الـ Excel:

 

افتح الملف و سوف يظهر لك شكل شبيه بالذي في الصورة ادناه:

و لكن السطر الأول ليس واضح بما فيه الكفاية لذلك لنقم باعادة تسمية السطر الأول الخانة A بـ Time.

و في الخانات الباقية لنزل اسم السيرفر (يمكنك عمل ذلك بواسطة Find و Replace إذا كان يوجد لديك خانات كثيرة). و سوف يصبح الشكل كالتالي:

اضغط على الصورة لرؤية حجمها الطبيعي

 

 و الآن اضغط على الخانة A و يزر الفأرة اليمين اختر Format Cell كما في الصورة:

و سوف تظهر لك نافذة كالتالي:

اضغط على الصورة لرؤية حجمها الطبيعي

 

و الآن اختر نوع Date أو Time و اختر الشكل الذي تريد ...

و سوف يتغير شكل العمود A إلى الشكل الذي اخترته كما في الصورة:

 

الآن اختر Insert ثم Pivot Chart كما في الصورة (و تأكد من الضغط على الخانة A1):

 

و الآن سوف تظهر لك نافذة مثل الموجودة في الصورة أدناه:

اضغط على الصورة لرؤية حجمها الطبيعي

 

و الآن لاحظ ما داخل المربع الأحمر ... هي الخانات الموجودة في جدول Excel ... و الآن لنختر Time و Proccessor كما في الصورة:

سوف يتغير شكل الرسم الموجود لديك ليصبح شبيه بهذا:

 اضغط على الصورة لرؤية حجمها الطبيعي

 

و من الممكن الآن معرفة أوقات الذروة لمعالج السيرفر لديك ... كما يمكنك تجربة باقي الأعمدة عن طريق التغيير في Check Box الموجودة لديك ...

بإمكانك نسخ و لصق هذه الصورة في البريد الإلكتروني Outlook...في MS Word أو PowerPoint ...

 

طبعاً يمكنك اختيار أي Counter في MMC لمراقبة السيرفر لديك ... كذلك يمكنك الاستفادة من هذا الدرس في استخدام counters خاصة بالـ ASP.NET و مراقبة اداء مواقع الويب لديك ...

 

أتمنى أن يكون الدرس مفيد ... وفقنا الله و إياكم ...

 

طلال الحضبي...

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

09 Aug, 2008

السلام عليكم ورحمة الله وبركاته ...

 

كنا قد تكلمنا في الدرس السابق الدرس الثاني: تعريف الـ Roles و Members في ASP.NET و أيضاً الدرس الأول: إنشاء قاعدة بيانات Membership و Role في ASP.NET عن إنشاء قاعدة بيانات للـ Membership و Roles الخاصة بالـ ASP.NET و كذلك تعاملنا مع Roles و Memebers في ASP.NET Web site Administrator Tool و قمنا باضافة AdminRole و UserRole و قمنا باضافة ثلاثة مستخدمين، أحدهم في AdminRole و الآخر في UserRole و الأخير بدون أي Role.

في الدروس السابقة كنت اوضح بعض الأمور بأدق التفاصيل و لكن في هذا الدرس و الدروس التي تليه، سوف أتكلم بشرح اعم قليلاً، خصوصاً انه من المفترض انه لديك خبرة من قبل في ASP.NET.

 

في البداية سوف تجد في Toolbox في الجهة اليسرى مجموعة من الـ User Controls و من ضمنها سوف تجد Login كما في الشكل أدناه:

هذه الأدوات هي ادوات جاهزة قامت شركة مايكروسوفت بتطويرها للتعامل مع إدارة المستخدمين مثل تسجيل الدخول، و تسجيل مستخدم جديد، و كذلك تغير كملة المرور، و ما إلى ذلك ... كل هذا سوف نشاهده في هذا الدرس إن شاء الله.

الآن يوجد لدينا صفحة البداية في المشروع في Visual Studio .net باسم Default.aspx

الان لننشئ صفحة باسم Login.aspx. و لنقم بسحب الكنترول Login كما في الصورة:

و لنفلته على الصفحة Login.aspx وسوف يكون شكلها كالآتي:

و يوجد المثلث في الزاوية العلوية اليمنى، تستطيع تغيير الكنترول من خلاله Format.

 

الآن لتتجه إلى ملف Web.Config و ابحث عن authentication mode="Forms" و قم بعمل التغييرات التالية:

    <authentication mode="Forms">
      <forms loginUrl="~/login.aspx" />
    </authentication>


    <authorization>
      <deny users="?" />
      <allow users="*" />
    </authorization> 

في هذا الكود قمنا بتحديد ان صفحة الـ Login موجودة في الصفحة Login.aspx.

و في الجزء الثاني authorization و الخاص بتحديد الصلاحيات قمنا بعمل خاصيتين هما Allow "التصريح" و Deny "المنع".

في Allow  قلنا انه يحق الدخول للمشروع لكل المستخدمين المسجلين لدي و في الـ Deny  حددنا انه سيتم منع بقية المستخدمين من الدخول.

أي انه سوف يسمح بالدخول للـ Admin و User و AnyUser الذي قمنا بادخالهم في الدرس السابق.

و افيد انه يوجد العديد من الخيارات الأخرى للتصريح و المنع سوف نراها لاحقاً إن شاء الله.

و الآن هذا التعريف في Web.Config صرحنا بأنه لابد من التسجيل لكي يدخل الشخص الموقع الخاص بنا.

الآن قم بتنفيذ البرنامج و افتح صفحة Default.aspx لاحظ انه اعاد توجيهك بشكل تلقائي إلى الصفحة Login.aspx كما في الصورة أدناه:

 

و الان ادخل بأي مستخدم من المستخدمين الذين قمنا بإنشائهم في الدرس السابق و سوف تلاحظ انه سمح لهم بالدخول.

 

الآن لنقم بانشاء صفحة اسمها CreateUser.aspx و ذلك لكي نسمح لزوار الموقع بالتسجيل...

و في هذه الصفحة لنسحب الكنترول CreateUserWizard و يمكنك تغيير الـ Format كما في الشكل التالي:

و في صفحة الـ Login.aspx لنضع رابط يشير إلى صفحة التسجيل كما في الشكل:

 

و الآن لنشغل البرنامج ...و نختبر صفحاتنا البسيطة ...

عندما نتفذنا Default.aspx قام ASP.NET باعادة توجيهنا إلى Login.aspx ...

لنقم الآن بتجربة الصفحة CreateUser.aspx و ذلك بالضغط على الرابط New User? Click here.

سيقوم هذا الرابط بتوجيهنا إلى CreateUser.aspx و لكن لا يحق لنا الدخول إلى الرابط CreateUser.aspx  بحسب التعريف الذي قمنا به في Web.Config!!

الحل هو التوجه إلى Web.Config و بعد   </system.web> اكتب الكود التالي:

  <location path="CreateUser.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>

في هذا الكود، اخبرنا ASP.NET بأن صفحة CreateUser.aspx سوف يكون لها خصائص دخول خاصة بها و هي "انه يسمح بتواجد جميع المستخدمين الغير مسجلين لدي".

لننفذ البرنامج مرة أخرى و لنذهب إلى صفحة CreateUser.aspx ... و لنقم بعمل مستخدم جديد ... لنسمه test مثلاً ... و بعد انشاء هذا المستخدم سوف تظهر لنا الرسالة التالية:

و لكن عند الضغط على Continue لن يحدث شيء لذلك لنغلق التطبيق و نذهب إلى الصفحة CreateUser.aspx و من ثم اختر خصائص الكنترول CreateUser و من ثم في ContinueDestinationPageUrl اختر الصفحة Default.aspx

كما انه يمكنك تغيير كل هذه الخصائص و تحول اللغة إلى العربية إن شئت.

الآن من المفترض ان يعمل كل شيء على ما يرام.

 

الآن في الجزء الذي كتبناه سابقاً:

     <authorization>
      <deny users="?" />
      <allow users="*"/>
    </authorization>

لنزيل السطر <deny users="?" />  و ذلك سيسمح لجميع المستخدمين الدخول إلى النظام ...

في الصفحة Default.aspx اسحب الكنترول LoginView و افتح  المثلث الصغير في الركن الايمن العلوي مثل الصورة:

سوف تجد قالبين أحدهما سيظهر للمستخدمين الذي لم يسجلوا الدخول و الآخر للمستخدين الذين سجلوا الدخول ... في القالب الخاص للمستخدمين  الذيم لم يسجلوا الدخول ... اسحب الكنترول Login داخلة و نضيف الرابط مثل صفحة Login.aspx...كما في الصورة:

 

و الآن لنستخدم  القالب الآخر، لنسحب الكنترول LoginName و الذي يظهر اسم المستخدم المسجل، و لنكتب قبله Welcome... كما في الشكل:

و في اعلى الصفحة و خارج LoginView1 لنضع الكنترول LoginStatus والذي يظهر وضع المستخدم هل هو مسجل أم لا ... كما في الصورة:

الآن لننفذ البرنامج ... لنلاحظ شكل الصفحة Default.aspx كما في الشكل:

لاحظ اننا في الصفحة Default.aspx و ان LoginStatus يوجد رابط Login لأننا لسنا مسجلين النظام و الآن لتقم الدخول بأحد الاسماء التي سجلناها في هذا الدرس او الذي سبق ...

و بعد تسجيل الدخول لاحظ ان LoginStatus اصبحت Logout لأننى الآن قمنا بالتسجيل ...

و قام LoginView باظهار القالب الخاص بـ Loggedin كما في الشكل:

كما ان LoginName اظهر لنا اسم المستخدم الموجود و هو Admin.

 

و لاحظ انه توجد كنترول خاصة باستعادة كلمة المرور و أخرى خاصة بتغيير كلمة المرور و كلها تعمل بنفس المبداء ...

 

و في الدرس القادم سوف نتحدث عن تحديد صلاحيات أكبر للـ Roles و Users ... على مستوى الصفحات و المجلدات ...

 

مع تحياتي ... طلال

Del.icio.usDigg It!DZone It!Reddit

Read Full Article

<< البداية < السابق 1 2 التالى > الأخير >>

اخر عملائنا

anime-wd.com
freepales.com
kalamkber.com
fajr-gulf.com
dr-maha.com
nuggettours.net