بدونشك ميتوان گفت كه بانكهاي اطلاعاتي اوراكل و 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 كنند.
منابع
www.microsoft.com/sql/editions/enterprise/default.mspx
http://blogs.ittoolbox.com/visualbasic/operating/archives/oracle-vs-sql-server-whats-different-11054
www.oracle.qassociates.co.uk/oracle-10g-features.htm