21 Şubat 2008 Perşembe

STARTUP ve SHUTDOWN

Merhaba,

Bu yazımda Oracle'ın nasıl kapatılıp açılması gerektiğinden biraz bahsedeceğim. Hazır yeri gelmiş iken, ben yazılarımda Oracle'a tamamen uzak olan insanların da anlayabileceği türden yazmaya çalışıyorum. Daha da sığ olarak anlatmamı isteyenler mail atabilirler. Genelde koddan biraz uzak durmaya çalışmaktayım.

Öncelikli olarak, STARTUP ile başlayalım. Startup, Oracle'da "Instance"ı ve veritabanını açmaya yarayan komuttur. Çeşitli durumlarda ve şekillerde instance'ın öncelikli olarak açılabilmesi için sonuna ek komutlar alabilir.
Başlamadan küçük bir hatırlatma. "select open_mode from v$database" dersek veritabanının hangi aşamada açıldığını görebiliriz.

Kapalı durumda olan veritabanına bir SYSDBA kullanıcısı ile bağlanalım.
C:\> SQLPLUS / AS SYSDBA
Connected to an idle instance.
SQL> STARTUP; --> Şuan veritabanı öncelikle "NOMOUNT" moduna geçer. Ardından MOUNT ve son olarak OPEN.
STARTUP'dan sonra gelen prefixleri sonra detaylı olarak inceleyeceğiz.

NOMOUNT AŞAMASI: Oracle giriş parametre dosyasını okuyor (INITORA, SPFILE). Veritabanının hangi parametrelerle ve boyutlarla açılmasını gerektiğini algılar. Bu durumda Oracle Background Process'leri de çalıştırılır.
Bu kısmı "STARTUP QUIET" diyerek görmeden geçebiliriz.
SQL> STARTUP NOMOUNT QUIET;
ORACLE instance started.
Veritabanımız şuan da nomount modunda bekliyor. Henüz veritabanını açmadık.

MOUNT AŞAMASI: Veritabanı bu aşamada Control dosyalarını okur. Bu dosyalardan, datafile gibi kritik dosyaların yerlerini algılar fakat henüz açmaz. Bu yerlerin algılanmasıda tamamlandıktan sonra artık veritabanımız BG Process'leri ve Control dosyaları ile açılmaya hazırdır.
SQL> ALTER DATABASE MOUNT; -VEYA- STARTUP MOUNT; --> Veritabanımız nomount aşamasında ise ilkini, değilse ikincisini yazabiliriz.
Database mounted.

OPEN AŞAMASI: Şuan veritabanı datafile'lara girişini yaptı ve kullanıma hazır hale getirdi. Kullanıcılar bağlanabilir durumda.
SQL> ALTER DATABASE OPEN; -VEYA- STARTUP; --> Veritabanımız mount aşamasında ise ilkini, değilse ikincisini yazabiliriz.
Database opened.

Özetlemek gerekirse;

1) STARTUP; --> Önce nomount sonra mount ve son olarak open aşamalarını veritabanını taşır (eğer herhangi bir sorun ile karşılaşılmazsa).
2) STARTUP NOMOUNT; --> Veritabanını nomount aşamasına getirir.
MOUNT; --> Veritabanını mount aşamasına alır.
(Default)OPEN; --> 1'inci durum ile aynıdır.

Bunlara ek olarak ise;

1) STARTUP [MOUNT/NOMOUNT/OPEN] RESTRICT; --> Veritabanını restricted modda açmamıza yarar. Yetkili kullanıcılar dışında hiçbir kullanıcı bağlamaz. RESTRICTED SESSION yetkisi olanlar bağlanabilir. Açık veritabanında ise restricted session'ı şu şekilde açıp kapatabiliriz.
SQL> ALTER DATABASE ENABLE RESTRICTED SESSION;
SQL> ALTER DATABASE DISABLE RESTRICTED SESSION;
2) STARTUP [MOUNT/NOMOUNT/OPEN] FORCE; --> Veritabanını "SHUTDOWN ABORT" yaparak kapatır, istenilen şekilde açar. Bu şekilde açılan veritabanının herhangi bir başlangıç paramatresi olmasına gerek yoktur.
3) STARTUP [MOUNT/NOMOUNT/OPEN] EXCLUSIVE; --> Öncelikle belirtelim, startup mount exclusive deprecated edildi ve desteklenmiyor. Bu komut ise veritabanının sadece bu session tarafından mount veya open edilebileceğini gösterir.

Sırada SHUTDOWN komutları var. Detaylı olarak inceleyelim.

C:\> SQLPLUS / AS SYSDBA
Connected to:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining options

Şuan da bağlıyız. Yapabileceğimiz SHUTDOWN olanakları şunlardır;

1) SHUTDOWN [NORMAL]; --> Veritabanını "temiz" şekilde kapatır. Bütün kullanıcıların bağlı oldukları sessionlardan çıkmalarını bekler. Ardından instance'ı ve veritabanını güvenli bir şekilde kapatır. Bu sırada buffer_cache'de yazılmayı bekleyen dirty buffer'lar datafile'lara yazılır. Temiz olarak veritabanını kapatılır. Genelde kullanılmayan bir kapatma metodudur. Yeni kullanıcı kabul edilmez.
2) SHUTDOWN IMMEDIATE; --> Veritabanına bağlı olan bütün kullanıcıları atar ve commit edilmemiş işlemleri rollback yapar. Yeni kullanıcıların girmesini engeller. Shutdown normal'de olduğu gibi datafile'lara veriler yazılır. Veritabanı güvenle ve temiz olarak kapatılır.
3) SHUTDOWN ABORT; --> Veritabanını kapatmanın en hızlı ve aynı zamanda veritabanı için en zor yoludur. Veritabanı anında kapatılır ve bütün işlemler sonra ki Startup'ı bekler. Aslında bu kapatma türü Oracle'ı fazla etkilemez. Bu yöntem kesinkle ilk olarak kullanılacak yöntem olmamalıdır. Temiz bir kapatma metodu Oracle'da önemli rol oynar.
4) SHUTDOWN TRANSACTIONAL; --> Bu kapatma yöntemi ise bazı durumlar çok kritik olarak kullanılabilir. Önemli bir işlem yapılırken girilecek bir shutdown immediate komutu update veya insert yapan kişinin bütün işlemlerini rollback edebilir. Eğer tek kullanıcı ile çalışıyorsak ve işlemini bitirmesini bekliyorsak bu kapatma yöntemini uygulamalıyız. Kullanıcılar COMMIT ettikleri zaman veritabanından atılırlar ve temiz kapatma gerçekleşir. Commit edilmeyen sessionları bekleriz, bu komut ile. Yeni kullanıcılar kabul edilmez.

Genel olarak Oracle veritabanını bu komutlar ile kapatıp açabiliriz. Bu seçimleri yapmak tamamen DBA'in sorumluluğundadır. Hangi durumda hangi metodun kullanılacağına iyi karar vermek gerekebilir.

İyi çalışmalar,

Ogan

2 yorum:

Tonguç dedi ki...

çoğu yoğun oltp veritabanlarında checkpoint atıp abort ile kapama yapma en çok kullanılan yöntem, immediate kapatma talebi saatlerce sürebilir :)

ama özellikle soğuk yedekleme öncesinde veritabanın temiz kapandığından emin olunmalı tabi, yukardaki yöntem ile kapatılan bir veritabanını açar aöçmaz tekrar immediate ile kapama yapılır, bu adımlardan listener kapatılarak yeni giriş talepleri de engellenir.

Concepts guide içinde bir konu açma ve kapamaya ayrılmış;
http://tinyurl.com/2z5d3u

ogan dedi ki...

Teşekkür ederim hocam, bilgi için.
Kolay gelsin

Takip et: @oganozdogan