5 Haziran 2011 Pazar

Sık kullandığım linux komutları -1


 

Linux komutlarının pek çok parametresi vardır.Burada benim sık kullandığım şekilleri yer alıyor.

df -h

Disk partition 'ları için doluluk oranlarını gösterir.


df komutunun -h parametresi, çıktının daha kolay okunabilir şekilde olmasını sağlar.
Büyüklük değerleri MB ,GB cinsinden görüntülenir. Eğer -h parametresi kullanılmaz ise
çıktıdaki büyüklükler kb cinsinden olacaktır.

Çıktıdaki sütunların açıklamaları aşağıdaki gibidir.

Filesystem : Dosya sistemi
Size : Toplam kullanılabilir alan
Used : Toplan kullanılan alan
Avail : Toplam boş alan
Use % : Kullanılan alan yüzdesi
Mounted on : Mount edildiği yer

du -hs *

Bir klasörün büyüklüğünü, alt dizinleri ile beraber hesaplar.

Bu komut bulunulan klasör altındaki tüm klasör büyüklüklerini hesaplayarak görüntüleyecektir.


find . -size +100M *

Bulunulan dizin içerisinde, alt dizinlerle beraber 100Mb 'dan büyük
dosyaları görüntüler. Tabi burada komutta değişiklik yaparak mesela 50MB' dan büyük dosyalarda
görüntülenebilir.

23 Mayıs 2011 Pazartesi

Oracle için database trigger

Trigger 'ların database seviyesinde kullanımı da mümkündür.
Aşağıdaki trigger; database içerisindeki 'SCHEMA_ADI'.'TABLO_ADI'
üzerinde her "alter" işlemi yapan DDL statement 'i çalıştığında tetiklenecek
ve hata görüntüleyerek yapılmaya çalışılan alter işlemini iptal edecektir.

CREATE OR REPLACE TRIGGER SYS.BENIM_TRIGGER
BEFORE ALTER
ON DATABASE
DECLARE
tmpVar NUMBER;
BEGIN
IF ora_dict_obj_owner = 'SCHEMA_ADI' and ora_dict_obj_name='TABLO_ADI' THEN
raise_application_error(-20100,ora_dict_obj_name||' uzerinde Alter operasyonu yasak.');
END IF;
END ;

Burada kullanılan trigger attribute 'ları ile ilgili açıklama aşağıdaki gibidir.

ora_dict_obj_owner : DDL hedefindeki object hangi user' a ait?
ora_dict_obj_name : DDL hedefindeki object ismi ne?

Daha fazla bilgi için aşağıdaki bağlantıyı ziyaret edebilirsiniz.

http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/triggers.htm#CHDCFDJG

4 Mayıs 2011 Çarşamba

Oracle parametre dosyası hakkında

Parametre dosyası, Oracle başlangıç parametrelerini set eden dosyadır.
Parametre dosyası olmadan database başlatılamaz.

Database oluşturulduğunda, database oluşturma işleminin bir parçası olarak,
otomatik olarak oluşturulurlar. Genellikle çok az sayıda parametre değişikliği gerekli olur.
Verilen ilk değerler (default değerler) çoğu parametre için yeterlidir.
Değişikliğe gerek olmaz.

Parametre dosyası iki türlü olabilir. SPFILE ve PFILE.
Default olarak gelen ve tavsiye edilen parametre dosyası türü SPFILE 'dir.

PFILE
---------------------------
Genellikle init(SID).ora şeklinde isimlendirilir. Burada SID(Oracle system ID), database ismi anlamına

gelmektedir. PFILE sadece database başlatılırken okunur. Sonrasında PFILE üzerinde
yapılan değişiklikler, bir sonraki database yeniden başlatma işlemine kadar yeniden okunmaz.

Dezavantajları;
- PFILE dosyası file system içerisinde tutulur. Text editör kullanarak
değişiklik yapmak için file system erişimi zorunludur. Bu erişim bazı durumlarda güvenlik nedeniyle uygun bulunmayabilir.

- Dinamik değişikliklerin kalıcı olması isteniyorsa ,bu dosyaların da edit edilmesi zorunludur.

- RMAN, pfile dosyasının yedeğini almaz, dolayısıyla backup için bir ek prosedür gereklidir.


SPFILE
---------------------------
Genellikle spfile(SID).ora şeklinde isimlendirilir.
Oracle 9.0.1 ve sonrasında parametre dosyası olarak SPFILE kullanımı seçeneği eklenmiştir. Bu dosya binary bir dosyadır ve sadece SQL cümlecikleri ile üzerinde değişiklik yapılabilir.



EM (Oracle Enterprise Manager) veya ALTER SYSTEM deyimi kullanılarak
SPFILE üzerinde değişiklik yapılabilir. Bu şekilde sadece çalışan database, sadece SPFILE veya hem çalışan database hem SPFILE üzerinde aynı anda değişikli yapılabilir.
Örneğin;

- Sadece çalışan database instance için
ALTER SYSTEM SET open_cursors=300 SCOPE=MEMORY;

- Sadece SPFILE için
ALTER SYSTEM SET open_cursors=300 SCOPE=SPFILE;

- Hem çalışan database hem de SPFILE için
ALTER SYSTEM SET open_cursors=300 SCOPE=BOTH;

şeklinde SQL deyimleri çalıştırılabilir.

SPFILE türündeki parametre dosyaları pek çok avantaja sahiptir.

- ALTER SYSTEM deyimi kullanarak değişiklik yapılabilir. İşletim sistemine ulaşıp, ilgili dosyayı edit etme gerekliliği yoktur.

- İstenen bir parametre değeri, tek satılık SQL deyimi ile hem çalışan database için kullanılmak üzere, hem de SPFILE dosyasına kaydedilerek bir sonraki database start işleminde devreye alınmak üzere SPFILE dosyasına kaydedilebilir.

- RMAN, SPFILE dosyasının yedeğini alabilir. Ayrıca bu konunun takibi gerekli olmaz.

Database başlatma anı ve Parametre dosyası ilişkisi
----------------------------------------------------
Oracle, başlatma anında, SPFILE türü parametre dosyasını öncelikli olarak aramaktadır. Parametre dosyasının bulunduğu klasör aksi belirtilmedikçe aşağıda gösterilen yerdedir.

- Windows : $ORACLE_HOME/database
- Linux : $ORACLE_HOME/dbs

Database başlatma anında parametre klasöründeki dosyalar, parametre dosyasını bulmak için aşağıdaki sırayla taranır.

1) spfileSID.ora

2) spfile.ora

3) initSID.ora

4) init.ora

Eğer yukarıda dosyaların herhangibirisi bulunamadı ise database başlatılamaz ve
bu konuda hata görüntülenir.

Alternatif olarak, "startup" komutuna PFILE dosya yerini parametre olarak verebilirsiniz.

SQL> startup pfile=/path/to/pfile/inittestdb.ora

Kaynak
--------------------------
http://www.orafaq.com/node/5
http://www.dba-oracle.com/concepts/pfile_spfile.htm

17 Şubat 2011 Perşembe

IFS - Centura debug videosu download adresi güncelleme

Aşağıdaki adresten download edilebilir.

http://rapidshare.com/files/448429217/centura_debug.rar

20 Kasım 2010 Cumartesi

MySQL-Data klasörünün değiştirilmesi

Çeşitli amaçlarla data klasörünü değiştirmek isteyebilirsiniz.
Ben aşağıdaki gibi bir durumla karşılaştım mesela.

Linux üzerine rpm kurarak mysql server kurduysanız
kurulumun bir parçası olarak "mysql" isminde
bir linux user oluşturulur ve mysql data klasörü
"/var/lib/mysql" klasörü olarak konumlanır.
Bu nedenle de "/var/lib/mysql" altındaki her bir ayrı klasör, ayrı bir database olarak görünür. Bu durum bir miktar sorunu da beraberinde
getirmektedir. Örneğin user a ait desktop verileri Linux işletim
sistemi tarafından "/var/lib/mysql/desktop" klasöründe saklanabilir.
Fakat mysqld, data klasörü olan "/var/lib/mysql" altında bulduğu "desktop"
ismindeki bu klasörün invalid bir database olduğunu varsayar.

Sorun aşağıdaki komutla da tespit edilebilir.

mysql> show databases;

Bu durumu düzeltmek için aşağıdaki adımlar uygulanarak
mysql data klasörü değiştirilir.

1) "mysql" user ı ile database kapatılır.

$ /etc/init.d/mysql stop

2) "root" user ile yeni mysql data klasoru oluşturulur ve
"mysql" user ına bu klasör için yetki verilir.

# mkdir /mysql
# mkdir /mysql/data
# chown -R mysql /mysql/data

3) Aşağıdaki satır, "/var/lib/mysql/my.cnf" dosyasına, "[mysqld]"
etiketi altına eklenir.

datadir=/mysql/data

4) "/var/lib/mysql" klasörü altında bulunan, my.cnf ve işletim sistemi ile ilişkili
dosya ve klasörler hariç tüm dosya ve klasörler "mysql" user ı ile
"/mysql/data" klasörüne taşınır.

5) Database açılır.

/etc/init.d/mysql start

Yukarıdaki adımları mysql 5.1.48 - redhat ile test ettim.
Bir sorun olması durumunda, aksi my.cnf dosyasında belirtilmedikçe
data klasöründe bulunan, "err" uzantılı error log
dosyasını inceleyebilirsiniz.

27 Ekim 2010 Çarşamba

Oracle shared server opsiyonu ve IFS

Geçenlerde, IFS ERP uzmanı olarak çalışmaya devam eden arkadaşlarımdan birisi aradı.
Garip bir sorunundan bahsetti.

Problem oluşan sistem özellikleri
----------------------------------------
windows 2008 server 32 bit
8 gb ram
100+ acık kullanıcı connection
vs.

Problem Açıklaması
----------------------------------------
Database e belirli bir sayı üstü kullanıcı bağlandığında sistem yeni connection isteklerine
cevap vermiyormuş. Ta ki bazı connectionlar kapatılıncaya kadar.
Bu sorun oluştuğu anda ise sistem ram inin 2.6 gb gibi bir kısmı yani yarıdan az kısmı kullanılıyormuş.


Hımmm.

Oracle database e bağlanma sürecine biraz daha yakından bakacak olursak;

Oracle listener, her dedicated session için server tarafında bir dedicated server process
oluşturur(veya oluşturmaya çalışır). Bu oluşturulan process belirli miktarda bellek kullanır.
32 bit işletim sistemlerinde oracle, 2.5-3 gb civarının üstünde ram
kullanamadığından bu sorun oluşuyor. (2.5 - 3 gb den fazla ram kullanamama sorunu,
oracle dan değil 32 bit mimariden kaynaklanıyor yanlış anlaşılmasın )

Şimdi bir kere en iyi çözüm 64 bit işletim sistemine oracle kurmak ve gerekiyorsa sisteme ram eklemek.
Sonrada gerekli Oracle memory parametrelerini set etmek.

İkinci en iyi çözüm shared server opsiyonunu aktifleştirmek. Çünkü bu şekilde
her yeni connection için yeni bir dedicated server açılmayacak. Dolayısıyla memory
dolmayacak. Ama yoğun data kullanan kullanıcıların biraz daha yavaş çalışması duruma göre söz konusu.

Peki IFS ortamında nasıl yaparız bu
oracle shared server ı aktifleştirme işini?
------------------------------------------
1) Server parametrelerinde değişiklikler

alter system set shared_servers=10;
alter system set dispatchers='(PROTOCOL=TCP)';

Yukarıdaki sql statement lerini çalıştırdıktan bir süre sonra tns yöntemi dışı tüm bağlantılar
shared olmaya başlayacaktır.

Bu durumu aşağıdaki query ile de inceleyebilirsiniz.
SERVER sütünu SHARED ve NONE olan bağlantılar shared bağlantılardır.

select username,server from v$session order by server desc

Oracle parametrelerini burada sadece memory ye set ettik yani
database restart ında shared server konfigurasyonumuz yok olacak.
Parametrelerin kalıcı olması için testlerin ardından parametre dosyası güncellenebilir.

2) Client tarafında değişiklikler

IFS teki(Centura desek daha doğru) bağlantı tanımları runtime klasörü altındaki sql.ini dosyasından yapılıyor.
Bu dosya içerisinde, [oragtwy] tiketi altındaki remotedbname değerleri
bizim database bağlantılarımız.Örneğin sql.ini dosyamız aşağıdaki gibi olsun.

[oragtwy]
longbuffer=32760
fetchrow=20
maperror=OFF
substitute=SYSSQL.,
remotedbname=gercek,@//bizim_server_name_veya_ip:1521/bizim_sid

yukarıdaki 1. adımdaki server parametreleri set edildikten sonra,
buradaki "gercek" bağlantısından bağlanan tüm yeni client bağlantıları,
shared server connection u açarlar.

Burada bir sorun var .Tüm kullanıcı bağlantıları shared oldu. Fakat ben
bazı kullanıcılarımın performans açısından shared değil dedicated bağlanmasını
istiyorum diyebilirsiniz.

İşte bunu sağlayabilmek için sql.ini dosyasındaki, remotedbname imizi aşağıdaki
gibi değiştirmeliyiz.

remotedbname=gercek,@//bizim_sid

Buradaki bizim_sid, tnsnames.ora dosyasındaki tns ismidir.

Bu noktadan sonra bağlantının shared veya dedicated olması oracle client tnsnames dosyasına bağlıdır.

Dedicated için, aşağıdaki gibi bir tnsnames.ora tanımlaması olabilir.
Burada "SERVER=dedicated" olan bölümü "SERVER=shared" yaparsak bağlantı shared oluşturulmaya çalışılır..
Böylece her kullanıcıya, kendini bilgisayarıdaki tnsnames.ora da gerekli ayarları yaparak,
shared mı yoksa dedicated mı bağlantı yapacağı tanımlanabilir.

bizim_sid=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=bizim_server_name_veya_ip)
(PORT=1521)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SID=BIZIM_SID)
)
)


Burada anlattıklarıma temel olan oracle versiyonları 10g ve 11g.
Ayrıca ASMM(Automatic Shared Memory Management 10g) veya
AMM(AutomaticMemory Managemet 11g) özelliklerinin aktif olduğunu varsaydım.
Bu varsayımımım yanlışsa, large_pool değerinin 50 mb civarı olarak, shared server konfigurasyonundan önce
ayarlanması gereklidir.Bu değer de duruma göre arttırılabilir.

Daha eski versiyonlar için farklı database configurasyonu gerekli olabilir.

Daha fazla bilgi için aşağıdaki bağlantılar da incelenebilir.

http://barisakverdi.blogspot.com/2010/10/oracle-shared-server-opsiyonu.html
http://barisakverdi.blogspot.com/2010/10/oracle-shared-server-konfigurasyonu.html
http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/manproc001.htm
http://download.oracle.com/docs/cd/B10500_01/network.920/a96580/connect.htm
http://download.oracle.com/docs/cd/B10500_01/network.920/a96580/mts.htm
http://www.dba-oracle.com/t_mts_multithreaded_servers_shared.htm

26 Ekim 2010 Salı

ORACLE-Shared server konfigurasyonu

Shared server özelliğini kullanabilmek için server(gerekli parametrelerin set edilmesi) ve client(tnsnames.ora) tarafında bazı ayarlar gerekli olabilir

Oracle 10g ve 11g versiyonlarında shared_servers ve dispatchers initialization
parametrelerinin set edilmesi ile server tarafında shared server
özelliği aktifleştirilmiş olur.
Bu parametreler database in restart edilmesine ihtiyaç duymayan parametrelerdendir.

Şu anki durumu görmek için aşağıdaki sorgu kullanılabilir.

select name,value from v$parameter
where name = 'shared_servers'

select name,value from v$parameter
where name = 'dispatchers'


shared_servers parametresi 1 den büyük bir değere set edilerek shared server
konfigurasyonu aktif edilmiş olur.
Shared server konfigurasyonunu aktif oracle instance ına uygulamak için
aşağıdaki komutları kullanabilirsiniz. Herhangibir değişiklik yapmadan önce eski
değerleri bir kenara yazmanızda her zaman fayda vardır.

alter system set shared_servers=5;
alter system set dispatchers='(PROTOCOL=TCP)';


Yapılan değişikli kısa bir süre sonra aktif olacaktır.
Bu değişiklikler aktif olduktan sonra, eğer bağlantı için
tns yöntemi kullanılıyorsa, tnsnames.ora dosyasındaki ayarlar bağlantının
shared veya dedicated olmasını belirler.
Mesela aşağıdaki gibi bir tnsnames.ora dosyası ile bağlantı yapılıyorsa
oluşan bağlantı shared olur.

bizim_db=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=bizim_host_veya_ip)
(PORT=1521)
)
(CONNECT_DATA=
(SERVER=shared)
(SID=bizim_db)
)
)

Benzer şekilde TNSNAMES.ORA dosyasındaki,
SERVER=dedicated şeklindeki kullanım bağlantının dedicated yapılması gerektiğini bildirecektir.

Easy connect veya connection string ile bağlanma durumunda
default olarak bağlantı shared olacaktır.

Kurulan bağlantının dedicated veya shared olduğunu tespit etmek için
v$session görünümü kullanılabilir.

select username,server from v$session order by server desc

Burada server sütünu SHARED ve NONE olan bağlantılar shared bağlantılardır.

alter system komutu ile yapılan değişiklikler kalıcı olsun istiyorsanız,
kullandığınız server parametre dosyasında gerekli değişiklikleri yapmalısınız.

Buradaki shared_servers parametresinin değerini duruma göre ayarlayabilirsiniz.
5 yerine 10 shared server ile de başlayabilirdik mesela.
Ayrıca max_shared_servers parametresini set ederek açılabilecek max server process
sayısını da set edebilirdik.

Daha fazla bilgi için aşağıdaki bağlantı incelenebilir.

http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/manproc003.htm