تبليغاتX
آموزش تخصصی کامپیوتر
آموزش تخصصی کامپیوتر
کاربر مهمان، خوش آمديد!
موضوعات
موضوعات

آرشيو مطالب

امکانات

آخرين ويروسها

آمار بازديد


پيام خوش آمدگويي

با سلام به تمام علاقمندان دنياي کامپيوتر hello to all people who are interested in computers

از بازديد شما متشکرم special thanks for your visit

از اين پس در اين وبلاگ جديدترين مطالب در زمينه برنامه نويسي دلفي - شبکه - اس کيو ال سرور و بهترين لينک ها را ببينيد .

از کليه بازديدکنندگان تقاضا داريم در جهت تکميل سايت و کاربردي شدن آن نقطه نظرات خود را با ما در ميان بگذاريد . سوالات خود را در اين زمينه از ما بخواهيد.

سيستم جامع آموزشگاه رانندگي : نرم افزاري است خاص آموزشگاه رانندگي که عمليات مربوط به حسابداري آموزشگاه را نيز انجام ميدهد.توضيحات کامل را مطالعه کنيد




نصب لینوکس ابونتو

در این مقاله ما سعی داریم چگونگی نصب گنو لینوکس ابونتو را توضیح دهیم.

ارسال شده در مورخه : جمعه بیست و ششم بهمن 1386 ساعت 17:23 توسط | | ادامه مطلب

توصیه‌های مهم به کاربران قبل از نصب گنو/لینوکس

چون برخی از کاربران کامپیوتر با تکیه بر تجربیات قبلی خود در محیط ویندوز یکراست به سراغ نصب لینوکس رفته و در این بین کم نیستند کسانی که از همان ابتدا بعلت کمی اطلاعات اولیه در مورد گنو/لینوکس و شکست احتمالی در نصب یا پیکربندی یا استفاده ازسیستم بکلی از استفاده بعدی از لینوکس بعنوان یک سیستم عامل برتر مایوس و گاه برای همیشه دلزده میشوند و بعد پس بهتر است که ابتدا به مراحل زیر نیم نگاهی داشته باشیم.

ارسال شده در مورخه : جمعه دوازدهم بهمن 1386 ساعت 18:36 توسط | | ادامه مطلب

نگاهی به ویندوز ویستا

پیشرفته ترین و ایمن ترین سیستم عامل دنیا، که بهترین نسخه ای از یک سیستم عامل هست که تا به امروز وجود دارد. از جمله نکات جالب این ویندوز اين است که مدیر اجرایی مایکروسافت اعلام کرده که با نصب ویندوز ویستا دیگر نیازی به نصب آنتی ویروس نیست که این نکته از سیستم امنیتی قوی این ویندوز حکایت می کند.

بقیه توضیحات را در ادامه مطلب بخوانید :

ارسال شده در مورخه : چهارشنبه دهم بهمن 1386 ساعت 8:0 توسط محمد جهانشاهی | | ادامه مطلب

ورژن های ویندوز ویستا windows vista

ویندوز ویستا در هفت نسخه ارائه شد


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

Vista Starter Edition  
این نسخه تنها مخصوص بازار های خاصی نظیر کشور های در حال توسعه خواهد بود. قیمت آن نسبت به سایر نسخه ها به میزان محسوس کمتر است. امکانات آن کاملا محدود است, به عنوان مثال تنها امکان اجرای سه برنامه همزمان در این سیستم عامل وجود دارد.


  • Vista Home Basic Edition
. چیزی شبیه به نسخه Home ویندوز XP و نسبت به نسخه های حرفه ای ویستا برخی قابلیت های موجود برای این نسخه غیر فعال شده است.
  • Vista Premium Vista Edition Vista
نسخه کامل خانگی ویندوز ویستا است. این ورژن دارای قابلیت Media Center نیز می باشد.

  • Vista Professional Edition


  • Vista Small Business Edition
داری برخی سرویس های اشتراکی مایکروسافت است.


  • Vista Enterprise Edition
مخصوص مدیران IT, همراه با Virtual PC و امکان رمز گذاری کامل.


  • Vista Ultimate Edition

در مورد نسخه نهایی ویندوز ویستا یا Ultimate Edition Vistaتوضیحات پل تاروت به شرح زیر است :
بهترین سیستم عاملی که تاکنون برای کامپیوتر های شخصی ارائه شده است خواهد بود. امکان بهینه سازی عملکرد آن برای کاربران مختلف وجود دارد. این ورژن تلفیق قدرتمندی از نسخه کامل خانگی Premium Vista Edition و نسخه حرفه ای Professional Edition است. بنابراین دارای تمامی قابلیت های هر دو نسخه خانگی و پیشرفته خواهد بود. علاوه بر این ابزار های ویژه ای برای ساخت Podcast (هنوز در دست ساخت است و ممکن است به عنوان نرم افزاری جداگانه بعد ارائه شود) و همچنین قابلیت های جدیدی برای Game به آن اضافه شده است. سرویس های آنلاینی به نام Club نیز برای آن در نظر گرفته شده است. این ویژگی به کاربران امکان دسترسی به خاص به موزیک ها و ویدئو ها را می دهد. مایکروسافت همچنین قصد دارد امکاناتی نظیر دانلود رایگان موسیقی و فیلم را در این نسخه قرار دهد.
به نظر می رسد نسخه نهایی ویندوز ویستا بتواند با سیستم عامل Mac بخوبی رقابت کند و از هر لحاظ نسبت به آن برتری داشته باشد. در نسخه نهایی تمامی امکانات موجود در Mac قرار داده خواهد شد. بنابراین لازم است تا نرم افزاری مانند Windows Movie Maker (که برای ادیت فیلم بکار می رود) به قدری قئرتمند شود که امکان رقابت با imovie موجود در سیستم عامل Mac را داشته باشد. علاوه بر این ویستا احتیاج به برنامه ای شبیه به iPhoto برای ویرایش تصاویر دارد.
در ضمن مایکروسافت برای عقب نماندن از Mac حتی مجبور شود بخشی از نرم افزار Office (حداقل برنامه های Word/Excel/Outlook) را در داخل ویستا قرار دهد.

ارسال شده در مورخه : چهارشنبه دهم بهمن 1386 ساعت 7:57 توسط محمد جهانشاهی |

معرفی سایت ubuntu فارسی

  در این سایت می توانید هر چیزی را که در مورد اوبونتو که یکی از ورژن های بسیار خوب لینوکس هست پیدا کنید   http://www.ubuntu-ir.org

اوبونتو یک سیستم عامل کاملاً‌ آزاد و رایگان بر اساس گنو/لینوکس٬ همراه با پشتیبانی در سطح جامعه کاربران و خدمات تجاری و حرفه‌ای است. اوبونتو توسط اجتماع بزرگی از کاربران و توسعه دهندگان در سراسر دنیا توسعه داده میشود و ما از شما نیز دعوت می‌نمائیم تا به این اجتماع بپیوندید!

اجتماع اوبونتو بر اساس ایده‌های فلسفه اوبونتو که می‌گوید: نر‌م‌افزار باید آزاد و رایگان در اختیار عموم باشد٬ همچنین ابزارهای نرم‌افزاری مختلف می‌بایست به صورت سفارشی و به زبان محلی کاربران در اختیارشان باشند و کاربران مجاز باشند نرم‌افزار را بر اساس نیازهای خود سفارشی نموده و استفاده نمایند٬ شکل گرفته است.

این آزادیها موجب شده‌اند٬ اوبونتو اساساً با نرم افزارهای سنتیﹺ خصوصی متفاوت باشد. نه تنها ابزارها و نرم‌افزارهای مورد نیازتان رایگان هستند٬ بلکه شما مجاز خواهید بود نرم‌افزارها را مطابق نیازتان و بگونه‌ای که مایلید سفارشی نموده و استفاده نمائید.

اوبونتو برای استفاده به عنوان رومیزی و کارگزار (سرور) مناسب است. نسخه فعلی اوبونتو از معماری‌های سخت افزاری مختلف شامل انواع PC های Intel x86 و 64bit و همچنین ماشین‌های UltraSPARC T1 شرکت SUN و PowerPC شرکت Apple پشتیبانی می‌کند.

اوبونتو دارای بیش از ۱۶۰۰۰ بسته نرم‌افزاری است و هسته اصلی آن بر روی یک سی‌دی عرضه میشود. اوبونتو دارای انواع ابزارهای نرم‌افزاری از نرم‌افزارهای کاتب و صفحه گستردهٔ اداری تا کارگزارهای اینترنتی و ابزارهای مناسب برنامه‌نویسی است. توضیحات کاملتر نسخه‌های اوبونتو٬ نسخه رومیزی و نسخه کارگزار.

ارسال شده در مورخه : چهارشنبه دهم بهمن 1386 ساعت 7:44 توسط محمد جهانشاهی |

مقایسه شبکه های Domain Base & Workgroup

- شبکه های دومین قابلیت افزایش و کاهش اندازه را تا حد بسیار زیادی دارند از این رو می توانند برای سازمانهای کوچک تاا بزرگ و تعداد User های کم تا بسیارزیاد مورد استفاده قرار می کیند و این در حالی است که Workgroup ها حداکثر تا تعداد 10 عدد Client یا شبکه ای با تعداد 10 کامپیوتر توصیه می شود

- سرعت و کارایی در دومین به دلیل وجود سرویس های خاص که هر کدام بخشی از عملیات تسهیل دسترسی به Resource های شبکه را با لحاظ کردن اصول امنیتی ، مقدور می سازد بسیار زیاد است و این در حالی است که شبکه های Workgroup به لحاظ سرعت و کارایی علی الخصوص زمانیکه تعداد Client ها افزایش می یابد بسیار ضعیف عمل می کند.


- در شبکه های دومین وجود خاصیت توارث (Inheritance) و استفاده از سرویس هایی مثل DNS باعث می شود سرعت دسترسی افزایش یابد و از طرفی دست مدیران شبکه را برای تعیین Security Policy ها باز می گذارد تا بتوانند در هر سطحی دسترسی ها را تعیین کنند ولی در شبکه های workgroup امکان تعیین سطوح دسترسی به این شکل نمی باشد چون این نوع شبکه به صورت Flat است.

-وجود ارتباطات امن از طریق IPSEC روی کامپیوتر های زیر مجموعه یک دومین مزیتی است نسبت به Workgroup

- مدیریت مرکزی Usrename & Password ها در دومین مزیت دیگری نسبت به Workgroup است . چراکه در شبکه های Workgroup هر کامپیوتر دارای security DataBase مجزا می باشند و این موضوع کار مدیریت شبکه را بسیار سخت می کند.

-

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 10:30 توسط محمد جهانشاهی |

كسب‌و‌كار هوشمند در SQL Server 2005

اگر بخواهيم به تاريخچه بانك‌هاي اطلا‌عاتي و نقش هميشگي آن‌ها در ذخيره و بازيابي اطلا‌عات بنگريم، سال‌هايي را در حيات اين پديده مبتني بر فناوري اطلا‌عات مي‌يابيم كه در طي آن‌ها، بانك‌هاي اطلا‌عاتي از يك ابزار با كاربرد صرفِ ذخيره‌سازي اطلا‌عات، به يك برنامه كامل جهت نيل به بسياري از اهداف تجاري تبديل شده است. در اين مقاله نگاهي خواهيم داشت به سرويس جديدي موسوم به Analysis Service كه در نسخه 2005 بانك اطلا‌عاتي SQL Server براي اين منظور در نظر گرفته شده است.

     
SQL Server 2005

اگر بخواهيم به تاريخچه بانك‌هاي اطلا‌عاتي و نقش هميشگي آن‌ها در ذخيره و بازيابي اطلا‌عات بنگريم، سال‌هايي را در حيات اين پديده مبتني بر فناوري اطلا‌عات مي‌يابيم كه در طي آن‌ها، بانك‌هاي اطلا‌عاتي از يك ابزار با كاربرد صرفِ ذخيره‌سازي اطلا‌عات، به يك برنامه كامل جهت نيل به بسياري از اهداف تجاري تبديل شده است. امروزه هوشمندي كسب و كار (BI) يا به عبارتي تجزيه و تحليل داده‌هاي ذخيره شده براي برنامه‌ريزي درازمدت در آينده، موضوعي است كه به شدت مورد توجه سازندگان بانك‌هاي اطلا‌عاتي، از جمله مايكروسافت، قرار گرفته است. در اين مقاله نگاهي خواهيم داشت به سرويس جديدي موسوم به Analysis Service كه در نسخه 2005 بانك اطلا‌عاتي SQL Server براي اين منظور در نظر گرفته شده است.

ساختار

در Analysis Service 2005 موجوديت مكعب (cube) به عنوان مهم‌ترين ابزار تحليل داده‌ها، مورد توجه خاصي قرار گرفته است. cube يك شي چند بعدي است كه مي‌تواند اطلا‌عاتي را براساس اطلا‌عاتي ديگر به ما نشان داده يا با هم مقايسه كند. ابعاد اين مكعب در واقع فاكتورهايي هستند كه ما مي‌خواهيم داده‌هايمان را بر اساس آن‌ها مقايسه كنيم.

مثلا‌ً در يك سيستم انبار، نوع كالا‌ مي‌تواند يكي از ابعاد مناسب براي بررسي ورود و خروج كالا‌ باشد. يكي از مهم‌ترين فاكتورها يا ابعادي كه يك مكعب مي‌تواند داشته باشد، بعد زمان است. تقريباً مي‌توان گفت كه در هيچ سيستمي، زمان مسئله كم‌اهميتي نيست. مثلا‌ً ورود و خروج كالا‌ها در بازه‌هاي زماني روزانه، ماهانه، سالا‌نه و ... يا ميزان درآمد و هزينه‌ها طي بازه‌هاي زماني خاص از جمله فاكتورهايي محسوب مي‌شوند كه عموماً مورد توجه شركت‌ها قرار دارند.

در Analysis Service ابعاد يك مكعب را در قسمت Dimensions تعريف مي‌كنند. اما مقادير كه به ازاي در كنار هم قرار گرفتن اين ابعاد،‌ بايد توسط سيستم محاسبه و نمايش داده شود، مقاديري هستند كه نهايتاً هدف يك cube را از نتيجه تجزيه و تحليل داده‌ها بيان مي‌كنند و به آن‌ها، مقياس (Measure) گفته مي‌شود.

معمولا‌ً فاكتورهايي چون ماكزيمم و مينيمم، جمع و ... . يك ارزش عددي در بازه‌اي از مقادير يك بُعد (Dimension) مي‌تواند به عنوان يك مقياس در نظر گرفته شود.


يكي از مثال‌هاي سايت مايكروسافت كه يك مكعب تحليلي از تعداد پكيج‌هاي مسافرتي و تاريخ آن‌را بر اساس ابعاد، زمان، مكان و نوع سفر ارائه مي‌دهد.

معمولا‌ً فاكتورهايي چون ماكزيمم و مينيمم، جمع و ... . يك ارزش عددي در بازه‌اي از مقادير يك بُعد (Dimension) مي‌تواند به عنوان يك مقياس در نظر گرفته شود.

مثلا‌ً جمع ورود و خروج يك نوع كالا‌ در بازه‌اي از زمان يك Measure مناسب براي دو بُعد نوع كالا‌ و زمان به حساب مي‌آيد يا مثلا‌ً ميزان درآمد ماهانه شركت مي‌تواند يك مقياس براي دو بُعد واحد پول و زمان، در نظر گرفته شود.


راه‌حل‌هاي تجاري

●بسياري از سازمان‌هاي بزرگ تجاري داراي چندين سيستم اطلا‌عاتي مثل سيستم‌هاي ERP يا SCM هستند.

اين سيستم‌ها ممكن است حتي تحت چند پلتفرم يا موتور پايگاه داده‌اي مختلف در سطح آن سازمان پراكنده شده باشند. بنابراين جمع‌آوري اطلا‌عات و مقايسه و نتيجه‌گيري از چند منبع اطلا‌عاتي مختلف بدين شكل، كار بسيار مشكلي است.

حتي در صورتي كه بخواهيم در چنين سازمان‌هايي، فقط يك منبع اطلا‌عاتي را مورد تجزيه و تحليل قرار دهيم، داده‌هاي موجود در آن را بايد به محيطي منتقل كنيم تا امكان تجزيه و تحليل و ساير اعمال محاسباتي پيچيده بر آن فراهم شود.

در ابزار جديد Analysis Service مفهومي به نام Unified Dimensional Model) UDM) در نظر گرفته شده كه به معناي ايجاد يك مدل تجاري مجتمع و يكتا با خاصيت چندبُعدي روي يك يا چند منبع اطلا‌عاتي است.

بر اين اساس، شي يا موجوديتي به نام Data Source View ساخته مي‌شود كه شامل كليه جداول يا ديدهاي يك يا چند بانك اطلا‌عاتي همگون يا ناهمگون است. پس از تعريف اين شي و برقراري روابط ميان فيلدهاي اطلا‌عاتي جداول يا ديدهاي موجود در آن، مي‌توان اقدام به ساخت شِماهاي چندبُعدي يا همان مكعب كرد.

به عنوان مثال، مي‌توان ميزان فروش يك سري اقلا‌م خاص را در طي يك توالي زماني مشخص به صورت يك نمودار سه بعدي نمايش داد. استفاده از اين تكنيك علا‌وه بر رساندن ما به هدف مورد نظر كه همان گردآوري اطلا‌عات گوناگون و تهيه نمودارهاي چند بعدي آماري براساس آنان است، دو مزيت ديگر هم دارد: اول اين‌كه، از انواع منابع اطلا‌عاتي مثل انواع بانك‌هاي اطلا‌عاتي رابطه‌اي، بانك‌هاي ويژه انجام فرايندهاي پردازشي (OLTP)، ‌فايل‌هاي تخت (Flat) يا حتي سرويس‌هاي وب، مي‌تواند استفاده نمايد.

دوم اين‌كه، به دليل ماهيت فيزيكي cube كه خودش نوعي فضاي ذخيره‌سازي موقت براي داده‌ها است، تداخل خاصي با پردازش‌ها و فرايندهاي در حال اجرا روي اطلا‌عات اصلي موجود در منابع اطلا‌عاتي نداشته و روي كارايي و سرعت آن‌ها اثر منفي محسوسي ندارد.

●يكي از روش‌هاي مرسوم ذخيره‌سازي اطلا‌عات در سيستم‌هاي بزرگ، تقسيم‌بندي انباره اطلا‌عات (Data Warehouse) به واحدهاي كوچك‌تر با كاربردهاي مختلف مي‌باشد كه به آن Data Mart گفته مي‌شود. بر اين ‌اساس، مثلا‌ً محل ذخيره‌سازي داده‌هاي مربوط به اسناد مالي از محل ذخيره داده‌هاي مربوط به وضعيت عرضه و تقاضاي بازار مصرف جدا شده و هر كدام در محل خاصي قرار مي‌گيرند. در اين حالت دو مشكل مي‌تواند به وجود آيد: اول اين‌كه تعدد Data martها در سازمان به دليل مشكل بودن ايجاد رابطه ميان اطلا‌عات آن‌ها، به كُندشدن هر نوع تجزيه و تحليل آماري مي‌انجامد. دوم اين‌كه، حتي براي گزارش‌هاي ساده‌تر كه فقط روي يك Data Mart بايد انجام شود، به دليل احتمال هم‌سنخ‌نبودن مخازن اطلا‌عاتي با يكديگر، بايد برنامه‌هاي مختلفي را براي گزارش‌گيري يا تجزيه و تحليل اطلا‌عات، مورد استفاده قرار داد.

با اين حال به لطف وجود Analysis Service، هر دو مشكل مذكور به نحو مطلوبي رفع شده‌اند: اول اين‌كه، ساختار مدل‌سازي واحد (UDM) محيطي متمركز براي نگهداري يك كپي كامل از تمام Data Martها است. ضمن اين‌كه قادر است به هر كاربر و هر دپارتماني از آن سازمان صرفاً اطلا‌عات و تجزيه و تحليل‌هاي مورد نياز خودش را نشان دهد. به اين دسته‌بندي منطقي داده‌ها بر اساس كاربرد، اصطلا‌حا ًPresPective گفته مي‌شود.

با وجود پرسپكتيوهاي مختلف از يك UDM، هم مسئله تقسيم‌بندي داده‌هاي مورد نياز دپارتمان‌ها حل مي‌شود و هم مشكل لينك شدن اطلا‌عات موجود در Data Martهاي مختلف با يكديگر، برطرف مي‌گردد. اما اين مسئله از نقطه نظر ديگري نيز قابل بررسي است. در گذشته، جدايي و تفاوت بين سيستم‌هاي فرايندي (OLTP) و سيستم‌هاي تحليلي (OLAP) بسيار آشكار بود.

سازمان‌ها داده‌هاي خود را در OLTP ذخيره و پردازش مي‌كردند. سپس داده‌هاي پردازش‌شده را به OLAP منتقل مي‌نمودند تا بتوانند بدون تأثير منفي در كارايي و سرعت پردازش‌داده‌ها درOLTP، آناليز اطلا‌عات را به راحتي انجام دهند. اما اكنون و به لطف وجود UDM داده‌هايي كه توسط OLTP پردازش مي‌شوند، بي‌درنگ به OLAP منتقل مي‌گردند. در اين روش محل ذخيره اطلا‌عات مورد نياز OLTP و OLAP واحد است و داده‌ها بر اساس يك مكانيسم بي‌درنگ (Real Time) در هنگام هر نوع انتقال يا پردازش به فضاي مورد نياز گزارش‌هاي تحليلي OLAP آورده شده وcubeهاي آناليزي موجود در آن را بروز (update) مي‌كند.

در اين صورت به دليل يكتا بودن محل ذخيره‌سازي اطلا‌عات نيز،‌نيازي به استفاده از برنامه‌هاي مختلف براي دسترسي به مخازن اطلا‌عاتي مختلف نمي‌باشد. بنابراين مسئله گفته شده در اين بند نيز با اين ويژگي جديد حل مي‌شود.

●يكي از ويژگي‌هاي هميشگي برنامه‌ها و ابزارهاي گزارش‌گيري، امكان كنكاش و تحليل اطلا‌عات در لا‌يه‌هاي مختلف است. به عنوان مثال، يك برنامه گزارش‌گيري مي‌تواند در يك لا‌يه، رابطه ميان فروش محصولا‌ت خود و مشتريان خريدار آن محصولا‌ت را به صورت يك جدول دو بعدي نشان دهد. در لا‌يه ديگري، همين برنامه مي‌تواند رابطه ميان فروش محصولا‌ت و كارخانه‌هاي سازنده آن‌ها را بيان نمايد و بالا‌خره در لا‌يه سوم و در صورت لزوم مي‌تواند بين سه فاكتور مذكور يك نمودار سه‌بعدي ايجاد كند كه اين حالت از پيشرفته‌ترين ويژگي‌هاي يك ابزار گزارش‌گيري محسوب مي‌شود.

با اين همه، نيازهاي كارشناسان تجاري يك شركت محدود به اين نوع گزارش‌ها نمي‌باشد. در برخي موارد يك تحليلگر نياز به در كنار هم قراردادن و مقايسه چندين فاكتور مختلف از چند موجوديت مجزا را دارد. به عنوان نمونه، در همان مثال قبل فرض كنيد مي‌خواهيم روابطي را براساس فاكتورهاي تاريخي قابل محاسبه مثل تاريخ سفارش، تاريخ تحويل، تاريخ ساخت كالا‌ و تاريخ فروش به مشتري را براي چند نوع كالا‌ي مختلف به دست آوريم.

بنابراين اينگونه گزارش‌هاي چندبعدي با مدل گزارش‌گيري سنتي (سلسله مراتبي) يا نمودارهاي ساده موجود در آن‌ها قابل ايجاد نمي‌باشد. اما Analysis Service راه‌حلي را براي نيل به اين هدف در نظر گرفته كه جزء ويژگي‌هاي مدل چند بُعدي (UDM) آن است و به نام ابعاد مبتني بر خصوصيت (Attribute Based Dimension) شناخته مي‌شود. براساس اين ويژگي، تحليلگران قادر خواهند بود تجزيه و تحليل اطلا‌عات خود را نه به شكل سلسله مراتبي (كه در روش سنتي ميسر بود)، بلكه به صورت همزمان و چندبعدي انجام دهند. مثلا‌ً مي‌توان با اين روش آمار هر نوع خصوصيت كالا‌ي فروخته شده مثل رنگ، اندازه، وزن، واحد و... را به صورت يكجا و در قالب ابعاد مختلف ويژگي‌هاي كالا‌ها، به دست آورد.

همچنين با استفاده از قابليت ديگري كه به آن <ايفاي نقش> يا Role Playing مي‌گويند، مي‌توان يك ويژگي را به عنوان مبناي يك تجزيه و تحليل قرار داد و آن‌گاه ويژگي‌هاي ديگر هم سنخ آن را به عنوان ابعاد ديگر آن تحليل بررسي نمود. مثلا‌ً مي‌توان فاكتور زمان (روز، ماه، سال و ...) را به عنوان يك ويژگي عام در نظر گرفت و آنگاه تعداد كالا‌ي خريداري، فروخته شده و تحويل شده را براساس آن فاكتور زمان به عنوان ابعاد ديگر اين تحليل معرفي نمود و با يكديگر مقايسه كرد.

● يكي از روش‌هايي كه OLAPهاي سنتي براي جلوگيري از كاهش راندمان سرور اصلي بانك‌اطلا‌عاتي به كار مي‌بردند اين بود كه از سرور ديگري براي گرفتن گزارش‌هاي تحليلي استفاده مي‌نمودند. سرور دوم شامل همان ساختار بانك اطلا‌عاتي سرور اول بود و داده‌ها نيز در يك تناوب زماني مثلا‌ً در نيمه‌هاي شب و هنگام كاهش ترافيك شبكه، به سرور دوم كپي مي‌شد. اين شيوه براي كاربردهايي چون تحليل درآمدهاي ساليانه يا ساير تحليل‌هاي درازمدت با كاربرد مشابه، كار معقولي به نظر مي‌رسيد.

اما براي كاربردهايي كه نياز به بررسي آني آخرين وضعيت براي برنامه‌ريزي كوتاه‌مدت داشت، روش مناسبي نبود؛ چرا كه امكان داشت هنوز آخرين اطلا‌عات به سرور OLAP (سرور دوم) كپي نشده باشد. سيستم‌هاي برنامه‌ريزي توليد از جمله سيستم‌هايي بود كه نياز به داشتن چنين گزارش‌هاي كوتاه مدتي داشت. در Analysis Service اين مسئله با كپي‌شدن آني و بي‌درنگ داده‌ها به سرور OLAP در حين انتقال به سرور اصلي حل شده است. با اين كار داده‌ها بلا‌فاصله در سرور دوم و در محل cubeهاي ساخته‌شده قرار مي‌گيرند و حتي تجزيه و تحليل‌هاي موجود نيز به صورت بي‌درنگ بروز مي‌شوند. اين خاصيت، مهم‌ترين ويژگي يك سيستم BI پيشرفته امروزي به شمار مي‌رود


منبع : sqliran

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 10:2 توسط محمد جهانشاهی |

با SQL Server 2005 بيشتر آشنا شويد


با نسخه جديد SQL Server ،برنامه نويسان بانك هاي اطلاعاتي قادرند از امكانات و قابليت هاي موجود در پلتفرم دات نت و كليه توابع و كلاس هاي ساخته شده در آن بهره مند شوند. يكي از ابتدايي ترين و در عين حال اساسي ترين اين قابليت ها،امكان استفاده از دو زبان مهم و كاربر پسند دات نت يعني ويژوال بيسيك و سي شارپ در پياده سازي اجزاي مختلف يك بانك اطلاعاتي است.

     
Snapshot lsolation level

يكي از روش هايي كه به انواع متدهاي قفل كردن رديف هاي يك جدول بانك اطلاعاتي در نسخه جديد اضافه شده است شيوه تصوير برداري از ركورد است. در روش هاي قبلي،اگر يك يا چند ركورد بانك اطلاعاتي توسط دستور Begitn Trans كه شروع يك فرآيند را مشخص مي كند در شرف تغيير يا حذف قرار مي گرفتند،تا مادامي كه فرآيند مذكور توسط دستور Commit Trans تاييد يا توسط ROLLBack منتفي نشود،از هيچ جا و برنامه اي نمي توان ركوردهاي مذكور را حتي با دستور ساده SELECT خواند. اما در روش جديد قفل گذاري در صورت بروز چنين رويدادي ساير كاربران مي توانند همواره آخرين ارزش ركوردهاي مذكور را با اين فرض كه هنوز هيچ تغييري در آن ها ايجاد نشده است بخوانند و مورد استفاده قرار دهند.

باز هم دات نت

با نسخه جديد SQL Server ،برنامه نويسان بانك هاي اطلاعاتي قادرند از امكانات و قابليت هاي موجود در پلتفرم دات نت و كليه توابع و كلاس هاي ساخته شده در آن بهره مند شوند. يكي از ابتدايي ترين و در عين حال اساسي ترين اين قابليت ها،امكان استفاده از دو زبان مهم و كاربر پسند دات نت يعني ويژوال بيسيك و سي شارپ در پياده سازي اجزاي مختلف يك بانك اطلاعاتي است. اين عامل نه تنها باعث مي شود كه برنامه نويسان براي نوشتن ماژول هايي مثل تريگرها،روال ها(Stored procedures ) در توابع به جاي استفاده از زبان استاندارد و در عين حال پيچيده T-SQL ،بتوانند از زبان هاي محيط دات نت با تمام ساختارها،دستورات،كلاس ها،آرايه ها،و خلاصه تمام ويژگي هاي يك زبان شي گرا استفاده كنند،بلكه اين همكاري نزديك بين موتور برنامه نويسي دات نت يعني CLR (مسئول تبديل كدهاي نوشته شده دات نت به زبان سيستم عامل است) و موتور بانك اطلاعاتي SQL Server باعث شده تا به غير از تنوع زبان هاي برنامه نويسي قابل استفاده در SQL Server ،تغيير قابل توجهي نيز در كارآيي ماژول هاي مذكور پيش آيد. در واقع موضوع از اين قرار است كه اصولا” كدهاي نوشته شده به زبان هاي دات نت، ابتدا توسط كامپايلر به زبان (IL ) ترجمه مي شوند. سپس CLR اين كد مياني را به كد قابل فهم سيستم عامل تبديل و آماده اجرا مي نمايد. اين كار سبب مي شود تا كدهاي نهايي به دليل اين بسيار به سيستم عامل نزديك مي باشد سريع تر از كدهاي TSQL (كه فقط توسط موتور بانك اطلاعاتي قابل اجرا هستند )اجرا شوند و در زمان اجرا از كارايي بيشتري برخوردار باشند. البته اين مساله بدين معني نيست كه استفاده از زبان هاي دات نت هميشه بر زبان هاي SQL ارجحيت دارد،بلكه منظور آن است كه در برخي موارد ممكن است آن قدر منطق و الگوريتم يك ماژول پيچيده باشد كه برنامه نويس استفاده از زبان هاي دات نت را به دليل آسان تر بودن ساختار و دستورات آن به زبان SQL ترجيح دهد. بنابراين زماني كه بيشتر عمليات يك ماژول مربوط به خواندن و نوشتن اطلاعات باشد بهتر است از همان دستورات استاندارد SQL يعني DELETE,UPDATE,SELECR و INSERT استفاده كرده و بي جهت منابع سيستم را صرف تعريف متغيرها و كلاس هاي دات نت ننمايد. اما در ماژول هايي كه بيشتر عملياتشان شامل پردازش اطلاعات مثل انجام عمليات هاي رياضي يا مقا يسه اطلاعات با يكديگر است بهتر است تا هم از امكانات برنامه نويسي و هم از سرعت و كارايي بالاي دات نت در اين زمينه بهره برد و ماژول هاي مذكور را با زبان هاي دات نت پياده سازي كرد.

ADO.NET وارد مي شود

طبق يك سنت نه چندان قديمي برنامه نويسي در محيط ويندوز،برنامه نويسان SQL Server بانك اطلاعاتي مورد نظرشان را بروي سرور و برنامه كاربردي نوشته شده با زباني مثل ويژوال بيسيك را بر روي كلاينت ها قرار مي دهند. سپس از طريق اين برنامه كاربردي و با استفاده ا زاشياي از جنس ADO داده هاي مورد نياز خود را از سمت سرور دريافت كرده و يا به آن ارسال مي كنند. اكنون اين ارتباط به لطف نسخه جديد SQL Server و همچنين محيط دات نت با امكانات جديد ADO.NET بسيار كامل تر از قبل شده است. اين ارتباط جديد با استفاده از مكانيسمي به نام اعلان (Notification ) به يك ارتباط دو طرفه فعال تبديل شده به طوري كه ADD.NET قادر است پيغام هايي را از سمت پايگاه داده به سمت كلاينت ارسال كند. به عنوان مثال فرض كنيد كه شما با استفاده از ADO تعدادي از ركوردهاي يك جدول بانك اطلاعاتي را انتخاب كرده و مشغول كار بر روي آن ها هستيد. در همين هنگام كاربر ديگري از طريق كلاينت و ADO خود،ركوردي در محدوده ركوردهاي مورد انتخاب شما را تغيير مي دهد يا حذف مي كند. در اين وقت موتور پايگاه داده با ارسال پيغامي به ADO شما،اين مساله را با استفاده از فراخواني يك رخداد (Event ) شي ADO به اطلاعاتي مي رساند. علاوه بر اين قابليت جديد،فناوري جديد ديگري هم با استفاده از ADO.NET به نسخه جديد SQL.Server اضافه شده و آن امكان چند پرس و جوي همزمان توسط يك شي ADO است. در اين شيوه اگر يك شي ADO با استفاده از دستور SELECT مشغول خواندن تعدادي از ركوردهاي يك جدول بانك اطلاعاتي باشد،مي تواند بدون اين كه منتظر به پايان رسيدن اين عمليات شود،تعداد ديگري از ركوردهاي يك جدول ديگر بانك اطلاعاتي را بخواند. اين قابليت جديد با نام (MARS ) Multiple Active Result Set كه قبلا” در كرسرهاي سمت سرور (Server side ) و آن هم نه با كارايي بالا وجود داشت اكنون در كرسرهاي سمت راست كلاينت هم وجود دارد و تفاوت عمده آن با شكل قديمي هم علاوه بر مورد مذكور امكان ايجاد چند كرسر در يك شي ADO به صورت همزمان است SQL.Server . نسخه 2005 به خوبي از تمام اين ويژگي ها،پشتيباني مي كند.

تكنولوژي XML

اكنون كه XML به يك استاندارد ارتباطي بين سكوهاي مختلف تبديل شده است،نسخه جديد SQL Server هم از توجه كافي به آن و ايجاد يك انقلاب در ساده تر استفاده كردن از آن طفره نرفته است. در نسخه 2000 كاربران قادر بودند تا با استفاده از دستور FOR XML نتيجه يك پرس و جوي SELECT از يك بانك اطلاعاتي را به درون يك فايل XML را باز كرده و شروع به خواندن دستورات آن نمايند. از آن جا كه در نسخه جديد SQL Server توجه خاصي بهاين استاندارد و زبان ارتباطي شده است.يك نوع داده جديد (Date type ) به انواع داده هاي قبلي و استاندارد SQL مثل Char,int و امثال آن اضافه شده است. اين نوع داده جديد كه XML نام دارد و داراي خصوصيات يك نوع داده موجود در يك محيط شي گرا است،داراي متدهاي پيشرفته اي چون () guery ،() exist ،() value ،()nodes ،() modify بوده و قادر است انواع پردازش هاي قابل انجام بر روي اسناد XML را به راحتي انجام دهد. عمليات جستجو ،تغيير، حذف و درج مقادير مورد نظر در داخل يك فايل XML را مي توان با استفاده از متدهاي مذكور و صرفا” با چند خط برنامه نويسي انجام داد. همچنين در اين نسخه برخلاف نسخه 2000 ،با استفاده از دستور FOR XML مي توان يك شي از جنس XML را بدون ارسال آن به كلاينت،بر روي سرور ساخته و از آن نگهداري كرد. با اين كار مي توان جداولي را كه مرتبا” مورد رجوع كاربران قرار مي گيرند هر از گاهي در قالب XML به داخل حافظه آورد و كاربران مذكور به جاي رجوع به جداول اصلي در هارد ديسك،با استفاده از دستورات ويژه جستجو در XML ،متغير مذكور را در حافظه سرور مورد جستجو قرار دهند و بدين وسيله يك نوع عمل Cache كردن را جهت افزايش سرعت دسترسي به اطلاعات تكراري شبيه سازي كنند. در اين حالت،كاربران به جاي استفاده از دستور SELECT استاندارد مي توانند از OPEN XML كه در نسخه 2005 قادر است متغيرهاي جديد از نوع XML را بخواند استفاده كرده و به سرعت به اطلاعات مورد نياز خود دسترسي پيدا كنند. اين قابليت جديد آن قدر در سريع تر كردن جستجو در برنامه هاي تحت وب مهم و موثر است كه جاي هيچ مشكلي را در استفاده از آن باقي نمي گذارد.

سرويس اعلان (Notification )

همان طور كه گفتيم سيستم اعلان در SQL Server قادر است پيغام هايي را طي زمان هاي مشخص به سمت كاربران بفرستد. مثلا” تصور كنيد كه تعدادي كاربر در حال اتصال به يك بانك حاوي اطلاعات مربوط به ارزش سهام در بورس هستند. از آن جايي كه ممكن است قيمت سهام هر شركت يا موسسه براي تعدادي از كاربران از اهميت زيادي برخوردار باشد،مي توان اين سيستم را طوري تنظيم كرد تا هر گاه ارزش سهام خاصي ك مورد نظر هر كاربر است تغيير كرد،به صورت اتوماتيك به وي اعلام شود. كاربر هم مي تواند اين تغييرات را بر روي برنامه كاربردي خود،تلفن همراه(ئر قالب SMS )،Windows Messenger و يا ايميل به صورت مرتب دريافت و مشاهده كند.

سرويس گزارش گيري

سرويس جديد توليد گزارش هاي متنوع در نسخه 2005 به يكي از جالب ترين و پركاربرد ترين قابليت هاي اين نسخه تبديل شده است،وجود يك موتور گزارشگر قوي در سمت سرور و يك ابزار مناسب ساخت گزارش با واسط كاربر عالي،باعث شده تا برنامه نويسان بتوانند گزارش هاي مورد نظر خود را با كارايي و سرعت مناسب در سمت سرور بسازند به طوري كه اين گزارش هاي سمت سرور توسط هر برنامه كاربردي سمت كلانيت در هر پلتفرمي با همان امكانات اتصال به SQL Server قابل مشاهده است.

بهبودهاي ايجاد شده در زبان

در SQL Server 2005 تغييرات بسيار مثبتي در زبان SQL T ايجاد شده است. اين تغييرات در زمينه هاي مختلف مثل مديريت خطاها،جستجوهاي بازگشتي (Recursive Query ) و حتي در بدنه موتور پايگاه داده ها انجام شده و كارايي كلي ذخيره و يا خواندن اطلاعات را به نحو مطلوبي افزايش داده است. به عنوان مثال در دستورات TSQL ،دو اپراتور جديد ديده مي شود كه PIVOT و UNPIVOT نام دارند. اين دو اپراتور كه در قسمت FROM يك پرس وجو مورد استفاده قرار مي گيرند مي توانند نتيجه يك جستجوي انجام شده توسط دستور SELECT را به جاي برگرداندن در قالب رديف ها يا ركوردهاي پشت سر هم،به صورت ستون هاي مختلف يك يا چند ركورد برگردانند. در اين روش يكي از ستون هاي فيلدهاي يك جستجو به عنوان محور معرفي شده و بقيه ستون ها بر اساس آن به صورت افقي طبقه بندي مي شوند. به يك مثال توجه كنيد:


SELECT CUSTOMER ID, Order NO FROM Orders PIVOT Customer ID
Order NO Order NO Order NO Order NO Customer ID
4400 1120 25 1
350 2
1780 443 3
8989 2222 1980 555 4


نتيجه جستجوي فوق چيزي شبيه جدول بالا خواهد بود.
همان طور كه مشاهده مي كنيد با استفاده از اپراتور مذكور،نتيجه پرس و جوي انجام شده به اين صورت كه هررديف به يك شماره مشتري و جندين شماره سفارش مربوطه به آن مشتري در قالب ستون هاي مختلف است. در مي آيد. اين همان چيزي است كه سالها SQLServer آن را با نام Cross Tab به كاربران خود ارايه مي دادند. در همين رابطه اپراتور UNPIVOT هم عمل عكس اپراتور مذكور را انجام مي دهد. اپراتور ديگري كه مي تواند نقش مهمي را در دستورات SQL بازي كند APPLY نام دارد كه در قسمت FROM يك دستور SQL به كار مي رود. با استفاده از اين دستور مي توان خروجي يك تابع را با يك يا چند جدول ديگر تركيب كرد همان طور كه مي دانيد در SQL Server توابع مي توانند يك يا چند رديف جدول اطلاعاتي را برگردانند كه اين خروجي مي توانند با يك جدول ديگر با استفاده از اپراتور مذكور تركيب شود.
مديريت خطا

در نسخه هاي قديمي SQL Server براي كشف و مديريت خطا از سيستم Error Handing استفاده مي شد. اين شيوه كشف خطا كه در زباني مثل ويژوال بيسيك 6 مورد هم استفاده قرار مي گرفت با استفاده از دستور GOTO مي توانست كنترل و خط اجراي روال را از يك محل به محل ديگر و در واقع از محل بروز خطا به محل مديريت و آشكار كردن آن ببرد و بدين وسيله پيغام خطايي را به كار نشان دهد. نسخه جديد SQL Server با تاثير از پلتفرم دات نت،از دستورات ويژه كشف و مديريت خطا با عنوان Exception Handling استفاده مي كند،اين روش با استفاده از دستورات جديد TRY\CATCH شيوه بهتري از مديريت خطا را به اجرا مي گذارد. در اين روش برخلاف روش قبل،تمام خطاهاي اتفاق افتادني مثل خطاهاي مربوط به تبديل داده ها به يكديگر Data Conversion به خوبي مديريت شده و از بروز خطاهايي كه منجر به اتمام ناقص عمليات يك روال يا تريگر مي شود جلوكيري به عمل مي آيد.


منبع : sqliran

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 10:0 توسط محمد جهانشاهی |

قابليت هاي جديد T-SQL در SQL Server 2005 (قسمت دوم از سه )

در بخش قبلي اين مقاله دستورات PIVOT ، OUTPUT و TOP N را که در SQL Server 2005 آمکانات جديدي را در اختيار برنامه نويسان قرار می دهند معرفی کرديم و در اين قسمت به معرفی دستورات جديدی می پردازيم.

     

در بخش قبلی اين مقاله دستورات PIVOT ، OUTPUT و TOP N را که در SQL Server 2005 آمکانات جديدی را در اختيار برنامه نويسان قرار می دهند معرفی کرديم و در اين قسمت به معرفی دستورات جديدی می پردازيم.
اين دستورات عبارتند از :

1. Apply :
اين دستور ، کار با Table-Valued User Defined Function ها را ساده تر می کند.
2. Ranking :
اين دستور امکان اختصاص رتبه (Rank) به نتايج Query ها را فراهم می کند .
3. Try – Catch :
که امکان Error Handling در کد های SQL را فراهم می سازد.
1- Apply
اکثر برنامه نويسان پايگاه داده ، از توابع با مقدار برگشتی جدولی يا به عبارتی Table-Valued User Defined Functions که به اختصار Table Valued UDF خوانده می شوند ،استفاده می کنند. اين توابع معمولا نتيجه يک Query را به صورت يک جدول به عنوان خروجی برمی گردانند. اين توابع در جاهايی کاربرد دارند که يک Query در چند Query ديگر مورد استفاده قرار گيرد. برای چنين مواردی Function ها گزينه های مناسبی هستند و کد های نوشته شده در توابع ، بارها فراخوانی می شوند . درست مانند توابعی که در نرم افزارها به منظور Reusable بودن کد نوشته می شوند.
برای نمونه اگر در بانک اطلاعات AdventureWorks ، در SQL Server 2005 بخواهيم N سفارش اول يکی از کارکنان را برگردانيم يک UDF به صورت زير می نويسيم :
USE [AdventureWorks]
GO
/****** Object: UserDefinedFunction [dbo].[GetTopPurchaseOrders
Script Date: 03/28/2007 07:18:30 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[GetTopPurchaseOrders]') AND type in (N'FN', N'IF',
N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[GetTopPurchaseOrders]
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

CREATE FUNCTION [dbo].[GetTopPurchaseOrders]
(@EmployeeID INT, @TopN INT)
RETURNS TABLE
AS
RETURN
SELECT TOP(@TopN) PurchaseOrderID, EmployeeID, VendorID, OrderDate
TotalDue
FROM Purchasing.PurchaseOrderHeader WHERE EmployeeID =
@EmployeeID
ORDER BY TotalDue DESC

برای اجرای اين تابع ، به فرض آنکه بخواهيم 10 سفارش اول کارمندی با شماره 164 را داشته باشيم ، به صورت زير عمل می کنيم :


SELECT * FROM [dbo].[GetTopPurchaseOrders] (164,10)

تا اينجا تمام کارها در SQL Server 2000 قابل انجام بود ( البته بجز امکان TOP N با مقدار N متغير که در قسمت قبلی همين مقاله معرفی شد) امکان جديدی که در SQL Server 2005 اضافه شده است ، دستور APPLY است که امکان کار با Table-Valued UDF ها را ساده تر می کند. به مثال زير توجه کنيد :


SELECT Emp.EmployeeID, Emp.LoginID, TopOrders.PurchaseOrderID,
TopOrders.VendorID, TopOrders.OrderDate, TopOrders.TotalDue
FROM HumanResources.Employee Emp
CROSS APPLY [dbo].[GetTopPurchaseOrders] (Emp.EmployeeID,5)
AS TopOrders
ORDER BY Emp.EmployeeID, TotalDue DESC

کاری که کد بالا انجام می دهد آنست که ID Employee ها را به عنوان ورودی به تابع تعريف شده می دهد و به ازای هر Employee ، 5 سفارش خريد را به عنوان خروجی می گيرد. عبارت CROSS APPLY در Query به ازای هر EmployeeID ، تابع مورد نظر را اجرا می کند :


CROSS APPLY [dbo].[GetTopPurchaseOrders] (Emp.EmployeeID,5)
AS TopOrders

 

2- Ranking
گاهی اوقات برنامه نويسان نياز پيدا می کنند برای هر Row از نتيجه يک Query ، رتبه يا شماره Ranking داشته باشند. تا قبل از SQL Server 2005 ، برنامه نويس مجبور بود برای اين منظور کد بنويسد و يا جدولی بايک فيلد Identity درست کند و نتيجه Query را در آن بريزد تا توسط فيلد Identity هر Row يک رتبه بگيرد. کارهايی از اين دست ممکن بود در برخی موارد پاسخگوی نياز برنامه باشد اما اگر Query کمی پيچيده می شد ، مثلا اگر می خواستيم سطر های داده را به ازای يک فيلد Group شوند و در هر Group ، عدد Ranking دوباره از 1 شروع شود ديگر اين گونه ترفند ها جواب نمی داد.
خوشبختانه SQL Server 2005 تابع جديدی به نام ()ROW_NUMBER ارائه می دهد که کار را بسيار ساده می کند.
برای درک بيشتر اين دستور ، کد مثال قبل را با استفاده از ()Row_Number بازنويسی می کنيم . اين کد باعث می شود 5 سطر داده مربوط به سفارش خريد به ازای هر کارمند يک عدد به عنوان Rank دريافت کند. و Rank هر سفارش بر اساس مبلغ آن بصورت نزولی باشد. يعنی سفارش اول با بيشترين مبلغ دارای Rank شماره 1 باشد و الی آخر.

DECLARE @nTop INT
SET @nTop = 5
SELECT Emp.EmployeeID, Emp.LoginID,
TopOrders.PurchaseOrderID, TopOrders.VendorID,
TopOrders.OrderDate, TopOrders.TotalDue,
ROW_NUMBER() OVER ( ORDER BY TotalDue DESC) AS RankNum
FROM HumanResources.Employee Emp
CROSS APPLY [dbo].[GetTopPurchaseOrders]
(Emp.EmployeeID,@nTop) AS TopOrders
ORDER BY RankNum

کار مورد نظر ما را در کد بالا ، اين قسمت از کد انجام می دهد :

ROW_NUMBER() OVER ( ORDER BY TotalDue DESC) AS RankNum

اين کد بر اساس فيلد TotalDue نتيجه Query را مرتب کرده و به هر سطر آن به ترتيب عدد Rank می دهد.
حال اگر بخواهيم عدد Ranking به جای آنکه کلی باشد ، به ازای هر کارمند Reset شود (يعنی دوباره از يک شروع شود ) ، از عبارت Partition در اين دستور ، مانند مثال زير استفاده می کنيم :


ROW_NUMBER() OVER ( PARTITION BY Emp.EmployeeID ORDER BY
TotalDue DESC) AS RankNum
.. ORDER BY Emp.EmployeeID, RankNum

که در مثال بالا ،منطقا می خواهيم ، سفارش ها به ازای هر Employee مرتب شوند .
همچنين ممکن است در برخی از مواقع بخواهيم عدد رتبه بر اساس شرايطی در داده ها مشخص شود. مثلا فرض کنيد بخواهيم برخی از سطر های داده بر اساس يک فيلد (مثلا Column 1 ) و برخی ديگر بر اساس فيلد ديگری ( مانند Column 2 ) مرتب شوند . برای اين منظور می توانيم از دستور Case همانند مثال زير استفاده کنيم :


ROW_NUMBER() OVER (ORDER BY
CASE @SortCol
WHEN 'Column1' THEN Column1
WHEN 'Column2' THEN Column2
ELSE Column1 END)
AS RankNum

 

3- Try - Catch
در SQL Server 2005 ، می توانيم با استفاده از عبارت Try-Catch ، در کد های T-SQL ، خطاهای زمان اجرا را کنترل کنيم. اين قابليتی بود که در زبان های برنامه نويسی مانند C# و VB وجود داشت و مدتها ، برنامه نويسان T-SQL در انتظار آن بودند.
با استفاده از Try-Catch، برنامه نويس می تواند خطاهای زمان اجرا را کنترل کند و آنچه را که لازم می داند به لايه Application بفرستد.
به عنوان مثال فرض کنيد می خواهيم از جدولی به نام PurchaseOrderHeader رديفی را بر اساس PurchaseOrderID آن حذف کنيم :
DELETE FROM Purchasing.PurchaseOrderHeader WHERE PurchaseOrderID =
44

اين کد ممکن است منجر به خطای Constraint Violation بين جدول PurchaseOrderHeader و جدول PurchaseOrderDetail شود. اگر ما اين کد را به عنوان يک Stored Procedure می نوشتيم و آن را در کد Net. از لايه Application فراخوانی و اجرا می کرديم عمليات در لايه Data دچار خطا می شد و بدون آنکه Error معنی داری به لايه Application برگرداند متوقف می شد.
چيزی که ما می خواهيم به دام انداختن خطا در Stored Procedure است تا خطای معنی داری را به جای آن به لايه Application برگردانيم. به کد زير توجه کنيد :


USE AdventureWorks
BEGIN
BEGIN TRANSACTION
BEGIN TRY
DELETE FROM Purchasing.PurchaseOrderHeader WHERE
PurchaseOrderID = 44
END TRY

BEGIN CATCH
DECLARE @ErrorSeverity INT, @ErrorNumber INT, @ErrorMessage
NVARCHAR(4000), @ErrorState INT
SET @ErrorSeverity = ERROR_SEVERITY()
SET @ErrorNumber = ERROR_NUMBER()
SET @ErrorMessage = ERROR_MESSAGE()
SET @ErrorState = ERROR_STATE()

IF @ErrorState = 0
SET @ErrorState = 1

RAISERROR ('ERROR OCCURED:%d', @ErrorSeverity, @ErrorState,
@ErrorNumber)
IF XACT_STATE() < 0
ROLLBACK TRANSACTION
END CATCH
COMMIT TRANSACTION
END
GO

در قسمت اول کد بالا ، ابتدا دستور DELETE را در داخل يک بلوک Try-Catch قرار داده ايم.

BEGIN TRY
DELETE FROM Purchasing.PurchaseOrderHeader WHERE
PurchaseOrderID = 44
END TRY
BEGIN CATCH
-- ereror handling routine
END CATCH

اين کار باعث می شود در صورت بروز خطا در کد موجود در بلوک Try ، کد های موجود در بلوک Catch اجرا شوند.
در داخل بلوک Catch ، پيغام خطا ، کد خطا و ساير مشخصات خطا را تعريف می کنيم :


DECLARE @ErrorSeverity INT, @ErrorNumber INT, @ErrorMessage
NVARCHAR(4000), @ErrorState INT
SET @ErrorSeverity = ERROR_SEVERITY()
SET @ErrorNumber = ERROR_NUMBER()
SET @ErrorMessage = ERROR_MESSAGE()
SET @ErrorState = ERROR_STATE()

سپس خطا را به لايه Application می فرستيم :

RAISERROR ('ERROR OCCURED:%d', @ErrorSeverity, @ErrorState,
@ErrorNumber)

دستور RAISERROR نياز به يک ErrorState دارد که برای فرستادن خطا به لايه Application مقدار آن بايد 1 باشد.

IF @ErrorState = 0
SET @ErrorState = 1
RAISERROR ('ERROR OCCURED:%d', @ErrorSeverity, @ErrorState,
@ErrorNumber)

در نهايت می خواهيم در صورتی که دستورات در داخل Transaction اجرا می شود ، Transaction مورد نظر Rollback شود . برای اين کار از دستور XACT_STATE() به منظور پيدا کردن Transaction فعال در کد استفاده می کنيم :


IF XACT_STATE() < 0
ROLLBACK TRANSACTION

در پايان به دو نکته ديگر درباره عبارت Try-Catch در SQL Server 2005 اشاره می کنيم. يکی اين که دستور Try-Catch در SQL بر خـلاف زبان های برنامه نويـسی دارای قسـمت Finally نمی باشـد و ديـگر اينـکه در کـد هـای T-SQL می توانـيـم Try-Catch های تو در تو ( Nested ) نيز داشته باشيم.


منبع : sqliran

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 9:45 توسط محمد جهانشاهی |

قابليت هاي جديد T-SQL در SQL Server 2005 (قسمت اول از سه )


يکي از کارهاي رايجي که اکثر برنامه نويسان پايگاه داده با آن برخورد مي کنند تبديل رکورد های داده خام به صورت View های آناليز شده می باشد. کاربران اغلب می خواهند بر اساس پارامتر های مختلفی نظير فصل ، سال يا ماه از داده ها گزارش بگيرند. اين گونه کارها نياز به تبديل سطر های داده (رکورد) به ستون های داده (فيلد) دارد.

     
قابليت های جديد T-SQL در SQL Server 2005 (قسمت اول از سه)

ویژگیهایی که در قسمت اول به معرفی آنها می پردازیم عبارتند از:

دراين سری مقالات قصد داريم به معرفی چند ويژگي و قابليت جديد زبان T-SQL در SQL Server 2005 بپردازيم ، که عبارتند از :

• قابليت جديد PIVOT برای تبديل سطرهای داده خام به ستونهای داده آناليز شده
• دستور جديد OUTPUT برای برگرداندن داده پس از اجرای دستورهای Insert و Update
• ارتقای دستور TOP N برای پذيرش عدد N به صورت پارامتر

1- PIVOT

يکی از کارهای رايجی که اکثر برنامه نويسان پايگاه داده با آن برخورد می کنند تبديل رکورد های داده خام به صورت View های آناليز شده می باشد. کاربران اغلب می خواهند بر اساس پارامتر های مختلفی نظير فصل ، سال يا ماه از داده ها گزارش بگيرند. اين گونه کارها نياز به تبديل سطر های داده (رکورد) به ستون های داده (فيلد) دارد. در SQL Server 2000 دو روش برای اين کار وجود داشت :
1- گرفتن داده های خام از Database و بردن آن به لايه Application و نوشتن کد (مثلا C# ، VB و ...) برای آناليز داده و رسيدن به فرمت گزارش مورد نظر.
- استفاده از دستور CASE برای قرار دادن داده در ستون مورد نظر بر اساس شرايط. برای مثال فرض کنيد يک جدول داده به نام OpenBalances (مطالبات باز) داريد که دارای ستونهايی به نامهای DueDate (تاريخ سر رسيد)و BalanceOwed (مطالبه وصول شد) می باشد و می خواهيم گزارشی بر اساس طول مدت وصول مطالبات با استانداردهای بازه زمانی مشخص مانند 1 تا 30 روز ، 31 تا 60 روز و ... داشته باشيم. برای اين منظور می توانيم کدی مانند کد زير را بنويسيم :

SELECT SUM(CASE WHEN DueDate BETWEEN @dAgingDate-
30 AND @dAgingDate
THEN BalanceOwed ELSE 0 END) AS Age30 ,
SUM(CASE WHEN DueDate BETWEEN @dAgingDate-
60 AND @dAgingDate-31
THEN BalanceOwed ELSE 0 END) AS Age60 ,
SUM(CASE WHEN DueDate BETWEEN @dAgingDate-
90 AND @dAgingDate-61
THEN BalanceOwed ELSE 0 END) AS Age90
FROM OpenBalances

با وجود آنکه هر يک از روش های فوق می توانند کار مورد نظر را انجام دهد ، SQL Server 2005 دستوری به نام PIVOT برای ساده کردن کار ارائه می دهد. به زبان ساده می توان گفت " PIVOT به برنامه نويسان اجازه می دهد که سطرهای داده (رکوردها) را به ستون های داده (فيلدها) تبديل کنند.

برای درک بيشتر کارکرد اين دستور بهتر است به دو نمونه کد که در آن از دستور جديد PIVOT استفاده شده است نگاهی بياندازيم . در مثال اول می خواهيم Order ها را از پايگاه داده Northwind Orders دريافت کنيم و گزارشی از سفارش های هر مشتری در سال 1997 بر اساس فصل بگيريم.

sp_dbcmptlevel Northwind, 90 -- necessary on older databases
USE northwind

-- Create a table variable to hold the results
DECLARE @tQtrPivotedTable TABLE (CustomerID char(25), M_Q1 Money,
M_Q2 Money, M_Q3 Money, M_Q4 Money)

INSERT INTO @tQtrPivotedTable
SELECT * FROM (SELECT CustomerID, DATEPART (q,OrderDate) as
OrderQtr, -- grab the Quarter of the month, using DateParts
(UnitPrice * Quantity) as Amount
FROM orders OH
JOIN [dbo].[Order Details] OD on OH.Orderid = OD.orderid WHERE
Year(OrderDate)=1997) AS TempOrders
PIVOT ( SUM(Amount) FOR OrderQtr In ( [1],[2],[3],[4])) As X -- Pivot
the Sum of the amount, based on the Quarter being 1 of the 4 values
SELECT * FROM @tQtrPivotedTable -- Dump out the results

کد بالا برای هر تاريخ سفارش ، فصل مربوط به آن را توسط دستور DatePart مشخص می کند و داده ها را در سطر هايی از يک جدول موقت نگهداری می کند. سپس کد فوق مجموع مبلغ سفارش ها را PIVOT می کند يعنی سطرهای آن به ستون های داده آناليز شده تبديل می کند.

PIVOT ( SUM(Amount) FOR OrderQtr In ( [1],[2],[3],[4]))

دستور فوق مقاديری که ستون OrderQtr آن ها يکی از مقادير فهرست IN باشد (1 ، 2 ،3 يا 4) را باهم Aggregate می کند و جمع ستون Amount آن ها را در يکی از چهار ستون مربوط به آن قرار می دهد.

در اين مثال اگر به فرض بخواهيم گزارش را به جای بر اساس فصل ، بر اساس ماه بگيريم بايد تغييرات زير را در کد اعمال کنيم :

تغيير ورودی DATEPART برای گرفتن ماه به جای فصل (DatePart(m به جای (DatePart(q ، تغيير ستون های PIVOT از 1 تا 4 به 1 تا 12 :

PIVOT (SUM(Amount) FOR OrderMonth In ([1],[2],[3],…,[12]) As X

بايد حتما توجه کنيم که ليست مقادير IN (پس از کلمه کليدی IN) بايد حتما مشخص و استاتيک باشد. (Hard Code شده باشد) متغيری که روی آن PIVOT می کنيم (در مثال فوق متغير OrderQtr که PIVOT را برای آن نوشته ايم) بايد يکی از مقادير ليست IN را داشته باشد.
حال به مثال ديگری توجه کنيد. فرض کنيد جدولی از صورت حساب مشتريان داريم که حاوی تاريخ صورتحساب ، مبلغ صورحساب و مبلغ پرداخت شده تا به حال می باشد و می خواهيم گزارشی از طول مدت تاخير وصول مبلغ صورتحساب بر اساس بازه های زمانی مشخص 1 تا 30 روز ، 31 تا 60 روز و 61 تا 90 روز ، 91 تا 120 روز و از 120 روز به بالا ، بدست آوريم.

DECLARE @tInvoices TABLE (CustomerID char(15), InvoiceNo Char(20), InvoiceDate
DateTime,InvoiceAmount decimal(14,2), ReceivedAmount decimal(14,2))

INSERT INTO @tInvoices VALUES ('Customer 1', 'ABC', '09-01-2005', 1000
0)
INSERT INTO @tInvoices VALUES ('Customer 1', 'DEF', '10-01-2005', 2000
100)
INSERT INTO @tInvoices VALUES ('Customer 1', 'GHI', '11-01-2005', 3000,
3000)
INSERT INTO @tInvoices VALUES ('Customer 1', 'JKL', '12-01-2005', 4000
175)
INSERT INTO @tInvoices VALUES ('Customer 1', 'MNO', '12-18-2005', 4000,
175)
INSERT INTO @tInvoices VALUES ('Customer 2', 'PQR', '05-01-2005', 500,
250)
INSERT INTO @tInvoices VALUES ('Customer 2', 'STU', '08-01-2005', 12000
0)
INSERT INTO @tInvoices VALUES ('Customer 2', 'WYX', '10-01-2005', 7000,
70)
INSERT INTO @tInvoices VALUES ('Customer 2', 'YYZ', '12-01-2005', 3200,
1750)
DECLARE @dAgingDate DATETIME
SET @dAgingDate = CAST('12-1-2005' AS DATETIME)

-- create brackets...could be configurable [1-45 days, etc.]
DECLARE @tAgingBrackets TABLE ( StartDay int, EndDay int, BracketNumber int,
BracketLabel char(20))
INSERT INTO @tAgingBrackets VALUES (0, 30, 1, '< 30 Days')
INSERT INTO @tAgingBrackets VALUES (31, 60, 2, '31-60 Days')
INSERT INTO @tAgingBrackets VALUES (61, 90, 3, '61-90 Days')
INSERT INTO @tAgingBrackets VALUES (91, 120, 4, '91-120 Days' )
INSERT INTO @tAgingBrackets VALUES (121, 999999, 5, '> 120 Days')
-- create our result set
DECLARE @tAgingDetails TABLE (CustomerID char(15), InvoiceNo char(20),
InvoiceDate DateTime,
Bracket1 decimal(14,2), Bracket2 decimal(14,2),
Bracket3 decimal(14,2), Bracket4 decimal(14,2), Bracket5 decimal(14,2))
INSERT INTO @tAgingDetails
SELECT * FROM (select CustomerID,InvoiceNo,invoicedate, InvoiceAmount-
ReceivedAmountAS AmountOwed, TBR.BracketNumber
FROM @tInvoices TI, @tAgingBrackets TBR
WHERE InvoiceAmount-ReceivedAmount <> 0 and
DATEDIFF(dd,invoicedate,@dagingdate) BETWEEN TBR.StartDay and
TBR.EndDay ) as Temp
PIVOT ( SUM(AmountOwed) FOR BracketNumber In ( [1], [2],[3],[4],[5])) As X
SELECT * FROM @tAgingBrackets
SELECT * FROM @tAgingDetails ORDER BY Custom rid, InvoiceNo
2- OUTPUT

آيا تا کنون در SQL Server 2000 خواسته ايد بلافاصله پس از اجرای دستوراتی مانند INSERT و UPDATE مقدار فيلدی که تحت تاثير دستور قرار گرفته است را بخوانيد ؟ اين مقدار می تواند مقدار يک فيلد محاسبه شده ، يک شناسه (Identity) و يا يک Default Value باشد. همچنين آيا تا کنون در دستوراتی خواسته ايد به مقدار پيش از اجرای دستور و بعد از اجرای دستور دسترسی داشته باشيد ؟ . برای اين گونه کارها ممکن بود از يک Select و يا استفاده از جدول های سيستمی INSERTED و DELETED که تنها در Trigger ها قابل دسترسی است ، استفاده کنيد.

برای مثال در SQL Server 2000 ، در صورتی که می خواستيم مقدار يک فيلد Identity را پس از اجرای دستور INSERT داشته باشيم ، اغلب از تابع SCOPE_IDENTITY استفاده می کرديم :

DECLARE @tTestTable TABLE ( MainPK [int] IDENTITY(1,1) NOT NULL, Name Char(50))
INSERT INTO @tTestTable VALUES ('steve Goff')
SELECT SCOPE_IDENTITY()

SQL Server 2005 دستوری را به نام OUTPUT ارائه می کند که به برنامه نويسان در اين گونه موارد کمک می کند. استفاده از دستور OUTPUT همراه با دستورهای INSERT و UPDATE می تواند به سادگی داده های Insert شده و Update شده را برگرداند.

به جای استفاده از SCOPE_IDENTITY می توانيم از OUTPUT استفاده کنيم :

DECLARE @tTestTable TABLE ( MainPK [int] IDENTITY(1,1) NOT NULL, Name Char(50))
INSERT @tTestTable OUTPUT Inserted.MainPK VALUES ('steve Goff')

و اگر با چند INSERT سروکار داريد و می خواهيد ليستی از مقادير INSERT شده را داشته باشيد می توانيد خروجی را در يک متغير از نوع Table نگهداری کنيد

DECLARE @tTestTable TABLE ( MainPK [int] IDENTITY(1,1) NOT NULL, Name Char(50))
DECLARE @tTemp table (mainpk int)
INSERT @tTestTable OUTPUT Inserted.MainPK into @tTemp VALUES ('Kevin Goff')
INSERT @tTestTable OUTPUT Inserted.MainPK into @tTemp VALUES ('steve Goff'
SELECT * FROM @tTemp

در صورتی که در دستور UPDATE بخواهيم به داده های قبل و بعد از اجرای دستور دسترسی داشته باشيم می توانيم از جدول های سيستمی INSERTED و DELETED برای داده های بعد و قبل از اجرای UPDATE استفاده کنيم. در مثال زير ، نحوه انجام اين کار را مشاهده می کنيم :

DECLARE @tTest TABLE ( MainPK [int] IDENTITY(1,1) NOT NULL ,Amount decimal(10,2))
INSERT INTO @tTest VALUES (100)
INSERT INTO @tTest VALUES (200)
INSERT INTO @tTest VALUES (300)

UPDATE @tTest SET Amount = Amount * 10
OUTPUT DELETED.MainPK, DELETED.Amount AS OldValue, INSERTED.Amount
NewValue

همچنين می توانيم اين خروجی را در متغيری از نوع Table قرار دهيم :

DECLARE @tTemp TABLE (MainPK int, OldValue Decimal(10,2), NewValue Decimal(10,2))
UPDATE @tTest SET Amount = Amount * 10
OUTPUT DELETED.MainPK, DELETED.Amount AS OldValue, INSERTED.Amount AS
NewValue INTO @tTemp

3- TOP N

درN ، SQL Server 2000 در دستـور SELECT TOP N تنـها می توانسـت يک عـدد ثابـت باشد (مـثلا SELECT TOP 5) .برنـامه نويسی که می خواست N رکورد اول يک Query را با استفاده از SELECT TOP N بگيرد به صورتـی که N يک مقدار متغير باشد و در زمـان اجرا (Runtime) مقدار آن مشـخـص شود ، بايـد از Query های Dynamic (که در زمان اجرای برنامه ساخـته و اجرا می شوند) و يا عبارت ROWCOUNT استفـاده می کـرد .

SQL Server 2005 ، در دستور SELECT TOP N با N به صورت يک متغير عددی رفتار می کند. به مثال زير توجه کنيد :

use northwind
DECLARE @nTop int
SET @nTop = 5
Select TOP (@nTop) customerid, oh.orderid, (unitprice * quantity) as amount
from orders OH
join [dbo].[Order Details] OD on oh.orderid = od.orderid
order by Amount Desc

چنانکه در کد بالا می بينيد مقدار N از يک متغير عددی خوانده می شود.

اين امکان را برای TOP N Percent که در آن N بر اساس درصد مشخص می شود و N درصد اول نتيجه Query را بر می گرداند ، نيز خواهيم داشت.

همچنين N می تواند خروجی يک تابع ، يک Stored Procedure و يا يک Query باشد. به مثال زير توجه کنيد :

SELECT TOP( SELECT COUNT(*) FROM SHIPPERS) * FROM ORDERS ORDER BY Freight
DESC

و در آخر بهتر است بدانيد که از دستور TOP N می توانيد در دستورات INSERT و UPDATE استفاده کنيد.

DECLARE @nTop int
SET @nTop = 2

DECLARE @tTest1 TABLE ( Amount decimal(10,2))
INSERT INTO @ttest1 VALUES ( 100)
INSERT INTO @ttest1 VALUES ( 200)
INSERT INTO @ttest1 VALUES ( 300)
UPDATE TOP(@nTop) @tTest1 SET Amount = Amount * 10
DECLARE @tTest2 TABLE ( Amount decimal(10,2))
INSERT TOP(2) @tTest2 SELECT * FROM @tTest1 order by amount
SELECT * FROM @ttest2

در کد بالا يک متغير از نوع TABLE تعريف شده و تعدادی سطر به آن اضافه شده ، سپس 2 سطر اول آن UPDATE شده است. متغير ديگری از نوع TABLE تعريف شده است و 2 سطر اول جدول قبلی در آن INSERT شده است.

در قسمت های بعدی به معرفی ساير امکانات جديد در T-SQL 2005 خواهيم پرداخت.

منبع : sqliran

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 9:44 توسط محمد جهانشاهی |

SQL Server و تکنيک هايي براي افزایش بازده بانک اطلاعاتی


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

     

ممکن است پس از طی چند سال و درج هزاران رکورد در جداول یک بانک اطلاعاتی، سرعت جستجو در میان اطلاعات درج شده،سرعت درج اطلاعات جدید یا تغییر و حذف آن ها کند شود و مدیران یا برنامه نویسان این بانک ها را به ایجاد دگرگونی در برخی قسمت های بانک ناچار نماید.دو روش معمول برای مواجهه با چنین پدیده ای وجود دارد: روش اول یعنی توسعه عرضی ( Scale up ) که ترجیحا باید مقدم بر روش دوم مورد استفاده قرار گیرد، با استفاده از ساز وکار هایی مثل ایجاد انواع ایندکس ها بر روی جداول یا دید ( view )های بانک، کوتاه نمودن و کم حجم تر کردن تریگرها، به حداقل رساندن تعداد دستورات SQL که در هر فرایند وجود دارد، پرهیز از استفاده بی موقع و مکرر از توابع تعریف شده توسط کاربر و غیره می توان تا حدودی مشکل را برطرف نمود. اما در برخی موارد با تمام این تمهیدات باز هم اشکالات و وقفه هایی در سرعت و عملکرد سیستم، مدیران بانک های اطلاعاتی را ناگزیر می کند برای حل مشکل به روش دوم یعنی توسعه طولی ( Scale out ) رو بیاورند.

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

صورت مسئله

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

انتخاب راه حل

راه حل مسئله با استفاده از روش توسعه طولی، افزودن به تعداد سرورهایی است که به شکلی نقش پردازشگر اطلاعات را بازی می کنند. در این روش، سه راه حل مختلف وجود دارد که با اتکا به آن ها می توان تعداد سرورها، سرورهای لایه واسط (Application Server ) و سرورهای بانک اطلاعاتی (Database Server ) را افزایش داد. با این کار ترافیک و سنگینی پردازش فقط روی سرور لایه واسط یا سرور بانک اطلاعاتی کاهش می یابد و به نحوی پدیده توازن بار (Load Balancing ) چند سرور صورت می گیرد. در ادامه به بررسی هر سه راه حل مذکور می پردازیم.

راه حل یکم: کپی برداری (Cloning )

در این راه حل به سادگی می توان به جای استفاده از یک سرور لایه واسط که نقش پردازش اطلاعات را بازی می کند، از چندین سرور برای انجام دادن عمل مذکور استفاده نمود. سرورهای لایه واسط عمدتا محل فعالیت کامپوننت ها ( COM) یا وب سرورها هستند. بنابراین اگر بتوان تعداد آن ها را افزایش داد و هر دسته از کاربران را به سمت یکی از این سرورها هدایت نمود، عملکرد پردازشی سرورهای لایه واسط افزایش می یابد و در نتیجه تا حدود زیادی از بروز سرعت در سیستم جلوگیری می شود. ضمن این که اگر هر کدام از این سرورها نیز با مشکل روبه رو شوند، می توان به صورت موقت کاربران آن را به سمت یک سرور دیگر هدایت کرد و از ایجاد وقفه در کار آن ها جلوگیری نمود. ( شکل 1 )


 

شکل 1

راه حل دوم: تقسیم بندی(Partitioning )

این راه حل به دو روش تقسیم می شود:

روش یکم: افزایش سرورهای لایه واسط

در این روش نیز تعداد سرورهای لایه واسط افزایش می یابد. اما بر خلاف راه حل قبل که چند سرور کاملا مشابه، نقش یکسانی را در پردازش درخواست های کاربران ایفا می کردند، این بار هر کدام از سرورهای لایه میانی صرفا عمل خاصی را انجام می دهند که سایر سرورها از انجام دادن آن معافند. مثلا اگر قبلا تنها یک سرور، هم محل فعالیت COM ها بود و هم نقش یک وب سرور را بازی می کرد، اکنون دو وظیفه مذکور را بین دو سرور مختلف ( و شاید با ویژگی ها و توانایی های مختلف ) تقسیم می کنیم. یا به عنوان مثالی دیگر اگر تا کنون تنها یک سرور لایه میانی هم شامل COM هایی بود که با استفاده از اشیای ADO ، دسترسی به سرور پایگاه را فراهم می آوردند و هم شامل COM های دیگری که اعمال محاسباتی پیچیده را انجام می داد، اکنون می توان این دو وظیفه را بین دو سرور مختلف به ترتیب با نام هایی چون Data Access و Business Logic تقسیم کرد.
نقطه قوت این روش این است که علاوه بر تقسیم ترافیک و پردازش میان دو یا چند سرور جداگانه، امکان جداسازی کاربران بر اساس نوع استفاده آن ها از اطلاعات و فراهم ساختن سرورهایی با کاربرد مختلف جهت انجام دادن وظایف متعدد وجود دارد و در نتیجه ضریب امنیت دسترسی یا پردازش اطلاعات نیز بالاتر می رود. نقطه ضعف آن هم این است که در صورت از کار افتادن یکی از این سرورهای لایه میانی، سایر سرورهای این لایه نمی توانند به سرعت جایگزین آن شوند و وظیفه آن را به طور موقع بر عهده بگیرند. ( شکل 2 )


شکل 2

روش دوم :تقسیم سرور پایگاه داده

در این روش، به جای سرورهای لایه میانی، سرور پایگاه داده به دو یا چند سرور تقسیم می شود تا حجم فرایند ( Transaction) های داخلی و پرس و جو های همزمان روی آن سرور کاهش پیدا کند. برای استفاده از این روش، در نظر گرفتن یک نکته اساسی، بسیار مهم است. این نکته، تشخیص اشتراک یا عدم اشتراکی بودن داده ها میان کاربران مختلف است. بدین معنی که یک مدیر پایگاه داده باید بداند که آیا می توان داده ها را به چند دسته تقسیم کرد و هر دسته را روی یک سرور جداگانه برای کاربرد مختلف قرار داد یا نه. به عنوان مثال، اگر شرکتی دارای یک سیستم جامع، شامل سه زیرسیستم انبار، فروش و حسابداری باشد، می تواند جداول دیدها و ارتباطات مربوط به هر یک از این سه زیر سیستم را در یک پایگاه داده روی یک سرور جداگانه قرار دهد ت هر یکی از آن ها در دسترس مسئولان انبار، فروش و حسابداری شرکت قرار گیرد.
سوالی که در اینجا مطرح می شود این است که اگر این سه زیر سیستم با یکدیگر در ارتباط باشند، باید چه کرد؟ مثلا فرض کنید که مسئول انبار برای خروج یک کالا از انبار باید بتواند به داده هایی از جداول مربوط به سیستم فروش دست یابد. بنابراین باید در این روش، راهی وجود داشته باشد تا در عین جدا بودن اطلاعات مذکور از یکدیگر، امکان استفاده کاربران مختلف از یکی از آن ها یا تلفیقی از آن ها نیز فراهم گردد.
در SQL Server نسخه 2000 برای این کار امکاناتی پیش بینی شده است. به عنوان مثال، شما با استفاده از قابلیت Linked server قادر خواهید بود یک بانک اطلاعاتی مقیم در یک سرور دیگر را طوری به یک بانک اطلاعاتی سرورتان پیوند بزنید که گویی هر دو در یک سرور قرار دارند.پس از این کار حتی می توانید پرس و جوهایی انجام دهید که از لینک کردن چند جدول و یا دید از هر دو بانک اطلاعاتی حاصل شود. به این قابلیت، جستجوی توزیع شده یعنی Distributed Query گفته می شود.
علاوه بر این خاصیت دیگری در این نسخه تعبیه شده است که امکان انجام دادن یک فرایند واحد روی چند بانک اطلاعاتی موجود در چند سرور مختلف را فراهم می کند(Distributed Transaction ). این قابلیت ها به گونه ای است که حتی امکان تعریف روابط وابستگی از طریق کلیدهای اولیه و کلید های خارجی میان بانک های مذکور نیز وجود دارد و یا مثلا ساخت یک دید با استفاده از لینک کردن جداول موجود در چند سرور نیز میسر گشته که به آن Distributed Portioned View گفته می شود.
به هر حال، بسیاری از راه حل های مربوط به "توزیع" در SQL Server برای استفاده همزمان از قدرت و قابلیت چندین سرور در نظر گرفته شده است. درشکل سه مثالی را مشاهده می کنید که در آن به صورت بسیار ساده جدول مشتریان یک شرکت به دلیل زیاد بودن و قابل جدا کردن اطلاعات آن، به سه دسته مشتریان شرق، غرب و مرکز کشور تقسیم بندی شده و هر کدام در عین ارتباط با یکدیگر و با کاربران، بر روی یک سرور مجزا قرار گرفته اند .(شکل 3 )


شکل 3

راه حل سوم: Replication

این راه حل نیز مشابه روش دوم Partitioning است. اما بر خلاف آن روش که سرور بانک اطلاعاتی را به چند سرور حاوی اطلاعات مختلف مورد نیازشان تقسیم می کردیم، در اینجا چند سرور بانک اطلاعاتی با استفاده از سازوکار Replication دقیقا شامل اطلاعات یکسان و همانند می باشند.
به عنوان مثال فرض کنید در یک شرکت بزرگ که دارای سه واحد اصلی فروش، انبار و حسابداری است، سه سرور بانک اطلاعاتی کاملا یکسان در نظر گرفته شده که هر یک از واحد ها داده های موردنیازشان را از جداول مربوط به خودشان از سروری که به آن ها اختصاص یافته دریافت می کنند و هر گاه تغییری را در آن اطلاعات به وجود آوردند، یا در همان لحظه باید در کلیه سرورهای دیگر نیز اعمال شود و یا طبق یک برنامه زمانبندی شده، در زمان دیگری مثلا در ساعات غیر اداری ک میزان ترافیک اطلاعات کاهش می یابد، به دیگر سرورها منتقل شود.اگر بخواهیم تغییر اطلاعات در همان لحظه به دیگر سرورها اعمال شود، می توان از Replication نوع فرایندی (Transactional) استفاده کرد.
در این روش با استفاده از قابلیتی به نام تغییر دو مرحله ای اطلاعات یا اصطلاحا Two Phase Commit هر تغییری بلافاصله در سایر سرورها نیز لزوما اعمال می شود. اما اگر بخواهیم تغییرات در زمان خاصی و به تعداد معمولی ( مثلا دو یا سه بار طی شبانه روز ) به سرورهای دیگر منتقل شود، می توان از Replication نوع ادغام استفاده کرد .(شکل 4)
بنابراین در این حالت هر سرور ضمن داشتن آخرین اطلاعات مربوط به واحد خود، آخرین اطلاعات رسیده از سایر سرورها (یا واحدهای دیگر) را نیز دارد.
لازم به ذکر است که عملیات انتقال اطلاعات با استفاده از Replication نکات و مسائل فنی فراوانی دارد که به تنهائی در قالب چند مقاله قابل بررسی است.


شکل 4


منبع : sqliran

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 9:37 توسط محمد جهانشاهی |

جداول موقت و متغيرهاي جدولی


يکي از مسائلی که همواره پیش روی یک طراح یا برنامه نویس بانک های اطلاعاتی قرار دارد ، استفاده یا عدم استفاده از جداول موقت در زمان نیاز است . جداول موقت ، جداولی هستند که به فراخور نیاز در برخی روال های ذخیره شده یا تریگرها برای انجام پردازش بر روی اطلاعات مورد استفاده قرار میگیرند . هرچند استفاده از هر نوع جدول موقت به دلیل کند بودن پردازشگر فیزیکی اطلاعات بر روی آن ها چندان توصیه نمی شود، اما مواردی پیش می آید که آن ها را تبدیل به تنها راه یا بهترین راه پردازشگر اطلاعات خاص می کند.

     

یکی از مسائلی که همواره پیش روی یک طراح یا برنامه نویس بانک های اطلاعاتی قرار دارد ، استفاده یا عدم استفاده از جداول موقت در زمان نیاز است . جداول موقت ، جداولی هستند که به فراخور نیاز در برخی روال های ذخیره شده یا تریگرها برای انجام پردازش بر روی اطلاعات مورد استفاده قرار میگیرند . هرچند استفاده از هر نوع جدول موقت به دلیل کند بودن پردازشگر فیزیکی اطلاعات بر روی آن ها چندان توصیه نمی شود، اما مواردی پیش می آید که آن ها را تبدیل به تنها راه یا بهترین راه پردازشگر اطلاعات خاص می کند. مثلا فرض کنید در یک سیستم پرداخت حقوق و دستمزد کارمندان یک شرکت ، ابتدا حقوق پایه آن ها در یک جدول موقت قرار گرفته ، آنگاه برنامه پردازش حقوق ، فاکتورهای مختلف و موءثر بر حقوق چون مالیات ،بیمه ، اقساط وام و .. را به تدریج و بر حسب اولویت بر آن اعمال کرده و مقادیر آن ها را تغییر می دهد . آنگاه مقادیر نهایی از این جدول موقت به جدول اصلی حقوق به عنوان رقم نهایی حقوق کارمندان کپی شده و سپس جدول موقت برای استفاد بعدی سیستم ، به کلی از سیستم پاک می شود . دستور ساخت یک جدول موقت به شکل زیر است :

(…)create table #T

اولین سوالی که ممکن است در این زمینه جا مطرح شود ،این است که چرا اساسا با وجود جدول اصلی حقوق ، پردازش ها باید در یک جدول موقت انجام شود . در جواب می توان به دو دلیل عمده در این رابطه اشاره کرد :
اول این که ممکن است به دلایلی ، عملیات پردازش حقوق در میان راه با مشکل مواجه شده و از ادامه کار بازبماند . بدین ترتیب در صورت عدم استفاده از جدول موقت ، احتمال باقی ماندن رکوردهای حاصل از پردازش ناقص در جدول اصلی حقوق کارمندان بسیار زیاد خواهد بود .

دوم این که در صورت استفاده از جدول اصلی برای پردازش اطلاعات ، ممکن است کاربران دیگر نیز در همان زمان به این جدول رجوع کنند . در این صورت نیز دو مشکل دیگر در شرف امکان قرار خواهند گرفت . اولا در حالی که یک کاربر مشغول عملیات درج و تغییر در این جدول است ، کاربر دیگر در حال خواندن اطلاعات از آن است . این مساله ممکن است به کلیه پیامدهای ناشی از همزمانی و تداخل کاربران در یکدیگر مثل پدیده Locking بیانجامد . دوما این که در صورتی که یکی از کاربران دیگر در همان زمان مشغول گرفتن گزارشاتی از وضعیت حقوق کارمندان باشد ، احتمال خوانده شدن رکوردهای ناقص و یا اطلاعات باقی مانده از یک فرآیند نا موفق (Dirty read) و درنتیجه تولید یک گزارش اشتباه نیز بسیار محتمل است .

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

 
INSERT INTO MAIN_T SELECT * FROM TEMP_T

به یکباره وارد جدول اصلی شود .

اما استفاده از جداول موقت تنها یکی از روش های پردازش اطلاعات است و نکته مهمی که قبل از شروع به کار با این روش باید درنظر گرفته شود ، نقاط قوت و ضعف آن در مقایسه با روش های دیگر است . یکی از روش های کمتر شناخته شده اما مفید برای پردازش اطلاعات ، متغیر جدول یا همان Table Variable است . متغیر جدول در واقع بیشتر امکانات یک جدول بانک اطلاعاتی را در اختیار برنامه نویس قرار می دهد و وی را قادر می سازد تا همانند یک جدول معمولی به درج ، حذف و تغییر اطلاعات در آن بپردازد . در Sqlserver و بسیاری از بانک های اطلاعاتی دیگر ،از این نوع داده (data type) به عنوان جایگزینی مناسب برای جداول موقت استفاده می گردد . دستور تعریف یک متغییر جدول به شکل زیر است :

(…)declare @T table

اما قبل از استفاده از هرکدام از این دو روش باید نقاط برتری هر یک را در مقایسه با دیگری مورد بررسی قرار داد .

1- محل ساختن و قرار گرفتن یک جدول موقت ، در پایگاه TempDB است در حالیکه متغییر جدول همانند هر متغیر دیگری ، در حافظه سیستم قرار میگیرد ؛ همچنین محاسبات انجام گرفته بر روی یک متغیر جدول ، در سیستم لاگ نمی شود . بنابراین این متغیر از قوانین مربوط به فرآیندها (Transaction) معاف است . مثال زیر گویای این مساله است . همانطور که مشاهده می کنید ، برگشت فرآیند با استفاده از دستور Rollback هیچ تاثیری بر تغییر رکورد درج شده در متغییر جدول ندارد اما باعث برگشت مقدار تغییر یافته در جدول موقت شده است

create table #T (s varchar(128))
declare @T table (s varchar(128))
insert into #T select 'old value #'
insert into @T select 'old value @'
begin transaction
update #T set s='new value #'
update @T set s='new value @'
rollback transaction
select * from #T
select * from @T

s
---------------
old value #
s
---------------
new value @

بنابراین واضح است که به دلیل لاگ نشدن عملیات روی یک متغییر جدول و همچنین قرار گرفتن آن در حافظه اصلی سیستم ، سرعت کار با آن نیز در مقایسه با جدول موقت بیشتر است .

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

3- ساختار یک جدول موقت با استفاده از دستور ALTER قابل تغییر است در صورتیکه یک متغییر جدول پس از تعریف ، قابل تغییر نیست . همچنین متغیر جدول فقط میتواند دارای کلید (Primary key) باشد اما امکان گذاشتن ایندکس های غیر خوشه ای (Nonclustered index) بر روی آن وجود ندارد . بنابراین اگر قصد جستجو های آتی متنوع و فراوان در اطلاعات موقتتان دارید ، بهتر است از جدول موقت استفاده کنید .

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


منبع : sqliran

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 9:36 توسط محمد جهانشاهی |

نگاهي به قابليت هاي جديد SQL Server 2005 – مبحث مدیریت خطا


در SQL Server 2000 ، خطا و مسائل مربوط به آن را مي توان به طور کلي به دو دسته تقسيم کرد: يک دسته از آن ها در زمان فراخواني و اجراي يک دستور T-SQL به صورت اشتباه بروز مي کنند. نوع دوم خطاها در SQL Server 2000 ، خطاهای قابل پیش بینی و در واقع آن دسته از خطاهایی هستند که نه مربوط به مشکل استفاده نادرست از دستورات T-SQL است و نه پاس شدن اشتباه پارامتر به بانک اطلاعاتی.

     


کشف خطاها (Error Detection ) و نحوه مقابله و تعامل با آن ، همواره یکی از حساس ترین مراحل برنامه نویسی در زمان ساخت نرم افزار بوده و هست. نرم افزاری که فاقد راهکارهای لازم جهت پیش بینی ، تشخیص و مواجهه با خطاهای احتمالی در سیستم باشد، هم کاربر و هم سیستم را دچار اشتباه و مشکل می نماید و ممکن است در برخی مواقع باعث ثبت و تغییر ناخواسته اطلاعات شود. بخصوص در زبان های برنامه نویسی یا بانک های اطلاعاتی این امر از اهمیت ویژه ای برخوردار است. البته در زبان های برنامه نویسی معمولا بروز یک خطا به راحتی آشکار می گردد و کاربر در همان لحظه، متوجه اشکال در عملات یا ثبت اطلاعات می شود، اما در بانک های اطلاعاتی که در بسیاری مواقع به صورت دسته ای ( Batch ) و در قالب یک یا چند فرآیند (Transaction ) در سیستم انجام می شود، کشف خطا و راه حل آن ، پیچیده تر و حساس تر است.  

در SQL Server 2000 ، خطا و مسائل مربوط به آن را می توان به طور کلی به دو دسته تقسیم کرد: یک دسته از آن ها در زمان فراخوانی و اجرای یک دستور T-SQL به صورت اشتباه بروز می کنند. به عنوان مثال، فرض کنید که در یکی از روال های ذخیره شده یا تریگرها، دستوری نوشته اید که یک عدد بزرگ را به یک متغیر یا فیلد کوچک مثل Small int نسبت می دهد. این عمل باعث می شود بانک اطلاعاتی یک خطای غیر منتظره را کشف نماید و با آشکار کردن آن، از ادامه اجرای دستورالعمل های بعدی اجتناب کند و به طور کلی تمام دستورالعمل های موجود در آن فرآیند به طور خودکار ملغی شود ( Auto RollBack ) . این گونه خطاها را باید حتی الامکان در سطح برنامه های دسکتاپ کاربر (Application ) کنترل نمود و در واقع از اشتباه کاربر در پاس کردن پارامترهای غیر مجاز به سطح بانک اطلاعاتی، جلوگیری کرد.حتی در صورت وقوع چنین امری، باز هم نباید گذاشت بانک اطلاعاتی بدون کنترل کردن پارامتر های دریافتی، اقدام به استفاده از آن ها نماید تا سیستم را دچار بروز خطای غیر قابل پیش بینی کند. به عنوان مثال، در مورد استفاده از اعداد بزرگ در متغیر های کوچک می توان این کنترل که عدد مذکور تا دامنه خاصی قرار گرفته است یا نه را به سادگی توسط یک دستور IF و مقایسه مناسب ، قبل از اجرای دستور العمل مربوطه انجام داد.


Declare @Var2 smallint
IF @Var<32767
Begin
(Select @Var2=@Var ) اجرای دستورالعمل
End

البته همان طور که حتما متوجه شده اید، انجام داد چنین کنترل هایی در سطح بانک اطلاعاتی کاری بسیار مشکل است که ممکن است تعداد خطوط برنامه نویسی در یک بانک را بی جهت تا حد زیادی افزایش دهد. در SQL Server 2005 راهی برای کنترل این نوع خطاهای غیر قابل پیش بینی اندیشیده شده است که به آن خواهیم پرداخت.

نوع دوم خطاها در SQL Server 2000 ، خطاهای قابل پیش بینی و در واقع آن دسته از خطاهایی هستند که نه مربوط به مشکل استفاده نادرست از دستورات T-SQL است و نه پاس شدن اشتباه پارامتر به بانک اطلاعاتی. کنترل این گونه خطاها را طراح و برنامه نویس برای جلوگیری از ورود، تغییر یا حذف اطلاعات حساس در سیستم ، به صورت عمدی در روال ها یا تریگر ها قرار می دهد تا از اشتباه کاربر با اطلاعات حساس جلوگیری کند. به عنوان مثال، فرض کنید در یک برنامه حسابداری، حذف سند تایید شده ( سندی که فیلد stt آن برابر یک باشد ) غیر محاز است. بنابراین، برنامه نویس می تواند با اضافه کردن خطوط زیر به تریگر مربوط به حذف رکورد از جدول اسناد، یک نوع خطای کنترل شده را آشکار نماید و از ادامه کار توسط کاربر جلوگیری کند.

Select @stt=stt from Deleted
If @stt=1
Begin

(1 , 16 و " سند تایید شده قابل حذف نمی باشد " ) raiserror
Return
End

همان گونه که مشاهده می کنید، در این جا از دستور العمل raiserror استفاده شده است که برای آشکار کردن اشتباه کاربر در حذف اطلاعات و برگرداندن یک پیغام اخطار به کاربر را مشخص می کند. دومین پارامتر severity است. اگر این عدد برابر شانزده باشد، به معنی این است که ضمن نمایش پیغام خطا، تمام اعمال انجام شده توسط کاربر در این فرآیند به صورت خودکار ملغی می شود. اما اگر بین یازده تا پانزده باشد، صرفا یک پیغام خطا به کاربر نشان داده می شود، ولی عملیات موردنظر وی انجام می شود ( از این حالت، بیشتر برای نمایش پیغام های جانبی و نه پیغام های بروز خطا استفاده می شود، چرا که عملیات موردنظر کاربر ملغی نمی شود ) و اگر این پارامتر برابر ده یا کمتر باشد ، هیچ پیغامی به کاربر نمایش داده نمی شود و همچنین عملیات موردنظر وی ( فرآیند جاری ) انجام می شد و ملغی نمی گردد.

همانگونه که متوجه شده اید ، دستور العمل raiserror کاربردهای متفاوتی دارد که لزوما به معنای ملغی کردن فرآیند کاربر نیست. اما علاوه بر دستورالعمل فوق ، در ASQL Server 2000 یک متغیر محیطی ( Enviromental Varialble ) وجود دارد که موتور بانک اطلاعاتی وظیفه کنترل و مقدار دهی آن را در زمان های بروز خطا، به عهده دارد و می تواند خطاهای ناخواسته و کنترل نشده را که قبلا با استفاده از دستور If مشخص می کردیم، به نحو ساده تری آشکار کند. این متغیر که با عبارت @@Error شناخته می شود، بلافاصله بعد از بروز هر گونه خظای ناخواسته مثل خطای حاصل از تقسیم بر صفر ، به صورت خودکار مقدار دهی می شود و برنامه نویس بانک اطلاعاتی می تواند بعد از انجام دادن هر دستور العملی که شکی در انجام گرفتن درست آن وجود دارد، با بررسی مقدار موجود در این متغیر محیطی، خطای احتمالی را آشکار نماید. به عنوان مثال ، اگر بخواهیم بدون استفاده از دستور If برای کنترل پیش از مقداردهی یک عدد بزرگ به یک متغیر smallint ، خطای احتمالی ناشی از آن را کنترل کنیم، می توانیم به جای روش قبل از تکه کد زیر استفاده نماییم:

Declare @Var2 smallint
Select @Var2=@Var
If @@error=220
Begin 
(1 , 16 و " عدد بزرگ تر از 32767 مجاز نیست " ) raiserror
End

البته همانگونه که در شکل 1 نتیجه حاصل از اجرای چنین کدی را مشاهده می کنید، حتی در صورت عدم استفاده از دستور raiserror نیز، برنامه به طور خودکار پیغام خطایی را به کاربر نمایش خواهد داد. اما نمایش یک پیغام فارسی ساده و گویا، مناسب تر از نمایش پیغام سیستمی OverFlow برای کاربران است. در هر صورت با این روش کلیه عملیات موجود در آن فرآیند، تریگر یا روال ملغی می شود.
پس از ارائه نسخه جدید SQL Server در سال 2005 برنامه نویسان بانک های اطلاعاتی با واژه جدیدی رو در رو گشتند که از برخی زبان های برنامه نویسی مایکروسافت مثل ویژوال سی یا سایر زبان های دات نت مثل ویژوال بیسیک و سی شارپ اقتباس شده بود.


شکل 1


در واقع مایکروسافت در راه نزدیک تر کردن هر چه بیشتر محیط های توسعه دات نت با یانک اطلاعاتی خود، علاوه بر افزودن امکانات کار با XML و CLR در موتور SQL Server 2005 ( که در شماره پیشین مورد بررسی قرار گرفت ) برخی ساختار های برنامه نویسی را نیز به این بانک اطلاعاتی اضافه کرد که یکی از مهم ترین آن ها ساختار موسوم به TRY-CATCH است که برای کشف خطا در برنامه ها کاربرد بسیاری دارد و همان گونه که از نام آن برمی آید، این ساختار شامل دو قسمت است: یکی برای دربرگرفتن آن دسته از دستورات T-SQL که احتمال بروز خطا در زمان اجرای آن ها وجود دارد و دیگری، برای آشکار کردن خطای مذکور. بدیهی است که در قسمت دوم یعنی بلاک CATCH ، باید از دستوری چون raiserror یا متغیری مثل Error@@ استفاده کرد تا همانند قبل بتوان پیغام مناسب را به کاربر نمایش داد.
به عنوان مثال تکه کد زیر، انتساب مقدار بزرگتر از حد برای متغیر Var2@ را کنترل می کند و در صورت بروز آن، پیغام متناسب کاربر را به وی نمایش می دهد.

Begin TRY
Select @Var2=@Var
End TRY
Begin CATCH
If @@Error=220
Begin
(1 , 16 و " عدد بزرگتر از 32767 مجاز نیست " ) raiserror
End

همانطور که مشاهده می کنید، در این جا نیز برای مشخص نمودن نوع خطا از متغیر محیطی Error@@ و برای نمایش پیغام به کاربر از تابع raiserror استفاده شده است. دو نکته مهمی که در زمان استفاده از ساختار TYR- CATCH باید مورد توجه قرار گیرند این است که اولا، بین دو بلاک TRY و CATCH هیچ دستور SQL نباید وجود داشته باشد. در ثانی، هر کدام از دو بلاک مذکور فقط شامل یک دستور SQL باشند.
اما تغییرات ایجاد شده در مدیریت خطا در نسخه 2005 فقط به ساختار مذکور محدود نمی شود، بلکه در این نسخه توابعی گنجانده شده است تا به شکلی نقطه ضعف استفاده از متغیر محیطی Error@@ را برطرف نماید. توابع مذکور قادرند برخلاف این متغیر محیطی که فقط بیانگر شماره خطا است، اطلاعات دیگری را نیز در اختیار برنامه نویس یا کاربر قرار دهند. به عنوان مثال، اگر بخواهیم به جای استفاده از متغیر مذکور در قطعه کد قبل، از یکی از این توابع برای نمایش پیغام خطا استفاده کنیم، به جای بلاک CATCH قبل خواهیم داشت:

Begin CATCH
Raiserror (ERROR_MESSAGE(),16,1)
End CATCH

شکل 2


همان گونه که مشاهده می کنید، تابع ERROR_MESSAGE متن پیغام خطای سیستم را مستقیما به raiserror می دهد تا در صفحه نمایان شود. جدول زیر فهرستی از این توابع و کاربرد آن ها را نشان می دهد.


شماره خطی از روال یا تریگر که این خطا رخ داده است. ERROR_LINE
پیغام سیستمی متناسب با خطای مذکور که در جدول سیستمی SysMessages قرار گرفته است. ERROR_MESSAGE
شماره خطا و مقدار  @@ERROR ERROR_Number
شماره روال یا تریگری که این خطا در آن رخ داده است. ERROR_Procedure

منبع : sqliran

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 9:35 توسط محمد جهانشاهی |

10 عملي که يک DBA نبايد هرگز انجام دهد

بر عهده داشتن وظيفه راهبري پايگاه داده، حتي در محیط های برنامه نویسی، همیشه خطیر بوده و از اهمیت بسیار بالایی برخوردار است، به طوری که حتی اشتباهاتی کوچک از جانب یک DBA می تواند موجب بروز اشکالاتی در عملکرد کلی سیستم ها گردد. اگر قصد دارید به عنوان یک DBA مشغول به کار شوید، پس در نظر گرفتن موارد زیر در سمت کاری آینده شما بسیار تاثیر گذار است. در صورتی هم که در حال حاضر در این سمت مشغول به کار می باشید، باز هم این امکان وجود دارد که تا به حال به بعضی از موارد زیر توجه نکرده باشید.

     

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

1. Rebuild کردن Index در ساعات کاری

این عمل موجب افزایش چشم گیر I/O دیسک می شود. بهتر است این عمل بعدازظهر یا در طول شب ( زمانی که فعالیت کاربران به حداقل می رسد ) انجام شود.لازم به ذکر است که می توانید از سرویس Agent job جهت برنامه ریزی انجام خودکار این عملیات استفاده کنید.

2. Stop کردن Database بدون اطلاع رسانی قبلی

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

3. نصب Service Pack در ساعات کاری

نصب سرویس پک، موجب Stop و Start های متعدد پایگاه داده می شود. توصیه می کنم این کار را نیز در ساعات کاری شرکت یا سازمان خود انجام ندهید. چون با این کار کاربران بسیاری را دلخور می کنید.

4. اجرای Query های تستی بر روی سرور اصلی

اگر این کار را انجام می دهید پس حتما نمی دانید که این Query ها به چه میزان منابع Server را به خود اختصاص می دهند.

5. Defragment کردن درایوهایی که فایل های دیتابیس روی آن قرار دارند

آیا تا به حال این کار را روی کامپیوتر شخصی خود انجام داده اید؟! پس حتما متوجه اید که چرا نباید این کار را روی سرور شرکت یا سازمان خود در ساعات کاری انجام دهید!!

6. بداخلاقی با برنامه نویسان

سعی کنید منطق دستورات خود را به آن ها توضیح دهید. بهتر است همیشه صبور باشید و تلاش کنید در حین ارجاع کار به آن ها دانش خود را نیز به آن ها منتقل کنید. نتیجه کار مستقیما به کار گروهی شما بستگی دارد.

7. پشتیبان گیری در ساعات کاری

این موضوع هم به I/O دیسک سرور مربوط می شود. اگر مجبور هستید این کار را در طول روز و در ساعات کاری انجام دهید، پس به گزینه هایی مانند differential Backups یا Transactional log Backups توجه کنید، این نوع پشتیبان گیری ها بسیار سریعتر صورت می پذیرد.

8. نصب Update های نرم افزاری قبل از تست و پشتیبان گیری

ممکن است نرم افزار های جانبی بر روی سرور پایگاه داده شما نصب شده باشد. نصب نرم افزار و یا نصب Update های نرم افزاری حتما باید با توجه ویژه و تست قبلی صورت پذیرد. تولید کنندگان نرم افزار ممکن است نتوانند صحت عمکرد نرم افزار خود را بر روی سخت افزار و شرایط مختلف بررسی کنند. قبل از اعمال هر تغییری در نرم افزارهای سرور از دیتابیس خود Backup بگیرید.

9. ایمن نکردن SQL Server

غالبا DBA ها فکر می کنند که سرورهایشان از امنیت بالایی برخوردار است!! آیا شما هم این طور فکر می کنید؟!
بهتر است برنامه Microsoft Baseline Security Analyzer را بر روی سرور خود اجرا کنید. شاید از مشاهده نتیجه آن تعجب کنید.

10. اجرای دستور Drop قبل از اطمینان کامل

قبل از اینکه دکمه Enter را فشار دهید خوب فکر کنید، اجرای این دستور با سهل انگاری ممکن است موجب اخراج بلادرنگ شما شود!

منبع : sqliran

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 9:34 توسط محمد جهانشاهی |

10 دليل قانع کننده استفاده از SQL Server 2005


از آنجائي که نسخه SQL Server 2005 داراي قابلیت ها و ویژگی های نوین و کاملتری نسبت به نسخه ها قدیمی مانند SQL Server 2000 می باشد ، و با توجه به اینکه متاسفانه در حال حاضر استفاده از این نسخه در کشور ما ایران بسیار کم رنگ تر از نسخه های قدیمی می باشد ، در این مقاله 10 دلیل اصلی را که شما را ترغیب به ترفیع به SQL Server 2005 می کند ، را به شکلی فهرست وار توضیح می دهم.

     

در حال حاضر بسیاری از سازمان ها و شرکت ها از نسخه SQL Server 2000 استفاده می کنند. زمانی که شرکت Microsoft نسخه SQL Server 2005 را ارائه داد، بسیاری از مدیران IT و راهبران پایگاه داده با این سوال مواجه شدند: آیا لازم است ورژن SQL Server خود را upgrade کنیم ؟!

مسلما پیشرفت هایی که در نسخه SQL Server 2005 به چشم می خورد به قدری حائز اهمیت می باشند که شما به عنوان یک IT Manager یا DBA در صورت شناخت، خود را موظف به این امر خواهید دانست .

1. هر برنامه کاربردی که در حال حاضر کار می کند، بدون هیچ تغییری با SQL Server 2005 نیز کار خواهد کرد

ابزار SQL Server 2005 Management Studio جایگزین ابزار Enterprise Manager خواهد شد. اما شما با این ابزار جدید نیز قادر به مدیریت پایگاه های داده SQL Server 2000 نیز خواهید بود. البته از این ابزار جهت مدیریت SQL Server 6.5 و SQL Server 7.0 نمی توان استفاده نمود .
برنامه های کاربردی و سایت های شرکت یا سازمان شما بدون نیاز به انجام هیچ گونه تغییری به فعالیت ادامه خواهد داد. وجود این سازگاری بسیار مهم است. به اهمیت آن بیشتر فکر کنید.

2. SQL Server 2005 دارای ابزار های بیشتری می باشد

در نسخه های قدیمی SQL Server اجزا گوناگون مانند Analysis Services در بسته های نرم افزاری مختلفی قرار گرفته بود. اما در نسخه SQL Server 2005 شرکت مایکروسافت رویکرد بازاریابی خود را تغییر داده و تمامی اجزا را در یک بسته قرار داده است.
همان طور که در مقاله
آموزش نصب SQL Server 2005 توضیح داده ام، شما می توانید سرویس ها و اجزا مختلف را هنگام نصب انتخاب کنید.

3. دسترسی آسان و یکپارچه به همه اجزا

SQL Server Management Studio یا SSMS به شما این امکان را می دهد که خیلی ساده و واضح به همه اجزا مانند Data Transformation Services ( DTS ) ، profiler ، Reporting Services ، Tuning Advisor و حتی SQL Server Integration SSIS )Services ) و  OLAP ) Online Analytical Processing )  دسترسی داشته باشید.
این یکپارچگی موجب افزایش کارایی و هزینه کمتر آموزش می گردد. حتی اگر شما نسخه های SQL Server 2000 داشته باشید، توسط ابزار SSMS می توانید آن ها را مدیریت کنید.

4. بهره گیری از قدرت Net. برای ایجاد اشیا پایگاه داده

در این نسخه شما قادر می باشید از زبان های برنامه نویسی سطح بالا مانند Visual Basic.Net یا C#.Net جهت تولید اشیا پایگاه داده مانند Stored Procedures ، Functions و Triggers استفاده کنید. در واقع قرار گیری CLR در هسته اصلی SQL Server 2005 استفاده از هزاران class موجود در Net. را در پایگاه داده میسر ساخته است.
لازم به ذکر است استفاده از CLR برای تولید اشیا پایگاه داده زمانی ارزشمند است که شی ساخته شده دارای منطق عملیاتی پیچیده ای باشد، در واقع قدرت عملکرد اشایی که با CLR ساخته می شود، به مراتب بالاتر از اشیایی می باشد که با T-SQL ساخته شده باشد.

5. بهره گیری از مزایای Reporting Services

به یک قاعده کلی اشاره می کنم، " هر چیزی که Back end می تواند انجام دهد، باید Back end انجام دهد و نباید به Front end سپرده شود. "
برای مثال ساخت یک Query به صورت Dynamic معمولا کار سخت و زمان فرسایی می باشد که مستلزم کد نویسی زیادی در لایه Application می باشد. در واقع راه بهتر حالت دریافت پارامتر ها از کاربر و ارسال آن ها به یک Stored Procedure می باشد.
SQL Server Reporting Services این مفهوم را بسیار بهینه و کاراتر ساخته است. در نسخه های قدیم SQL Server ، گزارشات توسط برنامه های Front end مانند ( VB ، C++ ، Crystal Reports و ... ) صورت می پذیرفت .
در SQL Server 2005 شما می توانید از مزایای بسیار Reporting Services استفاده نمائید.
اول از همه شما می توانید کلیه منطق های مربوطه را از برنامه کاربردی جدا نموده و به Reporting Services بسپارید. پس از آن از هر Frond end دیگری می تواند جهت فراخوانی گزارشات به سادگی استفاده کنید.

6. Business Intelligence موجود در SQL Server 2005

سیستم های هوشمند و تحلیلی که بیشتر با عنوان سیستم های ( OLAP ) شناخته می شوند درون SQL Server 2005 قرار گرفته شده است. یکپارچگی هوش تجاری با موتور پایگاه داده قابلیت های فراوانی را به طراحان برنامه های کاربردی و تحلیل گران داده های سازمانی ارائه می دهد.

7. با DTS خداحافظی کنید و به SSIS خوش آمد گوئید !

SQL Server 2005 ویژگی جدیدی به نام SSIS را معرفی می کند که از نظر امنیتی ، مدیریتی و کاربردی بسیار مناسب عمل می کند. این ویژگی که جایگزین مانسبی برای DTS می باشد، عملیات ارسال و دریافت داده ها و تغییر آن ها را میان پایگاه های داده و فایل های مختلف به شکلی ساده و حرفه ای مدیریت می کند.

8. بهره گیری از مکانیسم امنیتی نوین و مطمئن با مدیریت آسان تر

توسط این نسخه می توانید دسترسی های خاص تر به افراد خاصی بدهید، طراحی جدید Schema به شما امکان می دهد به کاربران خود فقط دسترسی هایی را بدهید که به آن نیاز دارند.

9. قابلیت بسط پذیری در سازمان های بسیار بزرگ

بدون شک یکی از اصلی ترین مشکلات SQL Server 2000 ، عدم قابلیت یا بهتر است بگوئیم عدم کارایی این نسخه با حجم وسیعی از داده ها در سطح Enterprise بوده است. در واقع یکی از مهم ترین نقاط مورد توجه در طراحی این نسخه از SQL Server ، قابلیت رقابت این سیستم با رقبای تجاری مانند Oracle و DB/2 بوده است.

10. ارائه روش های جدید برای برنامه نویسی پایگاه داده

نسخه SQL Server 2005 دارای ویژگی های متعددی جهت افزایش کارایی و کاهش زمان برنامه نویسی می باشد.
این ویژگی ها شامل موارد زیر می باشد:

ADO.Net version 2.0
• Hosted Common Language Runtime
• Security Enhancement
• Transact-SQL Enhancement
• Service Broker
• Web Services- HTTP Endpoints
• Native XML Support
• Embedded Reports

منبع : sqliran

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 9:13 توسط محمد جهانشاهی |

دلفی 2007

دِلفی (Delphi) یا به تعبیری ویژوآل پاسکال – یک زبان برنامه‌نویسی است و بستری برای توسعهٔ نرم‌افزار که شرکت بورلند آن را تولید کرده است. این زبان، در بدو انتشار خود در سال ۱۹۹۵، به عنوان یکی از نخستین ابزارهایی مطرح شد که از توسعهٔ نرم‌افزار بر مبنای متدولوژی RAD پشتیبانی می‌کردند؛ یعنی تولید و توسعهٔ سریع برنامه‌های کاربردی.

این نرم افزار بر مبنای پاسکال شی‌گرا بوده و از این زبان مشتق شده است. البته بورلند نسخه‌ای از دلفی و سی‌پلاس‌پلاس‌بیلدر را برای لینوکس به نام کایلیکس (Kylix) ارائه کرد که مورد استقبال توسعه دهندگان نرم‌افزارهای لینوکس قرار نگرفت. نرم‌افزارهای دلفی در ابتدا به صورت مستقیم از کتابخانه‌های ویندوز و کتابخانهٔ مخصوص خود به نام VCL استفاده می‌کرد، اما پس از نسخه ۶ دلفی، امکانات استفاده از دات‌نت هم به آن اضافه شد. در حال حاضر می‌توان دلفی را یکی از رایج‌ترین زبان‌های ممکن در ایران دانست.

زبانِ دلفی که پیشتر بنام پاسکال شیءگرا (Object-Pascal) خوانده می‌شد و برای طراحی نرم‌افزاهای تحت ویندوز به کار می‌رفت، امروزه چنان توسعه یافته است که برای تولید نرم‌افزارهای تحت سیستم‌عاملِ لینوکس و دات‌نت نیز به کار می‌آید. بیشترین کاربرد دلفی در طراحی برنامه‌های رومیزی و پایگاه دا‌ده‌ها‌ است، اما به عنوان یک ابزارِ «چند- منظوره»، برای طراحی انواع گوناگونی از پروژه‌های نرم‌افزاری نیز مورد استفاده قرار می‌گیرد.

RAD=Rapid Application Development

 دلفی 2007

در اواخر سال 2006 شرکت بورلند يك شركت تابع با نام CodeGear را تاسيس كرد تا اين شركت بتواند تمام انرژی خود را صرف محيط های برنامه‌نويسی مشهور خود يعنی دلفی و سی++ بيلدر و... كند. بن اسميت نام اولين مدير CodeGear بود. شركت بورلند نيز فعاليتهای خود را در زمينه Application Lifecycle Management ادامه می‌دهد. اولين محصول اين شركت، CodeGear Delphi 2007 هست كه بسياری از نقائص موجود در دلفی 2006 از جمله سرعت پائين آن در اين محصول برطرف شده است و بعد از دلفی 7 می‌توان از آن به عنوان محصولی مطمئن و قابل استفاده نام برد، هر چند كه دلفی 2006 هم محصولی كارامد هست. از ديگر محصولات CodeGear می‌توان به Delphi 2007 For PHP اشاره كرد كه تحول شگرفی در رابطه با استفاده از تکنولوژی Ajax در دلفی است.

  دلفی ۲۰۰۶

شرکت بورلند در سال ۲۰۰۶ نرم‌افزار جدید خود را با ویژگیهای جدید به بازار ارائه کرد. این برنامه جدید امکان برنامه نویسی با دلفی و سی پلاس پلاس و همچنین سی‌شارپ را بطور هم‌زمان ارائه می‌دهد. بدین ترتیب برنامه نویسانی که با ابزارهای مختلفی کار می‌کنند براحتی می‌توانند در این محیط جدید برنامه نویسی کنند. ویژگی مهم این نگارش نسبت به نگارش ۲۰۰۵ بحث مدیریت حافظه است. در نگارش ۲۰۰۵ ضعفهائی در این زمینه وجود داشت که در این نسخه حل شده است. شرکت بورلند افتخار دارد که به عنوان اولین شرکت تولید کننده IDE زبانهای برنامه نویسی مانند دلفی و سی شارپ بیلدر و جی بیلدر(مخصوص زبان جاوا) و .... از تکنولوژی دات نت در محصولات خود استفاده کرده است.

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 8:36 توسط محمد جهانشاهی |

تاریخچه دلفی

  در ادامه این مطلب می توانید تاریخچه دلفی را مطالعه کنید .

ارسال شده در مورخه : سه شنبه نهم بهمن 1386 ساعت 7:55 توسط محمد جهانشاهی | | ادامه مطلب

بالا بردن آمار بازدید

بالا بردن آمار بازدید

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

ماهواره ,استارست ,اسكاي ,استرانگ ,ست ,كامپيوتر ,نرم افزار ,بازي ,موبایل ,نوکیا, سونی اریکسون, سامسونگ, گوشی, ماهواره, دانلود, dvb, جدید, نرم, های, افزار, استارست, progdvb, برنامه, کانال, کد, softcam,رسیور, کردن, فرکانس, آموزش, starsat, tps, برای, کانالهای, باز, gbox, sharing, کارت, key,abc.mihanblog, استرانگ, mct, wincsc, جديد, مولتی, skynet, دیش, استار, آفلاین, کدهای, dcw, نصب, ویژن, فركانس, از, آپگرید, اینترنت, پچ, نوکیا, 550, و, در, پلاگین, با, keys, s2emu, ها, 2, sky, هاي, spice, mytheatre, هاتبرد, شبکه, card, سافتکم, ای, فلش, prog, for, سایت, star, جدیدترین, 190, كارت, اموزش, كد, strong, كانال, فایل, كدهاي, لودر, ریسیور, download, به, كردن, ست, ویندوز, 9500, ماهوارهای, skygrabber, humax, موبایل, سوپر, 4620, تنظیم, انواع, 2006, cardsharing, skystar2, tv, ورژن, فیلم, فرکانسهای, sr-x5d, 150, هایتک, كانالهاي, ماهوارها, نقشه, srt, multivision, fastsatfinder, view, vplug, سامسونگ, اسکای, platinum, 220, قیمت, ایرانی, رسيور, فایندر, کامل, کاون, viaccess, روش, آخرین, قانونی, skystar, rapidshare, نحوه, software, بهترین, بي, plugin, لیزر, sat, code, hotbird, x5, twinhan, مدار, مکس, kaon, کامپیوتر, dvbdream, آهنگ, جديدترين, كاون, gboxfriend, سافت, وي, ال, فارسی, آنتن, کم, دي, altdvb, and, bin, upgrade, طریقه, افزارهای, تبدیل, سايت, xp, loder, براي, 99۵, ساخت, v, جهت, keygen, بی, ان, رمز, پخش, پلی, dorcel, قفل, elecard, اخبار, رسیورهای, aes, گوشی, پلاگين, استفاده, لیست, 4620ii, تنظيم, startrack, ترفندهاي, canal, channel, معرفی, ديش, dreambox, 1.27, دو, metabox, pdf, ریزی, سوني, nokia, كامپيوتر,abc, ويندوز, اپگرید, باکس, softcam.key, turksat, ورد, سونی, polsat, رایگان, &, پروگرام, visionplus, lnb, کارتی, کرک, php, sms, opensky, polsatauto.exe, خرید,200, flash, کارتهای, درباره, آپديت, عکس, open, saftcam, grabber, اریکسون, 3.33.8, crack, چگونه, شرح, مدل, فرمت, دیجیتال, ماهوار, 1.25, فركانسهاي, wincsc.cfg, pid, digiturk, استیشن, box, مادر, استارتراک, مجانی, آپگريد, w6, ترکست, کتاب, 4610ii, سوپرمکس, کنترل, کار, مخفی, تلفن, x5d, theme, راه, دوربین, بازی, ی, 1100, pelatinum, دریافت, تکنوست, showtime, انجمن, یاهو, file, چند, studio, افزاری, را, قانوني, data, ريسيور, اطلاعات, d, ملودی, ماهوارهاي, 2.7, track, سخت, مرکزی, هند, 358, emu, اينترنت, نت, 1, شده, سگا, mr, فايل, forum, plus, تعمير, ایکس, 1800, new, manna, lazer, شبكه, تخصصی, تعمیرات, تلويزيون, ساختن, server, افلاین, بازیهای, تنظیمات, اي, الکترونیک, سوپرمكس, همراه, اسكاي, power, biss, ليست, تراک, seca, گلدن, اريکسون, استانی, edition, full, 4630, dream, world, 1050, آپدیت, install, z1, اندازی, windows, remote, پرگرام, متاباكس, دریم, gboxplugin, fortecstar, افزارهاي, beausat, 4800, vision, to, مشکل, آفلاين, فعال, discovery, sonyericson, ترفندهای, الکترونیکی, 2.0.6, statistic, پکیج, 1150, مدیا, سریال, سیستم, یک, بازي, متابکس, 3, dvbviewer, 560, دی, اهنگ, softcams, in, id, srt4610ii, ii, ترفند, خارجی, بازکردن, scaner, how, sr-x50cu,premiumx,abc.mihanblog.com, nagravision, 60, sr, گوشي, turkey, مهدیان, اروپا, hotbird7, 3gp, zee, ايراني, patch, ایرج, autoroll, driver, سینمای, pc, هیومکس, موبايل, cwshare.cfg, net, ایران,abc, 4610, 2003, 8000, كرك, كارتهاي, 4.79, نوكيا, میکس, موبايلهاي, درايور, 120, 12360, 550d, 7.5, star2, 2100, plug, kworld, stbdownload, my, 3620, all, irdeto, تصویری, farsi, max, alt, 2007, list, استرانگ4620, converter, فروش, آموزشی, طریق, ilsat, sport, تعميرات, وارد, مورد, viwe, ultra, dvbskystar, ارسال, ما, اتصال, hd, مشاهده, theatre, 8, هواره, master, mtv, ثابت, هندی, animal, بدون, آپگریت, premiere, مولتي, بر, مقاله, بوت, ویژنها, داغ, سکای, nova, k3, کنیم, 6630, 130, freextv, آخرين, rar, سی, redlight, version, 1.3, پسورد, 3680, موسیقی, control, w3, premium, october, افزارskynet, روز, زبان, lock, pro, موتور, کابل, genuine, دستي, امولاتور, asp.net, آبگریت, 3000, s, sr-x1050, فارسي, مدارات, زنده, 1.2, s2emu1.27, کاناهای, va-fox, گردان, پلاس, veiw, 3200, ريموت, سرور, mytheater, 5600, چیست, ci, password, pour, ورزن, ترک, free, مقامی, 190d, adobe, ادیت, هما, sr-x190d, 2.2, حل, x, تغییر, spaice, رسيورهاي, بازیگران, -, 202, تل, satdw, راهنمای, اخرين, pocket, همه, مدلهای, gold, قطعات, هک, راهنمایی, caller, اسپارک, mobile, دیدن, lazer, كنترل, plugins, folder, ferecance, satkiosk, نسخه, xdream, serial, hivion, ارگ, planet, سافتكم, درایو, satupdater, graber, نسب, messenger, sr-x550d, چگونگی, سوپرليزر, finder, عكس, 4120, ورلد, forums, خبرهاي, a, dline, hivision, روزانه, عربی, tech, ht-9500, titanium, share, اکسز, ریموت, داود, مقايسه, korg, سیگنال, v-plug, sky1, yahoo, video, series, همت, divx, تراك, de, استارست150, مختلف, gif, ايران, استار2, 3100, ok, دار, کانل, update, کانالهاي, مانيتور, samsung, بلند, decoder, شماره, unlock, اريكسون, 1.5, b, key.bin, 4155, ip, canalsat, jsc, sanyosat, مستر, مشکلات, زیرنویس, phoenix, وب, متاباکس,برنا, cyfra, اهنگهای, 2000, satellite, مرتب, nero, viewer, ريزي, مونتاژ, محتوا, شرینگ, channels, fortec, dvd, 5, vb, اصلی, black, ht, شیرینگ, setup, مجاني, 750, گراف, keyloader, t, fsk, loader, 007c00, ابگرید, rom110.bin, سویس, hi-tech, عكسهاي, 650ci, stream, کتابهای, تصویر, كليپ,برنا, ویژیون, دستی, vbulletin, repair, مدیریت, nokia6280, 900, اپگريد, ترانه, وی, کیبورد, cinema, technisat, مشخصات, 150d, سرعت, فورتک, رمزهای, mpeg2, may, setting, zip, تله, privatespice, یغمایی, ace, همیشگی, wintv, فايندر, number, 3.33, شدن, s2emu1.26, slipknot, irandvb, scanner, skynet.sys.repair, کامپيوتري, دستگاه, dowload, 3.33.5, 888, ویستا, پریمیر, rai, هاست, سری, art,

امیدوارم استفاده لازم از این مطلب برده باشید.



ارسال شده در مورخه : دوشنبه هشتم بهمن 1386 ساعت 14:23 توسط محمد جهانشاهی | | ادامه مطلب

بهترین جایگزین BDE

آنهایی که تابحال با BDE  در دلفی کار کرده اند می دونند که BDE  از پارادکس برای فرمت جداول استفاده می کنند. الیته کار با BDE  بسیار راحت است و ابزارهایی که در بخش دیتا کنترل DATA control  برای آن در نظر گرفته شده است کار را بسیار راحت کرده است . ولی اگر کمی حرفه ای تر به مسئله نگاه کنید و بخواهید برنامه تحت شبکه بنویسید . می بینید که با BDE کار بسیار مشکل انجام می شود. خوب بنظر شما بهترین جایگزین BDE  چه می تواند باشد من تا بحال database engine های مختلفی رو تست کرده ام . اما به نظر من بهترین جایگزین BDE موتور دیتابیس DBISAM  می باشد . این دیتابیس بسیار سبک و راحت می باشد و بسیار شبیه به BDE است



از مهمترین قابلیت های آنها اینست که engine برنامه در داخل فایل exe  شما قرار می گیرد . یعنی برای اجرای یک برنامه که با bde نوشته روی کامپیوترهای دیگر حتما می دونید که باید BDE را روی آن سیستم هم نصب کنید که متاسفانه دیده شده بعضا چون به این مطلب واقف نیستند کل دلفی رو برروی سیستم دیگر نصب می کنند. ولی برای اجرای یک برنامه dbisam نیازی به این کار نیست و با کپی کردن برنامه بروی هر سیستمی برنامه اجرا می شود که در کمتر دیتابیسی ممکن است این مطلب وجود داشته باشد . دوم اینکه با dbisam شما می توانید برنامه تحت شبکه بنویسید .و از هر جایی داخل شبکه از برنامه استفاده کنید .

ارسال شده در مورخه : دوشنبه هشتم بهمن 1386 ساعت 13:42 توسط محمد جهانشاهی |

دلفی اس کیوال سرور - Delphi Sql server

جهت برقراری ارتباط دلفی با sql server حتما می دونید راه حل های متفاوتی در دلفی وجود دارد . و هر کدام بستگی به کارا ما دارد. چند نوع اس کیو ال سرور در دلفی قابلیت ارتباط دارند. از انواع آنها می توان microsoft sql server - interbase - mysql را نام برد. رایج ترین نحوه اتصال به sql server  از طریق ADo می باشد .  البته راه دیگر برای اتصال DBEXPRESS می باشد.خود در اینجا اشاره ای به ADO داریم و کامپوننت های آن را معرفی می کنیم :



از چپ به راست :

adoconnection : برای اتصال به اس کیو ال سرور

adocommand : برای اجرای یک دستور اس کیو ال بروی سرور

adodataset : برای دسترسی به جداول - ویوها - روال ها و یا اجرای یک پرس و جو کاملترین ابزار ado است که هر دو کار adotable , adoquery  را انجام می دهد.

adotable : برای دسترسی به یک جدول

adoquery : برای اجرای یک پرس و جو

adostoredproc :  برای فراخوانی یک روال بروی سرور بکار میرود.

RDSconnection : برای اتصال به یک لایه دیتابیس دیگر بکار میرود.

در حد اشاره مطالبی قید شد. در صورت هرگونه سوال در بخش نظرات اعلام نمایید.

ارسال شده در مورخه : دوشنبه هشتم بهمن 1386 ساعت 13:28 توسط محمد جهانشاهی |

راه‌اندازي يك سرور DHCP

اشاره :
يكي از ابتدايي‌ترين كارها در يك شبكه، اختصاص دادن آدرس IP به كلا‌ينت‌ها است. البته انواع مختلفي از سرورهاي DHCP اين كار را انجام مي‌دهند. با اين حال شما مي‌توانيد ويندوز 2003 سرور را به عنوان DHCP نيز تنظيم كنيد. در ادامه اين مقاله نحوه انجام اين كار را آموزش خواهيم داد.

ارسال شده در مورخه : یکشنبه هفتم بهمن 1386 ساعت 15:1 توسط محمد جهانشاهی | | ادامه مطلب

نگاهي فني به VPN

اشاره:
(VPN (Virtual Private Network يك شبكه خصوصي مجازي است كه ارتباطات كپسوله‌شده (Encapsulated)، رمزنگاري‌شده (Encrypted) و تصديق‌شده (Authenticated) را با استفاده از سيستم مسيريابي زيرساخت شبكه از طريق يك شبكه عمومي مانند اينترنت ايجاد و مديريت مي‌كند. اين ارتباط مي‌تواند بين دو سيستم عادي برقرار شده و يا براي ارتباط امن سرور يك سازمان با شعب آن در سراسر جهان به‌كار رود. VPN براي كاربران تجاري بيش از يك ضرورت و بلكه نعمتي است كه راهي مطمئن، امن و در عين حال ارزان براي دسترسي به فايل‌هايشان در شبكه محل كار خود (وقتي كه آن‌ها در مسافرت، خانه و يا در راه هستند) در اختيار مي‌گذارد. كاربران در حالت عادي براي تماس به‌صورت Remote (راه دور) با سرور نياز دارند كه به‌صورت مستقيم و توسط يك ارتباط DialUp به سرور RAS متصل شوند ، اما اين‌كار دو اشكال اساسي دارد ... لطفاً ادامه مقاله را بخوانيد.

ارسال شده در مورخه : یکشنبه هفتم بهمن 1386 ساعت 14:17 توسط محمد جهانشاهی | | ادامه مطلب

مادربرد های گرافیک آنبرد جدید

خوب تا چند روز دیگه این مادربرهای جدید هم به بازار خواهند آمند و جای قبلی ها رو خواهند گرفت . پیشرفت قابل توجهی که داشته اند این است که چیپ های گرافیک آنبرد از DX10 پشتیبانی می کنند و نتایج خوبی هم در تستها یا بنچمارکها بر جای گذاشته اند  ..... (ادامه مطلب)

ارسال شده در مورخه : پنجشنبه چهارم بهمن 1386 ساعت 9:1 توسط | | ادامه مطلب

چرا متن باز - open source

در متن قبل در مورد نرم افزار آزاد صحبت شد حال چرا نرم افزار آزاد و باز متن .....

ارسال شده در مورخه : چهارشنبه سوم بهمن 1386 ساعت 10:19 توسط | | ادامه مطلب

درباره سايت

امیدارم مطالب این سایت مورد توجه شما قرار بگیرد و مفید واقع شود . لطفا با نظرات خود ما را در جهت تکمیل سایت راهنمایی کنید.در ضمن به سوالات شما در صورت امکان پاسخ داده خواهدشد


لينک دوستان
قالب وبلاگ
ميزباني وب
آموزش شبکه
بیمه ایران نمایندگی حکیمی
بازیابی اطلاعات هارد دیسک
سایت تخصصی شبکه و هک
ُسرویس های اس ام اس چاپار
سایت آموزش مجازی کامپیوتر
برنامه نویسی و الکترونیک
آموزش دروس مهندسی نرم افزار
چاپار وبلاگي براي معرفي بهترين هاي اينترنت
بزرگترین مرجع لینکهای فارسی
بزرگترين مركز دانلود ايرانيان
ترفندهای موبایل و کامپیوتر
فهرست سایتهای ایرانی
بازي هاي روز دنيا
دنیای ضرب المثل انگلیسی
نرم افزار کامپیوتر و موبایل
صدور گواهینامه رانندگی بین المللی 20 ساله (استثنایی)


وضيعت ياهو

محمد جهانشاهي

حامد مرادي


آخرين مطالب ارسالي

اخبار
بازیابی اطلاعات و تعمیرات هارد دیسک Hard disk recovery
دلفی 2010 نسخه نهایی Embarcadero Delphi 2010 RTM v14.0.3513.24210 Lite v3.6
دلفی 7 ورژن جدید 7.3.3.0 delphi
نکات بسیار مفید در مورد دلفی 2010 - rad studio 2010
مطلب در مورد ریبون در ویژوال استودیو ribbon vs 2008 wpf
پاکت پی سی NVidia APX 2500 معرفی شد
بلوتوث 3.0 رسما معرفی شد
انتشار خبر ورود USB 3 با سرعتی 10 برابر بیشتر از نسل دوم!
37 نکته مفید جهت بهبود perfomance در صفحات وب
دلفی 2010 با کامپایلر 64 بیتی - delphi 2010
ویندوز ویستا سرویس پک 2- Vista sp2
تست سلامت هارد Hard Drive Inspector Pro v3.12.211
نصب جدید بلوتوث bluetooth 3
در مورد خرابی هارد چه می دانید ؟!
کامپوننت برای ارسال اس ام اس kylix sms activex
مجموعه مقالات تخصصی نرم افزار10
مجموعه مقالات تخصصی نرم افزار9
مجموعه مقالات تخصصی نرم افزار8
مجموعه مقالات تخصصی نرم افزار7
مجموعه مقالات تخصصی نرم افزار7
مجموعه مقالات تخصصی نرم افزار6
مجموعه مقالات تخصصی نرم افزار5
مجموعه مقالات تخصصی نرم افزار 4
مجموعه مقالات تخصصی نرم افزار3


 


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

ساعت

پشتيبان





Powered by WebGozar

http://www.tehranwebs.ir/ Irandnn!
RSS

صفحه اصلي | آرشيو مطالب | تماس با ما | RSS | قالب وبلاگ

قالب وبلاگ

free Template Blog

قالب وبلاگ رايگان

قالب بلاگفا