Automatic Storage Management – ASM Nedir, Nasıl Yönetilir ve Detayları
Konu biraz uzun ancak ASM ile ilgili birçok bilgiyi Türkçe olarak içermektedir. Sıkılmadan sonunu getirebilmeniz için belki ara vermeniz faydalı olacaktır
Açıkçası ben yazarken çok keyif aldığım için hiç ara vermedim. Her zamanki gibi öncelikle Automatic Storage Management yani ASM nedir ve Türkçesi ne bunu açıklamak istiyorum. Otomatik depolama yönetimi, bundan sonra ASM olarak devam edelim. ASM’nin nasıl kullanıldığını, disk group ifadesinin ne anlama geldiğini, hangi dinamik performans görüntülerini sorguladığımız zaman ASM bilgilerine erişebiliyoruz gibi konular üzerinde duracağım. Başlarken söylemem gereken ilk şey tabii ki ASM’nin normal bir disk yönetiminden farkının ne olduğu ve neden tercih edilebileceği.
1) I/O yaparken gerçekleşebilecek performans kayıplarını azaltması ve yönetimi.
2) Datafile (indexfile) taşıma ve yeniden organize etme probleminin ortadan kalkması.
3) Datafile isimlendirmesini bizim için yerine getirmesi.
4) Mantıksal küme (logical volume) yönetimini sağlaması.
5) File sistem raw device ve Cluster File sisteme gereksinim hissettirmemesi.
6) Veritabanı yöneticisinin, sistem yöneticisi olan bağımlılığını kısmi olarak azaltması.
Yukarıdaki özellikler arasında belki de en önemlileri arasında datafile’ların normal bir disk üzerinde tutulması ile oluşabilecek dengesiz dağılımların elimine edilmesi sayılabilir. ASM sayesinde, ASM’ye tanıtılan disk’lerin içerisinde bulunan datafile’ların ne durumda olduğunu veya disk alanının hangisinin, ne kadar dolduğunu dert etmemize gerek kalmıyor. Yaşanabilecek risklerden bir tanesi de farklı tablespace’ler içerisinde bulunacak aynı isimlendirmeye sahip dosyaların taşınması sırasında birbirlerini ezmeleri (*nix işletim sistemleri) ortadan kalkacaktır. Bunun yanı sıra veritabanı yöneticisinin elinde birden çok mantıksal mount point (SAN’den paylaştırıldığını varsayalım) olması ve bunların içinde kaybolması sonucu sürekli sistem yöneticisinin kapısını çalması da engellenmiş olacaktır.
ASM’de bir instance’dır. Hatırlayalım, bir Oracle Server “database” yani veritabanı ve “instance” yani Oracle anından oluşmaktadır. ASM de bir instance olduğuna göre klasik instance yapısına çok benzer bir yapıya sahiptir. 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. Gelelim ASM instance’ının hangi bileşenlerden oluştuğuna;
1) Memory – SGA
a) Shared Pool
b) Large Pool
c) ASM Cache
d) Free Memory
2) Processes
a) RBAL
b) ARBn
c) GMON
ç) Onnn
d) PZ9n
e) MARK
f) LMON
g) Diğer işlemler
Yukarıda gördüğünüz üzere ASM instance’ının sahip olduğu SGA biraz daha farklı bileşenlerden oluşmaktadır. Bir veritabanı instance’ından farklı olarak ASM Cache ve Free Memory alanlarına sahiptir ve normal bir instance gibi buffer cache, redolog buffer veya streams/java pool’a sahip değildir. Zaten ASM de bir veritabanı instance’ı değildir, yalnızca sahip olduğu disk’leri yöneten bir araçtır, instance’dır.
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
SQL> show parameter asm_power_limit NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ asm_power_limit integer 1
SQL> SELECT NAME FROM V$FIXED_TABLE WHERE NAME LIKE 'V$ASM%'; NAME ------------------------------ V$ASM_TEMPLATE V$ASM_ALIAS V$ASM_FILE V$ASM_CLIENT V$ASM_DISKGROUP V$ASM_DISKGROUP_STAT V$ASM_DISK V$ASM_DISK_STAT V$ASM_OPERATION 9 rows selected.
SQL> SELECT NAME FROM V$FIXED_TABLE WHERE NAME LIKE 'V$ASM%'; NAME ------------------------------ V$ASM_TEMPLATE V$ASM_ALIAS V$ASM_FILE V$ASM_CLIENT V$ASM_DISKGROUP V$ASM_DISKGROUP_STAT V$ASM_DISK V$ASM_DISK_STAT V$ASM_OPERATION V$ASM_ATTRIBUTE V$ASM_DISK_IOSTAT 11 rows selected.
SQL> select status from v$instance; STATUS ------------ OPEN SQL> alter system checkpoint; System altered. SQL> shu abort; ORACLE instance shut down. SQL> startup nomount; ORACLE instance started. Total System Global Area 1375731712 bytes Fixed Size 2056088 bytes Variable Size 553648232 bytes Database Buffers 805306368 bytes Redo Buffers 14721024 bytes SQL> select count(*) from v$fixed_table where name like 'V$ASM%'; COUNT(*) ---------- 9 SQL> select count(*) from dictionary where table_name like 'ASM%'; select count(*) from dictionary where table_name like 'ASM%' * ERROR at line 1: ORA-01219: database not open: queries allowed on fixed tables/views only
SQL> alter database mount; Database altered. SQL> select count(*) from dictionary where table_name like 'ASM%'; select count(*) from dictionary where table_name like 'ASM%' * ERROR at line 1: <strong>ORA-01219: database not open: queries allowed on fixed tables/views only</strong> SQL> alter database open; Database altered. SQL> select count(*) from dictionary; COUNT(*) ---------- 1811
SQL> desc v$pwfile_users; Name Null? Type ----------------------------------------- -------- ---------------------------- USERNAME VARCHAR2(30) SYSDBA VARCHAR2(5) SYSOPER VARCHAR2(5)
11gR2
SQL> desc v$pwfile_users; Name Null? Type ----------------------------------------- -------- ---------------------------- USERNAME VARCHAR2(30) SYSDBA VARCHAR2(5) SYSOPER VARCHAR2(5) SYSASM VARCHAR2(5)
SQL> grant sysasm to sys; grant sysasm to sys * ERROR at line 1: <strong>ORA-01919: role 'SYSASM' does not exist</strong>




# sqlplus / as sysasm SQL> startup; SQL> shutdown abort;
# srvctl start asm -o mount # srvctl stop asm -f # srvctl status asm ASM is running on vals1
# asmcmd ASMCMD> startup [--nomount | --restrict] ASMCMD> shutdown [--abort | --immediate]
# sqlplus / as sysasm SQL> CREATE DISKGROUP MY_GROUP1 HIGH REDUNDANCY 2 FAILGROUP MY_FAIL1 DISK 3 '/dev/ora1' NAME DISK1 SIZE 120G FORCE, 4 '/dev/ora2', 5 FAILGROUP MY_FAIL2 DISK 6 '/dev/ora3', 7 '/dev/ora4';
SQL> DROP DISKGROUP MY_GROUP1 INCLUDING CONTENTS;
SQL> ALTER DISKGROUP MY_GROUP1 ADD DISK 2 'dev/ora5' NAME DISK5, 3 'dev/ora6' NAME DISK6;
SQL> ALTER DISKGROUP MY_GROUP1 DROP DISK DISK1;
SQL> ALTER DISKGROUP MY_GROUP1 DROP DISK DISK1 2 ADD FAILGROUP MY_FAIL3 DISK 3 '/dev/ora7' NAME DISK7;
SQL> ALTER DISKGROUP MY_GROUP1 UNDROP DISKS;
SQL> ALTER DISKGROUP MY_GROUP1 REBALANCE POWER 3;
SQL> ALTER DISKGROUP MY_GROUP1 DISMOUNT;
SQL> CREATE DISKGROUP MY_GROUP2 NORMAL REDUNDANCY DISK 2 'dev/ora8' NAME DISK8 3 ATTRIBUTE 'compatible.asm' = '11.2';


