Monday, August 17, 2009

ALTER SYSTEM SWITCH LOGFILE;

LOGFILE'LERİ KAYDETMEK

ALTER SYSTEM SWITCH LOGFILE;

LGWR (Log Writer) Bir redo log grubuna yazmayı bitirdiğinde diğer gruba gecer. LGWR bir log group dolduğunda diğerine yazma işlemlerini otomatik olarak yapar . Yazmakta olduğu grup active durumdadır. Yazma işlemini bitirdikleri ise inactive duruma gecer.

Redo loglarda düzenleme yapmak için bazen active durumdaki grupları inactive yapmak gerekebilir. Örneğin active olan bir redo group'u silmek istiyorsunuz. active olan bir redo grup'u inactive olana kadar silemezsiniz. Öncelik ile buradaki verilerin datafilelere yazılması gerekir. Şu şekilde bir senaryoda yaratabiliriz. Şu anda active olan bir redolog groubunu arşivlemek istiyorsak bu grubun dolmasını beklememiz gerekiyor. Bazen redo log gruplarımız o kadar büyük olur ki dolamsını beklemek uzun zaman alabilir.

Log dosyalrını kaydetmek için ALTER SYSTEM yetkimizin olması gerekiyor.

ALTER SYSTEM SWITCH LOGFILE; komutu işimizi görüyor.

Redo loglarımız datafilelere yazıyoruz. Bu işlemden sonra backuplama arşivleme işlemini yapabiliriz.

Kullanıldığı birkaç yere örnek vermek gerekir ise
1- full backup almadan önce redo loglardaki verileri datafilelere yazmak isteyebilirsiniz.
2- Database NOACRHIVELOG moddan ARCHIVELOG moda alma sırasında kullanabilirsiniz.

Aşağıdaki sorgu ile loglarımızın durumunu görebilriz.
select GROUP#, ARCHIVED, STATUS from v$log;

Active durumdaki bir redolog file'ı silmek isteğimizde aşağıdaki hatayı alırız.Bu durumda
ALTER SYSTEM SWITCH LOGFILE ile inactive hale getirdikten sonra silebiliriz.

ORA-01624: 2 günlügü, orcl (thread 1) aninin çökme durumunda kurtarilmasi için gerekli
ORA-00312: çevrimiçi günlük 2, thread 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'

Yeni bir redolog file eklemek için aşağıdaki scripti kullanabiliriz
ALTER DATABASE
ADD LOGFILE ('C:\oracle\product\10.2.0\oradata\ORCL\REDO03.LOG') SIZE 50000K;
silmek içinde

select GROUP#, ARCHIVED, STATUS from v$log;

sorgusu ile inactive durumda olan redologun group nosunu öğrendikten sonra


ALTER DATABASE DROP LOGFILE GROUP 3;
komutunu kullanabiliriz.



Thursday, August 13, 2009

REDO LOG DOSYALARININ BOZULMASI VE KURTARMA

Redo Log Dosyalarının bozulması durumunda aşağıdaki hataları alabilirsiniz.

ORA-16038 log %s sequence# %s cannot be archived
ORA-367 checksum error in log file header
ORA-368 checksum error in redo log block
ORA-354 corrupt redo log block header
ORA-353 log corruption near block change time

Solution:- bu durumda log fileleri temezlemektir.bu işlemi yaparken database'i kapatmaya gerek yoktur.


alter database clear logfile group 1;
alter database clear unarchived logfile group 1;


Eğer sadece iki tane log grubunuz var ise ve logfile CURRENT/ACTIVE durumundaysa silinmiş yada bozulmuş olan redologlar kurtarmak mümkün değildir.Bu durumdan kurtulmak için instance recovery yapmak gerekir. Aksi halde ORA-01624: günlüğü, (thread ) anının çökme durumunda kurtarılması için gerekli. hatasını alabilirsiniz.

ALTER SYSTEM SWITCH LOGFILE; ile ACTIVE durumdakileri inactive statusüne çekebilirsiniz.

Wednesday, August 12, 2009

ZIPLI DOSYA IÇERISINDEKI SATIR SAYISINI HESAPLAMA

zipli olan dosyalarımızın içerisinde kaç satır olduğunu hesaplamak için aşağıdaki scriptler ile bulabiliriz.
ilk scriptimizde manuel olarak önce zipli dosyaları açıyoruz sonra bu açılmış dosyaların count'unu alıp tekrar zipliyoruz.

for i in `ls -lt /home/aliates/source_data | awk '{print $9}'`;
do
gunzip $i
isim=`ls *.DAT`
deger=`wc -l $isim`
echo $i";"$deger >> /home/aliates/data/source_data_zip.csv
gzip $i
done

ikinci yöntemde ise bu zipli olan dosyaları açmadan countunu almak için

for i in `ls -lt /d104/intercon/source_data/ |awk '{print $9}'`;
do
deger=`zcat {$i} | wc -l`
echo $i";"$deger >> /d101/data/intercon_sms.csv
done

Sqlldr ile atılan toplan kayıt miktarını görmek için aşağıdaki yöntem kullanılabilinir.
eğer zipli olan dosyalarınızı sqlldr ile yüklüyor iseni o zaman sqlldr'nin log sosyalarından yararlanabilirsiniz.
Orada kaç kayıt okuduğunu size gösterecektir.

for i in `ls *.log`;
do
sayi=`awk '/Total logical records read:/ {if (NR!=1) print $5}' ./$i`
echo $i"-------->"$sayi
done

bütün bunları excelde açabilmek için ";" ayracını kullanıp ".csv" uzantılı kaydederseniz excell'de görebilirsiniz.

Tuesday, August 11, 2009

DATAFILE VE TABLESPACE SİLME

Bu yazıdaTABLESPACE oluşturma buna datafile ekleme ve yine aynı şeklide oluşturduğumuz bu nesneleri silme .

önce biraz süsleme yapalım. :)

SYS aliates 08/11/2009 >alter session set nls_date_format = 'DD:MM:YYYY HH24:MI:SS';
Oturum değistirildi.
SYS aliates 11:08:2009 13:26:04 >set sqlprompt "_user 'aliates' _date >"

SYS aliates 11:08:2009 13:26:12 >select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
DENEME1

6 satırları seçildi.

Kendimize bir test tablespace'i yaratıyoruz. Bir tablespace ilk defa oluşturulurken kendisine bir datafile gerekiyor. Bunun için datafile tanımlamasını da yapıyoruz. Burada istersek birden fazla datafile belirtebiliriz.

SYS aliates 11:08:2009 13:26:53 >create tablespace test datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2' size 50m;
create tablespace test datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2' size 50m
*
1 satırında HATA:
ORA-01537: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2' dosyasi eklenemez -dosya zaten veritabaninin parçasi
daha önce böyle bir datafile olduğu çin bize hata üzeretti. Bunun üzerine datafile'in adını değiştirip tekrar deniyorum.

SYS aliates 11:08:2009 13:28:10 >create tablespace test datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\test_df.dbf' size 50m;

Tablo alanı yaratıldı.
--Tablespace'mizeyeni bir datafile ekliyorum.
SYS aliates 11:08:2009 13:28:40 >alter tablespace test add datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\test_df1.dbf' size 50m;
Tablo alanı değiştirildi.
Elimizdeki datafileleri listeleyelim.
SYS aliates 11:08:2009 13:29:39 >select file_name from dba_data_files where tablespace_name='TEST';

FILE_NAME
--------------------------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DF.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DF1.DBF

şimdi oluşturduğumuz datafileleri silmeyi deniyoruz.
SYS aliates 11:08:2009 13:29:51 >alter tablespace test drop datafile '/home/oracle/test2.dbf';
alter tablespace test drop datafile '/home/oracle/test2.dbf'
*
1 satırında HATA:
ORA-01565: '/home/oracle/test2.dbf' dosyasini tanimlamada hata
--böyle bir datafile olmadığı için hata alıyoruz.
SYS aliates 11:08:2009 13:30:05 > alter tablespace test drop datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\test_df1.dbf';
Tablo alanı değiştirildi.

--including contents and datafiles içerisindeki veriler ile beraber tam bir silme işlemi için aşağıdaki sorguyu kullanıyoruz.
SYS aliates 11:08:2009 13:30:29 >drop tablespace test including contents and datafiles;
Tablo alanı değiştirildi


SYS aliates 11:08:2009 13:40:41 >select file_name from dba_data_files where tablespace_name='TEST';
satır seçilmedi
--çünkü böyle bir tablespacemiz artık yok.

RMAN İLE DATAFILE KURTARMA

Bozuk yada silinmiş olan bir datafile kurtarma işlemlerini basit bir senaryo ile anlatmaya çalıştım.

Öncelik ile bir tablespace yaratalım
CREATE SMALLFILE TABLESPACE "DENEME1" DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2' SIZE 100M REUSE AUTOEXTEND ON NEXT 1024K MAXSIZE 32767M , 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME3' REUSE LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

Şimdi bu tablespace'e bir datafile ekleyelim.

ALTER TABLESPACE "DENEME1" ADD DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2' SIZE 102400K REUSE AUTOEXTEND ON NEXT 1024K MAXSIZE 32767M

daha sonra bu tablespace de bir user oluşturalım.

CREATE USER "RMAN_DEN" PROFILE "DEFAULT" IDENTIFIED BY "*******" DEFAULT TABLESPACE "DENEME1" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK
GRANT UNLIMITED TABLESPACE TO "RMAN_DEN" WITH ADMIN OPTION
GRANT "CONNECT" TO "RMAN_DEN" WITH ADMIN OPTION
GRANT "RESOURCE" TO "RMAN_DEN" WITH ADMIN OPTION


şimdi bu user altında bir tablo oluşturalım.

CREATE TABLE rman_den.tablom
AS
SELECT *
FROM all_objects


son durumu özetlemek gerekir ise elimizde bir tablespace bu tablecpace'yi kullanan bir user (schema) sonra bu tablespace'de tanımlanmış bir datafile var . Biz burada ne yapacağiz; Datafile bozulmuş senaryosu yaratacağız.

Önce RMAN ile ilgili datafile'in backupını alıyoruz.

RMAN> backup datafile 6;

elimizde backupımız var.

RMAN> LIST BACKUP of datafile 6;

aşağıdaki komut ile datafile'i siliyoruz.
ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2'
OFFLINE DROP;

şimdi datafile üzerinde işlem yapmaya çalışalım.

select * from rman_den.tablom

ORA-00376: 6 dosyasi su anda okunamiyor
ORA-01110: veri dosyasi 6: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2'

Bu hatayı alıyoruz. Bunun ne anlama geldiğini şimdi daha iyi anlayabiliriz.
Bu hatadan kurtulmak için backupdan dönme işlemini gerçekleştiriyoruz.

işletim sisteminde de dosyayı sildikten sonra

RMAN> restore datafile 6;
RMAN> recover datafile 6;
İle geri yükleme ve kurtarma işlemini tamalıyoruz. Bu işlemden sonra offline durumda olan datafile'i online yapmaktır.
ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2' ONLINE

online yapma işlemini RMAN'de de yapabiliriz bunun için bir run scripti hazırlıyoruz.
Kurtarma işleminden sonra RMAN ilgili sql'i çalıştıracktır.
RMAN>RUN{
restore datafile 6;
recover datafile 6;
SQL "ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2' ONLINE";
}

select * from dba_data_files -- sorgusu ile datafile'lerimizin son halini görelim.
Bu sorgu ile hem datafilelelerin konumlarını, isimlerini ve numaraları öğrenebiliriz.

Bozuk olan bir Datafile'dan RMAN ile dönme işlemini gerçekleştirmiş olduk.

Aşağıdaki hatalarda da yukarıdaki işlemleri yapılabilir.

SYS aliates 11/08/2009 >alter database open;
alter database open
*
1 satırında HATA:
ORA-01122: 6 veritabani dosyasi onaylama kontrolünü geçemedi
ORA-01110: veri dosyasi 6: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2'
ORA-01251: Dosya numarasi 6 için bilinmeyen Dosya üstbilgiler Sürümü okundu
ORA-01157: 6 veri dosyasi tanimlanamaz veya kilitlenemez - DBWR izleme

bu hatalardan kurtulmanın bir diğer yöntemi ise ilgili datafileleri offline duruma çekmektir.

SYS aliates 11/08/2009 >alter database datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME4' offline;

SYS aliates 11/08/2009 >alter database open;

Veritabanı de­ğiştirildi.

/////////////////////////////////////////////////////////////////////

offline olan datafile'yi rman ile kurtarabiliriz.

örneğin
ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2' offline
dediniz ve datafile offline oldu
herhangibi bir sorgu çalıştırdığınızda


ORA-00376: 9 dosyasi su anda okunamiyor
ORA-01110: veri dosyasi 9:

hatasınız alırsınız bundan kurulmak için

C:\Documents and Settings\rdcaates>rman target /

Kurtarma ¦darecisi : Release 10.2.0.1.0 - Production on Sal A­u 25 21:21:21 2009


Copyright (c) 1982, 2005, Oracle. All rights reserved.

hedef veritaban²na ba­lanıldı: ORCL (DBID=1223590477)

RMAN> recover datafile 9;

recover başlatılıyor; saat 25/08/2009
kurtarma katalo­u yerine hedef veritabanı kontrol dosyası kullanılıyor
ayr²lan kanal: ORA_DISK_1
ORA_DISK_1 kanalı: sid=133 aygt³r³=DISK

ortam kurtarmayı başlatma
ortam kurtarma tamamlandı , geçen süre: 00:00:02

recover tamamlandı; saat 25/08/2009

RMAN>

ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DENEME2' online;

işleminden sonra kurtarma işlemi başarılı bir şekilde tamamlanmış oldu.
Burada eğer datafileniz silindiyse yada yerinde yok ise o zaman yukarıdaki adımları yapmalısınız.


Monday, August 10, 2009

SQL*PLUS KULLANIM KLAVUZU

Çok güzel br şeklide anlatmişlar. bağlantılı linklere bakarak sql*plus'ı daha etkili bir şekilde kullanabilirsiniz.

http://arjudba.blogspot.com/2008/11/sqlplus-basics-and-tips.html

Friday, August 7, 2009

ORACLE DA SAĞLIKLI PERFORMANS TESTİ YAPMAK

Oracle da sağlikli performans testi yapmakiçin bildiğiniz üzere shared_pool ve buffer_cache'i sifirlamanız gerekecektir. Kullandiği sorguyu RAM alıp ikinci sorguyu test ettiğimizde şaibeli sonuçlar vermemesi için aşağıdaki işlemleri yapmakta fayda var.
bu işlemleri testlerden önce yapınız. Her testden önce yaparak sağlıklı sonuçlar alabilirsiniz.

ALTER SYSTEM FLUSH BUFFER_CACHE;

ALTER SYSTEM FLUSH SHARED_POOL;

bu işlemelri yapabilmek için ALTER SYSTEM yetkinizin olması lazım :)