سرخط خبرها

اوراکل

اوراکلاوراكل پر استفاده ترين پايگاه داده ها در سراسر دنيا است. تقريبا مي توان گفت كه اوراكل روي هر نوع كامپيوتر از كامپيوتر شخصي و مكينتاش گرفته تا ميني كامپيوتر ها وكامپيوتر هاي بزرگ (mainframe) كار مي كند.

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

مقدمه

تغيير محيط اوراكل

شاخص ها

ايجاد شاخص

اعمال يكتايي

ايجاد شاخص يكتا

ايجاد شاخص نقش بيتي Bitmap

زمان ايجاد شاخص

زماني كه شاخص ناديده گرفته مي شود

تنوع در ستون هاي شاخص شده

تعداد شاخص هايي كه روي جدول به كار مي روند

قرار دادن شاخص در پايگاه داده ها

بازسازي شاخص

فضاهاي جدولي وساختار پايگاه داده ها

فرمان create tablespace

منابع

اوراكل يك نرم افزار مديريت پايگاه هاي دادهاي رابطه اي (جدولي) است. در طبقه بندي سيستم هاي رابطه اي، اوراكل را جزو سيستم هاي رابطه اي كامل و هم رديف سيستم هايي چون supra, Informix مي دانند. اما آنچه كه اين محصول را از نوع مشابه آن متمايز مي كند سهولت يادگيري و استفاده، سهولت نصب و راه اندازي، امنيت مثال زدني، سرعت قابل قبول و امكانات و ابزارهاي فراوان آن است. ترديدي نيست كه سيستم هاي رابطه اي و از جمله اوراكل، به جهت طبيعت كندشان، در زمينه هايي چون كاربردهاي بلادرنگ، قابل استفاده نيستند، اما از سويي نيز توانمندي ‌آنها در ذخيره ي كارا، بازيابي سريع و نيز مديريت دقيق داده هاي يك سازمان، در قالبي ساخت يافته و سهل، غير قابل انكار است.

اين تحقيق به زير مجموعه اي از كارهاي (يا توابع در دسترس) مدير پايگاه داده ها (DBA) مي پردازد كه توسط اكثر كاربران اوراكل استفاده مي شوند- كارهايي كه محدود به DBA  نيستند. شاخص هاي روي جدول ها، خوشه ها،مولدهاي دنباله (sequence generator) و تخصيص فضا براي جدول ها و شاخص ها از اين دسته هستند. اين تحقيق چگونگي ساختاردهي پايگاه هاي داده اي اوراكل به صورت داخلي را نشان مي دهد، كه به درك روش عملكرد واقعي بسياري از ويژگي هاي آن و چگونگي ارتباط بين آنها كمك مي كند. فقط گزينه هاي محدودي از فرمان هاي create index create cluster , create ,tablespac در اين تحقيق ارائه خواهند شد. گزينه هاي كامل در مراجع الفبايي اوراكل ارائه شده اند.

تغيير محيط اوراكل
 

شاخص ها

شاخص (index) (يا نمايه) مفهوم ساده اي است. شاخص نوعا فهرستي از كلمات كليدي است همراه با محل قرار گيري اطلاعات مربوط به يك موضوع

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

Select from HOCKEY

TEAM

WON

LOST

TIED

Quebec

6

23

4

Detroit

10

18

5

Vancouver

11

16

6

NY Islanders

11

20

4

washington

13

15

4

Pittsburgh

13

15

4

Calgary

13

16

3

St. Louis

14

11

9

Winnipeg

14

2

6

NY Rangers

14

13

5

New Jersey

15

14

5

Edmonton

15

15

3

Philadelphia

16

11

7

Los Angeles

16

14

4

Hartfoyd

16

14

3

Toronto

16

17

1

Boston

16

18

0

Minnesota

17

13

3

Chicago

17

15

2

Montreal

19

13

2

20

13

4

Buffalo

21

9

4

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

Select Team, won, lost, Tied

From HOCKEY

Where won= 20

اگر جدول HOCKEY فاقد شاخصي روي ستون won باشد، اوراكل مجبور خواهد بود  كه همه ي سطرهاي جدول را يك به يك بخواند تا نيمي را پيدا كند كه با شرط موجود در عبارت where در پرس و جوي مذكور مطابقت داشته باشد.

مي توانيد براي سرعت بخشيدن به اين فراروند، شاخصي روي ستون won ايجاد كنيد. اگر بعدا همان پرس و جوي قبلي را اجرا كنيد، اوراكل ابتدا به شاخص، كه به ترتيب عددي مرتب شده، نگاه مي كند، بدين ترتيب خيلي سريع تيمي را پيدا مي كند كه 20 پيروزي دارد (اوراكل تمامي مدخل ها را نمي خواند و مستقيما به نزديكي تيمي مراجعه مي كند كه تعداد پيروزي هاي آن به عدد مورد نظر نزديك تر باشد. اين عمل بسيار مشابه با عملي است كه هنگام جستجو در شاخص تحقيق مي شود ) سپس مدخل شاخص، موقعيت دقيق سطر مربوط به تيم Montreal را در جدول (و روي ديسك) به اوراكل مي دهد.

با دانستن اين موضوع، مشخص مي شود كه ايجاد شاخص روي يك ستون مهم (ستوني كه در عبارت where ذكرخواهد شد) چگونه سرعت اوراكل را در پاسخگويي به پرس و جوها بالا مي برد. همچنين ايجاد شاخص روي ستون هاي مرتبط (به وسيله ي عبارت where) سرعت اجراي پرس و جوهايي را كه روي دو جدول پيوند خورده انجام مي شوند، افزايش مي دهد. اينها مباني شاخص بندي هستند مطالب باقي مانده در اين تحقيق برخي ويژگيهاي ديگر و موارد مرتبط با شاخص بندي را نشان مي دهند كه در سرعت انجام كارها تاثير دارند.

ايجاد شاخص

فرمان زير اساسي ترين شيوه ي ايجاد شاخص است.

Create (bitmap) [unique] index on table (colum, [colum]…)

 index بايد يك اسم منحصر به فرد باشد و از قواعد نام گذاري ستون ها در اوراكل پيروي كند. Table اسم جدولي است كه شاخص روي آن ساخته خواهد شد و column نام ستون مورد نظر است شاخص هاي نقش بيتي (bitmap) كه از اوراكل 3/7 به بعد در دسترس هستند اين امكان را فراهم مي آورند كه شاخص هاي سودمندي روي ستون هاي حاوي مقادير محدود مجزا (distinct) ايجاد شوند بخش ايجاد شاخص نقش بيتي را در ادامه ي اين تحقيق ببينيد. مي توانيد با نوشتن نام چند ستون به صورت متوالي كه با علامت كاما (،) از هم جدا شده اند، يك شاخص منفرد روي ستون هاي متعدد ايجاد كنيد. جدول WORKERSKILL را به ياد آوريد. كليد اصلي اين جدول، تركيبي از نام (Name) و مهارت (skill) هر كارگر است. پرس و جوي زير جدول نشان داده شده در بالاي شكل 1-19 را توليد مي كند:

Select ROWID, Name skill, Ability

From WORKERSKILL

در اين مثال RowID نيز انتخاب شده است. اين مقدار، موقعيت داخلي هر سطر (مانند سر شماري صفحه در كتاب) را مشخص مي كند كه اوراكل هنگام ذخيره ي سطرهاي داده  در جدول از آن استفاده مي كند حال شاخص روي كليد اصلي ايجاد مي شود:

Create index workerskill name skill on worker (name,. skill)

اين روش نام گذاري شاخص به وسيله تركيب نام جدول و ستون، به طول حداكثر 30 كاراكتر، يك روش عملي و سودمند است. اصلا نيازي به دانستن نام شاخص در پرس وجوها يا هر فرمان ديگر SQL نداريد اوراكل هر گاه به آن نياز پيدا كند، به صورت خود كار آن را به كار خواهد برد. همچنين هر گاه شاخص هاي ايجاد شده را فهرست (يا حذف) مي كنيد، فورا با مشاهده ي نام آنها، كار آنها را متوجه خواهيد شد (نام شاخص ها در ديدي از فرهنگ داده ها با نام USER- INDEXES ذخيره مي شوند و مي توانيد روي آن ديد پرس و جو نيز انجام دهيد) شاخص هاي اوراكل شبيه جدول دوم در شكل 1-19 هستند

WORKERSKILL

  شكل 1-19: جدول WORKERSKILL و شاخص آن

 وقتي پرس و جويي مشابه با پرس و جوي زير را اجرا مي كنيد.

Select Neme, skill, Ability

From WORKERSKILL

Where Name= JOHN PEARSON

And skill= WOODCUTTER

اوراكل Name و Skill را در شاخص يافته RowID (يعني E  AAAsYABQAAAAAAGzAA ) را برداشته و سپس اطلاعات موجود در سطر مربوط به اين RowID را از جدول WORKERSKILL مي خواند. شاخص در قالبي است كه به عنوان درخت دودويي (B-Tree) توصيف مي شود و بدين معني است كه داراي ساختاري شبيه به يك درخت با گره ها و برگ ها است و هر گاه سطر جديدي در جدول درج مي شود، به صورت خود كار ساختار خود را بازسازي مي كند توصيف طرز كار درخت هاي دودويي از حدود اين تحقيق خارج است ولي مي توانيد مطالب مربوط به آنها را در بسياري از متون كامپيوتري بيابيد.

چند بخش باقي مانده برخي از موارد مربوط به نحوه ي استفاده از شاخص ها را در بر مي گيرند.

اعمال يكتايي

مي گوييم مجموعه اي از جدول ها در شكل نرمال سوم هستند اگر  تمامي ستون هاي هر سطر ازجدول فقط به كليد اصلي وابسته باشند. در جدول WORKERSKILL كليد اصلي، تركيبي از Name و Skill است. در ساير جدول ها كليد اصلي ممكن است شماره ي شناسايي كارمند، شماره ي شناسايي مشتري، شماره ي حساب يا در بانك ها، تركيبي از شماره ي شعبه و شماره ي حساب باشد.

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

ايجاد شاخص يكتا

براي ايجاد شاخص كه يكتايي كليد اصلي را (خواه كليد اصلي تك ستوني باشد يا چند ستوني) تضمين كنيد، مانند آنچه كه روي جدول WORKERSKILL وجود دارد از قيد كليد اصي روي ستون هاي كليد در جمله ي create table استفاده كنيد. همچنين مي توانيد از جمله create uniqu index استفاده كنيد ولي اگر از قبل موارد تكراري وجود داشته باشند اين جمله شكست خواهد خورد. اگر از قيد كليد اصلي استفاده مي كنيد هيچ گاه موارد تكراري نخواهيد داشت. در صورتي كه جمله يcreate uniue index با موفقيت به انجام برسد، درج (يا بهنگام سازي) هر سطري كه باعث ايجاد كليد تكرراي شود شكست خورده و پيغام خطاي زير را نتيجه خواهد كرد.

ERROR at line 1: ORA-0001: duplicate value in index

ممكن است شرايطي پيش بيايد كه بخواهيد يكتايي را روي چيز ديگري غير از كليد اصلي اعمال كنيد، در اين صورت قيد يكتايي انجام اين كار را براي شما ميسر مي سازد. به عنوان مثال، اگر در جدولي براي هر شخصي شماره ي تامين اجتماعي را نيز اضافه كنيد و كليد اصلي يك دنباله باشد ممكن است بخواهيد با كمك قيد يكتايي، از يكتايي ستون social security نيز مطئمن شويد.

به عنوان مثال جدول STOCK را در نظر بگيريد. ستون company، كليد اصلي آن است اگر چه symbol كليد اصلي نيست اما ستون symbol نيز بايد يكتا باشد. براي اعمال يكتايي روي هر دوي اين ستون ها، هنگام ايجاد جدول به صورت نشان داده شده در زير، دو قيد جداگانه ايجاد كنيد.

Create table STOCK

Company (                     VARCHAR2 (20) primary key

Symbol                          VARCHAR2 (6) unique,

Industry                         VARCHAR2 (15)

Closeyesterdey               NUMBER (6,2)

Closetoday                     NUMBER (6,2)

Volume                          NUMBER

اوراكل هنگام ايجاد قيدهاي كليد اصلي و يكتايي براي جدول SROCK به صورت خودكار شاخص هاي يكتايي را براي اعمال اين قيدها ايجاد خواهد كرد.

ايجاد شاخص نقش بيتي (Bitmap)

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

شاخص هاي نقش بيني وقتي مناسب هستند كه ستون هاي استفاده شده در شرط هاي محدود كننده ي پرس و جو معيار انتخاب نيستند. به عنوان مثال اگر تعداد مقادير متمايز Lodging در يك جدول بسيار بزرگ WORKER بسيار اندك باشد، ممكن است حتي با وجود متداول بودن به كار گيري Lodging در عبارت هاي where، مايل به ايجاد شاخص B-tree روي اين ستون نباشيد. ولي Lodging مي تواند از مزيت شاخص نقش بيتي سود ببرد.

به صورت داخلي شاخص نقش بيتي مقادير مجزاي ستون ها را به هر ركورد مي نگارد (map) مي كند. در مورد اين مثال فرض كنيد در يك جدول بسيار بزرگ WORKER فقط دو مقدار Lodging (MATTS, WEITBROCHT) وجود دارند. از آنجا كه دو مقدار lodging وجود دارد، براي شاخص نقش بيتي مربوط به lodging نيز دو مدخل نقش بيتي مجزا وجود خواهد داشت. اگر در پنج سطر اول جدول، مقدار lodging برابر MATTS و در پنج سطر بعدي مقدار lodging برابر WEITBROCHT باشد، در آن صورت مدخل هاي نقش بيتي مربوط به lodging شبيه چيزي خواهند بود كه در زير نشان داده شده است.

Lodging bitmaps

MATTS:<1 1 1 1 1 0 0 0 0 0

WEITBROCHT:< 0 0 0 0 0   1 1 1 1

در اينجا هر عدد نماينده ي يك سطردر جدول WORKER است. از آنجا كه ده سطر در نظر گرفته شده اند، ده مقدار نقش بيتي نشان داده شده اند. وقتي نقش بيتي مربوط به lodging خوانده مي شود، پنج ركورد اول، داراي مقداري برابر MATTS (مقادير 1) و پنج ركورد بعدي فاقد اين مقدار خواهند بود (مقادير 0) اگر بيش از دو مقدار ممكن براي اين ستون مي داشتيد در اين صورت براي هر مقدار ممكن يك مدخل نقش بيتي مجزا وجود مي داشت.

بهينه ساز اوراكل حين پردازش پرس و جو قادر است. به صورت پويا مدخل هاي شاخص نقش بيتي را به شناسه هاي سطر (RowID) تبديل كند. اين قابليت تبديل به بهينه ساز امكان مي دهد كه هم براي ستون هايي با مقادير متمايز متعدد از طريق شاخص هاي B- tree)) و هم براي ستون هايي با مقادير متمايز اندك (از طريق شاخص هاي  نقش بيتي) از شاخص استفاده كند.

براي ايجاد شاخص نقش بيتي همان گونه كه در مثال زير نشان داده شده از عبارت bitmap در create index استفاده كنيد بايد در نام شاخص، وضعيت آن را به عنوان شاخص نقش بيتي مشخص كنيد تا تشخيص آن در طول عمليات تنظيم، آسان باشد.

Create bitmap index WORKERSBITMAP- LODGING

On WORKER (Lodging)

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

زمان ايجاد شاخص

شاخص ها بيشترين فايده را در جدول هاي بزرگتر و روي ستون هايي دارند كه احتمالا در عبارت هاي where ظاهر مي شوند يا در تساوي هاي ساده، مانند مورد زير:

Where Name = JOHN PEARSON.

And skill= WOODCUTTER

با در پيوند ها به صورت زير:

Where WORKER. Lodging=LODGUNG, Lodging

همچنين براي ستون هاي شاخص شده اي كه در عبارت where ذكر مي شوند، زمان بازيابي سريع تر خواهد بود البته به جز آن دسته از عبارت Where كه در آنها IS NULL, IS NOT NULL روي ستون شاخص شده به كار رفته اند. در صورتي كه عبارت where وجود نداشته باشد از هيچ شاخصي استفاده نمي شود. با اين كه order by مي تواند سبب استفاده از شاخص ها شود، فعلا نه distinct از شاخص ها استفاده مي كند و نه group by

زماني كه شاخص ناديده گرفته مي شود

اوراكل بايد بداند كه با ستون ساده اي كار مي كند كه مي تواند شاخص براي آن بيابد. اگر ستون شاخص شده اي در يك تابع مانند SUBSTR يا 11 تغيير كند، اوراكل از شاخص استفاده نخواهد كرد. هم MIN و هم MAX در صورتي كه به تنهايي با يك ستون به كار روند سبب استفاده از شاخص خواهند شد.

تنوع در ستون هاي شاخص شده

شاخص هاي سنتي (يعني B-tree) روي ستون هايي بيشترين سود را دارند كه تنوع قابل ملاحظه اي در داده هاي آنها وجود دارد. به عنوان مثال ستوني با مقدار Y يا N كه مشخص مي كند آيا يك شركت خاص، جزو مشتريان فعلي هست يا خير، براي شاخص سنتي، انتخاب خوبي نخواهد بود و عملا مي تواند سرعت اجراي پرس و جو را كم كند. ستوني حاوي شماره تلفن انتخاب خوبي خواهد بود. ستون كد منطقه اي، ممكن است انتخابي كاملا مرزي باشد.

وقتي كليد اصلي، بيش از يك ستون را در بر مي گيرد، بهتر است در بيان قيد كليد اصلي، ستون داراي بيشترين تنوع در اول قرار داده شود .اگر ستون ها داراي تنوع نسبتا يكسان باشند ستوني را اول قرار دهيد كه احتمال دستيبابي به آن بيشتر است.

بهتر است جدول هاي كوچك شاخص نشده باقي بمانند مگر آن كه اعمال يكتايي روي كليد اصلي مد نظر باشد. منظور از جدول كوچك، جدولي است كه كمتر از 30 سطح دارد ممكن است در يك برنامه ي كاربردي، جدولي با 100 سطر يا بيشتر نيز كوچك قلمداد شود. براي تعداد سطرهاي بيشتر از اين، شاخص زدن تقريبا هميشه سودمند خواهد بود.

از طرف ديگر براي ستون هايي كه مقادير بسيار كمي دارند شاخص هاي نقش بيتي يك روش ايجاد شاخص بسيار مناسب خواهند بود. شاخص هاي نقش بيتي معمولا براي ستون (نشانك) (flag) با مقادير محدودي چون Yو N استفاده مي شوند. شاخص هاي نقش بيتي مخصوصا هنگامي موثر هستند كه چندين شاخص نقش بيتي در يك پرس و جو استفاده شده باشد، بهينه ساز مي تواند با ارزيابي سريع ضوابطي كه براي آنها شاخص نقش بيتي وجود دارد سطرهايي را مشخص كند كه همه ي ضوابط خواسته شده را دارند.

تعداد شاخص هايي كه روي جدول به كار مي روند

در هر شاخص مي توانيد تا 16 ستون از يك جدول (يا مقداري حداكثر درحدود 1000 تا 2000 بايت در هر شاخص، بسته به سيستم عامل موجود) را شاخص بندي كنيد. شاخص بندي روي ستون هاي خيلي زياد، بر سرعت درج سطرهاي جديد تاثير مي گذارد: هر وقت يك عمل درج انجام مي شود بايد براي هر شاخص نيز يك مدخل جديد ايجاد شود. اگر جدول شما عمدتا براي پرس و جوها به كار خواهد رفت، تنها هزينه اي كه شاخص زدن روي حداكثر تعداد ستون ممكن (كه داراي مقادير متنوع بوده و البته در عبارت هاي where استفاده خواهند شد) در بر خواهد داشت، استفاده از مقداري فضاي ديسك بيشتر خواهد بود. معمولا ايجاد شاخص از هزينه ي مربوط به انجام كار و فضاي ديسك با ارزش تر است.

ستون هايي كه هيچ مقدار (NULL) هستند در شاخص ها، به جز شاخص هاي خوشه اي ظاهر نخواهند شد. مثلا اگر ستون Noon را در جدول COMFORT، نشان داده شده در زير، شاخص بندي كرده باشيد:

Select * from COMFORT

CITY

SAMPLEDAT

NOON

MIDNIGHT

PRECIPITATION

SAN FRANCISCO

21-MAR-93

62.5

42.3

.5

SAN FRANCISCO

22-JUR-93

51.1

71.9

.1

SAN FRANCISCO

23-SEP-93

61.5

.1

SAN FRANCISCO

22-DEC-93

52.6

39.8

2.3

KEENE

21-MAR-93

39.9

-1.2

4.4

KEENE

22-JUN-93

66.7

66.7

1.3

KEENE

23-SEP-93

82.6

82.6

KEENE

22-DEC-93

-7.2

-1.2

3.9

براي تمامي سطرها به جز سطر مربوط به San Franicisco 23-SEP-93 يك مدخل در شاخص وجود خواهد داشت. زيرا مقدار Noon در اين سطر NULL است.

شاخص هايي كه روي بيش از يك ستون ايجاد شده اند در صورتي كه مقدار هر يك از ستون ها، NULL نباشد يك مدخل خواهند داشت. اگر مقدار تمامي ستون هاي يك سطر NULL باشد، براي آن سطر هيچ مدخلي در شاخص ظاهر نخواهد شد.

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

Select Name , Commission

From COMMTSSION

Where commission> o

سريع تر اجرا شود، زيرا فروشندگاني كه كارمزد ندارند در شاخص ايجاد شده روي ستون commission ظاهر نخواهند شد.

قرار دادن شاخص در پايگاه داده ها

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

براي تعيين فضاي جدولي جهت قرار دادن شاخص به دنبال جمله ي index كلمه ي tablespace و نام فضاي جدولي نوشته مي شود كه در مثال زير نشان داده شده است

Create index workerskill_name _skill on

WORKER(Name, skill)

                   Tablespace GBTALBOT

GBTALBOT اسمي است كه به يك فضاي جدولي كه قبلا توسط مدير پايگاه داده ها ايجاد شده، داده شده است، استفاده از گزينه ي tablespace در جمله ي create indx معمولا فقط در پايگاه هاي داده اي بزرگي لازم است كه براي آنها بهينه سازي فضا يا استفاده ي تنك (sparse) از آن اساسي باشد.اگر فكر مي كنيد كه ممكن است استفاده از آن لازم باشد، با مدير پايگاه  داده هاي خود مشورت كنيد.

بازسازي شاخص

اوراكل قابليت بازسازي سريع شاخص را فراهم كرده و اجازه مي دهد تا شاخصي را بدون حذف شاخص موجود از نو ايجاد كنيد. به جاي استفاده از جدول اصلي به عنوان منبع داده ها، شاخص موجود فعلي به عنوان منبع داده ها براي شاخص جديد استفاده مي شود. در زمان بازسازي شاخص مي توانيد پارامترهاي tablespace , storage آن را تغيير دهيد.

در مثال زير شاخص WORKER- PK  از طريق عبارت rebuid بازسازي مي شود. پارامترهاي ذخيره سازي آن براي استفاده از يك گستره ي آغازين به اندازه ي 10 مگابايت و گستره هاي بعدي به اندازه ي 5 مگابايت در فضاي جدولي INDX-2 تغييرداده مي شوند.

Alter index WORKER_PK rebuid

Storgae (initial 10M next 5M pctincreaseo)

Tablespace INDX_2

نكته

هنگام بازسازي شاخص WORKER- PK بايد فضاي كافي براي وجود همزمان هر دو شاخص قديمي و جديد وجود داشته باشد. پس از آن كه شاخص جديد ايجاد شد شاخص قديمي حذف و فضاي اشغال شده توسط آن آزاد خواهد شد.

وقتي شاخص را بر اساس ستون هايي ايجاد مي كنيد كه قبلا شاخص خورده اند، اوراكل مي تواند از شاخص هاي موجود به عنوان منابع داده براي شاخص جديد استفاده كند به عنوان مثال اگر يك شاخص دو ستوني براي (loding , Name) ايجاد كنيد، در صورتي كه بعدا قصد ايجاد شاخص روي ستون Name را داشته باشيد، اوراكل از شاخص موجود به عنوان منبع داده براي شاخص جديد استفاده خواهد كرد. لذا در صورتي كه شاخص ها را به ترتيبي ايجاد كنيد كه قادر به استفاده از اين ويژگي باشند كارايي فرمان هاي cerate index بهبود خواهد يافت.

فضاهاي جدولي وساختار پايگاه داده ها

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

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

هر جدول يك منطقه اي واحد از فضاي ديسك موسوم به قطعه (segment) را دارد كه در فضاي جدولي براي آن كنار گذاشته شده است هر قطعه نيز يك منطقه اي اوليه از فضاي ديسك دارد كه گستره ي آغازين (initial extent) ناميده شده و در فضاي جدولي براي آن كنار گذاشته شده است. وقتي قطعه ي مذكور، اين فضا را كاملا استفاده كرد گستره ي بعدي يعني منطقه ي واحد ديگري از فضاي ديسك براي آن كنار گذاشته مي شود. و قتي اين منطقه نيز كاملا استفاده شد، باز هم گسترهي بعدي كنار گذاشته مي شود اين فراروند تا زماني كه تمام فضاي جدولي پر شود براي هر يك از جدول ها ادامه مي يابد. در آن موقع كسي بايد يك فايل جديد به فضاي جدولي اضافه كند يا فايل هاي فضاي جدولي را گسترش دهد تا امكان رشد بيشتر براي جدول ها فراهم شود.

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

وي سرانجام اين قواره را كاملا پر مي كند . فضاي جدولي او پر شده است سپس مقداري زمين خالي در انتهاي ديگر بلوك خريده، دور آن را حصار كشيده و آن را (مزرعه ي دو) نام گذاري مي كند. حال فضاي جدولي او وسيع تر است . اگر چه قواره هاي زمين (يعني فايل ها) به صورت فيزيكي به هم متصل نيستند هنوز مالكيت هر دوي آنها با تالبوت است فضاي جدولي هنوز (جي. بي تالبوت) و شامل دو قواره اي است (مزرعه ي يك ) و (مزرعه ي دو) اكنون او مي تواند رديف هاي بيشتري از ذرت، لوبيا و هيچ در قواره اي دوم كشت كند. و به همين شكل،مصرف گسترده هاي ديگر ادامه مي يابد.

هر پايگاه داده ها شامل يك فضاي جدولي سيستم نيز هست. اين فضا همان ساختمان شهرداري بلوك است. جايي كه مدارك مالكيت زمين ها و نشاني ها نگهداري مي شوند. اين فضا شامل (فرهنگ داده ها) اسامي و موقعيت قرار گيري تمامي فضاهاي جدولي، جدول ها، شاخص ها و خوشه هاي مربوط به اين پايگاه داده ها است.

 اوراکل

ساختار، پايگاه داده هاي اوراكل به صورت بلوكي از شهر

شكل نشان مي دهد كه يك پايگاه داده ها با مجموعه اي معمولي از فضاهاي جدولي، جدول ها، شاخص ها، خوشه ها و گستره ها به چه شكل است. پايگاه داده ها توسط مدير پايگاه داده هاي سيستم ايجاد ونام گذاري مي شود و معمولا همين شخص فضاهاي جدولي را آماده كرده واجازه ي استفاده از آنها را به كاربران مي دهد. در اين پايگاه داده ها كه TALBOT ناميده شده، فضاهاي جدولي آماده شده GEORGE, SYSTEM, JONES, ADAH ناميده شده اند.

درون فضاي جدولي، جدول ها، شاخص ها و خوشه ها قرار گرفته اند. هر جدول با يك گستره ي آغازين كه به آن اختصاص يافته و يك گستره ي بعدي آغاز به كار مي كند هر گاه جداول از گستره ي فعلي بيرون بزند اندازه داده شده تعيين كننده ي ميزان فضايي است كه بايد به جدول اضافه شود.

 اوراکل

ساختار پايگاه داده هاي اوراكل كه به طور معمول توصيف مي شود (پايگاه داده هاTALBOT:)

در اين شكل همه ي جدول هاي WORKER, WEATHER, COMFORT به خارج از گستره ي آغازين خود رشد كرده و فايل آغازين فضاي جدولي يعني HOME. ONE را كاملا مصرف كرده اند. COMFORT به دو گسترده ي اضافي خود واقع در فايل دوم يعني HOME. TWO رشد يافته است هر دو جدول WORKER, WEATHER نيز يك گسترده ي اضافي در فايل دوم دارند. پس از آن كه استفاده از فايل دوم لازم شد، دقيقا به همان صورت كه خوشه اي براي جدول هاي HOCKEY ايجاد شد شاخصي روي جدول WORKER ايجاد شد.

فرمان create tablespace

فرمان create tablespace اين امكان را فراهم مي آورد كه يك يا چند فايل فورا به فضاي جدولي اختصاص يابند. همچنين مي توان در اين فرمان فضاي پيش فرضي را مشخص كرده كه جدول هاي ايجاد شده بدون عبارت صريح مربوط به ذخيره سازي در فرمان create table  از آن استفاده كنند.

قالب اصلي فرمان cerate tablespace بدين صورت است:

Create tablespace TALBOT datafile ‘HOME. ONE’ size 1000k

Default storage (initial 25k next 10k

                   Mincrease 1 maxextents 100

                   Pctincrease

permanent

نكته

مي توان فضاهاي جدولي را از طريق فرمان alter tablespace به صورت فقط خواندني (READ ONLY) تعيين كرد. Alter tablespace را در مراجع الفبايي ببينيد.

نكته

كلمه ي كليدي permanent در فرمان create tablespace به اوراكل مي گويد كه شما اشياء پايدار (مانند جدول ها) را در اين فضاي جدولي ذخيره خواهيد كرد در صورت استفاده از فضاي جدولي فقط براي قطعه هاي موقت مي توان كلمه كليدي temporary را به جاي آن به كار برد. مقدار پيش فرض، permanent است.

فايل آغازيني كه به اين فضاي جدولي اختصاص مي يابد و اندازه ي آن همچنين به بايت است نه بلوك، در فرمان ذكر مي شوند. تعداد بايت ها يك عدد صحيح است و مي توان به دنبال آن k (براي ضرب عدد مذكور در 1024، يا تقريب يك هزار ) يا M (براي ضرب عدد مذكور در 1048576، يا تقريبا يك ميليون) قرار دارد. در صورتي كه ذخيره سازي در جمله create table مشخص نشده باشد، محل ذخيره سازي كه يك جدول براي خود خواهد گرفت با عبارت ذخيره سازي پيش فرض مشخص مي شود. در اينجا اندازه گسترده ي پيش فرض آغازين، 25 كيلو بايت (25 K bytes) (و نه 25 بلوك) و اندازه ي گستره ي(افزوده شده ي ) بعدي، 10 كيلوبايت (10K bytes) خواهد بود.

Minextents به شما اجازه مي دهد كه هنگام ايجاد جدول ها، گستره هاي بيشتري غير از اولين گستره را كنار بگذاريد اين گستره ها لزوما با گستره ي آغازين يا با يكديگر پيوسته (به صورت فيزيكي مجاور) نخواهند بود اما دست كم فضا نگه داشته (رزرو) خواهد شد.

Maxextents حد مجاز گستره هاي اضافي است از اوراكل 3/7 به بعد مي توانيد آن را به صورت maxextents UNLIMITED (نامحدود) تعيين كنيد كه در اين صورت هيچ محدوديتي در مورد تعداد گستره هاي مجاز براي آن جدول يا شاخص وجود نخواهد داشت.

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

مقادير پيش فرض براي پارامتر ذخيره سازي به سيستم عامل بستگي دارد. مقادير حداقل و حداكثر براي هر يك از اين گزينه ها در مراجع الفبايي اوراكل تحت عناوين create table و (ذخيره سازي) در دسترس هستند. اين گزينه ها را مي توان با فرمان alter tablespace تغيير داد. فرمان create table براي جدول LEDGER به صورت زير است.

LEDGER(

Create table

DATE

Action Date

VARCHAR2(8)

Action

VARCHAR2(30)

Item

NUMBER

Quantity

VARCHAR2(10)

Quantity Type

NUMBER

Rate

NUMBER(9,2)

Amount

VARCHAR2(25)

Person

(

TALBOT

Tablespace

منابع:

–  مفاهيم مبنايي و مديريت بانك اطلاعاتي oracle 8 مولف: جهاندار رضايي انستيتوايز ايران 1378

–  مرجع كامل اوراكل 8 نوشته جورج كوچ، كوين لوني ترجمه: جمشيد تقي پور، امير فرخ قنبرپور موسسه انتشارات بهينه 1380

–  كتاب آموزش oracle 8 مولف كارون كالو مترجم فرهاد قلي زاده،نشر علوم 1380

–  مرجع كامل بانك اطلاعاتي اوراكل در سيستمهاي ويندوز مولف علي محبوبي نشر علوم 1382

به این مطلب امتیاز دهید
نت های پیانو نت های ویولن نت های سنتور نت های گیتار

درباره ی vahid ezati

دوست دارم دارم تا تمام چیزی را که می دانم در اختیار بازدید کنندگان وب سایت قرار دهم پیشنهادات و انتقادات شما بنده را خوشحال می کند

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قالب وردپرس