21
Flashback ტტტტტტტტტტ Oracle-ტტ ტტტტ ტტტტტტტტტტტ flashback-ტტ ტტტტტტ ტტტტტტტტტ: Flashback Drop, Recycle bin-ტტ ტტტტტტტტტტტ ტტ ტტტტტტტტტტ Flashback Query Flashback Version Query Flashback Transaction Flashback Table Flashback Data Archive Flashback Database ტტტტტტ ტტტტტტტტტტტ

Flashback ტექნოლოგია Oracle 11g-ში

Embed Size (px)

DESCRIPTION

Flashback Technology in Oracle Database 11g

Citation preview

Page 1: Flashback ტექნოლოგია Oracle 11g-ში

Flashback ტექნოლოგია Oracle-ში

ჩვენ განვიხილავთ flashback-ის შემდეგ თვისებებს:• Flashback Drop, Recycle bin-ის დანიშნულება და გამოყენება• Flashback Query• Flashback Version Query• Flashback Transaction• Flashback Table• Flashback Data Archive• Flashback Database

ირაკლი ქობესაშვილი

Page 2: Flashback ტექნოლოგია Oracle 11g-ში

იმისათვის რომ შეგვეძლოს flashback ტექნოლოგიის გამოყენება განსაზღვრული უნდა გვქონდეს შემდეგი ინიციალიზაციის პარამეტრები:UNDO_MANAGEMENT=‘AUTO’UNDO_TABLESPACE=‘UNDOTBS1’UNDO_RETENTION=900ასეთი სახით არის განსაზღვრული მოცემული პარამეტერები ავტომატურად DBCA უტილიტით ბაზის შექმნის შემდეგ.

Flashback drop• დამატებულია oracle 10g ვერსიიდან.• რომ შევძლოთ მისი გამოყენება საჭიროა პარამეტრი recyclebin=on, რომელიც ავტომატურად ჩართულია.

• ეს პარამეტრი დინამიურია ამიტომ მისი ცვლილება შეგვიძლია ბაზის გადატვირთვის გარეშე: alter system set recyclebin=off scope=both;

• შეგვიძლია ეს პარამეტრი ვცვალოთ სესიის დონეზე:

SQL> alter session set recyclebin=off;• მისი მუშაობის პრინციპი ჰგავს Windows-ში „ნაგვის ყუთი“-ის მუშაობას.• როდესაც წავშლით რაიმე ობიექტს, სინამდვილეში ეს ობიექტი ისევ არსებობს და იკავებს ადგილს

Tablespace-ში, ის ინახება სწორედ recycle bin-ში, საიდანაც შეგვიძლია მარტივად მისი აღდგენა. Recycle bin არის მონაცემთა ლექსიკონის view, რომელიც ინახავს წაშლილი ობიექტების აღწერას.

• Recyclebin-ს აქვს მხარდაჭერა ერთიდაიგივე სახელის მქონე ობიექტების, მაგალითად: თუ მაქვს ცხრილი Students და თანმიმდევრობით წავშალე და შევქმენი სამჯერ, მაშინ სამივე წაშლილი ცხრილი იქნება ხელმისაწვდომი recyclebin-ში იმის მიხედვით ადგილი ყოფნის თუ არა Tablespace-ს.

• ყველა Tablespace-ს აქვს თავის ლოკალური recyclebin, მაგალითად: Users tablespace-ში წაშლილი ობიექტები შეიძლება არ იყოს შენახული ადგილის ნაკლებობის გამო, ხოლო Training tablespace-ში იყოს, იმიტომ რომ ადგილი არის თავისუფალი.

• თუ ბაზას ან სესიას გავუთიშეთ recyclebin, მასში არსებული ინფორმაცია რჩება უცვლელი, ახალი წაშლილი კი რა თქმა უნდა არ მოხვდება. მასში არსებული ინფორმაცია შეგვიძლია წავშალოთ „ხელით“ purge ბრძანებით.

• სუპერ მომხმარებლით (sys, system) წაშლილი ობიექტები არ ხვდება recyclebin-ში.

Page 3: Flashback ტექნოლოგია Oracle 11g-ში

• წაშლილ ობიექტს გადაერქმევა სახელი და მისი ახალი სახელი იქნება: BIN$unique_id$version • Unique_id - არის 26 სიმბოლოიანი გლობალური უნიკალური ჩანაწერი, სხვა ბაზაში იგივე სახელის

მქონე ცხრილის წაშლის შემდეგ ეს ჩანაწერი იქნება განსხვავებული.• Version არის წაშლილი ობიექტის ვერსია. • განვიხილოთ მაგალითი: ბაზას დავუკავშირდეთ არა სუპერ მომხმარებლით: create table test(id number); insert into test values(1); insert into test values(2); insert into test values(3); commit; drop table test; შეგვიძლია ვნახოთ წაშლილი test ცხრილი recyclebin- :შიselect object_name, original_name, operation, type, ts_name, createtime, droptime, can_undrop from recyclebin;

ყურადღება მივაქციოთ ველს can_undrop, რომელშიც წერია yes, ე.ი. მისი აღდგენა შეგვიძლია, რომ გვქონოდა ამ ცხრილზე ინდექსი, რა თქმა უნდა ინდექსიც მოხვდებოდა recyclebin-ში და მას ექნებოდა can_undrop ველში no, რადგან ცალკე ინდექსის აღდგენა უაზრობაა თუ შესაბამისი ცხრილი არ გვექნება, ამიტომ oracle-მა გააკეთა ისე რომ ცხრილის აღდგენის შემთხვევაში ყველა შესაბამისი ინდექსი ავტომატურად აღდგება.

ჩვენს მიერ წაშლილი ცხრილის აღდგენა მოხდება შემდეგნაირად: flashback table test to before drop;თუ აღსადგენი ცხრილი არის შექმნილი და წაშლილი რამდენჯერმე, მაშინ ზემოთ მოყვანილი აღდგენის სკრიპტი აღადგენს ბოლოს წაშლილი მდგომარეობით, თუ ჩვენ გვსურს აღვადგინოთ არა ბოლოს წაშლილი მდგომარეობით, მაშინ უნდა გამოვიყენოთ object_name, მაგალითად:flashback table "BIN$9533yZWEXq7gQ7ABCgqegQ==$0" to before drop;თუ უკვე არსებობს ამ ცხრილის შესაბამისი original_name-ს მსგავსი სახელის მქონე ცხრილი მაშინ ვერ მოვახდენთ ასე მის აღდგენას და oracle იჩხუბებს რომ ასეთი სახელის მქონე ცხრილი უკვე მაქვსო, მაშინ შეგვიძლია ცხრილის აღდგენისას გავუკეთოთ სახელის შეცვლა:flashback table "BIN$9533yZWEXq7gQ7ABCgqegQ==$0" to before drop rename to old_test;

Page 4: Flashback ტექნოლოგია Oracle 11g-ში

როდესაც წავშლით ობიექტს მის მიერ დაკავებული ადგილი (space) გამოჩნდება dba_free_spaces წარმოდგენაში(view) როგორც თავისუფალი, თუმცა ამ ობიექტების გამოყენებული ადგილი კვლავ ითვლება მომხმარებლის ქვოტაში(quota) მანამდე, სანამ ობიექტი არ წაიშლება „ნაგვის ყუთიდან“ ან მისი ადგილი არ დასჭირდება ახალ ობიექტს tablespace-ში. ობიექტები ინახება ნაგვის ყუთში მანამდე , სანამე ახალ ობიექტს არ დაჭირდება ადგილი, რომელიც დაკავებული აქვს წაშლილ ობიექტს. თუ tablespace არის autoextensible მაშინაც კი პირველ რიგში, როდესაც ახალ ობიექტს სჭირდება ადგილი პირველ რიგში აიღება ადგილი წაშლილი ობიექტების მიერ დაკავებულიდან და თუ ეს არ იქნება საკმარისი შემდეგ მოხდება tablespace-ს ზომის გაზრდა.

Page 5: Flashback ტექნოლოგია Oracle 11g-ში

• Recyclebin-ში შეგვიძლია წავშალოთ ობიექტები „ხელით“ purge ბრძანების მეშვეობით, მაგალითად:

purge table "BIN$U/9fvJKfXOzgQKjAYAIWhw==$0"; . მსგავსად შეიძლება წავშალოთ ინდექსიც აგრეთვე შეიძლება წავშალოთ ობიექტები ნაგვის ყუთიდან რომლებიც ეკუთვნის კონკრეტულ tablespace-ს: purge tablespace users; შეიძლება წავშალოთ ყველა ობიექტი თუ გვაქვს sysdba : პრივილეგია ბრძანებით purge dba_recyclebin.• შეგვიძლია ისე წავშალოთ ცხრილი რომ გვერდი ავუაროთ მის ნაგვის ყუთში მოხვედრას Purge

: ბრძანების დამატებით drop table test purge;• , შეგვიძლია ვნახოთ ცხრილის სტრუქტურა და მონაცემები ნაგვის ყუთიდან ბრძანებით: select, სხვა

DML და DDL , .არ არის ნებადართული წაშლილ ცხრილზე სანამ არ აღვადგენთ : მაგალითადselect object_name, original_name, operation, type, ts_name, createtime, droptime, can_undrop from recyclebin;

select * from "BIN$9533yZWGXq7gQ7ABCgqegQ==$0";

Page 6: Flashback ტექნოლოგია Oracle 11g-ში

Flashback Query• Flashback query , საშუალებას გვაძლევს ვნახოთ სტრიქონები ცხრილში დროის მიხედვით ანუ

, .განსაზღვრულ დროს რა ჩანაწერები იყო ცხრილში შესაბამისად შეგვიძლია აღვადგინოთ კიდეც• გამოიყენება undo tablespace- . ის ინფორმაცია• გამოიყენება as of ბრძანება რომელსაც მოსდევს timestamp ან SCN(System Change Number).

: მოვიყვანოთ მაგალითი შევქმნათ ცხრილი და ჩავწეროთ მასში ინფორმაციაcreate table footballers(id number, name varchar2(50));insert into footballers values(1,'Cristiano Ronaldo');insert into footballers values(2,'Lionel Messi');insert into footballers values(3, 'Zlatan Ibrahimovich');insert into footballers values(4, 'Arrien Robben');insert into footballers values(5, 'Gareth Bale');commit;Select * from footballers;

:წავშალოთ რამდენიმე ჩანაწერიSelect sysdate from dual;22-Apr-14 15:40:55Delete from footballers where id in(2,5);Commit;

Page 7: Flashback ტექნოლოგია Oracle 11g-ში

Select * from footballers;

ააღვადგინოთ ჩვენს მიერ წაშლილი ინფორმაცია:რადგანაც ზუსტი დრო ვიცით გამოვიყენებთ მასselect * from footballers as of timestamp to_timestamp('22-04-2014 15:40:55','dd-mm-YYYY hh24:mi:ss');თუ არ გვეცოდინება ზუსტი დრო შეგვიძლია ავიღოთ ინტერვალები მაგალითად თუ დაახლოებით გავიდა 1 საათი რაც წავშალეთ ინფორმაცია:select * from footballers as of timestamp systimestamp - interval ‘60' minute;

10 :ეს გვაჩვენებს წუთის წინანდელ ინფორმაციასselect * from footballers as of timestamp (sysdate-1/24/6);უკვე მიღებული შედეგიდან კი ადვილია ჩვენი ინფორმაციის აღდგენა: insert into footballers(select * from footballers as of timestamp to_timestamp('22-04-2014 15:40:55','dd-mm-YYYY hh24:mi:ss'))minus(select * from footballers);commit;Select * from footballers;

Page 8: Flashback ტექნოლოგია Oracle 11g-ში

Flashback Version Query• Flashback-ის ეს თვისებაც იყენებს as of ბრძანებას და გვაძლევს უფრო დეტალურ ინფორმაციას

ვიდრე flashback query• Flashback version query გვაძლევს სტრიქონის მთლიან ისტორიას ორ SCN-ს ან timestamp-ს

შორის.• ესეც იყენებს undo tablespace-ს.განვიხილოთ მაგალითი:გავიგოთ მიმდინარე SCN(System Change Number), ჩვეულებრივმა მომხმარებელმა რომ გაუშვას უნდა მივანიჭოთ პრივილეგია sys მომხმარებლით : grant execute on dbms_flashback to ika;select dbms_flashback.get_system_change_number from dual;Result: 58834937update footballers set name='Franck Ribery' where id=4;commit;select dbms_flashback.get_system_change_number from dual;Result: 58835095delete from footballers where id = 3;commit;select dbms_flashback.get_system_change_number from dual; Result: 58835182

გავიგოთ რა შეიცვალა ორ SCN- :ს შორისselect versions_startscn startscn, versions_endscn endscn,versions_xid xid, versions_operation oper,id, name from footballers versions between scn 58834937 and 58835182where id in (3,4);

Page 9: Flashback ტექნოლოგია Oracle 11g-ში

• VERSIONS_START{SCN|TIME} --- საწყისი SCN ან Time როდესაც ცვლილება მოხდა სტრიქონზე.

• VERSION_END{SCN|TIME} --- საბოლოო SCN ან Time როდესაც ცვლილება აღარ არის ვალიდური სტრიქონისთვის. თუ არის NULL მაშინ სტრიქონის ვერსია არის მიმდინარე ან სტრიქონი წაშლილია.

• VERSIONS_XID --- ტრანზაქციის ID, რომელმაც შექმნა სტრიქონის ვერსია.• VERSIONS_OPERATION --- განხორციელებული ოპერაცია სტრიქონზე(I=Insert, D=Delete, U=Update).Flashback version query-ის ვერ გამოვიყენებთ შემდეგ ობიექტებთან:• External tables• Fixed tables (internal Oracle X$ tables)• Temporary tables• Viewsვერ გამოვიყენებთ ვერ DDL-ებთან.ჩვენს მიერ მოყვანილ მაგალითში ნათლად ჩანს რომ მოხდა იმ name-ს განახლება რომლის id-იც არის 4, იყო “Arrien Robben” მოხდა update და გახდა „Franck Ribery“, ასევე გვქონდა სტრიქონი რომლის id იყო 3 და წაიშალა. რომ დავრწმუნდეთ ამაში: select * from footballers;

Page 10: Flashback ტექნოლოგია Oracle 11g-ში

Flashback Transaction• როდესაც გავიგებთ რომ მოხდა არასწორი ცვლილება და საჭიროა მისი დაბრუნება(reverse)

უნდა გამოვიყენოთ flashback_transaction_query მონაცემთა ლექსიკონის წარმოდგენა(data dictionary view).

• flashback_transaction_query შეიცავს ბაზაში მომხდარ ყველა ცვლილებას DDL-ების ჩათვლით.• ის იყენებს Undo Tablespace-ს ინფორმაციას, შესაბამისად მას აქვს ლიმიტი.• ასევე საჭიროა Redo log-ების ინფორმაცია.• სანამ გამოვიყენებთ flashback transaction-ს უნდა შევასრულოთ წინაპირობები1. უნდა ჩავრთოთ დამატებითი ლოგირება ველებისთვის და primary key-სთვის: alter database add supplemental log data; alter database add supplemental log data (primary key) columns;2. მომხმარებელს მივცეთ შემდეგი პრივილეგიები: grant execute on dbms_flashback to ika; grant select any transaction to ika;Flashback_transaction_query-ს ველები:

Page 11: Flashback ტექნოლოგია Oracle 11g-ში

განვიხილოთ მაგალითი: სიმარტივისთვის ჩვენი ცხრილი დავაბრუნეთ პირვანდელ მდგომარეობაზე და გამოიყურება შემდეგნაირად:drop table footballers purge;create table footballers(id number, name varchar2(50));insert into footballers values(1,'Cristiano Ronaldo');insert into footballers values(2,'Lionel Messi');insert into footballers values(3, 'Zlatan Ibrahimovich');insert into footballers values(4, 'Arrien Robben');insert into footballers values(5, 'Gareth Bale');commit;Select * from footballers;

მოვახდინოთ ერთი ჩანაწერის ცვლილება ჩვენს ცხრილში.update footballers set name='Franck Ribery' where id=4;commit;დავადგინოთ თუ როგორ შეგვიძლია ამ განახლების დაბრუნება(reverse)select start_scn, commit_scn, logon_user, operation, table_name, undo_sqlfrom flashback_transaction_query where table_name='FOOTBALLERS';

Undo_sql ველში წერია ის სკრიპტი, რომელიც მოგვცემს ჩვენს მიერ შეცვლილი ჩანაწერის უკან დაბრუნებას ძველ მნიშვნელობაზე.

Page 12: Flashback ტექნოლოგია Oracle 11g-ში

Flashback Table• Flashback Table გამოიყენება იმისთვის რომ ცხრილის სტრიქონების მდგომარეობა

დავაბრუნოთ უკან განსაზღვრული დროით ან კონკრეტულ SCN-ზე.• ის აგრეთვე აღადგენს ცხრილის ინდექსებს, ტრიგერებს და შეზღუდვებს. (Index,

Trigger,Constraint), ამ დროს ბაზა არის online.• Flashback table უნდა გამოვიყენოთ მაშინ თუ მომხმარებლის შეცდომები არის მცირე

რაოდენობით და ეხება ერთ ან რამდენიმე ცხრილს, თუ ბევრი ცხრილის აღდგენა არის საჭირო უმჯობესია გამოვიყენოთ Flashback Database, რომელსაც განვიხილავთ მოგვიანებით.

• არა სუპერ მომხმარებელს შეუძლია გააკეთოს Flashback table თუ მას აქვს შესაბამისი პრივილეგია.

• მომხმარებელმა რომ განახორციელოს Flashback table მას უნდა ჰქონდეს Flashback any table პრივილეგია.

• grant flashback any table to ika; მივანიჭოთ ჩვენს მომხმარებელს პრივილეგია.• ასევე საჭიროა ცხრილზე ჩართული იყოს row movement, რომელიც არ უნდა ჩავრთოთ თუ

აპლიკაცია დამოკიდებულია ROWID-ზე რადგანაც row movement-ის ჩართვის შემდეგ შეიძლება შეიცვალოს სტრიქონის ROWID. ამავდროულად არ არის სწორი გზა როდესაც აპლიკაცია დამოკიდებულია ROWID-ზე.

• alter table footballers enable row movement; row movement-ის ჩართვა footballers ცხრილზე.

• Flashback table არ მოქმედებს: Fixed Tables (X$ tables) DDL-ზე(მაგ : ველის დამატება ან წაშლა) სტატისტიკაზე (Flashback-ის შემდეგ რეკომენდებულია შევაგროვოთ ახალი სტატისტიკა)განვიხილოთ მაგალით:ჩვენს მომხმარებელს მივანიჭოთ პრივილეგია flashback any tablegrant flashback any table to ika;ჩავრთოთ row movement ცხრილზე footballersalter table footballers enable row movement;

Page 13: Flashback ტექნოლოგია Oracle 11g-ში

ვნახოთ რა წერია footballers ცხრილშიSelect * from footballers;

წავშალოთ რამდენიმე სტრიქონიDelete from footballers where id in(1,2,3,4);Commit;select * from footballers;

Flashback table 10 თვისების გამოყენებით დავაბრუნოთ ჩვენი ცხრილი წუთის წინანდელ.მგომარეობაზე

flashback table footballers to timestamp systimestamp - interval '10' minute; ვნახოთ შედეგი

select * from footballers;

ჩვენს მიერ წაშლილი ინფორმაცია აღდგენილია Flashback table-ს გამოყენებით.შენიშვნა: Flashback table-ს ანიჭებენ უპირატესობას როდესაც აღსადგენია ცოტა რაოდენობის ცხრილ(ებ)ის ინფორმაცია, flashback-ის სხვა თვისებებთან შედარებით.

Page 14: Flashback ტექნოლოგია Oracle 11g-ში

Flashback Data Archive• Flashback data archive საშუალებას გვაძლევს შევინახოთ რაიმე ცხრილის ინფორმაცია იმდენი

ხნით რამდენიც საჭიროა და ვნახოთ ისტორიული ინფორმაცია წლების წინანდელი მდგომარეობით.

• მარტივად რომ ვთქვათ პროცედურა არის შემდეგი : ვქმნით ერთ ან რამდენიმე repository area-ს, რომლიდანაც ერთი შეიძლება იყო Default, ვანიჭებთ დროს თუ რამდენი ხანი უნდა შეინახოს ობიექტები ამ repository-მა, ამის შემდეგ უკვე მოვნიშნავთ იმ ცხრილებს რომლებიც უნდა შევინახოთ ჩვენს repository-ში.

• Flashback data archive მოქმედებს Undo-ს მსგავსად, თუმცა ის იწერს მხოლოდ delete და update ბრძანებებს, ხოლო insert-ს არა.

• მონაცემებთან წვდომა ხდება as of ბრძანებით როგორც არის flashback query-ში.• Oracle best practices გვეუბნება რომ flashback data archive-სთვის გვქონდეს ცალკე

tablespace.• ყველა archive-ს უნდა ჰქონდეს ავტომატური შენახვის პერიოდი, ანუ რამდენი ხანი შეინახოს

მონაცემები, ზომა დამოკიდებულია დისკის ზომაზე რაც გამოყოფილია tablespace-სთვის, ან შეგვიძლია დავაწესოთ მაქსიმალური ქვოტა(quota).

• შევქმნათ ცალკე tablespace, რომელსაც გამოვიყენებთ data archive-სთვის sys მომხმარებლით:

create tablespace fbda1 datafile '+DISKS' size 3g autoextend off;• შევქმნათ Flashback data archive, რომელსაც შენახვის პერიოდი ექნება 3 წელი, ხოლო ქვოტა

შეუზღუდავი tablespace-ში. Sys მომხმარებლით: create flashback archive fb_footballers tablespace fbda1 retention 3 year;• არ შეგვიძლია მივუთითო ერთზე მეტი tablespace ბრძანებაში create flashback archive,

დამატება შეგვიძლია alter flashback archive ბრძანებით.• ბიზნესის მოთხოვნიდან გამომდინარე შეგვიძლია გამოვრთოთ ცხრილზე flashback data

archive ან ჩავრთოთ, თუმცა თუ ჩვენ გამოვრთავთ data archive-ს ისტორიული ინფორმაცია დაიკარგება, თუნდაც მაშინვე ჩავრთოთ ის ცხრილისთვის.

• მომხმარებელს უნდა ჰქონდეს flashback archive administer სისტემური პრივილეგია რომ შექმნას და ცვლილებები შეიტანოს flashback data archive-ში, ასევე flashback archive ობიექტური პრივილეგია რომ ცხრილზე ჩართოს „არქივინგი“, ამის შემდეგ მას სჭირდება უბრალოდ select პრივილეგია რომ გამოიტანოს ცხრილის ინფორმაცია as of ბრძანებით.

Page 15: Flashback ტექნოლოგია Oracle 11g-ში

Flashback data archive-ს მხარს უჭერს სამი მონაცემთა ლექსიკონის წარმოდგენა (data dictionary view): dba_flashback_archive , dba_flashback_archive_ts და dba_flashback_archive_tables პირველი გვაჩვენებს არქივების სიას, მეორე დამოკიდებულებას tablespace-სა და არქივს შორის, ხოლო მესამე გვაჩვენებს ცხრილებს რომლებზეც ჩართულია „არქივინგი“.ვნახოთ ჩვენი არქივები:select flashback_archive_name, flashback_archive#, retention_in_days, status from dba_flashback_archive;

Status-ში ეწერება Default თუ არის Default თუ არა და არაფერი.დამოკიდებულება არქივსა და tablespace-ს შორის:select * from dba_flashback_archive_ts;

ჩვენს ცხრილს footballers ჩავურთოთ არქივინგი sys მომხმარებლით:Alter table ika.footballers flashback archive fb_footballers;შეგვიძლია ვნახოთ რომელ ცხრილებს აქვს ჩართული არქივინგი:select * from dba_flashback_archive_tables;

როდესაც მომხმარებელს გამოაქვს ინფორმაცა as of ბრძანებით მან არ იცის მას ეს ინფორმაცია Undo-დან მოაქვს თუ data archive-დან.განვიხილოთ მაგალითი:ჩვენი ცხრილი გამოიყურება შემდეგნაირად:Select * from footballers;

Page 16: Flashback ტექნოლოგია Oracle 11g-ში

წავშალოთ მასში ოთხი ჩანაწერი:Delete from footballers where id in(1,2,3,4);commit;Select * from footballers;

გამოვიტანოთ ინფორმაცია 10 წუთის წინანდელი მდგომარებით:select * from footballers as of timestamp (systimestamp -interval '10' minute);

ჩვენი ყველა ჩანაწერი ადგილზეა, მომხმარებელს შეიძლება ეგონოს რომ ეს ინფორმაცია მოვიდა undo-დან, მაგრამ სინამდვილეში მოვიდა data archive-დან. ჩვენი data archive ინახავს ინფორმაციას 2 წლით, ამიტომ 2 წლის წინ რომ წაგვეშალა ეს ინფორმაცია მაინც შევძლებდით მის ნახვას და რა თქმა უნდა აქედან აღდგენა უკვე მარტივად შეგვეძლება, შემდეგნაირად:insert into footballers(select * from footballers as of timestamp (systimestamp -interval '10' minute))minus(select * from footballers);commit;Flashback data archive-ის მეშვეობით შეგვიძლია აღვადგინოთ truncate-ით წაშლილი ინფორმაციაც კი, განვიხილოთ მაგალითი:ცხრილში footballers არის 5 ჩანაწერი მოვახდინოთ მათი წაშლა truncate-ით.Truncate table footballers;Select * from footballers;

Page 17: Flashback ტექნოლოგია Oracle 11g-ში

შედეგი რა თქმა უნდა არცერთი სტრიქონი აღარ გვაქვს ცხრილში და ცარიელია.

რადგანაც ვიცი რომ დაახლოებით 10 წუთის წინ გავუშვი truncate ვაკეთებ შემდეგს:select * from footballers as of timestamp (systimestamp -interval '10' minute);

აქედან კი აღდგენა როგორც წინაზე გავაკეთეთ ზუსტად ისე მოვიქცევით:insert into footballers(select * from footballers as of timestamp (systimestamp -interval '11' minute))minus(select * from footballers);commit;ჩვენი სტრიქონები რომელიც წავშალეთ truncate ბრძანებით აღდგენილია:Select * from footballers;

Page 18: Flashback ტექნოლოგია Oracle 11g-ში

Flashback Database• Flashback database აბრუნებს ბაზას წარსულში კონკრეტულ SCN(System Change Number) ან დროზე.• ეს წარმოადგენს ალტერნატივას incomplete database recovery-სა.• როდესაც ჩავრთავთ flashback database, რომელიც Default-ად გამორთულია oracle 11g-ში, კეთდება

image-ები შეცვლილი ბლოკების და ინახება flash recovery area-ში, როგორც flashback database log-ები.

• როდესაც მოხდება ლოგიკური დაზიანება და საჭიროა, რომ გავაკეთოთ recovery რაღაც განსაზღვრული დროით წარსულში, მაშინ flashback database log-ებიდან აღდგება ბლოკები იმ დროინდელი როდესაც არ იყო დაზიანება მომხდარი, შემდეგ მოხდება archive და online redo ლოგების roll forward განსაზღვრულ დრომდე.

• Flashback database არის ბევრად სწრაფი ვიდრე ტრადიციული restore და recovery, რადგან ამ დროს არ ხდება მონაცემთა ფაილების (datafile) restore.

• სანამ შეცვლილი ბლოკების image-ები ჩაიწერება flashback database log-ებში, მანამდე იწერება SGA-ში flashback buffer-ში, ხოლო ამის შემდეგ Recovery Writer(RVWR) background პროცესი ჩაწერს ლოგ-ში.

• Flashback database log-ები გამოიყენება წრიულად და გადაეწერება თავზე იმის მიხედვით თუ რა ზომის არის flash_recovery_area და გვაქვს თუ არა guaranteed restore point.

• რომ შევამოწმოთ არის თუ არა ბაზაზე flashback ჩართული: SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ NO• რომ ჩავრთოთ flashback database ჩართული უნდა გვქონდეს flash recovery area, რომელიც ირთვება

პარამეტრებით: db_recovery_file_dest_size და db_recovery_file_dest. ბაზაზე flashback-ის ჩართვა კი არის შემდეგნაირად:

shutdown immediate; startup mount; alter database archivelog; --- თუ არ არის ბაზა archivelog რეჟიმში alter database flashback on; alter database open;

Page 19: Flashback ტექნოლოგია Oracle 11g-ში

• შევამოწმოთ ჩაირთო თუ არა ჩვენი ბაზისთვის flashback• SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES• ინიციალიზაციის პარამეტრი db_flashback_retention_target განსაზღვრავს წუთებში თუ რამდენი

ხანი ეცდება oracle რომ შეინახოს flashback log-ები, მაგრამ არ ნიშნავს რომ აუცილებლად შეინახავს ამდენი ხანი, თუ ახალ ლოგებს დაჭირდებათ ადგილი მაშინ მაინც გადააწერს. „უეჭველი“ შენახვისთვის გამოიყენება guaranteed restore point.

• Flashback database ბრძანება შეიძლება გამოვიყენოთ როგორც SQL-ში ასევე RMAN-ში, მათ შორის არის მცირე სხვაობა რადგან RMAN გვთავაზობს დამატებით შესაძლებლობებს. მაგ: მოვახდინოთ ბაზის გადაწევა უკან (flashback database) log sequence ნომრის მიხედვით.

• მაგალითად თუ გვინდა რომ ჩვენი ბაზა დავაბრუნოთ იმ მდგომარეობაში როგორშიც იყო ერთი საათის წინ ვიქცევით შემდეგნაირად:

shutdown immediate; startup mount; flashback database to timestamp sysdate – (1/24); alter database open resetlogs;• მივაქციოთ ყურადღება რომ ბაზის გახსნა საჭიროა resetlog-ით, ვინაიდან რედო ლოგებში

უნდა მოხდეს ახალი ინფორმაციის გადაწერა და საჭიროა incarnation-ის განულება.• Flashback database-ის გამორთვა: Shutdown immediate; startup mount; alter database flashback off; alter database open;• შეიძლება შევზღუდოდ რომელიმე tablespace რომ მასში შემავალი ბლოკები არ მოხვდეს

flashback log-ებში შემდეგი ბრძანებით: alter tablespace example flashback off;

Page 20: Flashback ტექნოლოგია Oracle 11g-ში

• Tablespace-ის უკან flashback-ში დაბრუნება მოხდება შემდეგნაირად: shutdown immediate; startup mount; alter tablespace example flashback on; alter database open;• Guaranteed restore point-ის შექმნის შემდეგ დარწმუნებით გვეცოდინება რომ ბაზას

დავაბრუნებთ იმ მდგომარეობამდე როგორიც იყო restore point-ის შექმნის დროს, ის შეიძლება გამოვიყენოთ მაგალითად რაიმე რთული ოპერაციის ჩატარების წინ როდესაც არსებობს რისკი რაიმეს გაფუჩების, მაგალითად აპლიკაციის upgrade.

• Create restore point before_app_upgrade guarantee flashback database;• მასზე დავაბრუნებთ შემდეგნაირად: flashback database to restore point before_app_upgrade;• რომ გამოვიყენოთ guaranteed restore point მაშინ ჩვენი ბაზა უნდა აკმაყოფილებდეს შემდეგ

მოთხოვნებს: ინიციალიზაციის პარამეტრი compatible უნდა იყოს 10.2 ან უფრო მაღალი. ბაზა უნდა იყოს არქივირების რეჟიმში (archivelog mode) ხელმისაწვდომი უნდა იყოს არქივირებული ლოგ ფაილები დაწყებული იმ დროიდან როცა

გაკეთდა guaranteed restore point. ბაზაზე კონფიგურირებული უნდა იყოს flash recovery area.• თუ გვაქვს ბაზაში Guaranteed restore point მაშინ უნდა ვაკონტროლოთ flash_recovery area-ს

ზომა რომ არ გაივსოს რადგანაც ავტომატურად არ მოხდება restore point-ების წაშლა.• მონაცემთა ლექსიკონის წარმოდგენით (data dictionary view) V$FLASHBACK_DATABASE_LOG

შეგვიძლია ვაკონტროლოთ flash recovery area.• Restore point-ების ნახვა შეგვიძლია view-თი v$RESTORE_POINT

Page 21: Flashback ტექნოლოგია Oracle 11g-ში

მადლობა!ყურადღებისთვის