Menu

28 Mart 2011 Pazartesi

Automatic Storage Management - ASM Nedir

Ismindende anlasilacagi gibi ASM otomatik depolama yonetimidir. Peki ASM disk`ler ile daha once kullandigimiz diskler arasinda ne gibi farklar var onlara bir bakalim.
  1. Datafile isimlendirmesini bizim icin yerine getirmesi.
  2. Logical Volume(Mantiksal kume) yonetimini saglamasi
  3. DBA`nin sistem yoneticisi gibi calismasi daha aza indirgemesi
  4. I/O islemleri sirasinda performans kayiplarinin en aza indirgenmesi
  5. File sistem raw device ve Cluster File sisteme gereksinim hissettirmemesi.
  6. Fiziksel diskler uzerinde yuk dengelemesi
  7. Parcalanma giderilmesi
  8. Bakim kolayligi
  9. Çift veya üçlü aynalar Software RAID-1 veri yedekleme
ASM diskler RAC (Real Application Cluster) ortaminda mukemmle bir uyum saglar, ancak RAC olmayan ortamlardada rahatlikla kullanilabilir.
Asagida ASM ile ilgili konular karsimiza cikacaktir.
  • ASM instance
  • ASM disk yapilandirma
  • Veritabanindan ASM erisim
  • ASM yonetimi
  • Her ASM disk max 4petabyte(pb) olabilir.
  • Her ASM örneğinin depolama 40 exabytes kadar yönetebilirsiniz.
  • Her disk grubu 1 milyon dosya icerebilir.
 
Maximum dosya boyutlari turune gore degisir.
  •    External-redundancy disk group: ASM'nin hiçbir mirroring yapmadığı tiptir. Bu tipte yaratılan disk'e yalnızca yazma gerçekleştirilir ve bir kopyası diğer disk'ler üzerinde bulundurulmaz
  •    Normal-redundancy disk group: 42PB maximum file size (ASM'nin 2 yönlü mirroring yaptığı konfigürasyondur. Bu durumda veri tutarlılığı artar ancak disk alanından taviz verilir.)
  •    High-redundancy disk group: 15PB maximum file size(ASM'nin 3 yönlü mirroring yaptığı konfigürasyondur. Bu durumda veri tutarlılığı artar ancak disk alanından taviz verilir. Daha fazla veri sağlamlığı tesis edilmektedir.)
ASM surucusu bir ASM instance`dir.  Her node basina yanlizca bir ASM instance olusturulur.


ASM sayesinde, ASM icinde bulunana disklerin ne durumda oldugunu, disklerin ne kadar doldugunu dert etmemize gerek yok.
Yaşanabilecek risklerden bir tanesi de farklı tablespace'ler içerisinde bulunacak aynı isimlendirmeye sahip dosyaların taşınması sırasında birbirlerini ezmeleri de ortadan kalkacaktır.

ASM`in bir instance oldugundan bahsetmistik, ve ASM instance`ler klasik instance yapisina cok benzer. Varsayılan olarak 256M kadar SGA alanına sahip olacaktır ve bir ASM instance'ının data dictionary'si yoktur. Yalnızca SYSDBA, SYSOPER ve en önemlisi SYSASM kullanıcılarına sahiptir. 
Asagida ASM instance icinde bulunan bilesenlerden bahsedelim.
  1. Memory SGA
  • Shared Pool
  • Large Pool
  • ASM Cache
  • Free Memory
  2. Process
  • RBAL
  • ARBn
  • LMON
  • GMON
  • Onnn
  • MARK
  • PZ9n
Yukaridada goruldugu gibi ASM instance`ler klasik instancelerden biraz farklidir. Ve klasik instancelerde olan, Buffer cache, log buffer vs sahip degildir.
Cunku ASM sadece sahip oldugu diskleri yoneten bir instance`dir.


Shared Pool: Metada bilgisini içerir.
Large Pool: Paralel operasyonlar için kullanılmaktadır.
ASM Cache: Neyin okunması gerektiğini veya nereye yazılmasını gerektiğini bilir ve rebalance işlemlerinde kullanılır.
Free Memory: Tahsis edilmemiş diğer memory alanı.

Bir ASM instance'ı için otomatik kaynak yönetimi (automatic memory magement) varsayılan olarak aktif haldedir ve bu SGA bileşenlerini, ona tanımlanan yer ölçüsünde yönetir.

Diğer konu ise ASM instance'ının sahip olduğu arka plan görevleri. ASM instance'ının birden çok arka plan görevi olabilir ancak ben olmazsa olmaz olan görevlerden bahsetmek istiyorum;

RBAL: Adından da anlaşılacağı üzere "Rebalance" işlemidir ve ASM disk üniteleri arasındaki verinin dengelenmesi görevini üstlenir.
ARBn: Bir veya birden çok destek görevden oluşan ARBn'in amacı rebalance aktivitesine destek vermektir.
GMON: Disk seviyesindeki aktivitelerin yönetilmesinden sorumludur.
MARK: ASM tahsis ünitelerinin (allocation unit) işaretlenmesinden sorumludur. Allocation unit ile ilgili daha sonra bilgi vereceğim.
Onnn: ASM instance'ına gelecek bağlantıların bir havuzda toplanmasını ve yönetimi sağlayan görevdir. Instance ilk açıldığı zaman ortaya çıkar ve sonra gerektiği zaman yeniden çalışır ve durur.
PZ9n: Bir veya birden fazla paralel göreve sahip olan bu görevin amacı GV$ görüntüsünden cluster sistemler için veri çekmek.

ASM instance'ının bir takım parametreleri bulunmaktadır ve bunları Oracle instance'ı kullanmaktadır;

1) INSTANCE_TYPE
2) ASM_POWER_LIMIT
3) ASM_DISKSTRING
4) ASM_DISKGROUPS
5) ASM_PREFERRED_READ_FAILURE_GROUPS
6) DIAGNOSTIC_DEST
7) LARGE_POOL_SIZE
8) REMOTE_LOGIN_PASSWORD_FILE

INSTANCE_TYPE: Bu parametre bir ASM instance'ı için olmazsa olmazdır ve mutlaka tanımlanması gerekmektedir, zorunlu alandır. ASM instance'ları için "ASM" olarak tanımlanmalıdır. Örnek olarak veritabanı instance'ları için bu tip RDBMS olarak tanımlanmaktadır.


SQL> show parameter instance_type; --> Oracle instance

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_type                        string      RDBMS


SQL> show parameter instance_type; --> ASM instance

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_type                        string       asm

ASM_POWER_LIMIT: RBAL arka plan görevi tarafından sürdürülen rebalance işleminin ne kadar hızlı olacağına karar veren parametredir. Varsayılan olarak 1'dir. En yüksek değeri 11 olabilir ve en hızlı 11 değeri verildiği zaman çalışır. Az önce bahsettiğim gibi yalnızca INSTANCE_TYPE parametresinin tanımlandığı durumlarda 1 olarak kullanılmaktadır.

SQL> show parameter asm_power_limit

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
asm_power_limit                      integer     1

ASM_DISKSTRING: Bu değerin null olması kimi zaman bir ASM instance'ı için yeterli olmaktadır ancak işletim sistemi seviyesinde tanımlanmış disk'lerin dizin adlarını yazdığımız zamansa ASM'nin disk ünitelerinin mount sürelerini uzatabiliriz. Birçok koşulda null olması yeterlidir.

ASM_DISKGROUPS: Bir ASM instance'ının sahip olduğu disk gruplarını göstermektedir. Bu parametrenin de bir varsayılan değeri yoktur ve 11g ile gelen "Oracle Restart" özelliğinde ASM instance'ının sahip olduğu bütün disk gruplar otomatik olarak mount edilir. Bilmiyorum dikkat ettiniz mi çok fazla otomatik kullanıyoruz ve Oracle 11gR2 ile birlikte hayatımız gerçekten otomatik ve kolay hale gelmeye başladı :)

ASM_PREFFERED_READ_FAILURE_GROUPS: İleride olası durumlar için tanımladığımız failure, yani başarısızlık gruplarını ifade eden parametredir. Amacı arttırılmış kopyalama ve daha fazla sağlamlık için kullanılacak disk'lerin gruplanmasıdır.

DIAGNOSTIC_DEST: 11g ile hayatımıza giren bu parametre aslında bir nevi DUMP_DEST olarak düşünülebilir.

ASM hakkinda bilgiye sahip olmamiz icin, oracle`in bize sundugu bir takim view`lar bulunmaktadir.

SQL> SELECT NAME FROM V$FIXED_TABLE WHERE NAME LIKE 'V$ASM%';

NAME
------------------------------
V$ASM_TEMPLATE
V$ASM_ALIAS
V$ASM_FILE
V$ASM_VOLUME
V$ASM_FILESYSTEM
V$ASM_ACFSVOLUMES
V$ASM_ACFSSNAPSHOTS
V$ASM_VOLUME_STAT
V$ASM_CLIENT
V$ASM_DISKGROUP
V$ASM_DISKGROUP_STAT

NAME
------------------------------
V$ASM_DISK
V$ASM_DISK_STAT
V$ASM_DISK_IOSTAT
V$ASM_OPERATION
V$ASM_ATTRIBUTE
V$ASM_USER
V$ASM_USERGROUP
V$ASM_USERGROUP_MEMBER

19 rows selected.

- Bir ASM instance`inin sahibi SYSMAN`dir. ve SYSMAN 11g ile birlikte gelmektedir. ASM instance'ını yönetmek için kullanılan bu sistem hakkı, tam yetkili kullanıcı olan SYSASM'ye devredilmiştir. 10g'de ise SYSDBA herşeyin sahibiydi, buna ASM instance da dahil. Tabii SYSASM sistem yetkisini SYS'ye tanıyarak, ASM instance'ını yönettiredebiliriz ancak 10 için değil. 11g'de SYS kullanıcısı otomatik olarak SYSASM yetkisi ile yaratılmaktadır.

# sqlplus / as sysasm

SQL> startup;
SQL> shutdown abort;

Yukarıdaki komutlarla ASM instance'ını açıp, kapatabiliyoruz. Diğer shutdown seçenekleri de geçerlidir ancak ASM instance'ına hiçbir veritabanı instance'ının bağlı olmaması gerekmektedir aksi halde;

ORA-15097: cannot shutdown ASM instance with connected client

hatasını alırsınız. Yeri gelmişken sıralamadan bahsedelim.

Açarken
1) ASM Instance (MOUNT)
2) Veritabanı Instance (OPEN)

Kaparken
1) Veritabanı Instance (Instance shutdown, veritabanı dismount + closed)
2) ASM Instance (Instance shutdown)

TARTUP komutunu bir +ASM instance'ına verdiğiniz zaman bir kontrol dosyasını mount etmek ve veritabanını açık konuma getirmek (datafile ve redolog'ları kullanılabilir hale getirmek) yerine ASM_DISKGROUPS parametresi içerisinde tanımlanmış disk gruplarını mount etmeye çalışmaktadır. Bu disk grupları içerisindeki bütün disk'lerle olan bağlantı sağlanacak ve disk grupları mount edilecektir. Yine hatırlayacağınız üzere ASM_DISKGROUPS parametresi tanımlanmadan da +ASM hayatını sürdürebiliyordu. Daha sonradan ilgili disk gruplarını mount edebilmek için "ALTER DISKGROUP ... MOUNT" komutunu koşabilirsiniz. NOMOUNT modda ise hiçbir disk grubu mount edilmeyecektir ve yalnızca +ASM açılacaktır (SGA + Arka plan görevleri devreye girecek). RESTRICT özelliği ile +ASM'yi açarsak hiçbir client'ın bu disk'lere erişemeyeceğini belirtebilirim. Genelde bakım süreçlerinde ve disk gruplarına kimsenin erişmesini istemediğimiz zaman bu opsiyon ile +ASM'yi açabilirsiniz. Buradaki veritabanı instance'ı ile farklılık şudur, bir veritabanı instance'ını RESTRICT ile açtığınız zaman veritabanı açılmışken veritabanını bu moddan çıkartabilirsiniz ancak bir ASM instance'ına ait restrict edilmiş disk gruplarını önce DISMOUNT etmek ardından da MOUNT etmeniz ve yeniden kullanıma açmanız gerekir.

SRVCTL hizmeti ile de (Oracle yazılımını kurduğumuz zaman gelen hizmetlerden bir tanesidir) ASM instance'ını açıp kapatabiliriz.

# srvctl start asm -o mount
# srvctl stop asm -f

# srvctl status asm
ASM is running on vals1

Bunun dışında ASMCMD kullanılarakta ASM instance kapatılıp açılabilir.

# asmcmd

ASMCMD> startup [--nomount | --restrict]
ASMCMD> shutdown [--abort | --immediate]

ASMCMD'nin en büyük özelliği unix komutlarını kabul etmesidir. Örneğin ls (list). ASMCMD'nin içerisine girerek, nerede, neyin olduğunu ve bu datafile'ların hangi adlarla kaydedildiğini görebilirsiniz. Örnek olarak /CONTROLFILE dizininin altında ASM kontrol dosyasını bulunduracaktır.

Sırada bir disk grubunun hangi redundancy tiplerine sahip olabileceğini inceleyebiliriz. Bu arada bir disk grubunu SAN'a ait mantıksal alanlara benzetebilirsiniz.

4 Mart 2011 Cuma

double`da virgulden sonraki sayilari yuvarlama

Asagidaki metodu yazip, toplamdan cikan double degeri gonderdigimizde virgulden sonra yanliz 2 rakam gosterecektir.

public double round(double value) {
        int decimalPlace = 2;
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(decimalPlace, BigDecimal.ROUND_UP);
        return bd.doubleValue();
    }