Oracle SCN-System Change Number

Oracle SCN-System Change Number

Oracle’ın sıralı bir şekilde artırdığı unique numaradır,her SCN’in bir zaman karşılığı vardır.Ama bazı işlemlerde tarih kullanmaktansa SCN kullanmak pratiklik sağlar.Ayrıca oracle kendi iç takibinde SCN kullanır.Her transactiondan sonra SCN numarası 1 artırılır ve bu şekildedevam eder,sadece kullanıcı transactionları degil oracle system transactionlarından sonra da bu işlem yapılır.Yani kullanıcılar
transaction yapmadı diye SCN değişmez diyemeyiz.

Oracle veri tutarlılığı ve bütünlüğü için SCN’i kullanır ve bu bilgiyi controlfile,datafile header ve redo kayıtlarına yazar.Database kapanırken NORMAL,TRANSACTIONAL veya IMMEDIATE modla kapatılmışsa datafile header SCN, redo log SCN ve controlfile SCN’leri aynı değeri gösterir ve tutarlı kapanmıştır.Ama SHUTDOWN ABORT ile kapatılmışsa tutarsızdır ve açılışta recover gerektirir.Bu recover’ı bizim yerimize SMON(system monitor process) otomatik olarak yapar.İşlenmemiş redologları datafile’lara işler datafile SCN,controlfile SCN redolog SCN eşitler sonra instance ayağa kalkar.Tutarlı kapanmamış database’in yavaş açılma sebebidir.Aynı şekilde SHUTDOWN ABORT işlemi çok hızlıdır,redologları datafile’a yazıp  SCN eşitlemesi yapmaz ama database açılırken yavaş açılır.Bir database ne kadar hızlı kapanırsa o kadar yavaş açılır 🙂

Mevcut SCN numarasını bulmak:

SQL> SELECT CURRENT_SCN FROM V$DATABASE;

CURRENT_SCN
———–
818898676

ya da

SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

GET_SYSTEM_CHANGE_NUMBER
————————
818898888

SCN’i zamana çevirmek:
SQL> select scn_to_timestamp(818898888) as timestamp from dual;

TIMESTAMP
——————————-
27-MAR-12 09.16.53.000000000 PM

Zamanı SCN’e çevirmek:
SQL> select timestamp_to_scn(to_timestamp(’27/03/2012 21:00:54′,’DD/MM/YYYY HH24
:MI:SS’)) as scn from dual;

SCN
———-
818896234

SCN Kullandığımız işlemler:
Database incomplete recovery işlemlerinde, flashback işlemlerinde kullanırız.Flashback ve recovery işlemlerini ayrıca yazacağım,aşağıdaki kodlar sadece SCN kullanımına örnek teşkil etmesi amacıyla..

SCN’e göre database recover:
RMAN> recover database until SCN 34527024;

Zamana göre database recover:
RMAN> recover database until time ‘Mar 27 2012 20:55:45’

Flashback Query:
SQL> SELECT * FROM IFSAPP.CUSTOMER_ORDER_TAB AS OF SCN 818896234;

Flashback Table:
SQL> FLASHBACK TABLE  IFSAPP.CUSTOMER_ORDER_TAB TO SCN 818896874;

Flashback Database:
SQL> FLASHBACK DATABASE TO SCN 23856965501;

Faydalı olması dileğiyle..

Tagged: , , , , ,

Comments: 3

  1. amine 31 Aralık 2014 at 14:15 Reply

    Teşşekkürler aradığım bişeyin cevabını bulmak güzel oldu!

  2. […] özellikle hem zamana göre hem de scn (system change number)  numarasına göre tabloyu geri döndürebiliriz.Her ikisiyle de örnekler yapalım. Öncelikle […]

  3. yorumcu 25 Ekim 2017 at 09:58 Reply

    güzel paylaşım olmuş

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir