دیتابیس اوراکل

نکاتی در مورد Temporary Tablespace

شنبه, ۶ شهریور ۱۳۹۵، ۰۲:۲۶ ب.ظ

‫‫‫‫‫‫‫‫‫‫‫‫temporary tablespace ها شامل داده های ناپایدار هستند ، داده هایی که طول عمر آنها تنها محدود به طول عمر یک session میشود.                                                                                              

به طور مثال اگر ما یک sort داشته باشیم که در حافظه (RAM) جا نشود ، اوراکل برای انجام آن sort  از فضای temporary tablespace (که روی دیسک قرار دارد) استفاده میکند.  درواقع از فضای temporary tablespace  برای ذخیره کردن موارد زیر استفاده میشود :

         Intermediate sort results -

         Temporary tables and temporary indexes -

         Temporary LOBs -

         Temporary B-trees -

 

در زیر به نکاتی درباره tablespaceهایی از نوع temporary اشاره شده است:


1)     ساخت temporary tablespace

به صورت پیش فرض هنگام نصب دیتابیس ، یک temporary tablespace با نام TEMP ایجاد میگردد. همه userها میتوانند از این TEMP tablespace که به صورت پیش فرض موقع نصب دیتابیس ایجاد شده است به صورت مشترک استفاده کنند ولی اگر بخواهید که یک یا چند user به صورت جداگانه temporary tablespace مخصوص خود را داشته باشند باید:

1-      با استفاده از دستور زیر یک temporary tablespace ایجاد کنید:


create temporary tablespace my_temp

tempfile '/u01/app/oracle/oradata/dbr/my_temp01.dbf' size 100m reuse autoextend on next 100m

maxsize unlimited

extent management local uniform size 100m;


 

2- temporary tablespaceرا که ایجاد کرده اید به یک یا چند user نسبت دهید:


alter user scott temporary tablespace my_temp;


2)     temporary tablespace پیش فرض در دیتابیس

با استفاده از کوئری زیر میتوانید تشخیص دهید که در حال حاضر temporary tablespace پیش فرض در دیتابیس ، کدام tablespace  است. ( موقع ایجاد کردن یک user در دیتابیس اگر حرفی از temporary tablespace زده نشود ، temporary tablespace پیش فرض برای آن user در نظر گرفته میشود. )


select property_name, property_value

  from database_properties

where property_name= 'DEFAULT_TEMP_TABLESPACE;


همچنین با استفاده از دستور زیر میتوانید temporary tablespace پیش فرض را در دیتابیس تغییر دهید.


alter database default temporary tablespace my_temp;


3)     تخصیص فضا در temporary tablespace

شما با استفاده از V$SORT_SEGMENT view میتوانید به ازای هر instance راجع به  segmentهای مربوط به sort  اطلاعاتی را بدست آورید.                                                                                        و همچنین با استفاده از V$SORT_USAGE view میتوانید متوجه شوید که در حال حاضر چه userهایی از فضای temp tablespace استفاده میکنند.                                                                                      

برای اینکه متوجه شوید در حال حاضر هر session ، از چه مقدار از فضای temporary tablespace  استفاده میکند میتوانید از کوئری های زیر استفاده کنید:

کوئری 1 ( برای دیتابیسهای Single Instance )

کوئری 2 ( برای دیتابیسهای RAC )

 

فرض کنید در یک session  برای اجرای یک  sort از فضای temp tablespace استفاده شده است ، بعد از اینکه عملیات sort به پایان رسید ، فضایی که توسط آن در temporary tablespace  اشغال شده بود ، مجددا آزاد نمیشود ، فقط اوراکل یک مارکر free روی آن میکشد ، به این معنی که آن فضا قابل استفاده مجدد است .  

با استفاده از view DBA_TEMP_FREE_SPACE میتوانید راجع به مقدار فضای استفاده شده و آزاد هر temporary tablespaceها اطلاعات لازم را بدست آورید.


select s.tablespace_name, s.tablespace_size, s.allocated_space, s.free_space

  from dba_temp_free_space s;



4)     ایجاد کردن  Bigfile Temporary Tablespace

همانند permanent tablespaceها ، شما میتوانید temporary tablespaceها را هم به صورت bigfile ایجاد کنید.


create bigfile temporary tablespace my_temp

tempfile '/u01/app/oracle/oradata/dbr/my_temp01.dbf' size 100M reuse autoextend on next 100m ;


 

5)     اضافه کردن tempfile به temporary tablespaceهای موجود

برای اضافه کردن tempfile به یک temporary tablespace  که قبلا ایجاد شده است میتوانید از دستور زیر استفاده کنید.


alter tablespace my_temp add tempfile 

'/u01/app/oracle/oradata/dbr/my_temp02.dbf' size 100m reuse autoextend on next 100m ;


 

6)     Shrink کردن temporary tablespace

 همانطور که گفته شد، بعد از اینکه عملیات sort به پایان رسید ، فضایی که توسط آن در temporary tablespace  اشغال شده بود ، مجددا آزاد نمیشود . در این صورت اگر آن عملیات sort فضای زیادی را اشغال کرده باشد، فضای temporary tablespace  تا حد زیادی رشد پیدا میکند و در نتیجه حجم زیادی از disk اشغال میشود.

برای اینکه این فضای اشغال شده مجددا آزاد شود ، میتوانید از shrink استفاده کنید. ( عمل shrink کردن tablespace میتواند به صورت آنلاین انجام شود).

برای shrinkکردن  temporary tablespace میتوانید از دستور زیر استفاده کنید:

 

alter tablespace my_temp shrink space;

Or

alter tablespace my_temp shrink space keep 20m;


 

اگر بخواهید فقط یکی از temp file های مربوط به temporary tablespace را shrink کنید میتوانید از دستور زیر استفاده کنید.


alter tablespace my_temp shrink tempfile

'/u01/app/oracle/oradata/dbr/my_temp01.dbf';

 

7)     ریکاور کردن temporary tablespace

اگر یکی از  temp fileهای temporary tablespace به صورت فیزیکی پاک شود ، در واقع یک non critical error رخ داده است ، و این قضیه باعث down  شدن دیتابیس ما نمیشود. فقط اگر یک کاربر بخواهد کاری انجام دهد که  به فضای temp tablespace نیاز داشته باشد ، اون کاربر با خطا مواجه میشود.

مثلا فرض کنید که یک user یک کوئری با sort بسیار بزرگ اجرا کرده است که برای اجرای آن sort نیاز به فضای temp tablespace هست ، در این صورت اگر در حین اجرای این دستور یا قبل از آن ، یکی از tempfileهای temp tablespace  به صورت فیزیکی پاک شده باشد ، آن session موقع اجرای کوئری با خطا مواجه میشود.

 

وقتی همچین حالتی پیش می آید ، چند راه حل وجود دارد :

1- اگر بتوانیم دیتابیس را shutdown  و دوباره استارت کنیم ، اوراکل موقع استارت instance ، وقتی که ببیند آن tempfile در مسیر مورد نظر وجود ندارد ، آن را با همان مشخصاتی که در controlfile هست ، دوباره ایجاد میکند و دیتابیس open میشود.

2- یک temp tablespace جدید ایجاد کنیم و آن را به عنوان default temp tablespacec قرار دهیم.

3- به temp tablespace موجود یک tempfile جدید اضافه کنیم.

 


n        منابع 

https://docs.oracle.com/cd/B28359_01/server.111/b28310/tspaces002.htm#i1013552 -1

http://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_3041.htm#REFRN30243 -2

http://www.dba-oracle.com/t_v$_sort_usage.htm -3

https://docs.oracle.com/cd/B28359_01/server.111/b28310/tspaces007.htm#CFHJFBBJ -4

نظرات (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
تجدید کد امنیتی