الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

توضيح كيفية عمل Flashback إلى SCN

مغلق
بدأه IGBSpeed في 1 يوليو 2007 · 3 رد · 2,039 مشاهدة · في قسم إدارة قاعدة البيانات أوراكل
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

SCN

ومعناها

System Changed Number

وهي قراءة الـDataFileHeader أثناء كتابة البيانات ،، وتستخدم لعنونة ومقارنة البيانات من الـControlFiles وَ DataFiles ،،

حتى في عملية الـBackup و Recovery .

للمزيد بإمكانك الإطلاع على الرابط

والآن دعونا نتعرف على الـSCN وفوائده وكيفية الإسترجاع الحقيقية لها ..

بعد الدخول لقاعدة البيانات بالمستخدم Scott نقوم بتنفيذ الأمر التالي :

Alter Table Emp Enable Row Movement;

وبعدها نتصل بمستخدم لديه صلاحية DBِِA لتنفيذ الأمر التالي :

SQL> select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
			   135829659

ونرجع للمستخدم Scott

SQL> select count(*) from emp;

  COUNT(*)
----------
		15

ونضيف سجل جديد :

SQL> insert into emp(empno,ename) values (1333,'IGB');

1 row created.

SQL> commit;

Commit complete.

لاحظ عدد السجلات الآن :

SQL> select count(*) from emp;

  COUNT(*)
----------
		16

والآن لاحظ إسترجاع البيانات إلى SCN سابقة .

SQL> FLASHBACK TABLE EMP TO SCN 135829659;

Flashback complete.

SQL> select count(*) from emp;

  COUNT(*)
----------
		15

أتمنى أن المعلومة وضحت ،،، ؟؟

#2

فقط للتذكير :

إن SCN يتغير كلما تمت عملية Check Point التي تحدث لأسباب متعددة ...

ما أعنيه : لا يجب أن تفكر في SCN لإعادة المعلومات التي قم بتخريبها (عن قصد أو بدونه ) أحد الموظفين لديك ،

فما الحل ؟؟

- في Oralce 10g أصبح Flash Back .

-في الإصدارات كافة : إعادة Backups ..

- إستخدام ملفات archive لإعادة المعلومات المتضررة فقط ....

فقط لإبداء الرأي ...

#3

فقط للتذكير :

اقتباس
إن SCN يتغير كلما تمت عملية Check Point التي تحدث لأسباب متعددة ...

مشكور اخي حسام ولكني قرأت عنها كالتالي بالرابط المذكور أعلاه ،،

اقتباس
The SCN is incremented whenever a transaction commits.

الرابط مرةً أخرى...

اقتباس
ما أعنيه : لا يجب أن تفكر في SCN لإعادة المعلومات التي قم بتخريبها (عن قصد أو بدونه ) أحد الموظفين لديك ،

فما الحل ؟؟

طبعاً لن يكون هناك Flashback إلى بالإصدار الجديد 10g ..

اقتباس
- إستخدام ملفات archive لإعادة المعلومات المتضررة فقط ....

ولكن ماذا إذا كانت قاعدة البيانات تعمل والـ Instances Up & Running ؟؟

وهناك جدول معين تعمل عليه خاصية الـRow movement .

؟؟

اقتباس
فقط لإبداء الرأي ...

نورت الصفحة ،،

الموضوع للمناقشة ،، العلمية،،

post-54955-1183385084_thumb.gif

#4

1- Flash Back موجودة في Oracle 9i و لكنها كانت تعاني من قصور و ليس يجودة oracle 10g .

2- يوجد Package تسمى Log_miner و هي التي تتولى عملية التعمل مع ملفات Redo و تقوم بإستخلاص التعليمات التي نفذها المستخدم حتى عملية Switch Redo :

BEGIN
  sys.DBMS_LOGMNR_D.BUILD('mydata.ORA','D:\oracle');
  sys.DBMS_LOGMNR.ADD_LOGFILE('D:\ORACLE\ORADATA\SBSS\REDO01.LOG',sys.DBMS_LOGMNR.NEW);
  sys.DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => 'D:\oracle\mydata.ORA');
END;
SELECT A.TIMESTAMP,A.USERNAME,A.SQL_REDO,A.SQL_UNDO,A.SESSION_INFO
FROM V$LOGMNR_CONTENTS A
WHERE A.SEG_NAME = 'EMP'
BEGIN
  sys.DBMS_LOGMNR.End_Logmnr; 
END;

Connected to:
Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production
With the Partitioning option
JServer Release 9.0.1.1.1 - Production

SQL> select * from v$log;

	GROUP#	THREAD#  SEQUENCE#	  BYTES	MEMBERS ARC STATUS		   FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------
		 1		  1		 17  104857600		  1 NO  CURRENT				1130088 09-AUG-0
		 2		  1		 14  104857600		  1 NO  INACTIVE				415977 06-AUG-0
		 3		  1		 16  104857600		  1 NO  INACTIVE			   1108051 08-AUG-0
		 4		  1		 15  104857600		  2 NO  INACTIVE			   1087676 07-AUG-0

SQL> delete from scott.emp where deptno = 30;

6 rows deleted.

SQL> commit;

Commit complete.

SQL> select * from v$log;

	GROUP#	THREAD#  SEQUENCE#	  BYTES	MEMBERS ARC STATUS		   FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------
		 1		  1		 17  104857600		  1 NO  CURRENT				1130088 09-AUG-0
		 2		  1		 14  104857600		  1 NO  INACTIVE				415977 06-AUG-0
		 3		  1		 16  104857600		  1 NO  INACTIVE			   1108051 08-AUG-0
		 4		  1		 15  104857600		  2 NO  INACTIVE			   1087676 07-AUG-0

SQL> select * from v$logfile;

3-حتى لا يضيع القارئ فإن SCN هو :

اقتباس
The system change number (SCN) is an important quantifier that the Oracle database uses to keep

track of its state at any given point in time. When you read (SELECT) the data in the tables, you don’t

affect the state of the database, but when you modify, insert, or delete a row, the state of the database

is different from what it was before. Oracle uses the SCN to keep track of all the changes made

to the database over time. The SCN is a logical time stamp that is used by Oracle to order events that

occur within the database. The SCN is very important for several reasons, not the least of which is

the recovery of the database after a crash.

SCNs are like increasing sequence numbers, and Oracle increments them in the SGA. When a

transaction modifies or inserts data, Oracle first writes a new SCN to the rollback segment. The log

writer process then writes the commit record of the transaction immediately to the redo log, and

this commit record will have the unique SCN of the new transaction. In fact, the writing of this SCN

to the redo log file denotes a committed transaction in an Oracle database.

بالتالي فإنك محق فهو يتغير بعد كل عملية Transaction .

و أهميته أنه يبقي جميع ملفات القاعدة متزامنة فعند عملية أي إسترجاع من Backup أو حتى Instance Recovery يتحقق من تطابق الرقم في جميع الملفات (Control File و Data File و Redo ... إلخ ) ...

هذا الموضوع مغلق.

مواضيع مشابهة