بدون*شك مي*توان گفت كه بانك*هاي اطلاعاتي اوراكل و SQL Server، از مهم*ترين بانك*هاي اطلاعاتي امروز به شمار ميآيند. اين سؤال كه كدام يك از اين دو از ديگري بهتر است،ممكن است فكر بسياري از برنامه*نويسان و شركت*هاي توليد كننده نرم*افزار رامشغول كرده باشد.



از طرفي مايكروسافت، به عنوان غول نرم*افزاري ادعا مي*كند كه SQL Server ازاوراكل* ساده*تر و بهتر است. اوراكل هم از سوي ديگر مي*گويد محصول او ازخيلي جهات بر SQL Server برتري دارد.


اين مطلب سعي دارد به سؤالات شما در مورد تفاوت*هاي فني اين دو بانكاطلاعاتي تا حدي جواب دهد. در ابتداي اين مقاله معماري اين دو بانكاطلاعاتي با هم مقايسه مي*گردد، سپس كامپوننت*هاي شبكه هر دو بانك اطلاعاتيبا يكديگر مقايسه مي*شوند.

در اين مطلب امكانات مرتبط با كارايي پايگاه*هاي اطلاعاتي* (Performance)،ابزار (Utility) و Replication در بانك*هاي اطلاعاتي بسيار بزرگ يا همان VLDB يا Very Large Data Bases و OLTP يا Online Transaction Processing مورد بررسي قرار خواهند گرفت و ابزارهاي جديد SQL Server 2005 كه در حقيقتسعي دارد با اوراكل رقابت كند، مورد بررسي قرار خواهند گرفت*.*

معماري بانك اطلاعاتي

در اوراكل هر ديتابيس شامل تمامي امكانات پايگاه رابطه Relational Database ،Instance (پروسه*هاي پايگاه داده*هاي اوراكل و بافرها، فايل*هاي تنظيميمانند config.ora و init.ora، لوگ*هاي بازگشت به حالت قبلي يا Redo Logs؛SYSTEM Teblespace و ديگر انتخاب*هاي دلخواه است.
در نسخه جديد SQLServer، ديتابيس در واقع به گروهي از اسكيما (Schema)هايپايگاه داده گفته مي*شود كه به صورت فيزيكي در فايل*ها ذخيره مي*شوند. ديتابيس*ها به دو صورت تعريف شده از طرف كاربر (user defined) و تعريف شدهاز طرف سيستم (system defined) تقسيم مي*شوند.

در SQL Server يك نمونه يا Instance مي*تواند چندين ديتابيس را پشتيبانينمايد و در هر كامپيوتر چندين Instance مي*تواند با هم كار كند.

وقتي SQL Server را راه*اندازي مي*كنيد، ديتابيس*هايي همچون MD يا Msdb database، Model Database (براي پشتيباني كردن Agentها) و Tempdb Database (پايگاه اطلاعات موقت مانند پايگاه موقت اوراكل OracleTemp Tablespace؛البته با اين تفاوت كه در SQL Server خود كاربران مي*توانند اين پايگاه*هارا درست كنند، ولي در اوراكل اين امكان وجود ندارد)، به صورت پيش*فرض ساختهمي*شوند.

در SQL Server براي اين*كه بتوانيم اطلاعات خود را به صورت فيزيكيغيرمتمركز (Distribute) نگه*داريم، هر ديتابيس مي*تواند از چندين Filegroup پشتيباني نمايد. با اين كار مي*توان به راحتي از اطلاعات كپي پشتيبانگرفت. همان*طور كه در شكل 1 مشاهده مي*كنيد، در SQL Server، ديتابيس*ها درواقع همان كار tabalespaceها در اوراكل را دارند.

شکل 1

اگربه شكل 1 نگاه كنيد، مي*بينيد كه در هر دو بانك* اطلاعاتي، كاتالوگ سيستموجود دارد. هر پايگاه اطلاعاتي يا ديتابيس در اوراكل يك سيستم كاتالوگمركزي يا ديكشنري داده **(Data Dictionary) را در قسمت SYSTEM Tablespace اجرا مي*كند، ولي در SQL Server 2005 هر ديتابيس سيستم كاتالوگ خود را درستمي*كند.

اين سيستم كاتالوگ اطلاعاتي همچون اشياي پايگاه داده (مانندTable ،View و Procedure)، اطلاعات كاربران و دسترسي*هاي آن*ها، Constraintsها، User-Defined data type و Snapshot definition را شامل مي*شود.

البته اطلاعاتي همچون اسامي ديتابيس*ها، اطلاعات سرور، مديريت پيغام*ها و Stored Proceduresهاي سيستم درMaster Database وجود دارند.

نكته اينجاست كه SQL Server 2005 ،objectهاي سيستم در اين Master Database قرار نمي*گيرند. اينآبجكت*ها در ديتابيس*هاي مخفي سيستم به نام resource database يا پايگاه اطلاعات منابع سيستم ذخيره مي*گردند.

در واقع* سيستم كاتالوگ*ها در SQL Server 2005 منابعي هستند براي استخراجاطلاعات ديتابيس*ها و اين كاتالوگ*ها را كاربران نيز مي*توانند مشاهدهكنند.

براي حصول اطمينان از كارايي و سلامت سرور در DMV، SQL Server 2005 يا Dynamic Management Views استفاده مي*شوند؛ درست شبيه اوراكل كه از viewهاي $ V براي كنترل كارايي استفاده مي كند.
اجزاي تنظيم كننده شبكه

شکل 2

شكل 2 ساختار اجزاي تنظيم كننده شبكه در اين بانك*هاي اطلاعاتي را نشانمي*دهد. در اوراكلكامپوننتي به نام Oracle Net Service وجود دارد كه عاملارتباطي سرور اوراكل با كلاينت*هاي آن است.

اوراكل اين كار را با استفاده از پروتوكل TNS يا Transparent Network Substare انجام مي*دهد، اما در SQL Server اين كار توسط پروتكل*هاي شبكهموجود در كلاينت و سرور انجام مي*گيرد.

البته در SQL Server 2005 فناوري جديدي به نام SNAC يا SQL Server Native Client، معرفي گرديده كه در واقع تركيبي است از ODBC و OLEDB در يك تابعكتابخانه*اي. SNAC توانايي پشتيباني TDS يا Tabular Data Stream و Net Lib را براي پروتكل*هاي گوناگون در SQL Server دارد.

ساختار فيزيكي و منظقي ذخيره اطلاعات

شكل 3 نگاهي مقايسه*اي دارد به دو بانك اطلاعاتي اوراكل و SQL Server ازلحاظ ساختار اطلاعاتي. همان طور كه در اين شكل مي*بينيد، در SQL Server اندازه صفحات (8kb، (page size است كه واحد پايه ورودي/ خروجي به شمارمي*رود.

هر صفحه فقط متعلق به يك آبجكت، مانند data ،index ،GAM و.. است. SQL Server براي افزايش كارايي اين صفحات آن*ها را در دسته*هاي هشت*تايي قرارمي*دهد كه به آن Extent مي*گوييم. اين Extentها مي*توانند به چند آبجكتمتفاوت تعلق داشته باشند.

شکل 3

هر Extent كه تمام صفحاتش آبجكت*هاي مانند هم داشته باشد Uniform ناميدهمي*شود و به Extentهايي كه آبجكت*هاي يكساني ندارند، Mixed مي*گويند.

SQL Server در ديتابيس*هاي خود از Filegroupها استفاده مي*كند تا كنترلفضاهاي فيزيكي جداول و ايندكس*ها را در اختيار كامل داشته باشد. اين Filegroupها از يك يا چند فايل تشكيل شده*اند و اطلاعات موجود در آنمي*تواند در تمام فايل*هاي آن Filegroup ذخيره شود.

با استفاده از Filegroup مي*توان جداول بزرگ را در چند فايل ذخيره نمود واز اين طريق كارايي ورودي/ خروجي را بالا برد، مي*توان عمليات كپي پشتيبان وبازآوري جداول را انجام داد و داده*هايي مانند تصويرو فايل*هاي متني بزرگرا در فايل*هاي جدا ذخيره نمود.

برخلاف SQL Server، بانك اطلاعات اوراكل از Tablespaceهايي تشكيل شده استكه خود از Data File تشكيل شده*اند. اين Data Fileها در واحدهايي به نام Block طبقه*بندي مي*شوند كه مدير بانك اطلاعاتي (DBA) مي*تواند اندازه آنرا وقتي كه در حال ساخت ديتابيس است تعيين كند. برخلاف SQL Server، دراوراكل وقتي يك شيء در Tablespace توليد مي*شود، كاربر مي*تواند فضاي آن رامشخص كند.

مقايسه SQL Server 2005 و Oracle 10g

اگر چه SQL Server 2000 يكي از قوي*ترين بانك*هاي اطلاعاتي است و خيلي ازشركت*ها و سازمان*هاي بزرگ امروزه از آن به عنوان پايگاه داده*هاي خوداستفاده مي*كنند، چند محدوديت هم دارد. يكي از محدوديت*هاي SQL Server 2000 در طريقه قفل كردن يا Locking Strategy است.

در MS SQL 2000 مانند اوراكل مي*توان دسترسي همزمان به پايگاه را محدود كردو آن را به اصطلاح قفل نمود. ولي در MS SQL 2000 امكان Deadlock خيليزياد است؛ مخصوصاً در CTF يا Correct Transactional Flows.

از طرف ديگر، اعمال تغيير در بانك*هاياطلاعاتيبه صورت آنلاين يكي ديگراز محدوديت*هاي آن است. البته با استفاده از DBCC INDEXDEFRAG در SQL Server 2000 مي*توان قسمتي از ايندكس*ها را به صورت آنلاين تغيير داد، ولينه به صورت كامل.

(البتهاين مشكل در SQL Server 2005 تا حدي حل شده است). در اوراكل ازنسخه 1/8 تا به حال، امكان تغيير و جابه*جايي جداول و ايندكس*ها وجود دارد؛بدون اين*كه به exclusive lock نياز داشته باشيم. البته ناگفته نماند كهنسخه*هاي 2/9 اوراكل در اين قسمت داراي اشكالات و باگ*هايي نيز بوده*اند،ولي اين اشكالات در نسخه آخر اواركل برطرف شده است.

در ادامه، ساختار و امكانات هر دو بانك*اطلاعاتي Oracle 10g و SQL Server 2005 با يكديگر مقايسه مي*گردند.
مديريت بانك اطلاعاتي*

SQL Server 2005 مانند ديگر محصولات مايكروسافت قسمت مديريت ساده و شكيليدارد كه مي*توان با آن به راحتي كار كرد و با استفاده از خط دستور در SQLCMD، ابزار مديريتي DAC يا* Dedicated Administrator Connection را اجرانمود. همچنين مي*توان از قابليت Policyها براي كاربران و صاحبان بانك*هاياطلاعاتي استفاده نمود.

گذشته از پيچيدگي*هاي موجود در اوراكل، قابليت*هاي مديريتي آن بسيار بيشتراز MS SQL است. اوراكل سيستم رمزدهي بسيار قدرتمندي دارد كه از نسخه 7 بهبعد همراه آن بوده است. در اوراكل مي*توان امكان ارتباط با User و سپس با Schema خاص را به راحتي امكانپذير نمود.

مثلاًفرض كنيد كه با كاربر Sys2 به اوراكل متصل هستيد و مي*خواهيد روي DB2 Schema كار كنيد. كافي است دستور زير را وارد كنيد:
;ALTER SESSION SET CURRENT_SCHEMA=DB2

سيستم LOCKING

يكي از قابليت*هايي كه در نسخه جديد SQL Server به آن اضافه شده است،قابليت SI يا Snapshot Isolation است كه در حقيقت قابليت نسخه*برداري ازرديف (row)هاي جداول است. با اين كار در موقع بروزآوري جداول، امكان انتخابهمزمان اطلاعات آن جدول نيز وجود دارد.

در اوراكل چيزي شبيه اين مكانيزم وجود دارد كه به آن Oracle Flashback Query مي*گويند. البته بين اين دو مكانيزم تفاوت*هايي نيز وجود دارد: اوراكل از Undo Segment براي برگشت به ركورد قبلي استفاده مي*كند. در صورتيكه SQL Server 2005 از TempDB استفاده مي*كند.

MetaData در اوراكل مانند جداول مديريت مي*گردد. در نتيجه در زمان اجرايدرخواست*ها چند DDL يا Data Definition language مي*توانند به صورت همزمانبه فعاليت مشغول باشند، ولي در SQL Server 2005، فعاليت DLLها مستقيماً رويجداول انجام مي*پذيرد.

در اوراكل عمليات Locking در DB Block انجام مي*پذيرد، ولي در SQL Server اين كار در هر رديف جدول انجام مي*شود. البته مايكروسافت ادعا مي*كند كهاين كار باعث افزايش سرعت و كارايي جداول مي*گردد، ولي وقتي سرعت و كاراييآن را با اواركل مقايسه مي*كنيم، مي*بينيم كه هر دواز كارايي يكسانيبرخوردارند.
تغيير ساختاريآنلاين

همان*طور كه قبلاً بحث شد، قبل از نسخه جديد SQL Server 2005 تنها از طريق DBCC Indexdefrag مي*توانستيم مثلاً ايندكس را عوض كنيم (البته بايدازExclusive lock استفاده مي*كرديم)، ولي اكنون اين مشكل حل شده است ومي*توان همزمان با بازسازي چند *DDL را نيز اجرا نمود.

در اوراكل مي*توان حتي تمام ساختار جداول و ايندكس*ها را بدون Exclusive lock تغييرداد. البته براي اتمام عمليات بايد از Momentary lock استفادهشود.

Partitioning و Clustering

نسخه جديد SQL Server به تازگي قابليت جداسازي فيزيكي جداول و ايندكس*ها راپيدا كرده است. در اوراكل قابليت Partitioning به چند صورت امكانپذير است و DBA مي*تواند بر اساس range ،list و hash اين كار را انجام دهد.

حتي مي*توان اين كار را در دو رده انجام داد. مثلاً مي*توانيم جدولي را بهدو قسمت براساس list جداسازي كنيم و هر كدام از قسمت*ها را بر اساس hash دوباره جداسازي نماييم. اين قابليت اوراكل را مي*توان در جداولي كهركوردهاي زيادي دارند، به كار برد. البته اين قابليت در SQL Server 2005 وجود ندارد، ولي مي*توان آن را شبيه*سازي نمود.

SQL Server 2005 در Partitioning از قابليتي مانند اوراكل برخوردار نيست. با اين حال راه*حل ساده*تري را ارائه مي*كند. در SQL Server 2005 مي*توانبا استفاده از UDF يا User Defined function اين كار را انجام داد.

در مورد Clustering ،SQL Server 2005 پشتيباني خوبي دارد، ولي طراحي ومديريت اين كار سخت است و كارايي زيادي نيز ندارد. از طرف ديگر اواركل RAC/GRID را در نسخه 10g ارائه كرده است كه مي*توان از آن به عنوان امتيازيمسلم در مقابل SQL Server 2005 نام برد. اوراكل همچنين از سيستمي جديد بهنام ASM يا Automatic Storage Management استفاده مي*كند كه در Clustering مورد استفاده قرار مي*گيرد.
ايندكس و Tuning

ساختار مرتب*سازي و ايندكس در SQL Server 2005 هنوز بر اساس BTree است و درمقابل indexing قدرتمند در اوراكل ساختاري نسبتاً دارد. اوراكل هم از BTree استفاده مي*كند، ولي از سيستم indexing به نام Bitmap نيز هم استفادهمي*كند كه در جست*وجوي ستون*هايي با انتخاب كم بسيار خوب عمل مي*كند.

اضافه بر اين اوراكل از Oracle key based cluster نيز در ايندكس استفادهمي*كند كه كارايي بانك*اطلاعاتي در انتخاب ركوردهايي انتخابي از چند جدولمرتبط با هم با ستون*هاي مشابه را بالا مي*برد.

در اواكل و SQL Server هر دو مي*توان براي Functionهايي كه روي ستون*هايجدول است، ايندكس درست كرد و در هر دوي آن*ها مي*توان MV يا Materialized view تهيه نمود. MVها در حقيقت viewهاي آماده هستند كه مي*توان از آن بهجاي متصل كردن چند جدول استفاده كرد.

SQL Server 2005 در مقايسه بااوراكل 10g، در aggregation و functionهامحدوديت*هايي دارد. مثلاً در index view نمي*توانيم از Distinct ،NOT و ... استفاده كنيم و امكان مثلاً Sum كردن نيست.

كپي پشتيبان و بازيابي اطلاعات

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

در حالي كه سرور در حال كار كردن است. اوراكل نيزساختاري شبيه اين را بااستفاده از Tablespaceها انجام مي*دهد. البته در Tablespaceهاي اوراكلنمي*توان اطلاعات قبلي را در Tablespace بازيابي نمود و از آن*جايي كه درهر Tablespace يك Metadata وجود دارد، اين Tablespaceها نمي*توانند كاملباشند.

البته اوراكل داراي ابزار بازيابي اطلاعات كاملي است و مي*تواند با كمك گرفتن از Redo logها اين كار را آسان كند.
اوراكل با استفاده از logical dump*هايي كه مي*سازد، مي*تواند مشكلي كهباعث نياز به بازيابي مي*شود راشناسايي كند. البته SQL Server همابزارهايي مانند DBCC PAGE و DBCC LOG دارد كه مانند ابزارهاي اوراكل عملمي*كند.
انتقال و* ورود اطلاعات (Export and Import)

يكي از امكانات جديد Oracle 10 g براي انتقال يا صادر كردن اطلاعات به data pump معروف است. data pump ساختاري binary دارد. اوراكل اين كار را توسطدو گزينه كه براي صادر و دو گزينه براي وارد كردن اطلاعات دارد، انجام ميدهد. اين دو گزينه exp/data و imp/data هستند.

اضافه بر اين، در اوراكل ابزار sqlldr نيز وجود دارد كه اختصاصاً براي import كردن اطلاعات متني به كار مي*رود. از طرف ديگر SQL Server2005 دارايدو گزينه براي export و import است؛ به نام*هاي bcp و Bcp .DTS مي*توانداطلاعات را (به صورت متني) import يا export كند و حتي مي*تواند اطلاعاترا به فرمتي ذخيره كند كه بانك*هاي اطلاعاتي ديگر نيز بتوانند از آناستفاده كنند.

DTS نيز يكي از پر سرعت*ترين ابزارهاي انتقال اطلاعات در SQL Server است كهدر مقايسه با اوراكل بسيار سريع*تر و كار با آن آسان*تر مي*باشد. اوراكلنيز در نسخه جديد خود از ابزار *WisdomForce FastReader استفاده مي*كند كهمي*تواند با سرعت زياد كار export و import را انجام دهد و اطلاعات را بافرمت متني آماده سازد. از اين ابزار مي*توان براي انتقال اطلاعات بيناوراكل و بانك*هاي اطلاعاتي ديگر مانند MS SQL ،2DB ،Sybase استفاده نمود.
امكانات موجود براي برنامه*نويس*ها
يكي از امكاناتي كه اوراكل در اختيار برنامه*نويسان قرار مي*دهد، امكاناستفاده از Exception Handling است كه توسط PL/SQL قابل دسترسي است. در SQL Server 2005 نيز اين امكان توسط Transcat-SQL مهيا شده است.

در مبحث Queuing ،SQL Server 2005 ابزاري به نام Server Broker دارد كهمي*تواند امكان استفاده از Queing را براي برنامه*نويسان فراهم سازد، امادر اوراكل ابزاري قوي به نام Oracle Advanced Queuing وجود دارد كه كار Queing را به صورت كامل انجام مي*دهد.

SQL Server 2005 مي*تواند كمك بيشتري به برنامه*نويسان بكند؛ زيرا از NET. استفاده مي*كند، ولي بر خلاف آن، هسته اوراكل از جاوا درست شده است ومستقيماً فقط مي*تواند توسط PL/SQL اجرا شود. در نتيجه در SQL Server 2005 مي*توانيم به صورت مستقل از دستورات NET. استفاده كنيم.

از طرف ديگر از آنجا كه جاوا هسته اوراكل را تشكيل مي*دهد، نگهداريآبجكت*هاي جاواي درون اوراكل درست مانند نگهداري يك سرور جاوا مي*باشد، ولي SQL Server 2005 تنها در برخي قسمت*ها مانند اشكال*يابي از NET trigger. استفاده مي*كند و حجم سنگيني ندارد.
امكانات ويژه SQL Server 2005

- *SQL Server 2005 :Replication ابزار Replication بسيار قدرتمندي دارد كهمي*تواند از اوراكل به SQL Server يا بلعكس Replication انجام دهد.

- Notification: در SQL Server 2005 سرويس Notification يكي از سرويس*هايياست كه مي*توان با آن در *Alertهايي مانند Stock Market استفاده نمود.

- Reporting Services: يكي از امتيازات SQL Server 2005 در مقايسه بااوراكل، داشتن سرويس گزارش*هاي داخلي است كه با استفاده از آن مي*توانانواع گزارش*ها را استخراج نمود. البته اوراكل هم داراي Oracle IAS است كهكار گزارش*گيري را حتي قوي*تر از SQL Server انجام مي*دهد، ولي مانند SQL Server 2005 در داخل بانك اطلاعاتي نيست و به صورت خارجي عمل مي*كند. همچنين خريد آن نيز هزينه زيادي خواهد داشت.

- Identity: در اوراكل نمي*توان به صورت خودكار كليد اصلي يا Primary key را تعريف كرد. در صورتي در SQL Server2005 اين امكان وجود دارد. البتهاوراكل داراي Sequence است، ولي نگهداري اين Sequenceها توسط مدير سيستمكار آساني نيست.
امكانات ويژه *Oracle 10g

- Auditing: در اوراكل اين كار با استفاده از پارامتر جديد audit_trail=db_extended, init.ora انجام مي*پذيرد كه مي*توان از تماميجست*وجوها به همراه مقادير ورودي هر يك از آن*ها اطلاعات ذخيره كرد. اينكار در SQL Server2005 تنها با استفاده از Trace امكانپذير است. آن همنمي*تواند مقادير Bind شده اطلاعات را نشان دهد و استفاده از آن نيزمي*تواند كارايي سرور را تا حد زيادي پايين بياورد.

- Logminer: در* اوراكل ابزاري به نام Logminer وجود دارد كه مي*تواندتاريخچه تمامي DML يا DDLهاي كل پايگاه اطلاعاتي را به ما بدهد. SQL Server2005 اين ابزار را ندارد، ولي مي*توان از Lumigent Log Explorer برايمشاهده برخي از اين تاريخچه استفاده كرد.

- Flashback Query: اين امكان در نسخه جديد Oracle 10g عرضه گرديد و با كمك آن مي*توان اطلاعات از دست رفته را بازيابي كرد.

- Rollback Statistics: در اوراكل اگر عملياتي سنگين در وسط كار انجامنپذيرد، مي*توان آن را Rollback كرد. Rollback statistics مي تواند به شمابگويد چه زماني طول خواهد كشيد كه Rollback انجام شود و عمليات پايانپذيرد. كافي است جست*وجوي زير را به كار ببريد:
V$FAST_START_TRANSACTIONS
اين قابليت در SQL Server2005 وجود ندارد.

- AWR يا Automatic Workload Repository تصور كنيد كه بانك اطلاعاتي شمابسيار حجيم است، ترافيك زيادي دارد و جوابگويي آن به كلا*ينت*ها كُند شدهاست. با استفاده از AWR در Oracle 10g مي*توانيم مشكل را بررسي كنيم وتشخيص دهيم چه مشكلي در سيستم وجود دارد. اوراكل اين كار را با استفاده ازدرست كردن Viewهاي زير انجام مي*دهد.
v$sysmetric_history for v$sysmetric
v$active_session_history for v$active_session
v$waitclassmetric_history for v$waitclassmetric
v$session_wait_history for v$session_wait
v$servicemetric_history for v$servicemetric

- پشتيباني از OO يا Oracle :Object Oriented قابليت*هاي شيءگرا (object oriented) دارد. براي همين، اين بانك اطلاعاتي را مي*توان بانك اطلاعاتيرابطه*اي شيءگرا نيز ناميد. با استفاده از اين قابليت، برنامه*نويسانمي*توانند Class و Objectهاي برنامه شيء**گراي خود را مستقيماً به جداولبانك اطلاعاتي Map كنند.
منبع: [برای نمایش لینک باید عضو شوید. ]