وبلاگ وحید نوروزی

تجربه و ترجمه و تحقیق درباره اوراکل را در این وبلاگ خواهید یافت.

وبلاگ وحید نوروزی

تجربه و ترجمه و تحقیق درباره اوراکل را در این وبلاگ خواهید یافت.

  • ۰
  • ۰

flashback data archive

سلام

چند وقت پیش یک نیازمندی برای ما بیش از پیش بوجود اومد و اون هم اینکه بتونیم اطلاعات قبلی یک جدول را در بازه زمانی بیش از 900 ثانیه که پیش فرض undo هست داشته باشیم. خوب طبیعتاً اولین چیزی که به ذهن من اومد افزایش undo retention بود. اما...

به همین قشنگی هم که فکر می کردیم نبود. افزایش سایز undo بیشتر از دور ریختن udno segment هایی که دیگه نیازی بهشون نیست رخ میده. منظورم اینه که اوراکل بیشتر تمایل داره که سایز udno رو تا جایی که میشه رشد بده ، بجای اینکه زمان صرف بیرون ریختن undo segmentهایی کنه که دیگه بهش احتیاج نداره.

یه مشکل دیگه که ممکن هست باهاش برخورد کنیم، us contention یا همان undo segment contention هست که با افزایش سایز udno احتمالش افزایش پیدا میکنه. خوب پس چه کنیم؟

یک گزینه باحال داریم به اسم flashback data archive که من از سایت oracle-base پیاده سازیش کردم و بهمون کمک می کنه که داده های قبلی یک جدول رو تا مدت زمان مدنظر خودمون نگه داریم و منبغ flashback اون جدول قرار می گیره. پس بجای اینکه سورس flashback یک جدول بشه undo میشه اینجایی که روی دیسک بصورت مشخص بهش معرفی می کنیم. البته امکانات دیگه ای هم بهمون میده که به قول خودش میتونه جایگزین audit دستی بشه که کاربرها میتونند ایجاد کنند.

بریم و دست به آچار بشیم:

به دیتابیس مدنظر خودمون وصل میشیم:

sys@vahiddb(5)> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 VAHIDPDB                       READ WRITE NO
sys@vahiddb(5)> alter session set container=VAHIDPDB;

یک TABLESPACE برای همین منظور ایجاد می کنیم.

sys@vahiddb(5)> CREATE TABLESPACE fda_ts;

 

محض احتیاط چون تخمینی از حجمش نداشتم، یه دیتافایل دیگه هم بهش اضافه کردم.

حالا FLASHBACK ARCHIVE رو باید ایجاد کنیم. سه تا پارامتر باید بهش بدیم. یک اسم اون TABLESPACE، میزان QUOTA و میزان زمانی که میخواد نگه داره که میتونه به روز ، ماه یا سال باشه:

sys@vahiddb(5)> CREATE FLASHBACK ARCHIVE DEFAULT fda_7day  TABLESPACE fda_ts quota 60g retention 7 day;

Flashback archive created.

ما برای 7 روز در نظر گرفتیم.

 

حالا به اون کاربری که میخواد از این امکانات استفاده کنه باید دسترسی های زیر رو بدیم:

sys@vahiddb(5)> GRANT FLASHBACK ARCHIVE ON fda_7day to TESTFA;

Grant succeeded.

Elapsed: 00:00:00.03
sys@vahiddb(5)> GRANT FLASHBACK ARCHIVE ADMINISTER TO TESTFA;

Grant succeeded.

Elapsed: 00:00:00.02
sys@vahiddb(5)> GRANT EXECUTE ON DBMS_FLASHBACK_ARCHIVE TO TESTFA;

Grant succeeded.

 

اگر بخوایم که بحث آدیت هم داشته باشیم، مجوز زیر رو هم باید بدیم که ما ندادیم:

--GRANT CREATE ANY CONTEXT TO TESTFA;

 

ببینیم تا حالا چه کردیم:

 

COLUMN flashback_archive_name FORMAT A22
COLUMN create_time FORMAT A20
COLUMN last_purge_time FORMAT A20

SELECT owner_name,
       flashback_archive_name,
       flashback_archive#,
       retention_in_days,
       TO_CHAR(create_time, 'DD-MON-YYYY HH24:MI:SS') AS create_time,
       TO_CHAR(last_purge_time, 'DD-MON-YYYY HH24:MI:SS') AS last_purge_time,
       status
FROM   dba_flashback_archive
ORDER BY owner_name, flashback_archive_name;

OWNER_NAME           FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE# RETENTION_IN_DAYS CREATE_TIME          LAST_PURGE_TIME      STATUS
-------------------- ---------------------- ------------------ ----------------- -------------------- -------------------- -------
SYS                  FDA_7DAY                                1                 7 26-APR-2022 13:51:00 26-APR-2022 13:51:00 DEFAULT

 

و این دستور:

 

 SET LINESIZE 150

COLUMN flashback_archive_name FORMAT A22
COLUMN tablespace_name FORMAT A20
COLUMN quota_in_mb FORMAT A11

SELECT flashback_archive_name,
       flashback_archive#,
       tablespace_name,
       quota_in_mb
FROM   dba_flashback_archive_ts
 ORDER BY flashback_archive_name;

FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE# TABLESPACE_NAME      QUOTA_IN_MB
---------------------- ------------------ -------------------- -----------
FDA_7DAY                                1 FDA_TS               61440

چون جدولی که میخوایم در حال حاضر موجود هست، باید از دستور ALTER استفاده کنیم.

sys@vahiddb(5)> ALTER TABLE TESTFA.LOG_MAIN_TABLE FLASHBACK ARCHIVE FDA_7DAY;

 

اطلاعات جدولی که اضافه کردیم رو میشه اینجوری ببینیم:

COLUMN owner_name FORMAT A20
COLUMN table_name FORMAT A20
COLUMN flashback_archive_name FORMAT A22
COLUMN archive_table_name FORMAT A20

SELECT owner_name,
       table_name,
       flashback_archive_name,
       archive_table_name,
      sys@vahiddb(5)>  status
FROM   dba_flashback_archive_tables
ORDER BY owner_name, table_name;

OWNER_NAME           TABLE_NAME           FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME   STATUS
-------------------- -------------------- ---------------------- -------------------- -------------
TESTFA               LOG_MAIN_TABLE       FDA_7DAY               SYS_FBA_HIST_131131  ENABLED

 

برای لغو کردنش هم میشه دستور زیر رو زد:

 

sys@vahiddb(5)> ALTER TABLE TESTFA.LOG_MAIN_TABLE  NO FLASHBACK ARCHIVE FDA_7DAY;

 

با تشکر از مهندس منصوری عزیز برای راهنمایی ارزشمندشون.

منبع:

https://oracle-base.com/articles/12c/flashback-data-archive-fda-enhancements-12cr1

 

----------------------------------------------------------------------------------------------------

در هنگام رانندگی به احترام عابرین پیاده بایستیم.

---------------

  • ۰۱/۰۲/۰۷
  • قدیر نوروزی میرصادقی

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی