در مطلب Tablespace در اوراکل – پیش گفتار مفهوم Tablespace ها، گونه های متفاوت آن و دو Tablespace به نام SYSTEM و SYSAUX را آمورش دادیم که خودکار در زمان ایجاد پایگاه داده، ایجاد می شوند. برای ایجاد گونه های متفاوت Tablespace باید یکی از فرمان های CREATE TABLESPACE را برای Tablespace های همیشگی (Permanent) و CREATE TEMPORARY TABLESPACE را برای Tablespace های گذرا (Temporary)  و یا  CREATE UNDO TABLESPACE را برای Tablespace های UNDO به کار ببریم. فرمان های دیگر ALTER TABLESPACE و ALTER DATABASE هستند که آنها را برای تغییر دادن TABLESPACE به کار می بریم. همچنین برای اجرای این فرمان نیازمند داشتن مجوزهای هر یک از فرمان ها هستید.

اداره کردن Extent های Tablespace

مورد دیگری که در زمان ایجاد Tablespace باید در نظر گرفته شود، چگونگی اداره Extent ها است. هر Extent شامل مجموعه ای از Data Block ها یا همان بلاک های منطقی است که به صورت منطقی پیوسته هستند ولی ممکن است از نظر فیزیکی و قرار گیری بر روی دیسک، پیوسته و پشت سرهم نباشند. هر Data Block شامل چندین بلاک دیسک است و هر Data Block کوچکترین واحدی است که اوراکل از روی دیسک می خواند و یا بر روی دیسک می نویسد. بنابراین tablespace برای ذخیره داده های جدول یا ایندکس ها (Index) نیاز به دریافت یک extent دارد.

در این نوشته می خواهیم تنها اداره کردن محلی Extent ها و شیوه های AUTOINCREMENT و UNIFOR را آموزش دهیم. بنابراین شیوه DICTIONARY دیگر گفته نمی شود.

معماری اوراکل – ساختار منطقی اوراکل

در حالتی که Tablespace به صورت محلی (یا Locally) مدیریت می شود تکنیک Bitmap (نگاشت بیتی) به کار گرفته می شود تا به شیوه محلی و درون خود Tablespace اطلاعات سگمنت ها نگهداری شوند. اما در حالت DICTIONARY این داده ها از درون خود Tablespace به درون دیتا دیکشنری نگهداری می شوند. پیشنهاد می شود که Tablespace را به شیوه Locally ایجاد کنید تا بار کاری سنگینی را از روی دیتا دیکشنری ها بردارید. تمامی Tablespace ها مانند SYSTEM می توانند به صورت محلی اداره شوند.

  • در شیوه EXTENT MANAGEMENT DICTIONARY اطلاعات Extent ها درون دیتا دیکشنری و در جدول های درون اسیکن SYS نگهداری می شوند.
  • اسکیما SYS دارای جدول ها و نماهای (View) مهمی است، پس نباید فضای آن بی مورد مصرف شود.
  • در شیوه LOCALLY EXTENT MANAGEMENT اطلاعات Extent ها بوسیله شیوه Bitmap درون خود Tablespace نگهداری می شود.
  • کد زیر تنها بخشی از فرمان ایجاد Locally Tablespace نشان می دهد. همانطور که می بینید، پیش روی بخش EXTENT MANAGEMENT واژه LOCAL آمده است.

شیوه های اختصاص Tablespace

Locally و Dictionary هر دو چگونگی محل نگهداری اطلاعات مربوط به Extent ها را نشان می دهند. مورد دیگری که باید در زمان ایجاد Tablespace ها توجه شود، چگونگی اختصاص داده Extent های تازه به Tablespace است. دو رویکرد AUTOINCREMENT و UNIFORM در این زمینه وجود دارد. در AUTOINCREMENT همانطور که از نامش پیدا است، اختصاص Extent ها به صورت خودکار انجام می شود. به بیان دیگر اندازه Extent در زمان ایجاد Tablespace مشخص شده و سپس بوسیله خود سیستم (اوراکل) اداره می شود. به بیان دیگر بازرسی دستی نیاز نیست.

هرگاه که نیاز به Extent باشد، خود سیستم از فضای Data File های Tablespace در گام نخست Extent های ۶۴ کیلوبایتی را به Segment انتساب می دهد. اگر Segment بزرگ شود، پس Extent های بزرگتر از یک مگابایت تا ۶۴ مگابایت (توان های دو) را به سگمنت انتساب می دهد. کد زیر فرمان SQL را نشان می دهد که شیوه AUTOINCREMENT همراه با EXTENT MANAGEMENT LOCAL به کار گرفته شده است. در دستور زیر نخست Extent به اندازه ۵۰ مگابایت ایجاد می شود.

در حالت UNIFORM اندازه افزایش و انتساب Extent ها به شیوه دستی مشخص می شود. به بیان دیگر بوسیله UNIFORM در نیاز به Extent بیشتر، اندازه تمامی Extent های تازه یکسان خواهد بود. به طور نمونه در کد زیر چون شماره ۱۰ مگابایت پیش روی بخش SIZE پس از  UNIFORM نوشته شده است، پس در صورت نیاز به Extent بیشتر، همه Extent ها ۱۰ مگابایتی خواهند بود و همچنین اگر UNIFORM به تنهایی نوشته شود، پس پیش فرض، Extent های یک مگابایتی انتساب داده می شود. تفاوت UNIFORM با AUTOINCREMENT در همین است که اندازه Extent های اختصاص داده شده در UNIFOR همگی یکسان هستند.

بنابراین شما می توانید واژه UNIFORM را بدون SIZE و شماره اندازه پیش روی آن نیز بنویسید.

گام پایانی برای ایجاد Tablespace

در نوشته های بالا، روش اداره کردن Extent ها به شیوه LOCAL آموزش داده شد و تنها چیزی که مانده، تعیین Data File یا چندین Data File برای Tablespace است. Data File ها در مطلب های پیش رو آموزش داده ایم. Data File ها فایل های فیزیکی هستند که بر روی دیسک نگهدری شده و بلاک های دیسک را شامل می شوند. هر Tablespace دست کم باید دارای یک Data File باشد. در دستور CREATE TABLESPACE باشد پیش روی بخش DATAFILE، مسیر یک تا چندین Data File را مشخص کنید. اگر چندین Data File را می خواهید همزمان واگذار کتیذ، باید آنها را بوسیله ویرگول از یکدیگر جدا کنید.

در کدهای زیر بوسیله روش LOCAL و با شیوه های AUTOINCREMENT و UNIFOR چندین Tablespace با یک Data File را ایجاد کرده ایم. ایجاد Data File در نوشته زیر گفته شده است. برای ایجاد آنها روش های متفاوتی هست که یکی از آنها همین دستور CREATE TABLESPACE است. بنابراین زمانی که Tablespace را ایجاد می کنید، خود اوراکل Data File (ها) را در مسیرهای مشخص شده، به شیوه خودکار ایجاد می کند.

Data File اوراکل – ایجاد

  • در فرمان های یکم و دوم شیوه DICTIONARY به کار رفته است. همچنین می بینید که پیش روی DATAFILE مسیر فایل مشخص شده است.
  • برابر با فرمان یکم، اگر بخش EXTENT MANAGEMENT نوشته نشود، حالت پیش فرض DICTIONARY خواهد بود.
  • فرمان سوم به شویه LOCAL است، پس داده های اداره کردن EXTENT ها بوسیله Bitmap درون خود Tablespace نگهداری می شود. همچنین Extent آغازین برابر با ۵۰ مگابایت است، زیرا پیش روی بخش SIZE شماره 50M نوشته شده است.
  • در فرمان سوم اختصاص Extent های به شیوه AUTOINCREMENT است، پس اندازه Extent های بیشتر از ۶۴ کیلو بایت است و می تواند تا ۶۴ مگابایت نیز پیش برود.
  • فرمان چهارم نیز به شویه LOCAL است، پس داده های اداره کردن EXTENT ها بوسیله Bitmap درون خود Tablespace نگهداری می شود. همچنین Extent آغازین برابر با ۵۰ مگابایت است، زیرا پیش روی بخش SIZE شماره 50M نوشته شده است.
  • در فرمان چهارم اختصاص Extent های به شیوه UNIFORM است، پس اندازه Extent های بیشتر همیشه یک اندازه خواهد بود. در این فرمان چون شماره 1M پیش روی بخش SIZE است، پس اندازه Extent ها یک مگابایتی است. همچنین اگر شما SIZE  را ننویسد، اندازه پیش فرض یک مگابایت است.

توجه کنید که دستور CREATE TABLESPACE خودش خودکار همه فایل های نشان داده شده پیش روی بخش DATAFILE را ایجاد می کند و دستوری به نام CREATE DATAFILE درون اوراکل نیست که بخواهید با آن Data File ایجاد کنید. در مطلب Tablespace اوراکل – تغییر با ALTER TABLESPACE، زمانی که دستور ALTER TABLESPACE … ADD DATAFILE را اجرا می کنید، این دستور نیز فایل (ها) را ایجاد و به Tablespace می افزاید.