Tablespace بزرگترین واحد منطقی تقسیم بندی اطلاعات در پایگاه داده اوراکل می باشدکه از دید منطقی شامل یک یا چند سگمنت و از لحاظ فیزیکی نیز دارای یک یا چند دیتافایل می باشد .
همانطور که در مقاله قبلی گفته شد ، Tablespace ، رابط بین دید منطقی و دید فیزیکی در اوراکل می باشد که در آن سگمنت ها ( در دید منطقی ) و دیتافایل ها ( در دید فیزیکی ) دارای یک رابطه ی چند به چند می باشند به طوری که هر سگمنت می تواند در چندین دیتافایل ذخیره شود و همچنین یک دیتافایل می تواند شامل چندین سگمنت باشد اما نکته حائز اهمیت این است که هر سگمنت یا هر دیتافایل فقط می توانند در یک tablespace قرار بگیرند.
انواع tablespace
1.دائمی : از این tablespace برای نگهداری اشیاء دائمی بانک اطلاعاتی مثل جداول و ایندکس ها و … استفاده می شود
2.موقت : برای نگهداری موقت داده های بانک اطلاعاتی در حین عملیاتی مثل مرتب سازی داده ها از این tablespace استفاده می شود
3.Undo: از این tablespace برای نگهداری داده های بازگشتی( مانند داده هایی که مورد تغییر قرار گرفته اند ولی هنوز commit نشده اند) استفاده می شود.
System و sysaux
System tablespace اولین tablespace ای است که در حین ایجاد بانک اطلاعاتی اوراکل ایجاد می شود و در آن اطلاعات data dictionary قرار می گیرد. وجود این tablespace برای بانک اطلاعاتی الزامی است و با حذف دیتافایلهای آن، اوراکل دچار مشکل می شود
Sysaux tablespace نیز یک tablespace کمکی برای system tablespace می باشد و درآن متادیتا های مورد نیاز ، آمارهایی برای performance بهتر بانک و همچنین داده هایی جهت استفاده ابزار های داخلی اوراکل ذخیره می شوند
ایجاد tablespace
SQL> create [{ smallfile | bigfile }] [{ undo | temporary }] tablespace tablespace_name
Datafile ‘ location&datafile_name ‘ size number { K | M | G | T } [ reuse ]
[ autoextend on [ next number { K | M | G | T } ] [ maxsize { number { K | M | G | T } | unlimited } ] ]
[ blocksize { 2K | 4K | 8K | 16K | 32K }]
[Default [ compress | nocompress ] storage (
[ initial number { K | M } ]
[Next number {K | M}]
[Minextent number]
[Maxextent { number | unlimited}]
[Pctincrease number]
[Optimal { number {K | M} | null}]
[buffer_pool [default | keep | recycle}]
) ]
[Online | offline [{normal | temporary | immediate | for recovery}]];
توضیحاتی در مورد عبارات بالا :
استفاده از مقادیر داخل کروشه [] ، اختیاری است و از بین مقادیر داخل آکولاد {} نیز می توان یک مقدار را انتخاب کرد همینطور مقادیری که در زیر آنها خط کشیده شده است ، مقدار پیش فرض می باشند .
Smallfile و bigfileه: tablespace های از نوع bigfile فقط شامل یک دیتافایل هستند و اندازه آنها می تواند از 8 تا 128 ترابایت باشد اما tablespace های smallfile می توانند شامل چندین datafile باشند و حداکثر اندازه آنها بر اساس تنظیمات پیش فرض، 32 گیگابایت می باشد.
Reuse: با استفاده از این پارامتر ، میتوان دیتافایلی ایجاد کرد که جایگزین دیتافایل همنام و از پیش ساخته شده در آن مسیر شود
Autoextend: با استفاده از این گزینه ، اوراکل در مواقع مورد نیاز ، حجم datafile ایجاد شده را ، به صورت خودکار و به اندازه ی تعیین شده در پارامتر next ، افزایش می دهد به طوری که حجم آن از مقدار مشخص شده توسط پارامتر maxsize تجاوز نکند . زمانی که بخواهیم هیچ محدودیتی از نظر اندازه برای افزایش مقدار datafile در نظر نگیریم از گزینه maxsize unlimited استفاده می کنیم
گزینه autoextend به طور پیش فرض غیر فعال است و با فعال کردن این پارامتر بدون تغیین گزینه های next و maxsize، مقدار DB_BLOCK_SIZE برای گزینه next و مقدار unlimited برای maxsize در نظر گرفته می شود.
Blocksize: این پارامتر اندازه سایز data block را مشخص می کند که بصورت پیش فرض 8k در نظر گرفته می شود
Compress: از این پارامتر جهت کاهش حجم یا حذف داده های تکراری موجود در tablespace استفاده می شود
Storage: برای مدیریت اندازه extent ها و مشخصات اولیه و میزان رشد حجم یک tablespace ، از این گزینه استفاده می شود
به طوریکه :
Initial : مقدار اندازه اولین extent ایجاد شده در یک tablespace را تعیین می کند
Next : اندازه extent دوم نیر توسط این پارامتر تعیین می شود
Minextent : میزان حداقل extent هایی است که موقع ایجاد یک object در tablespace مورد نظر به آن تخصیص داده می شود
Maxextent : حداکثر تعداد extent هایی که یک object می تواند داشته باشد را تعیین می کند
Pctincrease : این پارامتر اندازه extent سوم به بعد را تعیین می کند و عددی بر حسب درصد می باشد که نشانگر این است که extent جدید باید به اندازه ی آن عدد و برحسب درصد، بزرگتر از extent دوم باشد . اگر مقدار این پارامتر صفر در نظر گرفته شود یعنی همه ی extent های اضافه شده ی بعدی برابر با extent دوم باشد . مقدار پیش فرض این پارامتر 50 است .
Optimal: این پارامتر مقدار rollback segment ها را مشخص می کند و اگر مقدار آن null باشد به این معنی می باشد که اندازه rollback segment ها هیچگاه کوچک نخواهد شد
Buffer_pool : این پارامتر از سه نوع زیر تشکیل شده است :
1.Keep buffer pool : داده هایی که از آنها بیشتر استفاده می شود و قرار است بیشتر در حافظه بمانند، در این قسمت از بافر قرار می گیرند.
2.Recycle buffer pool : برای داده هایی که به ندرت مورد نیاز واقع می شوند و قرار نیست برای مدت طولانی در بافر قرار بگیرند.
3.Default buffer pool : بصورت پیش فرض داده ها در این نوع بافر قرار می گیرند.
حذف tablespace
SQL> DROP TABLESPACE نام
[Including contents [and datafiles]]
[Cascade constraints];
نکاتی در مورد حذف tablespace
1.اگر از گزینه including contents استفاده شود ، tablespace با محتویات و object های داخل آن پاک می شود و در صورت عدم استفاده از این پارامتر ، در حالی که tablespace دارای حداقل یک object باشد ، فرآیند حذف tablespace، با خطا روبرو می شود
2.اگر از گزینه and datafiles استفاده کنیم ، علاوه بر حذف tablespace ،datafile های متعلق به آن نیز به صورت فیزیکی از روی دیسک حذف می شود و در صورت استفاده نکردن از این پارامتر ، اطلاعات داخل دیتافایل ها پاک می شود ولی فضای فیزیکی آن به دیسک بر نمی گردد
3.در صورت استفاده از پارامتر cascade ، اشیاء مرتبطی در یکtablespace دیگر قرار دارند و با جداول موجود در tablespace فوق در ارتباط هستند ، را حذف می کند .
4.اگر موقع حذف کردن یک tablespace ، دیتافایل های آنرا پاک نکنیم فضا به دیسک برنمی گردد و همینطور اگر دیتافایل های بلااستفاده پاک نشوند هنگام ایجاد دیتافایل جدید میتوان از فضا و نام آن ها ، بصورت reuse استفاده کرد
وضعیت های مختلف tablespace
Online / offline : در حالت online که حالت پیش فرض است tablespace در اختیار همه کاربران قرار گرفته و تمام اشیاء آن قابل دسترسی می باشند
در حالت offline ، tablespace از دسترس کاربران خارج شده و از این حالت برای عملیات هایی مانند تغییر نام، جابجایی و ریکاوری datafileها استفاده می شود
شکل کلی دستور :
SQL> ALTER TABLESPACE نام OFFLINE [ NORMAL | TEMPORARY | IMMEDIATE | FOR RECOVERY ];
SQL> ALTER TABLESPACE نام ONLINE ;
توضیحات :
NORMAL: در این حالت قبل از offline نمودن عمل checkpoint بر روی دیتافایل ها انجام می شود بنابراین پس از آنلاین نمودن مجدد آن نیازی به انجام recovery نیست (حالت پیش فرض)
Temporary: هنگامی که یکی از دیتافایل ها به مشکل خورده باشد از این حالت استفاده می شود . در این حالت نیز مانند حالت قبل عمل checkpoint انجام می شود ولی برای online کردن مجدد آن ، نیاز به recovery است
Immediate: در این حالت tablespace به صورت فوری و بدون عمل checkpoint ، offline می شود و هنگام آنلاین شدن مجدد آن نیاز به ریکاوری می باشد . این حالت فقط زمانی انجام می شود که بانک در حالت archive log mode قرار گرفته باشد
For recovery: برای قرار دادن tablespace در حالت ریکاوری از این حالت استفاده می کنیم
نکته : system tablespace و temp tablespace را هیچگاه نمی توان در حالت offline قرار داد
Read only / read write :از این پارامتر برای قرار دادن tablespace در حالت های فقط خواندن و خواندن/نوشتن استفاده می شود ( read-write حالت پیش فرض است )
SQL> ALTER TABLESPACE نام READ ONLY;
SQL> ALTER TABLESPACE نام READ WRITE;
Backup : از این پارامتر برای قرار دادن tablespace در حالت بک آپ استفاده می شود . زمانی که از این پارامتر استفاده می شود بانک اطلاعاتی همچنان به خواندن و نوشتن بر روی داده های موجود در دیتافایل ها ادامه می دهد و زمانی که checkpoint اتفاق می افتد ،header آنها بروزرسانی نمی شود .
SQL> ALTER TABLESPACE tablespace_name BEGIN BACKUP ;
SQL> ALTER TABLESPACE tablespace_name END BACKUP ;
تغییر نام tablespace
برای تغییر نام یک tablespace از دستور زیر استفاده می شود :
SQL> ALTER TABLESPACE tablespace_old_name RENAME TO tablespace_new_name ;
توسط دستور بالا می توان تمامی tablespace های دائمی و موقت را تغییر نام داد . ( tablespace های system و sysaux قابل تغییر نام نمی باشند .)
هنگام تغییر نام ، tablespace مورد نظر باید در حالت read-write باشد و همچنین دیتافایل های آن نیز همگی در وضعیت online قرار بگیرند .
thanks for sharing