Oracle Flashback Data Archive (Total Recall)
Flashback Data Archive (Total Recall) Oracle 11g ilə gələn çox vacib özəlliklərdən biridir. Bu özəllik vasitəsilə vacib cədvəllərinizdə olan məlumatlar üzərində aparılan dəyişiklikləri tarixçə formasında izləyə bilərsiniz. Vacib məlumatlarla işləyən bir çox iş yerlərində bu kimi tələb qoyula bilər. Bir çox proqramçı bu tələbi müxtəlif log cədvəllərinə dəyişiklikləri yazmaqla icra edir. Oracle 11g ilə bu özəlliyin gəlməsi isə proqramçılar tərəfindən icra edilən əlavə işlərin azalması ilə nəticələnir. Flashback Data Archive istifadə etdikdə sizin üçün xüsusi əhəmiyyət kəsb edən cədvəllərə tətbiq edə bilərsiniz. Eyni zamanda dəyişikliklərin saxlanılması üçün müddət müəyyən etmək imkanınız var. Məsələn bazada flashback data archive tətbiq olunan cədvəllərdə əməliyyatlar aparmaq icazəsi olan istifadəçi bilərəkdən və ya bilməyərəkdən cədvəldə hansısa dəyəri dəyişdikdə və ya sildikdə bu texnologiya vasitəsilə cədvəldə mövcud olmalı real məlumatları geri qaytarmaq mümkün olur.
Flashback Data Archive tətbiq olunan zaman baş verən dəyişikliklər FBDA (Flashback Data Archive) arxa fon prosesi vasitəsilə müvafiq tablespacedə saxlanılır.
İndi isə nümunələrlə Flashback Data Archive yaradılmasına, cədvəllərə tətbiq edilməsinə və aparıla biləcək əməliyyatlara baxaq.
Flashback Data Archive üçün tablespace yaradırıq.
CREATE TABLESPACE tbs_fla
DATAFILE ‘D:\APP\KA\ORADATA\ORCL\fla01.DBF’ SIZE 1024M;
İndi isə tablespace üzərində flashback archive yaradırıq.
CREATE FLASHBACK ARCHIVE fla1
TABLESPACE tbs_fla QUOTA 1G RETENTION 1 YEAR;
Quota vasitəsilə flashback archive üçün tablespace üzərində istifadə edilə biləcək həcmi, retention vasitəsilə isə tarixçənin saxlanılacağı müddəti müəyyən edirik.
Yaratdığımız flashback archive-i susmaya görə təyin etmək üçün ALTER FLASHBACK ARCHIVE fla1 SET DEFAULT; əmrindən istifadə edə bilərik.
Flashback archive üçün yeni tablespace yaradaraq əlavə etmək istədikdə ALTER FLASHBACK ARCHIVE fla1 ADD TABLESPACE tbs_fla02; bu əmrdən istifadə edə bilərik. (tbs_fla02 əvəzinə əlavə etmək istədiyiniz tablespace adını əlavə edin)
Flashback archive tərəfindən tablespace üzərində istifadə edilə biləcək həcmi artırmaq üçün ALTER FLASHBACK ARCHIVE fla1 MODIFY TABLESPACE tbs_fla QUOTA 2G; əmrindən istifadə etmək olar. Tablespace üzərində olan həcmdən maksimum istifadə edə bilmək üçün ALTER FLASHBACK ARCHIVE fla1 MODIFY TABLESPACE tbs_fla; əmrindən istifadə etmək kifayətdir.
Flashback archive üzərində tarixçənin saxlanılacağı müddəti artırmaq üçün ALTER FLASHBACK ARCHIVE fla1 MODIFY RETENTION 2 YEAR; əmrindən istifadə etmək olar.
Hər hansı bir tablespace-i flashback archivedən çıxartmaq üçün ALTER FLASHBACK ARCHIVE fla1 REMOVE TABLESPACE tbs_fla02; əmrindən istifadə olunur.
Flashback archive üzərində saxlanılmış bütün tarixçəni təmizləmək üçün ALTER FLASHBACK ARCHIVE fla1 PURGE ALL; əmrindən istifadə olunur.
Eyni zamanda flashback archive üzərində saxlanılmış tarixçədən müəyyən vaxtdan əvvələ olan məlumatları təmizləmək üçün ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP – INTERVAL ’30’ DAY); və hansısa SCN-dən əvvələ olan məlumatları təmizləmək üçün ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE SCN 3586000; əmrindən istifadə edə bilərik.
Flashback archive-i silmək üçün DROP FLASHBACK ARCHIVE fla1; əmrindən istifadə edilməlidir.
Mövcud olan flashback archive haqqında məlumat almaq üçün SELECT * FROM DBA_FLASHBACK_ARCHIVE; sorğusunu işə salmaq kifayətdir. Flashback archive üçün istifadə olunan tablespacelə bağlı məlumat əldə etmək üçün SELECT * FROM DBA_FLASHBACK_ARCHIVE_TS; sorğusundan istifadə edilə bilər.
İndi isə yaradacağımız bir cədvəl üçün flashback archive tətbiq edək.
İlk əvvəl üzərində sınaqlarımızı aparacağımız bir cədvəl yaradaq. Cədvəl yaradarkən flashback archive təyin etmək üçün aşağıdakı scriptdən istifadə edilə bilər. İstifadə edilməsi üçün flashback archive adı qeyd etmədikdə susmaya görə təyin edilmiş flashback archive istifadə edilir.
CREATE TABLE technet.authors
(
id NUMBER,
fname VARCHAR2 (50),
lname VARCHAR2 (50),
bdate DATE
)
FLASHBACK ARCHIVE fla1;
Eyni zamanda mövcud olan cədvələ flashback archive təyin etmək üçün ALTER TABLE TECHNET.USERS FLASHBACK ARCHIVE fla1; əmrindən istifadə edilə bilər. Flashback archive təyin olunmuş cədvəldən flashback archive-in ləğv edilməsi üçün ALTER TABLE TECHNET.USERS NO FLASHBACK ARCHIVE; əmrindən istifadə edilir.
Flashback archive tətbiq olunmuş cədvəllərin siyahısına baxmaq üçün SELECT * FROM DBA_FLASHBACK_ARCHIVE_TABLES; sorğusundan istifadə etmək olar.
Flashback tətbiq etdiyimiz cədvəlimiz üzərində məlumat daxil etmək, yeniləmək və silmək kimi bir neçə əməliyyat aparaq. Cədvələ məlumatlar daxil edək.
INSERT INTO TECHNET.AUTHORS VALUES(1,’ELGÜC’,’YUSİFBƏYLİ’,”);
INSERT INTO TECHNET.AUTHORS VALUES(2,’FƏRHAD’,’KƏRİMOV’,”);
INSERT INTO TECHNET.AUTHORS VALUES(3,’ARAZ’,’AYYUBOV’,”);
INSERT INTO TECHNET.AUTHORS VALUES(4,’TURQUT’,’VƏLİYEV’,”);
INSERT INTO TECHNET.AUTHORS VALUES(5,’ELVİN’,’ƏMİROV’,”);
INSERT INTO TECHNET.AUTHORS VALUES(6,’RÖYAL’,’ƏMRAHOV’,”);
INSERT INTO TECHNET.AUTHORS VALUES(8,’KƏNAN’,’ƏKPƏROV’,”);
COMMIT;
Daha sonra həmin cədvəldə olan sətirlərdən birində yeniləmə aparaq.
UPDATE TECHNET.AUTHORS
SET ID = 17
WHERE ID = 8;
COMMIT;
Yuxarıda qeyd olunan əmri icra etdikdən sonra cədvəlimizə sorğu etdikdə 17 KƏNAN ƏKPƏROV nəticəsi əks olunur. Bir neçə dəqiqə əvvəlki vəziyyətə baxmaq üçün aşağıdakı sorğunu icra etdikdə alacağımız nəticəyə baxaq.
SELECT *
FROM TECHNET.AUTHORS AS OF TIMESTAMP (SYSTIMESTAMP – INTERVAL ‘7’ MINUTE)
WHERE FNAME = ‘KƏNAN’;
8 KƏNAN ƏKPƏROV
Gördüyünüz kimi yuxarıdakı sorğunu istifadə edərək yenilənmədən əvvəlki vəziyyəti görə bilirik. Yenilənmiş dəyəri əvvəlki vəziyyətinə qaytara bilərik.
İndi başqa bir nümunəyə baxaq. Təsəvvür edək ki, kimsə təsadüfən qeyd olunan cədvəldən bütün sətirləri sildi.
DELETE FROM TECHNET.AUTHORS;
COMMIT;
Flashback archivedən istifadə etmək bu zaman işimizi rahatlaşdırır. SELECT * FROM TECHNET.AUTHORS; sorğusunu icra edirik və nəticə 0 göstərir. Bu zaman aşağıdakı sorğunun köməyi ilə bir neçə dəqiqə olan vəziyyətə olan məlumatları yenidən cədvələ əlavə edə bilərik.
INSERT INTO TECHNET.AUTHORS
SELECT *
FROM TECHNET.AUTHORS
AS OF TIMESTAMP TO_TIMESTAMP (‘03.08.2015 01:20:00’, ‘DD.MM.YYYY HH24:MI:SS’);
COMMIT;
Bununla da silinmiş məlumatımızı geri qaytara bilirik.