2014. 10. 24. 16:47

1. 오라클 서버(oracle server)와 관련된 프로세스(process)


유저 프로세스(User process)

- 사용자가 작성한 sql 문을 서버 프로세스(server process) 로 전달, 결과를 가져오는 프로세스


서버 프로세스(server process) 

- 유저 프로세스(user process)가 전해준 sql문을 실제 수행하는 프로세스


백그라운드 프로세스(background process)

- 오라클 서버(oracle server)가 시작되면 자동으로 시작, 운영과 유지를 담당하는 프로세스


백그라운드 프로세스(background process) 종류   

필수 background process

선택적 background process (특정 기능을 사용할 때만 생성됨)


2 .각 프로세스의 시작과 종료


- 유저 프로세스, 서버 프로세스(User process, Server process) : 사용자가 접속하면 생성, 접속을 종료하면 사라짐

- 필수 백그라운드 프로세스(background process) : 오라클 서버(oracle server)가 시작되면 시작, 서버(server)가 종료되면 종료됨


3. 필수 백그라운드 프로세스(background process)


1) DBWR(database Writer)

- 역할 

데이터베이스 버퍼 캐쉬(database buffer cache)에서 변경 완료 후 

저장되어야 하는 블록(Dirty Block)을 데이터 파일로 저장하는 작업을 수행하는 프로세스(process)


-DBWR이 DB Buffer Cache의 Dirty buffer의 내용을 데이터 파일에 내려쓰는 경우


1

 체크포인트(check point) 신호가 발생했을 때

2

 더티 버퍼(Dirty buffer)가 임계값을 지났을 때(1/3) 

 3 

 타임 아웃(Time out)이 발생했을 때(3초 마다)

 4

 RAC ping이 발생했을 때 

 5

 테이블스페이스(Tablespace)가 읽기전용(read only) 상태로 변경될 때

 6

 테이블스페이스(Tablespace)가 오프라인(offline) 될 때 

 7

 테이블스페이스(Tablespace)가 begin backup 상태가 될 때  

 8

 Drop table이나 Truncate table 될 때

 9

 Direct Path Read/Write가 진행될 때 

 10

 일부 병행 쿼리(Parallel query) 작업이 진행될 때 


*7. hot backup, begin backup, online backup 모두 같은 말임


- DBWR 백드라운드 프로세스(background process)는 기본적으로 DBW0 1개가 작동함

   I/O 가 많아 추가로 더 필요할 경우 최대 10개(DBW0~DBW9) 를 동시에 사용해 성능을 높일 수 있음

   단, 단일 프로세스의 시스템에서는 사용 못 함


- DBWR 개수 확인하기


SYS>show parameter processes;


NAME                                 TYPE        VALUE

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

aq_tm_processes                      integer     0

db_writer_processes                  integer     1

gcs_server_processes                integer     0

global_txn_processes                 integer     1

job_queue_processes                 integer     1000

log_archive_max_processes        integer     4

processes                                 integer     150





2) LGWR(Log Writer)

- 작동순서, 역할

데이터 변경 -> 변경내용의 정보들을 redo log buffer에 기록 -> redo log file에 저장

데이터 변경이 되면 서버 프로세스가 변경내역(Change vector)을 redo log buffer에 기록함

Redo log buffer에 있는 내용을 디스크에 있는 redo log file로 저장하는 역할을 함

 

- LGWR이 Redo log buffer에 있는 내용을 디스크의 redo log file로 저장하는 경우


1

 commit이 발생했을 때 

2

 redo log buffer 내용이 1/3이 찼을 때  

3

 변경량이 1M가 되었을 때 

4

 3초마다 

 5 

 DBWR이 내려쓰기 전에 


- redo log file 저장 이유

redo log buffer은 메모리라서 서버가 꺼지면 내용이 날아갈 수 있기 때문에 

안전하게 하드디스크의 redo log file에 저장함 


수행원리

1. 데이터가 변경되는 경우(DDL이나 DML  수행시)

2. 항상 redo log buffer에 변경 내용을 먼저 기록 후(log ahead method 혹은 write-ahead라고 함)

3. database buffer cache에서 내용 변경

4. commit 

    디스크로 데이터를 저장하는 것이 아니라,

    redo log file을 저장하는 것임 

    

- commit 시 database buffer cache 의 내용을 저장하지 않고,

         redo log buffer의 내용을 redo log file에 먼저 저장하는 이유 :

   1. 저장시간을 단축 시킬 수 있음

데이터베이스 버퍼캐쉬의 블록 (database buffer cache의 block) 기본 8k (10g)

  변경 내용이 작다 하더라도 해당 블록은 전부 저장한다면 시간이 많이 걸림

   redo log buffer block의 크기(기본 512 byte)는 os별로 다르긴 하지만,   

   데이터베이스 버퍼캐쉬의 블록 (database buffer cache의 block)보다 훨씬 작기때문에 빨리 저장할 수 있음 

   (11g부터는 관리자가 redo log file 생성시 블록크기 선택 생성가능(512 byte, 1kb, 4kb)


 데이터베이스 버퍼캐쉬의 블록 (database buffer cache의 block) 을 저장할 때는

    데이터 파일의 원래 블록을 찾아서 덮어써야 하기 때문에 시간이 오래 걸림

    redo log file에 변경된 내용만 순서대로 쓰면 되기때문에 시간이 단축됨 


    2. 많은 사용자가 동시에 commit을 했을 때 LGWR의 group commit를 사용하면 I/O를 줄일 수 있음

     






























'DB > oralce' 카테고리의 다른 글

control file 다중화 실습  (0) 2014.10.26
oracle의 시작단계  (0) 2014.10.26
9 메모리 관리 기법  (0) 2014.10.24
6 redo log 관리하기  (0) 2014.10.21
4 oracle 시작하기와 종료하기  (0) 2014.10.20
Posted by 성장하는yw
2014. 10. 24. 14:42

오라클에서 사용하는 메모리 

- System Global Area(SGA)

- Program Global Area(PGA)



 

1. 8i 이전 버전에서의 메모리 관리기법

  • SGA, PGA 두 개의 메모리를 DBA가 수동으로 설정, 관리
  • SGA - 수동(static) , PGA - 수동 
  • static : 설정값 수정시 인스턴스를 재시작해야 적용

 

2. 9i 버전에서의 메모리 관리기법

  • SGA - 수동(dynamic) , PGA - 자동
  • DBA 'alter system set' 명령으로 특정 파라미터 값을 변경
  • dynamic : 설정값 수정시 인스턴스를 재시작 하지 않아도 즉시 적용 가능
  • 9.0.1 버전 : default buffer cache 값을 dynamic 하게 변경 가능
  • 9.0.2 버전 : shared pool, default buffer cache, large pool, java pol 값 변경 가능

, 모든 메모리의 합이 SGA_MAX_SIZE  설정된 값보다 작아야 함

-> 그렇지 않으면 사용자가 오라클으로 db 접속을 하지 못함

 

) shared pool 크기를 증가시키고 싶으면

     다른 파라미터의 값을 줄이고 난 다음 shared pool 의 크기를 늘려야 함

 

  • SGA 크기

     그래뉼(granule) :  오라클이 동적으로 메모리 할당시 쓰는 단위

  • 9i 

           - SGA 전체 크기가 128M 이하 : 1 그래뉼 = 4MB

           - SGA 전체 크기가 128M  초과 : 1 그래뉼 = 16MB         

  • PGA 수동모드 -> 자동관리모드로 변환 방법
    • WORKAREA_SZIE_POLICY 값을 Auto 로 변경 : 기본값
    • Manual 로 변경 : 8i 버전처럼 PGA 구성하는 파라미터값을 수동으로 사용가능

  • PGA_AGGREGATE_TARGET : PGA 전체 크기 지정 가능

실제 서버프로세스가 사용할 수 있는 최대 PGA 크기 조회(히든 파라미터, PGA_MAX_SIZE)

PGA 관련 hidden parameter 값을 조회하는 쿼리문


SYS>col ksppinm for a40

SYS>col ksppstvl for a40

SYS>SELECT a.ksppinm, b.ksppstvl

  2  FROM x$ksppi a, x$ksppsv b

  3  WHERE a.indx=b.indx

  4  AND a.ksppinm like '%_size';


KSPPINM                                  KSPPSTVL

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

sga_max_size                             423624704

_NUMA_pool_size                        Not specified

_realfree_heap_max_size              32768

_pga_large_extent_size                 1048576

_uga_cga_large_extent_size           262144


... 중간 생략

_pga_max_size                            209715200  - 1 개의 프로세스가 사용할 수 있는 최대 pga 크기(byte)
     직렬 처리시 사용될 값 + 병렬 처리시 사용될 값
_smm_auto_min_io_size                 56
_smm_auto_max_io_size                248
_smm_min_size                            167
_smm_max_size                           33587        - 1개의 프로세스가 직렬처리시 사용할 수 있는 최대 pga(KB)
_smm_px_max_size                       83968       - 1개의 프로세스가 병렬처리시 사용할수 있는 pga(KB)
_smm_retain_size                           0
_smm_advice_log_size                    0

... 중간 생략

_asm_max_redo_buffer_size             2097152
_ash_size                                       1048618
_capture_buffer_size                         65536
max_dump_file_size                          unlimited
_trace_pool_size

167 rows selected.



SGA 총 크기 조회(11g)

SYS>SELECT name, bytes/1024/1024 MB
  2  FROM v$sgainfo
  3  WHERE name='Maximum SGA Size';

NAME                                     MB
-------------------------------- ----------
Maximum SGA Size                 403.089844



그래뉼 사이즈 조회

SQL> SELECT name, bytes/1024/1024 MB
  2  FROM v$sgainfo
  3  WHERE name='Granule Size';

NAME                                     MB
-------------------------------- ----------
Granule Size                              4


조회한 그래뉼 사이즈로 각 백그라운드 프로세스들이 메모리를 할당받아 사용함


각 백그라운드 프로세스의 실제 사용하는 내역을 조회


[oracle@localhost ~]$ pmap `pgrep -f pmon`

3732:   ora_pmon_testdb

00110000   2172K r-x--  /app/oracle/product/11g/lib/libnnz11.so

0032f000    184K rwx--  /app/oracle/product/11g/lib/libnnz11.so

0035d000      8K rwx--    [ anon ]

0035f000    120K r-x--  /app/oracle/product/11g/lib/libdbcfg11.so

0037d000      8K rwx--  /app/oracle/product/11g/lib/libdbcfg11.so


..... 중간 생략


38000000   4096K rwxs-  /dev/shm/ora_testdb_5341196_96

38400000   4096K rwxs-  /dev/shm/ora_testdb_5341196_97

38800000   4096K rwxs-  /dev/shm/ora_testdb_5341196_98

38c00000   4096K rwxs-  /dev/shm/ora_testdb_5341196_99

39000000   4096K rwxs-  /dev/shm/ora_testdb_5341196_100

39400000   4096K rwxs-  /dev/shm/ora_testdb_5341196_101

bf85d000     84K rwx--    [ stack ]

 total   578232K


/dev/shm/ora_ 메모리가 4MB씩 매핑되어 있는 것을 확인 할 수 있음


위 명령어는 다른 백그라운드의 개별 사용내역도 전부 출력됨


홑따옴표 아니고 키보드 왼쪽의 첫번째 ` 마크임



'DB > oralce' 카테고리의 다른 글

oracle의 시작단계  (0) 2014.10.26
3 oracle background processes  (0) 2014.10.24
6 redo log 관리하기  (0) 2014.10.21
4 oracle 시작하기와 종료하기  (0) 2014.10.20
오라클 관리실무  (0) 2014.10.17
Posted by 성장하는yw
2014. 10. 21. 14:43

*  redo 관련 이름 뜻

만약 발생할 장애를 대비해 변경(DDL,DML,TCL 등 ) 전의 내용과 변경 후의 내용을 모두 기록해 둠


redo                  :  다시 한다.

redo log buffer    :  이 내용이 기록되는 메모리  

redo log file        :  이 내용이 기록되는 리두로그파일

redo log             :  변경되는 내용을 모두 기록, 장애를 대비하는 기능


 

* write log ahead

Redo log에 기록한 후, 실제 데이터를 변경하는 것

- Redo log에 먼저 기록하는 이유?

redo log에 복구 관련 중요 정보가 저장되어 있기 때문



* log force at commit

commit 요청 - 모든 redo record 들을 redo log file에 저장 - commit 완료 

redo log file에 저장하지 않으면 commit 완료 안 됨



* 오라클의 보완 기술

배경 : 대량의 데이터 변경 후 commit 이 한꺼번에 수행 -> 성능에 악영향을 미침


-Delayed commit(지연된 커밋) 

-Group commit(그룹커밋) : 아주 짧은 시간동안 모아서 한꺼번에 commit을 수행

-비동기식 커밋 : LGWR이 관련된 redo log를 다 기록 후  dbwr이 데이터를 기록(동기식 커밋)하는데 

성능문제 때문에 이것이 나옴



* redo log 상태

- current  : 현재 LGWR이 내용을 기록하고 있는 상태

- active   : redo log file 내용이 DB buffer cache 에서 data file이 저장이 되지 않은 상태,

                지워지면 안되는 상태임

- inactive : redo log file 의 내용이 data  file 에 모두 저장이 된 상태, 

                삭제되어도 된다는 의미



* redo log file을 삭제하고 싶다면?

redo log file의 상태(status) 를 inactive 를 만들고 난 다음

os 명령어로 해당 경로 위치로 rm 명령어로 삭제해야 한다. 

절대로!!!! 이런 변경 없이 os에서 redo log file을 삭제하면 안됨 


'DB > oralce' 카테고리의 다른 글

3 oracle background processes  (0) 2014.10.24
9 메모리 관리 기법  (0) 2014.10.24
4 oracle 시작하기와 종료하기  (0) 2014.10.20
오라클 관리실무  (0) 2014.10.17
sql 시험  (0) 2014.10.15
Posted by 성장하는yw
2014. 10. 20. 21:27

startup 명령어 입력


nomount 단계 : 오라클 서버프로세스가 parameter file 읽음

     파라미터 값을 읽고, 인스턴스를 생성함

     RAM 에 인스턴스가 생성되어 작업할 수 있는 메모리 공간확보됨

     Alert log 파일을 열어 로깅을 시작


*alert log : 인스턴스가 시작되어 운영,종료까지 중요한 내용들을 모두 저장하고 있는 파일

- 10g : $ORACLE_BASE/admin/SID/bdump/alert_SID.log

- 11g : $ORACLE_BASE/diag/rdbms/SID/SID/trace/alert_SID.log

                             예)testdb로  SID를 준 경우의 경로

                             /app/oracle/diag/rdbms/testdb/testdb/trace/alert_testdb.log


아래 화면은 11g 기준일 때 조회한 결과이다.



mount 단계 : control file의 내용을 읽음

                   control file의 위치 정보는 parameter file에 기록되어 있음

 database의 이상유무를 확인함


*control file 내용 : database 전체의 상태정보


Instance crash 가 발생하면??

- smon 이 Instance recovery 수행시 복구 내용을 redo log file에서 찾고, 복구를 한다.

- 복구하려는 내용이 redo log file에 없거나 

  archived log file에 있을 경우는

  smon이 Instance recovery 를 수행하지 못함 

  관리자가 직접 revocery를 수행해야하는 media recovery 상태가 됨


open 단계 : mount 단계에서 Instance crash가 발생하지 않으면 open 단계가 되고, 정상 DB가 수행됨


* 한 번에 nomount / mount 에서 open 상태로 못간다.

   각 단계의 파일을 검사하고 난 후 상위 단계로 가야하기 때문이다.


sql문을 실행하면 일단 서버프로세스(server process)가 실행된다.


*오라클의 철칙! 

현재 사용하고 있는 파일을 복사, 이동하면 안된다. 

운영중인 DB에서 작동중인 컨트롤 파일을 복사하면 DB블록이 깨진다. 



Parameter File(초기화 파라미터 파일)


-파라미터란?

어떤 값을 오라클에게 전해주기 위해 사용하는 변수 같은 역할을 하는 것


- 묵시적 파라미터 : 관리자가 지정해주지 않은 경우 자동으로 기본값을 가지는 파라미터

- 명시적 파라미터 : 관리자가 직접 지정해 주어야만 값을 가지는 것

 


- 파라미터 파일 :  파라미터를 모아 놓은 파일

       SGA 생성시 참조하는 설계도 같은 역할 


항목 / 파일 

 pfile

정적 파라미터 파일

spfile 

동적 파라미터 파일

파일이 존재하는 기본 경로 

 $ORACLE_HOME/dbs(두 파일 모두 공통)

 파일 이름

initSID.ora

SpfileSID.ora 

내용 변경 

관리자(사람) 

서버 프로세스 

 파일 형태

Text(os 편집 O) 

Binary (os 편집 X)


- pfile과 spfile은 장단점이 다르므로 다양하게 사용되며, 

   pfile이 오래되서 좋지 않고 spfile이 좋다는 생각은 잘못된 것이다. 


- 버전에 따른 파일 

pfile   : 8i 는 spfile 이 없고, pfile만 있음

spfile  : 9i 부터는 spfile, pfile 모두 있음

           두 개의 파일이 있을 때, 항상 spfile 내용만 사용

          주의) spfile을 변경하고 싶으면 spfile을 변경해야 한다. 

                  pfile을 변경하고 적용안된다고 할 수 있으니 조심할 것 


- 파라미터 파일의 경로와 이름

주의) pfile/spfile은 정해진 경로에 있어야 정상 작동하며, 

        경로가 아니거나 이름이 다르면 에러 발생



- 파라미터 파일의 내용 확인


vi spfiletestdb.ora



spfile 은 바이너리 파일

절대로 사용자가 수정해서는 안된다. 

wq! 로 저장을 하거나 수정을 하면 파일이 깨졌다고 인식한다. 



vi inittest.ora





'DB > oralce' 카테고리의 다른 글

9 메모리 관리 기법  (0) 2014.10.24
6 redo log 관리하기  (0) 2014.10.21
오라클 관리실무  (0) 2014.10.17
sql 시험  (0) 2014.10.15
2장 내가 못푼 쿼리문 - 설명을 덧붙일 것  (0) 2014.10.15
Posted by 성장하는yw
2014. 10. 17. 20:09

오라클 혹은 오라클 서버

- instance : 메모리를 오라클에서는 인스턴스라고 말하며, 작업공간

- SGA

- Background Process


- database : 데이터를 저장하는 데이터 파일들을 모두 부르는 말

- data files : 데이터가 저장되는 데이터 파일들

- control files : DB전체의 관리정보가 들어있는 파일들

- redo log files : 장애 복구 시에 사용되는 파일



instance 가 생성되는 과정

1 .

라클 데이터베이스가 종료되어 있는 상태라고 가정, 

관리자가 DB에 접속해 오라클을 시작(startup) 한다.


2. 

startup 요청을 받은 최초의 오라클서버프로세스(oracle server process)가 

초기화 파라미터파일(pfile 이나 spfile)에 있는 설정을 참고

OS 커널(kernel)에게 공유 메모리를 사용할 수 있도록 할당 요청


* 컴퓨터의 모든 하드웨어를 관장하는 것 : os의 kernel (RAM을 사용해 오라클 작업을 하기 위해서)

* 파라미터 파일 : SGA 부분을 만들 때, 참조되는 건축에서의 설계도와 같은 파일


3.

os 커널(kernel)은  오라클서버프로세스(oracle server process)에서 메모리 할당 요청을 받은 후,

os 커널(kernel)의 파라미터 파일(리눅스 : /etc/sysctl.conf 솔라리스 /etc/system) 을 조회,

파일에 설정되어 있는 내역으로 공유메모리(SGA)를 할당해 준다

os 커널(kernel)은 이 파일 내에 있는 세마포어 설정값 등 다른 프로그램에서 

오라클 공유메모리를 사용할 수 없도록 관리해준다.


* 커널의 공유메모리 관리 

RAM이란 모든 서버프로세스(server process)들이 동시에 사용하는 공간이므로

오라클이 사용하고 있다 하더라도 다른 프로그램이 오라클의 공유메모리를 사용하려고 시도할 수 있다. 

하나의 메모리 블록을 여러 프로그램이 동시에 중복사용하는 상황을 막기위해 

os 차원에서 제공하는 세마포어와 몇가지 kernel의 값이 있다. 



4. 

SGA 최초 생성은 오라클서버프로세스(oracle server process)에 의해 요청되어 만들어졌지만

만들어진 후에는 os 커널(kernel) 이 관리 한다.


SGA의 종료 :

생성을 요청한 오라클서버프로세스(oracle server process)가 종료되어도 되지 않고,

인스턴스(instance)가 종료되어야 SGA가 공유메모리에서 사라짐


5.






                 

'DB > oralce' 카테고리의 다른 글

6 redo log 관리하기  (0) 2014.10.21
4 oracle 시작하기와 종료하기  (0) 2014.10.20
sql 시험  (0) 2014.10.15
2장 내가 못푼 쿼리문 - 설명을 덧붙일 것  (0) 2014.10.15
계층형쿼리  (0) 2014.10.14
Posted by 성장하는yw
2014. 10. 15. 20:39

1.panmae테이블을 사용하여 아래와 같이 출력하세요





2.

3장 그룹함수 35p

professor 테이블에서 각 교수들의 급여를 구하고 각 교수의 급여액이 전체 교수의 급여 합계에서 차지하는 비율을 출력





5장 ddl


emp 테이블에서 empno, ename, sal 컬럼을 가져와 

emp10 이름으로 테이블 생성, 

데이터는 가져오지 않도록 하는 쿼리문



4

5장 ddl 13p


test10 테이블에 address 컬럼을 추가하는 쿼리

address는 varchar2(30) 이고, 기본값으로 "서울"이 자동입력 되도록 한다.




5장 ddl 13p


4번에서 만든 address 컬럼의 이름을 location 으로 변경하는 쿼리




6

7장 제약조건 4p


emp4 테이블의  no 컬럼이  emp2 테이블의  empno 컬럼의 값을 참조하도록 참조키 제약조건을 

설정하세요.(emp4 테이블이 자식테이블입니다)



7

7장 제약조건 14p


test10  테이블의 name 컬럼에 만들어져 있는 unique 제약조건을 사용안함으로 변경,

또, 해당테이블의 데이터에 DML 명령도 실행되지 않도록 변경하는 쿼리

(제약조건 이름은 test10_name_uk 입니다)




8

7장 제약조건 19~20p


7번에서 사용 안 함으로 설정한 제약조건을 사용함으로 변경,

기존에 있던 내용과 새로 들어올 내용 모두를 체크하는 옵션으로 변경하세요

그리고 문제가 되는 데이터들은 sys.exceptions 테이블에 저장하도록 하세요



9

7장 제약조건 25p


emp테이블에 설정되어 있는 제약조건 중 자신이 생성한 제약 조건들을 

테이블명, 컬럼명, 제약조건명으로 검색하는 쿼리를 쓰세요



10

3장 복수행함수 38p


emp 테이블의 hiredate 컬럼을 참조, 아래와 같이 월별로 입사인원수를 출력하세요





11

3장 복수행함수 38p





12

3장 복수행함수 38p







13

3장 복수행함수 41p




14

3장 복수행함수 40p





15

9장 view 9p 인라인뷰

 





16

9장 view 10p 인라인뷰






17

9장 view 16p 연습문제




18

9장 view  연습문제 5번




19

10장 subquery 7p






20

10장 sub query 9p




21

11장 sequence와 synonym1~2p




22

7장 제약조건 3p


아래 조건에 만족하는 테이블을 생성하세요

*테이블 이름은 emp3

*no 컬럼은 number 4로 하고 primary key 이며

 제약조건명은 emp3_no_pk로 하세요

*name 컬럼은 varchar2 10바이트로 하고 not null로 설정하고

제약조건명은 emp3_name_nn 으로 하세요

*deptno 컬럼은 varchar2(6)으로 하고

deptno 테이블의 dcode 컬럼을 참조하는 foreign key로 설정하세요




23

11장 sequence와 synonym12p - 시너님 관련


Scott 사용자의 department 테이블의 동의어를 d2 로 생성하되 

모든 사용자들이 사용할 수 있도록 생성하세요

(Scott 사용자가 동의어를 생성할 수 있도록 권한도 없다고 가정하고 권한도 부여하세요)





24

2장 단일행함수 45p





25

2장 단일행함수 56p 정규식함수


reg_test 테이블에서 소문자가 들어있는 모든 행을 제거한 후 아래와 같이 표현하세요




26

2장 단일행함수 60p


reg_test 테이블에서 ? 가 들어있는 모든 행을 아래와 같이 출력하세요




27

2장 단일행함수 65p 정규식부분

맨 아래예제 변형문제


reg_test2 테이블에서 ip주소에서 두번째 .을 *로 바꾸어 출력하세요





28

2장 단일행함수 67p


사용자로 부터 id 값을 입력 받은 후 student 테이블에서 studno, name, id 를 출력하되

입력된 id 값은 ' 75 TRUE(첫 글자 공백과 가운데 공백, 대문자) 로 입력했을 때

공백을 모두 제거하고, 영어는 소문자로 변환해 조회하는 쿼리를 쓰세요



29

2장 단일행함수 71p 정규식 부분


교수테이블(professor )테이블에서 홈페이지(hpage) 주소가 있는 교수들만 조사해서 아래의 화면

처럼 나오게 출력하세요.






30


12장 계층형 쿼리 8p




'DB > oralce' 카테고리의 다른 글

4 oracle 시작하기와 종료하기  (0) 2014.10.20
오라클 관리실무  (0) 2014.10.17
2장 내가 못푼 쿼리문 - 설명을 덧붙일 것  (0) 2014.10.15
계층형쿼리  (0) 2014.10.14
plsql cursor 연습문제 정답  (0) 2014.10.14
Posted by 성장하는yw
2014. 10. 15. 09:45

select RPAD(ename, 9,substr('123456789',lengthb(ename)+1)) "RPAD"

from emp

where deptno=10;



select ename,replace(ename,substr(1,2),'**') "replace"

from emp

where deptno=10;



replace (문자열/컬럼명, '문자1', '문자2')

주어진 문자열이나 컬럼에서 문자1을 문자2로 표시한다. 


select empno, ename, hiredate

from emp

where to_char(hiredate,'MM') in ('01','02','03');


'DB > oralce' 카테고리의 다른 글

오라클 관리실무  (0) 2014.10.17
sql 시험  (0) 2014.10.15
계층형쿼리  (0) 2014.10.14
plsql cursor 연습문제 정답  (0) 2014.10.14
오라클 테스트 계정 scott lock 풀기  (0) 2014.09.29
Posted by 성장하는yw
2014. 10. 14. 22:03

계층형 쿼리

데이터 조회시 상하위 관계를 표시해 상하 관계를 파악하고자 할 때 사용한다. 


주요문법

select lpad(dname,level*6,'*") 부서명

from dept2

connect by prior dcode=pdept

start with dcode=0001;


lpad(dname,level*6) 부서명

dname 컬럼을 level*6 바이트 길이로 출력하고, 

왼쪽 빈자리는 *로 채워라


사장실은 최상위 레벨 1

1*6 바이트 = 6바이트

사장실 : 한글이라서 1글자에 2바이트 차지

그래서 그대로 사장실이라고 출력된다. 


경영지원부는 사장실 아래의 레벨 2

2*6 바이트 = 12 바이트

왼쪽 빈자리를 lpad의 * 로 채우고, 원래 경영지원부는 그대로 출력해준다.


level 이란?

오라클의 모든  sql에서 사용할 수 있는 것,

해당데이터가 몇 번째 단계인지 의미한다.


connect by prior 

각 행들이 어떻게 연결되어야 하는지 조건을 지정하는 부분이다. 

dcode=pdept의 조건을 주었다. 


prior?

해당 키워드가 설정되어 있는 컬럼에서 바로 이전의 데이터 값을 찾는데 사용된다.

사용시 prior 값을 어느 쪽에 주는지에 따라 결과값이 달라지므로 유의해야 한다.

 예)


start with dcode=1011;

dcode가 1011인 부서부터 출발해서 이전 행 값의 pdept 코드를 찾아서 부서명을 출력한다. 


'DB > oralce' 카테고리의 다른 글

sql 시험  (0) 2014.10.15
2장 내가 못푼 쿼리문 - 설명을 덧붙일 것  (0) 2014.10.15
plsql cursor 연습문제 정답  (0) 2014.10.14
오라클 테스트 계정 scott lock 풀기  (0) 2014.09.29
rac설치 raw device  (0) 2014.09.19
Posted by 성장하는yw
2014. 10. 14. 15:08

1번 문제 



2번 문제



3번 문제



'DB > oralce' 카테고리의 다른 글

2장 내가 못푼 쿼리문 - 설명을 덧붙일 것  (0) 2014.10.15
계층형쿼리  (0) 2014.10.14
오라클 테스트 계정 scott lock 풀기  (0) 2014.09.29
rac설치 raw device  (0) 2014.09.19
RAC 설치시 xhost 문제  (0) 2014.09.12
Posted by 성장하는yw
2014. 9. 29. 21:06

오라클을 설치하면 기본적으로 SCOTT 사용자 계정은 잠금 상태

잠겨있는 계정을 아래 명령어로 해제한 후 테스트 용도로 사용할 수 있다.

 

DBA권한(sysdba,sys계정)으로 접속

 

scott 계정의 락(lock)을 풀어주는 명령어

ALTER USER scott IDENTIFIED BY tiger ACCOUNT UNLOCK;

 

scott 계정으로 접속

CONN scott/tiger;

 

만약 scott 계정이 없다면,

아래와 같이 scott 유저를 새로 만들어주고,

기본테이블 및 데이터를 생성하면 된다.

 

scott user 계정 만들기

 

1. DBA권한으로 접속 후 scott 계정을 만들어준다.

 

CREATE USER scott IDENTIFIED BY tiger

DEFAULT TABLESPACE users

TEMPORARY TABLESPACE temp;

 


권한부여

GRANT connect, resource TO scott;

 

3 scott 계정으로 접속해서 스크립트 실행

 

CONN scott/tiger

@$ORACLE_HOME/sqlplus/demo/demobld.sql

 

*, demobld.sql 파일 경로가 오라클 버전마다 경로가 다르기 때문에

경로를 알면 그 경로를 써서 스크립트를 실행해주거나,

스크립트를 다운받은 후 실행시켜준다.

 

demobld.sql 파일다운로드

http://www.gurubee.net/files/sql/demobld.sql

demobld.sql Script Sample

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

DROP TABLE EMP;

DROP TABLE DEPT;

DROP TABLE BONUS;

DROP TABLE SALGRADE;

DROP TABLE DUMMY;

 

CREATE TABLE EMP

       (EMPNO NUMBER(4) NOT NULL,

        ENAME VARCHAR2(10),

        JOB VARCHAR2(9),

        MGR NUMBER(4),

        HIREDATE DATE,

        SAL NUMBER(7, 2),

        COMM NUMBER(7, 2),

        DEPTNO NUMBER(2));

 

INSERT INTO EMP VALUES

        (7369, 'SMITH',  'CLERK',     7902,

        sysdate,  800, NULL, 20);

         

INSERT INTO EMP VALUES

        (7499, 'ALLEN',  'SALESMAN',  7698,

        sysdate, 1600,  300, 30);

         

INSERT INTO EMP VALUES

        (7521, 'WARD',   'SALESMAN',  7698,

        sysdate, 1250,  500, 30);

         

INSERT INTO EMP VALUES

        (7566, 'JONES',  'MANAGER',   7839,

        sysdate,  2975, NULL, 20);

         

INSERT INTO EMP VALUES

        (7654, 'MARTIN', 'SALESMAN',  7698,

        sysdate, 1250, 1400, 30);

         

INSERT INTO EMP VALUES

        (7698, 'BLAKE',  'MANAGER',   7839,

        sysdate,  2850, NULL, 30);

         

INSERT INTO EMP VALUES

        (7782, 'CLARK',  'MANAGER',   7839,

        sysdate,  2450, NULL, 10);

INSERT INTO EMP VALUES

        (7788, 'SCOTT',  'ANALYST',   7566,

        sysdate, 3000, NULL, 20);

         

INSERT INTO EMP VALUES

        (7839, 'KING',   'PRESIDENT', NULL,

        sysdate, 5000, NULL, 10);

         

INSERT INTO EMP VALUES

        (7844, 'TURNER', 'SALESMAN',  7698,

        sysdate,  1500,    0, 30);

         

INSERT INTO EMP VALUES

        (7876, 'ADAMS',  'CLERK',     7788,

        sysdate, 1100, NULL, 20);

         

INSERT INTO EMP VALUES

        (7900, 'JAMES',  'CLERK',     7698,

        sysdate,   950, NULL, 30);

         

INSERT INTO EMP VALUES

        (7902, 'FORD',   'ANALYST',   7566,

        sysdate,  3000, NULL, 20);

         

INSERT INTO EMP VALUES

        (7934, 'MILLER', 'CLERK',     7782,

        sysdate, 1300, NULL, 10);

 

CREATE TABLE DEPT

       (DEPTNO NUMBER(2),

        DNAME VARCHAR2(14),

        LOC VARCHAR2(13) );

 

INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');

INSERT INTO DEPT VALUES (20, 'RESEARCH',   'DALLAS');

INSERT INTO DEPT VALUES (30, 'SALES',      'CHICAGO');

INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');

 

CREATE TABLE BONUS

        (ENAME VARCHAR2(10),

         JOB   VARCHAR2(9),

         SAL   NUMBER,

         COMM  NUMBER);

 

CREATE TABLE SALGRADE

        (GRADE NUMBER,

         LOSAL NUMBER,

         HISAL NUMBER);

 

INSERT INTO SALGRADE VALUES (1,  700, 1200);

INSERT INTO SALGRADE VALUES (2, 1201, 1400);

INSERT INTO SALGRADE VALUES (3, 1401, 2000);

INSERT INTO SALGRADE VALUES (4, 2001, 3000);

INSERT INTO SALGRADE VALUES (5, 3001, 9999);

 

CREATE TABLE DUMMY

        (DUMMY NUMBER);

 

INSERT INTO DUMMY VALUES (0);

 

COMMIT;

 

 

 

 전체내용 참고 사이트 : http://www.gurubee.net/lecture/2150

'DB > oralce' 카테고리의 다른 글

계층형쿼리  (0) 2014.10.14
plsql cursor 연습문제 정답  (0) 2014.10.14
rac설치 raw device  (0) 2014.09.19
RAC 설치시 xhost 문제  (0) 2014.09.12
설치시 참고  (0) 2014.09.01
Posted by 성장하는yw