ASM

ASM이란?


ASM은 데이터베이스 구성 시 기본이 되는 디스크를 효율적으로 관리하기 위하여 오라클 10g에서 새로 선보인 데이터베이스 서비스이다. ASM은 하나의 SMP 장비뿐만 아니라 클러스터를 구성하는 모든 노드들에 대해서도 지원이 가능하다. ASM이 관리하는 모든 디스크에 대한 업무 분산 작업을 자동적으로 처리해 줌으로써 특정 디스크에 로드가 집중되는 핫 스팟(hot spot)현상을 최소할 수 있으며 이로 인해 성능을 극대화할 수 있다. 또한 데이터가 디스크에 균등한 크기로 저장 관리되어 fragmentation 현상이 발생하지 않는다. 그리고 ASM이 관리하는 영역에서 새로운 디스크가 추가되거나 삭제될 때마다, 기존 데이터들에 대해 재구성 작업이 자동적으로 일어난다. 또한 ASM은 특정 데이터에 대한 복사본을 자기 자신의 디스크에 유지할 수 있기 때문에 소프트웨어 미러링 효과를 볼 수 있다.

 

RAC 환경에서의 ASM 인스턴스


RAC 데이터베이스처럼 ASM 인스턴스들도 자체적으로 클러스터링을 할 수 있다. 이는 이미 셋업이 되어 있는 DLM 체계를 사용해서 가능한 것이다. 일반적으로 클러스터를 이루는 하나의 노드에는 하나의 ASM 인스턴스가 뜨도록 구성한다. 그리고 RAC 구성처럼 ASM 인스턴스가 관리하는 디스크는 모든 노드에서 인식 가능하도록 구성해야 한다. 데이터베이스 인스턴스는 오직 동일 노드에 있는 ASM 인스턴스와 상호 통신하게 된다. 만약 동일 노드에 서로 다른 데이터베이스 인스턴스가 존재할 경우, 그들은 그 노드에 있는 하나의 ASM 인스턴스를 공유하게 되는 것이다.

 

특정 디스크 그룹은 서로 다른 데이터베이스 파일을 저장할 수 있다. 이처럼 RAC 환경이 아닌 상태에서 서로 다른 데이터베이스가 동일한 디스크 그룹에 접근하는 것이 가능하다. 또한 하나의 데이터베이스는 동일한 ASM 인스턴스에 의해 관리되는 여러 개의 디스크 그룹에 그 데이터베이스 파일을 저장할 수도 있다.



Scalability

ASM imposes the following limits:

  • 63 disk groups in a storage system
  • 10,000 ASM disks in a storage system
  • 4 petabyte maximum storage for each ASM disk
  • 40 exabyte maximum storage for each storage system
  • 1 million files for each disk group
  • Maximum files sizes as shown in the following table:

Disk Group Type

Maximum File Size

External redundancy

35 TB

Normal redundancy

5.8 TB

High redundancy

3.9 TB

 

 

ASM을 설치하기 위한 최소 설정


1.     ASM에 사용할 디스크가 필요합니다.

2.     커널 버전에 맞는 ASMLib 파일이 필요합니다.

3.     Initialization Parameters for ASM Instances

4.     수동으로 ASM을 구성을 위해 init파일을 작성을 합니다. 최소 다음의 내용을 작성해야 합니다.

 

Name

Description

INSTANCE_TYPE

Type은 반드시 ASM으로 구성해야 합니다.

 

Note: 반드시 포함되어야 하는 최소한의 옵션입니다.모든 변수에서 기본이 되는 값입니다.

ASM_POWER_LIMIT

디스크의 기본이 되는 power해당되는 값입니다.

Default: 1, Range: 0 11

 

See Also: "Tuning Rebalance Operations"

ASM_DISKSTRING

ASM_DISKSTRING 디스크의 순서를 생각 할 수 있습니다. Diskstring을 아래와 같이 기재하면 자동으로 인식하게 됩니다.

/dev/rdsk/*

/dev/rdsk/*s3,/dev/rdsk/*s4

위의 내용을 다음과 같이 간단히 할 수도 있습니다.:

/dev/rdsk/*s[34]

기본 값은 NULL이고 필수사항이 아닙니다기재하지 않으면 기본값으로 설정됩니다.

 

See Also: "Improving Disk Discovery Time"

ASM_DISKGROUPS

ASM instance 시작 시에 자동으로 Mount할 디스크 그룹의 목록을 기재하는 항목입니다. 기본 값은 NULL입니다. 만일 설정값에 아무 값도 없다면 no disk 상태로 마운트됩니다. 설정 값이 static이 아닌 dynamic으로 되어 있기 때문에 spfile에 기록해서 자동으로 ASM에 추가할 수도 있습니다.

 

Note: Issuing the ALTER DISKGROUP...ALL MOUNT or ALTER DISKGROUP...ALL DISMOUNTcommand does not affect the value of this parameter.

 

 

 

 


 

ASM의 장점들

 

1. 디스크 I/O의 효과적인 분산

스토리지를 추가하면 이전 스토리지안에 있던 자료들이 자동으로 rebalance되어서 자료들이 분산됩니다.

 

2. VLDB지원(Very Large DB)

 

 

ASM Disk Group


ASM에서는 디스크를 여러개 묶어서 디스크 그룹으로 관리하는데, 1개의 그룹에는 최소 2개의 디스크가 있어야 합니다.

데이터가 들어올 때 AU라는 단위로 나누어서 각 디스크그룹별로 분산해서 저장하게 되는데,

AU(Allocation Unit)

   1) COARSE grained 방식 : 1MB단위로 기록되고, 주로 data, archivelog 파일에 사용

   2) FINE grained 방식 : 128KB단위로 기록되고, 주로 redo, control, flashback log 파일에 사용

의 두가지 옵션을 가집니다.

(11g  ASM부터는 AU의 종류가 1/2/4/8/16/32/64 MB로 다양하게 지원되어,

DB운영계획에 따라 적절히 지정하여 성능개선을 할 수 있습니다.)

 

 

Rebalance


Filesystem을 사용하게 되면 디스크그룹 내에 새 디스크가 추가되거나 제거되면 성능개선을 하기 위해서는

DBA가 직접 기존 디스크의 내용을 분산하거나, 이동시켜야 합니다.

 

ASM을 이용하게 되면 이러한 rebalance작업은 자동으로 ASM에서 수행하게 되고,

DB부하에 따라 rebalance에 얼마나 많은 CPU%를 배당할지도 지정할 수 있습니다.

 

alter diskgroup testdb_dg1 add disk '/dev/sdf1' rebalance power 11;

(1~11 : 1 rebalance되는 속도가 가장느리고, 11이 가장 빠름. 11로 갈수록 rebalance하는데 더 많은 CPU부하를 일으킵니다.)

 

 

ASM에서의 Restrict 옵션


관리자가 disk group 유지보수를 하기 위해 restrict 옵션을 제공하고, 이 옵션으로 디스크그룹을 mount할 경우 일반사용자는 접속할 수 없게되어,

유지관리성능을 더 향상시킬 수 있습니다.

alter diskgroup data mount restrict;

   유지보수종료 후 -->  alter diskgroup data dismount;  --> alter diskgroup data mount;


ASM Instance : 디스크그룹에 대한 정보를 수집해서 Database Instance에 제공, ASMB가 교두보역할

      ORACLE_SID=+ASM 으로 해당 인스턴스에 접속해서 mount, shutdown 할 수 있음

RBAL process : 디스크추가 및 삭제 시 디스크그룹에 대한 Rebalance담당, ASM Instance의 요청이 있을 경우 디스크를 열고 닫는 프로세스

ARBn : RBAL의 명령을 받아 실질적으로 작업을 수행하는 process



ASM parameter

instacne_type: ASM (default: rdbms)
db_unique_name: +asm
asm_power+limit: 1(low)~11(high) 설정 가능. ASM 데이터 리밸런싱 속도 조정 레벨 값 (기본값 1)
asm_diskgroups: ASM 인스턴스 시작시 구동되는 디스크 그룹
asm_diskstring: ASM에 사용된 디스크가 포함된 물리적 경로
asm_preferred_read_failure_groups:I/O 실패가 발생한 그룹을 명시.

ASM SGA 및 주요 parameters
 : ASM Instance 를 통해서 입 출력이 되기 때문에 관련 파일과 파라미터들이 있다.
 
주요파라미터
 - db_cache_size : ASM Instance 가 사용할 cache 크기 결정. 오라클권장값 64M
 - shared_pool : ASM Instance를 관리하는 용도로 사용. 오라클권장값 128M
 - Large_pool : Extent Maps 을 저장하는 용도. 오라클권장값 64M
 
※ 참고
$ORACLE_HOME/dbs/init+ASM.ora
내용
 
*.asm_diskgroups='DATA','FRA'
+ASM.asm_diskgroups='DATA','FRA','NEW_ASM'#Manual Mount
*.background_dump_dest='/home/oracle/admin/+ASM/bdump' → alert log file 저장 경로 지정
*.core_dump_dest='/home/oracle/admin/+ASM/cdump' → core dump 를 저장할 경로 지정
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='SHARED'
*.user_dump_dest='/home/oracle/admin/+ASM/udump'
 
▶ 위 파라미터 외 다른 파라미터를 잘못 지정 할 경우 ORA_15021 에러 발생 - ASM Instance 가 구동 되지 않는다.

col "Parameter Name" for a40
col "Instance Value" for a20

select 
   a.ksppinm "Parameter Name", 
   c.ksppstvl "Instance Value"
from 
   x$ksppi a, 
   x$ksppcv b, 
   x$ksppsv c
where 
   a.indx = b.indx 
and 
   a.indx = c.indx
and 
   ksppinm like '%asm%'
order by 
   a.ksppinm;


Parameter Name Instance Value
---------------------------------------- --------------------
_asm_acd_chunks 1
_asm_admin_with_sysdba FALSE
_asm_allow_appliance_dropdisk_noforce FALSE
_asm_allow_lvm_resilvering TRUE
_asm_allow_only_raw_disks TRUE
_asm_allow_system_alias_rename FALSE
_asm_appliance_config_file
_asm_ausize 1048576
_asm_automatic_rezone TRUE
_asm_avoid_pst_scans TRUE
_asm_blksize 4096
_asm_check_for_misbehaving_cf_clients FALSE
_asm_compatibility 10.1
_asm_dba_batch 500000
_asm_dba_spcchk_thld 20000
_asm_dba_threshold 0
_asm_dbmsdg_nohdrchk FALSE
_asm_diag_dead_clients FALSE
_asm_direct_con_expire_time 120
_asm_disable_amdu_dump FALSE
_asm_disable_async_msgs FALSE
_asm_disable_multiple_instance_check FALSE
_asm_disable_profilediscovery FALSE
_asm_disable_smr_creation FALSE
_asm_disable_ufg_dump FALSE
_asm_disk_repair_time 14400
_asm_emulate_nfs_disk FALSE
_asm_emulmax 10000
_asm_emultimeout 0
_asm_evenread 2
_asm_evenread_alpha 0
_asm_evenread_alpha2 0
_asm_evenread_faststart 0
_asm_fail_random_rx FALSE
_asm_fd_cln_idle_sess_twait 10000000
_asm_fd_cln_on_fg TRUE
_asm_fob_tac_frequency 9
_asm_force_quiesce FALSE
_asm_global_dump_level 267
_asm_hbeatiowait 15
_asm_hbeatwaitquantum 2
_asm_imbalance_tolerance 3
_asm_instlock_quota 0
_asm_iostat_latch_count 31
_asm_kfdpevent 0
_asm_kfioevent 0
_asm_kill_unresponsive_clients TRUE
_asm_libraries ufs
_asm_log_scale_rebalance FALSE
_asm_lsod_bucket_size 67
_asm_max_cod_strides 5
_asm_max_redo_buffer_size 2097152
_asm_maxio 1048576
_asm_partner_target_disk_part 8
_asm_partner_target_fg_rel 4
_asm_primary_load 1
_asm_primary_load_cycles TRUE
_asm_random_zone FALSE
_asm_rebalance_plan_size 120
_asm_rebalance_space_errors 4
_asm_repairquantum 60
_asm_reserve_slaves TRUE
_asm_root_directory ASM
_asm_runtime_capability_volume_support FALSE
_asm_secondary_load 10000
_asm_secondary_load_cycles FALSE
_asm_serialize_volume_rebalance FALSE
_asm_shadow_cycle 3
_asm_skip_rename_check FALSE
_asm_skip_resize_check FALSE
_asm_storagemaysplit FALSE
_asm_stripesize 131072
_asm_stripewidth 8
_asm_sync_rebalance FALSE
_asm_usd_batch 64
_asm_wait_time 18
_asmlib_test 0
_asmsid asm
_ges_diagnostics_asm_dump_level 11
_lm_asm_enq_hashing TRUE
asm_diskgroups DATA, ACFS
asm_diskstring /dev/asm*
asm_power_limit 1
asm_preferred_read_failure_groups


ASM datafile name 변경

ASM에서 Datafile 이름은 랜덤숫자가 붙은 형식으로 끝나는데, 이것을 유저친화적 형식으로 알아보기 쉽게 바꾼다면, alias를 사용해야 한다.
데이터 파일을 바로 생성하는 것이 아닌 기존 파일을 이용한 alias 생성방법.

alter diskgroup disk_group_1 
   add alias 
 '+DISK_GROUP_1/oratst1/datafile/my_system_dbf'
   for 
 '+DISK_GROUP_1/oratst1/datafile/system.1122.764387443';


ASM datafile Copy

$ rman target /

 

Recovery Manager: Release 10.2.0.5.0 - Production on Tue Feb 28 17:50:37 2012

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

connected to target database: TESTDB (DBID=2559693415)

 

RMAN> copy datafile '+DATA/testdb/datafile/ts_new.266.776453331' to '+FRA';

 

Starting backup at 28-FEB-12

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=143 devtype=DISK

channel ORA_DISK_1: starting datafile copy

input datafile fno=00005 name=+DATA/testdb/datafile/ts_new.266.776453331

output filename=+FRA/testdb/datafile/ts_new.260.776454711 tag=TAG20120228T175149 recid=1 stamp=776454711

channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03

Finished backup at 28-FEB-12

 

RMAN> copy datafile '+DATA/testdb/datafile/ts_new.267.776453579' to '+FRA';

 

Starting backup at 28-FEB-12

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile copy

input datafile fno=00006 name=+DATA/testdb/datafile/ts_new.267.776453579

output filename=+FRA/testdb/datafile/ts_new.261.776454737 tag=TAG20120228T175217 recid=2 stamp=776454738

channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01

Finished backup at 28-FEB-12

 

※ 참고 - 주의!!!!!


 : RMAN에서 복사해주면 경로만 바뀌는게아니라 파일이름도 함께바뀐다. 


SQL> alter database rename file '+DATA/testdb/datafile/ts_new.266.776453331'

  2  to '+FRA/testdb/datafile/ts_new.266.776453331';

alter database rename file '+DATA/testdb/datafile/ts_new.266.776453331'

*

ERROR at line 1: ← 그런파일 없다고 에러난다.

ORA-01511: error in renaming log/data files

ORA-01141: error renaming data file 5 - new file '+FRA/testdb/datafile/ts_new.266.776453331' not found

ORA-01110: data file 5: '+DATA/testdb/datafile/ts_new.266.776453331'

ORA-17503: ksfdopn:2 Failed to open file +FRA/testdb/datafile/ts_new.266.776453331

ORA-15173: entry 'ts_new.266.776453331' does not exist in directory 'datafile'


▶ 위의 copy과정에 진하게 표시해 놓은 부분을 보면 +FRA로 경로가 이동된 파일의 파일 이름도 달라 졌음을 확인할 수 있다. 



ASM에서 pfile 수정


os filesystem 에다가 만든 pfile 을 수정하고 다시 asm 저장공간에 spfile로 만들려면 


SQL> create spfile='+DATA' from pfile;

SQL> exit

$asmcmd

asmcmd> ls parameterfile

spfile.260.672234945

spfile.267.776334921 <-- 요걸로 alias 만듬


asmcmd> rmalias spfileasmdb.ora

asmcmd> mkalias +DATA/TESTDB/PARAMETERFILE/spfile.267.776334921 spfiletestdb.ora



ASM 에서 디스크 추가 제거


$ export ORACLE_SID=+ASM

$ sqlplus / as sysasm;

ASM Disk중 사용 안 하는 것 조회

+ASM> 

set line 200
col path for a15

select group_number, mount_status, path, total_mb
from v$asm_disk where mount_status='CLOSED';

ex)
GROUP_NUMBER MOUNT_STATUS   PATH              TOTAL_MB
------------ -------------- --------------- ----------
0               CLOSED            ASM1                 102400
0               CLOSED            ASM2                 102400
0               CLOSED            ASM3                 102400

ASM Disk 추가

+ASM> alter diskgroup data add disk 'ORCL:ASM1' rebalance power 5;

ASM Disk 상태 조회
+ASM> select group_number, disk_number, name, mount_status, path, total_mb from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAME       MOUNT_STAT PATH              TOTAL_MB
------------ ----------- ---------- ---------- --------------- ----------
           0           4            CLOSED     /dev/raw/raw6           54
           0           5            CLOSED     /dev/raw/raw5          486
           0           6            CLOSED     /dev/raw/raw4          486
           0           7            CLOSED     /dev/raw/raw3          486
           0           8            CLOSED     /dev/raw/raw2          486
           0           9            CLOSED     /dev/raw/raw1          486
           1           0 DATA_0000  CACHED     /dev/raw/raw10      126849
           1           2 DATA_0002  CACHED     /dev/raw/raw8       126849
           1           3 DATA_0003  CACHED     /dev/raw/raw9       126849
           1           1 DATA_0001  CACHED     /dev/raw/raw7       126849
           1           1 ASM1       CACHED     /dev/asm/asm1       102400

ASM2,3 추가

ASM 디스크 상태조회

2) ASM Disk Group에 디스크 추가
+ASM> alter diskgroup DATA add disk 'ASM1' rebalance power 10;
+ASM> alter diskgroup DATA add disk 'ASM2' rebalance power 10;
+ASM> alter diskgroup DATA add disk 'ASM3' rebalance power 10;

3) 13:30 - asm 디스크 삭제 (구 스토리지의 디스크 삭제 후 rebalance)
+ASM> alter diskgroup data drop disk DATA_0000;
+ASM> alter diskgroup data drop disk DATA_0001;
+ASM> alter diskgroup data drop disk DATA_0002;
+ASM> alter diskgroup data drop disk DATA_0003;

명령실행후 diskgroup altered. 메시지가 보여지나 rebalancing 작업이 내부적으로 진행중이며 다음 v$asm_operation view를 통해 ACTIVE한 상태인지 확인할 수 있습니다.

+ASM> select name,header_status,state,free_mb from v$asm_disk;

NAME             HEADER_STATUS            STATE                FREE_MB 
---------------- ------------------------ -------------------- ------------ 
DATA_0000        MEMBER                   NORMAL               126849
DATA_0001        MEMBER                   NORMAL               126849
DATA_0002        MEMBER                   NORMAL               126849
DATA_0003        MEMBER                   DROPPING             126849     → DROP 진행중

내부적 rebalancing 작업이 완료되면 수행중인 OPERATION 이 없어지며 v$asm_disk view에DISK DATA_0003이 없어진 것을 확인할 수 있습니다.


'ORACLE > Admin' 카테고리의 다른 글

Listener password  (0) 2018.10.14
Oracle 8i Startup, shutdown  (0) 2018.04.09
ASM  (0) 2018.03.12
RMAN 마지막 백업 확인  (0) 2017.04.05
DB의 실패한 로그인 확인하는 방법  (0) 2016.10.06
오라클 라이센스별 차이  (0) 2016.04.06

티스토리 툴바