PDA

View Full Version : مقدمه ای بر Flasback Database



hmm
پنج شنبه 20 اردیبهشت 1386, 21:22 عصر
مقدمه:
یکی از قابلیتهای درخشان oracle 10g ،Flashback Database است.با این قابلیت شما قادر خواهید بود دیتابیس را به زمانی درگذشته بازگردانید و تغییرات انجام شده در این فاصله را مشاهده یا Rollback نمایید.
Flashback Database از flashback logs برای دستیابی به نسخه های قدیمی بلوک های تغییر یافته استفاده میکند و شما بسادگی میتوانید دیتابیس خود را به نقطه ای در گذشته بازگردانید.
Flashback Database بسیار شبیه یک point in time recovery است ولی با سرعت بسیار بیشتر و گسیختگی اطلاعات بسیار کمتر . بدلیل اینکه شما اطلاعات backup یا log Flashback را از روی Disk خودRestore نمیکنید.
آماده سازی این قابلیت در سطح اولیه آن بسیار ساده است ، فقط باید ARCHIVELOG،Start شود.
مثال زیر نشان میدهد چگونه میتوانید این قابلیت را روی سیستم خود پیاده سازی نمایید.

system@ORCL-SQL>>alter system set log_archive_dest_1='location=c:\test_flash_arcc',' mandatory';

System altered.

system@ORCL-SQL>>shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ORCL-SQL>>startup mount
ORACLE instance started.

Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145750508 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
Database mounted.
system@ORCL-SQL>>alter database archivelog;

Database altered.

system@ORCL-SQL>>alter database open;

Database altered.

sys@ORCL-SQL>>archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination c:\test_flash_arcc
Oldest online log sequence 11
Next log sequence to archive 13
Current log sequence 13

خب archiving پیکر بندی شد. ولی برای Flashback ما نیاز داریم که دو پارامتر مقصد و فضا را set کنیم

o DB_RECOVERY_FILE_DEST_SIZE
o DB_RECOVERY_FILE_DEST
اولین پارامتر مشخص میکند حداکثر فضای مورد استفاده Flashback چه مقدار باشد و دومین پارامتر مقصد فایلها را مشخص میکند .
نکته : DB_RECOVERY_FILE_DEST_SIZE باید قبل از DB_RECOVERY_FILE_DEST ، Set شود.
مقداردهی به این دو متغییر

system@ORCL-SQL>>alter system set db_recovery_file_dest_size=4g;

System altered.

system@ORCL-SQL>>alter system set db_recovery_file_dest='e:\ora_flashback';

فعال سازی Flashback

system@ORCL-SQL>>shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
system@ORCL-SQL>>startup mount
ORACLE instance started.

Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145750508 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
Database mounted.


system@ORCL-SQL>>alter system set db_flashback_retention_target=4320;--flashback to be retained for
--three days
System altered.

sys@ORCL-SQL>>alter database flashback on;

Database altered.

sys@ORCL-SQL>>alter database open;

Database altered.
خب flashback بروی دیتابیس مان فعال شد. ما میتوانیم از v$flashback_database_log یک query بگیریم تا نتیجه کارمون رو ببینیم

system@ORCL-SQL>>select * from v$flashback_database_log;

OLDEST_FLASHBACK_SCN OLDEST_FL RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
-------------------- --------- ---------------- -------------- ------------------------
539853 09-MAY-07 4320 8192000 0

میبینیم که آخرین SCN ای که میتوانیم به آن Flashback کنیم 539853 است. تمام کار Flashback با این SCN است ولی ما میتوانیم به سادگی آنرا به زمان تبدیل کنیم.

system@ORCL-SQL>>select scn_to_timestamp(539853) from dual;

SCN_TO_TIMESTAMP(539853)
---------------------------------------------------------------------------
09-MAY-07 04.38.30.000000000 PM

یه نمونه از Flashback: من الان یک جدول میسازم و آنرا حذف میکنم ولی قبل از حذف جدول من نیاز دارم که SCN و یا timestamp آنرا برای برگشت به این زمان پبدا کنم.

sys@ORCL-SQL>>create table s as select * from tab;

Table created.

sys@ORCL-SQL>>select current_scn, scn_to_timestamp(current_scn) from v$database;

CURRENT_SCN SCN_TO_TIMESTAMP(CURRENT_SCN)
----------- ---------------------------------------------------------------------------
591023 10-MAY-07 11.53.52.000000000 AM

sys@ORCL-SQL>>truncate table s;

Table truncated.

sys@ORCL-SQL>>shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ORCL-SQL>>startup mount
ORACLE instance started.

Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145750508 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
Database mounted.
sys@ORCL-SQL>>flashback database to scn 591023;

Flashback complete.

sys@ORCL-SQL>>alter database open resetlogs;

Database altered.

sys@ORCL-SQL>>select * from s where rownum=1;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
ICOL$ TABLE 4

sys@ORCL-SQL>>select count(*) from s;

COUNT(*)
----------
3339

sys@ORCL-SQL>>
به همین راحتی.
موفق باشید

majid_afra222
جمعه 21 اردیبهشت 1386, 09:25 صبح
سلام
hmm عزیز دستت درد نکنه، اینم اصل مقاله
http://www.orafaq.com/node/1847
برای دوستان

hmm
جمعه 21 اردیبهشت 1386, 14:33 عصر
مرسی . آره ترجمه همین مقاله است .
ببخشید link ندادم