اوراکل پر استفاده ترین پایگاه داده ها در سراسر دنیا است.
تقریبا می توان گفت که اوراکل روی هر نوع کامپیوتر از کامپیوتر شخصی و مکینتاش گرفته تا مینی کامپیوتر ها وکامپیوتر های بزرگ (mainframe) کار می کند.
اوراکل تقریبا روی تمام ماشین ها به یک شکل واحد عمل می کند، به طوری که وقتی کار کردن با آن را روی یک ماشین آموختید می توانید روی هر ماشین دیگری نیز از آن استفاده کنید این واقعیت باعث شده که اوراکل کاربران و ایجاد کنندگان بسیاری داشته و از سویی نیز دانش ومهارت اوراکل افراد بسیار قابل حمل باشد.
اوراکل یک نرم افزار مدیریت پایگاه های دادهای رابطه ای (جدولی) است.
در طبقه بندی سیستم های رابطه ای، اوراکل را جزو سیستم های رابطه ای کامل و هم ردیف سیستم هایی چون supra, Informix می دانند.
اما آنچه که این محصول را از نوع مشابه آن متمایز می کند سهولت یادگیری و استفاده، سهولت نصب و راه اندازی، امنیت مثال زدنی، سرعت قابل قبول و امکانات و ابزارهای فراوان آن است.
تردیدی نیست که سیستم های رابطه ای و از جمله اوراکل، به جهت طبیعت کندشان، در زمینه هایی چون کاربردهای بلادرنگ، قابل استفاده نیستند، اما از سویی نیز توانمندی آنها در ذخیره ی کارا، بازیابی سریع و نیز مدیریت دقیق داده های یک سازمان، در قالبی ساخت یافته و سهل، غیر قابل انکار است.
این تحقیق به زیر مجموعه ای از کارهای (یا توابع در دسترس) مدیر پایگاه داده ها (DBA) می پردازد که توسط اکثر کاربران اوراکل استفاده می شوند- کارهایی که محدود به DBA نیستند.
شاخص های روی جدول ها، خوشه ها،مولدهای دنباله (sequence generator) و تخصیص فضا برای جدول ها و شاخص ها از این دسته هستند.
این تحقیق چگونگی ساختاردهی پایگاه های داده ای اوراکل به صورت داخلی را نشان می دهد، که به درک روش عملکرد واقعی بسیاری از ویژگی های آن و چگونگی ارتباط بین آنها کمک می کند.
فقط گزینه های محدودی از فرمان های create index create cluster , create ,tablespac در این تحقیق ارائه خواهند شد.
گزینه های کامل در مراجع الفبایی اوراکل ارائه شده اند.
تغییر محیط اوراکل
شاخص ها
شاخص (index) (یا نمایه) مفهوم ساده ای است.
شاخص نوعا فهرستی از کلمات کلیدی است همراه با محل قرار گیری اطلاعات مربوط به یک موضوع
اگر چه شاخص ها لزوما برای اجرای اوراکل ضروری نیستند، اما باعث تسریع انجام امور می شوند.
به عنوان مثال اگر بخواهید اطلاعات در مورد شاخص ها را در این تحقیق با خواندن مطالب از ابتدا تا زمان مواجهه با صفحه ی شامل آن اطلاعات بیابید این کار به کندی و با اتلاف وقت انجام خواهد شد.
ولی چون شاخص موجود در انتهای این تحقیق به ترتیب حروف الفبا مرتب شده است.
(بدون خواندن تمامی مدخل ها) سریعا می توانید نقطه ی مناسب یعنی کلمه (شاخص) را در آن پیدا کنید.
مشخص است که این روش سریع تر از مطالعه کل تحقیق به نتیجه می رسد.
همین اصول در مورد شاخص ها در اوراکل نیز صادق هستند.
جدول HOCKEY را در نظر بگیرید.
Select from HOCKEY از میان جدول های معدودی که در عمل استفاده خواهید کرد، تعداد اندکی به کوچکی جدول 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 (, []…) 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 هستند شکل 1-19: جدول WORKERSKILL و شاخص آن وقتی پرس و جویی مشابه با پرس و جوی زیر را اجرا می کنید.
Select Neme, skill, Ability From WORKERSKILL Where Name= 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 : WEITBROCHT: در اینجا هر عدد نماینده ی یک سطردر جدول WORKER است.
از آنجا که ده سطر در نظر گرفته شده اند، ده مقدار نقش بیتی نشان داده شده اند.
وقتی نقش بیتی مربوط به lodging خوانده می شود، پنج رکورد اول، دارای مقداری برابر MATTS (مقادیر 1) و پنج رکورد بعدی فاقد این مقدار خواهند بود (مقادیر 0) اگر بیش از دو مقدار ممکن برای این ستون می داشتید در این صورت برای هر مقدار ممکن یک مدخل نقش بیتی مجزا وجود می داشت.
بهینه ساز اوراکل حین پردازش پرس و جو قادر است.
به صورت پویا مدخل های شاخص نقش بیتی را به شناسه های سطر (RowID) تبدیل کند.
این قابلیت تبدیل به بهینه ساز امکان می دهد که هم برای ستون هایی با مقادیر متمایز متعدد از طریق شاخص های B- tree)) و هم برای ستون هایی با مقادیر متمایز اندک (از طریق شاخص های نقش بیتی) از شاخص استفاده کند.
برای ایجاد شاخص نقش بیتی همان گونه که در مثال زیر نشان داده شده از عبارت bitmap در create index استفاده کنید باید در نام شاخص، وضعیت آن را به عنوان شاخص نقش بیتی مشخص کنید تا تشخیص آن در طول عملیات تنظیم، آسان باشد.
Create bitmap index WORKERSBITMAP- LODGING On WORKER (Lodging) در صورت تصمیم به استفاده از شاخص های نقش بیتی، باید مزیت بهبود کارایی پرس و جوها را با هزینه کارایی انجام فرمان های مربوط به دستکاری داده ها بسنجید.
هر چه تعداد شاخص های نقش بیتی موجود روی یک جدول بیشتر باشد هزینه ی هر تراکنش بالاتر خواهد بود.
نباید شاخص های نقش بیتی را روی ستونی ایجاد کنید که مکررا مقادیر جدیدی به آن اضافه می شوند.
بعد از هر عمل افزودن مقدار جدید ستون lodging باید نقش بیتی جدیدی نیز برای آن مقدار جدید lodging ایجاد شود.
زمان ایجاد شاخص شاخص ها بیشترین فایده را در جدول های بزرگتر و روی ستون هایی دارند که احتمالا در عبارت های where ظاهر می شوند یا در تساوی های ساده، مانند مورد زیر: Where Name = .
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 برای تمامی سطرها به جز سطر مربوط به 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) 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 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) خواهد بود.