O10g asm 16

62
http://www.ggola.com 9. Automatic Storage Management..............................9-2 9.1. ASM Install........................................9-3 9.1.1...................................................ASM 장장 9-3 9.1.1.1.......................................ASM Library 9-3 9.1.1.2.............................Download and Install 9-3 9.1.2........................................Disk 장장 장 ASM 장장 9-6 9.1.2.1...........................................Add Disk 9-7 9.1.2.2.....................................Add Partition 9-8 9.1.2.3............................Check ASMLib on Linux 9-11 9.1.2.4........................ASMLib 장장장 장 Disk Marking 9-12 9.2. ASM 장 장장..........................................9-14 9.2.1...................................................ASM 장장 9-14 9.2.1.1............................................장장 장 장장 9-14 9.2.1.2.................................................장장 9-15 9.2.1.3..........................................ASM Limit 9-16 9.2.2...................................................ASM 장장 9-16 9.2.2.1......................................ASM Instance 9-16 9.2.2.2....................................ASM Parameters 9-17 9.2.2.3.................................ASM 장장 (Manually) 9-18 9.2.2.4...............................ASM 장장 (Using dbca) [email protected] 1

Transcript of O10g asm 16

Page 1: O10g asm 16

http://www.ggola.com 장 경 상

9. Automatic Storage Management...........................................................9-2

9.1. ASM Install................................................................................9-3

9.1.1. ASM 준비...............................................................................9-3

9.1.1.1...............................................................................ASM Library

9-3

9.1.1.2...............................................................Download and Install

9-3

9.1.2. Disk 추가 및 ASM 등록............................................................9-6

9.1.2.1....................................................................................Add Disk

9-7

9.1.2.2.............................................................................Add Partition

9-8

9.1.2.3............................................................Check ASMLib on Linux

9-11

9.1.2.4................................................ASMLib 활성화 및 Disk Marking

9-12

9.2. ASM 및 설정.............................................................................9-14

9.2.1. ASM 이란.............................................................................9-14

9.2.1.1................................................................................개요 및 특징

9-14

9.2.1.2.............................................................................................장점

9-15

9.2.1.3..................................................................................ASM Limit

9-16

9.2.2. ASM 설정.............................................................................9-16

9.2.2.1............................................................................ASM Instance

9-16

9.2.2.2.......................................................................ASM Parameters

9-17

9.2.2.3.................................................................ASM 생성 (Manually)

9-18

9.2.2.4.............................................................ASM 생성 (Using dbca)

9-21

9.2.3. ASM 관리.............................................................................9-28

9.2.3.1......................................................................ASM 과 Database

9-28

[email protected] 1

Page 2: O10g asm 16

http://www.ggola.com 장 경 상

9.2.3.2..........................................................................Diskgroup 관리

9-29

9.2.3.3.................................................................................ASM Down

9-34

9.2.4. Database에서 사용하기........................................................9-35

9.2.4.1.................................................................ASM으로 Object 생성

9-35

9.2.4.2.......................................................ASM Files 과 Management

9-39

9.2.4.3.......................................................................ASM File Naming

9-45

9.2.4.4...................................................................Alias and Directory

9-47

9.2.5. Migration to ASM................................................................9-49

9.2.5.1...........................................................Migration 순서 와 RMAN

9-49

9.2.5.2...................................................................Migration Example

9-49

9.2.6. Monitoring..........................................................................9-56

[email protected] 2

Page 3: O10g asm 16

http://www.ggola.com 장 경 상

9. Automatic Storage Management

지금 여러분이 운영하고 있는 database system을 생각해보자. 현재 enterprise급

운영환경을 가지고 있다면 거의 대부분은 database 전용 서버를 사용하고 있을

것이다. 즉, database가 탑재된 서버는 database외에 다른 시스템이 올라와 있지

않을 가능성이 높다는 말이다. 그 만큼 주 시스템의 database는 database

전용서버에서 운영중인 경우가 많다.

이러한 운영환경에서 지금 여러분이 oracle database를 탑재하기 위하여 서버의 disk

mirroring, raid, raw device나 file system의 생성 등의 작업을 필요로 하고 있다면

OS 전문가를 필요로 할 것이다. 그러나 이러한 작업이 사실 거의 대부분 oracle

database만을 위한 작업이 될 가능성이 매우 높다는 점을 감안해보면 oracle이 이들

작업을 대신해 주는 것도 좋은 solution이 될 수 있다. 아니 어쩌면 그 편이 더 낳을지도

모르겠다.

Oracle10g는 Automatic Storage Management(이하 ASM)를 소개하면서 위에서

언급한 요구들을 해소하였고 특히나 별도의 비용을 들이지 않고 oracle10g가

제공하는 ASM만으로도 file system, volume manager와 같은 OS의 disk

관리환경을 구성할 수 있어 시스템을 구성하는 비용측면에서도 효율적이라 할 수 있다.

더불어 ASM은 database와 관련된 storage관련 업무(대부분 tablespace를 위한

공간할당, datafile 추가 등 반복적으로 이루어지는 DBA의 일상적인 일들)의 부담도

없애주어 DBA의 수고를 덜어주고 있다.

이제 필요한 disk를 구매하여 시스템에 탑재한 후 그 disk를 oracle에 등록만하면 더

이상의 storage관련 작업부담은 필요치 않게 되었다는 것이다.

[email protected] 3

Page 4: O10g asm 16

http://www.ggola.com 장 경 상

9.1. ASM Install

9.1.1.ASM 준비

9.1.1.1. ASM Library

ASM을 사용하기 위해서는 database가 탑재된 각 platform에 맞는 ASMLib

interface가 필요하다. Linux system에서 이 libraries는 packages로 만들어져

있으며 다음과 같이 “oracleasmlib(ASM libraries), oracleasm-support(ASMLib의

관리 utilities), oracleasm(ASM library를 위한 kernel module)” 세 가지로

분류되어 있다.

물론, 각자의 platform에 따라 ASM library는 다 다를 것임으로 아래의 예를 참조하여

각자에게 맞는 ASM Library를 설치하면 된다. 아래의 예는 필자의 linux 서버를

기준으로 ASM library를 설치하는 과정이다.

9.1.1.2. Download and Install

다음의 과정은 linux kernel version을 확인하고 이에 맞는 library를 찾아 설치하는

전 과정이다.

1. root user로 현재 linux kernel을 확인한다. 사실 현재(2005년 10월 기준) oracle

이 지원하는 ASMLib의 최상위 linux AS kernel이 2.4.21-37이기 때문에 현재 테스트

장비의 kernel도 거기에 맞춘 상태이다. 여러분이 다른 version의 kernel을

사용한다면 각자의 kernel에 맞게 다음 작업을 진행해야 한다.

[root@LIRACLE root]# uname -rm

2.4.21-37.EL i686

2. OTN을 통해 위 version에 맞는 적절한 ASMLib package를 찾는다.

“http://www.oracle.com/technology/tech/linux/asmlib”

아래 화면처럼 자신의 버전에 맞는 linux link를 선택한다.

[email protected] 4

Page 5: O10g asm 16

http://www.ggola.com 장 경 상

3. 이제 다음 화면에서 앞서 언급한 3 개의 packages를 download한다. 현재 필자의

linux kernel version에서는 아래 그램의 위에서부터 3개를 download하게 될 것이다.

[email protected] 5

그림 9-1

ASM Library List

Page 6: O10g asm 16

http://www.ggola.com 장 경 상

4. download한 3 packages를 서버로 load한다. 다음은 pc로 download한 files을

ftp를 이용하여 현재 필자의 테스트 서버인 liracle의 “/download” directory로

upload한 후의 검증 화면이다.

[root@LIRACLE download]# ls -ltr oracle*

-rw-r--r-- 1 root root 13286 10월 10 15:44 oracleasmlib-2.0.0-1.i386.rpm

-rw-r--r-- 1 root root 21115 10월 10 15:44 oracleasm-support-2.0.0-

1.i386.rpm

-rw-r--r-- 1 root root 73145 10월 10 15:44 oracleasm-2.4.21-37.EL-1.0.4-

1.i686.rpm

5. 이제 packages를 install해보자.

[root@LIRACLE download]# rpm -Uvh

rpm: 설치할 패키지가 지정되지 않았습니다

[root@LIRACLE download]# rpm -Uvh \

> oracleasm-2.4.21-37.EL-1.0.4-1.i686.rpm \

[email protected] 6

그림 9-2

Platform & Library

Page 7: O10g asm 16

http://www.ggola.com 장 경 상

> oracleasmlib-2.0.0-1.i386.rpm \

> oracleasm-support-2.0.0-1.i386.rpm

준비 중... ##################################

######### [100%]

1:oracleasm-support

###########################################

[ 33%]

2:oracleasm-2.4.21-37.EL

###########################################

[ 67%]

3:oracleasmlib

###########################################

[100%]

6. 다음은 ASMLib를 사용하기 위하여 configuration을 잡는 부분이다.

[root@LIRACLE download]# /etc/init.d/oracleasm configure

Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library

driver. The following questions will determine whether the driver is

loaded on boot and what permissions it will have. The current values

will be shown in brackets ('[]'). Hitting <ENTER> without typing an

answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: oracle

Default group to own the driver interface []: dba

Start Oracle ASM library driver on boot (y/n) [n]: y

Fix permissions of Oracle ASM disks on boot (y/n) [y]: y

Writing Oracle ASM library driver configuration: [ OK ]

Creating /dev/oracleasm mount point: [ OK ]

Loading module "oracleasm": [ OK ]

Mounting ASMlib driver filesystem: [ OK ]

Scanning system for ASM disks: [ OK ]

9.1.2.Disk 추가 및 ASM 등록지금부터의 과정은 현재 여러분이 사용중인 테스트서버가 여러분 맘대로 disk를

[email protected] 7

Page 8: O10g asm 16

http://www.ggola.com 장 경 상

추가할 수 있는 경우에만 가능한 부분이다. 필자는 시스템을 down한 후 테스트중인 pc

에 15G slave disk를 추가한 후 다음의 과정을 진행하려 한다. 즉, 여러분이 개인 pc에

linux를 기반으로 테스트를 하고 있다면 hard disk 하나를 추가한 후 다음의 과정을

따라 하면 되겠지만 그렇지 않다면 각자의 환경에 맞게 disk를 추가하거나 아니면

추가했다는 가정하에 다음의 내역들을 확인하기 바란다.

9.1.2.1. Add Disk

먼저 현재 상태를 확인해 보자. 현재 disk를 추가한 상태이지만 아직 file system에는

아무런 변화가 없음을 확인할 수 있다.

[root@LIRACLE download]# df -k

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/hda2 28296744 14929412 11929920 56% /

/dev/hda1 101089 9224 86646 10% /boot

none 384460 0 384460 0% /dev/shm

다음의 명령을 통해 disk가 제대로 추가되어 있음을 확인할 수 있다. “/dev/hdb”를

확인하라. 원래 있던 primary hard disk는 “/dev/hda”로 새로 추가한 secondary

hard disk는 “/dev/hdb”로 인식되고 있다. 사실 필자가 추가한 disk는 windows에서

사용하던 것이라 System항목을 보면 현재 “NTFS” format임도 확인된다.

[root@LIRACLE download]# fdisk -l

Disk /dev/hda: 30.6 GB, 30616363008 bytes

255 heads, 63 sectors/track, 3722 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/hda1 * 1 13 104391 83 Linux

/dev/hda2 14 3592 28748317+ 83 Linux

/dev/hda3 3593 3722 1044225 82 Linux swap

Disk /dev/hdb: 15.0 GB, 15020457984 bytes

255 heads, 63 sectors/track, 1826 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/hdb1 * 1 1826 14667313+ 7 HPFS/NTFS

[email protected] 8

Page 9: O10g asm 16

http://www.ggola.com 장 경 상

다음은 원래 빈 disk를 추가한다는 가정을 하기 위하여 새로 추가된 disk의 partition을

삭제하는 과정이다. 여러분이 빈 disk를 삽입했다면 이 과정은 필요하지 않을 것이다.

[root@LIRACLE download]# fdisk /dev/hdb

The number of cylinders for this disk is set to 1826.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):

여기서 “d”를 입력하여 partition을 delete하고 뒤이어 “w”를 입력하여 변경내역을

저장하고 fdisk를 종료한다.

Command (m for help): d

Selected partition 1

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@LIRACLE download]#

이제 변경된 내역을 확인하자. 아래와 disk 정보 이외엔 아무런 정보도 나타나지

않는다. 이제 정말 빈 disk를 추가한 것이다.

[root@LIRACLE download]# fdisk -l /dev/hdb

Disk /dev/hdb: 15.0 GB, 15020457984 bytes

255 heads, 63 sectors/track, 1826 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

[email protected] 9

Page 10: O10g asm 16

http://www.ggola.com 장 경 상

9.1.2.2. Add Partition

다음은 추가된 disk를 partition하는 과정이다. 현재 15G 임으로 3개의 partition으로

나눌 것이다. 최초 두 개의 partition은 동일한 size로 나머지는 남은 size를 하나의

partition으로 설정할 것이다. 먼저 첫 번째 partition이다.

[root@LIRACLE root]# fdisk /dev/hdb

The number of cylinders for this disk is set to 1826.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/hdb: 15.0 GB, 15020457984 bytes

255 heads, 63 sectors/track, 1826 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4):

Value out of range.

Partition number (1-4): 1

First cylinder (1-1826, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-1826, default 1826): +5120M

Command (m for help):

[email protected] 10

Page 11: O10g asm 16

http://www.ggola.com 장 경 상

다음 두 번째 partition

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 2

First cylinder (624-1826, default 624):

Using default value 624

Last cylinder or +size or +sizeM or +sizeK (624-1826, default 1826):

+5120M

Command (m for help):

마지막으로 세 번째 partition을 생성한 후 이를 저장한다.

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 3

First cylinder (1247-1826, default 1247):

Using default value 1247

Last cylinder or +size or +sizeM or +sizeK (1247-1826, default 1826):

Using default value 1826

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@LIRACLE root]#

이제 제대로 작업이 진행되었는지를 다음과 같이 확인한다.

[root@LIRACLE root]# fdisk -l /dev/hdb

[email protected] 11

Page 12: O10g asm 16

http://www.ggola.com 장 경 상

Disk /dev/hdb: 15.0 GB, 15020457984 bytes

255 heads, 63 sectors/track, 1826 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/hdb1 1 623 5004216 83 Linux

/dev/hdb2 624 1246 5004247+ 83 Linux

/dev/hdb3 1247 1826 4658850 83 Linux

제대로 작업이 수행되었음을 알 수 있다.

9.1.2.3. Check ASMLib on Linux

다음은 linux에서 oracle ASM을 점검하는 내역이다. 다음의 명령어들이 원하는

결과를 보여주는가를 확인하여 ASM 구성을 할 때에 문제발생 가능성을 없도록 한다.

1. Load된 module의 list를 통해 아래 결과에서 “oracleasm”이 있는가를 확인한다.

[root@LIRACLE root]# lsmod

Module Size Used by Not tainted

parport_pc 18724 1 (autoclean)

lp 8932 0 (autoclean)

parport 36800 1 (autoclean) [parport_pc lp]

oracleasm 14356 1

autofs 13204 0 (autoclean) (unused)

audit 89912 1

e100 28264 1

mii 3956 0 [e100]

floppy 56592 0 (autoclean)

sg 36204 0 (autoclean) (unused)

scsi_mod 106924 1 (autoclean) [sg]

microcode 5656 0 (autoclean)

keybdev 2944 0 (unused)

mousedev 5492 0 (unused)

hid 22212 0 (unused)

input 5856 0 [keybdev mousedev hid]

usb-uhci 25708 0 (unused)

usbcore 77344 1 [hid usb-uhci]

ext3 85800 2

[email protected] 12

Page 13: O10g asm 16

http://www.ggola.com 장 경 상

jbd 50924 2 [ext3]

2. 다음은 file system 구성 정보를 확인하여 “oracleasmfs”이 존재여부를 확인한다.

[root@LIRACLE root]# cat /proc/filesystems

nodev rootfs

nodev bdev

nodev proc

nodev sockfs

nodev tmpfs

nodev shm

nodev pipefs

ext2

nodev ramfs

nodev hugetlbfs

iso9660

nodev devpts

ext3

nodev usbdevfs

nodev usbfs

nodev autofs

nodev oracleasmfs

3. 다음은 oracle계정으로 login하여 “oracleasmfs”가 mount되어 있는지를

확인한다.

[NEWSVC]LIRACLE:/app/oracle> df -ha

Filesystem Size Used Avail Use% Mounted on

/dev/hda2 27G 15G 12G 56% /

none 0 0 0 - /proc

none 0 0 0 - /dev/pts

usbdevfs 0 0 0 - /proc/bus/usb

/dev/hda1 99M 9.1M 85M 10% /boot

none 376M 0 376M 0% /dev/shm

oracleasmfs 0 0 0 - /dev/oracleasm

9.1.2.4. ASMLib 활성화 및 Disk Marking

다음은 ASMLib driver를 enable하는 과정이다.

[email protected] 13

Page 14: O10g asm 16

http://www.ggola.com 장 경 상

[root@LIRACLE download]# /etc/init.d/oracleasm enable

Writing Oracle ASM library driver configuration: [ OK ]

Scanning system for ASM disks: [ OK ]

다음은 새로 추가된 disk를 oracleasm에 mark하는 작업이다. 일반적인 형식은

다음과 같다.

# /etc/init.d/oracleasm createdisk DISK_NAME /dev/hd??

이제 직접 새로 추가한 disk를 mark하자. 편의상 그 이름을 oracle volume의 series

라는 의미로 “OV1..3”로 하겠다.

[root@LIRACLE root]# /etc/init.d/oracleasm createdisk OV1 /dev/hdb1

Marking disk "/dev/hdb1" as an ASM disk: [ OK ]

[root@LIRACLE root]# /etc/init.d/oracleasm createdisk OV2 /dev/hdb2

Marking disk "/dev/hdb2" as an ASM disk: [ OK ]

[root@LIRACLE root]# /etc/init.d/oracleasm createdisk OV3 /dev/hdb3

Marking disk "/dev/hdb3" as an ASM disk: [ OK ]

[root@LIRACLE root]#

다음은 만들어진 disk를 확인하는 방법이다.

[root@LIRACLE root]# /etc/init.d/oracleasm listdisks

OV1

OV2

OV3

다음은 ASMLib를 통해 oracleasmfs(Oracle ASM FileSystem)이 추가된 disks를

제대로 인식하고 있는지 확인해 보자. 먼저 “mount”를 통해 위치와 device 이름을

확인한 후 list를 조회해 보자.

[root@LIRACLE root]# mount

/dev/hda2 on / type ext3 (rw)

none on /proc type proc (rw)

none on /dev/pts type devpts (rw,gid=5,mode=620)

usbdevfs on /proc/bus/usb type usbdevfs (rw)

/dev/hda1 on /boot type ext3 (rw)

none on /dev/shm type tmpfs (rw)

oracleasmfs on /dev/oracleasm type oracleasmfs (rw)

[email protected] 14

Page 15: O10g asm 16

http://www.ggola.com 장 경 상

[root@LIRACLE root]# ls -l /dev/oracleasm/disks

합계 0

brw-rw---- 1 oracle dba 3, 65 10월 11 17:58 OV1

brw-rw---- 1 oracle dba 3, 66 10월 11 17:58 OV2

brw-rw---- 1 oracle dba 3, 67 10월 11 17:58 OV3

위 결과를 통해 이제 oracle10g가 ASM disk 3개를 사용할 준비가 되었다고 하겠다.

[email protected] 15

Page 16: O10g asm 16

http://www.ggola.com 장 경 상

9.2. ASM 및 설정

9.2.1.ASM 이란

9.2.1.1. 개요 및 특징ASM은 물리적 디스크들을 “diskgroup”이라는 이름의 논리적인 entity로서 grouping

한다. 즉, 여러 디스크를 oracle이 명명하는 이름의 diskgroup에 묶어서 striping 혹은

mirroring된 file system을 oracle에게 제공하는 역할을 한다. 이것이 ASM file

system이라 부른다.

이 file system은 oracle외의 다른 목적으로 사용할 수 없으며 buffer를 사용하지 않기

때문에 direct access를 함으로써 마치 raw device처럼 성능을 높여주고 반대로 file

system이 갖는 편리함과 유연성을 제공하게 된다.

전통적인 방식의 logical volume manager는 물리적인 blocks에 논리적인 blocks의

주소를 mapping하는 hashing function을 사용한다. 따라서 이는 필연적으로

function을 위한 CPU소비를 수반하고 또한 striping된 disk구성에 새로운 disk가

추가되면 bit단위의 재배치 작업을 요구하게 되는 한계를 가지고 있다. 반면에 ASM

file system은(전체 disk를 일정한 크기의 extent로 분할하여) 물리적인 blocks에 file

extents를 mapping한다. 이 물리적인 disks은 diskgroup이라는 이름으로 원하는

수의 disks를 묶어서 group으로 관리됨으로 동일 diskgroup내에 속하는 여러 disks

에는 각각의 datafiles을 균등하게 분산시킬 수 있다.

이러한 ASM의 특징들은 특별한 oracle instance를 사용하여 이루어 지는데 이

instance는 file extents의 locating 작업을 매우 빠르게 지원하고 또한 disk를

추가하고 제거하는 등의 작업 시 별도의 locating 작업을 따로 진행할 필요를

제거해준다. 이러한 instance를 ASM instance라 부르는데 내용은 달라도 disk를

관리하는 이런 형식의 구조는 다른 file systems도 마찬가지다. 따라서 ASM file

system을 oracle database가 사용하기 위해서는 반드시 ASM instance가 running

중 이어야 하고(그래야만 disk로의 access가 가능함으로) 한 machine에 하나의 ASM

instance가 한 machine의 여러 oracle database를 위해 service할 수 있다. (한

서버내의 여러 databases는 하나의 local ASM instance를 공용할 수 있다)

또한 ASM instance는 database를 가지지 않는 instance로만 존재하는데 그 이유는

ASM file system으로 만들어지는 diskgroup이 “self-describing” 즉, diskgroup 그

자체에 가능한 모든 metadata를 가지고 있기 때문이다.

[email protected] 16

Page 17: O10g asm 16

http://www.ggola.com 장 경 상

9.2.1.2. 장점위에서 설명한 ASM의 속성들을 종합해 볼 때 ASM을 사용하면 다음과 같은 이점들을

생각해 볼 수 있다.

1. downtime 없이(database running 중 online으로) file extent가 자동으로

분배됨으로 disk의 추가작업이 간단하다. OS상에 disk를 추가한 후 ASM에 disk를

add하면(“add disk”) 끝이다. 반대로 disk를 제거하는 것도 ASM에서 drop하면

(“drop disk”) 끝이다.

2. DBA나 어떤 관리자의 간섭이 없이 I/O가 diskgroup에 자동으로 골고루 분배됨으로

사용 가능한 disks에 대한 I/O 분산효과를 자동으로 제공한다. 또한 이는 ASM storage

구성의 변화가 생길 때(disk 추가 혹은 제거) 자동으로 data를 재분배를 online으로

해줌으로 항상 최적의 분산효과를 유지할 수 있다(I/O가 집중되는 hot spot을 찾거나

또는 이를 피하기 위한 data 설계를 굳이 할 필요가 없다). 이 기능은 추가적으로

새로운 storage를 구성하여 data를 이동하는 것도 online으로 지원할 수 있도록

해준다. 따라서 이왕에 disk작업을 할 것이라면 한번에 여러 disks를 추가하고

제거하는 등의 작업을 한번에 하는 것이 좋다. 그래야 불필요한 rebalancing의 반복을

줄이고 1회 작업으로 끝낼 수 있기 때문이다.

CF. 이러한 장점이 가능한 것은 ASM이 extents의 분산을 index기법을 통해 구성하기

때문에 disk의 변경에 따른 전체 data를 대상으로 restriping을 하지 않고 data의

분포가 균형을 이루도록 하는 것으로 충분하기 때문이다.

3. files에 대한 striping의 size를 유효 적절하게 설정할 수 있다. 예를 들면 128KB

처럼 작은 단위의 빠른 transfer를 설정할 수도 있고 1MB처럼 한 번에 큰 단위의

transfer를 설정할 수도 있다. 이는 redo log file(빈번한 transfer)이나 datafile(큰

block의 transfer)처럼 files의 성격에 따라 적절한 sizing을 할 수 있도록 해준다.

이러한 두 가지 형태를 “Coarse”, “Fine-grained”라 부르는데 coarse는 1MB 단위를

말하고 fine-grained는 128KB 단위를 말한다.

4. 앞서 언급 했듯이 buffering을 하지 않음으로 direct access의 빠른 성능을 기대할

수 있다.

5. ASYNC I/O를 위한 별도의 설정이 필요치 않다. 즉, 다른 disk관련 제품들을 사용할

필요가 없으며 별도의 설정을 하지 않고도 ASYNC I/O를 구현할 수 있다.

6. disk상으로 mirroring을 구현할 수 없다면 ASM을 통해 아주 간단하게 software

mirroring을 구현할 수 있으며 이 경우엔 stripping을 위해 OS level의 RAID가 필요

없다. 이 ASM mirroring 방식은 disk mirroring이 아니라 ASM이 관리하는 extents

의 mirroring이기 때문에 OS에서 RAID5처럼 만일을 대비한 “hot spare disk”를 가질

필요도 없음으로 disk 사용에 있어서도 보다 효율적이라 할 수 있다.

[email protected] 17

Page 18: O10g asm 16

http://www.ggola.com 장 경 상

7. 위 모든 사항들은 platform independent 즉, platform과 상관없이 oracle10g가

지원하는 것들이다.

결론적으로 과거의 storage 관리 절차가 최대한 단순화됨으로써 장점들이 발생한다고

이해하면 되겠다. 아래의 표는 그 변화를 보여준다.

9.2.1.3. ASM Limit

1. storage system당 63개의 disk groups

2. storage system당 10,000개의 disks

3. ASM disk당 최대 4 petabyte

4. storage system당 최대 40 exabyte

5. 각 diskgroup당 최대 1백만 files

6. 각 file당 최대 2.4 terabyte

CF. oracle10g release 2부터는 모든 file system storage limit이 제거된다.

9.2.2.ASM 설정

9.2.2.1. ASM Instance

이미 언급이 되었지만 oracle ASM은 ASM이라는 새로운 형식의 oracle instance에

의해 ASM disks가 관리되고 운영 database는 이 ASM instance와의 통신을 통해

필요한 file I/O정보를 받고 작업을 수행한다. 따라서 ASM을 사용하기 위해서는 적어도

[email protected] 18

그림 9-3

ASM vs non-ASM

Page 19: O10g asm 16

http://www.ggola.com 장 경 상

(사실은 거의) 하나의 ASM instance를 만들어야 할 것이다. ASM은 instance

형태로만 존재하여 data dictionary를 가지지 않기 때문에 오로지 SYSOPER,

SYSDBA같은 OS 인증만을 허용한다. 따라서 remote로 접속하기 위해서는 password

file의 사용이 필수적이다.

ASM instance는 두 가지 새로운 background processes를 제공한다. RBAL, ARB0

~ ARBn 이 두 가지 유형의 background process가 ASM의 주 기능인 지속적인 data

balancing작업과 연관이 있다. “RBAL”은 rebalancing을 coordinate하는 역할을

하고 “ARB0 ~ ARBn“은 실질적인 rebalancing 작업(data extent movement)을

수행한다.

CF. 보통의 database도 ASM files을 사용하기 위하여 두 가지 new background

processes를 사용한다. ASMB, RBAL이 그것이다. “RBAL”은 ASM files을 global

open하는 역할을 수행하고 “ASMB”는 ASM instance에 foreground process로

접속하여 database와 ASM instance간의 다리역할을 수행한다. 이 연결을 통해

주기적으로 message를 주고 받으면서 통계정보를 update하고 상태를 검증하는 등의

작업이 이루어진다.

9.2.2.2. ASM Parameters

ASM instance를 만들기 위해서는 당연히 이와 관련한 initial parameter의 설정이

필요하다. 이는 ASM parameters와 ASM의 성격을 반영하는 parameters로 생각해

볼 수 있다.

Parameter Description

instance_type = ASM Instance의 유형을 결정한다. ASM을 위해 “ASM”을

설정하면 된다. 물론, default는 보통의 instance를 위한

“RDBMS”로 설정된다.

db_unique_name=+AS

M

ASM instance의 경우 default로 “+ASM”이 설정된다.

이는 ASM을 구분하는 unique한 이름을 말하는 것으로

보통 수정할 필요가 없다. 그러나 만일에 한 서버에서 여러

ASM instance를 구동한다면 즉, “running multiple

ASM instance on the same node”의 경우라면 이름이

중복되지 않도록 적절한 이름을 설정한다.

CF. 일반 database의 경우엔 db_name의 값이 사용된다.

asm_diskgroups =

‘name1’, ‘name2’,

‘name3’

이 parameter는 diskgroup의 이름을 설정하는 것으로

설정된 diskgroup들은 startup시 자동으로 mount된다.

[email protected] 19

표 9-1

ASM Parameters

Page 20: O10g asm 16

http://www.ggola.com 장 경 상

asm_diskstring =

name

이 parameter에는 disk의 이름을 설정한다. 이는 여러

diskgroup들을 일일이 열거하지 않고 disk 이름에

wildcard를 사용하여 한번에 처리할 수 있게 해준다.

EX. “/dev/hdisk/hd*”

asm_power_limit = [1-

11]

Default는 1이며 앞서 설명한 storage 구성 변경에 따른

동적 재분배(data 분산 online 자동화)를 위해 사용되는

process의 수를 조절하기 위해 사용한다.

large_pool_size ASM instance에 의해 사용되는 내부 packages은 large

pool에서 수행되기 때문에 반드시 이 parameter의 값을

설정할 필요가 있다. 적어도 8MB 이상을 설정한다.

CF. parameter instance_type은 instance가 mount될 때 어떻게 작동할 것인가를

결정한다. 즉, instance_type이 보통의 database의 경우처럼 default “RDBMS”이면

control file로 mount가 되지만 “ASM”이면 diskgroup으로 mount가 된다. 따라서

최초 ASM instance는 diskgroup이 있어야만 mount될 수 있다. 이는 차후 ASM

instance를 구성하여 start하는 예에서 다시 보게 될 것이다.

CF. asm_diskgroups parameter에 설정된 diskgroup들은 다음과 같은 mount

명령에 영향을 준다. 즉, 다음 명령은 이 parameter에 속한 모든 diskgroup들을

mount한다.

SQL> alter diskgroup all mount;

사실 ASM instance가 mount될 때에 위 명령이 내부적으로 수행되는 것이다.

CF. asm_power_limit parameter의 값 대신 아래와 같은 command line의 명령도

rebalancing을 수행하는 processes의 수를 지정할 수 있다.

SQL> alter diskgroup diskgrp_no1 drop disk ‘/dev/hd12’ rebalance power 6;

CF. 위 large_pool_size parameter 이외의 buffer관련 parameter는 default값을

사용하도록 한다. 보통 ASM instance SGA는 대부분 64MB로 충분히 사용할 수 있다.

9.2.2.3. ASM 생성 (Manually)

ASM instance를 생성하는 것은 비교적 간단하다. 관련된 parameter를 설정하고

환경만 만들어주면 되기 때문이다.

CF. 앞서 ASM에서 관장하는 모든 diskgroup이 “self-describing”이라고 했던 것을

기억하자. 어지간한 정보는 다 diskgroup 스스로 가지고 있기 때문에 ASM이 복잡할

[email protected] 20

Page 21: O10g asm 16

http://www.ggola.com 장 경 상

이유도 없다.

먼저 OFA를 기본으로 하는 환경을 구성하자.

[NEWSVC]LIRACLE:/app/oracle> cd admin

[NEWSVC]LIRACLE:/app/oracle/admin> mkdir +ASM

[NEWSVC]LIRACLE:/app/oracle/admin> mkdir +ASM/bdump

[NEWSVC]LIRACLE:/app/oracle/admin> mkdir +ASM/cdump

[NEWSVC]LIRACLE:/app/oracle/admin> mkdir +ASM/udump

[NEWSVC]LIRACLE:/app/oracle/admin> mkdir +ASM/pfile

이제 parameter file을 설정하자.

[NEWSVC]LIRACLE:/app/oracle/admin/+ASM/pfile> vi init+ASM.ora

#

# created : 2005.10.12 by KS. JANG

# set basic parameter for ASM

instance_type=ASM

large_pool_size=12M

#set log destination

background_dump_dest='/app/oracle/admin/+ASM/bdump'

user_dump_dest='/app/oracle/admin/+ASM/udump'

core_dump_dest='/app/oracle/admin/+ASM/cdump'

#user default

#db_unique_name=+ASM

#asm_diskgroups = ..

#asm_diskstring = ..

#asm_power_limit = [1-11]

###no need to set other parameters ##

~

[email protected] 21

Page 22: O10g asm 16

http://www.ggola.com 장 경 상

~

~

:wq!

[NEWSVC]LIRACLE:/app/oracle/admin/+ASM/pfile>

이제는 ORACLE_SID를 변경한 후 parameter link를 만든다.

[NEWSVC]LIRACLE:/app/oracle/admin/+ASM/pfile> cd $ORACLE_HOME/dbs

[NEWSVC]LIRACLE:/app/oracle/product/10.1.0/dbs> export

ORACLE_SID=+ASM

[+ASM]LIRACLE:/app/oracle/product/10.1.0/dbs> ln -s

/app/oracle/admin/+ASM/pfile/init+ASM.ora init+ASM.ora

[+ASM]LIRACLE:/app/oracle/product/10.1.0/dbs> cd

[+ASM]LIRACLE:/app/oracle>

이제 ASM instance를 start하자. 현재는 disk group이 없음으로 “nomount

diskgroup 생성 mount”의 과정을 거친다.

[+ASM]LIRACLE:/app/oracle/product/10.1.0/dbs> cd

[+ASM]LIRACLE:/app/oracle> sqlplus / as sysdba

SQL*Plus: Release 10.1.0.4.0 - Production on Wed Oct 12 16:47:04 2005

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

Connected to an idle instance.

SYS> startup nomount

ASM instance started

Total System Global Area 75497472 bytes

Fixed Size 777852 bytes

Variable Size 74719620 bytes

Database Buffers 0 bytes

Redo Buffers 0 bytes

앞서 설정한 ASM disks를 제대로 인식하고 있는지 확인하자.

[email protected] 22

Page 23: O10g asm 16

http://www.ggola.com 장 경 상

SYS> col library for a55

SYS> col path for a10

SYS> select library, path from v$asm_disk;

LIBRARY PATH

------------------------------------------------------------------------ ---------------

ASM Library - Generic Linux, version 2.0.0 (KABI_V1) ORCL:OV1

ASM Library - Generic Linux, version 2.0.0 (KABI_V1) ORCL:OV2

ASM Library - Generic Linux, version 2.0.0 (KABI_V1) ORCL:OV3

이제 diskgroup을 만들어 mount하자.

SYS> create diskgroup diskgrp_no1 external redundancy disk 'ORCL:OV3';

Diskgroup created.

SYS> col name for a20

SYS> col type for a10

SYS> col value for a20

SYS> show parameter asm_diskgroups

NAME TYPE VALUE

----------------------- ------- ---------------------

asm_diskgroups string DISKGRP_NO1

위 결과를 보면 diskgroup이 추가됨과 동시에 parameter “asm_diskgrups”에도

설정이 된 것을 확인할 수 있다. 현재 필자는 parameter file로 spfile을 사용하고 있지

않음으로 위 값은 ASM instance가 다시 시작될 때는 의미가 없을 것이다. 따라서

diskgroup 작업이 모두 끝나면 가급적 parameter file을 수정할 필요가 있다.

이제 ASM instance의 생성이 종료되었다. 이제 이 disks를 어떻게 잘 활용할 것인가만

남은 것이다. 앞으로는 이 diskgroup을 관리하고 사용하는 예를 살펴볼 것이다.

9.2.2.4. ASM 생성 (Using dbca)

여러분이 위에서 직접 만드는 방식을 피하고 GUI를 사용하고 싶다면 다음의 과정을

취하면 된다. Oracle은 이 “dbca”방식을 가장 편한 방식이라고 하는데 필자가 볼 때는

오히려 더 복잡하지 않나 싶다. 어찌 되었든 GUI에 익숙한 사용자를 위해 그 예를 좀

살펴보면 다음과 같다.

[email protected] 23

Page 24: O10g asm 16

http://www.ggola.com 장 경 상

먼저 “$ORACLE_HOME/bin/dbca”를 수행하면 다음과 같은 화면을 볼 수 있다. (이는

앞서 chapter 2에서 이미 익숙한 화면들이다)

다음으로 이동한다.

[email protected] 24

그림 9-4

DBCA 실행화면

그림 9-5

DBCA 실행화면

Page 25: O10g asm 16

http://www.ggola.com 장 경 상

“Create a Database”를 선택한 후 다음으로 이동한다.

[email protected] 25

그림 9-6

DBCA 실행화면

Page 26: O10g asm 16

http://www.ggola.com 장 경 상

“General Purpose”를 선택한 후 다음으로 이동한다.

Database 정보를 입력한 후 다음으로 이동한다.

[email protected] 26

그림 9-7

DBCA 실행화면

그림 9-8

DBCA 실행화면

Page 27: O10g asm 16

http://www.ggola.com 장 경 상

em의 database control을 사용할 수 있도록 위와 같이 설정한 후 다음으로 이동한다.

여러분이 원하는 password를 설정한 후 다음으로 이동한다.

[email protected] 27

그림 9-9

DBCA 실행화면

Page 28: O10g asm 16

http://www.ggola.com 장 경 상

여기서 ASM을 선택한 후 다음으로 이동한다.

[email protected] 28

그림 9-10

DBCA 실행화면

그림 9-11

DBCA 실행화면

Page 29: O10g asm 16

http://www.ggola.com 장 경 상

ASM instance를 위한 password를 설정한 후 다음으로 이동한다.

“Next”를 선택하면 이제 ASM instance를 만들겠다는 message가 나온다. “OK”를

진행한다.

[email protected] 29

그림 9-12

DBCA 실행화면

Page 30: O10g asm 16

http://www.ggola.com 장 경 상

ASM instance의 생성이 끝나고 disk를 설정하는 화면이 나온다. 여기서 계속해서

“Create New”를 통해 disk 설정을 계속 진행하면 된다.

물론 위 작업은 “dbca” 즉, database를 생성하는 과정이기 때문에 계속 다음 작업을

이어가면 완전한 database 형태가 만들어질 것이다. 사실 ASM은 instance만으로도

충분하니 여기서 필요한 diskgroup을 추가한 후 “Cancel”을 해도 상관없을 것이다.

9.2.3.ASM 관리

9.2.3.1. ASM 과 Database

새롭게 ASM instance가 사용됨으로 이 instance와 운영 database instance간의

관계에 영향을 주는 command가 있음을 짚고 넘어가자. Database가 ASM files을

사용하기 위해선 주기적으로 ASM instance와의 통신이 필요할 것이고 이는

database가 ASM files의 변동 사항을 알기 위해선 필수적이다. 따라서 필요에 의해

ASM instance가 운영 database instance의 접근을 막을 필요가 있다면 그런 기능이

제공되어야 할 것이다. 사실 이는 기존의 명령어를 사용하는 것에 불과하지만 ASM

instance와 운영 database instance의 관계로 인해 영향을 받을 뿐이다.

SQL> alter system enable restricted session;

[email protected] 30

그림 9-13

ASM Disk 설정

Page 31: O10g asm 16

http://www.ggola.com 장 경 상

ASM instance에서 위 명령을 사용하여 운영 database instance의 접근이 차단된다.

반대로 허용을 하려면 다음과 같이한다.

SQL> alter system disable restricted session;

9.2.3.2. Diskgroup 관리가장 기본적인 작업이다. 이미 ASM instance를 생성하면서 생성작업을 살펴본 바

있다. 여기서는 몇 가지 형식의 작업 유형을 살펴본다.

1. 앞서 diskgroup을 생성할 때는 하나의 disk만을 추가했었다. 만일 여러 disk를

하나의 diskgroup에 추가하고 싶었다면 이를 길게 기술해야 했을 것이다. 하지만

다음과 같은 형식은 이를 편하게 할 수 있다. 즉 다음과 같이 wildcard를 사용하여 보다

편하게 여러 disks를 추가할 수도 있다. 하지만 wildcard를 사용할 때에는 다음과 같은

사항을 주의해야 한다. 즉, wildcard에 해당하는 disk중 하나라도 사용 중이면 해당

command는 실패하게 된다는 것이다. 이는 물론, alter diskgroup을 통해 disk를

add할 때에도 마찬가지이다.

SQL> create diskgroup diskgrp_no1 external redundancy disk ‘ORCL:OV*’;

여기서 “external redundancy”의 의미는 disk failure발생시 diskgroup이 down

된다는 즉, disk 손상에 대한 문제를 oracle이 보장하지 않는다는 것이다. 따라서 이런

구성은 hardware의 disk mirroring처럼 hardware에서 redundancy가 제공될 때

사용한다. 물론, 테스트를 목적으로 운영하는 database를 위해 그냥 사용할 수는 있다.

그러나 만일, hardware에서 redundancy가 제공되지 못하더라도 다음과 같이

software적으로 mirroring을 구현할 수 있다. 다음은 앞서 필자가 추가한 다른 두 개의

ASM disks “OV1, OV2”를 이용하여 실제로 mirroring을 구현해본 예이다.

SYS> create diskgroup diskgrp_no2 normal redundancy

2 disk 'ORCL:OV1', 'ORCL:OV2';

Diskgroup created.

그러나 사실 필자는 pc에 secondary disk drive하나를 추가했을 뿐이다. 진정한

server급의 장비에서 여러 disks을 추가하고 이를 이용하여 mirroring을 한다면

다음과 같은 형식을 사용하게 될 것이다. 아래의 예는 4개의 완전히 서로 독립된 disks

를 묶어서 2-way mirror 구성을 한다는 가정이다. 예를 들어 새로 추가한 disk

/dev/hdc7, 8은 OVC7, 8로 marking하였고 /dev/hdd7, 8은 OVD7, 8로 marking

하였다면 아래와 같은 명령이 유효할 것이다.

[email protected] 31

Page 32: O10g asm 16

http://www.ggola.com 장 경 상

SQL> create diskgroup diskgroup_name normal redundancy

2 failgroup failgrp_1 disk

3 'ORCL:OVC7',

4 ' ORCL:OVC8',

5 failgroup failgrp_2 disk

6 ' ORCL:OVD7',

7 ' ORCL:OVD8';

위의 형식은 마치 “/dev/hdc7, 8”이 “/dev/hdd7, 8”과 1:1 관계를 갖는 것처럼

보이지만 실제로 ASM은 모두 통합하여 redundancy를 구현한다. 즉, “/dev/hdc7”에

있는 file은 “/dev/hdd8”에 mirroring되어 있을 수도 있다. 만일, “/dev/hdc7” disk에

문제가 생기면 다른 disk”/dev/hdd7, /dev/hdd8”에 mirroring된 data를 가지고

database운영이 지속될 수 있게 된다. 이는 ASM files은 extents로 관리됨으로 그

mirroring도 extents로 관리되기 때문이다. 또한 “/dev/hdc7, 8” 모두 문제가 생기면

failgroup failgrp_2를 이용해 database가 운영되는 것은 물론이고 data의 integrity

도 보장된다.

CF. 만일 보다 고급의 mirror를 구현하고 싶다면 위 형식에서 2-way mirror option

“normal”대신 “high”를 적용하여 3-way mirror를 구현할 수도 있다.

2. 방금 만들었던 두 번째 diskgroup을 삭제해 보자.

SYS> drop diskgroup diskgrp_no2;

Diskgroup dropped.

위와 같이 diskgroup을 삭제할 때에는 option으로 “including contents”를 사용할

수도 있다. 사실 위 명령은 default로 “excluding contents” option이 적용되는

것으로 지정된 diskgroup이 비어있지 않으면 error가 발생한다. 하지만 아래의 형식은

지정된 diskgroup내에 files이 있어도 drop하겠다는 뜻이다.

SQL> drop diskgroup diskgroup_name including contents;

3. 이미 생성한 diskgroup에서 독립적으로 disk를 추가하거나 제거하는 것도

가능하다. 아래는 앞서 drop된 diskgrp_no2에 있던 disks를 현재 사용중인

diskgrp_no1에 추가하고 삭제하는 예이다. 먼저 추가하는 작업을 해보자.

SYS> alter diskgroup diskgrp_no1 add disk 'ORCL:OV1';

[email protected] 32

Page 33: O10g asm 16

http://www.ggola.com 장 경 상

Diskgroup altered.

SYS> alter diskgroup diskgrp_no1 add disk 'ORCL:OV2';

Diskgroup altered.

이번에는 disk를 삭제해보자. 최초 diskgrp_no1을 만들 때 구성했던 “OV3”을 제거해

보자. 아래의 예에서 사용된 disk의 이름을 주목하자.

SYS> alter diskgroup diskgrp_no1 drop disk 'ORCL:OV3';

alter diskgroup diskgrp_no1 drop disk 'ORCL:OV3'

*

ERROR at line 1:

ORA-15107: missing or invalid ASM disk name

SYS> alter diskgroup diskgrp_no1 drop disk OV3;

Diskgroup altered.

앞서 diskgroup을 생성하고 disk를 추가하는 작업에서 사용한 disk의 이름은

“v$asm_disk.path”에 있는 값 disk를 찾는 “search_string”을 사용했었다. 그러나

disk를 제거할 때에는 “search_string”이 아니라(“ ‘ “ 즉, quotation이 없음을

주목하라) ASM에 등록된 disk의 이름 그 자체를 사용한다.

4. 다음은 현재까지 diskgroup의 생성 및 변경결과를 확인해보는 과정이다.

현재까지의 작업을 종합해 보면 다음과 같다.

(1) diskgrp_no1을 OV3 disk를 이용하여 생성

(2) diskgroup diskgrp_no2를 OV1, OV2를 가지고 생성

(3) diskgroup diskgrp_no2 drop

(4) diskgrp_no1에 OV1, OV2 disk 추가

(5) diskgrp_no1의 disk OV3 drop

따라서 결론적으로 diskgroup은 “diskgrp_no1”만 존재하며 해당 disks로는 “OV1,

OV2”만 할당이 되어 있는 상태일 것이다.

다음 그 결과를 확인할 수 있는 SQL과 결과이다.

[email protected] 33

Page 34: O10g asm 16

http://www.ggola.com 장 경 상

SYS> col group_number for 999

SYS> col path for a10

SYS> col name for a20

SYS> select group_number grp, name, type, total_mb , free_mb

2 from v$asm_diskgroup;

GRP NAME TYPE TOTAL_MB FREE_MB

---------- ---------------------- ------------ ----------------- -------------

1 DISKGRP_NO1 EXTERN 9772 9720

SYS> select group_number grp, path from v$asm_disk;

GRP PATH

--------- ---------------

0 ORCL:OV3

1 ORCL:OV1

1 ORCL:OV2

위 첫 번째 SQL의 결과를 보면 하나의 diskgroup이 존재하고 external redundancy

로 만들어져 있음을 알고 있다. 그리고 그 size는 대략 9.5G이며 아직 사용하지 않고

있음으로 각 disk header를 제외한 전체 size가 free size로 나타난다.

두 번째 SQL의 결과를 보면 disk OV3은 현재 소속된 diskgroup이 없지만 나머지는

모두 1번 diskgroup 즉, 첫 번째 SQL의 결과의 1번 diskgroup인 diskgrp_no1에

속해 있음을 알 수 있다.

5. 이제 initial parameter를 수정하여 ASM instance가 start될 때마다 자동으로

diskgroup이 mount될 수 있도록 한 후 ASM instance를 restart하자.

SYS> shutdown

ASM diskgroups dismounted

ASM instance shutdown

SYS> exit

Disconnected from Oracle Database 10g Enterprise Edition Release

10.1.0.4.0 - Production

With the Partitioning, OLAP and Data Mining options

[+ASM]LIRACLE:/app/oracle> vi admin/+ASM/pfile/init+ASM.ora

#

[email protected] 34

Page 35: O10g asm 16

http://www.ggola.com 장 경 상

# created : 2005.10.12 by KS. JANG

# modified : 2005.10.13 by KS. JANG

# set basic parameter for ASM

instance_type=ASM

large_pool_size=12M

asm_diskgroups = 'DISKGRP_NO1' # the first disk group

#set log destination

background_dump_dest='/app/oracle/admin/+ASM/bdump'

user_dump_dest='/app/oracle/admin/+ASM/udump'

core_dump_dest='/app/oracle/admin/+ASM/cdump'

#user default

#db_unique_name=+ASM

#asm_diskstring = ..

#asm_power_limit = [1-11]

###no need to set other parameters ##

~

~

~

~

:wq

[+ASM]LIRACLE:/app/oracle> sqlplus / as sysdba

SQL*Plus: Release 10.1.0.4.0 - Production on Thu Oct 13 13:16:04 2005

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

Connected to an idle instance.

SYS> startup

[email protected] 35

Page 36: O10g asm 16

http://www.ggola.com 장 경 상

ASM instance started

Total System Global Area 75497472 bytes

Fixed Size 777852 bytes

Variable Size 74719620 bytes

Database Buffers 0 bytes

Redo Buffers 0 bytes

ASM diskgroups mounted

SYS>

CF. 그 밖에 주요 명령으로 다음과 같은 것들이 있다.

disk drop후 아직 drop이 완료되지 않은 상태에서 이를 취소하는 명령

SQL> alter diskgroup ‘group_name ‘ undorp disks;

disks에 문제가 있는지를 확인하고 error가 있다면 이를 수정하는 명령

SQL> alter diskgroup ‘group_name ‘ check all repair;

disk를 mount, dismount하는 명령

SQL> alter diskgroup all [mount|dismount];

SQL> alter diskgroup ‘group_name ‘ [mount|dismount];

9.2.3.3. ASM Down

앞서도 이야기 했듯이 ASM instance는 host server가 boot될 때 같이 startup하고

host server가 down될 때 같이 shutdown 되는 것을 원칙으로 삶는다. ASM

instance가 가상의 oracle file system과 연결하는 유일한 통로이기 때문이다. 따라서

위와 같이 ASM instance를 shutdown할 때에는 몇 가지 규칙이 있다.

1. 정상적인 normal shutdown은 ASM을 사용하는 database가 shutdown될 때까지

wait한다. 이는 사실 ASM을 사용하기 위하여 ASM instance에 연결되어 있는 다른

database의 foreground process가 종료되기를 기다리는 것과 같다.

2. 그러나 immediate나 abort shutdown은 ASM instance에 연결된 다른

database의foreground process를 종료시킨다. 따라서 ASM을 사용하는 다른

database로 하여금 자신들의 background process ASMB를 통해 각자의 database

instance를 강제로 종료한다.

3. 하나의 ASM instance만 운용하고 있고 diskgroup에 update가 되던 중에 ASM

instance failure가 발생하면 이는 ASM이 다시 startup된 후 diskgroup의 log를 통해

복구된다.

4. 복수의 ASM instance가 diskgroup을 공유하는 경우에 하나의 ASM이 failure되면

[email protected] 36

Page 37: O10g asm 16

http://www.ggola.com 장 경 상

해당 ASM이 update하던 변경사항들은 다른 ASM에 의해 자동으로 복구된다.

5. 어떤 경우이든 database instance의 failure는 ASM에 영향을 주지 않는다.

9.2.4.Database에서 사용하기

9.2.4.1. ASM으로 Object 생성먼저, 새로운 창을 열어서 운영 database를 startup하고 ASM 인식여부를 확인하자.

[NEWSVC]LIRACLE:/app/oracle> sqlplus / as sysdba

SQL*Plus: Release 10.1.0.4.0 - Production on Thu Oct 13 13:36:22 2005

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

Connected to an idle instance.

SYS> startup

ORACLE instance started.

Total System Global Area 473956352 bytes

Fixed Size 779736 bytes

Variable Size 136583720 bytes

Database Buffers 331350016 bytes

Redo Buffers 5242880 bytes

Database mounted.

Database opened.

다음으로 이 database에서 앞서 만든 ASM diskgroup을 인식하는지 확인하자.

SYS> select instance_name from v$instance;

INSTANCE_NAME

---------------------------

NEWSVC

SYS> select name from v$asm_diskgroup;

NAME

[email protected] 37

Page 38: O10g asm 16

http://www.ggola.com 장 경 상

---------------------

DISKGRP_NO1

SYS> select * from v$asm_client;

no rows selected

SYS> select * from v$asm_disk;

no rows selected

분명 ASM diskgroup은 확인이 되지만 아직 이 database가 사용하고 있는 것이

아님으로 다른 정보는 나타나지 않는다.

이제 실제로 ASM을 사용하는 table을 생성해보자. 당연히 table을 만들기 위해서는

tablespace를 생성해야 할 것이고 따라서 DBA는 tablespace를 이 ASM을 이용해

만드는 것을 끝으로 더 이상의 storage관련 작업은 하지 않아도 된다. 단지 database

의 전략적 차원에서 data의 증가량 및 보존기간에 따른 disk를 추가할 것인가를

결정하고 이를 수행하면 된다. 먼저 tablespace를 생성하고 생성된 정보를 확인하자.

SYS> create tablespace ts_asm_no1 datafile '+diskgrp_no1';

Tablespace created.

SYS> col tablespace_name for a10

SYS> col file_name for a55

SYS> select tablespace_name, file_name, bytes/1024/1024 alloc

2 from dba_data_files

3 where tablespace_name like 'TS_ASM%';

TABLESPACE FILE_ID FILE_NAME ALLOC

------------------- ----------- -------------------------------------------------------------------------------------

----------

TS_ASM_NO1 11 +DISKGRP_NO1/newsvc/datafile/ts_asm_no1.256.571595383

100

[email protected] 38

Page 39: O10g asm 16

http://www.ggola.com 장 경 상

현재 생성된 tablespace는 완전히 ASM을 사용하는 default 값으로 구성이 되었다.

즉, datafile의 이름으로 diskgroup을 사용한 것 말고는 아무것도 지정을 하지 않았고

따라서 ASM의 default인 100MB size와 file name의 형식을 따라 datafile이름이

결정되면서 tablespace가 생성된 것이다. 이 datafile은 자동으로 autoextend

enable이고 unlimited maximum size의 속성을 갖는다.

이제 다른 창에서 현재의 database로 RMAN 연결을 통해 backup을 받아보자. 현재

이 ts_asm_no1 tablespace의 datafile은 ASM만 인식하고 있는 상태임으로 “as

copy”를 통해 backup을 받아서 실제 size를 확인해 보자. 테스트는 tablespace와

datafile 모두 두 차례 진행한다.

[NEWSVC]LIRACLE:/app/oracle> cd temp

[NEWSVC]LIRACLE:/app/oracle/temp> rman target /

Recovery Manager: Release 10.1.0.4.0 - Production

Copyright (c) 1995, 2004, Oracle. All rights reserved.

connected to target database: NEWSVC (DBID=3941507194)

RMAN> backup as copy tablespace ts_asm_no1;

Starting backup at 13-OCT-05

using target database controlfile instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=520 devtype=DISK

channel ORA_DISK_1: starting datafile copy

input datafile fno=00011

name=+DISKGRP_NO1/newsvc/datafile/ts_asm_no1.256.571595383

output

filename=/app/oracle/flash_recovery_area/NEWSVC/datafile/o1_mf_ts_asm_

n_1nw3z1z1_.dbf tag=TAG20051013T164224 recid=16 stamp

=571596158

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

Finished backup at 13-OCT-05

[email protected] 39

Page 40: O10g asm 16

http://www.ggola.com 장 경 상

Starting Control File Autobackup at 13-OCT-05

piece

handle=/app/oracle/flash_recovery_area/NEWSVC/autobackup/2005_10_13/

o1_mf_n_571596161_1nw3zn54_.bkp comment=NONE

Finished Control File Autobackup at 13-OCT-05

RMAN> backup as copy datafile 11;

Starting backup at 13-OCT-05

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile copy

input datafile fno=00011

name=+DISKGRP_NO1/newsvc/datafile/ts_asm_no1.256.571595383

output

filename=/app/oracle/flash_recovery_area/NEWSVC/datafile/o1_mf_ts_asm_

n_1nw44l1y_.dbf tag=TAG20051013T164521 recid=17 stamp

=571596334

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

Finished backup at 13-OCT-05

Starting Control File Autobackup at 13-OCT-05

piece

handle=/app/oracle/flash_recovery_area/NEWSVC/autobackup/2005_10_13/

o1_mf_n_571596337_1nw453jm_.bkp comment=NONE

Finished Control File Autobackup at 13-OCT-05

모두 정상적으로 성공하였다. 앞서 database session 창으로 이동하여 과연 눈으로

보이지 않았던 ASM file의 size가 backup을 통해 실제 size로 나타나는지 확인해 보자.

SYS> !ls -l ./flash_recovery_area/NEWSVC/datafile/*

-rw-r----- 1 oracle dba 104865792 Oct 13 16:42

./flash_recovery_area/NEWSVC/datafile/o1_mf_ts_asm_n_1nw3z1z1_.dbf

-rw-r----- 1 oracle dba 104865792 Oct 13 16:45

./flash_recovery_area/NEWSVC/datafile/o1_mf_ts_asm_n_1nw44l1y_.dbf

SYS> select (104865792-8192)/1024/1024 from dual;

[email protected] 40

Page 41: O10g asm 16

http://www.ggola.com 장 경 상

(104865792-8192)/1024/1024

---------------------------------------

100

실제로 생성된 file의 size는 head block을 제외하고 정확하게 100MB로 나타난다.

이제 table을 하나 생성해서 transaction을 발생시켜보자. 이것으로 ASM file을

사용하는 것이 아무런 문제가 되지 않음이 확인된다.

SYS> create table x_asm_no1 (a varchar2(1)) tablespace ts_asm_no1;

Table created.

SYS> insert into x_asm_no1 values (1);

1 row created.

SYS> commit;

Commit complete.

SYS> select * from x_asm_no1;

A

--

1

SYS> drop table x_asm_no1;

Table dropped.

9.2.4.2. ASM Files 과 Management

ASM은 비단 datafile을 위해서만 사용할 수 있는 것이 아니다. 필요하다면 control

file, online 및 archive log file, tempfile을 위해서도 사용할 수 있다. 또한 spfile을

ASM file로 구성할 수도 있고 RMAN을 위해서도 사용할 수 있다.

1. 아래의 표는 ASM file을 사용하는 종류와 그 속성이다.

[email protected] 41

Page 42: O10g asm 16

http://www.ggola.com 장 경 상

“Striped” 부분은 앞서 ASM의 장점을 이야기 하면서 언급했던 stripping 할 때의 size

“Coarse : 1MB”와 “Find-Grained : 128KB”를 상기하기 바란다. 이렇게 크기를

달리하는 것은 file의 속성에 따라 block의 transfer를 달리하는 것이 성능에 도움이

되기 때문이다.

Template Name File Type Striped

CONTROL Control files Fine

DATAFILE Datafiles and copies Coarse

ONLINELOG Online logs Fine

ARCHIVELOG Archive logs Coarse

TEMPFILE Tempfiles Coarse

BACKUPSET Datafile backup pieces

datafile incremental backup pieces

archive log backup pieces

Coarse

PARAMETERFILE SPFILEs Coarse

DATAGUARDCONFIG Disaster recovery, configurations

(standby databases)

Coarse

FLASHBACK Flashback logs Fine

CHANGETRACKING Block change tracking data

(incremental backups)

Coarse

DUMPSET Data Pump dumpset Coarse

XTRANSPORT Cross-platform converted datafile

(이 기종간 tablespace 이동)

Coarse

AUTOBACKUP Automatic backup files Coarse

이러한 file types은 v$asm_template”을 통해 ASM이 지원하는 file의 유형(이를

template이라 표현한다)과 그 속성에 대한 내역을 제공한다. 위에서 기술한

templates은 oracle10g가 default로 제공하는 것들이며 원한다면 이를 수정할 수도

있고 새로 여러분 만의 template을 추가할 수 도 있다. 예를 들어 여러분이 원하는

형태의 template을 만들어 이를 등록하고 사용할 수도 있다는 것이다.

예를 들어 다음과 같이 template을 추가할 수도 있다.

SQL> alter diskgroup diskgrp_no1’ add template template_name

attributes(UNPROTECTED|MIRROR[COARSE|FINE]);

또한 다음과 같이 만들어진 templates을 수정하거나 삭제할 수도 있다.

[email protected] 42

표 9-2

ASM과 Files

Page 43: O10g asm 16

http://www.ggola.com 장 경 상

SQL> alter diskgroup diskgrp_no1 alter template template_name

attributes(UNPROTECTED|MIRROR[COARSE|FINE]);

SQL> alter diskgroup diskgrp_no1’ drop template template_name;

이렇게 만들어진 template은 다음과 같은 형식으로 지정을 해서 사용하게 된다.

SQL> create tablespace ‘tbs_name’ datafile ‘+diskgrp_no1(user-template)’;

또는 destination parameter에 사용할 수도 있다.

1. “init.ora” file에서 설정을 하거나.

2. SQL> alter system set db_create_file_dest = ‘+diskgrp_no1(user-

template)’;

CF. 그러나 binary files, trace files, core files, password files, alert logs, audit

files, export files, backup files등은 ASM으로 관리하지 않는다.

2. 다음은 여러 가능한 ASM file type중 online redo log file을 사용해 보는 예이다.

이 예를 통해서 앞서 “Coarse“ stripping을 구성한 datafile과 달리 “Fine” stripping

으로 구성하는 online redo log를 ASM files로 구성해 볼 것이다. 또한 archive를

통해 제대로 switch가 되는지도 살펴보자.

먼저 현재 log group을 확인하고 두 개의 member를 갖는 새로운 redo log group의

추가작업을 진행한 후 생성정보를 보자.

SYS> select group# from v$log;

GROUP#

------------

4

5

6

SYS> alter database add logfile group 7 (

2 '+diskgrp_no1', '+diskgrp_no1') size 8M;

Database altered.

SYS> select member from v$logfile where group# = 7;

[email protected] 43

Page 44: O10g asm 16

http://www.ggola.com 장 경 상

MEMBER

----------------------------------------------------------------------------------

+DISKGRP_NO1/newsvc/onlinelog/group_7.257.571656755

+DISKGRP_NO1/newsvc/onlinelog/group_7.258.571656755

SYS> select bytes/1024/1024 from v$log where group# = 7;

BYTES/1024/1024

-------------------------

8

강제로 switch를 발생 시켜서 새로 추가한 log group이 정상적인 작동을 확인하자.

SYS> alter system switch logfile;

System altered.

SYS> alter system switch logfile;

System altered.

SYS> alter system switch logfile;

System altered.

SYS> select archived from v$log where group# = 7;

ARC

-------

YES

ASM instance 창으로 이동하여 현재 file 생성 정보를 보자. 아래의 결과는 datafile과

online redo log files이 존재함을 알려주며 각각의 striped type도 다름을 알려준다.

SYS> select instance_name from v$instance;

[email protected] 44

Page 45: O10g asm 16

http://www.ggola.com 장 경 상

INSTANCE_NAME

---------------------------

+ASM

SYS> col type for a10

SYS> select type, striped from v$asm_file;

TYPE STRIPED

------------------- --------------

DATAFILE COARSE

ONLINELOG FINE

ONLINELOG FINE

이제 위 online log는 더 이상 필요하지 않음으로 database 창으로 이동하여 drop

한다.

SYS> alter database drop logfile group 7;

Database altered.

3. 이와 같이 ASM은 거의 모든 부분에서 oracle10g의 file을 구성하는 (가상의)file

system으로 사용할 수 있다. 물론, 여러 가지의 oracle file destination으로도 구성할

수 있어서 다음과 같은 형식으로 initial parameter의 설정도 가능하다.

db_create_file_dest = '+diskgrp_no1'

db_create_online_log_dest_1 = '+diskgrp_no2'

db_create_online_log_dest_2 = '+diskgrp_no?'

db_create_online_log_dest_n = ‘diskgroup_name’

db_recovery_file_dest = ‘diskgroup_name’

log_archive_dest = ‘diskgroup_name’

log_archive_dest_n = ‘diskgroup_name’

standby_archive_dest = ‘diskgroup_name’

control_files = ‘diskgroup_name’

아시다시피 “db_create_file_dest” parameter는 dynamic 속성을 가지고 있음으로

database창에서 간단한 테스트를 다음과 같이 진행해보자.

SYS> alter system set db_create_file_dest = '+diskgrp_no1';

[email protected] 45

Page 46: O10g asm 16

http://www.ggola.com 장 경 상

System altered.

SYS> create tablespace ts_asm_no2;

Tablespace created.

SYS> select tablespace_name, file_name, bytes/1024/1024 alloc

2 from dba_data_files

3 where tablespace_name like 'TS_ASM%';

TABLESPACE FILE_NAME ALLOC

------------------- ------------------------------------------------------------------------------------ ----------

TS_ASM_NO1 +DISKGRP_NO1/newsvc/datafile/ts_asm_no1.256.571595383 100

TS_ASM_NO2 +DISKGRP_NO1/newsvc/datafile/ts_asm_no2.258.571659367 100

위 결과는 OMF로 생성되는 tablespace가 parameter “db_create_file_dest”에

영향을 받아 자동으로 ASM files로 생성되는 것을 보여준다.

4. ASM에 의해 자동으로 만들어지는 files은 모두 OMF로 관리되기 때문에 굳이 files

을 직접 삭제하는 등의 작업이 필요하지는 않다. 그러나 꼭 어떤 이유가 있어

개별적으로 file의 삭제를 원하거나 혹은 필요에 의해 사용자가 지정하는 “alias”를

통해 files을 생성했다면(이런 files은 OMF로 관리되지 않음으로 자동으로 삭제되지

않기 때문에) 다음과 같은 형식을 통해 drop작업을 할 수는 있다. 물론, “including

contents and datafiles”처럼 database를 통해 삭제하는 것은 가능하다.

SQL> alter diskgroup diskgrp_no1 drop file ‘file_name’;

먼저 database 창에서 앞서 만든 datafile을 offline 하자.

SYS> alter database datafile

2 '+DISKGRP_NO1/newsvc/datafile/ts_asm_no2.258.571659367' offline;

Database altered.

ASM instance 창에서 해당 file을 제거해 보자.

SYS> alter diskgroup diskgrp_no1 drop file

2 '+DISKGRP_NO1/newsvc/datafile/ts_asm_no2.258.571659367';

[email protected] 46

Page 47: O10g asm 16

http://www.ggola.com 장 경 상

Diskgroup altered.

다시 database 창에서 datafile 정보를 확인해 보자.

SYS> select tablespace_name, file_name, bytes/1024/1024 alloc

2 from dba_data_files

3 where tablespace_name like 'TS_ASM%';

TABLESPACE FILE_NAME ALLOC

------------------- ------------------------------------------------------------------------------------ ----------

TS_ASM_NO1 +DISKGRP_NO1/newsvc/datafile/ts_asm_no1.256.571595383 100

TS_ASM_NO2 +DISKGRP_NO1/newsvc/datafile/ts_asm_no2.258.571659367

위 결과는 마치 OS상에서 없어진 datafile의 정보가 database에 남아있는 것 같은

현상이다. 두 번째 tablespace를 drop하면 당연히 위 datafile의 정보도 없어진다.

SYS> drop tablespace ts_asm_no2;

Tablespace dropped.

SYS> select tablespace_name, file_name, bytes/1024/1024 alloc

2 from dba_data_files

3 where tablespace_name like 'TS_ASM%';

TABLESPACE FILE_NAME ALLOC

------------------- ------------------------------------------------------------------------------------ ----------

TS_ASM_NO1 +DISKGRP_NO1/newsvc/datafile/ts_asm_no1.256.571595383 100

9.2.4.3. ASM File Naming

ASM filename은 6 가지 format으로 사용할 수 있는데 이는 ASM file를 생성하거나

ASM files을 참조(reference)하는데 사용되며 ASM file을 생성할 때는 format에 따라

single file만 지원하는가 아니면 multiple files을 지원하는가로 나누어진다.

ASM filename의 형식은 다음과 같이 총 6가지이다. “Fully Qualified, Numeric,

Alias, Alias with template, Incomplete, Incomplete with template”이 그것이다.

다음의 표는 oracle10g가 기본적으로 제공하는 file type과 그에 따른 tag를

[email protected] 47

표 9-3

Oracle File Type과 Tag

Page 48: O10g asm 16

http://www.ggola.com 장 경 상

보여준다. 이 값들은 실제 ASM file에 그대로 적용된다.

File_Type Tag

CONTROLFILE CF, BACKUP

DATAFILE TABLESPACE_NAME

ONLINELOG GROUP_GROUP#

ARCHIVELOG THREAD_THREAD#_SEQ_SEQUENCE#

TEMPFILE TABLESPACE_NAME

BACKUPSET HASSPFILE_TIMESTAMP

PARAMETERFILE SPFILE

DATAGUARDCONFIG DB_UNIQUE_NAME

FLASHBACK LOG_LOG#

CHANGETRACKING CTF

DUMPSET USER_OBJ#_FILE#

XTRANSPORT TABLESPACE_NAME

AUTOBACKUP HASSPFILE_TIMESTAMP

CF. HASSPFILE_TIMESTAMP에서 “HASSPFILE”은 backupset이 spfile을 포함하면

“S”를 아니면 “N”을 가리킨다.

다음의 표는 ASM file format별로 그 사용에 따른 분류를 한 것이다. 생성할 때

사용하는가 reference할 때 사용할 것인가 그리고 single file 생성을 지원하는가

multiple file 생성을 지원하는가를 구분한다.

Format 참조 Single file 생성 Multiple file 생성

Fully Qualified O X X

Numeric O X X

Alias O O X

Alias(template) X O X

Incomplete X O O

Incomplete(templa

te)

X O O

1. “Fully Qualified”는 만들어진 ASM file을 reference하기 위해 사용하며 전체

구성은 ‘+disk_group/dbname/file_type/tag.file.incarnation’와 같다. 각각의

의미를 살펴보면 다음과 같다.

Format Description

[email protected] 48

표 9-4

ASM File Format과 속성

표 9-5

ASM Fully Qualified 형식과 의미

Page 49: O10g asm 16

http://www.ggola.com 장 경 상

+disk_group diskgroup의 이름

Dbname parameter db_unique_name의 값

file_type oracle file type중 하나(datafile, controlfile등)

tag 앞서 tablespace를 만들었을 때 tablespace 이름, log file을

만들었을 때 group_group#와 같이 file 유형별로 oracle이정한

기본 값

file.incarnatio

n

file과 incarnation한 쌍으로 형성되며 uniqueness를 보장하는 숫자

2. “Numeric”은 +disk_group.file.incarnation으로 구성되고 대체로 interface를

위한 file reference로 사용된다. “+diskgroup_name. 256.571595383”의 형식을

갖는다.

3. “Alias”는 single file의 생성 및 reference를 위해 모두 사용될 수 있다. 이 형식은

diskgroup이름으로 시작해서 원하는 alias string을 사용하며 “/”를 통해 hierarchical

directory 구조를 지원한다. 물론, 이 directory 구조를 사용하기 위해서는 “alter

diskgroup ……. add(drop, rename) directory …….”을 통해 directory를 만들어

관리하고 있어야 한다. 이 형식에서 주의할 점은 실제 file에 대한 alias이기 때문에

file.incarnation과 같은 숫자로 된 “dot”형태가 alias의 끝에 와서는 안 된다는 것이다.

즉, “+disk_group/dir1/mycontrolfile/cf1”과 같은 형식은 가능해도

“+disk_group/dir1/mycontrolfile/cf1.257.4215475”와 같은 형식을 사용해선 안

된다.

CF. 이 alias 및 directory에 대한 설명은 다음 부분에 다시 다룰 것이다.

4. “Alias with template”은 alias와 template을 함께 사용하는 것으로 diskgroup

뒤에 template을 기술하는 것을 제외하고는 alias와 같다.

“+disk_group(template_name)/alias”와 같이 기술한다.

5. “Incomplete”은 앞서 필자가 테스트를 해왔던 ASM file을 만들기 위해 diskgroup

만을 지정하는 형태를 말한다. 이는 single 혹은 multiple files의 생성을 위해 모두

사용할 수 있었음을 이미 확인한바 있다. “+disk_group”의 형태를 말한다.

6. “Incomplete with template”은 incomplete과 template을 함께 사용하는

것으로 앞서 alias의 경우처럼 template을 기술하는 것이다. 물론, 이미 template을

설명할 때 다룬바 있다. “+disk_group(template_name)”의 형태를 말한다.

9.2.4.4. Alias and Directory

ASM file을 사용하면서 굳이 불편한 점을 꼽아보자면 아마도 files의 이름일 것이다.

조금은 복잡하고 긴 이름을 참조해야 하니 경우에 따라서 불편할 수도 있겠다.

Oracle10g는 사용자 편의를 위해 이런 ASM files을 directory 구조로 인식하여

[email protected] 49

Page 50: O10g asm 16

http://www.ggola.com 장 경 상

사용할 수 있도록 directory를 생성, 관리하고 그 구조와 files의 이름을 alias로

mapping하여 사용할 수 있는 기능을 제공한다.

다음의 예는 ASM instance로부터 directory를 만들고 alias를 구성하는 것이다.

SYS> alter diskgroup diskgrp_no1 add directory

2 '+diskgrp_no1/TBS_LOCAL';

Diskgroup altered.

SYS> alter diskgroup diskgrp_no1 add directory

2 '+diskgrp_no1/TBS_LOCAL/data';

Diskgroup altered.

SYS> alter diskgroup diskgrp_no1 add alias

2 '+diskgrp_no1/TBS_LOCAL/data/asm_no01.dbf'

3 for '+diskgrp_no1.256.571595383';

Diskgroup altered.

위의 마지막 SQL문에서 alias를 생성할 때 사용한 원본 file의 name형식은 바로

앞에서 설명한 ASM file형식 중에서 numeric을 어떻게 사용하는지 보여주고 있다.

다음은 ASM instance에서 view를 통해 alias를 확인하는 방법이다. 아래의 예는 현재

최 상위 directory가 “TBS_LOCAL”을 알고 있고 이의 하부 directory가 한 개이며 그

밑에 files이 있는 경우를 보여준다. 즉, 알고 있는 directory와 그 하부 directory의

개수를 알고 있으면 alias file을 찾을 수 있다.

SYS> select name from v$asm_alias where parent_index in

2 (select reference_index from v$asm_alias where parent_index in

3 (select reference_index from v$asm_alias where name = 'TBS_LOCAL'));

NAME

-------------------

asm_no01.dbf

[email protected] 50

Page 51: O10g asm 16

http://www.ggola.com 장 경 상

다음은 ASM이 아닌 database instance에서 실제 tablespace를 생성하면서

지정하는 file이름이 그대로 alias로 사용될 수 있는지 확인하는 과정이다.

SYS> create tablespace ts_asm_no2 datafile

2 '+diskgrp_no1/tbs_local/DATA/tsasmno2.dbf' size 10M;

Tablespace created.

SYS> select tablespace_name, file_name, bytes/1024/1024

2 from dba_data_files where tablespace_name like '%ASM%';

TABLESPAC FILE_NAME BYT

------------------- ------------------------------------------------------------------------------------

-----

TS_ASM_NO1 +DISKGRP_NO1/newsvc/datafile/ts_asm_no1.256.571595383

100

TS_ASM_NO2 +DISKGRP_NO1/tbs_local/data/tsasmno2.dbf 10

위 결과에서 보듯이 directory는 대, 소문자를 구분하지 않고 자유로이 사용할 수

있으며 alias를 사용하여 만든 file이름이 그대로 database에서 인식되고 있음과 size

지정도 제대로 작동함을 알 수 있다.

9.2.5.Migration to ASM

9.2.5.1. Migration 순서 와 RMAN

지금 현재 여러분이 사용하고 있는 database를 ASM storage를 사용하는 것으로

변경하고자 한다면 어떤 방식이 가장 좋을까. 물론, export/import부터 매우 다양하고

여러 형태의 작업방법을 생각해볼 수 있겠지만 OS interface를 지원하지 않는 ASM

files을 사용하기 위해서는 non-ASM database로부터 ASM으로 RMAN을 이용해서

relocate작업을 진행해야 한다.

일반적인 non-ASM database를 ASM database로 migration하는 순서는 다음과

같다.

1~2. migration 대상 database의 parameter 수정과 database의 정상 shutdown

parameter “db_create_file_dest”, “db_create_online_log_dest_n”의 값을 ASM

diskgroup으로 변경 (그 밖의 필요한 destination이 있다면 이 부분도 함께 수정한다)

한 후 “control_files” parameter를 spfile을 사용하는 경우엔 “reset”을 통해

[email protected] 51

Page 52: O10g asm 16

http://www.ggola.com 장 경 상

삭제한다.

CF. client-side parameter file(일반적인 text parameter file)을 사용하는 경우엔

controlfile을 위한 ASM file alias를 명시한다.

3. RMAN을 통해 database startup nomount (controlfile을 access하기 전 상태)

4. controlfile을 restore하여 새로운 controlfile을 ASM file에 생성한다.

5. 새로 생성한 controlfile을 이용하여 database mount

6. RMAN을 이용하여 copy mode로 database를 ASM diskgroup으로 backup

7. database를 copy images로 switch database

8. database open

CF. 만일, migration 대상 database가 block change tracking을 enable한

상태라면 migration의 시작 전 disable, 종료 후 enable을 작업을 다음과 같이

진행한다.

SQL> alter database disable block change tracking;

…… migration 시작 …….

………………………………

…… migration 종료 …….

SQL> alter database enable block change tracking;

9.2.5.2. Migration Example

테스트를 진행하기 위하여 ASM instance에서 새로 diskgroup을 추가하자.

SYS> create diskgroup diskgrp_no2 external redundancy disk 'ORCL:OV3';

Diskgroup created.

다음은 새로운 창을 열어서 migration test를 위해 생성한 작은 용량의 sample

database의 정보를 확인해 보자. 이름은 “SWITCH”라 명명하였고 OMF을 이용하여

생성한 database이다.

SYS> select instance_name from v$instance;

INSTANCE_NAME

---------------------------

SWITCH

SYS> select name from v$controlfile;

[email protected] 52

Page 53: O10g asm 16

http://www.ggola.com 장 경 상

NAME

---------------------------------------------------------------------------------------

/app/oracle/oradata/SWITCH/controlfile/o1_mf_1o5zgjbg_.ctl

/app/oracle/oradata/SWITCH/controlfile/o1_mf_1o5zgj5r_.ctl

SYS> select group#, member from v$logfile;

GROUP# MEMBER

------------ -----------------------------------------------------------------------------------------

1 /app/oracle/oradata/SWITCH/onlinelog/o1_mf_1_1o5zgjr8_.log

1 /app/oracle/oradata/SWITCH/onlinelog/o1_mf_1_1o5zgktn_.log

2 /app/oracle/oradata/SWITCH/onlinelog/o1_mf_2_1o5zgr44_.log

2 /app/oracle/oradata/SWITCH/onlinelog/o1_mf_2_1o5zgynt_.log

SYS> select file#, name from v$datafile;

FILE# NAME

----------

---------------------------------------------------------------------------------------------------

1 /app/oracle/oradata/SWITCH/datafile/o1_mf_system_1o5zh938_.dbf

2 /app/oracle/oradata/SWITCH/datafile/o1_mf_sys_undo_1o5zjkcn_.dbf

3 /app/oracle/oradata/SWITCH/datafile/o1_mf_sysaux_1o5zjm22_.dbf

4 /app/oracle/oradata/SWITCH/datafile/o1_mf_users_1o603znx_.dbf

이제 앞서 설명한 migration step에 따라 작업을 진행해 보자. 첫 번째 step 1~2로

parameter 설정 및 database 정상 shutdown을 진행한다.

SYS> create spfile='/app/oracle/product/10.1.0/dbs/spfileSWITCH.ora'

2 from pfile='/app/oracle/admin/SWITCH/pfile/initSWITCH.ora';

File created.

SYS> alter system reset control_files scope=spfile sid='*';

System altered.

[email protected] 53

Page 54: O10g asm 16

http://www.ggola.com 장 경 상

SYS> alter system set db_create_file_dest = '+diskgrp_no2';

System altered.

SYS> alter system set db_create_online_log_dest_1 = '+diskgrp_no2';

System altered.

SYS> alter system set db_create_online_log_dest_2 = '+diskgrp_no2';

System altered.

SYS> shutdown

Database closed.

Database dismounted.

ORACLE instance shut down.

SYS> exit

Disconnected from Oracle Database 10g Enterprise Edition Release

10.1.0.4.0 - Production

With the Partitioning, OLAP and Data Mining options

다음 step 3은 RMAN으로 database를 startup nomount하는 단계이다.

[SWITCH]LIRACLE:/app/oracle/temp/crt/switch> rman target /

Recovery Manager: Release 10.1.0.4.0 - Production

Copyright (c) 1995, 2004, Oracle. All rights reserved.

connected to target database (not started)

RMAN> startup nomount;

Oracle instance started

[email protected] 54

Page 55: O10g asm 16

http://www.ggola.com 장 경 상

Total System Global Area 264241152 bytes

Fixed Size 778732 bytes

Variable Size 86253076 bytes

Database Buffers 171966464 bytes

Redo Buffers 5242880 bytes

다음 step 4는 controlfile을 ASM file로 생성하는 단계이다.

RMAN> restore controlfile from

2> '/app/oracle/oradata/SWITCH/controlfile/o1_mf_1o5zgjbg_.ctl';

Starting restore at 17-OCT-05

using target database controlfile instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=546 devtype=DISK

channel ORA_DISK_1: copied controlfile copy

output filename=+DISKGRP_NO2/switch/controlfile/backup.256.571931629

output filename=+DISKGRP_NO2/switch/controlfile/backup.257.571931633

Finished restore at 17-OCT-05

다음 step 5는 생성된 ASM controlfile을 이용하여 mount하는 단계이다.

RMAN> alter database mount;

database mounted

released channel: ORA_DISK_1

다음 step 6은 database backup을 통해 ASM으로 image copy를 하는 단계이다.

RMAN> backup as copy database format '+diskgrp_no2';

Starting backup at 17-OCT-05

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=546 devtype=DISK

channel ORA_DISK_1: starting datafile copy

input datafile fno=00001

[email protected] 55

Page 56: O10g asm 16

http://www.ggola.com 장 경 상

name=/app/oracle/oradata/SWITCH/datafile/o1_mf_system_1o5zh938_.dbf

output filename=+DISKGRP_NO2/switch/datafile/system.258.571931735

tag=TAG20051017T135533 recid=1 stamp=571931756

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

channel ORA_DISK_1: starting datafile copy

input datafile fno=00003

name=/app/oracle/oradata/SWITCH/datafile/o1_mf_sysaux_1o5zjm22_.dbf

output filename=+DISKGRP_NO2/switch/datafile/sysaux.259.571931765

tag=TAG20051017T135533 recid=2 stamp=571931776

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

channel ORA_DISK_1: starting datafile copy

input datafile fno=00004

name=/app/oracle/oradata/SWITCH/datafile/o1_mf_users_1o603znx_.dbf

output filename=+DISKGRP_NO2/switch/datafile/users.260.571931779

tag=TAG20051017T135533 recid=3 stamp=571931802

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

channel ORA_DISK_1: starting datafile copy

input datafile fno=00002

name=/app/oracle/oradata/SWITCH/datafile/o1_mf_sys_undo_1o5zjkcn_.dbf

output filename=+DISKGRP_NO2/switch/datafile/sys_undots.261.571931815

tag=TAG20051017T135533 recid=4 stamp=571931822

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

channel ORA_DISK_1: starting datafile copy

copying current controlfile

output filename=+DISKGRP_NO2/switch/controlfile/backup.262.571931829

tag=TAG20051017T135533 recid=5 stamp=571931829

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

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

including current SPFILE in backupset

channel ORA_DISK_1: starting piece 1 at 17-OCT-05

channel ORA_DISK_1: finished piece 1 at 17-OCT-05

piece

handle=+DISKGRP_NO2/switch/backupset/2005_10_17/nnsnf0_tag2005101

7t135533_0.263.571931831 comment=NONE

[email protected] 56

Page 57: O10g asm 16

http://www.ggola.com 장 경 상

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02

Finished backup at 17-OCT-05

다음 step 7은 database를 가장 최근의(방금 작업한) image copies를 이용하여

switch하는 단계이다.

RMAN> switch database to copy;

datafile 1 switched to datafile copy

"+DISKGRP_NO2/switch/datafile/system.258.571931735"

datafile 2 switched to datafile copy

"+DISKGRP_NO2/switch/datafile/sys_undots.261.571931815"

datafile 3 switched to datafile copy

"+DISKGRP_NO2/switch/datafile/sysaux.259.571931765"

datafile 4 switched to datafile copy

"+DISKGRP_NO2/switch/datafile/users.260.571931779"

다음 step 8은 마지막 단계로 ASM files을 가지고 database를 open하는 단계이다.

RMAN> alter database open;

database opened

RMAN> exit;

Recovery Manager complete.

[SWITCH]LIRACLE:/app/oracle>

이제 migration한 database로 login하여 정보확인을 해본 후 shutdown하자.

[SWITCH]LIRACLE:/app/oracle> sqlplus / as sysdba

SQL*Plus: Release 10.1.0.4.0 - Production on Mon Oct 17 14:12:43 2005

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

[email protected] 57

Page 58: O10g asm 16

http://www.ggola.com 장 경 상

Connected to:

Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production

With the Partitioning, OLAP and Data Mining options

SYS> select name from v$controlfile;

NAME

--------------------------------------------------------------------------------

+DISKGRP_NO2/switch/controlfile/backup.257.571934947

+DISKGRP_NO2/switch/controlfile/backup.256.571934949

SYS> select group#, member from v$logfile;

GROUP# MEMBER

------------- ------------------------------------------------------------------------------------------

1 /app/oracle/oradata/SWITCH/onlinelog/o1_mf_1_1o5zgjr8_.log

1 /app/oracle/oradata/SWITCH/onlinelog/o1_mf_1_1o5zgktn_.log

2 /app/oracle/oradata/SWITCH/onlinelog/o1_mf_2_1o5zgr44_.log

2 /app/oracle/oradata/SWITCH/onlinelog/o1_mf_2_1o5zgynt_.log

SYS> select file#, name from v$datafile;

FILE# NAME

---------- ----------------------------------------------------------------------------------

1 +DISKGRP_NO2/switch/datafile/system.267.571935319

2 +DISKGRP_NO2/switch/datafile/sys_undots.264.571935389

3 +DISKGRP_NO2/switch/datafile/sysaux.266.571935345

4 +DISKGRP_NO2/switch/datafile/users.265.571935375

SYS> shutdown

Database closed.

Database dismounted.

ORACLE instance shut down.

SYS> exit

Disconnected from Oracle Database 10g Enterprise Edition Release

[email protected] 58

Page 59: O10g asm 16

http://www.ggola.com 장 경 상

10.1.0.4.0 - Production

With the Partitioning, OLAP and Data Mining options

CF. online redo logs를 제외한 모든 files이 ASM으로 migration되어 있는 것이

확인되었다. 만일, 여러분이 online redo logs도 ASM files로 변경하고 싶다면 먼저

새로운 redo log group을 ASM으로 생성한 후 이전 redo log group을 삭제한다.

CF. oracle release2부터는 ASM기능이 더 좋아짐과 동시에 non-ASM database를

ASM database로 더 쉽게 migration을 도와주기 위한 utility가 제공된다. 또한

한번에 multiple disks에 영향을 주는 operation을 지원한다.

9.2.6.Monitoring

앞서 수 차례 테스트를 진행 하면서 몇 가지 ASM 관련 views를 조회해 보고 그 결과에

대해서 살펴본 바 있다. 다음은 앞서 살펴본 내용을 포함하여 새롭게 추가된 oracle10g

의 ASM관련 views와 그 내용에 대한 간략한 설명이다. 이 views를 통해 확인하는

정보는 ASM instance와 database에서 각각 다른 의미를 갖기 때문에 이를 헛갈리지

않도록 주의해야 한다.

View Description

V$ASM_DISKGROUP ASM : diskgroup 내역으로 diskgroup당 하나의

row(number, name, size related info, state, and

redundancy type)

DB : ASM에 의해 mount된 모든 ASM diskgroup을 위한

하나의 row 정보

V$ASM_CLIENT ASM : ASM diskgroup을 사용하는 database 정보로서

database instance당 하나의 row 정보

DB : ASM을 위한 각 diskgroup당 하나의 row 정보

V$ASM_DISK ASM : diskgroup에 포함되어 있는가와 상관없이 ASM에

의해 발견된 모든 disk당 하나의 row 정보

DB : 현재 database가 사용중인 diskgroup의 disks 정보

V$ASM_FILE ASM : ASM에 mount된 모든 diskgroup의 모든 ASM file

당 하나의 row 정보

DB : no rows.

V$ASM_TEMPLATE ASM : ASM에 mount된 모든 diskgroup에 존재하는

template당 하나의 row

DB : no rows

[email protected] 59

표 9-6

ASM 관련 View List

Page 60: O10g asm 16

http://www.ggola.com 장 경 상

V$ASM_ALIAS ASM : ASM에 mount된 모든 diskgroup의 alias당 하나의

row 정보

DB : no rows.

V$ASM_OPERATION ASM : ASM instance에서 수행중인 active ASM 정보

(long running operation) (data의 동적 재 분배를

monitoring할 수 있다)

DB : no rows

[email protected] 60

Page 61: O10g asm 16

http://www.ggola.com 장 경 상

OCP point

==============================================

=================

1. ARB processes를 증가 시키는 방법 두 가지(command와 parameter)

2. wildcard를 사용해 disk를 추가할 때 주의할 점

3. ASM instance의 shutdown과 연결된 다른 database instance와의 관계

4. ASM이 지원하는 files의 형태와 종류

5. ASM file format의 종류 와 의미

6. ASM alias 사용법 (file creation시와 기존 file에 대한 alias 생성시의 차이)

7. non-ASM file을 ASM file로 migration하는 방법

[email protected] 61