월요일에 갑자기 사무실에 있는 개발서버의 오라클 DB가 다운되어 있다는 얘기를 들었습니다.
팀원의 반정도가 본사로 교육을 받으러가있었서 급할게 없기에 천천히 복구 작업을 하게되었죠. 하드디스크 하나를 제거한 뒤에 datafile을 못 찾아서 생긴 현상이었기에 해당 datafile을 삭제해주고 DB를 open하려고 했는데...

SQL> set linesize 150

SQL> col ts_name format a15

SQL> col filename format a60

SQL> SELECT A.TS#, A.NAME AS TS_NAME, B.FILE#, B.NAME AS FILENAME, B.STATUS, B.ENABLED FROM v$tablespace A, v$datafile B WHERE A.TS#=B.TS#

테이블스페이스 이름과 활당된 데이터파일 목록 출력


SQL> ALTER DATABASE DATAFILE 14 OFFLINE DROP;
-- 14번 데이터파일이 없어진 파일이다.

SQL> ALTER DATABASE OPEN;


 여기서 문제가 발생했다. 오류 메세지를 보니 ORA-00600이고 상세 오류 정보에 [2252]가 포함되어 있기에 검색을 해봤더니 SCN관련 오류인듯했다. 다시 서버를 점검해보니 서버의 시스템 날자가 2003년도 1월로 되어있기에 이를 오늘 날자로 바꿔주고 Oracle을 재시작해줬더니 잘 되었다.
그리고 DB를 open한뒤에 해당 테이블 스페이스를 삭제해준걸로 마무리를 했습니다.

SQL> ALTER DATABASE DATAFILE 14 OFFLINE DROP;

SQL> ALTER DATABASE OPEN;

SQL> DROP TABLESPACE LIS;



 이렇게 써놓으니 아주 쉽게 넘어간것 같은데... 사실 이 과정이 이틀이나 걸렸던것이다.
처음엔 controlfile을 재생성하려고 했었다. ORA-00600 [2252] ~~~ 뭐 이런 메세지를 처음 봐서 너무 당황한 나머지 DB 재생성까지 생각했던 것인데... ㅡ.ㅡa
여기서 이번 사례를 정리해보면

환경
1) 아카이브 로그 모드가 아니다.     ㅡ.ㅡ
2) Offline backup을 한 적이 없다.   ㅜ.ㅜ
3) 해당 테이블스페이스는 없어져도 된다.    ^^ (빙고~)

증상
1) Oracle DBMS가 mount 단계에서 open되지 않고 멈추어있다.

원인
1) Datafile 일부가 없어졌다.

해결책
1) 해당 파일을 없애준뒤에 DB를 open한다.
2) 해당 테이블스페이스를 삭제한다.

 오늘도 삽질이 계속 되고있습니다. 단순히 백업해둔 파일로 새로운 인스턴스를 띄워서 예전 테이블들을 백업하는 작업이었는데요... 암튼... 속도도 예상보다 많이 느리고... 티볼리 데몬에도 문제가 생기는 등 갖가지 난관에 봉착했습니다. ㅜ.ㅜ

암튼... 이 모든 작업을 하기전에 먼저 확인할 내용이 있죠. 현재 백업하려는 테이블 들의 총 용량이 얼마나 되는지 입니다. 이걸 알아야 백업한 파일을 어디에 저장할 건지 그리고 백업을 어떻게 할건지를 결정할 수 있겠죠. 그래서 이것 저것 알아보다가 정확하진 않지만 알아보는 쿼리를 얻었습니다. 제가 정확한 결과를 찾겠다며 헤메고 있자, 사수님이 준 쿼리입니다. ^^;
꼭 정확한 사용량을 알아야 겠다면 통계자료를 수집하도록 한 뒤에 dba_tables같은 View를 이용하면 되겠지만, 서버에 부하를 주는 작업을 할 수 없는 상황이라면 아래와 같은 쿼리문으로 대략적인 사용량을 알아 볼 수 있습니다.


SELECT   owner,segment_type, tablespace_name, SEGMENT_NAME, SUM(BYTES/(1024*1024))  SIZE_IN_MEG
FROM DBA_SEGMENTS
WHERE tablespace_name IN (SELECT tablespace_name FROM DBA_TABLESPACES WHERE owner NOT IN
  ('SYS','SYSTEM','PUBLIC','OUTLN','WMSYS','ORDSYS','ORDPLUGINS','MDSYS','CTXSYS'
,'XDB','WKSYS','OLAPSYS'))
--GROUP BY rollup( owner,segment_type,tablespace_name,SEGMENT_NAME)
GROUP BY owner,segment_type,tablespace_name,SEGMENT_NAME
ORDER BY SIZE_IN_MEG DESC


위의 쿼리문을 적당히 고치면 원하는 내용을 얻을 수 있습니다.원하는 테이블만, 혹은 원하는 유저의 테이블만... 같은 조건을 주면 됩니다.

 아래 내용은 구글, 네이버 등의 사이트에서 검색한 내용중에서 실제로 적용이 되었던 내용입니다. 물론 실제로 적용이 되었던 환경은 리눅스가 아니라 SUN 장비에 Solaris 9 이였습니다.64비트 CPU였구요. 하지만 리눅스 서버에서도 잘 되리라 생각합니다.


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

운영체제 : RedHat Linux 9
DBMS : Oracle 9i


1. 문자셋 확인

 SQL>select * from v$nls_parameters where parameter like '%CHARACTER%';


2. 문자셋 변경

 SQL>STARTUP MOUNT;
 SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
 SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
 SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
 SQL>ALTER DATABASE OPEN;
 SQL>ALTER DATABASE CHARACTER SET [UTF8];  // [변경하고자 하는 문자셋] ,AL32UTF8
 SQL>SHUTDOWN IMMEDIATE;
 SQL>STARTUP;


 

 ORA-12712 ; new character set must be a superset of old character set

 해당 메세지의 경우 문자셋 변경이 어렵다.


 위와 같은 메세지가 나오는 경우 기존 오라클 인스턴스를 삭제 후

 $ORACLE_HOME/bin/dbca 를 실행하여 새로운 인스턴스를 만드는 것이 추천 방법이다.


 ※ 언어가 문자셋을 말하는 것은 아니다.


NLS_LANG=KOREAN_KOREA.KO16KSC5601

 수십가지... 아니 수백가지 신기술로 무장한 Oracle 10g가 등장하였지만 아직 9i 버전에서 벗어나지 못한 제게는 충격적인 사건이 벌어졌습니다.
Oracle 11g 등장, 두둥~!!

 Oracle Database 11g 홈페이지

Oracle Database 11g가 제공하는 혜택이 아래와 같습니다:

  • Real Application Testing을 통해 새로운 테크놀로지를 보다 신속하게 적용할 수 있습니다.
  • 고급 압축, 파티셔닝 기능을 이용하여 더 많은 데이터를 보다 효과적으로 관리할 수 있습니다.
  • Oracle Fast Files를 이용하여 오라클 데이터베이스에 모든 데이터를 저장하고 시스템을 단순화할 수 있습니다.
  • Data Guard의 최신 기능을 이용하여 재해 복구 리소스의 ROI를 극대화할 수 있습니다.
  • 관리 환경의 자동화를 통해 핵심 운영 인력이 보다 전략적인 업무에 집중할 수 있게 합니다.
  • 그 밖에도 매우 다양한 혁신적 기능이 제공됩니다.


 또 다시 배워야할 신기능들... 이런...
"오라클 데이터베이스의 새 버전이 나올때마다 눈앞이 캄캄하다"는 모 강사님의 말이 피부로 느껴집니다.
아직 10g에 대해서도 잘 모르는데 11g라니...
열심히 해야 겠네요.
 가끔씩 쓰긴하는데, 기억이 잘 안나는 쿼리문입니다.
연속된 숫자를 발생시키는 쿼리입니다. 아래의 쿼리문은 연속된 숫자를 발생시키고 이를 DATE형으로 바꿔서 한해의 일자를 연속으로 만들어주는 쿼리입니다.


1. 특정숫자까지의 연속된 숫자를 발생시키는 쿼리입니다.
SELECT level
  FROM DUAL
CONNECT BY level<=특정숫자;

2. 응용해서 그해의 일자를 1월1일부터 12월 31일까지 발생 시켜주는 쿼리입니다.
SELECT TO_DATE(TO_CHAR(level, '000'), 'ddd')
  FROM DUAL
CONNECT BY level<=TO_NUMBER(TO_CHAR(TO_DATE('12-31', 'MM-DD'), 'DDD'));
 오라클에서 무료로 배포하는 Oracle SQL Developer 1.2 버전[각주:1]의 Tutorial입니다.

 SQL Developer 1.2버전은 꽤 쓸만합니다. 1.1버전부터는 MySQL, MS-SQL에 접속할 수 있습니다. MySQL에 접속하려면 Mysql Homepage에서 Connect/J를 다운받아서 [SQL Developer가 설치된 디렉토리]/jdk/jre/lib/ext/에 복사한뒤에 사용하면 됩니다.
또한 Linux, Mac OSX, MS Windows 등의 운영체제에서 사용가능합니다.


 Online tutorial이며 http://st-curriculum.oracle.com/tutorial/SQLDeveloper/index.htm에서 볼 수 있으며 다운로드도 가능합니다.


단점이라면 영문이라는 거!!!
영어 공부 해야겠습니다.
아래는 튜토리얼 첫화면의 환영 문구입니다.

Welcome to the Oracle SQL Developer Tutorial!

This tutorial prepares a developer to use Oracle SQL Developer to perform common database development tasks. This tutorial was developed using Oracle SQL Developer 1.2.

After taking this tutorial, you should be able to:

Install Oracle SQL Developer
Create a Database Connection
Manage Database Objects
Access and Manipulate Data
Add, edit and debug PL/SQL Components


  1. Oracle에서 무료로 배포하는 DB 개발툴입니다. OTN에서 다운로드 받을 수 있습니다.
    1.1버전부터는 Oracle 이외에 MS-SQL, MySQL에도 접근할 수 있습니다. 이기종 DBMS에서는 아직 쓸만한거 같지는 않습니다. :)
    Oracle DBMS 개발용도로는 좋습니다. 1.2 버전에서는 Migration 관련 기능도 있구요.
    SQL Developer 1.2 Download (OTN 계정이 있어야  다운로드 받을 수 있습니다.)
    SQL Developer Homepage [본문으로]
 오라클의 OTN 한글 사이트에 들어가보면 ROWNUM에 관한 Thomas Kyte[각주:1]의 글이 한글로 번역되어서 올라와 있네요.

원문 : ROWNUM의 동작 원리와 활용 방법

 ROWNUM과 이를 활용한 TOP-N Query에 대한 얘기를 하고 있다.
[Effective Oracle by Design][각주:2]의 내용을 일부 차용하여 설명하고 있습니다. Oracle DBMS에 관심이 있다면 읽어볼만한 내용입니다.

오라클 전문가 Tom Kyte가 ROWNUM의 동작 원리와 활용 방법에 대해 설명합니다.

이번 호의 Ask Tom 컬럼은 지금까지와는 조금 다른 내용을 담고 있습니다. 필자는 오라클 데이터베이스에서 Top-N 쿼리와 페이지네이션(pagination) 쿼리를 구현하는 방법에 대해 자주 질문을 받곤 합니다. 하나의 컬럼을 통해 이러한 질문에 한꺼번에 대답하기 위한 방편으로, < Effective Oracle by Design (Oracle Press, 2003)> 의 내용을 인용하기로 했습니다. 컬럼의 포맷에 맞게 책의 내용이 다소 수정되었음을 참고하시기 바랍니다.

결과 셋의 제한

ROWNUM은 오라클 데이터베이스가 제공하는 마술과도 같은 컬럼입니다. 이 때문에 많은 사용자들이 문제를 겪기도 합니다. 하지만 그 원리와 활용 방법을 이해한다면 매우 유용하게 사용할 수 있습니다. 필자는 주로 두 가지 목적으로 ROWNUM을 사용합니다.

  • Top-N 프로세싱: 이 기능은 다른 일부 데이터베이스가 제공하는 LIMIT 구문과 유사합니다.
  • 쿼리 내에서의 페이지네이션(pagination) – 특히 웹과 같은 "stateless" 환경에서 자주 활용됩니다. 필자는 asktom.oracle.com 웹 사이트에서도 이 테크닉을 사용하고 있습니다.

두 가지 활용 방안을 설명하기 전에, 먼저 ROWNUM의 동작 원리에 대해 살펴 보기로 하겠습니다




  1. Thomas Kyte(Tom Kyte)는 1993년부터 오라클에서 일해 왔습니다. 그는 현재 오라클 퍼블릭 섹터 그룹 담당 부사장으로 근무 중이며, Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions (Apress, 2005) , Effective Oracle by Design (Oracle Press, 2003)와 같은 전문서를 집필하였습니다. 또한 ASKTOM(asktom.oracle.com) 웹사이트를 운영하면서 Oracle 관리자 및 개발자들의 질문에 답변을 하고 있습니다. [본문으로]
  2. Thomas Kyte의 저서로  Oracle DBMS에 대한 심도깊은 내용이 담겨있다. http://www.amazon.com/exec/obidos/tg/detail/-/0072230657 [본문으로]
Oracle Develop 2007 서울 행사에 참가했다.
여러가지 결제 문제와 맹장 수술로 인한 복부 통증 등의 문제를 견디며 겨우겨우 참석했다.
아침 일찍 일어나서 504번 버스로 2호선 신림역에 도착한뒤에 지하철로 환승했다. 잠실역 3번 출구를 통해서 롯데호텔 잠실점에 도착할 수 있었다. ^^v 한방에 도착...
근데... 아니 이 사람들은 왜 이리도 일찍들 왔는지... 선착순 100명까지는 쿠폰 소지자에게 1GB 메모리스틱을 준다고 했는데 난 명함수첩을 받았다. ㅡ.ㅡ 우울하군.
암튼 경품에 눈이 멀면 안된다. 자자 세미나 들어야지, 운정면허증을 맡기고는 동시 통역기를 받았다. 잊어 버리면 안되지 가방에 잘 넣었다. 한쪽으로 메는 보쌈가방(? 정확한 명칭인지 모르겠다.)을 받았다. 등록한 사람은 다 주나보다. 내일은 좀 더 일찍 와볼까? 아니면 롯데호텔에서 하루 묶을까나... ^^;

 이 글은 오라클 리눅스 테크놀로지 센터[각주:1]의 오라클 DBMS설치 문서[각주:2]를 뒤지다가 찾은 내용이다. SUSE 10 버전에 Oracle 10g를 설치하는 방법이 나와있다. 사실 Oracle 9i 버전을 설치하는 방법을 찾으려던건데... 아뭏튼 알아두면 도움이 될 내용이다.
 이 문서를 보면 Yast를 이용해서 서버 설정을 변경한 뒤에 Oracle 10g를 설치하도록 설명하고 있다. SUSE 10버전을 SUSE 9버전으로 인식하도록 설정 파일을 직접 수정하는 부분도 있다. RHEL4버전에 Oracle 9i를 설치할때 커널 버전을 2.4.x 버전으로 인식하도록 수정하던것이 생각나는 부분이다.

원문을 보려면 링크를 클릭하세요.
아래는 원문을 일부 발췌한 것이다.

Preview - Installing Oracle 10g R2 Database on SLES 10


Novell Cool Solutions: AppNote
By Michel Bluteau


This article describes the steps required in order to setup Oracle 10g R2 Database (Enterprise Edition) on SUSE Linux Enterprise Server 10. Please note that this is not a supported configuration, and the purpose of this guide is to preview the steps and some new tools or updated tools for managing Oracle that come with SLES 10.

Oracle will probably release an updated version soon(not yet available at the time this article was written) so keep an eye on the support matrix available via:

http://www.novell.com/oracle

I have done some extensive testing for Oracle 10g R2 DB on SLES 10 starting with RC3(Release Candidate 3) and now the final version, and the combination seems to be rock solid. The installation steps do not differ greatly between the installation on SLES 9 and SLES 10, only a few minor adjustments are required.

N.B. I recommend that you allocate 1GB or RAM and 1024MB of swap space before you start the installation.


  1. 오라클 리눅스 테크놀로지 센터 (http://www.oracle.com/technology/global/kr/tech/linux/index.html) 한글로 되어있다. 많은 문서가 있지만 주로 Oracle 10g, Oracle Application Server 10g 등등 10g 관련 문서가 대부분이다. 예전에는 9i 문서가 많았는데 이젠 거의 없다. ㅜ.ㅜ 그리고 일부 문서를 제외하곤 영문으로 되어있다. 영어 공부 좀 해야할것 같다. 대충 읽고 넘어가는것도 한두번이지... [본문으로]
  2. Oracle-on-Linux Installation Guides (http://www.oracle.com/technology/tech/linux/install/index.html) 영문으로 되어있다. [본문으로]
Oracle Homapage에서 Oracle Certification Program라는 내용을 찾아보면 OCP 자격증에 대한 내용이 나온다.
아래는 OCP Logo!
사용자 삽입 이미지

OCP Logo


 OCP 자격증을 취득하면 이 로고를 사용할 수 있다고 한다. 오라클 공인 강사로 활동할수도 있다고하는데...

일단은 하루라도 빨리 이 로고를 명함에 넣을수 있도록 노력하자!!

+ Recent posts