ফ্ল্যাশব্যাক ডেটা সংরক্ষণাগার নির্দিষ্ট ডাটাবেস অবজেক্টে স্বয়ংক্রিয়ভাবে লেনদেন সংক্রান্ত ডেটা পরিবর্তনগুলি ট্র্যাক এবং সংরক্ষণাগার করার ক্ষমতা প্রদান করে৷
বিবরণ
একটি ফ্ল্যাশব্যাক ডেটা সংরক্ষণাগার একাধিক টেবিলস্পেস নিয়ে গঠিত এবং ট্র্যাক করা টেবিলের বিরুদ্ধে সমস্ত লেনদেনের ঐতিহাসিক ডেটা সঞ্চয় করে। তথ্য অভ্যন্তরীণ ইতিহাস টেবিলে সংরক্ষণ করা হয়৷ এটি পূর্বাবস্থায় ডেটার দীর্ঘমেয়াদী সঞ্চয়স্থান প্রদান করে, যা পূর্বাবস্থায় ভিত্তিক ফ্ল্যাশব্যাক অপারেশনগুলিকে একটি বর্ধিত সময়ের জন্য সঞ্চালিত করার অনুমতি দেয়৷ অভ্যন্তরীণ ঐতিহাসিক টেবিলে কঠোর সুরক্ষা বজায় রাখতে এবং সংক্ষিপ্ত সময়ের জন্য ঐতিহাসিক ডেটা বজায় রাখতে এবং দীর্ঘ সময়ের জন্য, ফ্ল্যাশ ডেটা আর্কাইভ একটি বিকল্প যা ঐতিহাসিক ব্যাকআপ পুনরুদ্ধার না করেই পুনরায় কল করতে সাহায্য করে।
চালানোর জন্য প্রয়োজনীয় বিশেষাধিকার
- ফ্ল্যাশব্যাক আর্কাইভ অ্যাডমিনিস্টার সিস্টেম বিশেষাধিকার সহ স্কিমা PL/SQL পদ্ধতির বিচ্ছিন্নকরণ এবং পুনঃসংযোগ কার্যকর করতে পারে৷
- একবার একটি টেবিল বিচ্ছিন্ন হয়ে গেলে, সাধারন ব্যবহারকারীরা DDL এবং DML স্টেটমেন্ট সম্পাদন করতে পারে যদি তাদের টেবিলে প্রয়োজনীয় সুবিধা থাকে।
- ফ্ল্যাশব্যাক আর্কাইভ অ্যাডমিনিস্টার সিস্টেমের বিশেষাধিকার প্রয়োজন একটি ফ্ল্যাশব্যাক ডেটা সংরক্ষণাগার তৈরি করতে৷
- একটি ফ্ল্যাশব্যাক ডেটা সংরক্ষণাগার তৈরি করতে একজনের অবশ্যই CREATE TABLESPACE সিস্টেম বিশেষাধিকার থাকতে হবে
- যে টেবিলস্পেসে ঐতিহাসিক তথ্য থাকবে তাতে আপনার যথেষ্ট কোটা আছে তা নিশ্চিত করুন।
প্রসঙ্গ তথ্য লেনদেন ডেটার সাথে সংরক্ষণ করা হয়, আপনাকে DBMS_FLASHBACK_ARCHIVE.SET_CONTEXT_LEVEL পদ্ধতি ব্যবহার করতে হবে, নিম্নলিখিত প্যারামিটার মানগুলির মধ্যে একটি পাস করে৷
- সাধারণ:USERENV প্রসঙ্গ থেকে শুধুমাত্র মৌলিক অডিটিং বৈশিষ্ট্যগুলি সংরক্ষণ করা হয়৷
- সমস্ত:SYS_CONTEXT ফাংশনের মাধ্যমে ব্যবহারকারীর কাছে উপলব্ধ সমস্ত প্রসঙ্গ সংরক্ষণ করা হয়৷
- কোনও নয়:কোন প্রসঙ্গ তথ্য সংরক্ষণ করা হয় না।
এই ক্ষেত্রে, USERENV এবং কাস্টম প্রসঙ্গ মানগুলি ক্যাপচার করতে ALL ব্যবহার করুন৷
৷
CONN sys@surya AS SYSDBA
EXEC DBMS_FLASHBACK_ARCHIVE.set_context_level('ALL');
পরীক্ষা এবং বাস্তবায়ন
নিম্নলিখিত উদাহরণে, আমি টেবিলস্পেস স্তরে এফডিএ সক্ষম করছি এবং একাধিক টেবিলস্পেসের জন্য নির্দিষ্ট সময়ের জন্য ধারণ সেট করছি। এছাড়াও ফ্ল্যাশব্যাক ডেটা সংরক্ষণাগার থেকে ডেটা পুনরুদ্ধার করা যা ধরে রাখার সময়কালের মধ্যে মুছে ফেলা হয়েছে। উদ্দেশ্য হল FAD এর মাধ্যমে ঐতিহাসিক তথ্য সহজে পাওয়া। এই বৈশিষ্ট্যটি সক্রিয় না করে, ঐতিহাসিক তথ্য পেতে আমাদের সমগ্র ডাটাবেস পুনরুদ্ধার করতে হবে। জটিলতা বাড়ায় এমন কিছু একটি বড় ডাটাবেস সিস্টেমের ক্ষেত্রে।
উদাহরণ:
• একটি টেবিলস্পেস তৈরি করার জন্য কমান্ড
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#,
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
থেকেমালিক_নাম, ফ্ল্যাশব্যাক_আর্কাইভ_নাম;
দ্বারা অর্ডার করুনOWNER_NAME FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE# RETENTION_IN_DAYS CREATE_TIME LAST_PURGE_TIME স্থিতি
SYS FLA1 1 365 16-DEC-2021 19:28:53 16-DEC-2021 19:28:53 ডিফল্টসিস FLA2 2 180 16-ডিইসি-2021 19:29:14 16-ডিসি-19:19:20 পি>
• ডিফল্ট এফডিএ সেট করুন এবং বিস্তারিত পান
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
SQL> SELECT *
FROM DBA_FLASHBACK_ARCHIVE_TABLEs
থেকে WHERE TABLE_NAME='EMPLOYEES'
AND OWNER_NAME='HR' ;
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME স্থিতি
কর্মচারী HR FLA1 SYS_FBA_HIST_92593 সক্ষম
নিম্নলিখিত পরীক্ষাটি করুন এবং এটি কীভাবে কাজ করে তা দেখতে
SQL> পরিবর্তন সেশন সেট NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
সেশন পরিবর্তিত।
SQL>SQL> DUA থেকে সিলেক্ট সিলেক্ট করুন;
SYSDATE
2021/12/16 19:39:31
SQL> DBMS_FLASHBACK নির্বাচন করুন। DUAL থেকে GET_SYSTEM_CHANGE_NUMBER;
GET_SYSTEM_CHANGE_NUMBER
1964623
আসুন আমরা কর্মীদের টেবিলে রেকর্ড এবং আপডেট মুছে ফেলার চেষ্টা করি৷
SQL> DELETE FROM HR.EMPLOYEES WHERE EMPLOYEE_ID=192;
1 সারি মুছে ফেলা হয়েছে৷
৷SQL> কমিট;
প্রতিশ্রুতি সম্পূর্ণ।
SQL>SQL>SQL>SQL> 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;
কমিট;1 সারি আপডেট করা হয়েছে।
SQL> SQL>কমিট সম্পূর্ণ।
SQL> SQL>1 সারি আপডেট করা হয়েছে।
SQL> SQL>কমিট সম্পূর্ণ।
SQL> SQL>1 সারি আপডেট করা হয়েছে।
SQL> SQL>
প্রতিশ্রুতি সম্পূর্ণ।
- 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
এখানে আপনি FDA থেকে মুছে ফেলা সারি দেখতে পারেন। আপনি VERSION_STARTSCN pseudcoumns
দিয়ে ডেটাও পেতে পারেন• প্রদত্ত 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 পিএম 1964648 লিসা ওজার 1250016-DEC-21 07.40.08.000000000 পিএম 1964646 লিসা 12000 লিসা ওজার 115000016-DEC-21 07.40.08.08.08.008.0000000
আপনি বেতন কলামে একই ডেটার জন্য ভিন্ন সংস্করণ সহ সারিটি দেখতে পারেন কারণ আমরা 500 মানের পার্থক্য সহ বেতন কলামে আপডেট বিবৃতি দিয়েছি।
ডিডিএল স্টেটমেন্টের জন্য সীমাবদ্ধতা এবং ওয়ার্কআরাউন্ড (একটি রেকর্ডিংয়ের বিবর্তন ক্যাপচার করুন)
ডিসোসিয়েট / অ্যাসোসিয়েট৷
আরও জটিল DDL - আপগ্রেড, বিভক্ত টেবিল, ইত্যাদির জন্য - ডিসাসোসিয়েট এবং অ্যাসোসিয়েট PL/SQL পদ্ধতিগুলি নির্দিষ্ট টেবিলে অস্থায়ীভাবে ফ্ল্যাশব্যাক ডেটা সংরক্ষণাগার নিষ্ক্রিয় করতে ব্যবহার করা যেতে পারে। অ্যাসোসিয়েট পদ্ধতি অ্যাসোসিয়েশনের পরে স্কিমা অখণ্ডতা প্রয়োগ করে:বেস টেবিল এবং ইতিহাস টেবিল স্কিমা একই হতে হবে। ডিসসোসিয়েট এবং অ্যাসোসিয়েট পদ্ধতির জন্য ফ্ল্যাশব্যাক আর্কাইভ অ্যাডমিনিস্টার বিশেষাধিকার প্রয়োজন৷
o একটি কলাম যোগ, মুছুন, পুনঃনামকরণ বা সম্পাদনা করুন একটি পার্টিশন মুছুন বা ছাঁটাই করুন
o একটি টেবিলের নাম পরিবর্তন করুন বা ছাঁটাই করুন (এফবিএ ডিলিট সহ একটি টেবিল ত্রুটি 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;
টেবিল তৈরি করা হয়েছে৷
৷
এসকিউএল> ALTER TABLE HR.EMPLOYEES_FBA ADD CONSTRAINT employee_pk PRIMARY KEY (employee_id);
টেবিল পরিবর্তিত।
ডেমো টেবিলে FDA সক্ষম করুন এবং কিছু রেকর্ড আপডেট করুন৷
এসকিউএল> 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 পদ্ধতি সফলভাবে সম্পন্ন হয়েছে৷
৷
একটি নির্দিষ্ট সময়ের জন্য ঐতিহাসিক ডেটা শুদ্ধ করা৷৷ এসকিউএল> ALTER FLASHBACK ARCHIVE FLA1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);
ফ্ল্যাশব্যাক সংরক্ষণাগার পরিবর্তিত।
FDA নিষ্ক্রিয় করুন
৷
এসকিউএল> ALTER TABLE HR.EMPLOYEES NO FLASHBACK ARCHIVE;
এসকিউএল> ALTER TABLE HR.EMPLOYEES_FBA NO FLASHBACK ARCHIVE;
FDA বাদ দেওয়া হচ্ছে
SQL> DROP FLASHBACK ARCHIVE FLA1;
উপসংহার
ফ্ল্যাশব্যাক ডেটা আর্কাইভ বৈশিষ্ট্যটি ডেটা ইতিহাস পরিচালনা এবং ধরে রাখার জন্য একটি কেন্দ্রীভূত এবং সমন্বিত ইন্টারফেস প্রদান করে, এবং স্বয়ংক্রিয়, নীতি ভিত্তিক ব্যবস্থাপনা যা ডাটাবেস প্রশাসনের জন্য নাটকীয় সমাধান প্রদান করে যেখানে এই ঐতিহাসিক ডেটার ট্র্যাকিং নতুন নিয়ম মেনে চলতে বা পরিবর্তনশীল ব্যবসায়িক প্রয়োজনের সাথে খাপ খাইয়ে নেওয়ার জন্য।
আমাদের বিশেষজ্ঞদের আপনার ডাটাবেস যাত্রায় আপনাকে গাইড করতে দিন।
কোনো মন্তব্য করতে বা প্রশ্ন জিজ্ঞাসা করতে প্রতিক্রিয়া ট্যাব ব্যবহার করুন। আপনি আমাদের সাথে একটি কথোপকথনও শুরু করতে পারেন৷
৷