|
|
|
Turkcell Staj Günlüğü - 5: Startup, Shutdown
|
Category: SQL-Oracle-PL/SQL
Date: 13.07.2007 10:42:38
|
Turkcell'de 12 hafta sürecek olan stajımızın 2. haftasına başladık 9 Temmuz'da, bu makalede ise 9 ve 10 Temmuz günlerinde öğrendiklerimizi aktaracağım.
Bu hafta bazı ufak tefek sıkıntlardan dolayı, pazartesi ve salı günkü sunumlar, normal sunum programımızın dışında gerçekleşti. Tonguç bey bütün yoğunluğuna rağmen bizi yanlız bırakmayarak sohbet tadında güzel sunumlar yaptı, bir çok farklı konu üzerinde durduk. Concepts Guide'dan Chapter 6, 7, ve 12 üzerine biraz konuştuk.
Bu hafta benim açımdan çok yoğun geçtiği için blog entry'ler de biraz gecikti. Pazartesi sabahı biraz vaktim oldu entry hazırlamaya, fakat o da yarım kaldı. Salı günü ise laptopumun şarjını doldurmayı unuttuğum için, masaüstü bilgisayarda Oracle'ı kurcalamak zorunda kaldım :) Eğer bir aksilik olmazsa haftaya salı günü ufak bir performans sunumu yapacağım, "Imlicit vs. Explicit Cursors" hakkında, fakat program biraz sarktığı için belki ertelenir. Biraz ona bakayım dedim, öğleden sonra kendimi tkprof'un içinde bulmuştum :)
Tonguç bey'in sunumlarından aldığım bazı notları paylaşacağım bu makalede:
• Oracle instance'ı şu dört durumdan birinde olabilir: CLOSED, UNMOUNT, MOUNT, OPEN.
CLOSED MODE, instance'ın kapalı olduğu moddur. Bu durumda sadece sysdba olarak bağlanarak instance açılabilir. Instance'ın açılabilmesi için, initialization parameter dosyası veya server parameter dosyası(SPFILE) okunur. Bu dosyalar instance ve database ile ilgili parametereleri içerir. UNMOUNT MODE, instance'ın açılmış, fakat database'in mount edilmemiş durumudur. SPFILE veya initialization parameter file okunur, fakat control dosyaları okunmaz. Control dosyalarımızla ilgili bir problemimiz varsa, instance'ımızı bu mode'da başlatıp problemimizi çözebiliriz.
MOUNT MODE, instance açılmış, database mount edilmiş, fakat database açılmamış durumudur. Mount etmek, database'i o instance ile ilişkilendirmek olarak düşünülebilir. Oracle, database'e ait bilgiler (datafileların konumu, redolog dosyalarının konumu vs.) içeren control dosyasını okuyarak database'i mount eder. OPEN MODE,
herşeyin açık, database'in ayakta olduğu mode'dur. Redolog dosyaları ve datafile'lar okunur. Database, bir önceki zamanda anormal bir şekilde sonlanmışsa instance recovery yapılır, undo tablespace edinilir.
Database'in her durumunu örneklemek için aşağıdaki kod parçasını çalıştırdım:
C:\oraclexe\app\oracle\admin\XE\udump>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Cum Tem 13 09:17:54 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Enter user-name: sys as sysdba
Enter password:
Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> quit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Produ
ction
Açık bir instance'da olduğum için önce kapattım. Şu anda instance'ımız CLOSED mode'unda. Şimdi login olmaya çalışalım:
C:\oraclexe\app\oracle\admin\XE\udump>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Cum Tem 13 09:20:14 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn tcell/tcell
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Gördüğünüz gibi, normal kullanıcılar login olamıyor, çünkü database kapalı. Sadece sys, sysdba olarak login olabilir.
SQL> conn sys as sysdba
Enter password:
Connected to an idle instance.
Bağlandık ama idle instance yazıyor. Instance kapalı demek. Bu noktada herhangi bir tabloya erişmeye çalışalım.
SQL> select * from t;
select * from t
*
ERROR at line 1:
ORA-01034: ORACLE not available
Elbette erişemiyoruz. Şimdi NOMOUNT mode'a alalım:
SQL> startup nomount
ORACLE instance started.
Total System Global Area 146800640 bytes
Fixed Size 1286220 bytes
Variable Size 62918580 bytes
Database Buffers 79691776 bytes
Redo Buffers 2904064 bytes
Instance açıldı, parametre dosyası okundu ve SGA allocate edildi. Şimdi database'imiz NOMOUNT Mode'da. Bu noktada bir tabloya erişmeye çalışalım:
SQL> select * from t;
select * from t
*
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed tables/views only
Hımm, bak sen! Neymiş o fixed table/view'lar?
SQL> select object from v$access;
OBJECT
--------------------------------------------------------------------------------
GV$ACCESS
V$ACCESS
X$KGLDP
X$KGLLK
X$KGLOB
X$KSUSE
6 rows selected.
Sadece bu 6 sistem tablosu tanımlı. Şimdi database'imizi mount edelim, ve yine tabloya erişmeye çalışalım:
SQL> alter database mount;
Database altered.
SQL> select * from t;
select * from t
*
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed tables/views only
Yine aynı durumdayız. Database daha açık değil. User'lar da tanımlı değil. Yine sadece sysdba bağlanıp database'ı açabilir. Şimdi database'i açalım:
SQL> alter database open;
Database altered.
NAME
--------------------------------------------------
bilal
Sonunda okuduk tablomuzu :) Şu anda database tamamiyle ayakta. Şimdi bir kaç deneme daha yapalım, ama önce instance'ı yine kapatalım:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 146800640 bytes
Fixed Size 1286220 bytes
Variable Size 62918580 bytes
Database Buffers 79691776 bytes
Redo Buffers 2904064 bytes
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01507: database not mounted
Unmount iken direk OPEN mode'a almaya çalıştık yemedi :) Peki bütün bu adımları yapmak zorunda mıyız db'yi açmak için? Tabiki hayır. Şimdi direk startup diyelim bakalım ne olacak:
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 146800640 bytes
Fixed Size 1286220 bytes
Variable Size 62918580 bytes
Database Buffers 79691776 bytes
Redo Buffers 2904064 bytes
Database mounted.
Database opened.
SQL>
Download Code
Gördüğünüz gibi tek tek bütün işlemleri bizim yerimize yaptı. Herhangi bir sorun yok parametre dosyasında veya control dosyasında. DB açıldı.
• Database kapama komutu 3 türlüdür: SHUTDOWN, SHUTDOWN IMMEDIATE ve SHUTDOWN ABORT.
SHUTDOWN normal kapamadır. Mevcut transactionların sonlanmasını bekler, bu arada yenilerine izin verilmez. Hepsi sonlanınca kapanır. Bu özellikle çalışan sistemlerde pek kullanılmaz. SHUTDOWN IMMEDIATE, bütün aktif transaction'ları rollback yaparak hemen kapanır. Genelde bu kullanılır.
SHUTDOWN ABORT ise bütün işlemleri anında iptal ederek direk kapatır. Elektriği çekmekle aynı şey denebilir :) Anormal bir kapanmadır. Bu şekilde kapatılırsa ilk açılışta instance recovery yapılır.
"Database and Instance Startup and Shutdown" Concepts Guide'dan 12. Chaper'ın konusu. Biraz daha ayrıntısını okumak isterseniz: http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/startup.htm
• OLAP: Online Analytic Processing demektir. OLAP sistemler raporlama sistemleridir örneğin. Bu sistemlerde uzun süreli büyük sorgular çalıştırılır. Optimizaysonu bu ihtiyaçlar göz önünde bulundurularak yapılır. Örneğin, su sistemlerde çok fazla blok okuma ve harddisk'te büyük sort işlemleri yapılacağı düşünülerek configüresyon ve hardware olarak ona göre optimize edilebilir
• OLTP: Online Transaction Processing demektir. OLTP sistemler normal transaction bazında sistemlerdir. Bu sistemlerde kısa sürelik çok sorgu çalıştırılır. Bu sistemlerde aynı anda bir çok kullanıcı bağlı olup çok sayıda ufak sorgu çalıştırılacağı düşünülerek ona göre tune edilir.
• Bir SQL sorgusu sırayla şu adımlardan geçer: Parse, Bind, Execute ve Fetch.
Sorgu önce parse edilir. Sonra varsa bind değerleri yerleştirilir. Sonra çalıştırılır ve sonuç fetch edilir. Parsing genelde çok maliyetli bir iştir. Sorgu ve etkilenen objeler analiz edilerek execution plan oluşturulur. Bu nedenle, aynı sorgudan yüzlerde kere çalışacaksa, yüzlerce kez bunu yapmamamak adına, Oracle her çalıştırılan sorguya bir hash değeri atar. Çalıştırılmak istenen sorgu ile daha önce çalıştırılan bir sorgunun hash değeri aynı ise, yani aynı sorgu bir kez daha çalıştırılacaksa tekrar parse edilmez. Böylece parse maliyetinden kurtulunur. Hash değeri SQL'in text'ine göre atandığı için, ufak harf farklılıkları, fazladan boşluk, büyük/küçük harf farkı gibi şeylerde sorgu aynı olsa bile farklı hash değerleri üretilir. Buna dikkat etmek gerekir. Bir de, bind variable kullanma konusunun öne burada kendini gösterir. Bu konunun ayrıntısına bind variable'lar ile ilgili sunumdan sonra gireceğiz.
Beni almış olduğum notların bir kısmı bu kadar. Bunun dışında bir çok farklı konulara da giriş yapıldı, fakat onlar ilerleyen sunumlarda ayrıntılarıyla gelecek, o yüzden burada yazmaya gerek görmedim. Bu makalede genelde startup-shutdown üzerinde durmuş olduk.
Herkese iyi çalışmalar diliyorum.
|
|
Related Topics |
|
|
|
|
|