2014년 1월 20일 월요일

Unix (System V, BSD에서 Mac OS까지), 그리고 Linux

유닉스와 리눅스에 대한 간단한 정리

OS의 시작

미국 AT&T 사의 벨연구소에서 대형 컴퓨터용 운영체제 MULTICS를개발하는 프로젝트가 1964년에 시작되었다. 

벨연구소는 정교한 운영체제를 목표로 하여 개발에 착수하였으나 강력한 운영체제를목표로 하는 다른 조직과의 방침 차이 때문에 1969년에 프로젝트에서 손을 떼게 되었다.

MULTICS : Multiplexed Information and Computing Service의 약자이다.

이후 벨연구소의 Kenneth Thompson(통칭 Ken Thompson)이심플한 운영체제 개발을 제안하고 미니컴퓨터를 사용하여 개발에 착수했다. 이 운영체제는 Multics에서 따온 "Unics"라는이름이 붙여지게 되었고, 어느새 UNIX로 불리어지게 되었다. 그러나 1969년에 탄생한 UNIX는 수 많은 일들을 겪게 된다.

1969년 : UNIX의 최초 버전은 Ken Thompson이 혼자서 대략 1개월 정도에 만들었다고 한다.

1971년 AT&T 사는 UNIX가 운영체제로서 완성되었다고 판단하여버전 1을 발표하고, 1976년에는 개량된 버전 6을 공개, 매우 낮은 가격으로 대학에 라이센스를 제공하였다. 그리고1979년에 버전 7을 발표하게 된다.


 SystemV 계열 UNIX

AT&T사는 컴퓨터 시스템의 판매를 인정하지 않았기 때문에 별도의 UNIX 전문 조직을 설립하고 UNIX를 상품으로 취급하기로 하였다.이후 이 조직은 USL(Unix System Laboratories)로 명칭을 변경하였으며, 버전 7의 후예라고 할 수 있는SystemV(5)를 1983년에 발표하였다.SystemV는 버전 업을 계속하여 1990년에 SystemV Release4가 발표되었다. SystemV Release4는 줄여서 SVR4로 표기하기도 한다. 그 후 SVR4는 UnixWave, SCO UNIX로 이어지게 된다.



BSD 계열 UNIX

버전 6은 대학에 매우 낮은 가격으로 배포되었는데, 캘리포니아 주립대학(University of California atBerkeley)을 방문중이었던 Ken Thompson과 대학원생이었던 William Joy (통칭 Bill Joy)가 이 버전6의 기능을 확장하여 BSD UNIX로 공개하였다.SD UNIX에는 C쉘이나 vi 에디터, 가상 기억 장치, 메일 시스템, TCP/IP 네트워크 등 편리한 기능이 추가되었는데, 1983년 BSD UNIX 버전 중 하나인 4.2BSD가 발표되었다.

결과적으로 UNIX는 제품으로 판매되는 SystemV(유료), 교육 및 연구기관에서 사용하는 BSD(무료)라는 두 개의 큰 흐름으로 나눠지게 된다.

BSD 진영에서는 AT&T의 UNIX 관련 라이센스를 필요로 하지 않는UNIX를 목표로 하여 완전 오리지널 소스 코드 개발을 시도하였는데, 그 도중 결과물이 1991년에 "NET/2"라는 이름으로공개되었다. 그리고 NET/2를 기반으로 하여 Intel 프로세서를 사용하는 PC에서 동작하는 무료 UNIX 386BSD가개발되었으며, BSDI 사는 BSD/386이라는 제품을 소스 코드와 함께 판매하였다.

그런데 USL은 AT&T 사로부터 UNIX에 관한 라이센스를 양도받은후 BSD는 USL의 저작권을 침해하였다는 소송을 제기하였다. 재판에서 BSDI 사가 BSD/386을 계속 판매하여도 좋다는판결이 내려지지만 USL의 라이센스에 관련된 부분은 소스 코드가 아닌 오브젝트 파일로 되었다. 이 때문에 그 후 캘리포니아대학에서는 USL의 라이센스에 전혀 저촉되지 않는 4.4BSD-Lite를 새롭게 개발하여 1994년에 공개하게 된다.


Linux

SystemV나 BSD와는 별도로 1991년에 Linux라는 UNIX가 개발되었다. 미국의 학회인 IEEE는 UNIX의 표준 규격으로POSIX를 규정하였는데, 이 POSIX를 만족하는 운영체제(UNIX)로 Linux가 개발된 것이다. 이는 무상으로 사용할 수있다.

원래 Linux는 Intel 및 Intel 호환 마이크로프로세서를 사용하는 PC용으로 개발되었으나 지금은 Alpha 마이크로프로세서를 사용하는 PC나 SPARC 프로세서를 사용하는 워크스테이션용으로도 개발되고 있다.



계보를 간단히 정리하면 다음과 같다.



2014년 1월 19일 일요일

유닉스 서버 vs. x86 서버

 IT에서 서버를 나눌 때 흔히 나누는 분류가 유닉스 서버와 x86 서버이다. 엄밀한 의미에서 이 분류는 올바르지 않다. 유닉스는 운영체제의 이름이고, x86은 서버를 구성하는 CPU의 칩셋 이름이기 때문이다.
엄밀히 비유를 하면, x86은 비교적 소형 + 미션크리티컬 하지 않은 컴퓨터를 대상으로 설계된 CPU  칩셋이다. 흔히 PC에 들어가는 CPU칩이 이것이다. 대표적인 제조사로는 Intel과 AMD가 있다.
반면, 엔터프라이즈급 환경에서 사용하고자 하는 미션 크리티컬 한 데에는 이보다는 더욱 가용성이 보장되고 안정성이 있는 CPU 칩셋을 사용하는데 여기에는 다양한 CPU가 존재한다. 그리고 이 칩셋명은 각 제조사에 따라 이름이 다르다. 이들은 IBM, Oracle(Sun), HP 등에서 제조된다. 정리하면 다음과 같다.
  • 인텔 - Xeon(x86) 시리즈
  • AMD - 명칭이 많다. (현재는 Opteron) 흔히 AMD 시리즈라고 부른다.
  • IBM - Power 시리즈
  • Oracle(Sun) - SPARC 시리즈
  • HP - Itanium 시리즈
따라서, 상위 두 개는 x86 서버, 아래 세 개는 유닉스 서버를 지칭한다고 말할 수 있다. 그럼 왜 아래의 세 개가 유닉스 서버일까? 
아래 세 개의 칩셋은 각각의 벤더가 제작한 OS를 사용하는데, 해당 OS의 기반이 유닉스이기 때문이다. 각 벤더의 OS 명칭은 다음과 같다.
  • IBM - AIX
  • Oracle(Sun) - Solaris
  • HP - HP/UX
물론, 위 세 개의 유닉스 외에도 파생된 변형 유닉스는 다양하다. (BSD라던지, IRIX라던지, 혹은 Mac OS도 유닉스의 변종이라고 말할 수 있다.)

다만, 변종 유닉스의 경우 각 제조사의 시스템 외의 다른 곳에는 설치가 되지 않기 때문에, 이들을 묶어 유닉스 서버라고 부르게 된 것이다. 반면, x86 서버에도 몇 개의 유닉스는 설치가 가능하다. FreeBSD의 경우는 실제로 웹 서비스를 제공하기 위해 사용하기도 한다. 그러나 통상 윈도우 서버나 리눅스를 설치하여 운영하는 경우가 많기 때문에 x86 서버로 묶어 부르는 것이다.

2014년 1월 16일 목요일

Raw Device in Oracle 12c


<in 11g R2 Manual>

Deprecated in Oracle Database 11g Release 2 (11.2)

The following are not supported or not available anymore with Oracle Database 11g Release 2:
  • Installing data files directly on raw devices is no longer available during installation with Oracle Universal Installer or Database Configuration Assistant. You must use a file system or use Oracle ASM.


<in 12c Manual>

8.1.10.1 About Upgrading Oracle Database Release 10.2 or 11.1 and OCFS and RAW Devices

If you are upgrading an Oracle Database release 10.2.0.5 or release 11.1.0.7 environment that stores Oracle Clusterware files on OCFS on Windows or RAW devices, then you cannot directly upgrade to Oracle Database 12c. You must first perform an interim upgrade to Oracle Database release 11.2 and migrate the Oracle Clusterware files to Oracle Automatic Storage Management (Oracle ASM). Then you can upgrade from release 11.2 to Oracle Database 12c.

8.1.12 Desupport for Raw Storage Devices

Starting with Oracle Database 12c, block file storage on raw devices is not supported. You must migrate any data files stored on raw devices to Oracle ASM, a cluster file system, or Network File System (NFS).
This also affects the OCR and voting files for Oracle Clusterware. You cannot store the OCR or voting files on raw devices. Oracle Clusterware files must be moved to Oracle ASM before upgrading.


문서 상, 11g R2는 Raw Device에 대해 설치시 지원하지 않는다고 되어 있고, 12c에서는 더 이상 아예 지원을 하지 않는다고 명시하고 있다. 아마 12c 환경에서는 Raw Device를 볼 수 없을 듯 하다. 또 다른 편법(?)등을 이용할 수는 있겠지만, 점차 사라져 갈 것이라고 전망한다.

2014년 1월 15일 수요일

제임스 고슬링(James Gosling)의 Oracle에 인수된 Sun 제품에 대한 평가


관련 기사: http://www.infoworld.com/t/technology-business/james-gosling-grades-oracles-handling-of-suns-technology-233924



제임스 고슬링은 Java 언어의 창시자로, 세계에서 가장 소문나 있는 프로그래머 중 한 명입니다. C를 만든 데니스 리치만큼이나 많은 영향력을 갖고 있지만, 또 데니스 리치만큼이나 알려지지 않았기도 합니다. 그는 Java 이외에도 멀티프로세서용 유닉스 컴파일러, 메일 시스템, 데이터 인식 시스템 등을 만들었습니다. 이는 그가 Sun Microsystems에 있던 시절 Solaris에 많은 철학을 수립하였음을 알 수 있습니다.

Sun이 Oracle에 인수되면서, 그는 Sun과 다른 문화를 갖고 있던 Oracle을 나와 Google에서 새로운 언어인 Go를 개발한 후, 현재는 리퀴드 로보틱스라는 회사에서 그의 일을 계속하고 있습니다. 이러한 그가 최근 현재 Oracle이 기존에 인수한 Sun 기술들을 어떻게 활용하고 있는지에 대해 평가하였습니다. 이에 대한 그의 전반적인 평가 및 개인적인 생각은 다음과 같습니다.

1. Solaris : F-
내가 가진 모든 솔라리스 시스템을 리눅스로 바꿨다. 솔라리스에 대한 너무 높은 가격 정책으로 아예 도입을 고려하지 않게 만들고 있다.
-> 솔라리스는 유연하기도 하고, 제타파일 시스템을 통해서 특정 시점으로 돌아가는 기능 등 상당히 유용한 기능이 많은 운영체제 중 하나였지만, open 정책 때문에 오히려 엔터프라이즈 환경에서는 빛을 발하지 못한 운영체제이기도 합니다. 기업이 시스템을 도입할 때 고려하는 안정성에 대해서는 너무 유연한 확장성이 단점으로 작용하게 된 것이었죠. 

2. Java : B+
보안 관련해서 이슈들이 있지만 잘하고 있다. 
-> Java는 현재 가장 널리 쓰이는 언어 중 하나로, Platform Independent 하다는 것이 가장 큰 장점입니다. 특히 사물 인터넷이라는 트랜드와 더불어 수 많은 종류의 디바이스가 생기고 있는데 있어 이러한 요구 사항을 잘 반영한다고 볼 수 있습니다. 한 편으로는 고슬링이 구글에서 만들었다는 Go라는 언어가 궁금하긴 한데, 조만간 소식을 접할 수 있으면 좋겠습니다.

3. MySQL : C
죽이지는 않았는데 빠르게 버려지고 있다.
-> MySQL 역시 오픈소스 환경에서 많이 사용되었지만, 라이선스 정책이 반영된 Enterprise Edition이 생기면서 외면을 많이 받고 있습니다. MySQL의 창시자인 마이클 몬티 와이드니스가 MariaDB를 만들면서 오픈소스 진영에서는 많이 넘어가는 추세입니다.

4. SPARC : N/A
오라클이 인수하기 전부터 문제가 많았으니 평가 못하겠다.
-> SPARC는 Sun의 하드웨어에 도입되어 있는 것인데, 저도 접할 기회가 별로 없었네요.

5. GlassFIsh : B-
좋아지고 있지만 많이 발전하지는 않았다.
-> 국내에는 사용자가 많이 없고, 저도 잘 모르는 솔루션이라 코멘트를 할 수가 없네요.

6. NetBeans IDE : B-

잘하고 있는데 운영진들이 이 툴의 가치를 이해 못하는것 같다.
-> NetBeans는 상당히 유용하긴 하지만, 국내의 개발 환경에는 아직 적합한지 여부에 대해서 궁금한 사항들이 조금 있습니다.


2014년 1월 14일 화요일

Oracle 12c Multitenant Database 다른 서버에 Plug-in 하기

Pluggable Database 다른 서버에 Plug 하기

  
실습을 진행한 서버의 정보는 다음과 같다.

<Source>
Hostname: db12cSourceSource.oracle.com
IP:192.168.56.102
Database Version: 12.1.0.1

<Target>
Hostname: db12cSourceTarget.oracle.com
IP:192.168.56.200
Database Version: 12.1.0.1


1) 기존 데이터베이스를 Unplug 한다.
[oracle@db12cSource ~]$ hostname
db12cSource.oracle.com
[oracle@db12cSource ~]$ . oraenv
ORACLE_SID = [orcl] ?
The Oracle base remains unchanged with value /u01/app/oracle
[oracle@db12cSource ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Mon Jan 13 22:03:58 2014

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options


SQL> ALTER PLUGGABLE DATABASE PDB1 UNPLUG INTO '/home/oracle/PDB1.XML';

Pluggable database altered.

SQL> DROP PLUGGABLE DATABASE PDB1 KEEP DATAFILES;

Pluggable database dropped.

SQL> EXIT;
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

2) 데이터파일과 XML 파일을 묶어 Target Server 전송한다.
[oracle@db12cSource datafile]$ cd /u01/app/oracle/oradata/orcl/pdb1
[oracle@db12cSource pdb1]$ ls
sysaux01.dbf  system01.dbf  users01.dbf
[oracle@db12cSource pdb1]$ tar -cvf /home/oracle/PDB1.tar *
sysaux01.dbf
system01.dbf
users01.dbf
[oracle@db12cSource ~]$ cd /home/oracle/
[oracle@db12cSource ~]$ ls PDB1*
PDB1.tar  PDB1.XML
[oracle@db12cSource ~]$ scp PDB1* 192.168.56.200:/home/oracle/
oracle@192.168.56.200's password:
PDB1.tar                                                                    100%  452MB  22.6MB/s   00:20   
PDB1.XML
[oracle@db12cSource ~]$

3) 이제, Target Server 접속하여 데이터파일을 위치시킨다.
[oracle@db12cSource ~]$ ssh 192.168.56.200
oracle@192.168.56.200's password:
[oracle@db12cTarget ~]$ ll
total 463372
drwxr-xr-x 2 oracle oracle        4096 Jul  8  2013 Desktop
drwxr-xr-x 2 oracle oinstall      4096 Aug  1 01:18 exercises
-rw-r--r-- 1 oracle oinstall 474009600 Jan 13 23:15 PDB1.tar
-rw-r--r-- 1 oracle oinstall      3706 Jan 13 23:15 PDB1.XML
[oracle@db12cTarget ~]$ chmod 755 PDB1*
[oracle@db12cTarget ~]$ ll
total 463372
drwxr-xr-x 2 oracle oracle        4096 Jul  8  2013 Desktop
drwxr-xr-x 2 oracle oinstall      4096 Aug  1 01:18 exercises
-rwxr-xr-x 1 oracle oinstall 474009600 Jan 13 23:15 PDB1.tar
-rwxr-xr-x 1 oracle oinstall      3706 Jan 13 23:15 PDB1.XML
[oracle@db12cTarget ~]$ tar -xvf PDB1.tar
sysaux01.dbf
system01.dbf
users01.dbf
[oracle@db12cTarget ~]$ cd /u01/app/oracle/oradata/orcl/
[oracle@db12cTarget orcl]$ mkdir pdb1
[oracle@db12cTarget orcl]$ cd pdb1/
[oracle@db12cTarget pdb1]$ mv /home/oracle/*.dbf .
[oracle@db12cTarget pdb1]$ ls
sysaux01.dbf  system01.dbf  users01.dbf

4) 데이터베이스에 접속해서 Plug 수행한다.
[oracle@db12cTarget ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Tue Jan 14 09:32:24 2014

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

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> CREATE PLUGGABLE DATABASE PDB1 USING '/home/oracle/PDB1.XML'
  2  SOURCE_FILE_NAME_CONVERT=NONE
  3  NOCOPY
  4  STORAGE UNLIMITED
  5  ;

Pluggable database created.

5) Pluggable Database 오픈한다.
SQL> ALTER PLUGGABLE DATABASE PDB1 OPEN;


2014년 1월 10일 금요일

Xming과 Putty를 이용하여 ssh -X 접속 사용하기


ssh 접속을 통하여 GUI 환경을 원격으로 터미널에서 제어하고자 하는 경우에는 GUI를 제공하는 상용 프로그램을 사용한다.
이를 Putty와 오픈 소스인 Xming을 이용하여 구현할 수 있는데, 과정은 다음과 같다.

먼저 Putty와 Xming을 다운로드 한다.
Putty 다운로드: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Xming 다운로드: sourceforge.net/projects/xming/files/latest/download

먼저 Xming을 설치한 후에 Putty를 다음과 같이 접속한다.


SSH 옵션에서 X11 forwarding을 체크한다.


이제 접속을 수행하고, GUI를 테스트하기 위해 FireFox를 실행해본다.


화면이 나타나는 것을 확인할 수 있다.

2014년 1월 6일 월요일

Oracle 12c Flex ASM


본 페이지는 Oracle 12c의 신기능인 Flex ASM에 대한 테스트를 수행한 내용을 담고 있다. 이와 관련한 오라클의 문서는 다음에서 확인할 수 있다.

소개 문서: http://www.oracle.com/technetwork/products/cloud-storage/oracle-12c-asm-overview-1965430.pdf
메뉴얼 : http://docs.oracle.com/cd/E16655_01/server.121/e17612/asminst.htm#OSTMG136

위 문서를 참고하여 테스트 일부를 수행한 것이다.

테스트는 직접 실습 환경을 구성했던 2노드 RAC의 가상 머신에서 진행하였다.


Flex ASM 운영 상태 확인하기

Flex ASM 운영상태는 srvctl  crsctl, asmcmd 등의 툴을 통해서 쉽게 확인할 있다.

Flex ASM 사용 여부 확인하기
현재 클러스터에 Flex ASM 사용 중인지 확인할 있다.
[root@oel5-12c-rac1 ~]# asmcmd showclustermode
ASM cluster : Flex mode enabled

ASM 운영 중인 서버 확인하기
ASM 인스턴스가 운영 중인 서버를 있다.
[root@oel5-12c-rac1 ~]# srvctl status asm
ASM is running on oel5-12c-rac2,oel5-12c-rac1

Flex ASM 대한 설정 확인하기
Flex ASM 구성 정보 패스워드 파일의 위치, ASM 인스턴스의 카디널리티 등을 확인할 있다.
[root@oel5-12c-rac1 ~]# srvctl config asm -detail
ASM home: /u01/app/12.1.0/grid
Password file: +DATA/ASM/orapwasm
ASM listener: LISTENER
ASM is enabled.
ASM instance count: 3
Cluster ASM listener: ASMNET1LSNR_ASM


Flex ASM 정보 조회하기

ASM 인스턴스에서는 현재 ASM 인스턴스의 입장에서 클라이언트로 연결을 맺은 Database 인스턴스에 대한 정보를 조회하는 것이 가능하다. 이것은 Local 대해서는 V$ASM_CLIENT, Cluster 대해서는 GV$ASM_CLIENT 통해 있다.

ASM 인스턴스에 접속하기
[grid@oel5-12c-rac1 ~]$ . oraenv
ORACLE_SID = [+ASM1] ?
The Oracle base remains unchanged with value /u01/app/grid
[grid@oel5-12c-rac1 ~]$ sqlplus / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Fri Jan 3 04:21:23 2014

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL>

해당 인스턴스의 클라이언트 조회하기
SQL> SELECT * FROM V$ASM_CLIENT;

GROUP_NUMBER INSTANCE_NAME    DB_NAME  STATUS       SOFTWARE_VERSION COMPATIBLE_VERSION       CON_ID
------------ ---------------- -------- ------------ ---------------- -------------------- ----------
           1 +ASM1            +ASM     CONNECTED    12.1.0.1.0       12.1.0.1.0                    0
           1 cdbrac1          cdbrac   CONNECTED    12.1.0.1.0       12.1.0.0.0                    0
           0 +APX1            +APX     CONNECTED    12.1.0.1.0       12.0.0.0.0                    0

아니면, 다음과 같이 asmcmd 명령어로 확인하는 역시 가능하다.

[root@oel5-12c-rac1 ~]# asmcmd lsct data
DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group
+ASM     CONNECTED        12.1.0.1.0          12.1.0.1.0  +ASM1          DATA
cdbrac   CONNECTED        12.1.0.1.0          12.1.0.0.0  cdbrac1        DATA

전체 인스턴스(클러스터 ) 클라이언트 조회하기
SQL> SELECT * FROM GV$ASM_CLIENT;

INST_ID GROUP_NUMBER INSTANCE_NAME    DB_NAME  STATUS     SOFTWARE_VERSION COMPATIBLE_VER     CON_ID
------- ------------ ---------------- -------- ---------- ---------------- -------------- ----------
      1            1 +ASM1            +ASM     CONNECTED  12.1.0.1.0       12.1.0.1.0              0
      1            1 cdbrac1          cdbrac   CONNECTED  12.1.0.1.0       12.1.0.0.0              0
      1            0 +APX1            +APX     CONNECTED  12.1.0.1.0       12.0.0.0.0              0
      2            1 +ASM2            +ASM     CONNECTED  12.1.0.1.0       12.1.0.1.0              0
      2            1 cdbrac2          cdbrac   CONNECTED  12.1.0.1.0       12.1.0.0.0              0
      2            0 +APX2            +APX     CONNECTED  12.1.0.1.0       12.0.0.0.0              0


ASM 대한 원격 접속 실습하기

기존에는 ASM 인스턴스에 Local 통해서만 접속하였으므로, 원격으로 접속을 수행하지 않았다. 12c 버전부터는 원격으로 SQL*Plus에서 ASM 인스턴스에 접속을 수행하는 것이 가능해졌다. 여기에서는 2 노드의 데이터베이스 클라이언트 프로그램에서 원격으로 1 ASM 인스턴스에 접속하는 실습을 수행할 것이다.

ASM 인스턴스에 대한 리스너 등록하기
1 노드의 tnsnames.ora oracle 혹은 root 계정으로 연다.
[grid@oel5-12c-rac1 ~]$ su
Password:
[root@oel5-12c-rac1 grid]# vi /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora

해당 tnsnames.ora ASM 서비스를 등록한다.
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

CDBRAC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel5-12c-scan.kr.oracle.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cdbrac)
    )
  )

pdb1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel5-12c-scan.kr.oracle.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb1)
    )
  )

+ASM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel5-12c-scan.kr.oracle.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = +ASM)
    )

원격 접속 수행
이제 2 노드의 oracle 계정으로 12c 데이터베이스 SQL*Plus 클라이언트를 통해 원격 접속을 시도한다.
[oracle@oel5-12c-rac2 ~]$ hostname
oel5-12c-rac2.kr.oracle.com
[oracle@oel5-12c-rac2 ~]$ . oraenv
ORACLE_SID = [oracle] ? cdbrac
The Oracle base has been set to /u01/app/oracle
[oracle@oel5-12c-rac2 ~]$ sqlplus sys@\"oel5-12c-rac1.kr.oracle.com:1521/+ASM\" as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Fri Jan 3 04:44:25 2014

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

Enter password:

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
+ASM1


ASM 계정에 대한 패스워드 파일 관리하기

기존 데이터베이스에서 접속을 수행하기 위해서 필요하던 패스워드 파일이, ASM 12c 버전부터는 Flex ASM으로 원격 접속이 가능하도록 변경되면서 동일한 매커니즘이 생성되었다 파일은 클러스터 내의 공유 디스크에 공유되어 어느 클러스터 노드에서도 권한이 있는 경우 접근 변경이 가능하도록 하여 파일이 중복되거나 예상치 못한 변경을 방지하게 된다. 이는 처음에 Flex ASM 사용하면 생성되지만, 변경 역시 가능하다.

패스워드 파일 정보 조회하기
패스워드 파일의 위치는 다음과 같이 조회할 있다.
[grid@oel5-12c-rac1 ~]$ srvctl config asm
ASM home: /u01/app/12.1.0/grid
Password file: +DATA/ASM/orapwasm
ASM listener: LISTENER
ASM instance count: 3
Cluster ASM listener: ASMNET1LSNR_ASM



패스워드 파일 변경
패스워드 파일은 다음과 같이 변경할 있다.
[grid@oel5-12c-rac1 ~]$ orapwd file='+data/ASM/orapwasm_new' asm=y

Enter password for SYS:

패스워드 파일 변경 결과 확인
다시 결과를 확인하여 정상적으로 변경되었는지 확인한다.
[grid@oel5-12c-rac1 ~]$ srvctl config asm
ASM home: /u01/app/12.1.0/grid
Password file: +DATA/ASM/orapwasm_new
ASM listener: LISTENER
ASM instance count: 3
Cluster ASM listener: ASMNET1LSNR_ASM



Failover 테스트

12c 버전부터는 ASM 인스턴스에 장애가 발생하면, 해당 ASM 붙어 있던 다른 데이터베이스 인스턴스 등이 자동적으로 Failover하게 된다. 이에 대한 테스트를 진행할 것이다.

srvctl stop asm -force ASM Instance 강제 종료 수행시 Failover

전체 상태 확인

SQL> SELECT * FROM GV$ASM_CLIENT;

INST_ID GROUP_NUMBER INSTANCE_NAME  DB_NAME  STATUS       SOFTWARE_VERSI COMPATIBLE_VER     CON_ID
---------- ------------ -------------- -------- ------------ -------------- -------------- ----------
         1            1 +ASM1          +ASM     CONNECTED    12.1.0.1.0     12.1.0.1.0              0
         1            1 cdbrac1        cdbrac   CONNECTED    12.1.0.1.0     12.1.0.0.0              0
         1            0 +APX1          +APX     CONNECTED    12.1.0.1.0     12.0.0.0.0              0
         2            1 +ASM2          +ASM     CONNECTED    12.1.0.1.0     12.1.0.1.0              0
         2            1 cdbrac2        cdbrac   CONNECTED    12.1.0.1.0     12.1.0.0.0              0
         2            0 +APX2          +APX     CONNECTED    12.1.0.1.0     12.0.0.0.0              0

1 ASM 인스턴스 강제 종료 수행
[grid@oel5-12c-rac1 ~]$ srvctl stop asm -n oel5-12c-rac1 -force
[grid@oel5-12c-rac1 ~]$ srvctl status asm
ASM is running on oel5-12c-rac2

2 ASM 인스턴스 상태 확인
[grid@oel5-12c-rac2 ~]$ . oraenv
ORACLE_SID = [+ASM2] ?
The Oracle base remains unchanged with value /u01/app/grid
[grid@oel5-12c-rac2 ~]$ sqlplus / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Fri Jan 3 05:47:02 2014

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> SELECT * FROM V$ASM_CLIENT;

GROUP_NUMBER INSTANCE_NAME  DB_NAME  STATUS       SOFTWARE_VERSI COMPATIBLE_VER     CON_ID
------------ -------------- -------- ------------ -------------- -------------- ----------
           1 +ASM2          +ASM     CONNECTED    12.1.0.1.0     12.1.0.1.0              0
           1 cdbrac1        cdbrac   CONNECTED    12.1.0.1.0     12.1.0.0.0              0
           1 cdbrac2        cdbrac   CONNECTED    12.1.0.1.0     12.1.0.0.0              0
           0 +APX2          +APX     CONNECTED    12.1.0.1.0     12.0.0.0.0              0

1 ASM 인스턴스 재구동 상태 확인
다시 1 노드의 ASM 인스턴스를 구동한 어떠한 변화가 일어나는지 확인하고자 한다.
[grid@oel5-12c-rac1 ~]$ srvctl start asm -n oel5-12c-rac1
[grid@oel5-12c-rac1 ~]$ srvctl status asm
ASM is running on oel5-12c-rac2,oel5-12c-rac1
[grid@oel5-12c-rac1 ~]$ sqlplus / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Fri Jan 3 05:55:43 2014

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> SELECT * FROM V$ASM_CLIENT;

GROUP_NUMBER INSTANCE_NAME  DB_NAME  STATUS       SOFTWARE_VERSI COMPATIBLE_VER     CON_ID
------------ -------------- -------- ------------ -------------- -------------- ----------
           0 +APX1          +APX     CONNECTED    12.1.0.1.0     12.0.0.0.0              0

결과적으로 아무런 변화가 없는 것을 확인할 있는데, 이는 Failover 것에 대해 자동적으로 다시 Relocate 되지 않는다는 것을 알려준다.

2 ASM 인스턴스에서 Relocate 작업 수행
[grid@oel5-12c-rac2 ~]$ sqlplus / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Fri Jan 3 05:47:02 2014

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> ALTER SYSTEM RELOCATE CLIENT 'cdbrac1:cdbrac';

System altered.

1 노드에서 상태 재확인
[grid@oel5-12c-rac1 ~]$ sqlplus / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Fri Jan 3 06:12:23 2014

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> SELECT * FROM V$ASM_CLIENT;

GROUP_NUMBER INSTANCE_NAME  DB_NAME  STATUS       SOFTWARE_VERSI COMPATIBLE_VER     CON_ID
------------ -------------- -------- ------------ -------------- -------------- ----------
           1 cdbrac1        cdbrac   CONNECTED    12.1.0.1.0     12.1.0.0.0              0
           0 +APX1          +APX     CONNECTED    12.1.0.1.0     12.0.0.0.0              0


SHUTDOWN ABORT ASM Instance 강제 종료 수행시 Failover

1 노드에서 SHUTDOWN ABORT 수행

[grid@oel5-12c-rac1 ~]$ sqlplus / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Fri Jan 3 06:12:23 2014

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> SHUTDOWN ABORT
ASM instance shutdown

2 노드에서 상태 확인
[grid@oel5-12c-rac2 ~]$ sqlplus / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Fri Jan 3 06:12:23 2014

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> select * from v$asm_client;

GROUP_NUMBER INSTANCE_NAME  DB_NAME  STATUS       SOFTWARE_VERSI COMPATIBLE_VER     CON_ID
------------ -------------- -------- ------------ -------------- -------------- ----------
           1 +ASM2          +ASM     CONNECTED    12.1.0.1.0     12.1.0.1.0              0
           1 cdbrac2        cdbrac   CONNECTED    12.1.0.1.0     12.1.0.0.0              0
           0 +APX2          +APX     CONNECTED    12.1.0.1.0     12.0.0.0.0              0

SQL> /

GROUP_NUMBER INSTANCE_NAME  DB_NAME  STATUS       SOFTWARE_VERSI COMPATIBLE_VER     CON_ID
------------ -------------- -------- ------------ -------------- -------------- ----------
           1 +ASM2          +ASM     CONNECTED    12.1.0.1.0     12.1.0.1.0              0
           1 cdbrac1        cdbrac   CONNECTED    12.1.0.1.0     12.1.0.0.0              0
           1 cdbrac2        cdbrac   CONNECTED    12.1.0.1.0     12.1.0.0.0              0
           0 +APX2          +APX     CONNECTED    12.1.0.1.0     12.0.0.0.0              0
2 노드에서 일정 시간이 지난 후에 자동적으로 Failover 수행되는 것을 확인할 있다.



Carnality 수정하기 (3노드)

Flex ASM 기본적으로 카디널리티를 3으로 제공한다. 이를 변경하는 등의 실습을 수행하기 위해 노두를 추가하여 3노드로 실습을 수행하였다.

현재 카디널리티 설정 확인하기
[grid@oel5-12c-rac1 ~]$ srvctl config asm -detail
ASM home: /u01/app/12.1.0/grid
Password file: +DATA/orapwASM
ASM listener: LISTENER
ASM is enabled.
ASM instance count: 3
Cluster ASM listener: ASMNET1LSNR_ASM
[grid@oel5-12c-rac1 ~]$ srvctl status asm
ASM is running on oel5-12c-rac2,oel5-12c-rac1,oel5-12c-rac3
ASM instance count 통해, 현재 카디널리티 값이 3임을 확인할 있다.

카디널리티 설정 변경하기
[grid@oel5-12c-rac1 ~]$ srvctl modify asm -count 1
[grid@oel5-12c-rac1 ~]$ srvctl config asm -detail
ASM home: /u01/app/12.1.0/grid
Password file: +DATA/orapwASM
ASM listener: LISTENER
ASM is enabled.
ASM instance count: 1
Cluster ASM listener: ASMNET1LSNR_ASM
[grid@oel5-12c-rac1 ~]$ srvctl status asm
ASM is running on oel5-12c-rac1
카디널리티 설정을 1 변경하면, 자동적으로 2개의 노드에서 ASM 인스턴스가 종료됨을 확인할 있다.

카디널리티 위반 시도하기
grid@oel5-12c-rac3 ~]$ . oraenv
ORACLE_SID = [grid] ? +ASM3
The Oracle base has been set to /u01/app/grid
[grid@oel5-12c-rac3 ~]$ srvctl start asm -n oel5-12c-rac3
PRCR-1013 : Failed to start resource ora.asm
PRCR-1064 : Failed to start resource ora.asm on node oel5-12c-rac3
CRS-2552: There are no available instances of resource 'ora.asm' to start.
3 노드에서 강제로 ASM 인스턴스를 구동하고자 시도하면, 실행할 없다는 메세지를 출력한다.

카디널리티 설정 증가하기
[grid@oel5-12c-rac3 ~]$ srvctl modify asm -count 2
[grid@oel5-12c-rac3 ~]$ srvctl status asm
ASM is running on oel5-12c-rac1
카디널리티 값을 줄일 때는 자동적으로 카디널리티 이상의 인스턴스 수를 종료했지만, 반대의 경우에는 자동적으로 인스턴스가 구동되지 않음을 확인할 있다.

[grid@oel5-12c-rac3 ~]$ srvctl start asm -n oel5-12c-rac3
[grid@oel5-12c-rac3 ~]$ srvctl status asm
ASM is running on oel5-12c-rac1,oel5-12c-rac3
위와 같이 수동으로 ASM 인스턴스를 구동해주어야 한다. 또한, 위에서 실습한 것과 마찬가지로, 데이터베이스 인스턴스의 Relocate 역시 수동으로 수행해야 한다.