फ्लैशबैक डेटा संग्रह निर्दिष्ट डेटाबेस ऑब्जेक्ट्स में लेनदेन संबंधी डेटा परिवर्तनों को स्वचालित रूप से ट्रैक और संग्रहीत करने की क्षमता प्रदान करता है।
विवरण
एक फ्लैशबैक डेटा संग्रह में कई टेबल स्पेस होते हैं और ट्रैक किए गए टेबल के खिलाफ सभी लेनदेन से ऐतिहासिक डेटा संग्रहीत करते हैं। डेटा को आंतरिक इतिहास तालिकाओं पर संग्रहीत किया जाता है। यह पूर्ववत डेटा का दीर्घकालिक भंडारण प्रदान करता है, जिससे पूर्ववत-आधारित फ्लैशबैक संचालन एक विस्तारित अवधि में किया जा सकता है। आंतरिक ऐतिहासिक तालिका पर सख्त सुरक्षा बनाए रखने और ऐतिहासिक डेटा को संक्षिप्त रूप से बनाए रखने के लिए और लंबी अवधि, फ्लैश डेटा आर्काइव एक विकल्प है जो ऐतिहासिक बैकअप को पुनर्स्थापित किए बिना वापस बुलाने में मदद करता है।
निष्पादित करने के लिए आवश्यक विशेषाधिकार
- FlashBACK ARCHIVE administer सिस्टम विशेषाधिकार वाली स्कीमा PL/SQL प्रक्रियाओं के पृथक्करण और पुनर्संयोजन को निष्पादित कर सकती है।
- एक बार तालिका के अलग हो जाने के बाद, सामान्य उपयोगकर्ता डीडीएल और डीएमएल स्टेटमेंट निष्पादित कर सकते हैं यदि उनके पास टेबल पर आवश्यक विशेषाधिकार हैं।
- फ़्लैशबैक आर्काइव एडमिनिस्टर सिस्टम विशेषाधिकार के लिए एक फ्लैशबैक डेटा संग्रह बनाना आवश्यक है।
- फ्लैशबैक डेटा संग्रह बनाने के लिए टेबलस्पेस सिस्टम बनाने का विशेषाधिकार होना चाहिए
- सुनिश्चित करें कि आपके पास टेबल स्पेस में पर्याप्त कोटा है जिसमें ऐतिहासिक जानकारी रहेगी।
संदर्भ जानकारी लेन-देन डेटा के साथ संग्रहीत की जाती है, आपको निम्न पैरामीटर मानों में से एक को पारित करते हुए DBMS_FLASHBACK_ARCHIVE.SET_CONTEXT_LEVEL प्रक्रिया का उपयोग करने की आवश्यकता होती है।
- विशिष्ट:USERENV संदर्भ से केवल मूल ऑडिटिंग विशेषताएँ संग्रहीत की जाती हैं।
- सभी:SYS_CONTEXT फ़ंक्शन के माध्यम से उपयोगकर्ता के लिए उपलब्ध सभी संदर्भ संग्रहीत हैं।
- कोई नहीं:कोई संदर्भ जानकारी संग्रहीत नहीं है।
इस मामले में USERENV और कस्टम संदर्भ मानों को कैप्चर करने के लिए ALL का उपयोग करें।
CONN sys@surya AS SYSDBA
EXEC DBMS_FLASHBACK_ARCHIVE.set_context_level('ALL');
परीक्षण और कार्यान्वयन
निम्नलिखित उदाहरण में, मैं टेबलस्पेस स्तर पर एफडीए को सक्षम कर रहा हूं, और कई टेबलस्पेस के लिए विशिष्ट अवधि के लिए अवधारण सेट कर रहा हूं। साथ ही फ्लैशबैक डेटा संग्रह से डेटा पुनर्प्राप्त करना जिसे अवधारण अवधि के बीच हटा दिया गया है। इरादा एफएडी के साथ ऐतिहासिक डेटा को आसानी से प्राप्त करना है। इस सुविधा को सक्षम किए बिना, हमें ऐतिहासिक डेटा प्राप्त करने के लिए संपूर्ण डेटाबेस को पुनर्स्थापित करना होगा। कुछ ऐसा जो जटिलता को बढ़ाता है वह एक बड़े डेटाबेस सिस्टम का मामला है।
उदाहरण:
• टेबल स्पेस बनाने के लिए कमांड
SQL> CREATE TABLESPACE FBA DATAFILE size 500m autoextend on next 100m ;
टेबलस्पेस बनाया गया।
• डिफ़ॉल्ट फ्लैशबैक डेटा संग्रह (FDA) बनाने के लिए निम्न कमांड चलाएँ
SQL> CREATE FLASHBACK ARCHIVE DEFAULT FLA1 TABLESPACE FBA QUOTA 500M RETENTION 1 YEAR;
फ़्लैशबैक संग्रह बनाया गया।
• गैर-डिफ़ॉल्ट FDA बनाने के लिए निम्न चरण को पूरा करें
SQL> CREATE FLASHBACK ARCHIVE FLA2 TABLESPACE users QUOTA 400M RETENTION 6 MONTH;
फ़्लैशबैक संग्रह बनाया गया।
• बनाए गए FDA की सूची प्राप्त करें
स्वामी_नाम चुनें, 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
dba_flashback_archive से
स्वामी_नाम द्वारा आदेश, flashback_archive_name;
OWNER_NAME FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE# RETENTION_IN_DAYS CREATE_TIME LAST_PURGE_TIME STATUS
SYS FLA1 1 365 16-DEC-2021 19:28:53 16-DEC-2021 19:28:53 DEFAULTSYS FLA2 2 180 16-DEC-2021 19:29:14 16-DEC-2021 19:29:14पी>
• डिफ़ॉल्ट FDA सेट करना और विवरण प्राप्त करना
SQL> ALTER FLASHBACK ARCHIVE FLA1 SET DEFAULT ;
फ्लैशबैक संग्रह बदल गया।
SELECT flashback_archive_name,
flashback_archive#,
tablespace_name,
quota_in_mb
dba_flashback_archive_ts
. से flashback_archive_name;
FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE# TABLESPACE_NAME QUOTA_IN_MB
FLA1 1 FBA 500
FLA2 2 उपयोगकर्ता 400
एसक्यूएल> SELECT *
FROM DBA_FLASHBACK_ARCHIVE_TABLEs
WHERE TABLE_NAME='EMPLOYEES'
AND OWNER_NAME='HR' ;
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME स्थिति
कर्मचारी एचआर FLA1 SYS_FBA_HIST_92593 सक्षम
निम्न परीक्षण करें और देखें कि यह कैसे काम करता है
SQL> वैकल्पिक सत्र सेट NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
सत्र बदल दिया गया।
SQL>SQL> DUA से SYSDATE चुनें;
SYSDATE
2021/12/16 19:39:31
SQL> DUAL से DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER चुनें;
GET_SYSTEM_CHANGE_NUMBER
1964623
आइए हम कर्मचारी टेबल पर रिकॉर्ड और अपडेट को हटाने का प्रयास करें।
SQL> DELETE FROM HR.EMPLOYEES WHERE EMPLOYEE_ID=192;
1 पंक्ति हटाई गई।
एसक्यूएल> प्रतिबद्ध;
प्रतिबद्ध पूर्ण।
एसक्यूएल>एसक्यूएल>एसक्यूएल>एसक्यूएल> UPDATE HR.EMPLOYEES SET SALARY=12000 WHERE EMPLOYEE_ID=168;
कमिट;
UPDATE HR.EMPLOYEES SET SALARY=12500 WHERE EMPLOYEE_ID=168;
कमिट;
UPDATE HR.EMPLOYEES SET SALARY=12550 WHERE EMPLOYEE_ID=168;
COMMIT;1 पंक्ति अपडेट की गई।
SQL> SQL>प्रतिबद्ध पूर्ण।
SQL> SQL>1 पंक्ति अपडेट की गई।
SQL> SQL>प्रतिबद्ध पूर्ण।
SQL> SQL>1 पंक्ति अपडेट की गई।
एसक्यूएल> एसक्यूएल>पी>
प्रतिबद्ध पूर्ण।
- FDA का उपयोग करके डेटा की तुलना करने के लिए चरणों का पालन करें
SQL> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM HR.EMPLOYEES
AS OF TIMESTAMP TO_TIMESTAMP('2021/12/16 19:39:31','YYYY/MM/DD HH24:MI:SS')
MINUS
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM HR.EMPLOYEES;
EMPLOYEE_ID FIRST_NAME LAST_NAME
192 Sarah Bell
यहां आप एफडीए से हटाई गई पंक्ति देख सकते हैं। आप डेटा को VERSION_STARTSCN छद्म कूटों के साथ भी प्राप्त कर सकते हैं।
• दिए गए SCN वाला डेटा
SQL> COL VERSIONS_STARTTIME FORMAT A40
SELECT VERSIONS_STARTTIME,
VERSIONS_STARTSCN,
FIRST_NAME,
LAST_NAME,
SALARY
FROM HR.EMPLOYEES VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2021/12/16 19:39:31','YYYY/MM/DD HH24:MI:SS') AND
SYSTIMESTAMP
WHERE
EMPLOYEE_ID=168;
VERSIONS_STARTTIME VERSIONS_STARTSCN FIRST_NAME LAST_NAME वेतन
16-DEC-21 07.40.08.000000000 PM 1964648 लिसा ओज़र 1250016-DEC-21 07.40.08.000000000 PM 1964646 लिसा ओज़र 12000लिसा ओज़र 1150016-DEC-21 07.40.08.000000000 PM 1964650 लिसा ओज़र 12550
आप वेतन कॉलम में समान डेटा के लिए अलग-अलग संस्करण के साथ पंक्ति देख सकते हैं क्योंकि हमने वेतन कॉलम पर 500 मूल्य अंतर के साथ अद्यतन विवरण किया है।
डीडीएल स्टेटमेंट के लिए प्रतिबंध और समाधान (रिकॉर्डिंग के विकास को कैप्चर करें)
असंबद्ध / सहयोगी
अधिक जटिल डीडीएल के लिए - अपग्रेड, स्प्लिट टेबल, आदि - डिससोशिएट और एसोसिएट पीएल/एसक्यूएल प्रक्रियाओं का उपयोग निर्दिष्ट टेबल पर फ्लैशबैक डेटा आर्काइव को अस्थायी रूप से अक्षम करने के लिए किया जा सकता है। संबद्ध प्रक्रिया एसोसिएशन के बाद स्कीमा अखंडता को लागू करती है:आधार तालिका और इतिहास तालिका स्कीमा समान होनी चाहिए। असंबद्ध और सहयोगी प्रक्रियाओं के लिए FLASHBACK ARCHIVE administer विशेषाधिकार की आवश्यकता होती है।
o कॉलम जोड़ें, हटाएं, नाम बदलें या संपादित करें एक विभाजन को हटाएं या छोटा करें
o तालिका का नाम बदलें या काट-छाँट करें (FBA Delete वाली तालिका ORA- 55610 त्रुटि के साथ विफल हो जाती है)
o कुछ परिवर्तन (उदा.:MOVE/SPLIT/CHANGE PARTITIONS) विधियों को करने के लिए DBMS_FLASHBACK_ARCHIVE पैकेज की आवश्यकता होती है।
निम्न उदाहरण में आप देख सकते हैं कि हम ऐतिहासिक डेटा के लिए FDA तालिकाओं पर DDL गतिविधि कैसे कर सकते हैं। एक डेमो टेबल बनाना EMPLOYEES_FBA बाधाओं को जोड़ना।
SQL> CREATE TABLE HR.EMPLOYEES_FBA AS SELECT * FROM HR.EMPLOYEES;
तालिका बनाई गई।
SQL> ALTER TABLE HR.EMPLOYEES_FBA ADD CONSTRAINT employee_pk PRIMARY KEY (employee_id);
तालिका बदल दी गई।
FDA को डेमो टेबल पर सक्षम करें और कुछ रिकॉर्ड अपडेट करें।
SQL> ALTER TABLE HR.EMPLOYEES_FBA FLASHBACK ARCHIVE;
तालिका बदल दी गई।
SQL> UPDATE HR.EMPLOYEES_FBA SET SALARY=10000 WHERE EMPLOYEE_ID=203;
1 पंक्ति अपडेट की गई।
COMMIT;
प्रतिबद्ध पूर्ण।
तालिका बाधाओं को अक्षम और सक्षम करते समय, ORA-55610 प्रांप्ट ऐतिहासिक ट्रैक डेटा तालिका को रोकता है
SQL> ALTER TABLE HR.EMPLOYEES_FBA DISABLE CONSTRAINT EMPLOYEE_PK;
तालिका बदल दी गई।
SQL> SQL> ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK;
ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK
*पंक्ति 1 पर त्रुटि:ORA-55610:इतिहास-ट्रैक की गई तालिका पर अमान्य DDL विवरण
अब जब हमें ये प्रतिबंध मिल रहे हैं तो कैसे आगे बढ़ें
*नोट:टेबल पर किसी भी बाधा को जोड़ने (प्राथमिक कुंजी, अद्वितीय कुंजी, विदेशी कुंजी या चेक बाधा) के कारण आप ऐतिहासिक डेटा को स्वचालित रूप से पढ़ने में असमर्थ होंगे, बिना सीधे अंडरलाइनिंग SYS_FBA_ संग्रह तालिकाओं तक पहुंच के।**आपको यह करने की आवश्यकता है बाधा प्रबंधन और तालिकाओं की ऐतिहासिक ट्रैकिंग से बहुत सावधान रहें*
SQL> SELECT * FROM DBA_FLASHBACK_ARCHIVE_TABLES WHERE TABLE_NAME='EMPLOYEES_FBA';
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME स्थिति
EMPLOYEES_FBA HR FLA1 SYS_FBA_HIST_93946 सक्षम
DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA की मदद से हम इसे हासिल कर सकते हैं।
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA('HR','EMPLOYEES_FBA');
PL/SQL प्रक्रिया सफलतापूर्वक पूरी हुई।
अब फिर से बाधाओं को सक्षम करने का प्रयास करें
SQL> ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK;
तालिका बदल दी गई।
अब DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA की मदद से प्रतिबंध को फिर से सक्षम करें
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('HR','EMPLOYEES_FBA');
PL/SQL प्रक्रिया सफलतापूर्वक पूरी हुई।
एक विशिष्ट समय के लिए ऐतिहासिक डेटा को शुद्ध करना। SQL> ALTER FLASHBACK ARCHIVE FLA1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);
फ्लैशबैक संग्रह बदल गया।
FDA अक्षम करें
SQL> ALTER TABLE HR.EMPLOYEES NO FLASHBACK ARCHIVE;
SQL> ALTER TABLE HR.EMPLOYEES_FBA NO FLASHBACK ARCHIVE;
FDA छोड़ना
SQL> DROP FLASHBACK ARCHIVE FLA1;
निष्कर्ष
फ्लैशबैक डेटा आर्काइव फीचर डेटा इतिहास को प्रबंधित और बनाए रखने के लिए एक केंद्रीकृत और एकीकृत इंटरफ़ेस प्रदान करता है, और स्वचालित, नीति आधारित प्रबंधन जो डेटाबेस प्रशासन के लिए नाटकीय समाधान प्रदान करता है जहां इस ऐतिहासिक डेटा की ट्रैकिंग नए नियमों का पालन करने या व्यावसायिक आवश्यकताओं को बदलने के लिए अनुकूल है।
हमारे विशेषज्ञों को आपकी डेटाबेस यात्रा में आपका मार्गदर्शन करने दें।
कोई टिप्पणी करने या प्रश्न पूछने के लिए प्रतिक्रिया टैब का उपयोग करें। आप हमारे साथ बातचीत भी शुरू कर सकते हैं।