o10g asm 16
TRANSCRIPT
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
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
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관련 작업부담은 필요치 않게 되었다는 것이다.
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를 선택한다.
http://www.ggola.com 장 경 상
3. 이제 다음 화면에서 앞서 언급한 3 개의 packages를 download한다. 현재 필자의
linux kernel version에서는 아래 그램의 위에서부터 3개를 download하게 될 것이다.
그림 9-1
ASM Library List
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 \
그림 9-2
Platform & Library
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를
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
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
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):
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
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
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하는 과정이다.
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)
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개를 사용할 준비가 되었다고 하겠다.
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를 가지고 있기 때문이다.
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 사용에 있어서도 보다 효율적이라 할 수 있다.
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을 사용하기 위해서는 적어도
그림 9-3
ASM vs non-ASM
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된다.
표 9-1
ASM Parameters
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이 복잡할
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 ##
~
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를 제대로 인식하고 있는지 확인하자.
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에 익숙한 사용자를 위해 그 예를 좀
살펴보면 다음과 같다.
http://www.ggola.com 장 경 상
먼저 “$ORACLE_HOME/bin/dbca”를 수행하면 다음과 같은 화면을 볼 수 있다. (이는
앞서 chapter 2에서 이미 익숙한 화면들이다)
다음으로 이동한다.
그림 9-4
DBCA 실행화면
그림 9-5
DBCA 실행화면
http://www.ggola.com 장 경 상
“Create a Database”를 선택한 후 다음으로 이동한다.
그림 9-6
DBCA 실행화면
http://www.ggola.com 장 경 상
“General Purpose”를 선택한 후 다음으로 이동한다.
Database 정보를 입력한 후 다음으로 이동한다.
그림 9-7
DBCA 실행화면
그림 9-8
DBCA 실행화면
http://www.ggola.com 장 경 상
em의 database control을 사용할 수 있도록 위와 같이 설정한 후 다음으로 이동한다.
여러분이 원하는 password를 설정한 후 다음으로 이동한다.
그림 9-9
DBCA 실행화면
http://www.ggola.com 장 경 상
여기서 ASM을 선택한 후 다음으로 이동한다.
그림 9-10
DBCA 실행화면
그림 9-11
DBCA 실행화면
http://www.ggola.com 장 경 상
ASM instance를 위한 password를 설정한 후 다음으로 이동한다.
“Next”를 선택하면 이제 ASM instance를 만들겠다는 message가 나온다. “OK”를
진행한다.
그림 9-12
DBCA 실행화면
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;
그림 9-13
ASM Disk 설정
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
하였다면 아래와 같은 명령이 유효할 것이다.
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';
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과 결과이다.
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
#
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
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되면
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
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
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
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;
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을 사용하는 종류와 그 속성이다.
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을 수정하거나 삭제할 수도 있다.
표 9-2
ASM과 Files
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;
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;
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';
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';
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를
표 9-3
Oracle File Type과 Tag
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
표 9-4
ASM File Format과 속성
표 9-5
ASM Fully Qualified 형식과 의미
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 구조로 인식하여
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
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”을 통해
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;
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.
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
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
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
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.
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
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
표 9-6
ASM 관련 View List
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
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하는 방법