5) password file
    - 특별한 권한을 가진 유저를 인정해주기 위한 파일 (ocm)
      (db를 올리고 내릴 수 있는 권한)

   * 패스워드 파일의 위치 확인 방법
    $cd $ORACLE_HOME/dbs
    $ls -l orapw*

  * 패스워드 파일에 등록된 유저를 확인하는 방법?

   SQL> select * 
            from v$pwfile_users;

    * 패스워드에 등록하기 유저 
 
    SQL> grant sysdba to scott;
        ( But. scott으로만 접속하면 db를 내릴 수 없다. ) 
   (SQL> connect scott/oracle_4U as sysdba 이렇게 접속해야 사용할 수 있다.)
                               (sysdba의 비밀번호)               

   * 패스워드 파일을 이용하여 remote로 연결시 sysdba 권한으로 연결하는 방법 
    sqlplus sys/oracle_4U@orcl as sysdba 
    ( @orcl을 붙여준 이유는 리스너를 타고 접속하겠다는 뜻, 즉 다른 말로 말하면 원격에서 내 db로 sys 유저로 접속할 수 있게 하겠다.)  


  6) parameter file
   - 인스턴스의 구조정보를 담고 있는 파일 

   * 파라미터 파일의 위치 확인 
  
    SQL> show parameter spfile

   * 파라미터 파일의 내용을 확인하는 방법 

    SQL> create pfile='/home/oracle/initorcl.ora'
              from sqfile='+DATA/orcl/spfileorcl.ora';

    $cd /home/oracle
    $vi initorcl.ora


   7) database configuration
       가. non clustered system
       나. clustered system (=RAC)
            real Application Cluster

    * 노드 (컴퓨터 묶음의 단위) / 기본적으로는 4노드로 주로 사용/ 이론적으로는 100대까지 묶을 수 있음
    * 24시간 중단없는 서비스를 지원받을 수 있다는 것이 장점

   8) connection 과 session의 차이

     * connection 이란 
        - user process가 instance와 통신할 수 있는 상태가 되었다. 
           client -----------------> server
        user process             server process
            SQL ------------------> DATA
                 <-----------------

     * instance란
       - 오라클의 메모리 

     * session 이란 
       - instance에 connection해서 connection을 끊을때까지의 한 단위가 session 

     9) 오라클 메모리 구조
        * 오라클 메모리 2가지는 무엇인가?

        가. SGA (System(or shared) Global Area)
            - 여러 서버프로세서들과 백그라운드 프로세서들이 공유해서 사용하는 메모리 영역 
              (현재 sga 영역의 사이즈
                SQL> select name, value
                            from v$sga;)            
   
            (1) SGA 영역 중 shared pool의 역활
                - parsing을 최소화하기 위한 오라클 메모리 영역
                - parsing은 SQL을 기계어로 변경하는 과정
   
               - select 문 처리 과정 
 
                ① parsing ---> SQL ---> 기계어
                        - 문법 검사 : SQL 문법에 이상이 없는지 확인 
                        - 의미 검사 : 1) object 확인 : emp 테이블의 존재 
                                       2) 권한 확인 : emp 테이블을 엑세스 할 수 있는 권한 체크 

                ② execute ---> Data 를 검색 
                ③ fetch --> 결과를 전달 
                  
               * shared pool 에 parsing 결과를 올려 놓는다. 
                  (-  결과물 3가지 
                       1. SQL 문장 
                       2. 실행 계획
                       3. 실행 코드 : SQL 문장을 c언어를 통해 실행코드로 변환시킨다.
                  (- 3가지 결과물을 동일한 결과가 입력될 시 공유해서 사용하기 위해서 shared pool에 위의 3가지 결과를 올린다.)  

        2) PGA (Program Global Area)
           - 서버 프로세서들의 개별 메모리 영역이고 이 영역에서 data 정렬작업이 발생한다.  


문제7. scott 유저를 패스워드 파일 등록리스트에서 제외하시오!

SQL> revoke sysdba from scott;


문제 8. sysdba로 접속하는 유저의 패스워드를 oracle로 지정하고 패스워드의 대소문자를 반드시 구분되게 하시오! (m)

- 패스워드 파일을 rm으로 날린다. 
   ( rm orapw*)

- orapwd file=orapworcl password=oracle ignorecase=N (entries=5 ; 해당 비밀번호를 받을 사람을 5명으로 제한)
                    (orapw + instance 이름이 규칙)

* orapwd  : 오라클 패스워드 파일을 만드는 유틸리티 
* SQL> select name from v$database; ( instance 이름을 확인하는 방법)
    (인스턴스 (오라클의 메모리) 이름 확인) 


문제 9. 오라클에 sysdba 권한을 가진 유저로 오라클 db에 접속할 때 패스워드를  oracle_4U로 지정되게하고 대소문자를 구분하지 않아도 접속되게해보시오!패스워드 파일에 등록될 유저를 3명으로 제한하시오! 

$ rm orapw* 

$ orapwd file=orapworcl password=oracle_4U ignorecase=Y entries=3


문제 10. scott 과 같은 일반유저로 접속시 대소문자 구분을 안하겠금 설정하려면 어떻게 해야하는가?

SQL> show parameter sec_case_sensitive_logon

NAME                                         TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon             boolean     TRUE

(value 값을 false로 바꿔야 한다.) 

SQL> alter system set sec_case_sensitive_logon=false;
          

문제 11. 오라클의 접속되어져있는 세션들을 확인하시오! 

 SQL> select username, status
           from v$session;

 * 실행시 보이지 않는 user은 background 프로세서이다. 


문제 12. scott으로 접속한 세션을 


SQL> select  spid
        from  v$process
       where  addr = (
                          select paddr
                          from v$session
                          where sid = (  select sid
                                                from v$mystat
                                                where rownum=1) );

* spid로 확인한 후 수행한 것들 
ps -ef |grep 15969
top -p 15969
kill -9 15969

문제 13. Parsing을 과다하게 일으키는 프로그램을 돌리고 top으로 cpu 사용율을 확인하시오! 

<하드 parsing 문>
SQL> declare

 type rc is ref cursor;
 l_rc rc;
 l_dummy all_objects.object_name%type;
 l_start number default dbms_utility.get_time;
 begin
 for i in 1 .. 50000
 loop
 open l_rc for
 'select object_name from all_objects where object_id = ' || i;
 fetch l_rc into l_dummy;
 close l_rc;
 end loop;
  dbms_output.put_line ( round( (dbms_utility.get_time - l_start)/100, 2) || 'seconds');
  end;
  /

<top 화면>
Mem:   2075456k total,  2014260k used,    61196k free,   179876k buffers
Swap:  4128760k total,   148480k used,  3980280k free,  1404340k cached

  PID   USER      PR  NI  VIRT  RES  SHR  S %CPU %MEM    TIME+  COMMAND                                        
16198 oracle    25   0  634m 137m 119m R 99.6    6.8       4:09.27  oracle                                         
 4887  oracle    15   0  410m  23m  11m  S  0.3    1.2      83:02.18  oraagent.bin                                   
14408 oracle    15   0 73116  13m  9332  R  0.3    0.7      0:11.75    gnome-terminal                                 
16214 oracle    15   0  2336 1104    792   R  0.3    0.1      0:00.17    top                                            
    1     root      15   0  2072  624     532   S  0.0    0.0      0:06.29    init                                           
    2     root      RT  -5    0      0        0     S  0.0    0.0       0:01.33    migra

<이 부분은 추후 스크린샷으로 대체>


문제 14. emp 테이블에 db 에 존재하는지 확인하시오! 

SQL>  select table_name
       2  from dba_tables
      3 where table_name = 'EMP'

* user < all < dba 순으로 많은 정보를 가지고 있다. 

문제 15. scott 유저에서 아래의 SQL을 실행하고 shared pool에 올라가져 있는지 확인하시오! 

-scott 유저

 SQL>  select empno, ename
       2   from emp
        3 where empno =7788


     EMPNO ENAME
---------- ----------
      7788 SCOTT


- sys 유저

SQL> select sql_text, executions
  2   from v$sql
  3  where sql_text like 'select empno%';

SQL_TEXT
--------------------------------------------------------------------------------
EXECUTIONS
----------
select empno, ename  from emp where empno =7788
         2


* 똑같은 문장이 들어와야지 동일한 쿼리 결과를 이용할 수 있다. 
* 똑같은 문장 ; 1. 대소문자가 동일, 2. 공백도 동일, 3. 소유자도 동일


문제 16. 아래의 문장을 이번에는 대문자로 실행하고 shared pool에 새롭게 파싱해서 올렸는지 아니면 기존의 parsing 정보를 활용했는지 확인하시오! 

SQL>  select EMPNO, ENAME  
          from EMP 
       where EMPNO =7788


SQL> select sql_text, executions
    2   from v$sql
    3  where sql_text like 'SELECT EMPNO%'or
    4 sql_text like 'select empno%' ;

SQL_TEXT
--------------------------------------------------------------------------------
EXECUTIONS
----------
select empno, ename  from emp where empno =7788
         2

SELECT EMPNO, ENAME FROM EMP WHERE EMPNO=7788
         1


문제 17. 아래의 SQL을 수행하고 다시 파싱했는지 확인하시오!

SQL>  select empno,             ename  from emp where empno =7788  
         (공백이 다르게 들어감) 

select sql_text, executions
  2   from v$sql
  3  where sql_text like '%EMPNO%'

SQL> ed
Wrote file afiedt.buf

  1  select sql_text, executions
  2   from v$sql
  3   where sql_text like '%empno%' /

SQL_TEXT
--------------------------------------------------------------------------------
EXECUTIONS
----------
select sql_text, executions  from v$sql where sql_text like 'select empno%'
         2

select sql_text  from v$sql where sql_text like 'SELECT EMPNO%'or       sql_text
like 'select empno%'
         1

select empno,             ename  from emp where empno =7788
         1

SQL_TEXT
--------------------------------------------------------------------------------
EXECUTIONS
----------

select empno, ename  from emp where empno =7788
         2

select sql_text, executions  from v$sql  where sql_text like '%empno%'
         1

select sql_text, executions  from v$sql  where sql_text like 'empno%'
         1

SQL_TEXT
--------------------------------------------------------------------------------
EXECUTIONS
----------

select sql_text  from v$sql  where sql_text like 'select empno%'
         4

select sql_text, executions  from v$sql where sql_text like 'SELECT EMPNO%'or
    sql_text like 'select empno%'
         1


8 rows selected.


문제 18. 아래의 SQL을 수행하는데 smith 유저를 생성해서 수행해보시오

- scott 
  select empno, ename from where empno = 7788;

- smith 
  select empno, ename from emp where empno=7788;

1. smith 유저 생성 
2. smith 유저로 접속해서
3. demobld.sql을 돌린다. 


* 고민해야 할 문제 (이부분은  Linux 문제) :
  asm 를 입력하면 asmcmd> 로 바로 들어갈 수 있도록 하시오

$ export ORACLE_SID=+ASM
$ export ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid

$asmcmd
asmcmd>

or 

$.oraenv
$   ? +ASM
$ asmcmd



* export ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid
   - application을 작동 시킬때는 해당 application이 실행 될 수 있도록 home 값을 지정해주어야 한다. 


+ Recent posts