'02.Oracle/DataBase'에 해당되는 글 232건

  1. 2008.10.23 그리드 컴퓨팅 데이터베이스의 약진 Oracle Database 10g Release 2
  2. 2008.10.23 Oracle Database 11g: DBA와 개발자가 알고 있어야 하는 새로운 기능
  3. 2008.10.23 Windows에서 Oracle 10gR2 EM의 인증서 설정 방법 1
  4. 2008.10.23 오라클이 권장하는 백업방법
  5. 2008.10.22 [오라클] ORA-12560 에러 대처법 && sqlplus 사용안될때(댓글참조) 2
  6. 2008.10.22 Oralce sqlplus 접속안될때
  7. 2008.10.22 오라클 테이블스페이스 만들기
  8. 2008.10.20 오라클 유용한 함수
  9. 2008.09.25 [oracle] 기초
  10. 2008.09.25 [Oracle] SQL Developer
  11. 2008.09.25 테이블조인
  12. 2008.09.01 oracle JDBC Driver Downloads
  13. 2008.08.07 [oracle] 모든테이블의 정보보기
  14. 2008.08.06 [oracle] 자동 startup, 리스너 스타트 1
  15. 2008.07.24 [oracle] oracle system password변경하기
  16. 2008.07.24 [oracle] 오라클 보안
  17. 2008.07.23 [oracle] tablespace 삭제 및 생성
  18. 2008.07.23 [oracle] imp 시 buffer IMP-00032 error
  19. 2008.07.23 [oracle] system 계정 암호변경및 락해체
  20. 2008.07.23 [oracle] table lock 확인
  21. 2008.07.22 [oracle] 리눅스에서 오라클 리스너 설정 1
  22. 2008.07.22 [Fedora] Network
  23. 2008.07.21 [oracle] OC4J Configuration issue... (^.^)
  24. 2008.07.21 [oracle] enterprise manager start error
  25. 2008.07.21 [oracle] iSQL*Plus의 시작 및 중단:
  26. 2008.07.21 [oracle] Oracle Enterprise Manager Database Control의 시작 및 중단:
  27. 2008.07.18 [oracle] $ lsnrctl start 리스너 시작이 안될때.. TNS-01201: Listener cannot find executable 1
  28. 2008.07.18 [oracle] oracle 사용자 추가 (특정권한만
  29. 2008.07.18 [oracle] Linux Oracle 설치와 활용(Ⅰ)
  30. 2008.07.18 [oracle] oracle 자동 시작/종료 1
02.Oracle/DataBase2008. 10. 23. 15:32
반응형

그리드 컴퓨팅 데이터베이스의 약진 Oracle Database 10g Release 2


Oracle Database 10g Release 2의 비전
Oracle Database 10g Release 2의 해부
Oracle Database 10g Release 2의 첫인상

ORACLE DATABASE 10g Release 2의 첫 인상


장희정│한국오라클 TSC본부 DB팀


Oracle Database 10g Release 2를 처음 접한 이후 6개월여가 지났다. 그간 Oracle Database 10g Release 2에 대한 자료 및 테스트 등을 통해 생각했던 주목할 만한 몇 가지 기능을 OTN의 고정 필자인 Tom Kyte의‘My First Day with the New Release’ 글을 참고하여 소개하고자 한다.


Conditional Compilation


Oracle Database 10g Release 2에서는 PL/SQL 부문으로 여러 새로운 기능들을 제공하고 있다. 그 중 필자가 처음 주목한 것은 Conditional Compilation이다.


Conditional Compilation은 컴파일러가 의도에 따라 코드의 실행 여부를 결정할 수 있도록 하는 기능이다. 언뜻 들어서는 그저 그런 기능 같지만, 사실은 매우 유용한 기능이다.


Conditional Compilation을 이용하면,


• 현재 애플리케이션의 디버그 코드를 그대로 둘 수 있고, 이 코드를 원하는 대로 동작하게 하거나 동작하지 않도록 할 수 있다.


• C에서 하는 것처럼 Assertion을 프로그래밍할 수 있다. 예를 들어, 각 서브프로그램은 인풋 값을 테스트할 수 있고, 그 값이 특정 조건을 만족하는지 검증할 수 있다. 이런 테스트들이 전체 개발 기간 동안은 Active 상태이고, 프로덕 션 단계에서는 Inactive 상태일 수 있는 것이다. 그러나, 코드가 남아 있으므로 프로덕션 환경에서의 버그를 디버깅할 때 간단하게 활성화시킬 수 있다.


. 버전에 구애 받지 않는 코드를 작성할 수 있다. 버전 X용 코드 세트와 버전 Y용의 다른 코드 세트를 컴파일하면 되 므로, 두 세트의 코드를 가지지 않아도 된다. 새로운 DBMS_DB_VERSION 패키지를 살펴보라.


<리스트1>은 Conditional Compilation이 어떻게 구현될 수 있는지를 간략하게 보여 준다.


<리스트 1> Conditional PL/SQL Compilation 예


SQL> create or replace procedure p
2 as
3 begin
4 $IF $$debug_code $THEN
5 dbms_output.put_line‘( Our debug code’);
6 dbms_output.put_line‘( Would go here’);
7 $END
8 dbms_output.put_line‘( And our real code here’);
9 end;
10 /
Procedure created.

여기서 어떻게‘debug’코드가 프린트 되지 않고, $$debug_code 값이 정의되지 않은 채 코드가 컴파일되는지 주목하기 바란다.


SQL> exec p
And our real code here
PL/SQL procedure successfully completed.

간단하게 debug_code 값을 변경함으로써 디버그 코드를 활성화시킬 수 있다.


SQL> alter procedure P compile“
2 plsql_ccflags =‘ debug_code:true’reuse settings;
Procedure altered.
SQL> exec p
Our debug code
Would go here
And our real code here
PL/SQL procedure successfully completed.

Database Transport


Oracle Database 10g Release 1에서 서로 다른 플랫폼간의Transportable Tablespace를소개한다음, 이번 Oracle Database 10g Release 2에서 이를 한 단계 더 발전시켰다. Oracle Database 10g Release 2 부터는 동일한 Endian(바이트 순서)을 갖는 전 플랫폼에서 전체 데이터베이스를 트랜스포트할 수 있다. 예를 들어, Apple Macintosh에서 HP-UX로, 또는 Solaris x86에서 Open VMS로 단지 개개의 테이블스페이스를 트랜스포트하는 것이 아니라 전체 데이터베이스를 통째로 트랜스포트할 수 있다.


Native XQuery 지원


Oracle Database 10g Release 2는 W3C가 지정한 XML 질의용 표준인 XQuery를 지원한다. 이 기능은 XMLQuery와 XMLTable의 두 가지 기능으로 구현되어 있다. XMLQuery는 SQL 클라이언트에서 XQuery 언어를 사용해 해당 데이터와 관련된 XML 뷰를 질의하거나 Oracle XML DB 리파지토리 문서를 질의할 수 있도록 해준다. XMLTable은 XQuery의 결과를 관련 로우와 칼럼으로 매핑해 주므로, SQL을 사용해 그 매핑 결과에 대해 질의할 수 있다.


Direct SGA Access


데이터베이스가 응답이 없거나 혹은 시스템 성능이 너무 느린 경우, DBA가 가장 먼저 하고자 하는 일은 데이터베이스에 SYSDBA로 접속하여 Wait Event를 체크하는 일일 것이다. 그러나, 인스턴스가 행(hang) 상태라면 로그인도 못하는 지경일 수 있고, 로그인에 성공했다 하더라도 문제 해결을 위한 질의가 제대로 수행되지 못하는 경우가 상당하다.


Oracle Database 10g Release 2의 OEM Grid Control은 사용자의 요청에 따라 Direct SGA Attach 가 가능하므로 프로세스로부터 데이터를 수집할 수 있다. 이러한 메모리 액세스 모드는 SQL이 불가능할 정도로 인스턴스가 심각한 상태라 하더라도 성능 데이터 등을 모니터링할 수 있도록 한다. 이러한 Direct SGA Access 기능은Oracle Enterprise Manager를통해<화면1>과 같이 활용할 수 있다.


<화면 1> Direct SGA Access 기능의 활용



Asynchronous Commit


일반적으로 Java, C, Visual Basic 애플리케이션에서 COMMIT을 실행하면, Wait, 특히, Log File Sync Wait이 발생하게 된다. 이 Wait은 Transaction Permanence를 위해 Log Writer Process가 디스크에 리두를 플러시시킬 때까지 클라이언트가 기다리기 때문이다. 그리고 이것은 일반적인 것으로 커밋을 수행하면, 그 데이터는‘Permanent’해야 하기 때문이다.


그러나 모든 법칙에는 예외가 있기 마련이다. 센서나 네트워크를 통해서 들어오는 기록들을 가능한 빨리 처리해야 하는 시스템이라면, 얘기가 달라진다. 이런 프로그램의 목표는 여러 레코드들을 일괄로 묶은 뒤 INSERT하고 Commit 한 뒤, 계속해서 이런 작업을 반복하는 것이다. 커밋이 완벽하게 수행될 때까지 기다린다면, 기대만큼 빠 르게 실행될 수 없을 것이므로, 이런 프로그램은 그런 방식을 원하지 않을 것이다.


이 제 Oracle Database 10g Release 2에서 Asynchronous Commit을 이용해 보자.‘ commitbut- don’t wait’이나‘commit, and please do wait’ 을지정할수있다. 그러나, commit-but-don’t wait을 사용한다면, 드물게나마‘Commited’데이터가 분실될 수 있음을 예상해야 한다. commit-but-don’t wait을 이용하는 중에 시스템이 중단되면, 그 데이터는 커밋되지 않았을 수 있다. 그렇기 때문에, 사용자가 업무 성격에 따라 판단하여 commit-but-don’t wait을 사용하는 것이 필요하다. 참고로, 쏟아져 들어오는 데이터를 데이터베이스에 신속하게 기록하는 것이 애플리케이션의 최대 목적인 경우가 있다면, 이런 애플리케이션에서는 commitbut- don’t wait을 사용하는 것이 적합할 뿐 아니라 성능 측면에서 절대적으로 필요할 수 있다. <리스트 2>는 이런 예를 보여주는 Java 루틴이다.


<리스트 2> commit-but-don’t wait - Asynchronous Commit


public class instest
{
static public void main(String args[]) throws Exception
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection
conn = DriverManager.getConnection
“( jdbc:oracle:thin:@desktop:1521:ora10gr2”,
“scott”,”tiger”);
conn.setAutoCommit( false )
Statement sql_trace =
conn.createStatement();
sql_trace.execute
“( truncate table t”);
System.out.println“( Table truncated”);
sql_trace.execute
“( begin“ +
“ dbms_monitor.session_trace_enable( WAITS=>TRUE );”+
“end;”);
// create table t(x char(2000))
// create index t_idx on t(x)
PreparedStatement pstmt =
conn.prepareStatement
“( insert into t(x) values(?)”);
pstmt.setString( 1“, x”);
PreparedStatement commit =
conn.prepareStatement
“( commit work write batch nowait”);
//“ ( commit work write immediate wait”);
for( int i = 0; i < 1000; i++ )
{
pstmt.executeUpdate();
commit.executeUpdate();
}
conn.close();
}
}

<리스트2>에서 COMMIT WORK WRITE BATCH NOWAIT나 COMMIT WORK WRITE IMMEDIATE WAIT이 어떻게 사용되고 있는지 보자. 전자가 새로운 기능으로, 커밋이 끝날 때까지 기다리지 않고 커밋하는 방법을 보여 주고 후자는 이전에 수행되던 형태이다. 필자가 <리스트 2>에서 (CREATE TABLE은 INSERT 문 앞에서 참조를 위한 커멘트이다) 테스트 프로그램을 실행 했을 때, WAIT 옵션에서는 로그 파일 동기화를 위한 wait 으로 오랜 시간이 걸렸지만, NOWAIT 옵션에서는 wait time이 전혀 없었다. 그 결과는 <리스트 3>와 같다.


<리스트 3> WAIT와 NOWAIT 결과 비교


Event Waited On          Times Waited    Max. Wait Total Waited
----------------------- --------------- ---------- ------------
log file sync (nowait)             19       0.02         0.04
log file sync (wait)             1017       0.04         1.43

<리스트 3>의 결과를 보면, 로드 중간에 주기적으로 커밋을 필요로 하는 고속의 데이터 로드 프로그램에서는 상당한 차이가 나타날 수 있음을 예상할 수 있다.


Transport AWR Data


데이터베이스의 성능 문제를 분석하기 위해 AWR 데이터는 매우 중요하다. 하지만 운영 중인 데이터베이스에서 AWR 데이터를 분석하는 것이 불가능할 수 있는데, 이러한 경우 AWR 데이터를 별도의 저장소에 로드하고 성능 분석을할수있도록하는기능을Oracle Database 10g Release 2에서 제공하고 있다


Oracle Database 10g Release 2에 새로 추가된 DBMS_SWRF_INTERNAL 패키지가 바로 이기능을 가능하게 하는데, AWR_EXTRACT 프로시저를 이용하면 AWR 데이터를 Data Pump dmp 파일로 다운로드 할수있다.


s1 begin
2 DBMS_SWRF_INTERNAL.AWR_EXTRACT (
3 dmpfile =>‘ awr.dmp’,   // data pump export 파일 명
4 dmpdir =>‘ AWR_DIR’,    // dmp 파일이 기록되는
디렉토리 오브젝트
5 bid => 302,            // 시작 snapshot ID
6 eid => 305             // 끝 snapshot ID
7 );
8* end;

이제 awr.dmp 파일을 새로운 위치로 이동하고, DBMS_SWRF_INTERNAL 패키지의AWR_LOAD 프로시저를 이용하여 로드할 수 있다.


1 begin
2 DBMS_SWRF_INTERNAL.AWR_LOAD (
3    SCHNAME =>‘ AWRUSER’,
4    dmpfile =>‘ awr’,
5    dmpdir =>‘ AWR_DIR’
6 );
7* end;

AWRDIR 디렉토리 오브젝트에 정의된 디렉토리로 부터 awr.dmp 파일을 이용하여 AWR 데이터를 로드하는데, 이때 로드는 직접 SYS 스키마로 바로 로드되지 않고 중간에 스테이징용 스키마에 로드된다. 이후 스테이징 작업이 완료되면, 최종적으로 SYS 스키마로 데이터를 이동시키는 작업이 필요하다.


1 begin
2 DBMS_SWRF_INTERNAL.MOVE_TO_AWR (
3 SCHNAME =>‘ AWRUSER’
4 );
5* end;

이와 같은 방법으로 AWRUSER 스키마에서 SYS 스키마로 AWR 데이터를 이동한 후 성능 분석 작업을 하 면 되는 것이다.


AWR 데이타를 다른 데이터베이스로 이동하여 분석하는 것이 갖는 가장 큰 장점은 운영 데이터베이스에 영향 을 주지 않고 분석 작업을 수행할 수 있다는 것이다. 또한, 여러 데이터베이스로부터 수집된 AWR 데이터를 중앙집중적으로 관리할 수 있다는 장점도 있다


Transparent Data Encryption


이제Oracle Database 10g Release 2의 혁신적인 기능인 Transparent Data Encryption에 대해 살펴보자. 이것은 데이타를 쉽게 암호화할 수 있는 기능으로, 이 기능 덕분에 애플리케이션에서 더 이상 암호화 키를 다루지 않아도 된다. Transparent Data Encryption 기능은 데 이터베이스 레벨에서 칼럼 등에 대한 암호화 설정으로 자동 암호화 및 복호화를 지원한다. 데이터는 디스크에 저장될 때 암호화되어 저장되므로, 누군가가 데이터베이스를 훔치는 경우에 데이타는 보호될 수 있다. 아직 Transparent Data Encryption을 완전히 경험해 본 것은 아니지만, 잠깐 살펴본 결과 그 특징과 사용법을 소개하면 다음과 같다.


제일 먼저 해야 할 일은‘Wallet’을 설정하는 것이었다. 이 Wallet에 암호화 키가 저장될 것이고, 그 다음 이 파일은 패스워드로 보호될 것이다.


간단한 예제를 살펴보자. Oracle 홈에서‘wallet’이라는 디렉토리를 만들고, 다음 사항을 sqlnet.ora 파일에 기술한다.


WALLET_LOCATION=
(SOURCE=(METHOD=FILE)
(METHOD_DATA=
(DIRECTORY=/home/ora10gr2/wallet)
)
)

그 다음에는 Wallet을 열기만 하면 된다.


SQL> alter system
2 set encryption wallet open
3 identified by foobar;
System altered.

위작업은Transparent Data Encryption 기능을 사용하려면, 데이터베이스 오픈 후 반드시 해야 하는 작업이다.


이제 암호화 키를 셋업하도록 하자.


SQL> alter system
2 set encryption key
3 identified by foobar;
System altered.

여기서는 시스템이 키를 만들도록 했지만, 고유의 키를 만들 수도 있다. 이렇게 하면 이 시스템에서 또 다른 시스템으로 쉽게 데이터를 옮길 수 있다.


이상으로 간단한 셋업이 끝났고 이제 데이터를 암호화를 위한 작업을 시작해보자.


SQL> create table t
2 ( c1 varchar2(80),
3 c2 varchar2(80) encrypt )
4 tablespace test;
Table created.
SQL> insert into t values
2 ‘( this_is_unencrypted’,
3 ‘this_is_encrypted’);
1 row created.

이제 데이터는 암호화되어 디스크상에 저장되고, 권한 있는 사용자는 데이터 질의 시 데이터의 암호가 해제되어 리얼 데이터를 확인할 수 있게 된다.


SQL> select *
2 from t;
C1                            C2
--------------------------- -----------------------
this_is_unencrypted           this_is_encrypted

그렇다면, 데이터가 암호화되었다는 건 어떻게 확인 할 수 있을까? 오라클 데이터파일에서 특정 문자열과 grep을 사용해 그 문자열을 찾을 수 있는지 없는지 알아 보았다. 먼저, 암호화된 데이터가 들어 있는 블록이 디스 크에 저장되어 있는지부터 확인해 보았다.


SQL> alter system checkpoint;
System altered.

그 다음에 문자열들을 찾아보았다.‘ this_is’를 포함 하고 있는 암호화된 dbf 데이터파일에서 문자열을 찾아보 았다.


$ strings -a encrypt.dbf|grep this_is
this_is_unencrypted

보다시피,‘ this_is_unencrypted’문자열만 나타났다. 다른 문자열은 저장되기 전에 이미 암호화 되었기 때문에 볼 수가 없는 것이다.


이 간단한 예제는 새로운 암호화 기능의 빙산의 일각 에 불과하다. Transparent Data Encryption은 외부의 테이블 언로드, 데이터 펌프 등과도 잘 작동하며, Oracle Wallet Manager 같은 GUI 툴을 통해 Wallet과 Passwrd를관리할수있다. 또, 키 손상된 것 같으면, 명령어를 이용해 데이터를 리키 할(re-key) 수있다. 개인적으로 Transparent Data Encryption은 Oracle Database 10g Release 2에서 가장 훌륭한 기능 중 하나라고 생각한다.


Autotrace


Oracle Database 10g Release 2의 Autotrace 기능은 DBMS_XPLAN 패키지를 사용해 Explain Plan을 디스플레이 한다. 그래서, 이전 릴리즈에 비하여 더욱 상세한 Explain Plan을 제공한다. Oracle9i Database Release 2 이상부터는 DBMS_XPLAN 패키지를 사용 해 이러한 플랜을 구할 수 있었으나, Autotrace가 DBMS_XPLAN을 사용함으로써 작업이 한결 쉬워졌다. 이DBMS_XPLAN 아웃풋에서특징적인부분은플랜의 하단에 Predicate Information(where절 부분)이 추 가된 것으로, 오라클 데이터베이스가 where 절 구문을 어느 단계에서 어떻게 사용할 것인지 정확하게 보여주는 것으로, 상당히 훌륭한 기능이라고 생각한다<리스트 4>.


<리스트 4> Autotrace with DBMS_XPLAN


SQL> set autotrace traceonly explain
SQL> select *
2 from emp, dept
3 where emp.deptno = dept.deptno
4 and emp.job =‘ CLERK’;
Execution Plan
-------------------------------------------------------------
Plan hash value: 877088642
----------------------------------------------------------------
| Id | Operation | Name| Rows| Bytes | Cost (%CPU) | Time |
----------------------------------------------------------------
|0 |SELECT STATEMENT        | | 4 | 468 | 7 (15) | 00:00:01 |
|* 1 | HASH JOIN            | | 4 | 468 | 7 (15) | 00:00:01 |
|* 2 | TABLE ACCESS FULL| EMP | 4 | 348 | 3 (0)  | 00:00:01 |
| 3 | TABLE ACCESS FULL| DEPT | 4 | 120 | 3 (0)  | 00:00:01 |
-----------------------------------------------------------------
Predicate Information (identified by operation id):
-----------------------------------------------------------------
1 - access“( EMP”.”DEPTNO”=”DEPT”.”DEPTNO”)
2 - filte“r( EMP”.”JOB”=’CLERK’)
Note
--------
  - dynamic sampling used for this statement

DBMS_OUTPUT


DBMS_OUTPUT이 Oracle Database 10g Release 2에서 업그레이드되었다. 버퍼 사이즈를 무제한으로(100 만 바이트까지!) 정의할 수 있을 뿐 아니라 255 Character 이상의 라인도 프린트할 수 있다. 현재 최대 라인 길이는 32K이다. 다음은 DBMS_OUTPUT의 실제 활용 예 이다.


SQL> set serveroutput on -
> size unlimited
SQL> begin
2 dbms_output.put_line
3 ( rpad‘( *’,2000,’*’) );
4 end;
5 /
************************
...
************************
PL/SQL procedure successfully completed.

Oracle DataGuard Fast-Start Failover


Oracle Database 10g Release 2의 또 다른 신기능은 관리자가 일련의 명령어를 실행하거나 버튼을 누르지 않 아도 되는 스탠드바이 데이터베이스의 자동 페일오버이 다. Oracle Data Guard가 Production(Active) Server와 스토리지, 네트워크의 장애 발생시 스탠드바이 데이터베이스를 자동으로 페일오버하는 것이다.


Data Pump 압축


Oracle Database 10g Release 1이처음나왔을때희 소식은 완전히 새로 만들어진 Export (EXP), Import (IMP) 유틸리티와 EXPDP, IMPDP의 새로운 Oracle Data Pump 유틸리티였다. 하지만, EXPDP와 IMPDP 툴은 엑스포트 중에 DMP 파일들을 압축할 수 없다는 한 가지 단점이 있었다. EXPDP의 경우, 먼저 DMP 파일을 만든 후 이를 압축해야 했다. 예전의 EXP 툴에서는 지정된 파이프에 데이터를 기록하고, 그 파이프 에 기록된 데이터를 압축하도록 명령할 수 있었던 것에 비 하면, 이것은 분명 원하지 않던 단점이었다. 그러나, 이제 그런 번거로움이 없어졌다.


다행히도Oracle Database 10g Release 2에서는 이전 툴과 비교해 훨씬 쉽게 DMP 파일을 만들면서 부분 압축할 수 있게 되었다. EXPDP 스스로 덤프 파일에 씌 어진 모든 메타 데이터를 압축할 것이고, IMPDP는 자동 으로 압축 해제할 것이다. 또한, Oracle Database 10g Release 2에서처음으로Windows 플랫폼에서의DMP 파일 부분 압축이 가능하게 되었다.


LOG ERRORS


Log Errors는 Oracle Database 10g Release 2의 Delete, Insert, Merge 및 Update 문에서 볼 수 있는 새로운 구문이다. Log Errors는 많은 로우의 벌크 처리 시 실행에 실패한 로우들을 저장할 수 있도록 해준다. 이 전에는 문장 전체를 에러 처리함으로써 성공한 로우 데이 터에 대해서 재작업을 해줘야 하는 비효율성이 있었다.


예를들어, Insert Into T Select A,B,C From T2 Log Errors Into Errlog(‘ Bad_Rows_For_T’) Reject Limit Unlimited 같은 문장을 만들 수 있다.


이 문장은 조건에 위배되는 로우도 Bad_Rows_For _T 테이블에 로깅할 수 있도록 해준다. 이를테면, 너무 긴 칼럼 값 때문에 생긴 에러, Constraint Violation(Not Null, unique, referential, check constraint), 트리거실행중발생한에러, Type Conversion 에러, 파티 션 매핑 에러 등을 로깅할 수 있다. 에러가 발생하면, 이 에 러를 야기한 로우는 오라클 에러 번호, 에러 메시지 텍스트, 작업 유형(Insert, Update 또는 Delete) 그리고 Update 및 Delete 작업 중 실패한 로우의 RowID와 함께‘bad’테이블에 로그된다.


필자는 Oracle Database 10g Release 2의 여러 새 기능들 중 이 기능을 특히 좋아하게 될 것 같다. 각각의 로우를 일일이 처리하는 대신 벌크 작업을 수행하면 속도 와 자원 활용 면에서 큰 혜택을 볼 수 있을 것이다. 그리고, 실패한 로우의 에러 로깅은 이전부터 늘 요구되는 기능이 었는데, 이제 Log Errors로 완전히 해결되었다.


Restore Points


Oracle Database 10g Release 2에는Restore Point 를 설정할 수 있는 기능이 있다. Oracle Database 10g Release 1에서 데이터베이스를 플래시백할 수 있는 기능이 처음 소개되었지만, SCN(System Change Number) 과 플래시백할 시점을 알아내야 했다. 그러나, Oracle Database 10g Release 2에서는 먼저 Restore Point‘ X’를 생성하고, 손상을 입힐 만한 일, 예를 들어 애플리케이션의 업그레이드 같은 일을 수행 한 뒤, 업그레이드가 실패한 경우 간단하게Flashback Database To Restore Point‘ X’를 실행하면 작업 전의 상태로 돌아가는 것이다. 이제 더 이상 플래시백을 위한 SCN을 찾기 위 해 Select문을 실행하거나 플래시백 시점을 추정할 필요가 없게 된 것이다.


요약


이상은 Oracle Database 10g Release 2의 새 기능들 중 일부를 간략하게 훑어본 것이다. 위의 기능들과 언급하 지 못한 심도 깊고 다양한 Oracle Database 10g Release 2의 신기능들을 독자 여러분들이 직접 체험할 수 있기를 바란다.


제공 : DB포탈사이트 DBguide.net

출처명: 한국오라클'

Posted by 1010
02.Oracle/DataBase2008. 10. 23. 15:29
반응형

Oracle Database 11g:
DBA와 개발자가 알고 있어야 하는 새로운 기능

저자 - Arup Nanda Oracle ACE Director

Data Guard

Active Data Guard가 어떻게 실시간 쿼리를 통해 스탠바이 환경에 대한 투자를 가치 있게 만들면서, 물리적 스탠바이 데이터베이스를 스냅샷 스탠바이로 변환해, 아카이브 로그 및 많은 새로운 향상된 기능을 인프라에 적용하는지 자세한 정보를 알아 보겠습니다.

Download Oracle Database 11g 다운로드

Oracle Database 11g에는 책 한 권을 채울 수 있을 만큼 많은 Data Guard의 향상된 기능이 있습니다. 따라서 모든 향상된 기능을 자세히 밝히기는 불가능합니다. 대신 가장 흥미롭다고 생각되는 것을 중심으로 설명하도록 하겠습니다.

보다 간편하진 스탠바이 데이터베이스 생성

이제 시작합니다. 먼저 물리적 스탠바이 데이터베이스의 생성입니다. Oracle Database 11g에서, 이 프로세스는 RMAN 커맨드 하나면 족할 정도로 무척 간편해졌습니다. 이전에는, 2대의 머신 사이에 Data Guard를 설정하려면, Grid Control 마법사 인터페이스를 사용했습니다. 이 글을 작성하고 있는 시점 에서는, Oracle Enterprise Manager Grid Control 11g는 아직 사용할 수 없고, Database Control도 Data Guard를 위한 마법사를 가지고 있지 않습니다. 그러나 SQL 커맨드 사용 경험의 유무에 상관없이, Oracle Database 11g에, Data Guard 환경을 설정하는 것은 어렵지 않습니다. 이는 너무 단순해 여기서 모든 단계를 설명할 수 있습니다.

prolin11로 명명된 기본 데이터베이스가 prolin1이라는 서버에서 운영되고 있다고 가정합니다. 스탠바이 데이터베이스는 prolin2라는 서버에 설정하려고 합니다. 스탠바이 데이터베이스 인스턴스의 명칭은 pro11sb입니다. 단계는 다음과 같습니다:

  1. 이미 가지고 있는 경우가 아니라면, 우선, prolin1에 spfile을 생성합니다.
    SQL> create spfile from pfile;
    
    이 단계는 필수적인 것은 아니지만, 프로세스를 쉽게 해주는 이점이 있습니다. 데이터베이스 생성 후, spfile을 사용하기 위하여 prolin11 데이터베이스를 다시 시작합니다

  2. 스탠바이 재실행 로그 생성은 필수적인 것은 아니지만, 그렇게 하는 것이 좋습니다. 스탠바이 재실행 로그는 기본 데이터베이스에 발생하는 변화를 거의 실시간으로 스탠바이에 반영되도록 하는데, 이것이 Real Time Apply (RTA)라는 개념입니다. 따라서, 우리는 여기서 기본 데이터베이스에 스탠바이 재실행 로그를 생성할 것입니다 (스탠바이 재실행 로그는 기본 데이터베이스에 생성된다는 것을 잊지 마십시오. RMAN이 이 일을 할 것입니다):
    SQL> alter database add standby redo logfile group 4 
      2> (‘+DG1/sby_redo01.rdo') size 50M;
    SQL> alter database add standby redo logfile group 5 
      2> (‘+DG1/sby_redo02.rdo') size 50M;
    SQL> alter database add standby redo logfile group 6 
      2> (‘+DG1/sby_redo03.rdo') size 50M;
    SQL> alter database add standby redo logfile group 7 
      2> (‘+DG1/sby_redo04.rdo') size 50M;
    
    이를 통해 4개의 스탠바이 재실행 로그 그룹이 생성됩니다.

  3. prolin2 서버의 listener.ora 파일에 pro11sb를 위한 입력을 합니다:
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = pro11sb) 
          (ORACLE_HOME = /opt/oracle/product/11g/db1)
          (SID_NAME = pro11sb) 
        )
      )
     
    LISTENER =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = prolin2)(PORT = 1521))
      )
    
  4. 리스너를 실행하려면 재로딩합니다
  5. prolin1에서, $ORACLE_HOME/network/admin: 하부의 tnsnames.ora 파일에 pro11sb 데이터베이스를 위한 입력을 합니다 :
    PRO11SB =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = prolin2)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = pro11sb)
        )
      )
    
  6. prolin2에서, Oracle Home/dbs 디렉토리에 1 라인을 포함하는 initodba11sb.ora 파일을 생성합니다:
    db_name=prolin11
    
    이는 스탠바이 인스턴스를 위한 초기화 파일로 기능할 것입니다; 파라미터의 나머지는 우리가 나중에 보게 될 RMAN 커맨드에 의해 자동 입력됩니다.

  7. prolin2에서, $ORACLE_BASE/admin 디렉토리 갑니다. 여기에 pro11sb라는 이름의 디렉토리를 생성한 다음, 스탠바이 인스턴스에 대한 감사 파일을 보유하기 위하여 pro11sb 내에 adump라는 이름의 디렉토리를 생성합니다.

  8. prolin1의 $ORACLE_HOME/dbs 디렉토리 하부에서, 흔히 orapworadba11로 명명되는 인스턴스 패스워드 파일을 볼 수 있습니다. 이 파일을 볼 수 없다면 (가능성은 희박하지만), 이를 생성합니다. 다음 그 파일을 prolin2의 $ORACLE_HOME/윤 하부로 복사합니다. 이를 orapwodba11sb 파일로 복사합니다. 이렇게 하면 기본 데이터베이스의 sysdba 연결 패스워드를 스탠바이에도 적용할 수 있습니다.

  9. prolin2에서, NOMOUNT 상태의 인스턴스 pro11sb를 실행합니다:
    $ sqlplus / as sysdba
    SQL> startup nomount
    
    이는 인스턴스를 실행하지만 아무것도 마운팅하지 않습니다.

  10. 이제 모든 초기화 준비가 완료되었으므로, 스탠바이 데이터베이스를 생성할 강력한 RMAN 스크립트를 호출합니다. prolin1에서, RMAN을 가동해 다음 스크립트를 실행합니다. 이를 파일에 저장하고 RMAN 프롬프트에서 스크립트를 실행하는 것은 매우 쉽습니다.
    connect target sys/oracle123@prolin11
    connect auxiliary sys/oracle123@pro11sb
     
    run {
       allocate channel c1 type disk;
       allocate auxiliary channel s1 type disk;
     
       duplicate target database
            for standby
            from active database
            dorecover
            spfile
            parameter_value_convert 'prolin11','pro11sb'
            set db_unique_name='pro11sb'
            set db_file_name_convert='/prolin11/','/pro11sb/'
            set log_file_name_convert='/prolin11/','/pro11sb/'
            set control_files='/oradata/pro11sb/control01.ctl'
            set fal_client='pro11sb'
            set fal_server='prolin11'
            set standby_file_management='AUTO'
            set log_archive_config='dg_config=(prolin11,pro11sb)'
            set log_archive_dest_2='service=prolin11 LGWR ASYNC valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=pro11sb'
            set log_archive_dest_state_2='enable'
            set log_archive_format='pro11sb_%t_%s_%r.arc'
       ;
      sql channel c1 "alter system archive log current";
      sql channel s1 "alter database recover managed standby database using current logfile disconnect";
    }
    
    이 스크립트는 스탠바이 데이터베이스를 생성하고, 적절한 파라미터를 스탠바이 데이터베이스를 위한 spfile에 배치하고, 스탠바이 데이터베이스를 위한 진단 데스티네이션을 생성하고, 스탠바이를 다시 시작합니다. 이 작업의 정확한 구조를 이해하려면, 여기서 RMAN 커맨드의 아웃풋을 볼 필요가 있습니다.

    아래의 2 라인은 기본 및 스탠바이 인스턴스에 연결됩니다:

    connect target sys/oracle123@prolin11;
    connect auxiliary sys/oracle123@pro11sb;
    
    패스워드 파일을 스탠바이 호스트에 복사했기 때문에, SYS 패스워드는 동일하게 남아 있으며 따라서 스탠바이 인스턴스에 연결은 (마운팅 데이터베이스가 없지만) 성공적입니다. 다음으로, 다음과 같은 라인들이 실행됩니다:
    duplicate target database for standby from active database
         spfile
            parameter_value_convert 'prolin11','pro11sb'
            set 'db_unique_name'='pro11sb'
            set 'db_file_name_convert'='/prolin11/','/pro11sb/'
            ... and so on ...
    
    duplicate target database 커맨드는 우선 원격 서버에 있는 SQL*Net를 통해 기본 데이터베이스의 이미지를 복사함으로써 기본 데이터베이스로부터 스탠바이를 생성합니다. 복사가 완료되면, 내부적으로 커맨드를 발령하여 (switch clone datafile all;), 스탠바이 데이터베이스를 클론으로 만듭니다. 스크립트의 세트 커맨드가 스탠바이 인스턴스를 위한 SPFILE의 파라미터를 설정하며, 이 데이터베이스가 스탠바이 데이터베이스가 됩니다. 다시 말하지만, RMAN 아웃풋은 배후 활동에 대한 모든 정보를 제공합니다.
물리적 스탠바이 데이터베이스를 구축하는 것이 매우 쉽다는 것을 알아 두십시오. 이는 스크립트를 실행하는 것만큼이나 간단합니다!

Active Data Guard

물리적 스탠바이 데이터베이스를 사용하여 Data Guard 환경을 구현할 때 오랫동안 장애로 남아 있던 것 중의 하나는 스탠바이 데이터베이스의 수동성이었습니다. Oracle Database 10g 및 그 이전에는, 물리적 스탠바이 데이터베이스를 복구 프로세스를 멈춘 후에만, 읽기 전용 (말하자면, 리포팅 부담을 줄이기 위해)으로 개방했습니다. 이들 제품에서, Data Guard가 DR 솔루션의 일부이었다면, 뒤처지는 것이 두려워 오랫동안 복구 프로세스를 멈출 수 없었을 것이며, 따라서 물리적 스탠바이 데이터베이스는 읽기 전용을 위한 것이 아니라면, 당연히 무용지물이었을 것입니다

Oracle Database 11g로, 이제 상황이 변했습니다: 물리적 스탠바이 데이터베이스를 읽기 전용 모드로 개방하고 복구 프로세스를 다시 시작할 수 있습니다. 이는 기본 데이터베이스를 지속적으로 사용하면서 리포팅을 위해 스탠바이를 사용할 수 있다는 것을 의미합니다. (이전 버전의 경우와 마찬가지로, 스탠바이에서 백업도 할 수 있습니다.) 이것이 어떻게 이루어지는지 살펴 보겠습니다.

우선, 스탠바이 복구 관리를 취소합니다:

SQL> alter database recover managed standby database cancel;

Database altered.
다음, 데이터베이스를 읽기 전용으로 개방합니다:
SQL> alter database open read only;
 
Database altered.
여기까지는, 프로세스가 11g 이전 버전과 동일합니다. 이제, 11g의 정점을 살펴 보도록 하겠습니다: 스탠바이 데이터베이스가 읽기 전용으로 개방되어 있는 동안, 복구 프로세스 관리를 다시 시작할 수 있습니다.
SQL> alter database recover managed standby database disconnect;
 
Database altered.
이제 스탠바이 데이터베이스는 복구 관리 모드로 배치되어, 개방되어 있는 동안, 로그 파일을 적용합니다. 어떻게 이를 확인할 수 있을까요? 간단합니다; 단지 기본 데이터베이스의 최장 시퀀스 번호를 스탠바이의 그 것과 비교하면 됩니다. 기본 데이터베이스에서, 로그 변환을 하여 최장 시퀀스 번호를 확인합니다:
SQL> alter system switch logfile;
 
System altered.

SQL> select max(Sequence#) from v$log;
 
MAX(SEQUENCE#)
--------------
            79
로그 변환은 스탠바이가 읽기 전용 모드로 개방되어 있는 동안 진행됩니다. 스탠바이의 최장 시퀀스를 확인합니다:
SQL> select max(Sequence#) from v$log;
 
MAX(SEQUENCE#)
--------------
            79
이것 역시 79로 기본과 같습니다. 이는 로그 애플리케이션이 여전히 작업 중이라는 것을 보여줍니다. 여기서 이는 단순히 로그가 적용되고 있다는 것만을 보여주는 것이 아니냐는 의문이 생길 수 있습니다. 기본에서 진행되는 변화가 이 모드에서 보일까요? 확인해 보겠습니다. 기본에서, 테이블을 생성합니다:
SQL> create table test2 (col1 number);
 
Table created.
...그리고 나서 몇 개의 로그 변환을 하고 이들 로그가 스탠바이에 적용될 때까지 기다립니다. 다음으로 스탠바이 데이터베이스를 확인합니다:
SQL> desc test2
 Name                                      Null?    Type
 ----------------------------------------- -------- ---------------------------
 COL1                                               NUMBER
Presto! 테이블이 스탠바이에 생성되고, 쿼리가 가능해졌습니다.

이 경우, 기본에서 생긴 변화를, 네트워크가 사용 가능하다면, 스탠바이에 즉각 나타나게 해주는 Real Time Apply를 사용할 수 있었다는 것을 기억하십니까? RTA는 ADG에 필수적인 것은 아니지만, 기본에 생긴 최근의 변화를 보고자 할 때, ADG가 보다 유용한 것이 되도록 해줍니다

보안과 관련해선, 걱정할 것이 없습니다. 데이터베이스는 읽기 전용 모드에 있기 때문에, 아무것도 여기에 쓸 수 없습니다. 만약 audit_trail 파라미터가 기본에서 DB로 설정되어 있다면 (Oracle Database 11g에서의 디폴트), 스탠바이에서도 동일하지만, 일기 전용이기 때문에, 감사 추적을 쓸 수는 없습니다

알림 로그에 나타난 라인을 보십시오:

AUDIT_TRAIL initialization parameter is changed to OS, as DB is NOT compatible for database opened with read-only access
아하! 감사 추적은 멈추지 않습니다; 오히려, 데이터베이스가 개방되었을 때, OS 파일로 자동 전환됩니다. 스탠바이 데이터베이스를 활성화하면, audit_trail은 DB로 자동 재설정됩니다.

스냅샷 스탠바이

일반적 시나리오를 생각해 보겠습니다: 새로운 애플리케이션을 데이터베이스에 배치 중이고, 데이터베이스 성능의 영향에 대해 알고 싶다고 합시다. Oracle Database 11g에는, SQL 구문을 캡처하고 이를 재생하는 완벽한 툴이 있지만 (Database Replay), 그 영향력을 직접 실행해 보고 확인해 볼 필요가 있습니다. 테스트 시스템을 캡처하더라도, 프로덕션 시스템에서 재생하는 것은 불가능합니다. 우선, 배치가 되지 않습니다, 또한, 배치된다고 하더라도, 애플리케이션으로 다른 테이블을 변경할 수 없습니다. 그러면 애플리케이션의 영향력을 확인하려면 어떻게 해야 할까요?

완벽한 답은 물리적 스탠바이 데이터베이스를 업데이트가 가능한 스냅샷 스탠바이 데이터베이스로 임시 변환할 수 있는 Oracle Database 11g입니다. 이 모드에서, 애플리케이션을 운영할 수 있고—많은 테이블 변경 가능—그 영향력을 평가할 수 있습니다. 영향력을 평가한 후, 데이터베이스를 정상적 복구가 진행되고 있는 스탠바이로 변환할 수 있습니다. 이는 정해진 지점으로 플래시백하여 모든 변화를 원상 복구하는 플래시백 데이터베이스 기능을 사용하여 데이터베이스 복구 지점을 생성함으로써 가능합니다. 이 작업이 어떻게 진행되는지 알아보겠습니다:

우선, 이미 진행되고 있는 경우가 아니라면, 스탠바이에서 복구를 시작합니다:

SQL> alter database recover managed standby database disconnect;

Database altered.
복구가 몇 개의 로그 파일을 선정할 때까지 기다립니다. 그리고 복구를 중단합니다.
SQL> alter database recover managed standby database cancel;
 
Database altered.
여기서, 스냅샷 스탠바이 데이터베이스를 생성할 수 있습니다. 이것은 플래시백 로깅을 가능하게 하기 때문에, 플래시 복구 영역을 구성하지 않으면, 다음과 같은 메시지를 받게 됩니다:
ORA-38784: Cannot create restore point 'SNAPSHOT_STANDBY_REQUIRED_01/12/2008
00:23:14'.
ORA-38786: Flash recovery area is not enabled.
이를 피하기 위해서는, 미리 플래시 복구 영역을 생성해야 합니다. 이미 그렇게 하지 않았다 하더라도, 걱정할 필요는 없습니다. 지금 생성하면 되기 때문입니다:
SQL> alter system set db_recovery_file_dest_size = 2G;
 
System altered.
 
SQL> alter system set db_recovery_file_dest= '/db_recov';
 
System altered.
이제 절차를 마쳤으므로, 다음과 같은 간단한 커맨드를 사용해 스탠바이 데이터베이스를 스냅샷 스탠바이로 변환할 수 있습니다:
SQL> alter database convert to snapshot standby;

Database altered.
이제 데이터베이스를 리사이클링합니다:
SQL> shutdown immediate
ORA-01507: database not mounted
...
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
이제 데이터베이스가 읽기/쓰기 작업을 위해 개방되었습니다:
SQL> select open_mode, database_role
  2  from v$database;
 
OPEN_MODE  DATABASE_ROLE
---------- ----------------
READ WRITE SNAPSHOT STANDBY
이제 데이터베이스를 변경할 수 있습니다. 여기가 Database Replay를 사용하여 캡처한 작업을 재생할 최적의 지점입니다. 이제 데이터베이스에서 시스템을 변경하고 변화의 영향력을 보기 위하여 몇 차례 재생할 수 있습니다. 이것은 프로덕션 데이터베이스의 복사본이므로, 재생은 해당 작업을 정확하게 재현합니다.

테스트가 완료되면, 스냅샷 스탠바이 데이터베이스를 정상적인 물리적 스탠바이 데이터베이스로 변환합니다. 다음과 같은 단계를 거칩니다:

SQL> connect / as sysdba
Connected.	
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
 
...
Database mounted.
SQL> alter database convert to physical standby; 
 
Database altered.
이제 끄고, 데이터베이스를 마운팅하고 복구 관리를 시작합니다.
SQL> shutdown
ORA-01507: database not mounted
 
 
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
...
Database mounted.
Start the managed recovery process:
SQL> alter database recover managed standby database disconnect;
이제 스탠바이 데이터베이스가 복구 관리 모드로 복귀했습니다. 당연히, 데이터베이스가 스냅샷 스탠바이 모드에 있으면, 기본의 아카이브 로그가 적용되지 않습니다. 이것은 지금 적용되며 작업 완료까지 몇 분 걸립니다.

스냅샷 스탠바이 데이터베이스는 스탠바이 데이터베이스를 사용하여 프로덕션 데이터베이스의 변화를 사전에 정확히 예상할 수 있습니다. 그러나 이게 전부가 아닙니다. 또 다른 장점이 있습니다. 기본에서 생긴 변화를, 네트워크가 사용 가능하다면, 스탠바이에 즉각 나타나게 해주는 Real Time Apply를 사용할 수 있었다는 것을 기억하십니까? 누군가 기본 데이터베이스에서 대규모 업데이트를 하거나 일부 코드를 변경하는 등 실수를 한다면 어떻게 될까요? 이전 버전에서, 이 같은 실수가 스탠바이로 확산되는 것을 방지하기 위하여, 신중하게 스탠바이 데이터베이스에서 딜레이를 사용합니다. 그러나 딜레이로 인해, 스탠바이가 올바로 작동하지 않거나 프로덕션의 활성 카피로 사용될 수 없을 수 있습니다.

더 이상은 필요 없습니다. 스탠바이 데이터베이스를 플래시백할 수 있기 때문에, 딜레이를 유지하고 있을 필요가 없습니다. 문제가 있다면, 언제든지 이전 상태로 플래시백할 수 있습니다.

물리적 스탠바이에서 논리적 스탠바이로의 변환

이제 물리적 스탠바이 데이터베이스를 논리적인 것으로 쉽게 변환할 수 있습니다. 다음 단계를 거칩니다:

  1. 스탠바이 데이터베이스는 어딘가로부터 데이터 딕셔너리 정보를 가져올 필요가 있습니다. 딕셔너리 정보는 기본의 재실행 스트림에 배치되어야 합니다. 따라서, 기본 데이터베이스에서, 다음과 같이 하여 딕셔너리를 위한 LogMiner 테이블을 만듭니다:
    SQL> begin 
      2    dbms_logstdby.build;
      3  end;
      4  /
     
    PL/SQL procedure successfully completed.
    
  2. 스탠바이에서, 복구 관리 프로세스를 멈춥니다
    SQL> alter database recover managed standby database cancel;
    
    Database altered.
    
  3. 이제, 스탠바이에 커맨드를 입력해 이를 논리적인 것으로 변환합니다:
    SQL> alter database recover to logical standby pro11sb;
     
    Database altered.
    
    1 단계를 실행하지 않았다면, 위의 커맨드는 딕셔너리 정보가 없기 때문에, 멈춰 있을 것입니다. 이 경우 여기서 1 단계를 실행하면 됩니다. RTA를 실행했다면, 정보는 스탠바이 데이터베이스에 즉각 정보가 나타날 것입니다.
  4. 기본의 몇 가지 로그 변환을 통해 아카이브 로그를 생성해 스탠바이로 보내야 합니다:
    SQL> alter system switch logfile;
     
    System altered.
    
  5. 잠시 후, 스탠바이에서, 데이터베이스 변경 커맨드가 완료되는 것을 볼 수 있습니다. 이제 스탠바이가 논리적인 것으로 변했습니다. 알림 로그에서 다음과 같은 것이 나타납니다:
    RFS[12]: Identified database type as 'logical standby'
    
  6. Recycle the database:
    SQL> shutdown
    ORA-01507: database not mounted
    ORACLE instance shut down.
    SQL> startup mount
    ORACLE instance started.
     
    Total System Global Area 1071333376 bytes
    ...
    Database mounted.
    SQL> alter database open resetlogs;
     
    Database altered.
    
  7. 이제 논리적 스탠바이로 되었으므로, SQL Apply 프로세스를 시작해야 합니다
    SQL> alter database start logical standby apply immediate;
    
SQL> alter database start logical standby apply immediate; 논리적 스탠바이 데이터베이스가 이제 완전 작동합니다! 일단 물리적 스탠바이를 논리적인 것으로 변환하면, 다음에서 설명할 특수 구문 ("keep identity")을 사용하지 않는 한 ,이를 다시 물리적인 것으로 변환할 수 없습니다.

롤링 업데이트

DBA의 업무에서 어려운 점은 업그레이드를 위해 꽤 오랜 시간 데이터베이스를 내려야 하는 정당성을 밝히는 것입니다. Oracle Database 11g에서는, 롤링 업데이트를 통해 어떠한 유형의 스탠바이 데이터베이스라도 가지고 있다면, 이 일은 매우 쉬어집니다:

  1. 스탠바이를 업그레이드합니다.
  2. 애플리케이션을 스탠바이로 옮깁니다.
  3. 기본을 업그레이드합니다.
  4. 애플리케이션을 다시 본래의 기본으로 옮깁니다.
이것이 논리적 스탠바이라면, 스탠바이가 단지 기본의 SQL을 적용하면 되기 때문에, 프로세스가 매우 간편합니다. SQL이 적용되면, 업그레이드는 해당 데이터베이스에서 쉽게 이루어집니다. 복구를 멈추고, 스탠바이를 업그레이드하고, 복구를 진행한 후, 스탠바이를 기본으로 변환할 수 있습니다. 나중에, 본래의 기본을 업그레이드 할 스탠바이로 만들 수 있습니다. 마지막으로, 역할을 바꿔, 본래의 기본을 새로운 기본으로 만들 수 있습니다.

그러나, 많은 스탠바이 데이터베이스는 사용 및 관리의 간편성을 위해 본질적으로 물리적입니다. 스탠바이가 논리적이 아니라 물리적이라면, 단계는 거의 흡사합니다. 스탠바이를 임시로 논리적으로 변환한 후 다시 물리적으로 변환하는 것입니다. 여기서 중요한 것은 영구적이 아니라 임시로라는 것입니다. 따라서, 다음과 같이 "keep identity"구문을 가진 변환 커맨드를 입력합니다:

SQL> alter database recover to logical standby keep identity;
 
Database altered.
보다 자세한 내용은 문서에서 확인할 수 있습니다.

기타 개선 사항

Data Guard 프로세스 자체에 몇 가지 중요한 개선 내용이 있습니다:

재실행 압축

Data Guard는 기본의 아카이브 로그를 스탠바이 데이터베이스 서버로 옮겨 이를 해당 데이터베이스에 적용한다는 전제를 가지고 있습니다. 기본과 스탠바이 사이의 시간 지체의 핵심 요소의 하나는 아카이브 로그를 옮기는 시간입니다. 이는 재실행 스트림을 압축하면 어느 정도 줄일 수 있습니다.

Oracle Database 11g에서는 TRUE로 설정된 파라미터 압축을 사용하여 SQL*Net를 통해 스탠바이 서버 전체를 경유하는 재실행 스트림을 압축할 수 있습니다. 이는 오로지 갭 해소 중에 옮겨지는 로그를 위한 것입니다. 이 문서의 앞부분에 제시된 사례에서 압축을 할 때 사용할 수 있는 커맨드는 다음과 같습니다.

alter system set log_archive_dest_2 = 'service=pro11sb LGWR ASYNC 
valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=pro11sb compression=enable'

네트 타임 아웃

Data Guard 환경은 데이터베이스 인스턴스 연결을 통해 재실행 데이터를 스탠바이 서버로 보내 작동시킨다. 인스턴스가 시간 내 응답하지 않으면, 로그 전송 서비스는 지정된 타임 아웃 값을 기다린 후 중단합니다. 이 타임 아웃 값은 Oracle Database에 net_timeout이라는 파라미터를 사용해 설정할 수 있습니다. 최대 보호 모드에서, 로그 전송 서비스는 중단 전 20회의 재시도를 합니다.

그러나 우선 로그 전송에서 얼마만큼의 딜레이가 존재하는지 알아야 합니다. 새로운 뷰 v$redo_dest_resp_histogram에 막대 그래프 모양으로 시간이 나타납니다:

SQL> desc v$redo_dest_resp_histogram
 Name                   Null?    Type
 ---------------------- -------  --------------
 DEST_ID                         NUMBER
 TIME                            VARCHAR2(20)
 DURATION                        NUMBER
 FREQUENCY                       NUMBER
 
뷰는 해당 버킷에서 전송 시간 측정 결과를 보여줍니다. 작동 후 며칠 후 뷰를 조사해 보면, 타임 아웃에 설정에 대한 구상을 할 수 있을 것입니다. 다음과 같이 하여 타임 아웃 값을 설정할 수 있습니다:
alter system set log_archive_dest_2 = 'service=pro11sb LGWR ASYNC 
valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=pro11sb compression=enable net_timeout=20'
다시 한 번 말하지만, 이는 앞에서 제시한 사례와 관련된 것입니다. 파라미터 값의 "net_timeout=20" 구문을 기억해 두십시오.

동적 변경 가능 파라미터

논리적 스탠바이 데이터베이스 환경 운영 프로세스에서, 프로세스를 튜닝하고 일부 파라미터 값을 조정할 필요가 있습니다. Oracle Database 11g에서, 이들 대부분의 파라미터는 온라인에서 업데이트할 수 있습니다. 뷰 dba_logstdby_parameters를 쿼리하면 이를 알 수 있습니다.

col name format a30
col value format a10
col unit format a10
col setting a6
col setting format a6
col dynamic format a7
select *
from dba_logstdby_parameters
order by name
/

NAME                           VALUE      UNIT       SETTIN DYNAMIC
------------------------------ ---------- ---------- ------ -------
APPLY_SERVERS                  5                     SYSTEM YES
EVENT_LOG_DEST                 DEST_EVENT            SYSTEM YES
                               S_TABLE
LOG_AUTO_DELETE                TRUE                  SYSTEM YES
LOG_AUTO_DEL_RETENTION_TARGET  1440       MINUTE     SYSTEM YES
MAX_EVENTS_RECORDED            10000                 SYSTEM YES
MAX_SERVERS                    9                     SYSTEM YES
MAX_SGA                        30         MEGABYTE   SYSTEM YES
PREPARE_SERVERS                1                     SYSTEM YES
PRESERVE_COMMIT_ORDER          TRUE                  SYSTEM NO
RECORD_APPLIED_DDL             FALSE                 SYSTEM YES
RECORD_SKIP_DDL                TRUE                  SYSTEM YES
RECORD_SKIP_ERRORS             TRUE                  SYSTEM YES
RECORD_UNSUPPORTED_OPERATIONS  FALSE                 SYSTEM YES
칼럼 DYNAMIC이 값을 동적으로 변경 가능한지를 보여 준다는 사실을 기억해 두십시오. 거의 모든 파라미터는 동적입니다. 예를 들어, 스탠바이를 멈추지 않고 파라미터 APPLY_SERVERS를 변경하려면, 다음과 같이 합니다.
SQL> begin
  2     dbms_logstdby.apply_set('APPLY_SERVERS',2);
  3  end;
  4  /
이는 apply_servers 값을 2로 설정하는데, 이는 스탠바이를 멈추지 않고 할 수 있습니다.

SQL Apply 이벤트 테이블

Oracle Database 10g에서, SQL Apply와 관련된 이벤트는 알림 로그에 작성되는데, 알림 혹은 리포팅 확인을 위하여 스크립트를 작성하는 편이 좋기 때문에, 그다지 유용한 것이 못됩니다. Oracle Database 11g에서, 이벤트는 디폴트로 SYSTEM 스키마의 새로운 테이블 LOGSTDBY$EVENTS에 작성되도록 되어 있습니다. 다음은 샘플 쿼리입니다:

select event_time, error
from system.logstdby$events
order by 1;
The output:
EVENT_TIME                    ERROR
----------------------------- -------------------------------------------------
13-JAN-08 11.24.14.296807 PM  ORA-16111: log mining and apply setting up
13-JAN-08 11.24.14.320487 PM  Apply LWM 2677727, HWM 2677727, SCN 2677727
14-JAN-08 07.22.10.057673 PM  APPLY_SET: APPLY_SERVERS changed to 2
14-JAN-08 07.22.11.034029 PM  APPLY_SERVERS changed to 2
14-JAN-08 07.45.15.579761 PM  APPLY_SET: EVENT_LOG_DEST changed to DEST_ALL
14-JAN-08 07.45.16.430027 PM  EVENT_LOG_DEST changed to DEST_ALL
여러 가지 이유로, 이 이벤트를 테이블에 가지고 있는 것이 좋습니다. 예를 들면, 조작 및 리포팅이 간편해집니다. 그러나 때로는, 특히 오류 및 메시지 알림 로그를 스캐닝하기 위한 모니터링 툴을 구현했다면, 이를 알림 로그에서 보는 것도 괜찮습니다. 이는 논리적 스탠바이 데이터베이스 적용 파라미터 "event_log_dest"를 "DEST_ALL"로 설정하면 가능해집니다:
begin
   dbms_logstdby.apply_set('EVENT_LOG_DEST','DEST_ALL');
end;
이는 동적으로 이루어지며, 이벤트는 테이블과 알림 로그 모두에 전달됩니다. 이 커맨드를 입력한 후, 알림 로그를 확인할 수 있습니다. 많은 SQL Apply 이벤트와 더불어 최소한 다음의 2 라인이 보일 것입니다:
LOGSTDBY: APPLY_SET: EVENT_LOG_DEST changed to DEST_ALL
LOGSTDBY status: EVENT_LOG_DEST changed to DEST_ALL

결론

우선, 우리는 활성 기본 데이터베이스로부터 물리적 스탠바이 데이터베이스를 구현하는 것이 별 것 아니라는 것을 알게 되었습니다. 또한, 물리적 스탠바이를 논리적으로 변환하는 것이 매우 간단하다는 것도 알게 되었습니다. 이 사실로부터 누릴 수 있는 최대의 장점은 스탠바이 데이터베이스를 어떤 방식으로든 비즈니스 지원을 위해 사용할 수 있다는 것입니다. Active Data Guard 기능은 스탠바이 데이터베이스를 개방해 아카이브 로그가 적용되는 동안 쿼리를 허용합니다. 스냅샷 스탠바이 데이터베이스는 데이터베이스에서 프로덕션 데이터베이스 로딩을 허용한 후 정상적 복구 관리 프로세스를 다시 시작하도록 처음 시작했던 지점으로 플래시백합니다. 이들 2가지 기능은 스탠바이 서버의 프로세싱 기능을 활용할 수 있도록 허용하기 때문에 11g로의 업그레이드를 위한 강력한 촉매 역할을 할 것입니다.

"Oracle Database 11g: DBA와 개발자가 알고 있어야 하는 새로운 기능" 홈페이지로 돌아가기


Arup Nanda Arup Nanda (arup@proligence.com)는 Starwood Hotel and Resorts의 데이터베이스 시스템 매니저로 12년이 넘는 기간 동안 오라클 DBA로 활동해 왔으며 2003년 오라클 매거진에 의해 "올해의 DBA"로 선정되었습니다. Arup은 오라클 관련 이벤트 및 저널의 발표자, 기고자로서 적극적으로 활동하고 있으며 뉴욕 오라클 사용자 그룹 실행 위원회 회원이자 Oracle ACE 디렉터입니다. 그는<RMAN Recipes for Oracle Database 11g: A Problem Solution Approach>를 포함하는 4권의 책을 공저하였습니다.
Posted by 1010
02.Oracle/DataBase2008. 10. 23. 13:55
반응형

10gR2 em 을 사용해서
archivelog 모드로 전환하려고 할 때,
호스트 인증서에 OS의 사용자 이름과 암호를 정확히 입력했는데도
아래 오류 메세지가 발생해서 진행이 안되네요...

RemoteOperationException: ERROR: Wrong password for user

해결 방법을 찾았네요...

관리도구 -> 로컬보안정책 메뉴에 들어가서

보안설정>로컬정책>사용자 권한 할당까지 들어가서

일괄작업으로 로그온 정책에 사용하는 계정을 추가하니깐 되네요...

Posted by 1010
02.Oracle/DataBase2008. 10. 23. 12:01
반응형

Oracle Secure Backup

파일 시스템과 오라클 데이터베이스를 위한 고성능 테이프 백업 관리를 이용하여 데이터 보호 환경의 비용과 복잡성을 절감할 수 있습니다.

보도 자료

Oracle Secure Backup은 분산 UNIX, Linux, Windows, NAS(Network Attached Storage) 환경의 오라클 데이터베이스 및 파일 시스템을 위한 테이프 데이터 보호 기능을 제공합니다. 데이터 보호 및 백업 도메인 액세스 기능을 제공하는 Oracle Secure Backup은 SSL(Secure Socket Layer), 데이터 암호화 등의 검증된 보안 테크놀로지를 기반으로 구현되었습니다. Oracle Secure Backup은 Oracle Enterprise Manager(EM)과 통합되어 있으며, 테이프를 이용하여 전체 오라클 환경을 보호하고자 하는 오라클 고객에게 이상적인 솔루션입니다:

  • 테이프 드라이브 당 비용이 저렴하므로 다른 테이프 백업 제품과 비교하여 혁신적인 비용 절감 효과를 제공합니다.
  • 오라클 데이터베이스의 Recovery Manager(RMAN)과 통합된 기능을 제공합니다 (Oracle 9i 이상 지원).
  • 최적화된 데이터베이스 백업 기능을 제공하므로 성능 개선, 테이프 사용량 절감이 가능합니다.
  • 오라클 데이터베이스의 테이프 백업을 위한 데이터 암호화 기능을 제공합니다.
  • 이기종 환경의 파일 시스템 데이터 보호 기능:
    • Oracle Home, 바이너리
    • 오라클 애플리케이션 제품의 설정 파일
  • Data Guard, Real Application Clusters (RAC), Automatic Storage Management (ASM) 환경의 최적화된 지원 제공

Oracle Secure Backup은 엔터프라이즈 테이프 백업 소프트웨어의 비용과 복잡성을 절감하고 오라클 고객의 ROI를 보장합니다. 단일 벤더 제품을 이용하여 오라클 데이터베이스의 디스크/테이프 백업 환경을 구현함으로써, 멀티 벤더 솔루션에 수반되는 복잡성을 제거하고 문제 해결 과정의 오류와 번거로운 절차를 피할 수 있게 합니다. Oracle Secure Backup은 전체 오라클 환경을 위한 안정적인 테이프 데이터 보호 환경을 제공합니다.


튜토리얼
오라클이 권장하는 전략
Bullet 테이프 백업의 암호화
Bullet 파일 시스템 백업의 스케줄링
Bullet Backup and restoring file system data
Bullet Managing media and devices using EM
Bullet User-level Access Control
Bullet

Installation on Windows

Oracle Secure Backup Express
bullet

Oracle Database, Oracle Application 제품군과 함께 무료 제공되는 Oracle Secure Backup Express는 하나의 테이프 드라이브를 장착한 단일 서버 보호를 위한 솔루션입니다. 두 개 이상의 테이프 드라이브가 필요한 경우 Oracle Secure Backup 정식 버전 라이센스를 구매하고 간단하게 업그레이드할 수 있습니다.

bullet 데이터 시트
 

뛰어난 확장성의 클라이언트/서버 아키텍처를 기반으로 하는 Oracle Secure Backup은 관리 포인트를 단일화함으로써 네트워크 서버의 테이프 백업 관리를 중앙집중화하는 효과를 제공합니다.

중앙 관리 서버는 Oracle Secure Backup의 카탈로그, 작업 스케줄러, 작업 설정을 유지하며 서버 인증을 위한 CA(Certificate Authority) 역할을 수행합니다. 관리 서버에 의해 관리되는 모든 호스트와 테이프 디바이스는 관리 도메인의 일부로 포함됩니다. 도메인 내의 호스트는 백업 요구사항과 테이프 드라이브 액세스를 기준으로 하나 또는 그 이상의 역할(role)에 할당됩니다.

백업해야 할 데이터가 위치한 각 호스트에는 클라이언트 역할이 할당되며, 서버에 테이프 드라이브가 직접 연결되어 있는 경우에는 미디어 서버 역할도 함께 수행합니다. 테이프 디바이스는 다수의 서버에 의해 분산, 공유되거나 전용으로 할당될 수 있습니다. 공유 테이프 환경에서, Oracle Secure Backup은 테이프 리소스 사용률의 극대화를 위한 다이내믹 테이프 드라이브 공유 기능을 제공합니다.

관리 도메인은 한 대의 서버 또는 수 TB의 데이터를 저장한 수백 대의 이기종 서버로 구성될 수 있습니다.

Posted by 1010
02.Oracle/DataBase2008. 10. 22. 15:33
반응형
원인:
관리도구의 서비스에서 OracleServiceORCL 이 정지가 되어있는 상태에서 오라클에 접속하게 되면 아래의 현상이 발생한다
 
C:\>sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on Mon Dec 13 16:33:47 2004
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
ERROR:
ORA-12560: TNS:protocol adapter error

Enter user-name:
 
 
해결 방법:
1. 관리도구의 서비스에서 OracleServiceORCL을 시작한다.
2. 명령어로 시작한다
 
1번의 경우 서비스에서 OracleServiceORCL을 선택하고 위에 있는  ▶ 버튼을 클릭하면 시작된다.
 
2번의 경우는 아래와 같이 할 수 있다.
C:\>oradim -startup -sid ORCL -usrpwd oracle -starttype srvc -pfile c:\oracle\ora92\database\initORCL.ora
 
-sid ORCL  (오라클 SID를 입력)
-usrpwd oracle  (password)
-pfile c:\oracle\ora92\database\initORCL.ora (pfile의 경로를 쓰시면 됩니다.)


출처 : http://nanamix.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-ORA-12560-%EC%97%90%EB%9F%AC-%EB%8C%80%EC%B2%98%EB%B2%95
Posted by 1010
02.Oracle/DataBase2008. 10. 22. 15:16
반응형
DBMS를 기동

sqlplus '/ as sysdba'
sql>startup



만약 DB가 클라이언트랑 다른 머신에서 동작한다면...
listener기동해야합니다.
lsnrctl start
Posted by 1010
02.Oracle/DataBase2008. 10. 22. 14:48
반응형
오라클 테이블스페이스 만들기
① TABLESPACE의 종류 (SYSTEM, UNDO, TEMPORARY ,DATA, SYSAUX 등 5가지)
② 데이터파일의 사이즈 변경
  ALTER DATABASE
  DATAFILE 'C:\ORACLE\DATA\NEOSS_FM01.DBF' RESIZE 300M
③ 데이터파일 추가  
  ALTER TABLESPACE TS_DATA
  ADD DATAFILE 'C:\ORACLE\DATA\NEOSS_FM02.DBF' SIZE 200M ;
④ 기본테이블스페이스 지정 (10g)
  ALTER DATABASE DEFAULT TABLESPACE TS_DATA; -- 데이터베이스에 대한 기본 테이블스페이스 지정
  ALTER USER SCOTT DEFAULT TABLESPACE TS_DATA; -- USER별 기본 테이블스페이스 지정
  주의) 기본 테이블 스페이스를 변경할 경우 기존에 명시적으로 지정된(개별 유저에 대하여)
      기본 테이블 스페이스도 변한다...
⑤ SYSAUX라는 테이블 스페이스 도입 (10G)
⑥ 테이블 스페이스 이름 변경
  ALTER TABLESPACE RENAME TO ;
⑦ 테이블스페이스별로 블록크기를 다르게 지정 가능 (9i 이상)
⑧ 테이블스페이스 옮기기
   ALTER TABLE TB_EMP MOVE TABLESPACE TS_DATA2;
⑨ 테이블스페이스에 대한 권한 부여
   ALTER USER SCOTT QUOTA UNLIMITED ON TS_DATA;

------------------------------------------------------------------
▣ DATA 테이블 스페이스 만들기
------------------------------------------------------------------
CREATE TABLESPACE TS_DATA
DATAFILE 'C:\ORACLE\DATA\NEOSS_FM01.DBF'
SIZE 100M
AUTOEXTEND ON
NEXT 10M
MAXSIZE 1000M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 1M
-- STORAGE 절을 구성할 필요 없다.(INITIAL, NEXT, PCTINCREASE, MINEXTENTS,
-- MAXEXTENTS 를 자동관리)
-- 최초 생성시에는 INITIAL, NEXT, MINEXTENTS 에 대하여 효력이 있다.
-- Autoallocate방식과 Uniform 방식중 EXTENT MANAGEMENT 가 명시되지 않으면 Autoallocate로 설정
SEGMENT SPACE MANAGEMENT AUTO;
-- PCTUSED, FREE LIST, FREE LIST GROUP 설정을 자동으로 한다.
/


------------------------------------------------------------------
▣ TEMP 테이블 스페이스 만들기
   ① locally managed tablespace uniform size 만 생성가능
     autoallocate ,extent management dictionary option 을 사용하면 ora-25319 error 가 발생
   ② rename 이 불가능
------------------------------------------------------------------
CREATE TEMPORARY TABLESPACE TS_TEMP
TEMPFILE 'C:\ORACLE\TEMPDATA\NEOSS_TEMP01.DBF'  
-->DATAFILE이 아니라 TEMPFILE 이다..
SIZE 10M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 512K
/

------------------------------------------------------------------
▣ UNDO 테이블 스페이스 만들기
  ① UNDO_MANAGEMENT 와 UNDO_TABLESPACE, UNDO_RETENTION PARAMETER를 제공
  ② 지역적으로 관리되는 익스텐트만 사용가능
  ③ 시스템에 의해 관리되는 익스텐트 할당만 사용가능하다.
   (UNIFORMSIZE를 할당 할 수 없고 AUTOALLOCATE만 가능)
------------------------------------------------------------------
CREATE UNDO TABLESPACE TS_UNDO
DATAFILE 'C:\ORACLE\TEMPDATA\NEOSS_UNDO01.DBF'
SIZE 1M
AUTOEXTEND ON
NEXT 1M
MAXSIZE 1024M
/
Posted by 1010
02.Oracle/DataBase2008. 10. 20. 23:47
반응형

오라클 유용한 함수(안쓰면 까먹어서 또 찾아봐야하는 그런...) 정리

/*---------------------------
1. 문자 함수
------------------------------*/
①LOWER( column|expression!!! )

LOWER('String') --> string : 소문자로 변환

②UPPER( column|expression!!! )

UPPER('String') --> STRING : 대문자로 변환

③INITCAP( column|expression!!! )

INITCAP('string') --> String : 첫글자만 대문자이고 나머지글자는 소문자로 변환

④CONCAT( column1|expression!!ŋ ,column2|expression!!Ō )

CONCAT('Good','String') --> GoodString : ||와 같은 역할을 한다.

⑤SUBSTR(column|expression!!!, m [,n]) : m값이 음수면 문자값의 끝부터..)

SUBSTR('String',1,3) --> Str : 1번째부터 3개의 문자를 리턴한다.

⑥LENGTH( column|expression!!! )

LENGTH('String') --> 6 : 문자열의 길이를 리턴한다.

⑦INSTR( column|expression!!!, )

INSTR('String','r') --> 3 : 문자열에 'r'이 몇번째 위치하고 있나를 리턴한다.

⑧LPAD( column|expression!!!,n,'string' ) : n 은 전체 길이

LPAD('String',10,'*') --> ****String

: 10자리수중에 모자란 자리수를 '*'로 왼쪽에 채운다.(문자,숫자 가능!!!)

⑨ RPAD('String',10,'*') --> String****

: 10자리수중에 모자란 자리수를 '*'로 오른쪽에 채운다.(문자,숫자 가능!!!)

⑩ LTRIM(' String') --> 'String' : 문자열의 왼쪽 공백을 버린다.
 - LTRIM('****AAA***','*')  --> 왼쪽에 특정 문자를 지운다.

⑪ RTRIM('String ') --> 'String' : 문자령의 오른쪽 공백을 버린다.

* TRIM(leading/tailing/both, trim_character FROM trim_source )

TRIM( 'S' FROM 'SSMITH') --> MITH

12. TRANSLATE      REPLACE와 똑 같지만 이것은  스트링 단위가 아닌 문자  단위로 작동한다.
 TRANSLATE('AABBA','B','C') -->AACCA
-- 숫자는 모두 9로 문자는 모두 X로 변환하기
SELECT
       TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX')
 FROM DUAL
 -------------------
 9XXX999


13. REPLACE        어떤 스트링이 나타나는 곳마다 다른 스트링으로 바꾼다.

-- TRANSLATE와 확실한 구별 법

 SELECT
       TRANSLATE('2KRW229','229','0')
 FROM DUAL
-------------------------------
0KRW00

  SELECT
       replace('2KRW229','229','0')
 FROM DUAL
 -------------------------------
2KRW0


--특정Character의 아스키값 구하기
SELECT CHR(65) "CHR", ASCII('A') "ASCII" FROM DUAL;
SELECT ASCII( CHR(65) ) FROM DUAL;

SELECT LOWER('My name is LKM') "LOWER", UPPER('My name is LKM') "UPPER" FROM DUAL;

SELECT LPAD('LKM', 10, '*') "LPAD", RPAD('LKM', 10, '*') "RPAD" FROM DUAL;
SELECT LPAD('1234567890', 20, '+') || RPAD('1234567890', 20, '^') "12345678901234567890"
FROM DUAL;
SELECT LPAD('1,234,567', 30, ' ') "LPAD사용으로 30자리 맞춤",
'1,234,567' "단순문자 사용",
1234567 "단순숫자 사용"
FROM DUAL;

SELECT LTRIM(' AAA ') "LTRIM", RTRIM(' AAA ') "RTRIM" FROM DUAL;
SELECT LTRIM( RTRIM( ' A A A ' ) ) "TRIM" FROM DUAL;

SELECT REPLACE('ORACLE', 'A', 'BBB') "REPLACE" FROM DUAL;
SELECT EMP_NAME, REPLACE(EMP_NAME, '이', '박') "이->박"
FROM PERSONNEL
WHERE EMP_NAME LIKE '이%';

SELECT SUBSTR('ORACLE PROJECT', 1, 3) SUBSTR1,
SUBSTR('ORACLE PROJECT', 4, 5) SUBSTR2,
SUBSTR('ORACLE PROJECT', 10) SUBSTR3 FROM DUAL ;
SELECT SUBSTRB('ORACLE PROJECT', 1, 3) SUBSTRB1,
SUBSTRB('ORACLE PROJECT', 4, 5) SUBSTRB2,
SUBSTRB('ORACLE PROJECT', 10) SUBSTRB3 FROM DUAL ;
SELECT SUBSTR('오라클 PROJECT', 1, 3) SUBSTR1,
SUBSTR('오라클 PROJECT', 4, 5) SUBSTR2,
SUBSTR('오라클 PROJECT', 10) SUBSTR3 FROM DUAL ;
SELECT SUBSTRB('오라클 PROJECT', 1, 3) SUBSTRB1,
SUBSTRB('오라클 PROJECT', 4, 5) SUBSTRB2,
SUBSTRB('오라클 PROJECT', 10) SUBSTRB3 FROM DUAL ;

SELECT LENGTH ('ORACLE PROJECT') "LENGTH",
LENGTHB('ORACLE PROJECT') "LENGTHB",
FROM DUAL;
SELECT EMPNO, LENGTH(EMPNO), LENGTHB(EMPNO),
EMP_NAME, LENGTH(EMP_NAME), LENGTHB(EMP_NAME)
FROM PERSONNEL
WHERE EMPNO > '98102';
SELECT HOBBY, LENGTH(HOBBY), LENGTHB(HOBBY)
FROM PERSONNEL
WHERE EMPNO > '98102';

SELECT INSTR ('ORACLE PROJECT', 'R', 1, 1) INSTR1,
INSTR ('ORACLE PROJECT', 'R', 1, 2) INSTR2,
INSTR ('ORACLE PROJECT', 'R', 1, 3) INSTR3
FROM DUAL;
SELECT INSTR ('CORPORATE FLOOR','OR', 3, 2) INSTR,
INSTRB ('CORPORATE FLOOR','OR', 3, 2) INSTRB
FROM DUAL;
SELECT HOBBY,
INSTR (HOBBY, ')', 1, 1) INSTR,
INSTRB(HOBBY, ')', 1, 1) INSTRB
FROM PERSONNEL
WHERE EMPNO > '98102';


/*------------------------------
2. 숫자 함수
-----------------------------------*/
① ROUND(45.926, 2) --> 45.93 : 소수점 두자리수까지 보여주면서 반올림한다.

② TRUNC(45.926, 2) --> 45.92 : 소수점 두자리까지만 보여주고 나머지는 버린다.

③ MOD(1600,300) --> 100 : 1600을 300으로 나누고 나머지를 리턴한다.

* ROUND예제(WHOLE NUMBER:정수)

SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL

==> 45.92 46 50

* TRUNC예제

SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-1) FROM DUAL

==> 45.92 45(n이 생략된면 일의 자리까지 남기고 버린다.) 40

* SYSTEM 날짜를 갖고 오는 방법.

SELECT sysdate FROM dual


--무조건 올림
SELECT CEIL(13.11) FROM DUAL;
SELECT CEIL(13.001) FROM DUAL;

--나머지 구함
SELECT MOD(23, 5) FROM DUAL;
SELECT MOD(57, 145) FROM DUAL;

-- 제곱승
SELECT POWER(3, 2), POWER(3, -2) FROM DUAL;
SELECT POWER(2, 10) FROM DUAL;

--자릿수 지정
SELECT ROUND(345.123, 0) FROM DUAL;
SELECT ROUND(345.123, 2), ROUND(345.123, -1) FROM DUAL;

--지정된 자리까지 잘라내기
SELECT TRUNC(345.123, 1), TRUNC(345.123, 0), TRUNC(345.123, -1) FROM DUAL;
SELECT TRUNC( 345.123 + 0.09, 1 ) FROM DUAL;
SELECT TRUNC( 345.123 + 0.9, 0 ) FROM DUAL;
SELECT TRUNC( 345.123 + 9, -1 ) FROM DUAL;

SELECT SIGN(5.989), SIGN(0), SIGN(-999.098) FROM DUAL;



/*------------------------------------
3. 날짜 계산( 날짜를 숫자로 저장)
-----------------------------------------*/
date + number : date에 number만큼 후의 날자를 보여준다.

date - number : date에 number만큼 전의 날자를 보여준다.

date1 - date2 : date1에서 date2 까지의 총 일수를 보여준다.( date1+date2는 X )

date1 + 숫자/24 : date1에서 시간을 더해 날짜를 보여준다.

4. Date Functions

MONTHS_BETWEEN('01-SEP-95','11-JAN-94') --> 19.6774194

; 두날짜 사이의 달수를 보여준다.

ADD_MONTHS('11-JAN-94', 6) --> 11-JUL-94

; 날짜에 6개월을 더한 날자를 보여준다.

NEXT_DAY('01-SEP-95','FRIDAY') --> '08-SEP-95'

; 해당일 다음에 오는 FRIDAY의 일자를 보여준다.

('SUNDAY'는 1, 'MONDAY'는 2...이런식으로 숫자를 써줘도 된다.)

LAST_DAY('01-SEP-95') --> '30-SEP-95'

; 해당월의 마지막날자를 보여준다.

ROUND('25-JUL-95','MONTH')--> 01-AUG-95 ROUND('25-JUL-95','YEAR')--> 01-JAN-96

TRUNC('25-JUL-95','MONTH') --> 01-JUL-95 TRUNC('25-JUL-95','YEAR') --> 01-JAN-95


/*--------------------------------
5. 타입 변환 함수
----------------------------------*/
nlsparams : 십진수, 그룹구분자, 지역 통화 기호, 국제 통화 기호

TO_CHAR(date,['format'],[nlsparams]) : date를 format에 맞게 문자열로 변환한다.

- Date Format Elements

YYYY --> 1999 (년출력) , YEAR --> nineteen ninety-nine (년출력)

MM --> 12 (월출력) , MONTH --> DECEMBER (월출력), MON --> DEC

D --> 요일을 숫자로 리턴한다.(일요일은 1, 월요일은 2...)

DD --> 07 (달의 일출력)

DDD --> 200 (연의 일출력)그 해의 총 몇 일째인가를 리턴한다.

DAY --> MONDAY (요일출력) DY-->MON

CC --> 20 (몇 세기인지를 보여준다.)

WW --> 그 해의 몇 번째 주인가를 리턴한다.

W --> 그 달의 몇 번째 주인가를 리턴한다.


* Element들을 소문자로 쓰면 소문자로 나오고 대문자로 쓰면 대문자로 출력된다.

HH or HH12 or HH24 / MI(0-59분) / SS(0-59초)


* 문자열은 " " 묶어 추가한다 DD " of " MONTH --> 12 of DECEMBER

*숫자 접미어는 숫자를 문자로 표기. TH(4->4TH)/ SP(4->FOUR)/ SPTH or THSP(4->FOURTH)

ddspth : 14-> fothteenth

* / . , : 구두점은 결과에 그대로 출력한다. * 공백, 선행제로를 제거하는 fm요소가 있다.

TO_CHAR(number,'format',[nlsparams]) : number를 format에 맞게 문자열로 변환한다.

- Number Format Elements

9 : 999,999 --> 1,234 $: 부동 달러 기호 $99999 -> $1234

0 : 099999 --> 001234 99.999EEEE -> 1.234E+03 B: 0값을 공백으로

L : L99,999 --> FF1,234 (NLS_CURRENCY에 설정되어있는 값이 L로 보여진다.)


TO_NUMBER(char,['format'],[nlsparams]) : 숫자형태의 문자열을 숫자로 변한한다.

TO_DATE(char,['format'],[nlsparams]):날자형태의 문자열을 format에 맞게 날자형식으로 변환 한다.


/*--------------------------------------------------------
6. NVL Funcion : 값이 null일 때 설정값을 보여준다.
----------------------------------------------------------*/
NVL(number_column, 0) : null일 때 0을 보여준다.

NVL(date_column, '01-JAN-95') : null일 때 '01-JAN-95'를 보여준다.

NVL(character_column, 'Empty') : null일 때 'Empty'를 보여준다.

* column Type과 표현식의 type이 반드시 일치해야 한다.


/*-------------------------------------------------------------------------
7. DECODE Function : CASE or IF-THEN-ELSE 형식과 비슷하다.
---------------------------------------------------------------------------*/
*DECODE(col/expression!!!, search1, result1 [,search2,result2,…] [,default])

F1 (F2 (F3 (col,arg1),arg2),arg3)



이중 Decode나 Nvl 그리고, To_데이터형은 너무나도 많이 쓰여서 잘 안 까먹지만....

숫자나 문자관련 함수 잘 안쓰면 찾기가 너무 힘들다는..... '그 뭐시기냐 문자열의 위치 찾아내는거

그 함수 뭐냐?' 라면 '그게 뭔데?'라는 반문이-_- 차라리 instr이 뭐하는거지가 더 쉬운 질문이다-_-

대전 있을때 자료전환건이 있어서... 처리를 하려고 보니 특정칼럼 하나에 잘 쓰이지 않는

두개의 필드값을 탭구분자로 나눠서 때려넣어논 꼴을 본적이 있다. instr, chr, replace로 간단히

해결가능할걸 instr과 chr를 잘 몰라 통째로 엑셀로 받아 수작업을 했다라는....

그것도 1만3천건의 자료를 ㅠ.ㅠ


다음은 예전 공부할때 예제들.. 참고삼아






/*--------------------------------
* 함수 - Date Function *
--------------------------------*/


SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') "SYSDATE" FROM DUAL;

SELECT LAST_DAY(SYSDATE) FROM DUAL;
SELECT TO_CHAR(LAST_DAY(SYSDATE), 'YYYY-MM-DD HH24:MI:SS') "LAST_DAY" FROM DUAL;

SELECT MONTHS_BETWEEN( '2002/01/13', '2002/05/13' ) "MONTHS_BETWEEN (-)",
MONTHS_BETWEEN( '2002/01/13', '2001/11/13' ) "MONTHS_BETWEEN (+)"
FROM DUAL ;
SELECT MONTHS_BETWEEN( '2002/01/13', '2002/01/30' ) "MONTHS_BETWEEN (-)",
MONTHS_BETWEEN( '2002/01/13', '2002/01/01' ) "MONTHS_BETWEEN (+)"
FROM DUAL ;

SELECT ADD_MONTHS(SYSDATE, 1) "ADD_MONTHS (+)",
ADD_MONTHS(SYSDATE, -1) "ADD_MONTHS (-)"
FROM DUAL ;

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';
SELECT ADD_MONTHS( '2002/02/28', 12 ) "1년후",
ADD_MONTHS( '2002/02/28', 24 ) "2년후",
ADD_MONTHS( '2002/02/28', 36 ) "3년후"
FROM DUAL ;

SELECT SYSDATE,
NEXT_DAY(SYSDATE, '일요일') "NEXT_DAY 1",
NEXT_DAY(SYSDATE, 1 ) "NEXT_DAY 2"
FROM DUAL;
SELECT SYSDATE,
NEXT_DAY(SYSDATE, '수요일') "NEXT_DAY 1",
NEXT_DAY(SYSDATE, 4 ) "NEXT_DAY 2"
FROM DUAL;


/*------------------------------------------
* 함수 - Conversion Function *
-------------------------------------*/


SELECT TO_CHAR(1234567.891) "TO_CHAR1",
TO_CHAR(1234567.891, '999') "TO_CHAR2",
TO_CHAR(1234567.891, '9,999,999') "TO_CHAR3",
TO_CHAR(1234567.891, '0.0000') "TO_CHAR5",
TO_CHAR(1234567.891, '9,999,999.0000') "TO_CHAR6",
TO_CHAR(123, '9,999.00') "TO_CHAR7",
TO_CHAR(123, '9,999.99') "TO_CHAR8"
FROM DUAL ;
SELECT TO_CHAR(1234567.891, '9G999G999') "TO_CHAR3",
TO_CHAR(1234567.891, '0D0000') "TO_CHAR5",
TO_CHAR(1234567.891, '9G999G999D0000') "TO_CHAR6",
TO_CHAR(123, '9G999D00') "TO_CHAR7",
TO_CHAR(123, '9G999D99') "TO_CHAR8"
FROM DUAL ;

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') "TO_CHAR1",
TO_CHAR(SYSDATE, 'YYYY/MM') "TO_CHAR2",
TO_CHAR(SYSDATE, 'YYYY') "TO_CHAR3",
TO_CHAR(SYSDATE, 'DD') "TO_CHAR4",
TO_CHAR(SYSDATE, 'DAY') "TO_CHAR5",
TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') "TO_CHAR6",
TO_CHAR(TO_DATE('20020101','YYYYMMDD'), 'YYYY-MM-DD') "TO_CHAR7",
TO_CHAR(TO_DATE('20020101','YYYYMMDD'), 'YYYYMMDD HHMISS') "TO_CHAR8"
FROM DUAL ;

SELECT TO_NUMBER('123456.9') "TO_NUMBER1",
TO_NUMBER('1234567') "TO_NUMBER2"
FROM DUAL ;
SELECT TO_NUMBER('123,456.9', '999,999.9') "TO_NUMBER1",
TO_NUMBER('1,234,567', '9G999G999') "TO_NUMBER2"
FROM DUAL ;

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
SELECT TO_DATE('20020824') "TO_DATE1",
TO_DATE('2002-08-24') "TO_DATE2",
TO_DATE('200208') "TO_DATE3"
FROM DUAL ;
SELECT TO_DATE('20020824', 'YYYYMMDD') "TO_DATE1",
TO_DATE('2002-08-24', 'YYYY-MM-DD') "TO_DATE2",
TO_DATE('200208', 'YYYYMM') "TO_DATE3"
FROM DUAL ;
SELECT TO_DATE('2002/08/24 08:14:06', 'YYYY/MM/DD HH24:MI:SS') "TO_DATE1",
TO_DATE('2002/08/24 08:14:06 오후', 'YYYY/MM/DD HH:MI:SS AM') "TO_DATE2"
FROM DUAL ;


/*------------------------------------
* 함수 - Group Function *
-------------------------------------*/


SELECT AVG(HEIGHT), AVG(WEIGHT) FROM PERSONNEL;

SELECT MAX(EMPNO), MAX(EMP_NAME), MIN(EMPNO), MIN(EMP_NAME) FROM PERSONNEL;
SELECT MAX(HEIGHT), MIN(HEIGHT) FROM PERSONNEL;

SELECT SUM(WEIGHT) FROM PERSONNEL;

SELECT COUNT(*), COUNT(EMPNO), COUNT(JIKCH_CODE) FROM PERSONNEL;


/*----------------------------
* 함수 - ETC *
----------------------------*/


SELECT EMPNO, EMP_NAME, HOBBY 취미, WELL 특기
FROM PERSONNEL
WHERE EMPNO BETWEEN '98001' AND '98005';
SELECT EMPNO, EMP_NAME, HOBBY 취미, NVL(WELL, '(없다)') 특기
FROM PERSONNEL
WHERE EMPNO BETWEEN '98001' AND '98005';

SELECT DECODE( '나', '나', '맞다', '아니다' ) "나가 나면 맞다, 아니면 아니다"
FROM DUAL ;
SELECT DECODE( '나', '대명', '아니다',
'너' , '아니다',
'그' , '아니다',
'나' , '맞다',
'모르겠다' ) FROM DUAL ;
SELECT EMPNO,
EMP_NAME,
DECODE (HT_CODE, '1', '현재원', '2', '휴직', '퇴사') HT_CODE
FROM PERSONNEL
WHERE EMPNO BETWEEN '98071' AND '98080';

SELECT GREATEST (132, 33, 45, 90, 60.77) GREATEST,
LEAST (132, 33, 45, 90, 60.77) LEAST
FROM DUAL;
SELECT GREATEST ('이공명', '이대명', '최수미') GREATEST,
LEAST ('이공명', '이대명', '최수미') LEAST
FROM DUAL;

SELECT USERENV('LANGUAGE') "LANGUAGE",
USERENV('TERMINAL') "TERMINAL",
USERENV('SESSIONID') "SESSIONID"
FROM DUAL;

SELECT UID, USER FROM DUAL;

---------------------------------------------------------------------------------------------------
오라클 내장함수


Error 관련 내장함수
---------------------------------------------------------------------
SQLCODE        현재 발생한 오류에 따른 오류 코드를 반환한다.
SQLERRM        오라클 오류 코드와 연결된 오류 메시지를 반환한다.

Number 관련 내장함수
---------------------------------------------------------------------
ABS            어떤 수의 절대값을 반환한다.
ACOS         어떤 수의 아크코사인을 라디안 단위로 반환한다.
ASIN           어떤 수의 아크사인을 라디안 단위로 반환한다.
ATAN          어떤 수(x)의 아크탄젠트를 라디안 단위로 반환한다.
ATAN2        어떤 수(y/x)의 아크탄젠트를 라디안 단위로 반환한다.
CEIL           지정된 수보다 크거나 같은 최소 정수 값을 반환한다.
COS            어떤 수의 코사인을 라디안 단위로 반환한다.
COSH         어떤 수의 쌍곡선 코사인을 라디안 단위로 반환한다.
EXP            어떤 수의 지수 값을 반환한다. E=2.7182818
FLOOR        지정된 수보다 크거나 같은 최대 정수 값을 반환한다.
LN             어떤 수 x의 대수 값을 반환한다.
LOG            어떤 수 y에서 x를 밑으로 한 대수 값을 반환한다.
MOD            어떤 수 x를 y로 나눈 나머지를 반환한다.
POWER          어떤 수 x에 y 제곱한 값을 반환한다.
ROUND          x를 y자리에서 반올림한 값을 반환한다.
SIGN           숫자 x의 부호에 따라 양수이면 +1, 음수이면 -1, 0이면 0을 반환한다.
SIN            어떤 수의 사인을 라디안 단위로 반환한다.
SINH           어떤 수의 쌍곡선 사인을 라디안 단위로 반환한다.
SQRT           어떤 수 x의 제곱근을 반환한다. X는 반드시 양의 실수이다.
TAN            어떤 수의 탄젠트를 라디안 단위로 반환한다.
TANH           어떤 수의 쌍곡선 탄젠트를 라디안 단위로 반환한다.
TRUNC          어떤 수 x를 y 위치에서 잘라낸다.

Character 관련 내장함수
---------------------------------------------------------------------
ASCII          문자의 ASCII 코드를 반환한다.
CHR            주어진 ASCII 값에 해당하는 문자를 반환한다.
CONCAT         두 개의 스트링을 서로 연결한다. (|| 연산자를 사용한 것과 같다)
INITCAP        각 단어의 첫 글자를 대문자로 나머지는 소문자로 변환한 스트링을 반환한
                다(문자가 아닌 값에는 영향이 없다)
INSTR          어떤 스트링에서 특정 스트링의 위치를 반환한다.
INSTRB         어떤 스트링에서 특정 스트링의 위치를 반환하는데,  값을 싱글 바이트 문
                자 시스템에 대한 바이트 단위로 반환한다.
LENGTH         뒤에 따라오는 공백을 포함하여 문자 스트링의 길이를 반환한다. 값이 null
                이면 null을 반환한다.
LENGTHB        문자 스트링의 길이를 반환하는데, 이것은 값을 싱글 바이트 문자 셋에 대
                한 바이트 단위로 반환한다.
LOWER          전체 문자 스트링을 소문자로 바꾼다. 문자가 아닌 값에는 영향이 없다
LPAD           스트링의 왼쪽에 지정한 어떤 스트링을 덧붙인다.
LTRIM          왼쪽에 있는 문자 스트링을 잘라낸다.
NLS_INITCAP    NLSSORT에 의해 지정된 다른 정렬방법을 사용할 수 있다는 것을 제외하
                고는 INITCAP 함수와 같다.
NLS_LOWER      NLSSORT에 의해 지정된 다른 정렬방법을 사용할 수 있다는 것을 제외하
                고는 LOWER 함수와 같다.
NLS_UPPER      NLSSORT에 의해 지정된 다른 정렬 방법을 사용할 수 있다는  것을 제외
                하고는 UPPER 함수와 같다.
NLSSORT        문자를 정렬하는 방법을 바꾼다. 이것은 NLS 함수를  사용하기 전에 지정
                해야 한다. 그렇지 않으면 기본 정렬이 사용된다.
REPLACE        어떤 스트링이 나타나는 곳마다 다른 스트링으로 바꾼다.
RPAD           스트링의 오른쪽에 지정된 어떤 스트링을 덧붙인다.
RTRIM          오른쪽에 있는 문자 스트링을 잘라낸다.
SOUNDEX        스트링의 음향을 반환한다. 철자는 다르지만 소리는 비슷한 단어에 유용하
                다.
SUBSTR         어떤 스트링에서 스트링의 일부를 반환한다.
SUBSTRB        싱글 바이트 문자 시스템을 처리하기 위해 파라미터가 문자가 아닌 바이트
                단위로 표현된다는 것을 제외하고는 SUBSTR 함수와 같다.
TRIM           LTRIM과 RTRIM 함수의 기능을 조합한  것이다. 스트링에서 앞 뒤 문자
                를 잘라낸다.
TRANSLATE      REPLACE와 똑 같지만 이것은  스트링 단위가 아닌 문자  단위로 작동한
                다.

UPPER          전체 문자 스트링을 대문자로 바꾼다. 문자가 아닌 값에는 영향이 없다.

Conversion 관련 내장함수
---------------------------------------------------------------------
CHARTOROWID    오라클이 제공하는 외부형식으로  된 CHAR이나 VARCHAR2를  그 내부
                바이너리 형식으로 변환한다.
CONVERT        한 문자 셋을 다른 문자 셋으로 변환한다.
HEXTORAW       16진 스트링 값을 내부 원시 값으로 변환한다.
RAWTOHEX       내부 원시 값을 외부 16진 스트링으로 변환한다.
ROWIDTOCHAR    ROWID를 외부적인 18 문자 스트링 표현으로 변환한다.
TO_CHAR        DATES, MLSLABELS, NUMBERS를 VARCHAR2 스트링으로 변환한다.
TO_DATE        CHAR이나 VARCHAR2 스트링을 DATE 값으로 변환한다.
TO_LABEL       CHAR이나 VARCHAR2 스트링을 MLSLABEL 값으로 변환한다.
TO_MULTI_BYTE  싱글 바이트 스트링으로 된 문자를 멀티 바이트 스트링으로 변환한다.
TO_NUMBER      CHAR이나 VARCHAR2 스트링을 NUMBER 값으로 변환한다.
TO_SINGLE_BYTE 멀티 바이트 스트링으로 된 문자를 싱글 바이트 스트링으로 변환한다.

Date 관련 내장함수
---------------------------------------------------------------------
ADD_MONTHS     지정된 날짜에 1달을 더한다.  만일 결과로 나온 달이  현재일수보다 작은
                일수를 갖고 있는 달로 변경되면 그 달의 마지막 날을 반환한다.
LAST_DAY       주어진 달의 마지막 날을 반환한다.
MONTHS_BETWEEN 두 날짜 사이의 개월 수를 계산한다. 만일 두 날짜가 그 달의 마지막 날이
                라면 정수를 반환하고 그렇지 않으면 한 달을 31일로 계산한 분수 값을 반
                환한다.
NEW_TIME       사용자가 지정한 시간대에 대한 시간/날짜 값을 반환한다.
NEXT_DAY       시작 날짜 다음에 지정된 요일이 처음으로 나오는 날짜를 반환한다.
ROUND          월, 연도, 세기 등과 같이 선택한 날짜 파라미터를 반올림한다.
SYSDATE        시스템 날짜와 시간을 DATE 형식으로 반환한다.
TRUNC          일, 월 등과 같이 지정된 날짜 파라미터를 잘라낸다.

집합함수
---------------------------------------------------------------------
AVG            지정된 컬럼 값의 평균을 구한다.
COUNT          쿼리에서 반환되는 행의 개수를 구한다.
GLC            MLSLABEL의 최대 아래쪽 한계를 구한다.
LUB            MLSLABEL의 최대 위쪽 한계를 구한다.
MAX            쿼리에서 지정된 컬럼의 값 중 가장 큰 값을 반환한다.
MIN            쿼리에서 지정된 컬럼의 값 중 가장 작은 값을 반환한다.
STDDEV         쿼리에서 선택된 컬럼의 표준 편차를 반환한다.
SUM            쿼리에서 선택된 컬럼의 합계를 구한다.
VARIANCE       쿼리에서 선택된 컬럼의 분산을 구한다.
DISTINCT       쿼리의 유일값만 구한다.

【예제】
SQL> select COUNT(DISTINCT job) from emp;
SQL> select COUNT(job) from emp;
SQL> select COUNT(*) from emp;


기타 내장함수
---------------------------------------------------------------------
BFILENAME      파일이 저장되어 있는 물리적 LOB  바이너리 파일과 연결되어 있는 포인
                터를 반환한다. 오라클에서는 포인터를 locator라고 부른다.
DECODE         값 목록 중에서 IF-THEN-ELSE 문과 같이 작동한다.
DUMP           VARCHAR2 스트링으로 된 덤프 값을 제공한다. 스트링을 여러 가지 다른
                형식으로 된 표현으로 보여주기 위해서이다.
EMPTY_BLOB     데이터를 갖고 있지 않는 컬럼이나 BLOB 변수를 초기화하는데 사용한다.
EMPTY_CLOB     데이터를 갖고 있지 않는 컬럼이나 CLOB 변수를 초기화하는데 사용한다.
GREATEST       값이나 식의 목록에서 가장 큰 값을 반환한다.
GREATEST_LB    MLSLABELS 목록에서 최대 아래쪽 한계를 반환한다.
LEAST          값이나 식의 목록에서 가장 작은 값을 반환한다.
LEAST_LB       MLSLABELS 목록에서 최소 아래쪽 한계를 반환한다.
NLS_CHARSET_ID  NLS 문자셋 이름과 연결된 NLS 문자셋 ID 번호를 반환한다.
NLS_CHARSET_NAME 함수에 전달된 ID와 연결된 NLS 문자셋 이름을 반환한다.
NVL            값이나 식의 목록에서 처음으로 NULL이 아닌 값을 선택한다.
UID            오라클 사용자에게 할당된 사용자 ID를 반환한다.
USER           현재 사용자 이름을 VARCHAR2 스트링으로 반환한다.
USERENV        현재 작업환경에 관한 정보를 반환한다.
VSIZE          어떤 값의 바이트 수를 반환한다.

【예제】
$ sqlplus scott/tiger
SQL> select * from emp;
SQL> select uid from dual;
SQL> select user from dual;
SQL> select count(user) from emp;
SQL> select avg(sal) from emp;
SQL> select max(sal) from emp;
SQL> select min(sal) from emp;
SQL> select stddev(sal) from emp;
SQL> select sysdate from dual;
SQL> select last_day(sysdate) from dual;
SQL> select to_char(sysdate) from dual;
SQL> select to_char(next_day(sysdate,'Monday'),'MM/DD/yyyy')
    2  from dual;



출처 : http://chunter.tistory.com/20

Posted by 1010
02.Oracle/DataBase2008. 9. 25. 14:38
반응형

접속

접속명령

conn 아이디/비밀번호 as 접속권한

conn 아이디 as 접속권한

conn / as 접속권한 (익명 접속도 가능)

 

접속 해제 명령

disconn

 

오라클 서버에 접속시 관리자 계정(system)으로 접속하려면 'as sysdba' 사용

 

접속포트 바꾸기

exec dbms_xdb.sethttpport(9090);

 

 

시스템 기본 테이블 스페이스 조회

msSQL과는 달리 DB의 개념이 없고 비슷하게 테이블 스페이스라는 것이 있다.

select tablespace_name, status

from dba_tablespaces

order by tablespace_name

 

 

오라클 사용자 계정 만들기

  1. 테이블 스페이스 생성
    [이름] => TS_lazy
    [경로] => D:\java\TS_lazy.dbf
    create tablespace TS_lazy
    datafile 'D:\java\TS_lazy.dbf' size 10M
    default storage
    (initial 128k next 64k pctincrease 10);
  2. 사용자 계정 생성에 테이블 스페이스 지정
    [아이디] => lazy
    [비밀번호] => 302
    create user [아이디] identified by [비밀번호]
    default tablespace TS_lazy
    temporary tablespace temp
    사용자 보기 : select username, user_id from dba_users;
  3. 사용자 권한 부여
    grant connect, resource to [아이디]

 

데이터베이스와 일반 데이터의 차이

  1. 데이터에 보안을 적용하기가 쉽다.
  2. 데이터의 중복을 막을 수 있고 자료의 일관성을 유지할 수 있다.

 

 

데이터베이스 종류

  1. 관계형(R) 데이터 베이스 : MySQL, MS-SQL, Oracle9i, 10g

 

 

테이블 구조

2차원 배열의 형태로 구성

테이블을 구성하는 최소 단위 - item

item이 어러개 모이면 - 필드

필드가 어러개 모이면 - 레코드

레코드가 여러개 모이면 - 테이블

 

 

SQL 명령문 종류

  1. DDL : 데이터 정의 ( create, drop, alter )
  2. DML : 데이터 조작 ( select, update, insert, delete )
  3. DCL : 데이터 제어 ( grant, revoke, rollback, commit )

 

 

 

ORACLE 자료형

-- char : 문자형 (고정길이) max : 2000 byte
-- nchar : 문자형 (고정길이), 유니코드 지원,  max : 2000 byte
-- varchar2 : 문자형 (가변길이) max : 2000 byte
-- nvarchar2 : 문자형 (가변길이) 유니코드 지원, max : 2000 byte
-- date : 날짜형, 형식 지정자로 변환가능, max : 7 byte
-- number : 숫자(정수, 실수)형, max : 37자리까지 정수, 실수 표현가능
-- number(n) : 최대 n byte 정수
-- number(n, m) : n - 소수점 제외자릿수, m - 소수점 이하 자릿수

-- 대용량 데이터 저장용 자료형
-- long : 문자/바이너리 저장용, max : 2 byte
-- 테이블에 단 한번만 사용 가능
-- clob : 문자 저장용, max : 4 Gbyte
-- blob : 바이너리 저장용,  max : 4 Gbyte
-- 데이터 저장 / 출력시 특수한 변환과정 필요 

 

 

저장 프로시저 ( store procedure )

  1. 기본문법
  2. create procedure [저장프로시져 이름] (
  3. -- create or replace procedure [저장프로시져 이름] : 저장과 수정을 동시에 함.
  4. < 매개변수 목록 >

  5. ) is
  6. begin
  7. <프로시져 본문>

  8. end [저장프로시져 이름]

< 매개변수 목록 > : 프로그램 실행시 필요한 데이터를 받을 경우 사용

변수명   in/out   <자료형>

 

< 프로시져 지역변수 > : 프로시져 안에서만 사용

변수명   <자료형>

 

< 프로시져 수식 >

문자연결 연산자 : ||

대입 연산자 :       :=

 

  1. CREATE OR REPLACE PROCEDURE savesungjuk2(
  2.      iname IN sungjuk.names%TYPE, -- 매개변수
  3.   ikor IN sungjuk.kor%TYPE,
  4.   ieng IN sungjuk.eng%TYPE,
  5.   imat IN sungjuk.mat%TYPE
  6. ) IS
  7.   itot sungjuk.tot%TYPE;   -- 지역변수
  8.   iavg sungjuk.avgs%TYPE;
  9.   igrd sungjuk.grd%TYPE;
  10. BEGIN
  11.   itot := ikor + ieng + imat;
  12.   iavg := itot/3;
  13.   IF(iavg > 89) THEN
  14.     igrd := 'A';
  15.   ELSIF(iavg > 79) THEN
  16.      igrd := 'B';
  17.    ELSIF(iavg > 69) THEN
  18.         igrd := 'C';
  19.    ELSIF(iavg > 59) THEN
  20.        igrd := 'D';
  21.    ELSE
  22.        igrd := 'F';
  23.   END IF;
  24.  

     

  25.   INSERT INTO sungjuk VALUES(sjseq.NEXTVAL, iname, ikor, ieng, imat, itot, iavg, igrd, SYSDATE);
  26. END savesungjuk2;
  27. EXECUTE savesungjuk2 ('lazy5', 50, 60, 99);
  28. SELECT * FROM SUNGJUK

 

  1. CREATE OR REPLACE PROCEDURE listBoard(
  2.            rs OUT       SYS_REFCURSOR      -- 결과값 저장 변수
  3. ) IS
  4. BEGIN
  5.          OPEN rs FOR
  6.                   SELECT bno, subject, id, rdate, reads FROM BOARD;
  7. END listBoard;

 

  1. CREATE OR REPLACE PROCEDURE viewBoard(
  2.            ibno         IN              board.bno%TYPE,
  3.            rs           OUT     sys_refcursor
  4. ) IS
  5. BEGIN
  6.          OPEN rs FOR
  7.          SELECT * FROM board WHERE bno = ibno;
  8. END;
Posted by 1010
02.Oracle/DataBase2008. 9. 25. 14:26
반응형

 
사용자 삽입 이미지

MS-SQL 에는 Management Studio 라는 GUI 툴킷이 있습니다.
오라클도 SQL Developer 라는게 있더군요.
기본적으로 설치되지않고 오라클 사이트에서 옵션으로 제공하고 있습니다.

사용자 삽입 이미지

http://www.oracle.com/technology/software/products/sql/index.html

그냥 다운받으면 zip 파일 형태로 제공되는데, 압축을 풀고 sqldeveloper.exe 파일을 실행하면 됩니다.
설치과정이 없더군요.

실행후에 연결 Connection 을 만들어야 합니다.
아래와 같이 하시면 될듯 하네요.
저는 로컬 연결과 학교 데이터베이스 수업에서 쓸 연결, 이렇게 2 개를 만들었습니다.

사용자 삽입 이미지

사용자 삽입 이미지

참고로, 위 스샷은 MS-SQL Management Studio 입니다.
저는 MS-SQL 이 더 편한듯 ;;
Posted by 1010
02.Oracle/DataBase2008. 9. 25. 14:22
반응형
Posted by 1010
02.Oracle/DataBase2008. 9. 1. 17:45
반응형
Posted by 1010
02.Oracle/DataBase2008. 8. 7. 15:16
반응형

All_all_tables      : user가 access할수있는 모든 Table
All_catalog        : user가 access할수있는 모든 Table, Views, synonyms, sequence
All_clusters        : user가 access할수있는 모든 clusters
All_col_comments : user가 access할수있는 모든 Table,Views에 대한 칼럼comments
All_col_privs      : user에게 또는 Public에게 허용된 모든 칼럼에 대한 권한.
All_col_privs_made : user가 부여한 칼럼에 대한 권한.
All_col_privs_recd : user에게 또는 Public에게 허용된 모든 칼럼에 대한 권한.
All_coll_types     : user가 access 할수 있는 모든 collection type
All_cons_columns : 제약조건에 관련된 칼럼, access할수 있는 대한 정보
All_constraints    : access할수 있는 테이블에 대한 제약조건.
All_db_links       : user가 access 할수 있는 데이터베이스 link
All_def_audit_opts : 오브젝트가 생성될때 적용될수있는 default오브젝트감사내용.
All_dependencies  : user가 access할수있는 오브젝트간의 dependencies(참조,link)
All_directories     : user가 access할 수 있는 모든 directories (owner 는 항상 sys)
All_errors        : user가 access할수있는 모든 objects(view,procedure,package, function,
                    packagebody) 에 대한 에러.
All_ind_columns  : user가 access할수있는 테이블에 대한 인덱스의 칼럼.
All_ind_partitions : user가 access할수있는 인덱스partition, partition에 대한
            storage매개변수, Analyze명령에 의해 결정된 partition통계.
All_indexes       : user가 access할수있는 테이블의 인덱스.    
             이 view의 통계를 수집하기위해, Analyze명령을 사용한다.
             병렬partition인텍스탐색을 지원한다.
All_labels         : system labels 에 대한 Oracle server view.
All_libraries       : user가 access할 수 있는 모든 libraries.
All_lobs           : user가 access할 수 있는 모든테이블에 포함된 LOBs.
All_method_params : user가 access할 수 있는 method와 그method의 parameter.
All_method_results :
All_nested_tables  : user가 access할수있는테이블내의 Nested Table
All_object_tables  : user가 access할수있는테이블의모든정보.
All_objects : user가 access할수있는objects(index partition,table partition,package,
             package body, trigger)
All_part_col_statistics : user가 access할 수 있는 테이블partition에 대한 칼럼통계와
             막대그래프화된 정보.
All_part_histograms   : user가 access할수있는 테이블partition의 histograms에 대한
             histogram정보.
All_part_indexes      : user가 access할수있는 모든partition된 index의 partition정보.
All_part_key_columns :user가 access할수있는 partition된 objects의 partition key
             칼럼에 대한정보
All_part_tables        : user가 access할수있는partition된 Table에 대한 partition정보.
All_refresh            : user가 access할수있는모든 refresh groups.
All_refresh_children   : user가 access할 수 있는 refresh groups 안의 모든objects
All_refs                : user가 access할 수 있는 칼럼중 REF칼럼과, REF속성.
All_registered_snapshots : 모든 등록된 snapshots.
All_sequences          : user가 access할수있는 sequences.
All_snapshot_logs      : 모든 snapshot logs.
All_snapshot_refresh_times : 모든 snapshot refresh times.
All_snapshots           : user가 acces할수있는 모든 snapshots.
All_source              : user가 access할수있는 모든 stored objects의 text source.                 
All_synonyms          : user가 access할수있는 모든 synonyms.
All_tab_col_statistics   : 'User_tab_columns' view안의 정보에대한 칼럼통계와 그래프정보
All_tab_columns        : user가 access할수있는모든 table, views, clusters에 대한 칼럼.
             이view를 활용하기위해서는 Analyze명령어를 사용한다.
All_tab_comments      : user가 access할 수 있는 모든 table, views에 대한 comments.
All_tab_histograms     : user가 access할수있는table, views에 대한 histograms.
All_tab_partitions : user가 access할수 있는 각각의 테이블partition에 대한    
      partition정보, storage parameter, Analyze명령에 의한 통계정보등을 서술한다.
All_tab_privs           : user혹은 PUBLIC가 부여받은 오브젝트권한.
All_tab_privs_made    : user가 부여한 user권한과 오브젝트권한.
All_tab_privs_recd     : user 또는 PUBLIC이 부여받은 오브젝트권한.
All_tables            : user가 access할 수 있는 모든 테이블.
                        Analyze명령으로 이 view의 통계를 얻을 수 있다.
All_triggers : user소유의 trigger, user소유테이블의 trigger, 또는 user가
         CREATE ANY TRIGGER 권한을 갖고있다면, 모든 트리거에 대한 정보.
All_trigger_cols : user소유의 trigger, user소유테이블의 trigger, 또는 user가
         CREATE ANY TRIGGER 권한을 갖고있다면, 모든 트리거에 대한 칼럼정보.
All_type_attrs : user가 access할 수 있는 type의 attributes.
All_type_methods : user가 access할수있는type의 methods.
All_types       : user가 access할 수 있는 type.
All_updatable_columns : join view에서 update가능한 칼럼에 대한 정보.
All_users       : 데이터베이스의 모든 user에 대한 정보.
All_views      : user가 access할수있는view의 텍스트.
Audit_actions  : 감사추적type코드 정보.
catalog         : Oracle 5.0 version과의 호환정보를 포함한다.
                이view의 사용은 추천할만하지 못하다.
cat             : user_catalog 에 대한 synonym.
chained_rows  : ANALYZE LIST CHAINED ROWS 명령에 대한 default table.
clu             : user_clusters 테이블의 synonym.
code_pieces    : dba_object_size 와 user_object_size view를 create 시에 사용됨.


code_size      : dba_object_size 와 user_object_size view를 create 시에 사용됨.
col             : Oracle 5.0version 호환정보를 포함하고 있다.
cols            : user_tab_columns view 의 synonym.
column_privileges : user가 부여한권한,부여받은권한, owner인권한,
             또는 PUBLIC에게 부여받은 권한에 대한 칼럼정보.
Dba_2pc_neighbors : 진행중인 트랜잭션에 대한 연결 및 종료에 대한 정보.
Dba_2pc_pending   : recovery를 기다리는 분산된트랜잭션에 대한 정보.
Dba_all_tables      : 데이터베이스내의 모든테이블(object table, relational table).
Dba_audit_exists   : "AUDIT NOT EXISTS" and "AUDIT EXISTS"에 의해 생성된
                    감사추적요소.
Dba_audit_object   : 시스템내의 모든 object에 대한 감사추적기록.
Dba_audit_session  : 세션연결과 종료에 관련된 모든 감사 추적기록.
Dba_audit_statement : GRANT, REVOKE, AUDIT, NOAUDIT, ALTER SYSTEM
                 관련된 감사추적기록.
Dba_audit_trail  : 모든 감사추적요소.
Dba_blockers   : 누군가가 스스로 걸지않은 lock이 해제되기를 기다리는 session정보.
Dba_catalog    : 모든 데이터베이스 table, views, synonyms 과 sequence에 대한 정보.
Dba_clu_columns : cluster칼럼과 table칼럼의 mapping정보.
Dba_clusters   : 데이터베이스내에 있는 모든 cluster.
Dba_col_comments : 데이터베이스내의 모든 table, views의 칼럼에대한 comments.
Dba_col_privs : 데이터베이스내의 칼럼에 대한 모든권한.
Dba_coll_types : 데이터베이스내의 모든 collection type, VARRAYs, nested tables,
                object tables 등에 대한 정보.
Dba_constraints    : 모든테이블에 대한 constraint(primary, check, unique,
        referential integrity, with check option on a view, with read only on a view) 정보.
Dba_cons_columns : constraint 정의안에 있는 access가능한 칼럼에 대한 정보.
Dba_data_files      : 데이터베이스파일에 관한 정보.
Dba_db_links       : 데이터베이스내의 모든 Link.
Dba_Ddl_locks     : 데이터베이스내의 모든 DDL lock과 DDL lock이 현저하게
                       요구되는 사항에 관한정보.
Dba_dependencies  : object 에 대한 Dependence.(REF, HARD)
Dba_directories     : 데이터베이스내의 모든 directory objects.
Dba_Dml_locks     : 데이터베이스내에 구성된모든 DML lock과 DML lock이
             현저하게 요구되는사항에 관한정보.
Dba_errors      : 데이터베이스내의 저장된 object에 대해 가장최근에 발생된 error.
Dba_exp_files   : export파일에 대한 정보.
Dba_exp_objects : 점진적으로 export 되고있는 object에 대한 정보.
Dba_exp_version : 가장최근에 export된 session에 대한 version 정보.

Dba_extents      : 데이터베이스내의 모든 세그먼트를 이루는 extents에 대한 정보.
Dba_free_space  : 모든 테이블스페이스내의 free extents의 정보.
Dba_free_space_coalesced : 테이블스페이스내의 합쳐진 공간에 대한 통계정보.

Dba_indexes   : 데이터베이스내의 모든 index. 통계정보를 얻기위해 Analyze를 사용.
Dba_ind_columns : 모든테이블과 클러스터에서 인덱스를 구성하는 칼럼에 대한정보.
Dba_ind_partitions : 각각의 index파티션에 대해서, 파티션정보, 파티션에대한
            storage 매개변수, Analyze에 결정된 파티션통계자료.
Dba_jobs   :  데이터베이스에 있는 모든 Jobs.
Dba_jobs_running  : 데이터베이스내에 현재 실행중인 모든 Jobs.
Dba_libraries       : 데이터베이스내의 모든 libraries.
Dba_lobs           : 모든 테이블에 포함된 LOBs.
Dba_locks          : 데이터베이스내에 생성된 모든 lock, latch과 lock,latch가
                      현저하게 요구되는 사항에 대한 정보.
Dba_method_params  : 데이터베이스내에 type에 대한 method 매개변수.
Dba_method_results  : 데이터베이스내에 type에 대한 method results.
Dba_nested_tables    : 모든테이블내에 포함된 nested table에 대한 정보.
Dba_object_size      : PL/SQL object에 대한 size, bytes.
Dba_object_tables : 데이터베이스내에 모든 object tables.
Dba_objects       : 데이터베이스내에 모든 objects.(index partition, table partition,
            package,package_body,trigger)
Dba_obj_audit_opts     : 모든 table, view에 대한 감사 option.
Dba_part_col_statistics  : 모든 table 파티션에 대한 칼럼통계와 그래프정보.
Dba_part_histograms    : 모든 table 파티션의 histogram에 대한 데이터(endpoint).
Dba_part_indexes       : 모든 partition index에 대한 정보.
Dba_part_key_columns : 모든 partition된 object에 대한 분할키칼럼정보.
Dba_part_tables        : 모든 partition된 table에 대한 정보.
Dba_priv_audit_opts   : 시스템과 user에 의해 감사를 받고있는 시스템 privileges.
Dba_profiles           : 모든 profiles과 해당 profile의 limit을 나타냄.
Dba_queue_schedules  : 메시지를 전달하는 schedule.
Dba_queue_tables      : 데이터베이스내에 생성된 모든 queue테이블의
                          queue type의 name과 type. 
Dba_Queus             : 데이터베이스내의 모든 queue에 대한 동작특성.
Dba_rchild              : refresh group 안의 모든 children object.
Dba_refresh             : 모든 refresh  group 에 대한 정보.
Dba_refresh_children    : refresh group 안의 모든 object에 대한 정보.
Dba_refs   :  데이터베이스내의 모든 테이블의 REF칼럼과, REF 속성을 가진 칼럼.
Dba_refistered_snapshot_groups : 모든 snapshot 사본 그룹.


Dba_registered_snapshots   : 지역테이블의 원격snapshot 에 대한 정보.
Dba_rgroup                 : 모든 refresh group.
Dba_roles                   : 모든 데이터베이스내에 존재하는 roles.
Dba_role_privs              : user와 role에 부여된 role에 대한 정보.
Dba_rollback_segs           : rollback segments 에 대한 정보.
Dba_segments   : 모든 데이터베이스 segment에 대한 할당된 storage에 대한 정보.
Dba_sequences  : 모든 데이터베이스내의 sequences 에 대한 정보.
Dba_snapshot_logs          : 모든 데이터베이스내의 snapshot_logs.
Dba_snapshot_refresh_times : snapshot refresh 한 시간.
Dba_snapshots               : 모든 데이터베이스내의 snapshots.
Dba_source                  : 모든 데이터베이스내의 저장object 의 source를포함.
Dba_stmt_audit_opts         : system, user에 의한 현재의 감사option에 대한 정보.
Dba_synonyms               : 데이터베이스내의 모든 synonyms
Dba_sys_privs         : user에게 부여된 system privilege와 role.
Dba_tab_col_statistics : Dba_tab_columns view에 있는정보에 대한 칼럼통계와
                         그래프정보
Dba_tab_columns    : 모든 table, view, cluster에 대한 칼럼정보. Analyze명령어사용.
Dba_tab_comments  : 데이터베이스내의 모든 table, view에 대한 주석.
Dba_tab_histograms  : 모든 table의 칼럼에 대한 histogram.
Dba_tab_partitions    : 각각의 table partition에 대해서, partition level의 partition정보와,
          partition의 storage매개변수 ,Analyze 에의해 결정된 여러 partition통계정보.
Dba_tab_privs   : 모든 데이터베이스내의 object에 부여된 권한.
Dba_tables      : 모든 데이터베이스내의 관계형테이블에 관한정보.Analyze로
                   통계정보를  얻을수 있다.
Dba_tablespaces : 모든 테이블스페이스에 관한정보.
Dba_triggers     : 모든 데이터베이스내의 trigger 정보.
Dba_trigger_cols : 모든 trigger에서 사용된 칼럼정보.
Dba_ts_quotas   : 모든 user에게 할당된 tablespace.
Dba_type_attrs   : 데이터베이스내의 type에 대한 속성.
Dba_type_methods : 데이터베이스내의 모든 type에 대한 methods.
Dba_types          : 데이터베이스내의 모든 추상적데이터type.
Dba_updatable_columns : join view에서 데이터베이스관리자가
                           update할수있는칼럼정보.
Dba_users  : 데이터베이스내의 모든 user정보.
Dba_views  : 모든 데이터베이스내의 view의 text.
Dbms_alert_info      : 등록된 alert정보.
Dbms_lock_allocated : 사용자에게 할당된 lock정보.
Deptree     :  utldtree.sql 에의해 생성되며, object의 dependency tree정보를 포함함.
          'Sys' user인 경우. 이 object에 관련된 공유커서를 나타내고,
          다른 user인 경우공유커서이외의 object를 나타낸다.
          다른 user는 공유커서정보를 얻기위해, Sys.deptree를 access할수있다.

Dictionary       :   data dictionary table, view에 대한 정보.
Dict_columns    :   data dictionary table, view에 대한 칼럼.
Error_size       :    Dba_obejct_size 와 user_obejct_size view를 create 할때 사용된다.
Exceptions      :    무결성제약조건에 위배되는 정보를 포함. utlexcpt.sql 로 생성.
File_lock        :   병렬서버view. 초기화파라미터 GC_FILE_TO_LOCKS 에 명시된,
           데이터파일에 PCM lock의 mapping정보.
File_ping : 병렬서버view.각데이타파일에 할당된 block의 수.  
          GC_FILES_TO_LOCKS 최적값을 구하기 위해 현존하는 데이터파일의
          access방법을 결정하는데 이 정보를사용할 수 있다.
FILEXT$  :  DBA_DATA_FILES 와 동일. (DBA_DATA_FILES의 사용을 추천)
GLOBAL_NAME : 현제 데이터베이스의 유일한 이름.
HS_ALL_CAPS   : 모든 비 Oracle Data store (FDS) 와 관련된 특성에 관한정보.
HS_ALL_DD     : 모든 비 Oracle Data store(FDS)에 대한 Data dictionary.
HS_ALL_INITS   : 비 Oracle Data store(FDS)에 대한 초기화 매개변수.
HS_BASE_CAPS  : 비 Oracle Data store(FDS)에 대한 기본특성에 관한정보.
HS_BASE_DD    : 비 Oracle Data store(FDS)에 대한 Data dictionary.
HS_CLASS_CAPS : 비 Oracle Data store(FDS)에 포함된 class-specific 특성정보.
HS_CLASS_DD   : 비 Oracle Data store(FDS) class_specific data dictionary.
HS_CLASS_INIT  :  비 Oracle Data store(FDS) class-specific 초기화 매개변수.
HS_EXTERNAL_OBJECT_PRIVILEGES : user에게 부여된 object권한.
HS_EXTERNAL_OBJECTS : oracle server에서 access가능한 external obejct.
HS_EXTERNAL_USER_PRIVILEGES : 어느 특정object에 국한되지않은 모든
                                           부여된권한
HS_FDS_CLASS  : 비 oracle (FDS) class 에 관한 정보.
HS_FDS_INST    : 비 oracle (FDS) instance에 관한정보.
HS_INST_CAPS   : instance-specific 특성정보.
HS_INST_DD     : 비 oracle (FDS) instance-specific data dictionary 변경정보.
HS_INST_INIT    : 비 oracle (FDS) instance-specific 초기화 매개변수정보.
IDEPTREE  : UTLDTREE.sql 로 생성하고, 관련tree를 나타냄.
               Deptree의 자동정렬버젼.
INDEX_HISTOGRAM  :  Analyze index...validate structure 명령에 대한정보.
INDEX_STATS          : 마지막 Analyze index..validate structure 명령에 대한정보.
NLS_DATABASE_PARAMETERS : 데이터베이스의 NLS 매개변수.
NLS_INSTANCE_PARAMETERS  : instance의 NLS 매개변수.
NLS_SESSION_PARAMETERS     : user session의 NLS 매개변수.

OBJ   :  user_objects 의 synonym.
PARSED_PIECES  :  Dba_object_size, User_object_size view를 생성시에 필요.
PARSED_SIZE     :  Dba_obejct_size, User_object_size view를 생성시에 필요.
Plan_table   :   explain plan의 결과에 대한 table. utlxplan.sql로 생성.
Product_component_version  :  Oracle 제품군의 버전과 상태설명.


Pstubtbl   :   Pstub utility에 의해 생성된 stub에 관한정보.
Publicsyn   :   public synonym 에 관한 정보.
Public_dependency   :   object와 관련된 dependencies.(parent object)
Resource_cost   :  각각의 resource에 대한 cost.
Resource_map   :  각각의 resource에 대한 정보.(resource name, resource number)
Role_role_privs  :  다른 role에 부여된 role정보.(user가 access가능한 role에 한해)
Role_sys_privs  : 다른 role에 부여된 system role정보(user가 access가능한role에 한해)
Role_tab_privs  : 다른 role에 부여된 table privileges정보.
                    (user가 access가능한role에 한해)

SEQ             :  user_sequences 의 synonym.
Session_privs    : 현재 user에게 사용가능한 권한.
Session_roles    : 현재 user에게 사용가능한 roles.
Source_size     :  Dba_object_size, User_object_size view를 생성시 필요.
Stmt_audit_option_map   : 감사 option type code정보.
Syn             : user_synonyms 에 대한 synonym.
Synonyms      : Oracle ver 5.와 호환성을 포함. not recommend
Syscatalog      : Oracle ver 5.와 호환성을 포함. not recommend
Sysfiles         :  Oracle ver 5.와 호환성을 포함. not recommend
Syssegobj       : Oracle ver 5.와 호환성을 포함. not recommend
System_privilege_map  :  system privilege code에 대한 정보.
Sys_objects   : object ID와 object type 그리고 segment data block주소를 매핑하는정보.
Tab             : Oracle ver 5.와 호환성을 포함. not recommend
Table_privileges : user가 부여한, 부여받은, 소유한, 그리고 PUBLIC으로
         부여된 object 권한정보. Oracle ver 6.과 호환성을 포함.    not recommend.
Table_privilege_map  :  access 가능한 권한code/권한명칭 정보.
Tabs                   :  User_tables 의 synonym.
Tabquotas              : Oracle ver 5.와 호환성을 포함. not recommend
Trusted_servers       : 분산환경에서 서버가 신뢰할만한지를 나타냄.
Tp_pitr_check        : catpitr.sql 에 의해 생성. 테이블스페이스의 point-in-time복구를
           방해할지도 모르는 dependencies혹은 restriction에 관한 정보제공.
Ts_pitr_objects_to_be_dropped  : 테이블스페이스의 point-in-time복구수행의 결과
           손실된 object에 대한 정보. (point-in-time recovery의 경우만 해당).
User_all_tables        : user가 사용가능한 테이블(object table, relational table)정보.
User_arguments       : user가 access가능한 object의 매개변수정보.
User_Audit_object    : cataudit.sql로 생성. object에 관련된 감사추적기록.
User_Audit_session   : cataudit.sql로 생성. user의 연결/종료에 관련된 감사추적기록.
User_Audit_statement : cataudit.sql로 생성. user에 의해 실행된 GRANT,REVOKE,
                AUDIT, NOAUDIT, ALTER SYSTEM 명령에 대한 감사추적기록.


User_Audit_trail      : user와 관련된 전반적인 사항의 감사추적기록.
User_catalog          : user 소유의 table, views, synonyms, sequences 의 이름과 type.
User_clusters          : user소유의 cluster.
User_clu_columns     : user table 의 칼럼과 cluster칼럼과의 매핑테이블.
User_col_comments   : user 의 table, view의 칼럼에 대한 주석.
User_col_privs        : user 가 소유한, 부여한, 부여받은 칼럼에 대한 권한.
User_col_privs_made : user 소유 object의 칼럼에 대한 권한.
User_col_privs_recd  : user가 부여받은 칼럼에 대한 권한.
User_coll_types       : user가 명명한 collection type정보.
User_constraints      : user소유 테이블의 제약조건정의.
User_cons_columns  : user소유 제약조건에 정의된 칼럼에 대한정보.
User_db_links        : user소유 데이터베이스링크에 대한정보.
User_dependencies   : user소유 object에 대한 dependencies.
User_errors           : user소유 저장 object에 대한 현재의 에러.
User_extents          : user소유 object에 속하는 세그먼트의 extent 정보.
User_free_space      : user가 access가능한 테이블스페이스내의 free extent 정보.
User_indexes     : user 소유의 indexes. Analyze명령을 사용해야함. 병렬서버를 지원.
User_ind_columns   : user소유 index 또는 user소유 table 의 칼럼정보.
User_ind_partitions  : user소유의 index partition각각에 대한설명과, partition정보,
         partition의 storage 매개변수, Analyze명령으로 결정된 여러partition통계
User_jobs           : user소유의 모든 job.(export/import, execution)
User_libraries       : user소유의 모든 libraries .
User_lobs           : user소유의 table에포함된 LOBs정보.
         internal LOBs( BLOBs, NCLOBs) 만해당, external LOBs(i.e, BFILES)은 아님.
User_method_params  : user type의 method 매개변수.
User_method_results   : user type의 method 의 results.
User_nested_tables     : user소유 테이블에 포함된 nested tables.
User_object_tables      : user가 사용가능한 object table.
User_objects            : user소유의 object.(index partition, table partition, package,
                           packagebody, trigger)
User_object_size         : user소유의 PL/SQL object.
User_obj_audit_opts      : cataudit.sql로 생성. user소유의 table,view에 대한 감사option
User_part_col_statistics : user소유의 tablepartition정보에 대한 칼럼통계와 그래프정보.
User_part_histograms  : user가 access할수있는 table partition의 histogram에 대한
                          그래프데이터(end-pointer).
User_part_key_columns : user소유의 partition object의 partition key칼럼에 대한정보.
User_part_indexes       : 모든 user소유의 partition index의 partition정보.
User_part_tables         : user소유의 partition table에 대한 object 레벨의 partition정보.


User_password_limits   : user에게 적용된 password profile parameter.
User_queue_tables      : user소유 스키마에 생성된 queue table내부의 queues정보.
User_Queues            : user스키마의 모든 queue에 대한 동작 특성을 나타냄.
User_refresh             : 모든 refresh group.
User_refresh_children    : user가 소유한 refresh group 내부의 object에 관한정보.
User_refs                 : user소유테이블의 object type칼럼중 REF칼럼, REF속성.
User_resource_limits     : 현재 user의 resource 한계.
User_role_privs          : user에게 부여된 roles.
User_segments  : user오브젝트에 포함된 데이터베이스 segments의 storage할당정보.
User_sequences  : user 소유의 sequences.
User_snapshots   : user 가 볼수있는 snapshots.
User_snapshot_logs : user 소유의 모든 snapshot logs.
User_source         : user소유 저장 objects 의 모든 text source.
User_snapshot_refresh_times    : snapshot refresh time.
User_synonyms                 : user소유의 synonym.
User_sys_privs                  : user에게 부여된 system 권한.
User_tab_col_statistics        : user_tab_columns view에 대한 칼럼통계와
                               그래프정보를  나타냄.
User_tab_columns   : user소유의 table, view, cluster의 칼럼정보.(Analyze명령사용)
User_tab_comments  : user소유의 table, view에 대한 주석.
User_tab_histograms  : user소유 table의 칼럼에 대한 histogram.
User_tab_partitions   : user소유 table partition에 대한, partition 레벨의 분할정보와,
           partition의 storage매개변수, Analyze에 의해 집계된 여러통계정보.
User_tab_privs       : user가 소유한, 부여한, 부여받은 object에 대한 권한 정보.
User_tab_privs_made : user가 소유한 object에 관한 모든 권한.
User_tab_privs_recd  : user가 부여받은 object 권한정보.
User_tables           : user소유의 relational table에 대한 정보. (Analyze명령사용)
User_tablespaces     : user가 access 가능한 tablespaces에 대한 설명.
User_triggers         : user가 소유한 triggers 정보.
User_trigger_cols    : user가 소유한 또는 user테이블에 있는 trigger안의 column 정보.
User_ts_quotas       : user에게 할당된 tablespace quotas 정보.
User_types           : 테이블안의 user소유의 type.
User_type_attrs      : user type의 속성을 나타냄.
User_type_methods  : user type의 methods를 나타냄.
User_updatable_columns : join view에서 사용자에게 update가 허용된 칼럼정보.
User_users           : 현재 user에 관한 정보.
User_views          : user 소유의 view에 대한 text.




FILEXT$     : 데이터파일의 AUTOEXTEND를 ON으로 변경했을 때 처음 생성.
V$ACCESS  : 현재 데이터베이스내의 lock이걸린 object와  그 object를
                 access 하려는 session id.
V$ACTIVE_INSTANCES : 현재 데이터베이스내의 Mount된
                 모든 인스턴스에대하여 인스턴스 이름과, 번호를 매치.
V$AQ        : 데이터베이스내의 모든 Queue에 대한 통계.
V$ARCHIVE : Archive에 필요한 redo log file에 대한 정보.
       각각의 행은 하나의 thread에 대한 정보이다. V$LOG도 동일한정보.
V$ARCHIVE_DEST : 현재의 instance에서, 모든 archive log destination, 
                 현재값, mode, status.
V$ARCHIVED_LOG : archive log 이름을 포함하는 controlfile에 대한 archive log 정보,
       archive log 기록은 online중 redo log가 성공적으로 저장되었거나,
       clear(log가 clear되면, name칼럼은 null이 된다)된후 insert된다.
V$BACKUP  : 모든 online 데이터파일의 backup 상태를 나타낸다.
V$BACKUP_CORRUPTION : 데이터파일의 backup 중 에러정보를 나타낸다.
       에러들은 control 파일과 achived log backup 에 포함되지 않는다.
V$BACK_DATAFILE : control 파일에서 datafile과 controlfile 의 backup정보를 보여줌.
V$BACK_DEVICE   : 지원되는 backup 디바이스정보.
V$BACK_PIECE     : controlfile에서 backup piece에 대한 정보를 포함.
       각각의 backup set 은 하나 또는 그이상의 backup piece로 구성된다.
V$BACKUP_REDOLOG : controlfile에서 backup set의 저장된 log에 대한 정보.
        Online redo logs는 곧바로 backup 되지 않는다: 먼저 disk에 저장된후 backup
        된다. 저장된 log backup set 은 하나 또는 그이상의 logs들로 구성된다.
V$BACKUP_SET     : controlfile에서 backupset 정보를 보여줌.
       backup set 행은 backup set이 성공적으로 완료되었을 때 insert된다.
V$BGPROCESS       : 백그라운드 프로세스 정보.
V$BH                  : 병렬서버 view이다.
                          SGA내의 모든 버퍼에 대한 ping의 상태와 수를 나타낸다.
V$BUFFER_POOL    : 인스턴스내에서 사용가능한 모든 버퍼풀에 대한정보.
V$CACHE  : 병렬서버 view이다.
               특정데이타베이스object에 관련된 현재의 인스턴스의
               SGA내부의 각각의 block에 대한 block header에 대한 정보.
V$CACHE_LOCK : 병렬서버view. platform-specific lock manager 식별자를 제외하면,
              V$CACHE와 유사하다.
V$CIRCUIT  : 가상 circuit에 관한 정보이며, 가상circuit란 dispatcher와 server를
               통한 데이터베이스와의 user 연결을 말한다.
V$CLASS_PING : 각각blockclass마다 ping된 블록의 수를나타낸다.
               다른class블록의 충돌을 비교하기위해 사용.
V$COMPATIBILITY : 이전버전으로 downgrade를 방지하기위해
         데이터베이스인스턴스에 의해 사용된특성들을 설명.
         다른 인스턴스가 갖고있는 특성에 영향을 미치지 않으며,
         데이터베이스가 완전히 정지한이후에도 존재하지 않는 일시적인
         비호환성들을 포함할수도 있다.
V$COMPATSEG   : 이전버전으로 되돌아가는 것을 막기위한 데이터베이스에서
                      사용되는 영구적인 특성들.
V$CONTROLFILE  : 컨트롤파일의 이름과 상태.
V$CONTROLFILE_RECORD_SECTION  : 컨트롤파일의 record에 대한 정보.
V$COPY_CORRUPTION  : 컨트롤파일로부터 데이터파일의 복사불량에 대한 정보.
V$CURRENT_BUCKET   : 캐쉬내의 버퍼의 수가 감소할때 발생할 수 있는
                        캐쉬손실의 경우수를 예상하는데 유용.
V$DATABASE         :    control file 로부터 데이터베이스정보를 포함.
V$DATAFILE    : 컨트롤파일로부터데이타파일에대한 정보를 포함.
V$DATAFILE_COPY    :컨트롤파일로부터 데이터파일의 복사에 대한 정보를포함.
V$DATAFILE_HEADER : 데이터파일헤더에 대한 정보.

V$DBFILE : 데이터베이스를 구성하는 모든 데이터파일.
              대신에 V$DATAFILE 추천한다.
V$DBLINK : 세션에 의해 open된 데이터베이스링크에 대한 설명.
         이 데이터베이스링크들은 닫히기전에 commit되거나 rollback되어야만 한다.

V$DB_OBJECT_CACHE : library cache에 cach된 데이터베이스오브젝트를 나타냄.
V$DB_PIPES             : 데이터베이스내에 현재 운영중인 pipe에 대한 설명.
V$DELETED_OBJECT  : 삭제된 archived 로그, 데이터파일 copy,
         컨트롤파일에서 백업piece 에 대한 정보. 이뷰의 목적은 복구목록의
         재동조작업을 최적화하는 것이다. archived 로그나, 데이터파일 copy,
         백업piece 등이 삭제될때는 해당하는 행이삭제되었음이 표시된다.
V$DISPATCHER         : dispatcher 프로세스에 관한 정보.
V$DISPATCHER_RATE  : dispatcher 프로세서에 관련된 확률통계.
V$DLM_CONVERT_LOCAL   : lock 변환작업에 대한 경과시간.
V$DLM_CONVERT_REMOTE  : 원격 lock변환작업에 대한 경과시간.
V$DLM_LATCH              : DLM 잠금에 대한 통계.
          각각의 잠금에 대한 통계보다는, 각 타입에 대한 총계를 포함.
          개념적으로 IMM_GETS/TTL_GETS 값은 1에 가깝게 된다.
V$DLM_LOCKS : 병렬서버 view이다. 블록화되었거나, 다른 것을
            블록화하고있는 lock manager에 알려진 모든  lock에 대한 정보.
V$DML_MISC         : 잡다한 DLM 통계에 대한 정보.
V$ENABLEDPRIVS:사용가능한 권한에 대한정보, 이들권한은
             SYS.SYSTEM_PRIVILEGES_MAP테이블에 존재해야만 한다.
V$ENQUEUE_LOCK : 큐에 대기상태인 오브젝트에의해 소유된 모든 lock이
          view의 칼럼은 V$LOCK의 칼럼과 동일하다.
          자세한 것은 V$LOCK을 참고.
V$EVENT_NAME :  wait event 에 대한 정보.
V$EXECUTION   :  병렬 질의 실행에 대한 정보.
V$EXECUTION_LOCATION : 병렬 질의 실행 트리의 위치에 대한 자세한 정보.
V$FALSE_PING   : 병렬서버view. ping에 실패지도 모르는 버퍼에 대한 정보.
                      즉, 10회이상ping된 다른 버퍼와
       동일한 lock으로 잠겨있는 버퍼를 말한다.
       ping이 실패로 판명된 버퍼는 lock충돌을 감소시키기위해
       1-44페이지의 "GC_FILES_TO_LOCK"에 다시 매핑된다.
V$FILE_PING  : 데이터파일마다 ping된 블록수를 보여줌. 이정보는 현존하는
        데이터파일에 대한 access패턴을 결정하는데 and,
        데이터파일블록을 PCM lock에 새로 매핑하는것을 결정하는데 사용된다.
V$FILESTAT    : 파일 read/write 통계.
V$FIXED_TABLE : 데이터베이스내의 모든 동적실행테이블, views, 유도테이블.
       실제테이블을 참조하는 약간의 V$테이블은 리스트에 없다.
V$FIXED_VIEW_DEFINITION : (V$로 시작하는)고정view에 대한 설명.
       유의해서 사용해야한다.
V$GLOBAL_TRANSACTION    : 현재 활동중인 트랜잭션에 대한 설명.
V$INDEXED_FIXED_COLUMN : index된 동적실행테이블(X$ table)의 칼럼에
      대한 설명.  X$ table은 경고없이 변경할수있다.
      이view는 보다 효과적으로 고정뷰(V$view)에 대한
V$INSTANCE : 현재의 인스턴스의 상태를 나타냄.
        V$INSTANCE의 버전은 V$INSTANCE의 초기버전과 호환성이 없다.
V$LATCH     : 하위 잠금에 대한 통계와 상위 잠금에 대한 요약통계.
       즉, 상위잠금에 대한 통계는 그 하위잠금에 대한 각각의 통계를 포함한다.
V$LATCHHOLDER : 현재잠금에 대한 정보.
V$LATCHNAME   :  V$LATCH 에 있는 잠금에 대한 디코드된 잠금이름에 대한
       정보. V$LATCHNAME의 행들은 V$LATCH의 행들과 1:1로 대응된다.

V$LATCH_CHILDREN : 하위잠금에 대한 통계를 포함. 
       V$LATCH의 칼럼에 child#  칼럼이추가되었다.  LATCH#칼럼이 서로
       동일하다면, 하위잠금이 동일한 상위잠금을 갖는 것이다.
V$LATCH_MISSES  : 잠금을 획득하는데 실패한 시도에 대한 통계.
V$LATCH_PARENT : 상위잠금에 대한 통계.
                        V$LATCH_PARENT 칼럼은 V$LATCH칼럼과 동일하다.
V$LIBRARYCACHE : library cache의 실행과 활동통계.       
V$LICENSE          : license 한계에 대한 정보.
V$LOADCSTAT      : 직접적재하는동안 컴파일된 SQL*loader 통계정보.
       이테이블에대한 어떤 Select 문도 "no rows returned" 결과가 나오는데,
       왜냐면, 동일한 시간에 데이터를 적재하면서, 쿼리를 날릴수 없기 때문이다.

V$LOCK       : 현재 Oracle 서버에 의해 확립된 잠금에 대한 정보나 lock또는
                   latch에 대한 두드러진요청
V$LOCK_ACTIVITY : 병렬서버view이다. V$LOCK_ACTIVITY는 현재의
             인스턴스의 DLM잠금동작을 나타낸다.
             각각의 행은 잠금동작의 타입과 일치된다.
V$LOCK_ELEMENT : 병렬서버view이다. 버퍼캐쉬에 의해사용된 각각의
       PCM잠금에 대해 v$LOCK_ELEMENT 에 한행이다.
       잠금요소에 대응되는 PCM잠금의 이름은 'BL',indx,class등이다.
V$LOCKED_OBJECT : 시스템안의 모든 트랜잭션에 걸린 잠금을 나타낸다.
V$LOCKED_WITH_COLLISIONS : 병렬서버view이다.
       여러버퍼를 보호하는 lock을 찾는데 사용되며, 그 버퍼들은 최소한
       10회이상 각각 강제로 쓰여지거나, 강제로 읽혀진 버퍼들이다.
V$LOG       : 컨트롤파일로부터 log 파일정보를 포함한다.
V$LOGFILE  :  redo log 파일정보. redo log 그룹과 멤버 파일명.
V$LOGHIST  : 컨트롤파일로부터 log history정보를 포함. 지속적인 호환성을
                 포함하고 있다. 대신에 V$LOG_HISTORY의 사용을 권장한다.
V$LOG_HISTORY      : 컨트롤파일로부터 log history 정보를 포함한다.
V$MLS_PARAMETERS : Oracle Server의 확정된 초기화파라미터를 나타냄.
V$MTS                  : multi-threaded server의 성능향상을위한 정보를 포함.
V$MYSTAT             : 현재 세션에 대한 통계값포함.
V$NLS_PARAMETERS   : 현재의 NLS 매개변수의 값들을 포함.
V$NLS_VALID_VALUES  : 유효한 NLS 매개변수값.
V$OBJECT_DEPENDENCY : 현재 공유풀에 적재되어있는 package, procedure,
       cursor등에 관련되어있는 object를 결정하는데 사용된다.
       예를들면, V$SESSION, V$SQL등과 조인하면, 현재 어떤 user가
       실행중인 SQL문에서 어떤 테이블이 사용되었는지를 알아낼수가 있다.
V$OFFLINE_RANGE : 컨트롤파일로부터 offline된 datafile을 보여준다.
       DATAFILE행에 저장되어있는 각각의 데이터파일의 최종offline 간격을
       보여줌. offline 간격은 테이블스페이스가 처음 offline normal,
       또는 Read Only로 변경되고난이후 다시 online 또는 read-write로
       변경된다음에 확정된다.
       데이터파일이 스스로 Offline로 변경되거나 테이블스페이스가
        OFFLINE IMMEDIATE로 변경되면, offline간격은 확정되지 않는다.

V$OPEN_CURSOR : 각각 user 세션이 열렸있거나, 정지되어있는 cursor를 보여준다.
V$OPTION        : Oracle Server와 같이 설치된 선택사항들.
V$PARAMETER  : 초기화 파라미터에 대한 설명이다.
V$PING     : 병렬서버view이다.
      최소한 1번이상 ping된 블록만을 보여준다는 것을 제외하고 V$CACHE view와
      동일하다.특정 데이터베이스 object와 관련된 현재의 인스턴스내의 SGA에
      있는 각각의 블록에대한 block header정보를 포함하고 있다.
V$PQ_SESSTAT  : 병렬쿼리에 대한 session 통계를 포함.
V$PQ_SLAVE    : 인스턴스내에 실행중인 parallel 쿼리서버에 대한 통계.
V$PQ_SYSSTAT  : 병렬쿼리에 대한 시스템통계.


V$PQ_TQSTAT  : 병렬쿼리 동작의 통계를 포함. 통계는 질의가 완료된후에
           컴파일되며 세션이 살아있는동안  계속 남아있는다.
V$PROCESS    : 현재 작업중인 프로세스에 대한 정보.
       LATCHWAIT 칼럼은 프로세스잠금이 무엇을 기다려야하는가를 나타내며,
       LATCHSPIN 칼럼은 프로세스잠금이 동작되는 것을 나타낸다.
       멀티프로세서의 경우 Oracle 프로세스는 잠금을 기다리기전에 실시한다.
V$PWFILE_USERS  :  password 파일로부터 유도해낸
                   SYSDBA, SYSOPER 권한을 부여받은 user.
V$QUEUE  :  멀티쓰레드 메시지큐에 대한 정보.
V$RECENT_BUCKET  :  대용량 캐쉬실행을 평가하기에 유용한 정보.
V$RECOVER_FILE     :  media 복구에필요한 파일의 상태를 나타냄.
V$RECOVERY_FILE_STATUS : 각각의 RECOVER명령에 대한 각 데이터파일에
     대한 정보를 한행씩 포함.
      Oracle프로세스가 복구를 수행하는데 유용한 정보임.
      recover manager는 서버프로세스에 직접 복구를수행하도록 했을 때,
      recovery manager가 이 view에서 관련된정보를 참고할 수 있다.
      다른user들에게는 유용하지 않다.
V$RECOVERY_LOG : 완벽한 media복구에 필요한 archived logs에 관한 정보.
      이정보는 log history view인 V$LOG_HISTORY에서 유도된 것이다.
V$RECOVERY_PROGRESS : 데이터베이스복구작업이 중간에 멈추지않도록하는데
     사용되며, 복구작업을 완료하는데 요구되는 시간을 측정하는데 사용된다.
V$RECOVERY_STATUS : 현재의 복구진행상태를 나타낸다. 단지 복구를 수행하는
      Process 에대한 정보만이유용하다. 복구관리자가 서버프로세스에게 복구를
      수행하라고 지시할때에, 복구관리자는 이view에서
      관련정보를 참조할 수 있다. 다른 user에게는 불필요하다.
V$REQDIST  :  MTS dispatcher의 응답시간에 대한 그래프통계를 나타내며,
             time range는 버킷 number의 지수함수로 증가한다.
V$RESOURCE  : 자원(resource)의 이름과 주소정보를 포함.
V$RESOURCE_LIMIT : System 자원의 부분적인 사용에 대한 정보. 자원의
         소비를 모니터링함으로서 낭비를 방지하는데 사용된다.

V$ROLLNAME : 모든 online중인 rollback segments의 이름.
                   데이터베이스가 open시에만 조회가능.
V$ROLLSTAT   : 롤백세그먼트통계정보.
V$ROWCACHE : 자료사전활동에 대한 통계.
                   각각의 행은 하나의 자료사전cache 통계를 포함.
V$SESSION     : 현재 open된 세션에 대한 정보.
V$SESSION_CONNECT_INFO  : 현재의 세션에 대한 network 연결에 대한 정보.
V$SESSION_CURSOR_CACHE  : 현재의 세션에 대한 cursor 사용에 대한 정보.
      SESSION_CACHED_CURSORS 초기화파라미터에 대한 효율을 측정하지는
      않는다.
V$SESSION_EVENT    : 세션의 event 대기에 관한정보.
V$SESSION_LONGOPS : 장시간실행되는 작업에 대한 상태. SOFAR,
      TOTALWORK칼럼은 진행상태를 제공한다. 예를들어 
      다음요소(hach cluster creations, backup, recovery) 에 대한
      작동상태를 모니터링할 수 있다.
V$SESSION_OBJECT_CACHE : 로칼서버의 현재사용중인
                                    user세션의 object, cache통계정보.
V$SESSION_WAIT  : 활동중인 세션이 대기하고있는 자원또는 이벤트이다.
V$SESSTAT         : user세션 통계이다. 통계number(statistic#)에 해당하는
      통계name을 찾으려면, V$STATNAME를 참고하면 된다.
V$SESS_IO         : 각각의 user세션에 대한 I/O 통계이다.
V$SGA             : System Global Area 에대한 간략한 정보.(name, size)
V$SGASTAT       : System Global Area에 대한 자세한 정보.(name, bytes, pool)

V$SHARED_POOL_RESERVED : Shared Pool내에 예약풀과 공간을
                       바꾸고자할 때 도움이 되는통계.
V$SHARED_SERVER  :  Shared Server processes 에 대한 정보를 포함.
V$SORT_SEGMENT   : 주어진 인스턴스내의 각 sort세그먼트에 대한 정보.
       테이블스페이스가 Temporary 타입일때만 update된다.

V$SORT_USAGE  :  sort 사용에 대해 기술한다.
V$SQL  :  Group by절이없는 공유sql영역에대한 통계이며 입력된
             원래 sql문장의 각 child의 row를 포함.
V$SQL_BIND_DATA : 데이터가 이 서버에서 추출가능하다면 이 view를
        조회하는 세션에 소유된 각 커서안에 있는 각각의 원격bind변수에 대한
        클라이언트에 의해 보내진 데이터.
V$SQL_BIND_METADATA : 이view를 조회하는 세션에 소유된 각커서안에 있는
       각각의 원격bind변수에 대해 클라이언트에의해 제공되는 bind metadata.

V$SQL_CURSOR : 이 view를 조회하는 세션과 관련된 각 cursor에 대한 디버깅정보.
V$SQL_SHARED_MEMORY : 메모리 스냅샷에 공유된 커서에 대한 정보.
       공유풀에 저장된 각SQL문은 관련된 하나또는 그이상의 하위object를
       가지고 있다.
V$SQLAREA : 공유SQL영역에 대한 통계를 가지고있으며, Sql 문자열마다
       한행을 포함한다. 메모리내에 존재하는, parse된, 실행을 대기하고있는
       SQL문장에 대한 통계를 제공한다.
V$SQLTEXT : SGA내부의 공유SQL 커서에 속해있는 SQL문장을 포함.
V$SQLTEXT_WITH_NEWLINES : 가독성이 증가되고, 공백을 포함한 SQL문장안에
       newline과 tabs을 대체하지 않는다는 것을 제외하고는 V$SQLTEXT view와
       동일하다.
V$STATNAME : V$SESSTAT와 V$SYSSTAT테이블에서 나타난 statistics에 대한 이름.
V$SUBCACHE : 현재 라이브러리 캐쉬메모리에 적재된 하위 캐쉬에 대한 정보.
      모든 라이브러리캐쉬에 대해 언급하고있으며, 각 라이브러리 캐쉬object마다
      각 적재된 하위 캐쉬에 대해 한행을 나타낸다.
V$SYSSTAT : 시스템 통계이다. 각 statistic number(statistic#)와 관련된 statistic의
      이름을 찾기위해서는,  "V$STATNAME"를 보시오.
V$SYSTEM_CURSOR_CACHE : 시스템  전반적인정보라는 것을 제외하고,
            V$SESSION_CURSOR_CACHE와 유사한 정보를 나타낸다.
V$SYSTEM_EVENT : 이벤트에 대한 총 wait정보. TIME_WAITED,
       AVERAGE_WAIT칼럼은 급속메커니즘을 지원하지 않는 플랫폼에서
       0값을 포함할 것이다. 이런 플랫폼에서 DB를 운영중이고,
       이칼럼이 wait time을 줄여주기를 원한다면, 파라미터파일의
       TIMED_STATISTICS를 TRUE로 세팅하면된다.
       단지 이렇게 하면, 시스템 성능에 약간의 마이너스효과를 가져올 것이다.
V$SYSTEM_PARAMETER  :  System parameter에 대한 정보.
V$TABLESPACE            : 컨트롤파일로부터 테이블스페이스 정보를 나타내준다.
V$THREAD                : 컨트롤파일로부터 thread 정보를 가져온다.
V$TIMER     :    1/100 초로 나타낸 경과시간. 시간은 epoch가 시작된이후부터
       측정되며, epoch는 OS의 특성이며, 값이 4bytes(약 497일)를 넘을때마다
       0근처의 값이 된다.
V$TRANSACTION  :  시스템내의 활동중인 트랜잭션.
V$TRANSACTION_ENQUEUE : 트랜잭션 오브젝트에 의해 소유된 lock를 나타냄.
V$TYPE_SIZE : 데이터블록용량을 측정하는데 사용되는 여러
                  데이터베이스컴포넌트들의 SiZe.
V$VERSION  :  Oracle Server의 core 라이브러리 컴포넌트의 Version수이다.
                  각 컴포넌트에 한 row가 있다.
V$WAITSTAT : 블록점유에 대한 통계. 통계가 사용가능한 시간에만 갱신된다.

 

출처 : http://www.oracleclub.com

Posted by 1010
02.Oracle/DataBase2008. 8. 6. 17:07
반응형

# vi /etc/rc.d/rc.local


su - oracle -c /oracle/9i/bin/"dbstart"

su - oracle -c /oracle/9i/bin/"lsnrctl start"


추가 해준다


# vi /etc/oratab

DB02:/oracle/9i:Y


추가


# reboot


$ lsnrctl status (리스너 확인)

SQL> select status from v$instance; (DB 확인)

Posted by 1010
02.Oracle/DataBase2008. 7. 24. 12:42
반응형
sqlplus "/as sysdba"

SQL> show user

USER is "SYS"


이제 암호를 원하는 대로 설정합니다.


SQL> alter user sys identified by 암호;

SQL> alter user system identified by 암호;


이제 접속이 잘 될 것입니다.


SQL> connect sys/암호 as sysdba

SQL> connect system/암호

Posted by 1010
02.Oracle/DataBase2008. 7. 24. 12:41
반응형

Parameter 설정을 통한 오라클 보안

오라클의 보안을 강화하기 위해 지난 호에서 알아본 "OEM(Oracle Enterprise Manager)을 이용한 오라클 계정 관리"에 이어서 이번 호에서는 파라미터 설정을 통해 오라클의 보안을 강화할 수 있는 방법에 대해 알아보겠다.

1. Data Dictionary 보호

Data Dictionary는 데이터베이스의 핵심 정보가 기록되는 곳으로 데이터 베이스의 구조, 객체에 대한 정의 및 공간 할당, 사용자, 롤(role), 권한, 감사 와 같은 정보들을 제공한다. Data Dictionary는 테이블의 형태로 제공되며 데이터베이스 엔진에서 관리하여 사용자가 직접 변경할 수 없도록 되어있다. 또한 Data Dictionary는 대부분 DBA_, ALL_, USER_ 로 시작하는 접두어를 가지고 있어 구분하기가 쉽다.
이러한 Data Dictionary는 'DROP ANY TABLE' 시스템 권한 가진 사용자가 악의적으로 Data Dictionary 테이블의 삭제가 가능하므로 오라클에서 제공하는 파라미터를 변경하여 DBA 권한으로 접속한 사용자만이 Data Dictionary의 ANY 시스템권한을 사용할 수 있도록 해야 한다.

** 파라미터 파일
오라클 데이터베이스 인스턴스의 초기화 설정에 사용되며 텍스트 형식인 PFILE과 바이너리 형태인 SPFILE이 존재한다. PFILE은 init.ora과 같은 이름으로 SPFILE은 spfile.ora 같은 이름으로 각각 생성되며 PFILE과 SPFILE파일이 모두 존재할 경우 SPFILE파일이 우선순위를 가진다. Oracle 9i 에서는 디폴트 설치 시 기본적으로 SPFILE을 이용하게 된다. OS별 파라미터 파일의 경로는 다음과 같다.


OS 경로
Windows $ora_home\database\spfile.ora
Unix/Linux $ora_home/dbs/spfile.ora

OEM(Oracle Enterprise Manager)을 이용하여 파라미터 파일을 확인하고 설정하기 위해서는 다음과 같은 방법을 이용한다.
① OEM에서 [데이터베이스] -> [세부정보보기/편집] -> [데이터베이스 편집] -> [모든 초기화 매개변수...] 창을 열어 [모든 매개변수]탭을 확인하면 다음과 같이 현재 적용된 모든 파라미터의 값을 확인할 수 있다.
Data Dictionary와 관련된 파라미터는 7_DICTIONARY_ACCESSIBILITY으로 해당 값을 FALSE로 설정하여 Data Dictionary를 보호해야 한다.

② [모든 매개변수]탭에서 [SPFILE]을 선택하여 현재 구성파일(SPFILE)에 있는 O7_DICTIONARY_ACCESSIBILITY 파라미터의 값이 TRUE로 되어 있을 경우 이를 변경하여야 한다.
Oracle 9i 및 10g에서는 O7_DICTIONARY_ACCESSIBILITY 파라미터의 값이 기본적으로 FALSE로 설정되어 있으나 Oracle8i는 TRUE로 설정되어 있으므로 반드시 변경하여야 한다.
③ O7_DICTIONARY_ACCESSIBILITY 파라미터의 값을 변경한 후 [적용]을 누르면 다음과 같이 데이터베이스를 재시작하라는 메시지가 뜬다. 이때 데이터베이스를 재시작해야만 변경된 파라미터의 값이 적용된다.

참고로 SPFILE에서 동적 매개변수를 변경할 경우 현재 실행중인 메모리에 즉시 반영이 되고 동시에 SPFILE에 저장되나 O7_DICTIONARY_ACCESSIBILITY와 같은 정적 매개변수의 값이 변경된 경우 변경된 값은 SPFILE파일에만 저장되므로 데이터베이스를 재시작하여 변경된 값을 적용해야 한다.

2. 원격 인증기능 설정

오라클에서 지원하는 원격인증 기능이 활성화되면, 원격의 클라이언트는 오라클 데이터베이스에 접속할 수 있도록 허용된다. 즉, 데이터베이스는 적절하게 인증된 (클라이언트 자체OS의 인증) 모든 클라이언트들을 신뢰한다. 그러나 PC와 같은 클라이언트의 경우 Virus, Worm, Backdoor 등이 설치되어 있을 수 있어 데이터베이스에 접속할 경우 적절한 인증여부를 보장할 수 없어 보안이 대단히 취약해진다.
이러한 원격 인증기능을 비활성화시켜 오라클 데이터베이스에 접속하는 클라이언트는 Server-Based 인증(데이터베이스 어플리케이션의 인증)을 하도록 파라미터를 변경하여 보안을 강화하여야 한다.

OEM(Oracle Enterprise Manager)을 이용하여 파라미터 파일을 확인하고 설정하기 위해서는 다음과 같은 방법을 이용한다.
① OEM에서 [데이터베이스] -> [세부정보보기/편집] -> [데이터베이스 편집] -> [모든 초기화 매개변수...] 창을 열어 [모든 매개변수]탭의 구성파일(SPFILE)을 선택한 후 파리미터 값을 확인한다.
원격 인증기능과 관련된 파라미터는 REMOTE_OS_AUTHENT으로 해당 값을 FALSE로 설정하여 OS인증이 아닌 오라클 어플리케이션의 인증을 받도록 설정한다.

Oracle 9i 및 10g 에서는 O7_DICTIONARY_ACCESSIBILITY 파라미터와 같이 REMOTE_OS_AUTHENT 파라미터의 값이 기본적으로 FALSE로 설정되어 있으나 Oracle8i는 TRUE로 설정되어 있으므로 반드시 변경하여야 한다.
② REMOTE_OS_AUTHENT 파라미터의 값을 변경한 후에는 Data Dictionary 를 위한 파라미터 변경과 마찬가지로 데이터베이스를 재시작하여 변경된 파라미터값을 적용하면 된다.

3. Listener의 설정 제한

Listener는 오라클 데이터베이스에 원격의 클라이언트가 접속할 수 있도록 실행되는 프로세스이며 클라이언트측의 요청을 받아 실제 쿼리문을 수행하는 서버프로세스를 생성하게 된다.
그러나 Listener의 패스워드는 디폴트로 설정되어 있지 않아 오라클의 service Name을 알경우 공격자에 의하여 Listener프로세스가 시작/정지 또는 재설정될 수 있다.

** Service Name

하나의 오라클 서버에 여러 DBMS프로세스(인스턴스)가 동작할 경우 이를 구별하기 위해 하나의 인스턴스를 Service Name으로 나타내게 된다. 이러한 Service Name은 sid, 서버IP, 접속 프로토콜 등의 정보로 구성이 되며 TNSNAME.ORA 파일에 의해서 정의되게 된다.


이러한 Listener에 패스워드를 설정하여 임의의 공격자가 Listener를 정지시켜 원격의 사용자가 오라클에 접속하지 못하게 하는 것을 방지하여야 한다. Listener에 패스워드는 LSNRCTL 유틸리티의 change_password 명령어를 이용하여 설정이 가능하며 설정된 패스워드는 LISTENER.ORA파일에 암호화되어 저장되게 된다.
Listener에 패스워드를 설정하기 위해서는 LSNCTL유틸리티를 사용하며 다음과 순서로 진행된다.
OS> lsnrctl LSNRCTL> set current_listener LISTENER
LSNRCTL> set save_config_on_stop on
LSNRCTL> change_password
Old password: 처음의 경우 enter
New password: ******
Reenter new password: ******

위와 같이 설정한 후 Listener에 설정된 내용을 확인하기 위해서는$ORACLE_HOME/network/admin/listener.ora 경로에 존재하는 LISTENER.ORA파일을 텍스트에디터를 이용하여 확인해 보면 된다.
LISTENER.ORA파일에 다음과 같이 설정되어 있을 경우 Listener의 시작 및 정지 시에 패스워드를 물어보게 된다.

SAVE_CONFIG_ON_STOP_LISTENER = ON
PASSWORDS_LISTENER = 2D6C48144CF753AC

또한 Listener의 설정파일인 LISTENER.ORA은 LSNRCTL 유틸리티의 SET 명령어를 사용하여 수정이 가능하므로 다음과 같은 파라미터를 수정하여 원격에서 LSNRCTL 유틸리티를 사용한 Listener의 설정을 변경할 수 없도록 해야 한다.
Listener의 설정을 변경하기 위해서는 OS상에서 LISTENER.ORA파일을 텍스트 에디터로 열어 수정해야 한다.
ADMIN_RESTRICTIONS_listener_name=ON


4. 접근 IP 대역 제한

오라클에서 임의의 사용자에 의한 원격 접속을 차단하기 위해 Listener의 IP 접근제한을 설정할 수 있다. 특정 클라이언트에서의 접근만 가능하도록 접근 가능 IP를 설정하여 불필요한 외부의 사용자가 접근하는 것을 차단한다.
환경설정 파일에서 접근 가능한 IP 대역과 접근 불가능한 IP대역을 설정하여 네트워크 접근통제를 할 수 있으며 Oracle 8i 는 ORACLE_HOME/network/admin/protocol.ora 파일에서, Oracle9i 에서는 $ORACLE_HOME/network/admin/sqlnet.ora 파일에서 설정을 한다.
SQLNET.ORA 및 PROTOCOL.ORA파일을 OS상에서 텍스트 에디터로 열어 다음과 같이 편집하여 설정을 한다.
TCP.VALIDNODE_CHECKING = YES
TCP.INVITED_NODES=(접속을 허용할 ip)
TCP.EXCLUDED_NODES =(접속을 차단할 ip)

tcp.validnode_checking를 YES 로 설정한 후 접속을 허용·차단할 IP 또는 호스트 네임을 ','를 구분자로 하여 넣어주면 된다.
다음 예제와 같이 접근통제를 할 IP, 및 네트워크 대역을 넣어 설정할 수 있다.
TCP.VALIDNODE.CHECKING = YES
TCP.INVITED_NODES =(192.168.100.12, 192.168.100.13, dbms.com)
TCP.EXCLUDED_NODES =(192.168.200.0)

tcp.invited_nodes 만을 사용할 경우 허용된 IP에서만 접근이 되며 그 외의 IP에 대해서는 접근이 불가능하다. 이때 주의해야 할 것은 반드시 자기자신의 IP를 추가해줘야 한다는 것이며 tcp.excluded_nodes를 같이 사용하여 차단할 IP를 추가하여도 된다.
SQLNET.ORA 및 PROTOCOL.ORA파일을 수정한 후에는 Listener를 재시작해야 해당 설정이 적용된다.


[저자] 안랩코코넛 컨설팅사업부 김진수(midorii2@coconut.co.kr)

Posted by 1010
02.Oracle/DataBase2008. 7. 23. 15:40
반응형
create tablespace TS_MISD datafile 'E:MIS_DBTS_MISD01.dbf' size 2000M; 2GByte로 테이블 생성

create tablespace TS_MISI datafile 'E:MIS_DBTS_MISI01.dbf' size 100M; 2GByte로 테이블 생성


alter tablespace TS_MISI
DEFAULT STORAGE(
INITIAL 65536
NEXT 0
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0);

alter tablespace TS_MISD
DEFAULT STORAGE(
INITIAL 65536
NEXT 0
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0);


CREATE TABLESPACE TS_FMSD
DATAFILE
'E:MIS_DBTS_FMSD03.DBF' SIZE 2097152 K ,
'E:MIS_DBTS_FMSD02.DBF' SIZE 2097152 K ,
'E:MIS_DBTS_FMSD01.DBF' SIZE 2097152 K
MINIMUM EXTENT 64 K
NOLOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64 K;

CREATE TABLESPACE TS_MISD DATAFILE
'E:MIS_DBTS_MISD01.DBF' SIZE 2097152 K
NOLOGGING
ONLINE
PERMANENT;
MINIMUM EXTENT 64 K;

CREATE TABLESPACE TDMS_TEMP DATAFILE
'/oracle/oradata/tdms_temp.DBF' SIZE 2097152 K
NOLOGGING
ONLINE
PERMANENT;
MINIMUM EXTENT 64 K;


EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64 K;


CREATE TABLESPACE TS_MISI
DATAFILE
'E:MIS_DBTS_MISI02.DBF' SIZE 2097152 K,
'E:MIS_DBTS_MISI01.DBF' SIZE 2097152 K
MINIMUM EXTENT 64 K
NOLOGGING
ONLINE
PERMANENT;
--EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64 K;



--PCTINCREASE : initialize의 증가치 퍼센트고

---자료영역 늘리기
SQL> Alter tablespace riaa_data add datafile 'c:riaadata1.ora' size 1M;
--테이블스페이스의 수정
테이블 영역이 변경되었습니다. ( 테이타 자료영역이 4M로 증가된다)

----------------------------
--***Object가 있을 경우 삭제 방법
------------------
SQL> drop tablespace riaa_data;
--테이블스페이스에 Object영역이 있으므로 삭제가 안된다.
라인 1 에 오류:
ORA-01549: 테이블 영역이 비어있지 않으므로 INCLUDING CONTENTS를 사용해 주십시오.

***Object가 있을 경우 삭제 방법
SQL> Drop tablespace TS_BILD including contents;
테이블 영역이 삭제되었습니다.
--user는 지워지지 않는다.. 다만 그 사용영역만 삭제된다.



2. SYSTEM and Non-SYSTEM Tablespace
- SYSTEM Tablespace : data dictionary 정보, SYSTEM rollback segment
- Non-SYSTEM Tablespace : Rollback segments, Temporary segments, App' data, App' index

3. CREATE TABLESPACE

CREATE TABLESPACE tablespace
DATAFILE filespec [autoextend_clause]
[, filespec [autoextend_clause]]...
[MINIMUM EXTENT integer [K|M]]
[DEFAULT storage_clause]
[PERMANENT|TEMPOARY] -- default PERMANENT
[ONLINE|OFFLINE] -- default ONLINE

예) CREATE TABLESPACE app_data
DATAFILE '/DISK4/app01.dbf' SIZE 100M,
'/DISK5/app02.dbf' SIZE 100M
MINIMUM EXTENT 500K
DEFAULT STORAGE (INITIAL 500K NEXT 500K
MAXEXTENTS 500 PCTINCREASE 0) ;

* Storage Parameters
- INITIAL : first extent의 size를 정한다. 최소 size는 2blocks이다. (2 * DB_BLOCK_SIZE)
default는 5 bolcks (5 * DB_BLOCK_SIZE)
- NEXT : 다음 extent의 size를 정한다. 최소 size는 1block 이다.
default는 5 bolcks (5 * DB_BLOCK_SIZE)
- MINEXTENTS : segment가 생성되었을 때 할당된 extent의 갯수.
default는 1
- PCTINCREASE n : 다음에 extent가 생성될 때 이전 extent보다 n% 증가된 size (PCT: percent)
default는 50
- MAXEXTENTS : segment가 갖을 수 있는 extent의 최대 수

4. Temporary Tablespace

CREATE TABLESPACE sort
DATAFILE '/DISK2/sort01.dbf' SIZE 50M
MINIMUM EXTENT 1M
DEFAULT STORAGE (INITIAL 2M NEXT 2M
MAXEXTENTS 500 PCTINCREASE 0)
TEMPORARY ;

5. Tablespace의 size 설정 (data file을 추가하면서...)

ALTER TABLESPACE app_data
ADD DATAFILE
'/DISK5/app03.dbf' SIZE 200M ;

6. Data File이 꽉차면 자동으로 datafile을 증가하게 만드는 방법.

ALTER TABLESPACE app_data
ADD DATAFILE
'/DISK6/app04.dbf' SIZE 200M
AUTOEXTEND ON NEXT 10M
MAXSIZE 500M ;

* 3가지 방법이 있다.
1) CREATE DATABASE
2) CREATE TABLESPACE DATAFILE
3) ALTER TABLESPACE ADD DATAFILE

7. 기존에 존재하는 datafile의 size를 resize하는 방법

ALTER DATABASE DATAFILE
'/DISK5/app02.dbf' RESIZE 200M ;

8. Changing the Storage Settings

ALTER TABLESPACE app_data
MINIMUM EXTENT 2M ;

ALTER TABLESPACE app_data
DEFAULT STORAGE
(INITIAL 2M NEXT 2M
MAXEXTENTS 999) ;

9. Tablespace OFFLINE/ONLINE
- tablespace가 만들어지면 default가 ONLINE이다.
- OFFLINE이 되면 다른 user의 access가 불가능하다.
- SYSTEM tablespace는 OFFLINE이 불가!
- transaction이 끝나지 않은 tablespace는 OFFLINE 불가!

ALTER TABLESPACE tablespace
{ ONLINE | OFFLINE [NORMAL|TEMPORARY|IMMEDIATE] }
- Normal : checkpoint를 적용시키고 offline한다.
- Temporary : datafile 중에서 online datafile에만 checkpoint를 적용시키고 offline한다.
- Immediate : checkpoint 없이 offline한다.

예) ALTER TABLESPACE app_data OFFLINE ;

10. Moving Data File : ALTER TABLESPACE
- 반드시 offline 한 상태에서 한다.
- target data file이 반드시 존재해야 한다.

ALTER TABLESPACE app_data
RENAME DATAFILE '/DISK4/app01.dbf'
TO '/DISK5/app01.dbf' ;

11. Moving Data File : ALTER DATABASE
- 반드시 database가 mount 상태여야 한다.
- target data file이 반드시 존재해야 한다.
- shutdown하고 host상태에서 datafile을 제거해야 한다.

ALTER DATABASE RENAME FILE
'/DISK1/system01.dbf' TO '/DISK2/system01.dbf' ;

12. READ-ONLY Tablespace 상태
- 오직 select만 할 수 있다.
- CREATE는 안되고... DROP은 할 수 있다.
- user들이 data변경을 못하고, backup과 recovery가 쉽다.

ALTER TABLESPACE app_data
READ ONLY

ALTER TABLESPACE app_data
READ WRITE -- read only 상태를 다시 read write상태로 바꿔준다.

* 주의점!
- tablespace가 반드시 online상태여야 한다.
- active transaction이 허용되지 않아야 한다.
- tablespace가 active rollback segment를 갖고 있으면 안된다.
- online backup중엔 못한다.

13. DROP TABLESPACE
- file 삭제는 host에 나가서 삭제를 해야 한다.

DROP TABLESPACE app_data
INCLUDING CONTENTS ;

* including contents를 안썼을 때, tablespace가 비워져 있어야만 drop이 된다.
including contents는 데이터가 들어 있어도 tablespace를 삭제하겠다는 뜻이다.

14. DBA_TABLESPACES : tablespace 정보를 갖고 있다.
- TABLESPACE_NAME, NEXT_EXTENT, MAX_EXTENTS, PCT_INCREASE, MIN_EXTLEN, STATUS, CONTENTS

SVRMGR> SELECT tablespace_name, initial_extent, next_extent,
2 max_extents, pct_increase, min_extlen
3 FROM dba_tablespaces ;

15. DBA_DATA_FILES : file에 관한 정보를 갖고 있다.
- FILE_NAME, TABLESPACE_NAME, BYTES, AUTOEXTENSIBLE, MAXBYTES, INCREMENT_BY

SVRMGR> SELeCT file_name, tablespace_name, bytes,
2 autextensible, maxbytes, increment_by
3 FROM dba_data_files ;

16. Contol File 정보
- V$DATAFILE : ts 
Posted by 1010
02.Oracle/DataBase2008. 7. 23. 15:28
반응형
buffer부족시
만약 IMP-00032까지 나올 경우에는 buffer를 충분히 주고 import합니다.
ex) imp system/manager file=test.dmp full=y log=test.log buffer=20000000
Posted by 1010
02.Oracle/DataBase2008. 7. 23. 15:05
반응형
alter user system identified by pass(아무거나) account unlock;
Posted by 1010
02.Oracle/DataBase2008. 7. 23. 14:38
반응형

select 'alter system kill session '''||sid||','||serial#||''';'
from v$session
where sid in (select distinct sid from v$lock where type ='TM');
Posted by 1010
02.Oracle/DataBase2008. 7. 22. 12:20
반응형
오라클 리스너 설정

$ORACLE_HOME/network/admin/   디렉토리에는 네트워크관련 환경설정파일들이 있습니다. listener.ora, tnsname.ora 이지요.

listener.ora 파일 설정
 

#
# Installation Generated Net8 Configuration
# Version Date: Jun-17-97
# Filename: Listener.ora
#
LISTENER =
  (ADDRESS_LIST =
        (ADDRESS= (PROTOCOL= IPC)(KEY=
<Oracle_SID>))
        (ADDRESS= (PROTOCOL= IPC)(KEY= PNPKEY))
        (ADDRESS= (PROTOCOL= TCP)(Host= 210.123.5.17)(Port= 1521))
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME= linux.)
      (ORACLE_HOME= /usr1/oracle/app/oracle/product/8.0.5)
      (SID_NAME =
<Oracle_SID>)
    )
    (SID_DESC =
      (SID_NAME = extproc)
      (ORACLE_HOME = /usr1/oracle/app/oracle/product/8.0.5)
      (PROGRAM = extproc)
    )
  )
STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER = 10

TRACE_LEVEL_LISTENER = OFF
~
~



리스너 명령요약

lsnrctl start  :   리스너의 시작
lsnrctl status :  리스너의 동작 상태확인
lsnrctl stop   :  리스터의 동작 중지

6. Oracle에서 환글 데이트 처리

1. sqlplus system/manager
2. SQL > select convert('a','KO16KSC5601','US7ASCII') from dual;
3. SQL > update sys.prop$ set value$ = 'KO16KSC5601'
             where name = 'NLS_CHARACTERSET';

4. SQL> select name, value$ from sys.prop$ where value$ = 'KO16KSC5601'

제대로 출력이 된다면 ...  아니면 처음부터 다시..

5. SQL> commit;
6. shutdown , startup


Posted by 1010
02.Oracle/DataBase2008. 7. 22. 09:27
반응형
리눅스에서의 네트워크 장치 이름

    랜카드 장착시 -> '/dev/eth0'  ,  '/dev/eth1'  ,  ...




☆ IP 주소

- 각 컴퓨터 랜카드에 부여되는 고유한 주소

예) 255 . 255 . 255 . 255




☆ 네트워크 주소

- 같은 네트워크에 있는 공통된 주소.

- 각 IP에 서브넷 마스크( C클래스의 경우 : 255 . 255 . 255 . 0 ) 를 XOR하면 나오는 주소.


예)  리눅스 서버 IP          : 192 . 168 . 184 . 100

      리눅스 클라이언트 IP : 192 . 168 . 184 . 200

      윈도우 클라이언트 IP : 192 . 168 . 184 . 201


      >> 굵은 부분이 네트워크 주소

      >> 밑줄 부분이 사설 네트워크 주소

           : 외부와 분리된 별도의 네트워크 공인 IP가 부족할때 사용함.




☆ Broadcast

- 내부 네트워크의 모든 컴퓨터가 듣게되는 주소.

- 네트워크 주소 + 255

   예)  ( C클래스 )  192 . 168 . 184 . 255




☆ Gateway , Router

- 게이트웨이 = 라우터

- 네트워크 간에 데이터를 전송하는 장비 또는 컴퓨터.

- 외부 네트워크로 나가기 위한 통로.

- 게이트웨이 주소 마지막 숫자는 관리자가 정하기 나름.

※ 게이트웨이 를 별도로 추가시

    # route  add  default  gw  <게이트웨이 주소>  dev  <장치 이름>

    예)  # route  add  default  gw  192.168.184.254  dev  eth0




☆ Net Mask  &  Class


- 넷마스크 : 네트워크의 규모를 등급별로 결정함.

- C 클래스 : 256개의 IP주소 사용가능

                 예)  네트워크 주소 : 192 . 168 . 184 . 0
                       넷마스크 주소 : 255 . 255 . 255 . 0

- B 클래스 : 65536개의 IP주소 사용가능 ( 2^16 )

                 예)  네트워크 주소 : 192 . 168 . 0 . 0
                       넷마스크 주소 : 255 . 255 . 0 . 0

- A 클래스 : 2^24 개의 IP주소 사용가능

                 예)  네트워크 주소 : 192 . 0 . 0 . 0
                       넷마스크 주소 : 255 . 0 . 0 . 0


※ 설치 가능한 컴퓨터 갯수

    네트워크 주소, 브로드 캐스트 주소, 게이트 웨이 주소 3개를 제외한

    갯수의 컴퓨터를 네트워크 내부에 설치할 수 있다. (C클래스의 경우 256-3 = 253대)




☆ DNS 서버 주소

- URL을 해당 컴퓨터의 IP주소로 변환해주는 서버 컴퓨터의 주소

- 설정 파일  :  /etc/resolv.conf

                    ------------------------------------
                    ........

                    Default  Server : *****                       // DNS 제공자

                    nameserver < ***.***.***.*** >         // 해당 DNS 서버 IP
                    ........

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




☆ 네트워크 관련 명령어


ⓐ # system-config-network

    - 네트워크 연결방식을 DHCP 클라이언트 또는 고정 IP 주소를 사용할지 결정

    - IP 주소 , 서브넷 마스크 , 게이트웨이 정보

    - DNS 정보

    - 네트워크 카드 드라이버 설정 , 장치 (eth0) 설정


ⓑ # system-config-network-tui

    - Text User Interface  :  네트워크 설정의 텍스트 모드


ⓒ # service  network  restart

    - 네트워크 설정 변경후 변경 내용을 시스템에 적용 (네트워크 서비스 재시작)


ⓓ # ifconfig < 장치 이름 >

    - 해당 장치의 IP 주소 설정 정보를 출력


ⓔ # nslookup

    - DNS 서버작동 테스트


ⓕ # ping

    - 네트워크에 응답 테스트




☆ 네트워크 설정 변경 관련 파일

 /etc/sysconfig/network                                 // 기본 정보

 /etc/sysconfig/network-scripts/ifcfg-eth0       // eth0 에대한 정보 몽창..

/etc/resolv.conf                                            // DNS 서버정보 및 호스트 이름 정보




☆ 네트워크 카드 교체

- 실제로 네트워크 카드에 문제가 발생시 적용시킬수 있다.


1. 네트워크 카드를 제거.

2. 네트워크 카드를 새로 장착.

3. root 로 부팅~

4. # system-config-network

5. "하드웨어" 탭  →  'eth0' 지우기

                       [새로만들기]  →  하드웨어 타입 'Ethernet' 선택

                       →  <네트워크 아답터 설정 창>  →  아답터 'AMD PCnet32' 선택

6. "장치" 탭  →  [새로만들기]  →  '이더넷 연결' 선택  →  'AMD PCnet32' 선택

                       →  <네트워크 셋팅 설정 창>  →  '정적으로 설정된 IP 주소들' 선택

                       →  네트워크 정보 입력

7. "DNS" 탭  →  DNS 주소 확인

8. 완료 (창닫기 or  메뉴 [파일]-[끝내기] 선택)

9. # service  network  restart            // 서비스 재시작

10. # ping  www.google.co.kr          //  응답확인

11. # ifconfig  eth0                          //  네트워크 설정 확인




☆ 네트워크 설정 - Text Mode

# vi  /etc/sysconfig/network         // 확인

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

   다음 사항을 수정한다.

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

   ..............

   NETMASK = *** . *** . *** . ***              // 넷마스크

   IPADDR = *** . *** . *** . ***                  // IP 주소
   ..............

   GATEWAY = *** . *** . *** . ***             // 게이트 웨이 주소
   ..............

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

# service  network  restart




☆ 네트워크 설정 - Command Mode

# ifconfig  eth0  <IP 주소>  netmask  <넷마스크>  broadcast  <브로드캐스트 주소>  up

# route  add  -net  <네트워크 주소>  netmask  <넷마스크>  eth0

# route  add  default  gw  <게이트웨이 주소>  dev  eth0

# vi /etc/resolv.conf          // DNS 설정

# service  network  restart





※  인터넷이 잘 안될때 , DNS 서버 고장을 의심해보자

ⓐ DNS 서버 작동 확인하기

    # nslookup

    > server                     // 사용중인 DNS 서버 주소확인,  "Default server :" 이후에 나오는 주소가 DNS주소

    > www.google.co.kr

       ;; connection timed out; no servers could be reached

        위와 같은 에러 메시지가 나온다면 DNS 서버가 고장나거나, DNS 서버의 주소가 잘못된것.


ⓑ 다른 컴퓨터에서 DNS 주소 따오기

     windows 인경우 : cmd 창에서 'nslookup' 명령으로 DNS 주소 획득~

     linux 인 경우 :  위 ⓐ방법으로 확인


ⓒ 가져온 DNS 주소 확인하기

    # nslookup

    > server  <새로운 DNS 주소>

    > www.google.co.kr               // DNS 서버 작동 확인


ⓓ 정상 작동하는 DNS 주소 적용하기

    # vi  /etc/resolv.conf               // 'nameserver' 부분 수정
Posted by 1010
02.Oracle/DataBase2008. 7. 21. 13:51
반응형

OC4J Configuration issue...

First you should check database/instance configure for DATABASE CONTROL


If a hostname_sid directory does not exist in the Oracle Database 10g home directory, then the Oracle Enterprise Manager 10g Database Control Console was not configured for the database instance.




E:\>set oracle_sid=db01

E:\>emctl getemhome
Oracle Enterprise Manager 10g Database Control Release 10.1.0.2.0
Copyright (c) 1996, 2004 Oracle Corporation. All rights reserved.
EMHOME=C:\oracle\product\10.1.0\Db_1/taj.domainname.local_db01

If you get above output mean DATABASE configure FOR DB CONTROL otherwise DATABASE is not configure for DB CONTROL and you will see message like "EM Configuration issue".

We can configure DATABASE/INSTANCE for DB CONTROL through TWO WAY
1.DBCA
2.EMCA

DBCA
E:\>set oracle_sid=sh

E:\>emctl status dbconsole
OC4J Configuration issue. C:\oracle\product\10.1.0\Db_1/oc4j/j2ee/OC4J_DBConsole
_taj.domainname.local_sh not found.

E:\>dbca
Note : dbca ---> Configure Database option ---> Select DB and give PWD ---> Check Mark on Configure database with enterprise manager. ---> Finish
E:\>set oracle_sid=sh

E:\>emctl status dbconsole
Oracle Enterprise Manager 10g Database Control Release 10.1.0.2.0
Copyright (c) 1996, 2004 Oracle Corporation. All rights reserved.
http://taj.domainname.local:5503/em/console/aboutApplication
Oracle Enterprise Manager 10g is running.
------------------------------------------------------------------
Logs are generated in directory C:\oracle\product\10.1.0\Db_1/taj.domainname.local_sh/sysman/log

--------------------------------------------------------------
You can also Configure Database Control through EMCA command line utility.
E:\>set oracle_sid=db01

E:\>emca

STARTED EMCA at Thu Jan 11 10:39:37 GST 2007
Enter the following information about the database to be configured
Listener port number: 1521
Database SID: db01
Service name: db01
Email address for notification:
Email gateway for notification:
Password for dbsnmp:
Password for sysman:
Password for sys:

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

You have specified the following settings

Database ORACLE_HOME ................ C:\oracle\product\10.1.0\Db_1
Enterprise Manager ORACLE_HOME ................ C:\oracle\product\10.1.0\Db_1

Database host name ................ taj.domainname.local
Listener port number ................ 1521
Database SID ................ db01
Service name ................ db01
Email address for notification ...............
Email gateway for notification ...............

-----------------------------------------------------------------
Do you wish to continue? [yes/no]: yes
Jan 11, 2007 10:40:22 AM oracle.sysman.emcp.EMConfig checkConfiguration
SEVERE: Repository already exists. Fix the error(s) and run EM Configuration As
sistant again in standalone mode.
Could not complete the configuration. Refer to the log file for details

emca -r :skip creation of repository schema
E:\>emca -r

STARTED EMCA at Thu Jan 11 10:42:33 GST 2007
Enter the following information about the database to be configured
Listener port number: 1521
Database SID: db01
Service name: db01
Email address for notification:
Email gateway for notification:
Password for dbsnmp:
Password for sysman:
Password for sys: :
Password for sys:
-----------------------------------------------------------------

You have specified the following settings

Database ORACLE_HOME ................ C:\oracle\product\10.1.0\Db_1
Enterprise Manager ORACLE_HOME ................ C:\oracle\product\10.1.0\Db_1

Database host name ................ taj.domainname.local
Listener port number ................ 1521
Database SID ................ db01
Service name ................ db01
Email address for notification ...............
Email gateway for notification ...............

-----------------------------------------------------------------
Do you wish to continue? [yes/no]: yes
Jan 11, 2007 10:42:59 AM oracle.sysman.emcp.EMConfig updateReposVars
INFO: Updating file C:\oracle\product\10.1.0\Db_1\sysman\emdrep\config\repositor
y.variables ...
Jan 11, 2007 10:43:05 AM oracle.sysman.emcp.util.PortQuery findUsedPorts
INFO: Searching services file for used port
Jan 11, 2007 10:43:08 AM oracle.sysman.emcp.EMConfig addPortEntries
INFO: Updating file C:\oracle\product\10.1.0\Db_1\install\portlist.ini ...
Jan 11, 2007 10:43:09 AM oracle.sysman.emcp.EMConfig updateEmdProps
INFO: Updating file C:\oracle\product\10.1.0\Db_1\sysman\config\emd.properties .
..
Jan 11, 2007 10:43:10 AM oracle.sysman.emcp.EMConfig updateConfigFiles
INFO: targets.xml file is updated successfully
Jan 11, 2007 10:43:10 AM oracle.sysman.emcp.EMConfig updateEmomsProps
INFO: Updating file C:\oracle\product\10.1.0\Db_1\sysman\config\emoms.properties
...
Jan 11, 2007 10:43:10 AM oracle.sysman.emcp.EMConfig updateConfigFiles
INFO: emoms.properties file is updated successfully
Jan 11, 2007 10:43:12 AM oracle.sysman.emcp.EMConfig startOMS
INFO: Starting the DBConsole ...
Jan 11, 2007 10:44:53 AM oracle.sysman.emcp.EMConfig perform
INFO: DBConsole is started successfully
Jan 11, 2007 10:44:53 AM oracle.sysman.emcp.EMConfig perform
INFO: >>>>>>>>>>> The Enterprise Manager URL is http://taj.domainname.lo
cal:5504/em <<<<<<<<<<<>Agent Unreachable

First check agent services is start or not.
e:\>set oracle_sid=db01
e:\>emctl status agent
if stop or not running then start
e:\>emctl start agent
or check log file for more info.
OracleHome\Db_1\localhost_sid\sysman\log
------------------------------------------------------------

Io exception: SO Exception was generated
INFO: Block size for SYSAUX is greater than or equal to 8K
INFO: Job queue size is greater than or equal to 10

or check log file for more info.
Oracle_Home\Db_1\cfgtoollogs\emca_repos_xxxx.log
For above error because of your not drop repository properly.

SQL> DECLARE
2 CURSOR c1 IS
3 SELECT owner, synonym_name name
4 FROM dba_synonyms
5 WHERE table_owner = 'SYSMAN';
6
7 BEGIN
8 FOR r1 IN c1
9 LOOP
10 IF r1.owner = 'PUBLIC' THEN
11 EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM 'r1.name;
12 ELSE
13 EXECUTE IMMEDIATE 'DROP SYNONYM 'r1.owner'.'r1.name;
14 END IF;
15 END LOOP;
16 END;
17 /

PL/SQL procedure successfully completed.

SQL> DROP ROLE mgmt_user;

Role dropped.

SQL> drop user mgmt_view cascade;

User dropped.

SQL> drop user sysman cascade;

User dropped.

------------------------------------------------------------------
After drop complete repository you can create new repository through EMCA.
E:\>emca

STARTED EMCA at Thu Jan 11 18:13:11 GST 2007
Enter the following information about the database to be configured
Listener port number: 1521
Database SID: db01
Service name: db01
Email address for notification:
Email gateway for notification:
Password for dbsnmp:
Password for sysman:
Password for sys: :
Password for sys:
-----------------------------------------------------------------

You have specified the following settings

Database ORACLE_HOME ................ C:\oracle\product\10.1.0\Db_1
Enterprise Manager ORACLE_HOME ................ C:\oracle\product\10.1.0\Db_1

Database host name ................ taj.domainname.local
Listener port number ................ 1521
Database SID ................ db01
Service name ................ db01
Email address for notification ...............
Email gateway for notification ...............

-----------------------------------------------------------------
Do you wish to continue? [yes/no]: yes
DBConsole is already configured for the database db01
Would you like to re-configure DBConsole for the specified database? [yes/no]: y
es
Make sure that DBConsole has been shutdown
When you are ready to continue, press

Jan 11, 2007 6:13:27 PM oracle.sysman.emcp.EMConfig updateReposVars
INFO: Updating file C:\oracle\product\10.1.0\Db_1\sysman\emdrep\config\repositor
y.variables ...
Jan 11, 2007 6:19:07 PM oracle.sysman.emcp.EMConfig createRepository
INFO: Creating repository ...
Jan 11, 2007 6:19:07 PM oracle.sysman.emcp.EMConfig perform
INFO: Repository was created successfully
Jan 11, 2007 6:19:15 PM oracle.sysman.emcp.EMConfig stopOMS
INFO: Stopping the DBConsole ...
Jan 11, 2007 6:19:21 PM oracle.sysman.emcp.EMConfig addPortEntries
INFO: Updating file C:\oracle\product\10.1.0\Db_1\install\portlist.ini ...
Jan 11, 2007 6:19:21 PM oracle.sysman.emcp.EMConfig updateEmdProps
INFO: Updating file C:\oracle\product\10.1.0\Db_1\sysman\config\emd.properties .
..
Jan 11, 2007 6:19:23 PM oracle.sysman.emcp.EMConfig updateConfigFiles
INFO: targets.xml file is updated successfully
Jan 11, 2007 6:19:23 PM oracle.sysman.emcp.EMConfig updateEmomsProps
INFO: Updating file C:\oracle\product\10.1.0\Db_1\sysman\config\emoms.properties
...
Jan 11, 2007 6:19:23 PM oracle.sysman.emcp.EMConfig updateConfigFiles
INFO: emoms.properties file is updated successfully
Jan 11, 2007 6:19:34 PM oracle.sysman.emcp.EMConfig startOMS
INFO: Starting the DBConsole ...
Jan 11, 2007 6:21:13 PM oracle.sysman.emcp.EMConfig perform
INFO: DBConsole is started successfully
Jan 11, 2007 6:21:13 PM oracle.sysman.emcp.EMConfig perform
INFO: >>>>>>>>>>> The Enterprise Manager URL is http://taj.domainname.lo
cal:5504/em <<<<<<<<<<<>


Note : In 10.1.0.2.0 RepManager is not working properly so that we are not able to use below command.

emca -config dbcontrol db -repos recreate

If is working in 10.1.0.3.0
for you have to manully drop repository and create again.

Related Links

1. http://dbataj.blogspot.com/2007/07/error-during-dbconsole-shutting-down.html

2. http://dbataj.blogspot.com/2007/07/change-sysman-password.html

3. http://dbataj.blogspot.com/2007/07/e-mail-notification.html

4. http://dbataj.blogspot.com/2007/06/enabling-isqlplus-dba-access.html

5. http://dbataj.blogspot.com/2007/04/export-database-with-sysdba-role.html


Posted by 1010
02.Oracle/DataBase2008. 7. 21. 11:30
반응형

enterprise manager start error

Postby amgad_go on Mon Jun 09, 2008 2:13 am

Dear Tim
I just installed Oracle 10.0.2 on fedora 9 and the installation was successful;
later i 'm trying to start the enterprise manager using this command
emctl start

i get this error

TZ set to Canada/Eastern
Exception in getting local host
java.net.UnknownHostException: f9.localdomain: f9.localdomain
at java.net.InetAddress.getAllByName0(InetAddress.java:1011)
at java.net.InetAddress.getAllByName0(InetAddress.java:981)
at java.net.InetAddress.getAllByName(InetAddress.java:975)
at java.net.InetAddress.getByName(InetAddress.java:889)
at oracle.sysman.emSDK.conf.TargetInstaller.getLocalHost(TargetInstaller.java:4983)
at oracle.sysman.emSDK.conf.TargetInstaller.main(TargetInstaller.java:3758)
Exception in getting local host
java.net.UnknownHostException: f9.localdomain: f9.localdomain
at java.net.InetAddress.getAllByName0(InetAddress.java:1011)
at java.net.InetAddress.getAllByName0(InetAddress.java:981)
at java.net.InetAddress.getAllByName(InetAddress.java:975)
at java.net.InetAddress.getByName(InetAddress.java:889)
at oracle.sysman.emSDK.conf.TargetInstaller.getLocalHost(TargetInstaller.java:4983)
at oracle.sysman.emSDK.conf.TargetInstaller.main(TargetInstaller.java:3758)
EM Configuration issue. /u01/app/oracle/product/10.2.0/db_1/f9.localdomain_DB11G not found.

I'm new to both Linux and Oracle and i don't know how to trouble shoot this kind of error

please help :) :)
thanks
Amgad
amgad_go
Member
Posts: 3
Joined: Thu Jun 05, 2008 2:18 pm

Re: enterprise manager start error

Postby Salman on Mon Jun 09, 2008 6:48 am

You command is incomplete, the complete command is as follows
emctl start dbconsole

BUT
this error message is not because of incomplete command. I think you might have some miss configuration with your hostname. You need to make sure that you have correct hostanem in /etc/hosts and also correct name secified for this host which should be "f9.localdomain"
Posted by 1010
02.Oracle/DataBase2008. 7. 21. 09:27
반응형

iSQL*Plus를 이용한 데이타베이스 접근

iSQL*Plus는 SQL*Plus의 웹 기반 버전입니다. iSQL*Plus를 사용하려면, OEM 콘솔의 Related Links 섹션에 있는 iSQL* Plus 링크를
클릭하거나, 설치 과정에서 제공된 iSQL*Plus URL을 브라우저에 입력합니다.

Ex:
http://ds1.orademo.org:5560/isqlplus (데이타베이스에 DNS가 설정되지 않은 경우, 호스트 네임 대신 IP 주소를 입력해야 합니다.)

User Name: SYSTEM
Password: <설치과정에서 입력한 패스워드>

을 클릭합니다.

Workspace 박스에 SQL 명령을 입력한 뒤 Execute를 클릭합니다.

figure 7

iSQL*Plus의 시작 및 중단:

$ isqlplusctl start
$ isqlplusctl stop
Posted by 1010
02.Oracle/DataBase2008. 7. 21. 09:27
반응형

Oracle Enterprise Manager 10g Database Control의 사용

웹 브라우저에서 설치과정에서 제공된 URL을 입력합니다.

Ex:
http://ds1.orademo.org:5500/em (데이타베이스에 DNS가 설정되지 않은 경우, 호스트 네임 대신 IP 주소를 입력해야 합니다.)

User Name: SYS
Password: <설치과정에서 입력한 패스워드>
Connect As: SYSDBA

을 클릭합니다

figure 6

Oracle Enterprise Manager 10g Database Control의 놀라운 세계에 오신 것을 환영합니다!

Oracle Enterprise Manager Database Control의 시작 및 중단:

$ emctl start dbconsole
$ emctl stop dbconsole
Posted by 1010
02.Oracle/DataBase2008. 7. 18. 14:13
반응형

오라클 엔진을 다른 디렉토리로 옮긴후에 아래와 같은 에러 발생
/usr/oracle -> /oracle


$ lsnrctl start

LSNRCTL for IBM/AIX RISC System/6000: Version 8.1.7.0.0 - Production on 25-SEP-2002 19:13:30

(c) Copyright 1998 Oracle Corporation.  All rights reserved.

Starting /oracle/app/oracle/product/8.1.7/bin/tnslsnr: please wait...

TNSLSNR for IBM/AIX RISC System/6000: Version 8.1.7.0.0 - Production
System parameter file is /oracle/app/oracle/product/8.1.7/network/admin/listener.ora
Log messages written to /oracle/app/oracle/product/8.1.7/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=su405.chonbuk.ac.kr)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
TNS-01201: Listener cannot find executable /usr/oracle/app/oracle/product/8.1.7/bin/extproc for SID
PLSExtProc


@ 해결책

$ cd $ORACLE_HOME/network/admin
$ vi listener.ora

(ORACLE_HOME = /usr/oracle/app/oracle/product/8.1.7)
->
(ORACLE_HOME = /oracle/app/oracle/product/8.1.7)

[출처] [Oracle] 오라클 리스너 실행이 안될때 해결책|작성자 poporena

Posted by 1010
02.Oracle/DataBase2008. 7. 18. 11:53
반응형

CREATE USER test1521 IDENTIFIED BY test1521;
GRANT CREATE SESSION TO test1521;
GRANT SELECT ON SMBI.sbcsba2007 TO test1521;

scott : DB
student : Table Name
tiger : 계정



GRANT SELECT ON SMBI.cuolac TO test1521;
GRANT SELECT ON SMBI.sbcsba2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbb2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbc2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbe2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbg2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbh2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbi2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbk2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbo2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbp2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbr2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbr22007 TO test1521;
GRANT SELECT ON SMBI.sbcsbs2007 TO test1521;
GRANT SELECT ON SMBI.sbcsbt2007 TO test1521;

Posted by 1010
02.Oracle/DataBase2008. 7. 18. 11:38
반응형



Linux Oracle 설치와 활용(Ⅰ)

이수준 (dislevel@newhuman.org)



서  론

    인터넷 서버로서의 많은 가능성을 보여주고 있는 Linux는 사실상 미묘한 문제가 있었다. Apache는 웹서버로서의 더할 나위 없는 정상의 고지에 있었고, Samba는 많은 작업들을 MS WINDOWS로부터 해방시켜 주었으며 X WINDOW는 MS의 그것과 못지 않은 많은 윈도우 매니저들로 치장되었다. 문제는 좀더 신뢰성 있는 서비스들이었고 그것은 대체로 D/B 시스템과의 밀접한 관계를 가진다. 물론 Linux에서도 아주 훌륭한(그것도 공개의) D/B 들이 존재하는데 MiniSQL이나 Postgresql등이 그것이고 MySQL같은 조금 특별한(반 공개/반 상용) 것들도 있다. 하지만, 이것들이 아무리 훌륭하다고 해도 사용자의 입장에서는 누구하나 책임져주지도, 기술지원 해주지도 않는 이러한 D/B 시스템들에 자신의 귀중한, 혹은 상업적인 목적의 자료를 담아두고 맘 편해 하는 이는 별로 없을 것이다. 그러나 지금은 여러 우여 곡절 끝에 Linux는 Oracle 을 위시한 대형 D/B시스템 업체들로부터 지원을 받게 되었다. 대형 상용 D/B시스템 업체들의 지원과 엔터프라이즈급 성능을 갖춘 커널 2.2의 발표로 인터넷 서버 시장을 넘어 이제는 국내에서도 엔터프라이즈 플랫폼으로 Linux 가 강력하게 등장하고 있다.

 

목  적

    이 글의 목적은 간단하다. 여러 D/B벤더들의 제품중에서 유독 한국에서 초강세를 보이고 있는 Oracle (server for Linux 8.0.5)를 Linux상에서 설치하는 방법과 운용 방법, 그리고 간단한 pro-c 사용법, 그리고 한참 주가를 올리고 있는 php3와의 연동을 약 3회분에 걸쳐 살펴본다. Test에 사용된 Oracle server는 정품이 아니고 Oracle Home Page에 가면 쉽게 구할 수 있는 개발자 버전임을 알려둔다.

    ◎ 시스템 요구사항

    메모리 : 활용의 목적이 아닐 경우 32메가도 가능

    스왑영역 : 일반적으로 RAM의 3배 크기의 스왑영역이 권장. 1GB이상의 RAM을 가진
                   시스템에서는 2배 크기의 스왑영역이 권장된다.

    디스크 : 최소한 4개(At least four devices) : Oracle 소프트웨어 설치를 위해 하나, 나머지
                세개는 OFA호환 데이터베이스를 생성하기 위해 사용된다.
                - 활용의 목적이 아닐 경우 한 개의 디스크라도 상관없다.
                - 활용의 목적이라면 최소 2개의 물리적 디스크 추천 (리눅스, 오라클 )
                - 다운로드 받은 파일과 압축을 풀고 설치할 용량으로 최소 1기가 이상이 필요하다.

    Operating System : Linux 2.0.34
    - 오라클의 리눅스 팀은 실제 2.0.33 이상이라고 한다.
    - 필자는 참고로 국내에서 유명한 알짜 리눅스 5.2를 사용하였으며 커널은 2.0.36을
       사용하였다.

    System Libraries : GNU C Library, version 2.0.7
    - 문서상에서는 2.0.7이상을 요구하고 있으나 오라클의 리눅스 개발 팀으로부터의 설명으로는
       실제 2.0.6이상이면 된다고 한다.
       GLIBC 2.1.x 용으로는 패치 파일이 따로 나와 있다. 아직 테스트는 해보지 못했다.

    Window Manager : 어떤 X 윈도우 시스템도 가능
    -솔라리스에서는 X-window 상에서 관리할 수 있는 svrmgrm 이 있지만 Linux에서는 현재
      커맨드 라인 모드에서만 작동하는svrmgrl 만이 존재한다.

 

가. root 로 하여야 할일

    1. 다운로드 http://technet.oracle.com에서 오라클 리눅스를 다운 받는다.

    2. /usr/src 에 다운로드 받은 805ship.tgz 파일을 옮긴 후 /usr/src/ora에서 압축을 푼다.
       /usr/src/ora 상에 다음과 같은 파일과 디렉토리가 생성되었을 것이다.

        # ls
        DST.LST          network/           plsql/
        nlsrtl/              precomp/          RELDESC.TXT
        ocommon/       rdbms/             bin/
        oemagent/       slax/                oracore/
        sqlplus/           jdbc/                orainst/
        svrmgr/           lib/                   ord/
        unix.prd          otrace/              unixdoc/

    3. Create Mount Points
        이제 오라클을 설치할 위치를 정하는 단계이다. 여기서는 /home/oracle에 오라클을 설치
        하는 것으로 가정하겠다. 이 위치에 오라클을 설치할 하드 디스크 파티션을 마운트 시켜야
        한다.
    - 대부분의 사용자가 하나의 파티션에 리눅스를 설치할 것이다. 그렇지만 만일 두개 이상의
       하드디스크 파티션을 이용할 것이라면 /etc/fstab의 내용을 적합하게 고쳐야 한다.
       각 파티션의 내용을 다음에 설명하도록 하겠다.

    4. DBA group 생성
       /etc/group 파일에 dba라는 그룹을 생성한다.

       # groupadd dba
       혹은 직접 vi edit로 /etc/group을 편집할 수도 있다.

    5. 리눅스 커널 설정
        오라클8 서버의 SGA 구조를 수용하기 위해 리눅스 커널의 Interprocess Communication
        (IPC) 파라메터들을 설정해야 한다. 시스템이 SGA를 수용하기에 충분한 shared 메모리를
        가지지 않았다면 데이터베이스를 실행할 수 없을 것이다.

    다음에 상응하는 커널 파라메터를 설정한다.

    maximum size of a shared memory segment(SHMMAX)
    maximum number of shared memory segments in the system(SHMMNI)
    maximum number of shared memory segments a user process can attatch(SHMSEG)
    maximum amount of shared memory that can be allocated system-wide(SHMMNS)
    SHMMAX*SHMSEG에 의해 허용되는 전체 shred 메모리 크기가 결정된다.

    ㄱ) SHMMAX = 4294967295 : 단일 공유 메모리 세그먼트의 최대크기(바이트단위)
    ㄴ) SHMMIN = 1 : 단일 공유메모리 세그먼트의 최소크기(바이트)
    ㄷ) SHMIMNI = 100 : 공유메모리 지시자(identifiers)의 갯수
    ㄹ) SHMSEG = 10 : 각 프로세스에 부여될 수 있는 공유메모리 세그먼드의 최대 갯수
    ㅁ) SEMMNS = 200 : 시스템 내의 세마포어 갯수
    ㅂ) SEMMNI = 70 : 세마포어 지시자(identifiers)의 갯수. SEMMNI은  동시에 생성될 수 있는
                               세마포어 갯수를 결정한다.
    ㅅ) SEMMSL = PROCESSES 초기화 파라메터의 값과 같거나 크도록, 하나의 세마포어 안에
                                            존재할 수 있는 세마포어들의 최대 갯수.
                                            오라클 프로세스들의 최대 갯수와 같아야 한다.

    솔라리스의 경우에는 다음의 값들을 /etc/system 파일에서 설정해 주어야 하지만, 설정을 하지 않아 문제가 발생한적은 없었다. 기본 커널 상태로 놓고 인스톨하여도 무방하다. (레드헷의 디폴트 커널이든 다시 컴파일한 커널이든)

    6. 오라클 관리자 계정 생성
        adduser 혹은 useradd 로 dba그룹에 속하는 유저 oracle을 생성한다.

      ㄱ) adduser 명령으로 oracle user를 생성한다.
           # adduser oracle
      ㄴ) vi /etc/passwd 명령을 사용하여 oracle user 의 설정 값을 위에서
          설명한 것대로 바꾼다. - dba gid와 같아야 한다.

    7. oratab 파일 생성
       오라클 인스턴스에 대한 정보는 oracle 소유의 oratab 파일에 저장된다.
       하지만 이 스크립트를 root로 실행해서 /etc 디렉토리에 oratab 파일이 생성되도록 한다.

       실제 인스톨과정에서 oratab.sh을 실행하면 ORACLE_OWNER환경변수가 설정되어 있는지
       묻고 있다. 따라서 ORACLE_OWNER을 다음과 같이 설정한다.

      #export ORACLE_OWNER=oracle

 

나. oracle user 로 할 일

    1. ~/.bash_profile의 수정
       ( sh을 사용할 경우 .profile을 수정한다. redhat 리눅스를 기준으로 설명한다.)
       oracle로 접속하여 다음과 같이 .profile을 만든다. RedHat에서는 .bash profile 이다.

      export
      ORACLE_HOME=/home/oracle/app/oracle/product/8.0.5
      export
      LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/jdbc/lib
      export ORACLE_SID=linux
      export ORACLE_TERM=386
      export
      ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
      export PATH=$PATH:$ORACLE_HOME/bin
      export TMPDIR=/tmp
      export
      CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip
      umask 022
      (위에서 export 다음의 줄을 export 뒤에 나와야 한다.)

    위의 경우는 “root 작업 4”의 “Create Mount Points”에서 이야기한 오라클을 설치할 경로로 /home/oracle인 경우이다.

각 설정에 대한 설명

    ORACLE_HOME :
    오라클을 /home/oracle에 설치하기로 하였으므로 /home/oracle/app/oracle/product/8.0.5로 지정된다.

    LD_LIBRARY_PATH :
    오라클의 동적/정적  라이브러리의 경로를 나타내는 환경변수로 Pro*C나 PHP등을 사용할 때 중요하게 적용된다.

    ORACLE_SID :
    오라클 인스턴스의 이름이다. 영문자로 3-4글자로 정해준다. 필자는 인스턴트의 이름을 linux 라고 지었다.

    그 외의 환경변수는 예제에 나와 있는 데로 하면 된다.

    지역언어설정 환경변수 NLS_LANG은 모든 인스톨이 끝나고 설명하도록 하겠다.

환경변수 갱신

    위와 같이 .profile내용을 변경하였다면

      # . .bash_profile 혹은
      # source .bash_profile 하여 환경변수 내용을 업데이트한다. 또는 oracle계정으로 다시 로그인한다.

 

다. 실제적인 Oracle 의 설치

    1. 인스톨러 실행

      ㄱ) oracle로 로그인 한다. - 절대 root로 인스톨로를 실행하면 안된다.
      ㄴ) oracle 설치 디렉토리로 이동
           # cd /usr/src/ora/orainst
      ㄷ) orainst를 실행한다.
           # ./orainst 를 실행한다.

    화면에서 [TAB]키, 화살표키, 스페이스 바를 이용하여 항목을 선택할 수 있다.

    2. 검은 배경의 설치화면이 나오면 Custom Install을 선택한다.

    3. 처음 설치하는 것이므로, (o) Install, Upgrade, or De-Install Software을 선택한다.

    4. 새롭게 인스톨 할 것이므로  Install New Product - Create DB Objects을 선택한다.

    5. Mount Point를 설정한다. root user로 할 일 5. 번에서 설정한 것처럼 mount point를
        /home/oracle로 설정한다.

    6. .bash_profile에서 설정한 것처럼 $ORACLE_HOME 디렉토리를 설정한다.

    7. ORACLE_BASE 와 ORACLE_HOME을 설정한다.

    8. log 파일이 남을 위치를 설정한다.

    9. Install from CD-ROM을 선택하여야 한다.

    10. ORACLE_SID를 .bash_profile에서 설정한 것과 같이 linux로 선택한다.

    11. NLS 의 설정 - 여기에서는 일단 ALL language를 선택한다.

    12. install 이 끝이 난 후 root.sh을 실행하라는 메시지가 출력된다. 반드시 install 후에는
         root.sh을 실행하여야 한다.

    13. Software Asset Manager에서 설치한 부분을 선택한다.여기에서는 모든 부분을 설치
         한다고 가정을 한다.

    14. 13)에서처럼 Install을 선택한 후 몇 가지 사항에 대하여 OK를 한 후 OSOPER group (dba)
          를 설정한다.

    15. 생성할 DB Object를 선택한다. - Filesystem-Based Database을 선택한다.

    16. Database Mount Points를 정한다. 설치도중에 3개의 mount points를 기입하라고 하는데
         물리적으로 분리된 하드가 3개 존재하면 가장 좋지만 실제 PC에서는 힘든 일이다.
         이렇게 3곳으로 데이터를 분리하는 이유는 데이터베이스가 하드 디스크로의 읽기/쓰기를
         하는 과정에서 경합을 줄이고 에러 및 문제의 발생시 자연스런 복구를 위한 것이다.
         하지만 오라클 프로그램과 동일한 하드디스에 밖에 인스톨 할 공간이 없다면 여기에 모두
         동일한 경로를 적어주면 된다.

         필자도 오라클을 설치할 때  /home/oracle에 오라클 프로그램을 설치하고 데이터 파일을
         위한 3개의 마운트 포인트도 /home/oracle로 설정하였다.

    17. Character Set 설정 - 한글을 쓰기 위해서KO16KSC5601로 설정한다.

    18. National Character Set 설정

    19. System password 의 설정 (보통 manager라고 password를 입력한다. )

    20. sys password 의 설정 ( manager로 password를 설정. )

    21. dba password 의 설정 ( no라고 설정한다. )

    22. TNS Listener Password 의 설정

    23. Configure MTS and start SQL*Net listener 설정은 no로 한다.

    24. Control files 의 위치 확인.

    25. 기본적인 데이터베이스 관련 파일의 위치와 용량의 확인

    26.  JDBC 셋의 선택 (default로 선택을한다.)

    27. CTX Temporary Tablespace을 선택한다.

    28. CTX demo table을 설치할 것을 선택한 후에, Oracle Document를 설치할 것에 대하여
         셋팅한다. 디렉토리를 설정한 후 pdf, html, both 어떤 형식으로 설치할 것인지 묻는데
         그때에는 자신이 원하는 항목 중에서 한가지를 선택하면 된다.

    29. 이제 인스톨이 시작되기 시작하고 그래프가 올라가기 시작한다. 하염없이 기다리자 -_-;

    30. 설치완료 화면.

    31. 설치 검증
         설치가 모두 끝났다면 $ORACLE_HOME/orainst 디렉토리에 생성된 root.sh을 root 계정
         으로 실행 시킨다.

       ㄱ) root로 로그인한다.
       ㄴ) cd $ORACLE_HOME/orainst
       ㄷ) ./root.sh

      # ./root.sh
      - /etc/oratab 아래에 다음과 같은 내용이 추가되었다.

      *:/home/oracle//app/oracle/product/8.0.5:N
      linux:/home/oracle/app/oracle/product/8.0.5:N

 

라. Oracle Database 의 구동

    1. oracle user로 login.

    2. svrmgrl을 실행시킨 후 database를 가동한다.

      $ svrmgrl   - svrmgrl 의 실행

      SVRMGR> connect internal - internal 접속
      Connected.
      Oracle Server Manager Release 3.0.5.0.0 - Production

      (c) Copyright 1997, Oracle Corporation. All Rights  
           Reserved.

      Oracle8 Release 8.0.5.0.0 - Production
      PL/SQL Release 8.0.5.1.0 - Production

      SVRMGR> connect internal - internal 접속
      Connected.

      SVRMGR> startup;
      ORACLE instance started.
      Total System Global Area    4754704 bytes
      Fixed Size                         48400 bytes
      Variable Size                     4222976 bytes
      Database Buffers               409600 bytes
      Redo Buffers                     73728 bytes
      Database mounted.
      Database opened.

      SVRMGR> exit - svrmgrl 의 종료
      Server Manager complete.

    3. lsnrctl 명령을 이용하여 Oracle listener을 가동시킨다.
        - lsnrctl start : Oracle listener 의 가동
        - lsnrctl stop  : Oracle listener 의 멈춤
       $ lsnrctl start

    LSNRCTL for Linux: Version 8.0.5.0.0 - Production on 26-APR-99 21:56:51
    (c) Copyright 1997 Oracle Corporation.  All rights reserved.

    Starting /home/oracle/app/oracle/product/8.0.5/bin/tnslsnr: please wait...

    TNSLSNR for Linux: Version 8.0.5.0.0 - Production
    System paramete rfile is
    /home/oracle/app/oracle/product/8.0.5/network/admin/
    listener.ora
    Log messages written to
    /home/oracle/app/oracle/product/8.0.5/network/log/
    listener.log
    Listening on:
    (ADDRESS=(PROTOCOL=ipc)(DEV=6)(KEY=linux))
    Listening on:
    (ADDRESS=(PROTOCOL=ipc)(DEV=10)(KEY=PNPKEY))
    Listening on:
    (ADDRESS=(PROTOCOL=tcp)(DEV=11)(HOST=192.168.1.1)(PORT=1521))

    Connecting to
    (ADDRESS=(PROTOCOL=IPC)(KEY=linux))
    STATUS of the LISTENER
    ------------------------
    Alias                       LISTENER
    Version                   TNSLSNR for Linux: Version 8.0.5.0.0 - Production
    Start Date                26-APR-99 21:56:56
    Uptime                    0 days 0 hr. 0 min. 1 sec
    Trace Level              off
    Security                   OFF
    SNMP                      OFF
    Listener Parameter File  
    /home/oracle/app/oracle/product/8.0.5/network/admin/
    listener.ora
    Listener Log File        
    /home/oracle/app/oracle/product/8.0.5/network/log/
    listener.log
    Services Summary...
    extproc               has 1 service handler(s)
    linux         has 1 service handler(s)
    The command completed successfully

    - 오라클 리스너가 제대로 실행이 되지 않을 경우 listener.ora, tnsnames.ora을 알맞게
       편집한다.
     (/home/oracle/app/oracle/product/8.0.5/network/admin 위치하여 있다.)

    다음은 tcp/ip 프로토콜을 기준으로 하여서 listener.ora를 알맞게 편집한 것이다.

    #
    # Installation Generated Net8 Configuration
    # Version Date: Jun-17-97
    # Filename: Listener.ora
    #
    LISTENER =
    (ADDRESS_LIST =
    (ADDRESS= (PROTOCOL= IPC)(KEY= linux))
    (ADDRESS= (PROTOCOL= IPC)(KEY= PNPKEY))
    (ADDRESS= (PROTOCOL= TCP)(Host= 192.168.1.1)
    (Port= 1521))
    - database 가 설치되어 있는 ip를 적어준다.
    )
    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (GLOBAL_DBNAME= 192.168.1.1.)
    - database 가 설치되어 있는 ip를 적어준다.
    (ORACLE_HOME=
    /home/oracle/app/oracle/product/8.0.5)
    (SID_NAME = linux)
    - linux sid , 설치도중 적어준 sid를 적어준다.
    )
    (SID_DESC =
    (SID_NAME = extproc)
    (ORACLE_HOME =
    /home/oracle/app/oracle/product/8.0.5)


    (PROGRAM = extproc)
    )
    )
    STARTUP_WAIT_TIME_LISTENER = 0
    CONNECT_TIMEOUT_LISTENER = 10
    TRACE_LEVEL_LISTENER = OFF

    #
    # Installation Generated Net8 Configuration
    # Version Date: Oct-27-97
    # Filename: Tnsnames.ora
    #  
    extproc_connection_data =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = IPC)(KEY = linux))
    (CONNECT_DATA = (SID = extproc))
    )
    linux =
    - oracle alias
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host= 192.168.1.1)
    (Port= 1521))
    - database 가 설치되어있는 database 의 ip
      (CONNECT_DATA = (SID = linux))
    - oracle sid
    )

    linux_BEQ =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = BEQ)(PROGRAM =
    /home/oracle/app/oracle/product/8.0.5)
    (argv0 = oraclelinux)
    (args = ‘(DESCRIPTION =
    (LOCAL=YES)(ADDRESS=(PROTOCOL=BEQ)))’)
    (envs =
    ‘ORACLE_HOME=/home/oracle/app/oracle/product/8.0.5,ORACLE_SID=linux’)
    )
    )

    4. 이제 다시 lsnrctl start 명령으로 실행하여 Oracle listener을 실행한다.
        이제 sqlplus을 실행하여 접속이 되나 확인을 하자. test 용으로 id : scott password : tiger
        가 제공됨을 알 수 있다. 이미 설치 중에 system과 sys의 password는 직접 입력하였으므
        로, system 혹은 sys로 접속이 가능한지 확인할 수 있다.

    5. sqlplus로 접속이 확인되었으면 이제 listener을 종료한 후 database를 종료시켜 보자.

    - listener 의 종료
    $ lsnrctl stop

    LSNRCTL for Linux: Version 8.0.5.0.0 - Production on 26-APR-99 22:18:35

    (c) Copyright 1997 Oracle Corporation.  All rights reserved.

    Connecting to
    (ADDRESS=(PROTOCOL=IPC)(KEY=linux))
    The command completed successfully

    - oracle database 의 shutdown
    $ svrmgrl
    Oracle Server Manager Release 3.0.5.0.0 - Production

    (c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

    Oracle8 Release 8.0.5.0.0 - Production
    PL/SQL Release 8.0.5.0.0 - Production

    SVRMGR> connect internal
    Connected.
    SVRMGR> shutdown
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SVRMGR> exit
    Server Manager complete.

    $

 

마. Oracle Database 의 사용자 등록

    system/manager라는 Oracle 사용자 계정은 UNIX시스템에서의 root를 사용하는 것과 유사하기 때문에 우리는 문제를 발생시키는 것을 최소화하기 위해 되도록 적은 권한을 갖는 사용자를 생성할 필요가 있다.

    SQL*PLUS에 연결하고 사용자를 생성한다.

    $ sqlplus system/manager

    SQL*Plus: Release 8.0.5.1.0 - Production

    Copyright (c) Oracle Corporation 1997.  All rights reserved.

    Connected to:
    Oracle8 Server Release 8.0.5.0.0 - Production Release
    PL/SQL Release 8.0.5.0.0 - Production

    SQL> create user <user> identified by <psw>
    2  default tablespace users
    3  temporary tablespace temp;

    User created.
    SQL> grant connect, resource to <user>

    Grant succeeded.

    SQL> exit

    Disconnected from Oracle8 Server Release 8.0.5.0.0 -
    Production Release
    PL/SQL Release 8.0.5.0.0 - Production

    시스템에 새로운 사용자계정을 생성하였기 때문에 새로운 계정을 가지고 시스템에 로그인 할수 있다. Oracle 데이터베이스에 로그인 하기 위해서는 다음과 같다.

    $ sqlplus <user>/<password>

    이 부분이 에러 메시지 없이 수행된다면, 성공적으로 Oracle 데이터베이스를 설치한 것이다.

 

바. Oracle 데이터 베이스의 자동 실행

    Oracle 데이터베이스의 자동 시작과 중지는 Oracle에서 제공하는 파일인 dbstart와 dbstop를 이용하여 설정할 수 있다. 이러한 파일들은 etc/oratab 파일의 존재여부에 의존한다.

    /etc/oratab 파일의 형식은 다음과 같다.

    SID:ORACLE_HOME:AUTO

설정  예

    #
    # This file is used by ORACLE utilities.  It is created by root.sh
    # and updated by the Oracle8 and SQL*Net install procedures.
    #
    # A colon, ‘:’, is used as the field terminator.  A new line terminates
    # the entry.  Lines beginning with a pound sign, ‘#’, are comments.
    #
    # Entries are of the form:
    # $ORACLE_SID:$ORACLE_HOME:<N|Y>:
    #
    # The first and second fields are the system identifier and home
    # directory of the database respectively.  The third field indicates
    # to the dbstart utility that the database should, “Y”, or should not,
    # “N”, be brought up at system boot time.
    #
    # Multiple entries with the same $ORACLE_SID are not allowed.
    #
    #
    linux:/oracle8/app/oracle/product/8.0.5:Y

    init.d & rc.d

    리눅스 시스템의 시작과정이나 종료과정을 변형하여 데이타베이스를 시작시키고 종료 시킬 수 있다. 이것은 매우 쉽지만, 어떠한 Linux(slackware, debian, redhat, etc)시스템을 사용하느냐에 따라  변경될 수 있다는 것을 필자는 지적한다. 이 문서에서는 Redhat Linux 5.2 에서 동작하는 예를 보여줄 것이다. 자신의 Linux 시스템에 따라 수정하기 위해서는 자신의 Linux 시스템 문서 자료를 참고한다. 우선, 우리는 /etc/rc.d/init.d 디렉토리에 있는 dbshut와 dbstart를 실행할 스크립트를 생성할 필요가 있다.

    #!/bin/sh
    #
    # /etc/rc.d/init.d/oracle
    # Description: Starts and stops the Oracle database and listeners
    # See how we were called.

    case “$1” in
    start)
     echo -n “Starting Oracle Databases: “
     echo “----------------------------------------” >> /var/log/oracle
     date +”! %T %a %D : Starting Oracle Databases as part of system up.”  >> /var/log/oracle
     echo “--------------------------------------------” >> /var/log/oracle
     su - oracle -c dbstart >> /var/log/oracle
     echo “Done.”
     echo -n “Starting Oracle Listeners: “
     su - oracle -c “lsnrctl start” >> /var/log/oracle
     echo “Done.”
     echo “”
     echo “--------------------------------------------” >> /var/log/oracle
     date +”! %T %a %D : Finished.” >> /var/log/oracle
     echo “--------------------------------------------” >> /var/log/oracle
     touch /var/lock/subsys/oracle
     ;;
    stop)
     echo -n “Shutting Down Oracle Listeners: “
     echo “-----------

    ---------------------------------” >> /var/log/oracle
     date +”! %T %a %D : ShutDown Oracle Databases as part of system down.” >> /var/log/oracle
     echo “--------------------------------------------” >> /var/log/oracle
     echo “Done.”
     rm -f /var/lock/subsys/oracle
     echo -n “Shutting Down Oracle Databases: “
     su - oracle -c dbshut >> /var/log/oracle
     echo “Done.”
     echo “”
     echo “--------------------------------------------” >> /var/log/oracle
     date +”! %T %a %D : Finished.” >> /var/log/oracle
     echo “-------------------------------------------” >> /var/log/oracle
     ;;

    restart)
     echo -n “Restarting Oracle Databases: “
     echo “-------------------------------------------” >> /var/log/oracle
     date +”! %T %a %D : Restarting Oracle Databases as part of system up.” >> /var/log/oracle
     echo “-------------------------------------------” >> /var/log/oracle
     su - oracle -c dbstop >> /var/log/oracle
     su - oracle -c dbstart >> /var/log/oracle
     echo “Done.”
     echo -n “Restarting Oracle Listeners: “
     su - oracle -c “lsnrctl stop” >> /var/log/oracle
     su - oracle -c “lsnrctl start” >> /var/log/oracle
     echo “Done.”
     echo “”
     echo “--------------------------------------------” >> /var/log/oracle
     date +”! %T %a %D : Finished.” >> /var/log/oracle
     echo “-------------------------------------------” >> /var/log/oracle
     touch /var/lock/subsys/oracle
     ;;

    *)

    echo “Usage: oracle {start|stop|restart}”
    exit 1
    esac

    이 파일이 실제적으로 정확히 당신의 시스템에서  데이터베이스를 중지하고 실행시키는지를 확인해야 한다. 에러메세지를 위한 /var/log/oracle인 log 파일을 확인하라.
    다음 명령들은 실행수준 2,3,4에 해당하는 데이테베이스를 실행시는 것을 확인 시켜줄 것이다.

    $ ln -s ../init.d/oracle /etc/rc.d/rc2.d/S99oracle
    $ ln -s ../init.d/oracle /etc/rc.d/rc3.d/S99oracle
    $ ln -s ../init.d/oracle /etc/rc.d/rc4.d/S99oracle

    시스템을 재 부팅하거나, 재 실행 시킬 때에 데이터베이스를 중지시키기 위해서 우리는 다음과 같은 연결(link)이 필요한다.

    $ ln -s ../init.d/oracle /etc/rc.d/rc0.d/K01oracle          # Halting
    $ ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle          # Rebooting

 

마치는 글

    이상으로 간략하게나마 Linux 상에서의 Oracle 데이터베이스 설치와 구동법에 대해서 알아보았다.
    그림과 함께 좀 더 명확한 설치법을 소개해 줄 수도 있었지만, 이제 간단한 설치법 정도는 기타 책이나 오라클사 세미나에 가면 쉽게 구할 수 있으므로 기본 설치법에 사용자 등록, 자동 시작/종료를 추가해 첫 글을 마친다. 다음에는 간단한 sqlplus 사용법, Oracle SQL, pro-c 에대해서 알아보고 마지막으로 PHP3와 연동하는 것으로 이 글을 마칠까 한다.




▲ top

home으로...

Posted by 1010
02.Oracle/DataBase2008. 7. 18. 11:01
반응형
ORACLE DB AUTO STARTUP/SHUTDOWN ON RedHat Linux 8.0

구경탁 jinuxer@yahoo.co.kr

1차수정 : 2002년 11월 04일

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

이 자료는 O/S startup 시에 Oracle RDBMS 서비스를 자동으로 startup하는 방법에 대한 자료이다.

Oracle RDBMS 서비스를 startup하기위해 $ORACLE_HOME/bin/dbstart를 사용할 수 있고, Oracle RDBMS 서비스를 shutdown하기위해 $ORACLE_HOME/bin/dbshut를 사용할 수 있다.

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

1. /etc/rc.d/rc.local Boot Time Script 이용



첫번째 방법은 System Boot Time때에 Oracle RDBMS를 자동적으로 서비스를 하기위해서 /etc/rc.d/rc.local에 $ORACLE_HOME/bin/dbstart를 추가하면된다.



# cd /etc/rc.d/

# vi rc.local
Posted by 1010