Oracle DBMS를 운영하다보면 전임자의 실수이거나, 게으른 본인의 생각없는 설치 및 운영으로 인해서 디스크 공간의 부족함으로 인해서 서비스가 중단되는 일이 생기기도 합니다. 본사 내에서 마구잡이로 사용하는 개발용 DB중에 그런 장비가 있었는데 /opt/oracle 디렉토리가 사용율 100%에 이르러서야 확인을 하게 되었습니다.
 문제는 현재 각종 로그가 쌓이는 디렉토리와 $ORACLE_HOME, 그리고 각종 시스템 관련 Datafile, redo log file 등이 같은 파티션에 저장이 되고 있더군요. 그래서 ... 서비스를 중지시키지 않고 작업을 해야겠다는 생각에 redo log file을 옮기기로 결정했습니다. 이게 제일 만만해보이더군요.

리두로그 그룹 및 파일 현황 확인
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#;

    GROUP# STATUS           TYPE      MEMBER
---------- ---------------- ------- ----------------------------------------
         1 CURRENT          ONLINE  /opt/oracle/oradata/edo01.log                                    
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log            
         3 INACTIVE         ONLINE  /opt/oracle/oradata/redo03.log 

네번째 리두로그 그룹 및 파일 추가

SQL> alter database add logfile group 4('/data/orasys/redo04.log') size 100M;

Database altered.

SQL>

리두로그 그룹 및 파일 추가 결과 확인
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#;

    GROUP# STATUS           TYPE    MEMBER                                                                              
---------- ---------------- ------- ---------------------------------------- 
         1 CURRENT          ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log           
         3 INACTIVE         ONLINE  /opt/oracle/oradata/redo03.log             
         4 UNUSED           ONLINE  /data/orasys/redo04.log

기존 리두로그 파일 그룹중 하나 삭제
SQL> alter database drop logfile group 3;
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------   
         1 CURRENT          ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log            
         4 UNUSED           ONLINE  /data/orasys/redo04.log

리두로그 파일 그룹 3을 새로운 위치에 추가
SQL> alter  database add logfile group 3 ('/data/orasys/redo03.log') SIZE 100M;

Database altered.

리두로그 파일 그룹 3이 정상적으로 추가되었는지 확인
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------   
         1 CURRENT          ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log            
         3 UNUSED           ONLINE  /data/orasys/redo03.log                    
         4 UNUSED           ONLINE  /data/orasys/redo04.log                             

SQL>

로그 스위치를 강재로 일으키며 상태값을 확인해본다.
SQL> alter system switch logfile;

System altered.

SQL>
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------    
         1 ACTIVE           ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log              
         3 CURRENT          ONLINE  /data/orasys/redo03.log                    
         4 UNUSED           ONLINE  /data/orasys/redo04.log                            

SQL>
SQL>  alter system switch logfile;

System altered.

SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------    
         1 INACTIVE         ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log             
         3 INACTIVE         ONLINE  /data/orasys/redo03.log
         4 CURRENT          ONLINE  /data/orasys/redo04.log

SQL>


 한국 IBM DeveloperWorks 사이트에 Ext4에 관한 글이 올라왔네요. 최근에 출시된 Fedora 11에는 기본 파일 시스템으로 채택되어있더군요. 음... 드디어...
 Ext4에 대해서 궁금하신 분들은 한번 읽어보세요. 번역까지 되어있으니까요. ^^

원문 : Ext4 분석(Extended File System 4 알아보기)

M. Tim Jones, Consultant Engineer, Emulex Corp.

원문 게재일 : 2009 년 2 월 17 일
번역 게재일 : 2009 년 6 월 02 일

Extended File System 4 또는 ext4는 차세대 저널링 파일 시스템이며 이전 파일 시스템인 ext3과의 호환성도 제공합니다. ext4는 아직까지는 표준이 아니지만 앞으로 대부분의 Linux® 배포판에서 후속 기본 파일 시스템으로 채택될 것입니다. 이 기사에서는 ext4에 대해 설명한 후 ext4가 많은 사용자의 새로운 파일 시스템으로 자리 잡게 될 것으로 예상되는 이유를 살펴봅니다.

Linux 커널이 새롭게 발표될 때마다 몇 가지 뛰어난 기능이 포함되어 있듯이 이번 12월에 발표된 2.6.28 릴리스에도 우수한 기능이 포함되어 있다. 이 릴리스는 현재 개발 작업이 한창 진행 중인 Btrfs와 같은 여러 가지 우수한 기능 중에서 안정적인 ext4 파일 시스템이 최초로 적용된 릴리스이다. 이 차세대 Extended File System에서는 확장성과 신뢰성이 향상되었으며 뛰어난 새 기능도 추가되었다. Ext4는 1TB 디스크를 최대 백만 개까지 사용할 수 있는 파일 시스템으로 확장할 수 있다.


 OTN에 있는 문서중에서 RAC 관련 문서를 양면 인쇄하기 위해서 홀수, 짝수 쪽을 나눠서 출력하려 했더니 프린터도 파이어폭스도 지원하지 않는 기능이더군요. 아니면 제가 몰라서 못 쓰는 것일수도 있고요.

그래서 addons.mozilla.org 사이트를 뒤졌더니 PrintPDF라는 부가 기능이 있더군요. PDF 뷰어인 Acrobat reader에 홀수, 짝수 쪽을 나눠서 인쇄할 수 있는 기능이 있으니 PDF로 출력한 뒤에 종이에 인쇄하기로 했습니다. 인쇄 화질이 떨어지지 않을까 걱정했는데, 예상외로 화면에 보이는 것과 거의 흡사한 품질을 보여주네요.

PrintPDF 설치하러 가기
Oracle을 이용하면서 자주 사용하는 기능 중의 하나인 TO_CAHR을 이용해서 원하는 형태의 날짜 정보를 보여주는 방법에 대해서 정리해봅니다.

TO_CHAR(날짜, '표현방식'[, 'NLS정보'])

SELECT
       TO_CHAR(SYSDATE, 'YYYY.MM.DD') D_YYYYMMDD,
       TO_CHAR(SYSDATE, 'Y','NLS_DATE_LANGUAGE=KOREAN') D_Y,
       TO_CHAR(SYSDATE, 'YEAR','NLS_DATE_LANGUAGE=KOREAN') D_YEAR,
       TO_CHAR(SYSDATE, 'Year','NLS_DATE_LANGUAGE=KOREAN') D_YEAR_1,
       TO_CHAR(SYSDATE, 'MON') D_MON,
       TO_CHAR(SYSDATE, 'Mon') D_MON_1,
       TO_CHAR(SYSDATE, 'MONTH') D_MONTH,
       TO_CHAR(SYSDATE, 'Month') D_MONTH_1,
       TO_CHAR(SYSDATE, 'D') D_D,
       TO_CHAR(SYSDATE, 'DD') D_DD,
       TO_CHAR(SYSDATE, 'DDD') D_DDD,
       TO_CHAR(SYSDATE, 'DAY') D_DAY,
       TO_CHAR(SYSDATE, 'Day') D_DAY_1,
       TO_CHAR(SYSDATE, 'DY','NLS_DATE_LANGUAGE=KOREAN') D_DY,
       TO_CHAR(SYSDATE, 'Dy') D_DY_1
  FROM DUAL
 UNION ALL
SELECT
       TO_CHAR(SYSDATE, 'YYYY.MM.DD','NLS_DATE_LANGUAGE=AMERICAN') D_YYYYMMDD,
       TO_CHAR(SYSDATE, 'Y','NLS_DATE_LANGUAGE=AMERICAN') D_Y,
       TO_CHAR(SYSDATE, 'YEAR','NLS_DATE_LANGUAGE=AMERICAN') D_YEAR,
       TO_CHAR(SYSDATE, 'Year','NLS_DATE_LANGUAGE=AMERICAN') D_YEAR_1,
       TO_CHAR(SYSDATE, 'MON','NLS_DATE_LANGUAGE=AMERICAN') D_MON,
       TO_CHAR(SYSDATE, 'Mon','NLS_DATE_LANGUAGE=AMERICAN') D_MON_1,
       TO_CHAR(SYSDATE, 'MONTH','NLS_DATE_LANGUAGE=AMERICAN') D_MONTH,
       TO_CHAR(SYSDATE, 'Month','NLS_DATE_LANGUAGE=AMERICAN') D_MONTH_1,
       TO_CHAR(SYSDATE, 'D','NLS_DATE_LANGUAGE=AMERICAN') D_D,
       TO_CHAR(SYSDATE, 'DD','NLS_DATE_LANGUAGE=AMERICAN') D_DD,
       TO_CHAR(SYSDATE, 'DDD','NLS_DATE_LANGUAGE=AMERICAN') D_DDD,
       TO_CHAR(SYSDATE, 'DAY','NLS_DATE_LANGUAGE=AMERICAN') D_DAY,
       TO_CHAR(SYSDATE, 'Day','NLS_DATE_LANGUAGE=AMERICAN') D_DAY_1,
       TO_CHAR(SYSDATE, 'DY','NLS_DATE_LANGUAGE=AMERICAN') ADA,
       TO_CHAR(SYSDATE, 'Dy','NLS_DATE_LANGUAGE=AMERICAN') ADA
  FROM DUAL;

 실행해보시면 재미난 결과가 나옵니다.
NLS_DATE_LANGUAGE를 AMERICAN으로 해주면 대소문자를 가려서 나오네요.
아래가 결과값입니다.

1 : 2009.06.10    9    TWO THOUSAND NINE    Two Thousand Nine    6월     6월     6월     6월     4    10    161    수요일    수요일    수    수
2: 2009.06.10    9    TWO THOUSAND NINE    Two Thousand Nine    JUN    Jun    JUNE         June         4    10    161    WEDNESDAY    Wednesday    WED    Wed


 이곳저곳 돌아다니다가 알게된 링크들입니다.

AIX 5L에 Oracle 설치 문서 : http://download.oracle.com/docs/cd/B19306_01/install.102/b19075/toc.htm

일본어판 Oracle 10g 문서를 네이버 번역기로 번역한 문서 링크 : http://j2k.naver.com/j2k_frame.php/korean/otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/index.htm

Oracle RAC관련 Oracle Magazine 문서 : Oracle RAC, 메인스트림 제품으로 업그레이드

Oracle wait event 모니터링 : http://www.oracle.com/technology/global/kr/pub/columns/dbtuning02.html

OTN Blogs & Opinion, 칼럼 : http://www.oracle.com/technology/global/kr/community/opinion/index.html
 정말 오랫만에 Fedora project 웹 사이트에 가봤더니 11버전 출시가 얼마남지 않았네요. 요즘엔 CentOS와 Ubuntu쪽에만 관심을 쏟다보니 페도라쪽엔 좀 소흘했던것 같습니다.



상세한 일정이 궁금하시면 Release/11/Schedule 페이지로 가보시면 됩니다.
집에다가 설치해볼 배포판 후보에 한번 올려볼까합니다.
 OracleBase라는 웹 사이트에 올라와있는 Oracle 9i Streams 구현 관련 문서입니다.
요즘 10g와 9i 사이에 Oracle Streams로 Data 공유하는 기능을 구현하는 중이라서 이곳 저곳 뒤지고 있는 중입니다.

원문 : ORACLE-BASE - Oracle9i Streams

 영문으로 되어있다는 점만 빼면 좋습니다. ^^;
9i랑 10g랑은 서로 좀 틀려서 그런지 설정하는게 만만치 않군요.
 원격지에 있는 리눅스 서버에서 GUI를 써야할 일이 있을 경우에는 보통 넷사랑의 X Manager를 사용하곤하죠. 하지만 상용이라는 점과... 서버상의 설정을 해줘야 한다는 문제점이 있더군요.
그래서 구글님께 여쭤봤더니 Xming이란걸 보여주더군요. 간단하게 화면을 띄워주는게 맘에 들더군요.


요렇게 바로 화면을 보여주네요.

프로젝트 홈페이지 : http://sourceforge.net/projects/xming

 접속한 계정의 .bash_profile 내용이 적용이 안 되있던데... 이건 뭐가 문제인지 좀더 알아봐야될것 같은데요. 그래도 일단은 오라클이 잘 깔린것 같네요. 흠... DB 만들고 기동시키는것 까지 잘 되어야 할텐데요...
이번에 한번 해보고 안 되면 "조용한 설치 모드"로 한번 설치해볼까합니다. 아마 이런 이름이었던것 같습니다. GUI없이 설치하는거라던데 한번 해봐야죠뭐...
 [Power*Architect Data Modeling & Profiling Tool]라는 툴을 아십니까? 흔히들 알고 있는 ERWin과 비슷한 모델링 툴이죠. 큐브리드 홈페이지에 Power*Architect에서 큐브리드를 사용하는 법이 소개된 글이 있어서 링크를 겁니다.

 원문보러가기 : Power*Architect 에서 CUBRID 사용하기

.소개: 본 문서는 보다 편리하게 CUBRID를 사용할 수 있도록 사용자 중심의 편의성 및 기능을 제공하기 위한 데이터 모델링 도구인Power*ArchitectJDBC를 이용하여 연결하는 방법을 소개합니다.

- 예전에 한번 사용해보려다가 모델링과 모델링 툴에 대한 이해 부족과 영문 메뉴얼에 좌절해서 접었던 적이 있었는데, 이렇게 문서도 올라오고 하니... 다시한번 사용해볼까 합니다. ^^;
 OTN 홈페이지에 [고성능 Oracle JDBC 프로그래밍]이라는 문서가 올라왔네요.
원문보러가기 : 고성능 Oracle JDBC 프로그래밍

고성능 Oracle JDBC 프로그래밍

연결 및 명령문 풀링 기능을 이용하여 Oracle 기반의 JDBC 프로그램 성능을 개선하는 방법을 학습합니다.

By Yuli Vasiliev

2009년 4월 게시

연결 풀링 및 명령문 풀링과 같은 풀링 기능을 사용하면 데이터베이스 집약적인 애플리케이션의 성능을 크게 개선할 수 있습니다. 풀링 기능을 사용하지 않을 경우, 처음부터 객체를 새로 만들어야 하므로 시간과 리소스가 많이 소모되지만 풀링을 사용하면 객체를 다시 사용할 수 있기 때문입니다.

애플리케이션에서 사용한 물리적 데이터베이스 연결을 나타내는 데이터베이스 연결 객체를 다시 사용할 경우, 성능을 크게 개선시킬 수 있습니다. 단, 해당 애플리케이션은 동일한 매개 변수를 사용하여 연결을 수시로 재설정하면서 데이터베이스와 끊임없이 상호 작용해야 합니다. 반면, 애플리케이션이 기본 데이터베이스에 연결하는 경우가 거의 없다면 연결 풀을 사용하는 이점이 별로 없을 것입니다. 그러나 실제로는 허용되는 최대/최소 연결 수에 대한 한도 설정 같은 풀 설정이 특정 애플리케이션에 맞게 최적화되어 있다면 많은 데이터베이스 집약적인 애플리케이션이 연결 풀을 사용함으로써 이점을 누릴 수 있습니다.

연결 풀처럼 명령문 풀도 애플리케이션 성능을 개선할 수 있는 방법을 제공합니다. 프로그램을 실행하는 중에 여러 번 실행되는 명령문을 풀링함으로써 추가적인 성능 개선을 얻을 수 있습니다. 그러나 명령문 풀링이 성능 문제를 해결할 수 있는 특효약은 아니라는 점을 기억하십시오. 만약 프로그램에서 명령문이 실행되는 횟수를 구분하지 않고 모든 단일 명령문을 캐시 한다면 성능 개선을 이루지 못할 수 있습니다. 프로그램 실행 중에 한 번만 실행되는 명령문을 캐시할 경우, 해당 명령문을 캐시에 넣고 보관하는 작업과 관련된 오버헤드로 인해 실제로는 성능이 저하될 수 있습니다.

이 문서에서는 Oracle JDBC 씬 드라이버를 통해 Oracle Database와 상호 작용하는 데이터 집약적인 JDBC(Java DataBase Connectivity) 프로그램의 성능을 개선하기 위해 연결 및 명령문의 풀링을 이용하는 방법을 설명합니다. 특히 JDBC 연결을 캐시하기 위해 모든 기능을 갖춘 연결 풀 구현을 제공하는 JDBC용 Oracle Universal Connection Pool(UCP)을 살펴보겠습니다. 마지막으로 Oracle의 JDBC 드라이버뿐 아니라 명령문 인터페이스에 추가되고 JDK(Java Development Kit) 1.6 이상 버전을 지원하는 Oracle JDBC 드라이버에서 사용할 수 있는 새로운 JDBC 4.0 메소드에 관련된 기능을 사용함으로써 명령문 풀링에서 이점을 얻을 수 있는 방법을 설명하겠습니다.


+ Recent posts