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
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 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
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 값을 지정해주어야 한다.
'ORACLE > ORACLE Admin' 카테고리의 다른 글
Admin1(1) - 오라클의 접속환경, database 구성요소(datafile, controlfile, redo log file, archive logfile ) (0) | 2016.03.15 |
---|