آشنایی با مفاهیم tablespaceها در اوراکل(قسمت اول)

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   

          Datafilelocation&datafile_namesize 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 قرار بگیرند .

ارتباط با نویسنده مطلب(آیدی تلگرام): s_s_m86@

Comment (1)

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

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