2014. 10. 29. 20:48
pfile을 삭제 후 원본 pfile 복사해오기  

 

login as: oracle
oracle@192.168.198.128's password:
Last login: Thu Oct 23 20:30:57 2014 from 192.168.198.1

 

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Thu Oct 23 21:33:23 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning option

 

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

 

SQL> !

 

[oracle@localhost ~]$ cd $ORACLE_HOME/dbs

 

[oracle@localhost dbs]$ ls
hc_DBUA0.dat  hc_testdb.dat  init.ora  lkTESTDB  orapwtestdb  spfiletestdb.ora

 

[oracle@localhost dbs]$ rm -fr spfiletestdb.ora

 

[oracle@localhost dbs]$ exit
exit


SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/app/oracle/product/11g/dbs/inittestdb.ora

 

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning option

 

[oracle@localhost ~]$ ls
Desktop  afiedt.buf  disk1  disk3  disk5    test_data.sql
a.out    database    disk2  disk4  log.sql

 

[oracle@localhost ~]$ ls $ORACLE_BASE/admin/testdb/pfile
init.ora.8262014183029

 

[oracle@localhost ~]$ cd $ORACLE_HOME/dbs

 

[oracle@localhost dbs]$ cp /app/oracle/admin/testdb/pfile/init.ora.8262014183029  inittestdb.ora

 

[oracle@localhost dbs]$ ls
hc_DBUA0.dat  hc_testdb.dat  init.ora  inittestdb.ora  lkTESTDB  orapwtestdb

 

SQL> startup
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size                  1344616 bytes
Variable Size             260049816 bytes
Database Buffers          155189248 bytes
Redo Buffers                6086656 bytes
Database mounted.
Database opened.

 

value 의 값이 없으면 pfile

SQL> show parameter pfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string

 

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string

 

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

 

pfile만 있을 경우 pfile을 이용해서 spfile 생성하기

 

SQL> !ls $ORACLE_HOME/dbs
hc_DBUA0.dat hc_testdb.dat init.ora inittestdb.ora lkTESTDB orapwtestdb


SQL> create spfile from pfile;

File created.

 

SQL> !ls $ORACLE_HOME/dbs
hc_DBUA0.dat init.ora lkTESTDB spfiletestdb.ora
hc_testdb.dat inittestdb.ora orapwtestdb

 

SQL> !rm -fr $ORACLE_HOME/dbs/inittestdb.ora

 

SQL> !ls $ORACLE_HOME/dbs
hc_DBUA0.dat hc_testdb.dat init.ora lkTESTDB orapwtestdb spfiletestdb.ora

 

SQL> create pfile from spfile;

File created.

 

SQL> !ls $ORACLE_HOME/dbs
hc_DBUA0.dat init.ora lkTESTDB spfiletestdb.ora
hc_testdb.dat inittestdb.ora orapwtestdb


pfile과 spfile이 모두 있을 경우 spfile만 사용되므로 pfile을 사용하려면

spfile을 삭제하거나 이름을 변경해야함

 



 

 


 


 

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

오라클 실습시 용량부족으로 디스크 붙이는 방법  (0) 2014.10.31
backup  (0) 2014.10.30
컨트롤 파일 다중화시 ora-00205 에러  (0) 2014.10.29
oracle client 윈도우 설정  (0) 2014.10.28
dbms_job / dbms_scheduler  (0) 2014.10.27
Posted by 성장하는yw
2014. 10. 29. 18:05




문제점 : 컨트롤 파일을 오라클 계정으로 만들어준 것이 아니라 루트 계정으로 만들어 주고 

오라클 DB를 open 하려고 했음 


해결방안 : 컨트롤 파일에 오라클 권한을 주고, 다시 DB를 open하면 해결된다. 

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

backup  (0) 2014.10.30
[실습] parameter file 삭제 후 재생성하기  (0) 2014.10.29
oracle client 윈도우 설정  (0) 2014.10.28
dbms_job / dbms_scheduler  (0) 2014.10.27
사용자관리  (0) 2014.10.27
Posted by 성장하는yw
2014. 10. 28. 17:00

1. 설치할 clinet 파일을 오라클 계정으로 로그인해서 다운 받는다. 


자신의 컴퓨터가 몇 비트 운영체제인지 확인해서 파일을 받아야 한다. 

확인법 : 제어판\시스템 및 보안\시스템 - 시스템 종류를 보면 알 수 있다. (윈도우 7기준)




* 파일 다운로드 받는 곳(64비트)


http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.html


2. client 파일을 설치한다.


- 시작프로그램-보조프로그램-실행

   또는 windows 로고 + r 하면 cmd 실행

- netca 입력

- 아래와 같은 창들이 열리면 화면과 같이 실행한다. 


로컬네트 서비스 이름 구성을 선택한다.


추가를 선택


서비스 이름은 반드시 DB 이름을 입력한다. 


기본 tcp로 되어 있는데 다음



자신 접속할  DB 서버 아이피를 입력한다.



테스트 수행 선택, 테스트를 바라지 않으면 다음 클릭



이 에러는 리스너가 꺼져있을 때 나는 에러화면

오라클 서버에서 lsnrctl start 해 주고 테스트 해볼 것 



tns 리스너가 DB가 뭔지 찾지 못할 때 생기는 오류 

리스너를 올렸을 때 서비스 네임이 있어야 한다. 

기본 설정시 서비스 네임을 주지 않으면 적용시 문제가 생길수도 있다.

들여쓰기 잘하기, 파일을 인식못할 수도 있음




로그인 변경을 해서 scott/tiger로 접속을 시도해본다. 

아래와 같이 정상접속이 되면 테스트를 성공했다는 화면을 볼 수 있다. 




3. 설치경로로 들어가서 tnsnames.ora 파일을 수정해준다.


나의 경우 설치경로 : D:\app\stu\product\11.2.0\client_1\network\admin 


만약 파일이 없다면 sample 폴더 안에 들어가서 복사해서 안에 내용을 지운다음 아래와 같이 입력해준다.  


TESTDB =

( DESCRIPTION =

( ADDRESS_LIST =

( ADDRESS = ( PROTOCOL = TCP ) ( HOST = 192.168.64.145 ) ( PORT = 1521 ) )

)

( CONNECT_DATA = 

( SERVICE_NAME = testdb )

)


각 보라색 글씨의 의미

- TESTDB : 네트 서비스 이름

- 접속할 아이피와 포트번호

- SID이름


4 client의 cmd 창에서 서버로 접속을 시도하면 성공적으로 접속이 된다. 


C:\Users\stu>sqlplus scott/tiger@testdb


SQL*Plus: Release 11.2.0.1.0 Production on 화 10월 28 16:55:38 2014


Copyright (c) 1982, 2010, Oracle.  All rights reserved.



다음에 접속됨:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production

With the Partitioning option


SQL>




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

[실습] parameter file 삭제 후 재생성하기  (0) 2014.10.29
컨트롤 파일 다중화시 ora-00205 에러  (0) 2014.10.29
dbms_job / dbms_scheduler  (0) 2014.10.27
사용자관리  (0) 2014.10.27
control file 다중화 실습  (0) 2014.10.26
Posted by 성장하는yw
2014. 10. 27. 16:35

1. os 의 예약 작업 기능

리눅스, 유닉스 - shell scripts - cron 작업

cron 에 기록해 있는데로 일정시간에 사용자가 지정한 작업들을 스스로 처리해줌 


2. 오라클 내에 cron 에 해당하는 기능임 

    DBMS_JOB/DBMS_SCHEDULER


3 DBMS_JOB 

새로운 JOB 등록 테스트 하기


실습

새로운 job을 등록하는 테스트

job_test01 테이블 생성 후 1분에 1번씩 해당테이블에 데이터 insert 함 


테스트용 테이블과 시퀀스, 프로시저를 생성함

SCOTT>create sequence seq_job_seq1;


Sequence created.



SCOTT>create table job_test01

  2  (no number,

  3  name varchar2(5));


Table created.


SCOTT>ed

Wrote file afiedt.buf

create or replace procedure insert_job_test01

 is

  begin

   insert into scott.job_test01

   values(seq_job_seq1.nextval, dbms_random.string('a',3));

end;

/


Procedure created.

job을 등록할 프로시저를 생성
SCOTT>!vi job1.sql
begin
 dbms_job.submit(:jno,
 'scott.insert_job_test01;',
 sysdate,
 'sysdate + 1/24/60',
 false);
 end;
/

Procedure created.


job을 등록함

SCOTT>variable jno number

SCOTT>@job1.sql

PL/SQL procedure successfully completed.

번호는 랜덤으로 들어가는 것임
SCOTT>print jno;

       JNO
----------
         3

commit 이 시간부터 job이 수행됨, commit 가 안되면 수행되지 않음
SCOTT>commit;

Commit complete.

수행되고 있는 job 내역을 확인함
SCOTT>set line 200

SCOTT>col what for a50
SCOTT>select what, job, next_date, next_sec, failures, broken
  2  from user_jobs
  3  where what='scott.insert_job_test01;';

WHAT                                                      JOB NEXT_DATE    NEXT_SEC           FAILURES B
-------------------------------------------------- ---------- ------------ ---------------- ---------- -
scott.insert_job_test01;                                    3 23-OCT-14    18:54:30                  0 N

실제 데이터가 입력되는지 확인함

SCOTT>select * from job_test01;

        NO NAME
---------- -----
         1 xJa
         2 gMu
         3 ucr
         4 Rhw

등록되어 있는 job 삭제하기
SCOTT>exec dbms_job.remove(3);

PL/SQL procedure successfully completed.

삭제되고 없는 것을 확인할 수 있음
SCOTT>select what, job, next_date, next_sec, failures, broken
  2  from user_jobs
  3  where job=3;

no rows selected

등록되어 있는 job 수정하기
이 테스트를 위해 job을 한 번 더 등록함

SCOTT>variable jno number;

SCOTT>@job1.sql

PL/SQL procedure successfully completed.

SCOTT>print jno;

       JNO
----------
         4
SCOTT>commit;

Commit complete.
SCOTT>select what, job, next_date, next_sec, interval
  2  from user_jobs
  3  where job=4;

WHAT                                                      JOB NEXT_DATE    NEXT_SEC
-------------------------------------------------- ---------- ------------ ----------------
INTERVAL
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
scott.insert_job_test01;                                    4 23-OCT-14    19:01:31
sysdate + 1/24/60

수행시간을 1분마다에서 5분 마다로 변경
SCOTT>exec dbms_job.change(:jno,'scott.insert_job_test01;',sysdate,'sysdate + 5/24/60');

PL/SQL procedure successfully completed.

SCOTT>set line 200

SCOTT>col interval for a30
SCOTT>select what, job, next_date, next_sec, interval
  2  from user_jobs
  3  where job=4;

WHAT                                                      JOB NEXT_DATE    NEXT_SEC         INTERVAL
-------------------------------------------------- ---------- ------------ ---------------- ------------------------------
scott.insert_job_test01;                                    4 23-OCT-14    19:02:56         sysdate + 5/24/60


DBMS_SCHEDULER


DBMS_JOB과의 차이점 : 외부스크립트도 실행할 수 있음

                                   단, 이 기능은 10g 이상일 때만 사용 가능


사용

정해진 시간에 튜닝에 필요한 필요한 테이블, 인텍스, 클러스터 등의 각종 통계값을 계산해서 저장

정해진 시간에 백업 수행

Mview나 standby 서버, 원본과의 동기화 작업 등...

주기적으로 반복되어야 하는 작업을 자동화시켜서 작업을 할 때 사용함


특징

-

-

-

-

-


4 DBMS_SCHEDULER 

새로운 JOB 등록 테스트 하기


실습

새로운 job을 등록하는 테스트

job_test1 이라는 테이블에 3초에 1회씩 데이터를 insert 하는 작업

작업을 위해서 create any job의 권한이 있어야 함 

scott 계정에 먼저 이 권한을 주고 실행함


SCOTT>conn / as sysdba

Connected.

SYS>grant create any job to scott;


Grant succeeded.

SYS>conn scott/tiger
Connected.
SCOTT>create table job_test1
  2  (no number,
  3  name varchar2(5),
  4  rdate date default sysdate);

Table created.

SCOTT>create sequence seq_job_test1_no;

Sequence created.

  1  create or replace procedure insert_job_test
  2  is
  3  begin
  4   insert into scott.job_test1(no, name)
  5   values(seq_job_test1_no.nextval, dbms_random.string('a',2));
  6  commit;
  7* end;
SCOTT>/

Procedure created.


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

컨트롤 파일 다중화시 ora-00205 에러  (0) 2014.10.29
oracle client 윈도우 설정  (0) 2014.10.28
사용자관리  (0) 2014.10.27
control file 다중화 실습  (0) 2014.10.26
oracle의 시작단계  (0) 2014.10.26
Posted by 성장하는yw
2014. 10. 27. 16:18

1 사용자 생성하기


[oracle@localhost ~]$ sqlplus / as sysdba


SQL*Plus: Release 11.2.0.2.0 Production on Thu Oct 23 13:48:59 2014


Copyright (c) 1982, 2010, Oracle.  All rights reserved.



Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production

With the Partitioning option


SYS>set line 200


SYS>col tablespace_name for a10

SYS>col file_name for a50

SYS>select tablespace_name, bytes/1024/1024 MB, file_name

  2  from dba_data_files;


TABLESPACE         MB FILE_NAME

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

EXAMPLE       345.625 /home/oracle/disk4/example01.dbf

USERS               5 /home/oracle/disk5/users01.dbf

UNDOTBS1          310 /home/oracle/disk5/undo01.dbf

SYSAUX            510 /home/oracle/disk4/sysaux01.dbf

SYSTEM            710 /home/oracle/disk4/system01.dbf

HAKSA                 /app/oracle/product/11g/dbs/MISSING00006

HAKSA                 /app/oracle/product/11g/dbs/MISSING00007


7 rows selected.


SYS>SYS>create tablespace ts_webhard

  2  datafile '/app/oracle/oradata/testdb/ts_web01.dbf' size 100M;


Tablespace created.


SYS>create tablespace ts_web_idx

  2  datafile '/app/oracle/oradata/testdb/ts_web_idx01.dbf' size 100M;


Tablespace created.



SYS>select tablespace_name, bytes/1024/1024 MB, file_name
  2  from dba_data_files;

TABLESPACE         MB FILE_NAME
---------- ---------- --------------------------------------------------
EXAMPLE       345.625 /home/oracle/disk4/example01.dbf
USERS               5 /home/oracle/disk5/users01.dbf
UNDOTBS1          310 /home/oracle/disk5/undo01.dbf
SYSAUX            510 /home/oracle/disk4/sysaux01.dbf
SYSTEM            710 /home/oracle/disk4/system01.dbf
HAKSA                 /app/oracle/product/11g/dbs/MISSING00006
HAKSA                 /app/oracle/product/11g/dbs/MISSING00007
TS_WEBHARD        100 /app/oracle/oradata/testdb/ts_web01.dbf
TS_WEB_IDX        100 /app/oracle/oradata/testdb/ts_web_idx01.dbf

9 rows selected.


SYS>create temporary tablespace temp_web
  2  tempfile '/app/oracle/oradata/testdb/temp_web01.dbf' size 100M;

Tablespace created.


SYS>  1  create user webuser
  2  identified by webpwd
  3  default tablespace ts_webhard
  4  temporary tablespace temp_web
  5  quota unlimited on ts_webhard
  6 quota 0m on system

User created.

SYS>grant resource, connect to webuser;

Grant succeeded.

SYS>conn webuser/webpwd;
Connected.

WEBUSER>


2 사용자 정보 확인하기

default tablespace 와 temporary tablespace 정보 확인하기

SYS>set line 200

SYS>col default_tablespace for a10

SYS>col temporary_tablespace for a10

SYS>select username, default_tablespace "Defautlt TS", temporary_tablespace "Temp TS"

  2  from dba_users

  3  where username='WEBUSER';


USERNAME                       Defautlt TS                    Temp TS

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

WEBUSER                        TS_WEBHARD                     TEMP_WEB


3 password 관련 profile 생성하기


조건

로그인 시도 5회 실패시 계정을 5일 동안 사용 못하게 할 것

계정의 암호는 10일에 한 번씩 변경하게 할 것

동일한 암호는 10일 동안 사용 못하게 할 것


SYS>create profile sample_prof limit

  2  failed_login_attempts 5

  3  password_lock_time 5

  4  password_life_time 10

  5  password_reuse_time 10;


Profile created.


4 resource 관련 profile 만들기 


조건

1명당 연속적으로  cpu를 사용할 수 있는 시간을 10초로 제한할 것

하루 중 8시간만 db에 접속 가능하게 할 것

10분 동안 사용하지 않으면 강제로 접속을 끊을 것


profile을 9i 이상 버전에서 즉시 적용시키기 위해서 입력하는 명령어

SYS>alter system set resource_limit=true;


System altered.


SYS>create profile re_sample_prof limit
  2  cpu_per_session 1000
  3  connect_time 480
  4  idle_time 10;

Profile created.

사용자에게   profile 할당하기
2,4번에서 만든 profile을 webhard에게 설정함

SYS>set pages 50

현재 모든 사용자가 적용받고 있는 profile 확인하기
SYS>select username "사용자명", profile "적용프로파일"
  2  from dba_users
  3  where username='WEBUSER';

사용자명                     적용프로파일
------------------------------ ------------------------------
WEBUSER                        DEFAULT

해당 profile에 어떤 내용이 있는지 확인하기

SYS>select * from dba_profiles
  2  where profile='SAMPLE_PROF';

PROFILE       RESOURCE_NAME                  RESOURCE LIMIT
------------- ------------------------------ -------- ----------
SAMPLE_PROF   COMPOSITE_LIMIT                KERNEL   DEFAULT
SAMPLE_PROF   SESSIONS_PER_USER              KERNEL   DEFAULT
SAMPLE_PROF   CPU_PER_SESSION                KERNEL   DEFAULT
SAMPLE_PROF   CPU_PER_CALL                   KERNEL   DEFAULT
SAMPLE_PROF   LOGICAL_READS_PER_SESSION      KERNEL   DEFAULT
SAMPLE_PROF   LOGICAL_READS_PER_CALL         KERNEL   DEFAULT
SAMPLE_PROF   IDLE_TIME                      KERNEL   DEFAULT
SAMPLE_PROF   CONNECT_TIME                   KERNEL   DEFAULT
SAMPLE_PROF   PRIVATE_SGA                    KERNEL   DEFAULT
SAMPLE_PROF   FAILED_LOGIN_ATTEMPTS          PASSWORD 5
SAMPLE_PROF   PASSWORD_LIFE_TIME             PASSWORD 10
SAMPLE_PROF   PASSWORD_REUSE_TIME            PASSWORD 10
SAMPLE_PROF   PASSWORD_REUSE_MAX             PASSWORD DEFAULT
SAMPLE_PROF   PASSWORD_VERIFY_FUNCTION       PASSWORD DEFAULT
SAMPLE_PROF   PASSWORD_LOCK_TIME             PASSWORD 5
SAMPLE_PROF   PASSWORD_GRACE_TIME            PASSWORD DEFAULT

16 rows selected.

SYS>col profile for a16
SYS>select * from dba_profiles
  2  where profile='RE_SAMPLE_PROF';

PROFILE          RESOURCE_NAME                  RESOURCE LIMIT
---------------- ------------------------------ -------- ----------
RE_SAMPLE_PROF   COMPOSITE_LIMIT                KERNEL   DEFAULT
RE_SAMPLE_PROF   SESSIONS_PER_USER              KERNEL   DEFAULT
RE_SAMPLE_PROF   CPU_PER_SESSION                KERNEL   1000
RE_SAMPLE_PROF   CPU_PER_CALL                   KERNEL   DEFAULT
RE_SAMPLE_PROF   LOGICAL_READS_PER_SESSION      KERNEL   DEFAULT
RE_SAMPLE_PROF   LOGICAL_READS_PER_CALL         KERNEL   DEFAULT
RE_SAMPLE_PROF   IDLE_TIME                      KERNEL   10
RE_SAMPLE_PROF   CONNECT_TIME                   KERNEL   480
RE_SAMPLE_PROF   PRIVATE_SGA                    KERNEL   DEFAULT
RE_SAMPLE_PROF   FAILED_LOGIN_ATTEMPTS          PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_LIFE_TIME             PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_REUSE_TIME            PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_REUSE_MAX             PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_VERIFY_FUNCTION       PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_LOCK_TIME             PASSWORD DEFAULT
RE_SAMPLE_PROF   PASSWORD_GRACE_TIME            PASSWORD DEFAULT

16 rows selected.

사용자에게 profile 적용시키고 확인하기
SYS>alter user webuser profile sample_prof;

User altered.


SYS>select username, profile
  2  from dba_users
  3  where username='WEBUSER';

USERNAME                       PROFILE
------------------------------ ----------------
WEBUSER                        SAMPLE_PROF


SYS>alter user webuser profile re_sample_prof;

User altered.

SYS>select username, profile
  2  from dba_users
  3  where username='WEBUSER';

USERNAME                       PROFILE
------------------------------ ----------------
WEBUSER                        RE_SAMPLE_PROF

여러 개의 프로파일을 적용시킬 수 없으므로, 
프로파일을 만들 때 원하는 파라미터를 모두 넣고 한꺼번에 만든 후 적용을 시켜야 한다. 

사용 안하는 profile 삭제하기 
SYS>drop profile re_sample_prof;
drop profile re_sample_prof
*
ERROR at line 1:
ORA-02382: profile RE_SAMPLE_PROF has users assigned, cannot drop without CASCADE

* 현재 사용자에게 할당되어 있는 profile 은 기본적으로 삭제가 안됨
cascade 옵션을 사용하면 할당되어 있더라도 삭제 가능
삭제가 되면 해당 프로파일을 사용하던 사용자는 default profile을 사용하게 됨

SYS>drop profile re_sample_prof cascade;

Profile dropped.

SYS>select username, profile
  2  from dba_users
  3  where username='WEBUSER';

USERNAME                       PROFILE
------------------------------ ----------------
WEBUSER                        DEFAULT


권한 관리하기 


-system 관련 주요 권한


- sysoper / sysdba 권한


-  system 관련 권한 할당하기 / 해제하기

scott 사용자에게 create table, create session 권한을 할당

SYS>grant create table, create session to scott;


Grant succeeded.


scott 사용자에게 create table 권한 해제

SYS>revoke create table from scott;

Revoke succeeded.


- 사용자가 가지고 있는 권한 조회

SYS>select * from dba_sys_privs

  2  where grantee='SCOTT';


GRANTEE                        PRIVILEGE                                ADM

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

SCOTT                          UNLIMITED TABLESPACE                 NO

SCOTT                          CREATE SESSION                           NO


-object 관련 권한(privilege)

주로 dml과 연관 많음 : object 를 select, insert, update, delete 등을 할 수 있는 권한을 말함


-object 권한 할당 / 해제하기

scott 사용자에게 webuser가 만든 webuser 테이블을  select 할 수 있도록 하기

WEBUSER>create table webtest

  2  ( no number,

  3  name varchar2(10));


Table created.


WEBUSER>insert into webtest values(1, 'sss');


1 row created.


WEBUSER>select * from webtest;


        NO NAME

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

         1 sss



SCOTT>select * from webuser.webtest;

select * from webuser.webtest

                      *

ERROR at line 1:

ORA-00942: table or view does not exist



SYS>grant select on webuser.webtest to scott;

Grant succeeded.

SYS>conn scott;
Enter password:
Connected.
SCOTT>select * from webuser.webtest;

        NO NAME
---------- ----------
         1 sss

scott 사용자에게 webuser가 만든 webtest 테이블을 update 할 수 있도록 하기
또 scott 사용가가 이 권한을 다른 사람에게 줄 수 있는 권한도 주기

SCOTT>update webuser.webtest
  2  set no=101
  3  where name='sss';
update webuser.webtest
               *
ERROR at line 1:
ORA-01031: insufficient privileges

SCOTT>conn / as sysdba
Connected.
SYS>grant update on webuser.webtest to scott with grant option;

Grant succeeded.

SYS>conn scott/tiger

SCOTT>update webuser.webtest
  2  set no=101
  3  where name='sss';

1 row updated.

SCOTT>select * from webuser.webtest;

        NO NAME
---------- ----------
       101 sss


scott 사용자가 가지고 있는 webuser의 webtest 테이블을 select 하는 권한을 해제

SCOTT>conn / as sysdba
Connected.
SYS>revoke select on webuser.webtest from scott;

Revoke succeeded.

SYS>conn scott/tiger
Connected.
SCOTT>select * from webuser.webtest;
select * from webuser.webtest
                      *
ERROR at line 1:
ORA-01031: insufficient privileges

scott 계정이 hr 계정에게 업데이트 권한만 부여함
SCOTT>grant update on webuser.webtest to hr with grant option;

Grant succeeded.

hr 계정이 언락 되어 있다면 아래와 같은 작업은 넘어가도 됨
SCOTT>conn / as sysdba
Connected.

SYS>alter user hr identified by hr account unlock;

User altered.

SYS>conn hr/hr
Connected.

webuser의 webtest 테이블을 조회할 수 있는 권한을 hr은 가지고 있지 않으므로 권한 에러 뜸
HR>select * from webuser.webtest;
select * from webuser.webtest
                      *
ERROR at line 1:
ORA-01031: insufficient privileges

업데이트 권한을 scott에게서 부여 받았기 때문에 업데이트는 정상적으로 됨
HR>update webuser.webtest
  2  set no=3
  3  where name='sss';

1 row updated.

HR>conn scott/tiger
Connected.
SCOTT>select * from webuser.webtest;
select * from webuser.webtest
                      *
ERROR at line 1:
ORA-01031: insufficient privileges

with grant option의 옵션은 DBA가 scott 계정의 권한을 해지하면 scott가 권한을 주었던 hr의 계정도 해지된다. 

WEBUSER>conn / as sysdba
Connected.
SYS>revoke update on webuser.webtest from scott;

Revoke succeeded.

SYS>conn scott/tiger
Connected.
SCOTT>update webuser.webtest
  2  set no=5
  3  where name='sss';
update webuser.webtest
               *
ERROR at line 1:
ORA-00942: table or view does not exist


SCOTT>conn hr/hr
Connected.
HR>update webuser.webtest
  2  set no=5
  3  where name='sss';
update webuser.webtest
               *
ERROR at line 1:
ORA-00942: table or view does not exist


role 관리하기 

role: 권한의 그룹


role 생성하기

SYS>create role trole;

Role created.


role에 create session, create table 권한 할당하기

SYS>grant create session, create table to trole;

Grant succeeded.


scott 사용자에게 trole 할당하기

SYS>grant trole to scott;

Grant succeeded.


어떤 사용자가 어떤 role를 사용하는지 확인하기

SYS>SELECT * FROM dba_sys_privs

  2  WHERE grantee='SCOTT';


GRANTEE                        PRIVILEGE                                ADM

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

SCOTT                          UNLIMITED TABLESPACE                     NO

SCOTT                          CREATE SESSION                           NO


어떤 role에 어떤 권한이 있는지 확인하기
SYS>select * from dba_sys_privs
  2  where grantee='CONNECT';

GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
CONNECT                        CREATE SESSION                           NO

SYS>select * from dba_sys_privs
  2  where grantee='RESOURCE';

GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
RESOURCE                       CREATE TRIGGER                           NO
RESOURCE                       CREATE SEQUENCE                          NO
RESOURCE                       CREATE TYPE                              NO
RESOURCE                       CREATE PROCEDURE                         NO
RESOURCE                       CREATE CLUSTER                           NO
RESOURCE                       CREATE OPERATOR                          NO
RESOURCE                       CREATE INDEXTYPE                         NO
RESOURCE                       CREATE TABLE                             NO

8 rows selected.


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

oracle client 윈도우 설정  (0) 2014.10.28
dbms_job / dbms_scheduler  (0) 2014.10.27
control file 다중화 실습  (0) 2014.10.26
oracle의 시작단계  (0) 2014.10.26
3 oracle background processes  (0) 2014.10.24
Posted by 성장하는yw
2014. 10. 26. 22:01

1 컨트롤 파일 / 다중화 의미

- control file :  오라클 서버를 운영하는데 필수적인 정보들이 저장되어 있음

                       instance가 mount 이상의 상태일 때부터 실시간으로 control file의 내용이 변경, 조회됨

                       이 파일이 깨지면 DB가 망가짐

                       파일삭제 등 문제가 생기더라도 복구 할 수 있도록 복사본을 만들어 분산시켜 저장함 (multiplexing 다중화)


2. 작동 순서와 다중화 하는 방법

- 작동순서

startup - parameter file 읽어서 control file의 위치 확인 - control file을 메모리로 불러와 내용 확인 


- 다중화하는 방법 

parameter file에 control file의 위치를 기록한 후 그 경로에  control file을 복사하면 다중화가 됨 


* spfile 일 경우 다중화하는 방법


- 실습예제 

현재 운영중인 control file의 경로 확인 후

/home/oracle/disk1/control01.ctl

/home/oracle/disk2/control02.ctl

/home/oracle/disk3/controlo03.ctl 로 다중화(복사)


- 하는 순서

1. DB 상태 확인

2. 현재 운영중인 control file의 경로 확인

3. spfile경로 변경

4. instance 종료

5. 대상 디렉토리 생성 및 컨트롤 파일을 spfile 수정한 경로로 생성

6. instance  open -> startup


간략히 

spfile의 내용 변경 -> instance 종료 -> control file 복사 -> instance open


- 과정

현재 db 상태 확인

SYS>select status from v$instance;


STATUS

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

OPEN


spfile 인지 pfile 인지 확인

SYS>show parameter spfile;


NAME     TYPE VALUE

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

spfile     string /app/oracle/product/11g/dbs/sp

filetestdb.ora


한 화면에 보기 위해서 칼럼 크기 조정
SYS>col name for a70

control file의 현재경로 조회
SYS>select name from v$controlfile;

NAME
----------------------------------------------------------------------
/app/oracle/oradata/testdb/control01.ctl
/home/oracle/fast_recovery_area/testdb/control02.ctl

spfile안에 기록 되어있는 control file의 경로 변경
SYS>alter system set control_files='/home/oracle/disk1/control01.ctl',
  2  '/home/oracle/disk2/control02.ctl',
  3  '/home/oracle/disk3/control03.ctl' scope=spfile;

System altered.

db instance 종료
SYS>shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

sqlplus을 종료하지 않고 터미널창(리눅스커맨드창)으로 이동
SYS>!
[oracle@localhost ~]$ cd /home/oracle
디렉토리 생성
[oracle@localhost ~]$ mkdir disk1 disk2 disk3



spfile 변경 경로에 컨트롤 파일을 복사해 옴
[oracle@localhost ~]$ cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/disk1/control01.ctl
[oracle@localhost ~]$ cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/disk2/control02.ctl
[oracle@localhost ~]$ cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/disk3/control03.ctl

*컨트롤 파일은 여러 곳에 분산이 되어도 내용은 모두 동일해야함
그래서 아래 처럼 control01을 3곳으로 이름을 바꾸어서 복사를 해도 아무런 문제가 없음

리눅스 명령창에서 나와서 sqlplus로 이동
[oracle@localhost ~]$ exit
exit

db instance 시작
SYS>startup
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size    1344616 bytes
Variable Size  322964376 bytes
Database Buffers   92274688 bytes
Redo Buffers    6086656 bytes
Database mounted.
Database opened.

변경된 컨트롤 파일 경로 확인
SYS>select name from v$controlfile;

NAME
----------------------------------------------------------------------
/home/oracle/disk1/control01.ctl
/home/oracle/disk2/control02.ctl
/home/oracle/disk3/control03.ctl



* pfile 일 경우 다중화하는 방법


현재 spfile을 사용하는 상태 -> pfile 생성 -> spfile 삭제 -> instance 재시작 후 다중화 작업을 함

조회한 컨트롤 파일 위치를 아래 경로로 다중화

/home/oracle/disk4/control01.ctl

/home/oracle/disk5/control01.ctl

/home/oracle/disk6/control01.ctl


SYS>!ls $ORACLE_HOME/dbs

hc_DBUA0.dat  hc_testdb.dat  init.ora  lkTESTDB  orapwtestdb  spfiletestdb.ora


SYS>create pfile from spfile;


File created.


SYS>!rm -f $ORACLE_HOME/dbs/spfiletestdb.ora


SYS>!ls $ORACLE_HOME/dbs

hc_DBUA0.dat  hc_testdb.dat  init.ora  inittestdb.ora  lkTESTDB  orapwtestdb


SYS>shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SYS>startup

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size    1344616 bytes

Variable Size  322964376 bytes

Database Buffers   92274688 bytes

Redo Buffers    6086656 bytes

Database mounted.

Database opened.


pfil 확인, 아래 조회내용에서 value 부분에 아무것도 나오지 않으면 pfile

SYS>show parameter pfile;


NAME     TYPE VALUE

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

spfile     string


SYS>select name from v$controlfile;


NAME

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

/home/oracle/disk1/control01.ctl

/home/oracle/disk2/control02.ctl

/home/oracle/disk3/control03.ctl


SYS>shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.


SYS>!vi $ORACLE_HOME/dbs/inittestdb.ora

testdb.__db_cache_size=92274688

testdb.__java_pool_size=4194304

testdb.__large_pool_size=4194304

testdb.__oracle_base='/app/oracle'#ORACLE_BASE set from environment

testdb.__pga_aggregate_target=155189248

testdb.__sga_target=268435456

testdb.__shared_io_pool_size=0

testdb.__shared_pool_size=159383552

testdb.__streams_pool_size=0

*.audit_file_dest='/app/oracle/admin/testdb/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'


주석처리 한 부분을 파란색 글씨처럼 원하는 경로로 수정해줌

#*.control_files='/home/oracle/disk1/control01.ctl','/home/oracle/disk2/control02.ctl','/home/oracle/disk3/control03.ctl'

*.control_files='/home/oracle/disk4/control01.ctl','/home/oracle/disk5/control02.ctl','/home/oracle/disk6/control03.ctl'


*.db_block_size=8192

*.db_domain=''

*.db_name='testdb'

*.db_recovery_file_dest='/home/oracle/fast_recovery_area'

*.db_recovery_file_dest_size=4196401152

*.diagnostic_dest='/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=testdbXDB)'

*.log_archive_format='%t_%s_%r.dbf'

*.memory_target=422576128

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

~                                                                                                                  

"/app/oracle/product/11g/dbs/inittestdb.ora" 26L, 950C


:wq!


SYS>!

[oracle@localhost ~]$ cd /home/oracle

[oracle@localhost ~]$ mkdir disk4 disk5 disk6

[oracle@localhost ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk4/control01.ctl

[oracle@localhost ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk5/control02.ctl

[oracle@localhost ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk6/control03.ctl

[oracle@localhost ~]$ exit

exit


SYS>startup

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size    1344616 bytes

Variable Size  322964376 bytes

Database Buffers   92274688 bytes

Redo Buffers    6086656 bytes

Database mounted.

Database opened.

SYS>select name from v$controlfile;


NAME

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

/home/oracle/disk4/control01.ctl

/home/oracle/disk5/control02.ctl

/home/oracle/disk6/control03.ctl



pfile을 사용, 컨트롤파일을 다중화 하는 경우는 복사하고 경로를 수정해줘도 전혀 문제가 없지만

spfile일 때, 나머지 과정들은 꼭 순서대로 해야만 한다. 

장애 생김


컨트롤 파일에 변경되는 정보가 실시간으로 저장 되기 때문에 가장 최근에 사용한 것만 진짜 컨트롤 파일이고 

나머지 컨트롤 파일은 예전파일로 변한다. 

이동이나 복사를 할 때, 가장 최근에 사용했던것만 사용해야 한다.

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

dbms_job / dbms_scheduler  (0) 2014.10.27
사용자관리  (0) 2014.10.27
oracle의 시작단계  (0) 2014.10.26
3 oracle background processes  (0) 2014.10.24
9 메모리 관리 기법  (0) 2014.10.24
Posted by 성장하는yw
2014. 10. 26. 20:56

1. 오라클의 시작단계





* 사용 중인 파일은 절대로 이동 및 복사를 하면 안된다.(DB깨짐)

   단, parameter file 중에 pfile은 예외


* 어떤 작업을 하느냐에 따라 시작되는 단계가 다르다.

   원하는 단계까지만 실행 후 db open을 하려면 alter database 라는 명령어를 사용.

   반드시 startup-nomount-mount-open 단계를 순서대로 거쳐야 함

   예) nomount->open 할 때, mount를 건너뛰고 바로 open 상태로 갈 수 없음


실습1

nomount 단계까지만 시작한 후 나머지 단계 진행하기


SYS>startup nomount;

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size                  1344616 bytes

Variable Size             322964376 bytes

Database Buffers           92274688 bytes

Redo Buffers                6086656 bytes

SYS>alter database mount;


Database altered.


SYS>alter database open;


Database altered.


실습2

mount 단계까지만 시작한 후 나머지 단계 진행하기


SYS>startup mount;
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size                  1344616 bytes
Variable Size             322964376 bytes
Database Buffers           92274688 bytes
Redo Buffers                6086656 bytes
aDatabase mounted.
SYS>lter database open;

Database altered.

실습3

읽기 전용인 상태로 open 하기


select 작업만 가능한 상태로 open : 감사 작업과 같이 데이터 변경이 안되고 조회만 가능한 상태임


read only 모드로 open 후에 다시 데이터 변경이 가능하도록 하려면 instance 종료 후 다시 시작하면 됨 


SYS>startup mount;

ORACLE instance started.


Total System Global Area  422670336 bytes

Fixed Size                  1344616 bytes

Variable Size             322964376 bytes

Database Buffers           92274688 bytes

Redo Buffers                6086656 bytes

Database mounted.

SYS>alter database open read only;


Database altered.


실습4
제한된 모드(restricted mode)로 open 하기

허락받은 계정(grant 명령어를 사용)만 데이터의 생성이나 수정이 가능한 상태
제품 유지관리 작업시에 주로 사용

DB가 꺼져있을 때 이 모드로 들어가는 방법은 아래와 같음

SYS>startup restrict;
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size                  1344616 bytes
Variable Size             322964376 bytes
Database Buffers           92274688 bytes
Redo Buffers                6086656 bytes
Database mounted.
Database opened.

DB가 open상태 일 때 제한된 모드(restricted mode)로 변경하기


SYS>select status from v$instance;    db 현재 상태 조회


STATUS

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

OPEN


SYS>alter system enable restricted session;    제한된 모드 사용


System altered.


SYS>alter system disable restricted session;    제한된 모드 사용안 함


System altered.


제한된 모드로 open된 instance에 접속하려면 restricted session 라는 권한을 가지고 있어야만 함


 

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

사용자관리  (0) 2014.10.27
control file 다중화 실습  (0) 2014.10.26
3 oracle background processes  (0) 2014.10.24
9 메모리 관리 기법  (0) 2014.10.24
6 redo log 관리하기  (0) 2014.10.21
Posted by 성장하는yw
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