dbms_job pakage

Oracle/Admin 2013. 10. 29. 09:44

이 패키지를 설정하게 되면 SNP 백그라운드 프로세스가 이 패키지에 설정되어 있는 작업을 수행하게 된다.

SNP 백그라운드 프로세스는 선택적인 프로세스로 초기화 파라미터 파일에 아래의 항목을 설정 한 후 재 시작을 하면 실행 된다.

 

 - job_queue_processes = 1     <-- SNP 프로세스의 개수를 지정한다.

 - job_queue_interval = 60         <-- SNP 프로세스가 Sleep 상태에서 깨어나는 간격을 초로 지정한다.

 

이 패키지는 아래와 같은 다양한 프로시저들을 가지고 있다.

 

submit 

새로운 작업을 job queue 목록에 등록한다 

remove 

job queue에 등록된 job을 제거한다 

change 

job queue에 등록된 job을 변경한다. 

next_date 

job queue에 등록된 job의 작동 시간을 변경한다 

interval 

job queue에 등록된 job의 수행주기를 변경한다 

what 

수행할 procedure or package 변경한다 

run 

등록되어 있는 특정 job을 수동으로 수행한다. 

 

 

1. Job 관리하기

 

이 프로시저는 다양한 파라미터의 항목을 가지고 설정 할 수 있다.

 

 - 기본문법

 

 DBMS.JOB.submit (

  job out binary_interger,

 what in varchar2,

 next_date in date default sysdate,

 interval in varchar2 default 'null'

 no_parse in boolean default false

 )

 

 - 주요 파라미터의 의미 

 job

 job 번호로 다른 프로시저에서 호출 될 수 있다. 

what 

 수행할 pl/sql 혹은 procedure or package 이름을 지정한다.

 이곳에 직접 수행하기를 원하는 sql 문장을 써도 된다. 

next_date 

 다음에 수행될 시간을 지정한다. 

interval 

 수행되는 주기를 지정하며 초 단위까지 지정 가능하다. 

no_parse 

 Parse 여부를 지정한다. 기본값은 false로 parse를 수행한다. 

 

 

 (1) 새로운 job 등록 테스트

 위에서 살펴본 프로시저들을 사용해서 새로운 job을 등록하는 테스트를 하겠다. 테스트 내용은 job_test01이라느 테이블을 만든 후 1분에 1번씩 해당 테이블에 데이터를 insert 하는 것이다.

 

 step 1. 테스트용 테이블과 sequencem procedure를 생성한다. 

SQL> conn ORACLE_TEST/oracle;
Connected.
SQL>
SQL>
SQL>
SQL> create sequence seq_job_seq1;

Sequence created.

SQL> create table job_test01
  2  (no number,
  3  name varchar2(5)) ;

Table created.

SQL> create or replace procedure insert_job_test01
  2  is
  3   begin
  4   insert into ORACLE_TEST.job_test01
  5   values(seq_job_seq1.nextval , dbms_random.string('a',3));
  6   end;
  7  /

Procedure created.

SQL> 

 

 

 step2. job을 등록할 프로시저를 생성한다. 

SQL> !vi job1.sql
begin
 dbms_job.submit (:jno,
  'ORACLE_TEST.insert_job_test01;',
  sysdate,
  'sysdate + 1/24/60' ,     <-- 1분에 한번씩 실행됨
  false);
 end;
/

:wq! 

 

 * 참고 : 위 5행의 시간 설정 방법 * 

 - 10분에 한번씩 실행하도록 지정하는 경우

  sysdate + 1/24/6 or sysdate + 1/144

-> 1/24 (1시간-60분)  / 6 : 10분 단위,

    1/144 : 24*6으로 나누어도 같은 의미 입니다. (1일은 1440분이므로)

 

- 1분에 한번으로 지정하는 경우

  sysdate + 1/24/60 or sysdate +1/1440

 

- 5분에 한번으로 지정하는 경우

  sysdate + 5/24/60

 

 - 매일 새벽 2시로 지정하는 경우

  trunc(sysdate) + 1 + 2/24    -> 다음날 새벽 2시를 지정함

 

위 예에서 trunc(sysdate)를 사용한 이유는 trunc를 사용하지 않으면 분 단위까지 나오기 때문입니다.

 

 - 매일 반 11시로 지정하는 경우

  trunc(sysdate) +23/24     -> 오늘 밤 11시를 지정했음

 

 

 

 step3. job을 등록한다.

SQL> variable jno number;
SQL>
SQL> @job1.sql

PL/SQL procedure successfully completed.

SQL> print jno;

       JNO
----------
        21                                        <-- 현재 할당된 job 번호를 확인한다. 이번호는 random으로 지정됨

SQL> commit;                                <-- 이 시간부터 job이 수행된다. 즉 commit이 안되면 수행되지 않는다

Commit complete.

SQL>
SQL>
 

 

 

 step4. 수행되고 있는 job 내용을 확인한다.

SQL> set line 200
SQL> col what for a50
SQL> select what, job, next_date, next_sec, failures, broken
  2  from user_jobs
  3  where what ='ORACLE_TEST.insert_job_test01;';

 WHAT                                                      JOB   NEXT_DATE    NEXT_SEC    FAILURES  B
---------------------------------------- ------ -------------  -----------   ----------  -
ORACLE_TEST.insert_job_test01;                    21   29-OCT-13        18:29:24            0         N

SQL>

 

 

 step5. 실제 테이블에 데이터가 입력되는지 확인한다.

 SQL> select * from job_test01;

        NO NAME
---------- -----
         1 zgy
         2 skA
         3 jCl
         4 Akc
         5 FLw

SQL>

 

 

(2) 등록되어 있는 job 삭제하기

SQL> select what, job, next_date, next_sec, failures, broken
  2  from user_jobs;

WHAT                                                      JOB  NEXT_DATE    NEXT_SEC           FAILURES B
------------------------------------- -------- ------------ -------------- -     --------- ---
ORACLE_TEST.insert_job_test01;                   21   29-OCT-13    18:33:25                  0            N

SQL> exec dbms_job.remove(21);

PL/SQL procedure successfully completed.

SQL>  select what, job, next_date, next_sec, failures, broken
  2  from user_jobs;

no rows selected

SQL> 

 

 

 (3) 등록되어 있는 job 수정하기

SQL> select what, job, next_date,next_sec,interval
  2  from user_jobs;


WHAT                                      JOB    NEXT_DATE            NEXT_SEC                       INTERVAL
------------------------------ ---- ------------------- ---------------             ------------------ORACLE_TEST.insert_job_test01;   22    29-OCT-13             18:37:16                       sysdate + 1/24/60
 

 

 수행시간을 1분마다에서 5분마다 1회 수행으로 변경함.

 

 SQL> exec dbms_job.change(:jno,'ORACLE_TEST.insert_job_test01;',sysdate,'sysdate+5/24/60');

PL/SQL procedure successfully completed.

 

SQL> select what, job, next_date,next_sec,interval
  2  from user_jobs;

WHAT                                       JOB       NEXT_DATE                NEXT_SEC                   INTERVAL
------------------------------- ----      -------------             ----------------     ----------------
ORACLE_TEST.insert_job_test01;    22        29-OCT-13                  18:38:35                  sysdate+5/24/60

SQL>

 

 

http://ann-moon.tistory.com/45

Posted by Any DB
,

$ORACLE_HOME/network/admin/listener.ora 에서 다음 명령어를 추가해준다.

 

맨 마지막줄

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON

DIAG_ADR_ENABLED_LISTENER=OFF

LOG_FILE_LISTENER=listener_etc.log    <<--- LOG로 남길 파일

LOG_DIRECTORY_LISTENER=/tmp        <<--- LOG가 저장될 위치

 

wq!

 

lsnrctl reload

 

원복방법

위의 3줄 삭제후 저장

'Oracle > Admin' 카테고리의 다른 글

dbms_job pakage  (0) 2013.10.29
자동 ANALYZE 스케쥴러 작업 해지  (0) 2013.09.04
Oracle11g (11.1.0.7.0) 부터 deprecate된 parameters  (0) 2013.08.23
자동 sql 실행 메모리에 대해  (0) 2013.08.02
PGA(Program Global Area)의 개념  (0) 2013.08.02
Posted by Any DB
,

 오라클 10g에서 디폴트로 걸려있는 SCHEDULER를 확인.

 

SQL> connect /as sysdba

SQL> SELECT OWNER, JOB_NAME, JOB_CREATOR, STATE FROM DBA_SCHEDULER_JOBS ;

 

OWNER                          JOB_NAME                       JOB_CREATOR                    STATE

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

SYS                            PURGE_LOG                      SYS                            SCHEDULED

SYS                            FGR$AUTOPURGE_JOB              SYS                            DISABLED

SYS                            GATHER_STATS_JOB               SYS                            SCHEDULED

SYS                            AUTO_SPACE_ADVISOR_JOB         SYS                            SCHEDULED

 

 'STATE' 항목에 'SCHEDULED'로 표시된 항목이 현재 SCHEDULER가 걸려있는 것이다. 이를 DISABLED 시키면 자동스케줄러 작업이 해지된다.

 

자동 Analyze 스케줄러 작업을 해지 시키기

 

SQL> EXEC DBMS_SCHEDULER.DISABLE('PURGE_LOG');

SQL> EXEC DBMS_SCHEDULER.DISABLE('FGR$AUTOPURGE_JOB');

SQL> EXEC DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');

SQL> EXEC DBMS_SCHEDULER.DISABLE('AUTO_SPACE_ADVISOR_JOB');

 

 

SQL> SELECT OWNER, JOB_NAME, JOB_CREATOR, STATE FROM DBA_SCHEDULER_JOBS ;

 

OWNER                          JOB_NAME                       JOB_CREATOR                    STATE

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

SYS                            PURGE_LOG                      SYS                            DISABLED

SYS                            FGR$AUTOPURGE_JOB              SYS                            DISABLED

SYS                            GATHER_STATS_JOB               SYS                            DISABLED

SYS                            AUTO_SPACE_ADVISOR_JOB         SYS                            DISABLED

 

Posted by Any DB
,

Oracle의 version이 올라감에 따라 새로운 initialization parameters도 생기지만,

제거되는(deprecate) initialization parameters도 계속 생겨납니다.

 

deprecate parameters가 specify된 상태에서 instance를 기동하면,

다음과 같은 warning message가 출력되게 됩니다.

 

 SQL> startup;

 ORA-32004: obsolete and/or deprecated parameter(s) specified
 ORACLE instance started.

 Total System Global Area 1068937216 bytes
 Fixed Size                           2166536 bytes
 Variable Size                    754974968 bytes
 Database Buffers              306184192 bytes
 Redo Buffers                       5611520 bytes

 

 

여기서는 어떤 parameters가 deprecate되었는지 살펴보려고 합니다.

다음의 SQL문을 통해 11.1.0.7.0부터 deprecated parameters를 확인할 수 있습니다.

SQL> select name from v$parameter where isdeprecated = 'TRUE' order by 1;

name

background_dump_dest

buffer_pool_keep

buffer_pool_recycle

commit_write

cursor_space_for_time

drs_start

fast_start_io_target

global_context_pool_size

instance_groups

lock_name_space

log_archive_local_first

log_archive_start

max_commit_propagation_delay

max_enabled_roles

parallel_automatic_tuning

parallel_server

parallel_server_instances

plsql_debug

plsql_v2_compatibility

remote_os_authent

resource_manager_cpu_allocation

serial_reuse

sql_trace

sql_version

standby_archive_dest

user_dump_dest

 

 

26 rows selected.

 

이제 parameter 하나하나에 대해 의미 및 용도,

그리고 deprecate된 이유에 대해서 설명하고자 합니다.

 

1. background_dump_dest

 

    ●  의미 용도

           LGWR, DBWR등의 background process들이 활동을 하면서 발생되는 trace files

           저장되는 곳으로, alert_SID.log 이곳에 저장됩니다.

 

    ●  deprecate 이유

           Oracle11g부터는 새로운 diagnosability infrastructure 제공하는데,

           이것은 "diagnostic_dest"라는 initialization parameter 지정하는 directory

           trace and core files 저장하도록 합니다.

           background_dump_dest initialization parameter file 기술되어 있어도 무시됩니다.

 

2. buffer_pool_keep

 

    ●  의미 용도

           keep buffer 사이즈(blocks) 결정합니다.

 

    ●  deprecate 이유

           Oracle9i부터는 db_keep_cache_size 대신할 있게 되어서 deprecate되었습니다.

 

3. buffer_pool_recycle

 

    ●  의미 용도

           recycle buffer 사이즈(blocks) 결정합니다.

 

    ●  deprecate 이유

           Oracle9i부터는db_recycle_cache_size 대신할 있게 되어서 deprecate되었습니다.

 

4. commit_write

 

    ●  의미 용도

           asynchronous commit 허용할지 여부를 정합니다.

 

           parameter 의미를 설명하기 위해서는

           transaction commit되는 과정을 설명할 필요가 있습니다.

 

           일반적인 transaction 다음과 같은 과정을 거쳐서 처리됩니다.

           (1) user transaction 수행한다

           (2) user 수행하는 DMLs 관련된 data changes log buffer(memory) 담는다.

           (3) user commit 실행하는 순간, 즉시 해당 transaction 관련된 내용을

                log buffer로부터 online redo logs(disk) write한다.

           (4) online redo logs에의 write 끝난 이후에야 user 응답한다.

                (SQL*Plus 경우에는 "Commit complete."라는 message 반환됩니다)

 

           위는 transaction commit되는 동안 발생하는 default과정으로,

           (3)에서는 commit순간에 즉시(immediate) redo logs(disk) write 하고 있으며,

           (4)에서는 redo logs write 끝날 때까지 기다린(wait) 후에 user 응답하도록

           되어 있습니다.

 

           default과정 대신에

           commit되는 타이밍과 관계없이 redo logs를 적당한 timing에 모아서(batch) write하고,

           redo logs에 write가 끝날 때까지 기다리지 않고(nowait) 바로 user에 응답하도록

           설정을 변경할 수도 있습니다.

 

           위와 같이 설정을 변경하는 방법에는 2가지가 있는데,

           하나는 "commit" command option 통해 statement level에서 수행하는 것이며,

           다른 하나는 "commit_write"라는 parameter 사용해서

           instance level에서 적용되도록 하는 것입니다.

 

           일반적으로 SQL*Plus에서 commit 실행하는 것은,

           "commit write immediate wait;" (immediate wait 순서가 바뀌어도 상관없다)

           실행하는 것과 같습니다.

 

           만약 아래와 같은 command 실행하게 된다면,

           commit write batch nowait;   

           transaction 관련된 changes redo log files(disk) 바로 쓰여지지 않을 것이며,

           바로 user에게 "Commit complete."라는 message 반환하게 됩니다.

           설정을 instance level에서 적용시키고자 한다면,

           alter system set commit_write = 'batch,nowait';

           이라고 실행하면 됩니다.

 

           만약 아래와 같은 command 실행하게 된다면,

           commit write immediate nowait;            

           transaction 관련된 changes redo log files 바로 쓰여지게 되지만,

           redo log files에의 write 끝날 때까지 기다리지 않고

           바로 user에게 "Commit complete."라는 message 반환하게 됩니다.

 

           만약 parameter default값에서 다른 값으로 변경하는 경우,

           commit performance 좋아진다는 장점이 있지만,

           redo log files changes disk 저장되지 않은 상태에서 media failure 발생하는 경우,

           disk 저장되지 않은 transactions 대해서는

           instance recovery 통해서 복구할 없다는 단점이 있습니다.

 

    ●  deprecate 이유

           Oracle11g부터는 "commit_logging" "commit_wait"이라는 2개의 parameters 분리시켜서

           동일한 기능을 하도록 바뀌었기 때문에, "commit_write" deprecate되었습니다.

 

5. cursor_space_for_time

    ●  의미 용도

           하나의 SQL문이 실행되기 위해서는 parse execute단계를 거치게 됩니다.

           instance 기동된 , 처음으로 실행된 SQL문에 대해 parse 결과는 

           shared pool 저장되며, 이후에 실행되는 동일한 SQL문에 대해서는 parse 수행하지 않고

           shared pool 저장된 parsed 정보를 이용해서 execute하게 됩니다.

 

           새로운 정보를 shared pool(library cache) 기록하려는 순간에

           shared pool 있게 되면 우선 closed cursor정보를 제거하고,

           다음은 LRU(Least Recently Used) algorithm 따라 낡은(aged) 정보를 제거합니다.

           만약 open cursors shared pool 꽉찬 경우에는

           open cursor parsed 정보가 shared pool에서 제거되기도 합니다.

 

           그러므로 다량의 SQL문이 빈번하게 발행되는 환경에서는

           open cursor 대해, parse단계에서 존재했었던 parsed정보가

           execute단계에서 없어져 버리는 경우가 간혹 발생하게 됩니다.

           결국 다시 parse(hard parse)해야 하므로 performance 떨어지는 원인이 됩니다.

           하지만 "cursor_space_for_time" true 설정하게 되면,

           open cursor parsed정보가 제거되지 않게 됩니다.

 

           그런 의미에서 "cursor_space_for_time" 통해

           경우에 따라서는 약간의 성능향상을 기대할 있습니다.

 

    ●  deprecate 이유

           위에서 언급한 것처럼 open cursors shared pool 꽉차는 경우는

           shared pool 굉장히 작은 경우에나 발생하며,

           Oracle10g이후에는 Automatic Memory Management기능을 통해

           자동으로 shared pool 크기가 관리되기 때문에

           parameter 성능향상에 기여하는 경우는 거의 없어지게 되었습니다.

           initialization parameter수의 증가는 DB관리자를 피곤하게 뿐이므로,

           거의 활용도가 없는 parameter deprecate 것은 매우 긍정적이라고 생각됩니다.

 

6. drs_start

 

    ●  의미 용도

           DMON(Data Guard Broker)이라는 background process를 기동할 지 여부를 정합니다.

           Data Guard Broker란, Data Guard환경을 감시, 관리할 수 있도록 해주는 framework로,

           DGMGRL이라는 command-line interface(dgmgrl 이라는 binary file이 존재함)

           혹은 Enterprise Manager를 통해 Data Guard Broker기능을 이용할 수 있습니다.

           drs_start라는 parameter를 true로 설정해야만

           Data Guard Broker가 제공하는 기능을 이용할 수 있습니다.

           drs_start를 true로 설정하지 않고 Data Guard Broker를 활용하려고 하는 경우,

           다음과 같이 error가 발생하게 됩니다.

DGMGRL> create configuration 'DRSolution' as primary database is 'North_Sales' connect identifier is North_Sales.foo.com;
Error:
ORA-16525: the Data Guard broker is not yet available
...

 

 

    ●  deprecate 이유

           Oracle9iR2부터 dg_broker_start라는 parameter로 대체되면서 deprecate되었는데,

           drs_start라는 parameter명이 Data Guard Broker를 떠올릴 만한 이름이 아닌 관계로,

           보다 구체적이고 합리적인 parameter명으로 대체된 듯 합니다.

 

7. fast_start_io_target

 

    ●  의미 용도

           이 parameter에 대해 설명하기 전에

           data가 변경되는 과정에 대해서 간단히 언급하고자 합니다.

 

           Oracle에서는 transaction을 통해 변경된 data정보를 바로 disk에 기록하지 않고,

           SGA의 buffer cache에 저장한 후, Oracle 스스로 system의 부하를 고려하여

           적당하다고 판단되는 타이밍에 몰아서(batch) disk에 기록을 하도록 되어 있습니다.

 

           그러므로 buffer cache상에는 memory상의 정보는 변경되었지만

           disk에는 아직 반영되지 않은 상태의 block이 항상 존재하게 됩니다.

           이런 block을 Oracle에서는 "dirty block"이라고 부릅니다.

           이 dirty block은 checkpoint가 발생하는 타이밍에 disk에 쓰여지게 됩니다.

 

           fast_start_io_target는 dirty blocks의 수를 제한하기 위한  parameter로,

           만약 1,000이라는 값을 설정했다면, dirty blocks가 1,000개를 넘기 전에

           dirty blocks를 disk에 write하게 됩니다.

 

           그러므로 이 fast_start_io_target를 보다 작은 값으로 설정할수록,

           checkpoint에 소요되는 시간이 줄어들며,

           roll forward할 양이 적어지므로 instance recovery에 걸리는 시간도 줄어들게 됩니다.

           참고로, "0"으로 설정하면 이 기능이 disable됩니다.

 

    ●  deprecate 이유

           10.1.0.4부터 fast_start_mttr_target parameter로 대체되면서 deprecate되었는데,

           그 이유는 fast_start_io_target를 잘못 설정할 경우,

           지나친 부하로 system이 다운될 수 있기 때문입니다.

 

8. global_context_pool_size

 

    ●  의미 용도

           지금까지 들어 본 적도 없는 parameter인데,

           조사해 보니, Oracle9i의 신기능과 더불어 등장한 parameter라고 합니다.

 

    ●  deprecate 이유

           10.1.0.4부터 deprecate되었는데, Oracle10g부터 Automatic Memory Management가

           주류가 되면서 이 parameter의 설정이 불필요해 진 것 같습니다.

 

 

9. instance_groups

 

 

    ●  의미 용도

           RAC환경에서만 의미를 가지는 parameter로,

           각각의 instance에 대해 자신이 속할 instance_group을 설정할 수 있으며,

           comma(,)로 구분하여 복수의 groups에 속하도록 설정할 수도 있습니다.

 

           여기서 설정되는 instance group은 parallel execution을 수행할 때만 의미를 가지므로,

           반드시 parallel_instance_group이라는 parameter와 함께 사용되어야 합니다.

           (이상하게도 parallel_instance_group parameter는 아직 deprecate되지 않았습니다.)

 

           예를 들어, instance 4개로 구성된 RAC이 있고,

           instance 1,2에 대해서만 instance_groups의 값을 sales라고 설정하고,

           parallel_instance_group값을 sales라고 설정한 후에 parallel execution을 실행하게 되면,

           sales group에 속하지 않은 instance 3,4는 parallel execution에 관여하지 않고

 

           오직 instance 1,2만 parallel execution에 참여하여 관련 processes가 발생하게 됩니다.

 

           사실 저 역시도 이 parameter를 사용해 보지 않아서 충분히 이해가 되지는 않습니다.

 

    ●  deprecate 이유

           11.1.0.6부터 deprecate되었는데, 정확한 이유는 모르겠지만,

           아마도 이 parameter의 사용법이 어려워서 

           제대로 활용하기가 힘들기 때문이 아닐까 싶습니다.

 

10. lock_name_space

 

    ●  의미 용도

           DLM(Distributed Lock Manager)가 lock이름을 생성하기 위해 사용하는 namespace를

           지정하는 parameter라고 하는데 잘 이해가 안되네요.

           (LOCK_NAME_SPACE specifies the namespace that the distributed lock manager (DLM)

           uses to generate lock names)

           이 parameter는, primary database와 동일한 host상에 standby database 혹은

           동일한 db_name을 가지는 clone database를 생성하고자 하는 경우에

           반드시 값을 설정해야 합니다.

 

           제가 혼자 Oracle을 공부하던 시절에 하나의 PC에

           primay 뿐만 아니라 standby database까지 생성한 적이 있습니다.

           이 당시에 lock_name_space를 설정하지 않으면 error가 발생했던 기억이 납니다.

 

    ●  deprecate 이유

           10.1.0.4부터는 db_unique_name이라는 새롭게 등장한 parameter가

           lock_name_space의 역할을 대신하게 되면서 deprecate되었습니다.

11. log_archive_local_first

 

    ●  의미 용도

           Data Guard환경에서만 의미를 가지는 parameter로,

           (=true) primary host상의 local destination에 archiving을 반드시 끝낸 이후에,

           standby host에 archiving을 수행할지, 아니면

           (=false) primary 및 standby host상에서 동시에 archiving을 수행할지를

           정하는 parameter입니다.

 

           전자의 경우에는, local에 archiving이 끝난 archived redo log를 standby host에 전송하는

           형태를 가지기 때문에 log transport service를 archiver process(ARCn)가 담당하게 되며,

           후자의 경우에는, standby destination에 동시에 redo data를 전송하기 때문에 

           log writer process(LGWR)가 log transport service를 담당하게 됩니다.

           그러면 standby host상의 archiver process는 전송받은 redo data를 가지고

           archived redo log를 생성하게 됩니다.

 

           이 parameter는 Oracle10g부터 등장했으며, 그 이전 version에서는,

           LGWR을 사용해서 동시에 archiving을 수행하는 것이 default설정이었습니다.

           하지만 Oracle10g이후부터는 "log_archive_local_first"의 default값이 "true"로,

           즉, local에 archiving이 끝난 이후에 standby host에 전송하는 방식이 default설정입니다.

 

    ●  deprecate 이유

           Oracle11g부터 deprecate되었으며, 정확한 이유는 모르겠지만, 아마도           

           "log_archive_local_first"값을 "false"로 설정할 필요가 있는 경우가 거의 없고,

           설정해도 큰 메리트가 없기 때문으로 보입니다.

 

12. log_archive_start

 

    ●  의미 용도

           ARCHIVELOG mode상태의 database가 online redo log가 full되는 시점에

           자동으로 archiving을 하도록 하기 위해 필요한 설정입니다.

 

    ●  deprecate 이유

           Oracle10g부터 deprecate되었는데,

           Oracle9i까지는 ARCHIVELOG mode상태의 database에 대해

           이 parameter값을 "true"로 설정함으로서 자동으로 archiving이 수행되게 할 수도 있고,

           이 parameter값을 "false"로 설정해서 수동으로만 archiving을 할 수 있도록

           설정할 수도 있었습니다.

           하지만 실제로 수동 archiving기능은 거의 사용되지 않았기 때문에,

           Oracle10g부터는 ARCHIVELOG mode로 설정을 하게 되면

           그 순간부터 자동 archiving이 수행되도록 바뀌었습니다.

           그 결과, "log_archive_start"라는 parameter는 쓸모가 없게 되었습니다.

 

13. max_commit_propagation_delay

 

    ●  의미 용도

           RAC환경에서만 적용되는 parameter인데,

           한 번도 본 적도 없고 사용한 적도 없는 parameter라 잘 모르겠네요.

           아래의 페이지에 잘 설명되어 있는 것 같습니다.

           http://wiki.ex-em.com/index.php/MAX_COMMIT_PROPAGATION_DELAY

 

    ●  deprecate 이유

           10.2.0.3부터 deprecate되었습니다.

 

 

14. max_enabled_roles

 

 

    ●  의미 용도

           한 user에 grant할 수 role의 개수의 최대치를 정하는 parameter입니다.

           예를 들어 이 값이 "10"인 경우, 10개의 roles까지만 grant할 수 있습니다.

           (이 "10"개의 role에, 실제 자신의 schema내의 objects에 접근할 수 있는 role과

           public objects에 접근할 수 있는 role, 이 2가지 role은 포함되지 않습니다)

 

    ●  deprecate 이유

           Oracle10g부터 deprecate되었으며, 148개까지의 roles를 grant할 수 있습니다.

           처음에는 이 parameter가 왜 생겨났는지 도무지 이해가 안되었는데,

           이 parameter를 적은 값으로 설정하면 할수록 

           resource(특히 memory)를 절약할 수 있는 잇점이 있는 것 같습니다.

           하지만 Oracle10g가 등장한 시절부터는 memory값이 많이 저렴해졌기 때문에,

           이 parameter의 설정을 통해 얻을 수 있는 잇점이 거의 없어진 것 같습니다.

 

15. parallel_automatic_tuning

 

    ●  의미 용도

           PX(parallel execution)와 관련된 다음의 5개의 parameters의 설정에 대해,

           true인 경우에는 Oracle이 기존 설정치를 무시하고 자동으로 설정을 변경할 수 있게 하며,

           false인 경우에는 자동으로 tuning하지 못하도록 하는 parameter입니다.

           (1) parallel_execution_message_size

           (2) parallel_adaptive_multi_user

           (3) large_pool_size

           (5) parallel_max_servers

 

           이 parameter가 의미를 갖기 위해서는, 병렬처리를 하고자 하는 target tables에 대해

           "parallel" clause를 반드시 지정해야 합니다.

    

           (4) processes

    ●  deprecate 이유

           Oracle9i까지는 를 true로 설정함으로서 parallel execution의 성능향상이 있었는데,

           즉, 위의 5개의 parameters값의 새로운 default값이 의미가 있었지만, 

           Oracle10g부터는 이 default값이 오히려 성능을 떨어뜨리는 경우가 많아지면서

           deprecate되게 되었다고 합니다.

           Oracle10g부터 SGA까지도 Oracle이 자동으로 관리해 주는 방식으로 변하면서,

           이 parameter가 불필요해 진 것 같습니다.

16. parallel_server

 

    ●  의미 용도

           database를 Oracle Parallel Server(OPS)환경에서 구동시키기 위해서 필요한 parameter로,

           single-instance database에서는 "false"라는 값을 가지게 되며,

           multi-instance database(OPS)환경에서는 "true"값이 설정되어야 합니다.

 

    ●  deprecate 이유

           이 OPS는 Oracle8i 까지 존재했던 cluster환경을 일컫는 용어이며,

           Oracle9i 이후에는 OPS 대신에 RAC(Real Application Cluster)라는 용어가 사용되고 있습니다.

           물론 용어만 달라진 것은 아니며, 내부 메커니즘도 크게 달라졌습니다.

           Oracle9i 부터 "parallel_server"를 "cluster_database"라는 parameter가 대체하게 되면서,

           이 parameter는 deprecate되었습니다.

 

17. parallel_server_instances

 

    ●  의미 용도

           database를 Oracle Parallel Server(OPS)환경에서 구동시키기 위해서 필요한 parameter로,

           OPS환경에 참가한 instances의 수가 설정됩니다.

           single-instance database에서는 당연히 "1" 이라는 값을 가지게 되며

           multi-instance로 구성된 OPS환경에서는 1보다 큰 값을 가지게 됩니다.

 

    ●  deprecate 이유

           앞의 "parallel_server"과 마찬가지로 

           "parallel_server_instances"는 OPS환경에서 사용되던 parameter로,

           Oracle9i 부터는 "cluster_database_instacnes"로 대체되면서 deprecate되었습니다.

 

18. plsql_debug

 

    ●  의미 용도

           PL/SQL의 debug를 돕기 위한 parameter입니다.

           programming을 마치고 debugging과정에 들어가게 되면,

           어디에서 문제가 발생하고, 특정 변수에 어떤 값이 들어가는지, 등등을 알기 위해,

           program 내부에 debug관련 code를 넣고,

           monitor등의 standard output에 debug관련 문자열을 출력시켜 가면서

           debugging하는 경우가 많이 있습니다.

           이 debug용 code는 debug가 끝나면 지워야 하는데, 또 다른 bug가 발생하게 되면

           다시 debug용 code를 입력해야 하는 번거로운 일이 생기게 됩니다.

 

           이 번거로운 과정을 줄이기 위해, 등장한 parameter가 plsql_debug입니다.

           아래의 예와 같이, 이 parameter값을 통해 debug문의 출력여부를 제어할 수 있습니다.

SQL> show parameter plsql_debug

name

type

value

plsql_debug

boolean

false

 

SQL> create or replace function sample_plsql return date

    2   is

    3     currentDate date;

    4   begin

    5     $if $$plsql_debug $then

    6       dbms_output.put_line('debug point----------1');

    7     $end

    8     select sysdate into currentDate from dual;

    9     return currentDate;

  10   end sample_plsql;

  11   /

 

Function created.

 

SQL> select sample_plsql from dual;

sample_plsql

2010/02/25 16:20:36

 

-- 아래에서는 session level에서 "plsql_debug" parameter값을 변경했지만

-- system level에서 변경도 가능합니다

SQL> alter system set plsql_debug = true;

Session altered.

 

-- 아래의 결과를 보면 이상하게도 "plsql_debug"값을 "true"로 변경했지만

-- debug문이 출력되지 않았습니다

SQL> select sample_plsql from dual;

sample_plsql

2010/02/25 16:21:06

 

SQL> alter function sample_plsql compile;

Function altered.

 

-- recompile하고 나서야 비로서 변경된 "plsql_debug"값이 반영되어

-- debug문이 출력되는 것을 알 수 있습니다.

SQL> select sample_plsql from dual;

sample_plsql

2010/02/25 16:20:36

 

debug point----------1

 

SQL> alter system set plsql_debug = false;

Session altered.

 

SQL> alter function sample_plsql compile;

Function altered.

 

-- "plsql_debug"를 "false"로 설정한 뒤 compile했더니 예상대로

-- debug문이 출력되지 않았습니다

SQL> select sample_plsql from dual;

sample_plsql

2010/02/25 16:21:06

 

 

SQL> alter function sample_plsql compile debug;

Function altered.

 

-- debug option을 붙여서 compile하게 되면, 아래의 결과와 같이

-- "plsql_debug"값과 관계없이 debug문이 출력됩니다.

SQL> select sample_plsql from dual;

sample_plsql

2010/02/25 16:20:36

 

 

debug point----------1

 

            ※ 위의 결과는 Oracle10gR2 환경에서 실행한 결과로서 다른 version에서는

                다른 결과가 나타날 수 있습니다.

 

    ●  deprecate 이유

           이 parameter는 Oracle11g부터 deprecate되었는데,

           위에서처럼, Oracle10gR2부터는 alter...comple문에 debug option이 사용가능해 지면서

           구태여 "plsql_debug" parameter를 설정할 필요가 없어지게 되었습니다.

 

19. plsql_v2_compatibility

 

    ●  의미 용도

           Oracle이 제공하는 PL/SQL에는 여러 가지 version이 있습니다.

           Version 1.0 부터 시작해서 1.1(Oracle6)→2.0(Oracle7.0)→2.1(Oracle7.1)→2.2(Oracle7.2)

           →2.3(Oracle7.3)→8.0(Oracle8.0)→... 으로 계속 version이 증가하고 있으며.

           2.3에서 8.0으로 갑자기 크게 증가한 이유는 PL/SQL에 엄청난 성능향상이 있어서 라기 보단

           PL/SQL version을 database version에 일치시키는 편이 좋다고 판단했기 때문입니다.

 

           PL/SQL 2.x version에는 PL/SQL 8 이후의 version에서 허용하지 않는 기능이 몇가지 있는데,

           이 "plsql_v2_compatibility" parameter를 "true"로 설정하게 되면,

           PL/SQL library 및 compiler가 2.x version에 기반해서 동작하게 됩니다.

           이 경우, PL/SQL 8 이후의 version에서만 허용하는 기능을 사용하면 error가 발생하게 됩니다.

 

    ●  deprecate 이유

           Oracle11g부터 이 parameter가 deprecate되었는데, 더 이상 Oracle7에 대한 compatibility를

           support하는 것은 의미없다고 Oracle이 판단한 것 같습니다.

 

           PL/SQL version은 아래와 같이 확인할 수 있는데, 보통 database version과 동일합니다.

SQL> select * from v$version;

 

banner

Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production

PL/SQL Release 11.1.0.7.0 - Production

CORE    11.1.0.7.0      Production

TNS for Linux: Version 11.1.0.7.0 - Production

NLSRTL Version 11.1.0.7.0 - Production

 

 

 

20. remote_os_authent

 

 

    ●  의미 용도

           "os_authent_prefix" parameter에 설정된 문자열을 prefix로 하는 O/S user에 대해

           remote host로부터 database에 access를 가능케 하기 위한 parameter입니다.

           거의 사용할 일이 없기 때문에 자세한 설명은 생략합니다.

 

    ●  deprecate 이유

           Oracle11g부터 deprecate되었으며, 그 이유는

           잘 사용되지도 않을 뿐더러 보안상의 약점이 될 수 있기 때문인 것 같습니다.

21. resource_manager_cpu_allocation

 

    ●  의미 용도

           Resource Manager 이용할 있는 CPU수를 제한하는 parameter입니다.

           Resource Manager 설정된 Resource Plan 따라 database 연결된 sessions 대해

           CPU 배분하는데, 보통 해당 server 모든 physical CPUs 활용됩니다.

           하지만, parameter값을 실제 CPU수보다 적은 값으로 설정하게 되면,

           설정된 CPU만이 database sessions handling 사용됩니다.

 

           예를 들어, physical CPUs "4"이고, 값으로 "3" 설정했다면,

           3개의 CPUs만이 database session handling 관여하고 1개의 CPU 관여하지 않게 됩니다.

 

    ●  deprecate 이유

            parameter 역사는 무척 짧습니다.

           11.1.0.6.0, 즉 11g에서 처음 등장했으며, 11.1.0.7.0에서 deprecate되었습니다.

           deprecate 정확한 이유는 모르겠습니다만,

           아마 값을 적절하게 설정하는 것이 무척 어렵고,

           설정했더니 오히려 performance 떨어지는 경우가 많았던 같습니다.

 

22. serial_reuse 

 

    ●  의미 용도

           어떤 종류의 cursor 대해 serial-reusable memory영역에 저장되도록 하여,

           재활용(reuse) 가능하게 정하는 parameter입니다.

           물론 동일한 cursor(동일한 SQL, PL/SQL block) 대해서만 재활용이 가능하며,

           여기서 말하는 "재활용"이란, 동일한 cursor 대해, SGA 저장되어 있는 parse 정보를

           재활용하는 것으로 다시 parse 하지 않도록 하는 것을 말합니다.

 

           값으로는, select, dml, plsql, all, disable 이라는 5가지 값을 설정할 있습니다.

           "select", select문에 대해서만 parse정보를 serial-reusable memory 저장한다는 것이며,

           "all", "select, dml, plsql" 모든 종류의 parse정보를 저장한다는 것을 말합니다.

 

    ●  deprecate 이유

            parameter 8.1.7.4.0에서 처음 등장했으며, 10g에서 deprecate되었습니다.

           deprecate 정확한 이유는 모르겠습니다만,

           metalink 확인해 결과, serial_reuse 설정하는 것과 관련해서

           여러 가지 bugs 보고되고 있습니다.

           , parameter 세밀하게 설정함으로서 얻는 성능향상의 효과보다는

           bug 때문에 얻게 되는 손실이 크다고 판단되어 deprecate 같습니다.

 

           그리고 parameter memory 부족하던 시절에 보다 효율적으로

           memory 활용하고자 하는 목적에서 등장했기 때문에,

           Oracle10g 등장한 시절은 SGA 여유도 많이 생겼고,

           결과 이렇게까지 세심한 tuning 필요없어 졌다고 보입니다.

 

23. sql_trace 

 

    ●  의미 용도

           SQL trace 가능여부를 정하는 parameter입니다.

           유명한 parameter이므로 자세한 설명은 생략하겠습니다.

 

    ●  deprecate 이유

 

            sql_trace라는 initialization parameter값을 SQL Trace 하기 위해 true 설정하게 되면

           해당 database상에서 발생하는 모든 SQL 대해 trace정보가 수집됩니다.

           사용자가 발행하는 SQL 제외하고도 그런 SQL 처리하기 위해 내부적으로

           data dictionary 참조하는 SQL문이 다량으로 발행되는데 이것까지 수집됩니다.

           이런 모든 SQL 대해 trace정보를 수집하는 것은 system 부하가 걸리게 됩니다.

           자칫하면 trace file 인해 disk full 발생 수도 있습니다.

           이런 배경에서 initialization parameter level에서 sql_trace true 설정하지 못하도록

           deprecate시킨 것으로 보입니다.

 

           (dbms_monitor database_trace_enable database_trace_disable 사용해서

           database level에서 SQL trace 활성화시킬 있습니다.)

           

            parameter Oracle10gR2부터 deprecate되었으며,

           session level에서 SQL trace기능을 enable/disable하는 것은

           dbms_monitor dbms_session package session_trace_enable

           session_trace_disable함수가 대신하게 되었습니다.

 

           dbms_monitor package의 관련 함수의 경우에는 별도의 권한이 필요하지만,

           dbms_session의 경우에는 별도의 권한없이 실행할 수 있습니다.

           두 함수다 다음과 같이 parameter없이 실행할 수 있으며,

           그 경우 접속중인 session에 대해서 SQL trace를 enable/disable시킵니다.

 

SQL> execute dbms_session.session_trace_enable();

PL/SQL procedure successfully completed.

 

SQL> select count(*) from emp;

 

SQL> execute dbms_session.session_trace_disable();

PL/SQL procedure successfully completed.

 

 

 

24. sql_version (생략)

 

25. standby_archive_dest

 

    ●  의미 용도

           Data Guard상에서 standby host가 primary host로부터 전송된 archived redo logs를

           저장하는 directory를 지정하는 parameter입니다.

 

           기본적으로 primary host로부터 전송된 archived logs는 "log_archive_dest_n" parameter의

           "location" attribute에 명시된 directory에 저장되는데,

           이것과 다른 directory에 저장하고자 하는 경우에 "standby_archive_dest"를 설정합니다.

           그러므로 이 2 parameters가 모두 설정된 경우에는 "standby_archive_dest" parameter에

           설정된 값이 "log_archive_dest_n" parameter의 값을 override합니다.

 

           참고로, standby host상에 archived logs가 저장되는 directory를 정리하면,

           다음과 같은 rule에 따라 결정됩니다.

           (1) "standby_archive_dest"값이 설정되어 있으면 그 곳에 저장됩니다.

           (2) "standby_archive_dest"값이 설정되어 있지 않으면,

                "valid_for=(standby_logfile, *)"를 포함하는 "log_archive_dest_n"의 "location"

                attribute에 명시된 directory에 저장됩니다.

           (3) "standby_archive_dest"값이 설정되어 있지 않으며,

                "valid_for=(standby_logfile, *)"를 포함하는 "log_archive_dest_n"이 없는 경우,

                "compatibility" parameter값이 10.0 이상인 경우에는,

                유효한 값이 설정된 "log_archive_dest_n"의 "locationattribute에 따라 결정됩니다.

           (4) 위의 조건 중 어느 것에도 해당하지 않는 경우에는,

                "standby_archive_dest" parameter의 default값(default location)에 저장됩니다.

                이 default값은 "show parameter standby_archive_dest"가 아닌,

                다음의 SQL을 통해 확인할 수 있습니다.

                (Oracle11g에서는 "standby_archive_dest" parameter의 default값은,

                 "log_archive_dest_n"의 "locationattribute에 명시된 directory와 동일합니다)

SQL> show parameter log_archive_dest_1

name

type

value

log_archive_dest_1

string

location=/oradata/DTMRTCN/archivelog valid_for=(all_logfiles, all_roles) db_unique_name=DTMRTCN

 

SQL> show parameter standby_archive_dest

name

type

value

standby_archive_dest

string

?/dbs/arch

 

SQL> select dest_name, destination from v$archive_dest

  2  where dest_name = 'STANDBY_ARCHIVE_DEST';

 

dest_name

destination

STANDBY_ARCHIVE_DEST

/oradata/DTMRTCN/archivelog

    ●  deprecate 이유

           이 parameter는 Data Guard의 개념이 등장한 8.1.7에 처음 등장하였고,

           Oracle11g부터 deprecate되었습니다.

 

           위에서 설명한 것 처럼, standby_archive_dest값이 설정되어 있지 않은 경우에는, 

           log_archive_dest_n이 가리키는 directory에 archived redo logs가 저장되므로

           standby_archive_dest가 반드시 필요한 것은 아닙니다.

           보통 standby_archive_dest parameter자체를 설정하지 않는 경우가 많으며,

           값을 설정하는 경우에는 일반적으로 log_archive_dest_n과 동일한 값을

           설정하는 경우가 많습니다.

 

           즉, 혼란만 부추길 뿐 반드시 필요한 parameter가 아니기 때문에 deprecate되었습니다.

           

26. user_dump_dest

 

 

    ●  의미 용도

           user process와 관련된 debugging trace files이 저장되는 directory를 가리킵니다.

 

    ●  deprecate 이유

           Oracle11g부터는 새로운 diagnosability infrastructure 제공하는데,

           이것은 "diagnostic_dest"라는 initialization parameter 지정하는 directory

           trace and core files 저장하도록 합니다.

           user_dump_dest initialization parameter file 기술되어 있어도 무시됩니다.

 

 

Posted by Any DB
,

9I) 자동 SQL 실행 메모리 : PGA_AGGREGATE_TARGET, WORKAREA_SIZE_POLICY
   

제품 : ORACLE SERVER



(9I) 자동 SQL 실행 메모리 : PGA_AGGREGATE_TARGET, WORKAREA_SIZE_POLICY
======================================================================

PURPOSE
-------

Oracle 9i의 새 기능인 자동화된 SQL 실행 메모리 관리(Automated SQL Execution
Memory Management) 기능에 대하여 알아본다.


Explanation
-----------

한 프로세스 당 하나만 할당되는 PGA 메모리 영역은 SGA 영역과는 달리
다른 프로세스와 공유되지 않는, 각 프로세스가 독립적으로 사용하는
non-shared 메모리 영역이다.
PGA 메모리에는 다음과 같은 정보를 저장한다.

- session의 variable, array
- cursor 실행 메모리
- persistent 영역
- run-time 영역

특히, run-time 영역에는 SQL 문을 실행하는 중에 사용하는 정보를 포함하게
되는데, SQL 문의 복잡도, 처리해야 할 데이타의 양 등에 따라 이 영역의
크기가 달라진다. 이 영역은 SQL 문의 수행이 끝나면 OS로 메모리가 반환된다.

DSS(Decision Support System) 분야에서 사용되는 복잡한 SQL 문의 경우, 이
runtime 영역의 많은 부분이, 메모리를 많이 필요로 하는 row source들에 의해
사용된다. 이러한 row source의 예로는 sort row source, hash-join row source
등을 들 수 있다. 일반적으로 이 row source들을 위한 메모리가 많이 할당될 수록
질의 처리 속도가 현저히 빨라진다.

Oracle 8i 버젼까지는 DBA가 sort_area_size, hash_area_size, bitmap_merge_area_size,
create_bitmap_area_size 등의 다양한 initSID.ora 파라미터를 이용해서 이들
run-time 영역의 메모리를 제어할 수 있었다.

그런데, 현재 버젼(8i)까지의 방식은 다음과 같은 문제점이 있다.

1) 이들 파라미터는 관련 SQL 문들의 수행 빈도와 동시성 등에 의존하기 때문에
경험이 풍부한 DBA라 하더라도 이들 파라미터를 튜닝하기가 쉽지 않다.

2) 현재 방식은 특정 질의가 사용할 최대 메모리 크기를 제어하지 않기 때문에
특정 사용자가 메모리를 과다하게 사용하게 되므로 오히려 성능 저하를 유발할 수
있다.

3) 필요 이상으로 과다하게 할당된 파라미터의 경우 메모리 낭비를 일으킨다.

이러한 이유로 인하여 Oracle 9i에서는 자동화된 SQL 실행 메모리 관리 기능이
새롭게 추가되었다.

Oracle 9i에서 자동화된 SQL 실행 메모리 관리
-------------------------------------------
이와 같은 Oracle 8i에서 SQL 실행 메모리 관리의 문제점을 극복하기 위해서
Oracle 9i부터는 자동화된 SQL 실행 메모리 관리 기능을 제공한다.
즉, SQL 실행 메모리의 크기를 DBA가 initSID.ora 파라미터로 지정하는 대신에,
질의 수행 시에 Oracle 서버가 자동적으로, 그리고 동적으로 조절하는 기능을
제공한다.

이와 같이 자동화된 SQL 실행 메모리 관리 기능은 다음과 같은 장점을 제공한다.

1) 메모리 튜닝의 편이성
2) 메모리 튜닝에 사용되는 시간의 단축
3) 메모리 사용 효율성 증대로 인한 시스템 throughput 향상
(특히 동시 사용자가 많을 때)
4) 개별 질의에 대한 response time 향상

이 문서에서는 자동화된 SQL 실행 메모리 관리와 개념에 대하여 알아보기로 한다.


1. WORKAREA_SIZE_POLICY = AUTO

Oracle 9i에서는 자동화된 SQL 실행 메모리 관리 기능을 위해 PGA run-time 영역
할당을 하는 데 있어 automatic 모드와 manual 모드를 제공한다. 모드 선택은
WORKAREA_SIZE_POLICY 파라미터를 통해 지정할 수 있다. 이 파라미터는 세션 및
시스템 레벨에서 다음과 같이 동적으로 변경할 수 있다.

ALTER {SYSTEM|SESSION} SET WORKAREA_SIZE_POLICY={AUTO|MANUAL};

Manual 모드는 단지 Oracle 9i 이전 버젼과 호환을 위해 제공하는데, 이 모드가
default이다. 이 모드로 설정되면, *_area_size 파라미터들을 이용해서 메모리
튜닝이 가능하다.

Auto 모드에서는 SQL 실행 메모리 관리가 자동적으로 이루어지는데, 이 모드에서
Oracle 서버는 전체적인 시스템 성능을 극대화할 수 있도록 메모리 관리를 수행한다.

Note : WORKAREA_SIZE_POLICY 를 AUTO로 하기 위해서는 아래에 설명하게 될
PGA_AGGREGATE_TARGET 의 값을 반드시 먼저 지정해야 한다.


2. PGA_AGGREGATE_TARGET

자동화된 실행 메모리 관리 기능이 도입됨에 따라, PGA 메모리 영역은 크게
튜닝 가능 메모리와 튜닝 불가능 메모리로 구분할 수 있다. 튜닝 가능 메모리는
실제 SQL 실행 시 사용되는 메모리 영역이고, 튜닝 불가능 메모리는 PGA의 나머지
영역을 일컫는다. DSS와 같은 분야에서는 대용량의 데이타에 대한 sort, hash join,
bitmap index 관련 연산 등으로 인해 튜닝 가능 메모리가 PGA 영역의 대부분(90%
이상)을 차지하는 반면, OLTP 분야의 경우에는 일반적으로 PGA 메모리의 1% 이하가
튜닝 가능 메모리이다.

자동화된 SQL 실행 메모리 관리 기능과 관련해서 Oracle 9i에서는 PGA_AGGREGATE_TARGET
이라는 initSID.ora 파라미터를 제공해서 DBA가 전체 PGA 메모리를 명시적으로
제어할 수 있게 해준다. 즉, DBA가 PGA_AGGREGATE_TARGET을 설정하면,
Oracle 서버는 다음 조건을 만족시키는 범위에서 SQL 처리를 수행한다.
(참고로 DBA가 PGA_AGGREGATE_TARGET을 명시적으로 설정하면, default로 auto
모드로 동작한다.)

튜닝 가능 메모리 + 튜닝 불가능 메모리 <= PGA_AGGREGATE_TARGET

이 파라미터를 사용하게 되면 DBA가 PGA SQL 실행 영역의 *_area_size를 일일이
설정해줄 필요 없이 이 범위 내에서 메모리를 최대한 효율적으로 사용할 수 있도록
동작하게 된다.

Note : 이 파라미터는 ALTER SYSTEM을 이용해서 시스템 레벨에서 동적으로 변경할
수 있다.

SQL> alter system set pga_aggregate_target=20000000;

시스템이 변경되었습니다.

SQL> alter system set workarea_size_policy=AUTO;

시스템이 변경되었습니다.

SQL> show parameter pga;

NAME TYPE
------------------------------------ --------------------------------
VALUE
------------------------------
pga_aggregate_target big integer
20000000

SQL> show parameter workarea

NAME TYPE
------------------------------------ --------------------------------
VALUE
------------------------------
workarea_size_policy string
AUTO


3. Oracle 서버 튜닝 목표

DBA가 PGA_AGGREGATE_TARGET 값을 설정해서 auto 모드로 동작하는 경우, 오라클
서버는 내부적으로 다음과 같은 세 가지 목표를 달성할 수 있도록 튜닝 가능
메모리의 크기를 동적으로 조절하게 된다.

1) 튜닝 가능 메모리의 양을 조절해서 PGA 메모리의 크기가 PGA_AGGREGATE_TARGET을
넘지 않도록 한다.

2) 튜닝 가능 메모리의 양을 조절해서 특정 DB 프로세스가 out of memory 에러를
유발하지 않도록 한다.

3) 튜닝 가능 메모리의 양을 시스템 전체 throughput과 response time을 최적화할
수 있도록 조절한다.


4. 관련 V$ 뷰

자동화된 SQL 실행 영역 메모리 관리 기능과 관련해서 Oracle 9i에서는 DBA가
PGA 메모리의 사용 현황을 쉽게 파악할 수 있게 하기 위해 다음과 같은 기능이
추가되었다.
기존 V$SESSTAT과 V$SYSSTAT에 새로운 statistics를, V$PROCESS에 새로운 컬럼을
추가했고, 새로운 V$ 뷰 - V$SQL_WORKAREA, V$SQL_WORKAREA_ACTIVE - 를 제공한다.

1) 기존 뷰에 관련 row 및 column 추가

V$SESSTAT과 V$SYSSTAT 뷰에 다음 네 가지 statistics가 추가되었다.

- workarea memory allocated : 특정 세션이나 시스템에 할당된 전체 PGA 메모리
크기

- workarea executions - optimal :
SQL 실행 메모리가 최적의 크기를 가졌던 누적 횟수. 여기서 메모리가 최적의
크기를 갖는다는 것은 예를 들어, disk에 write하지 않고 sort 작업을 수행하는
경우를 의미한다.

- workarea executions - onepass :
SQL 실행 메모리가 1 pass의 크기를 가졌던 누적 횟수.
여기서 메모리가 1 pass의 크기를 갖는다는 의미는, 예를 들어 sort의 경우 disk에
임시 결과를 한번은 저장하고 결과를 merge해서 sort 작업을 마치는 경우를 의미한다.

- workarea executions - multipass :
SQL 실행 메모리가 2 pass 이상의 크기를 가졌던 누적 횟수.

이들 뷰를 이용해서 SGA가 아닌 PGA 메모리의 사용 현황을 모니터링할 수 있다.
예를 들어, 다음은 시스템 전체에 걸쳐 SQL 실행 영역이 최적의 크기를 가졌던
비율을 구하는 SQL 문이다.

SQL> SELECT
2 trunc (
3 sum(case when name like 'workarea executions - optimal'
4 then value else 0 end) * 100 /
5 (sum(case when name like 'workarea executions - optimal'
6 then value else 0 end)
7 +
8 sum(case when name like 'workarea executions - onepass'
9 then value else 0 end)
10 +
11 sum(case when name like 'workarea executions - multipass'
12 then value else 0 end)
13 )
14 ) optimal_percent
15 FROM v$sysstat
16 WHERE name like 'workarea executions - %';

OPTIMAL_PERCENT
---------------
100


그리고, V$PROCESS 뷰에는 다음 컬럼들이 추가되었는데, 이들 정보를 이용해서
할당된 PGA 메모리의 양과 실제로 Oracle 서버에 의해 사용된 메모리 양을
파악할 수 있다.

PGA_USED_MEM : 해당 프로세스에 의해 현재 사용되는 PGA 메모리 크기
PGA_ALLOC_MEM : 해당 프로세스에 의해 할당된 현재 PGA 메모리 크기
(OS에 return되지 않고 free 상태로 할당된 메모리 영역도 포함)
PGA_MAX_MEM : 해당 프로세스에 할당된 최대 PGA 메모리 크기


2) 새로 도입한 V$뷰

자동화된 SQL 실행 메모리 관리 기능을 위해 추가로 도입된 V$ 뷰는 V$SQL_WORKAREA,
V$SQL_WORKAREA_ACTIVE 등이 있다.

V$SQL_WORKAREA : 각 SQL 커서에 의해 사용되는 SQL 실행 영역 정보
V$SQL_WORKAREA_ACTIVE : 현재 시스템에 의해 할당되어 있는 SQL 실행 영역들 정보

아래의 예를 통해서 이들 각각의 뷰에서 유용한 정보를 추출하는 방법을 알아보기로
한다.

예) V$SQL_WORKAREA

V$SQL_WORKAREA 뷰를 통해서 다음과 같이 SQL 실행 메모리를 가장 많이 필요로 하는
top 10 실행 영역을 구할 수 있다.

SELECT *
FROM ( SELECT workarea_address, operation_type, policy, estimated_optimal_size
FROM v$sql_workarea
ORDER BY estimated_optimal_size DESC )
WHERE ROWNUM <= 10;


예) V$SQL_WORKAREA_ACTIVE

다음 SQL 문은 V$SQL_WORKAREA_ACTIVE, V$SQL_WORKAREA, V$SQL 뷰를 이용하여
현재 시스템에서 할당된 실행 영역 중 top 10 영역을 찾는 예를 보여준다.

SQL> SELECT c.sql_text, w.operation_type, top_ten.wasize
2 FROM ( SELECT *
3 FROM ( SELECT workarea_address, actual_mem_used wasize
4 FROM v$sql_workarea_active
5 ORDER BY actual_mem_used desc)
6 WHERE ROWNUM <= 10 ) top_ten,
7 v$sql_workarea w, v$sql c
8 WHERE w.workarea_address = top_ten.workarea_address
9 AND c.address = w.address
10 AND c.child_number = w.child_number
11 AND c.hash_value = w.hash_value;

SQL_TEXT
--------------------------------------------------------------------------------
OPERATION_TYPE WASIZE
---------------------------------------- ----------
SELECT c.sql_text, w.operation_type, top_ten.wasize FROM ( SELECT * FROM
( SELECT workarea_address, actual_mem_used wasize FROM v$sql_worka
rea_active ORDER BY actual_mem_used desc) WHERE ROWNUM <= :
"SYS_B_0" ) top_ten, v$sql_workarea w, v$sql c WHERE w.workarea_address =
top_ten.workarea_address AND c.address = w.address AND c.child_numb
er = w.child_number AND c.hash_value = w.hash_value
SORT 196608

<결론>
이 내용은 Oracle 9i에서 새로이 추가된 Automated SQL Execution Memory 기능에
대한 내용이다. PGA_AGGREGATE_TARGET 값을 적절한 값으로 정의하고,
WORKAREA_SIZE_POLICY를 AUTO로 지정하면 기존의 sort_area_size, hash_area_size,
bitmap_merge_area_size, create_bitmap_area_size 등의 값을 일일이 지정할
필요 없이 서버가 알아서 필요한 메모리를 할당하게 된다.
보통, DSS 환경에서 튜닝 가능 메모리 크기의 비율이 크기 때문에 OLTP 환경보다는
DSS 환경에서 튜닝 작업의 단순화, 메모리 사용 throughput 향상 등에 있어
더 큰 효과를 볼 수 있을 것이다.

V$SESSTAT과 V$SYSSTAT의 새로운 통계를 활용해서 가급적이면, workarea가
optimal한(disk i/o 없이) 상태 혹은 disk에 대한 1 pass만으로 가능하도록
PGA_AGGREGATE_TARGET 값을 지정하는 것이 바람직하며, V$SQL_WORKAREA_ACTIVE,
V$SQL_WORKAREA, V$SQL 뷰를 통해서 실제 사용된 메모리에 대한 top 10 SQL
문장 등을 알아볼 수 있다.


Example
-------
none


Posted by Any DB
,

PGA란?

 데이터베이스에 접속하는 모든 유저에게 할당되는 각각의 서버 프로세스가 독자적으로 사용하는 오라클 메모리 영역

 

PGA의 구조 

 

 - 정렬공간 (Sort Area) : Order By 또는 Group By 등의 정렬을 수행하기 위한 공간이며 해당 공간에서만 정렬이

    완료된다면 이를 메모리 정렬이라 한다. 해당 정렬 메모리 공간이 부족하다면 디스크를 이용하게 된다.

 

 - 세션정보 (Session Information) : 서버 프로세스에 의해 추출된 결과 값을 전달하기 위해 필요한 유저 프로세스 

    의 세션 정보를 저장한다.

 

 - 커서상태정보(Cursor State) : 해당 SQL의 Parsing 정보가 저장되어 있는 주소를 저장한다.

 

 - 변수저장정보(Stack Space) : SQL문장에 Bind Variable를 사용했을 경우 해당 바인드 변수를 저장하는 공간이다.

 

* PGA는 유저 프로세스가 요정항 작업을 수행하기 위해서 필요한 영역으로 구성된다. 하나의 유저 프로세스에 하나의 서버 프로세스가 할당되며, 또한 하나의 서버프로세스는 하나의 PGA를 생성하게 된다.

 

 PGA 관리

  - WORKAREA_SIZE_POLICY : MANUAL과 AUTO로 설정 가능

     AUTO 설정시 PGA_AGGREGATE_TARGET 파라미터를 이용하여 PGA의 크기를 설정하겠다는 뜻. (Default)

     MANUAL설정시 SORT_AREA_SIZE 파라미터를 이용하여 정렬 공간을 설정하겠다는 뜻.

 

 - SORT_AREA_SIZE : 정렬 공간에 대한 크기를 설정하는 파라미터

 

 - PGA_AGGREGATE_TARGET : 모든 세션의 PGA 크기의 합을 설정하는 파라미터이며,  

   PGA_AGGREGATE_TARGET 파라미터에서 지정한 크기까지 오라클이 PGA를 자동으로 관리한다.

 

 * 정렬 작업의 양이 많아 더 큰 PGA를 요구한다면 PGA_AGGREGATE_TARGET 파라미터에 정해진 크기 내에서 원하는 만큼 할당 가능

 

 

 * Oracle Process가 메모리를 많이 잡아 먹고 있을경우

    Oracle Process가 사용하는 메모리는 SGA+PGA의 합계라고 보면 된다.  

    SGA는 DB 기동시 고정된 값으로 올라오지만, PGA의 경우 세션의 활동에 따라 가변적이다

    대용량 Hash join을 하거나 정렬 작업을 하면 PGA 사용이 증가될 수 밖에 없고,   

    그 결과 Oracle Process 사용 메모리가 늘어난다.

    그리고  PGA_AGGREGATE_TARGET의 경우는 limit라기 보다는 희망 목표(?)에 가깝기 때문에 일시적으로 넘어서

    증가할 수도 있다.

    일단 세션의 SQL 활동을 모니터링해본다. . 대용량 조인이나 정렬을 하는 쿼리가 있는지 확인한다.

    select * from v$sort_usage  그런 쿼리가 없는데도 계속 증가한다면 버그일 가능성이 크다.

Posted by Any DB
,

9i, 10g까지는 대소문자 구분이 없었지만 11g부터는 대소문자 구분을 하게 된다.

 주로 로그인시 대소문자 구분을 위해서 사용된다.

SQL> show parameter sen

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon             boolean     TRUE  << 대소문자사용중(default)
SQL>
SQL>
SQL> alter system set sec_case_sensitive_logon=FALSE;  << 대소문자사용안함 설정

System altered.

SQL> show parameter sen

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon             boolean     FALSE << 설정완료


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

Total System Global Area  313860096 bytes
Fixed Size                  1344652 bytes
Variable Size             281021300 bytes
Database Buffers           25165824 bytes
Redo Buffers                6328320 bytes
Database mounted.
Database opened.
SQL> show parameter sen

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon             boolean     FALSE
SQL>

 

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /oracle/app/oracle/product/11.
                                                 2.0/dbs/spfileLINUXORCL.ora
SQL> 

 

- Dos 공격으로부터의 보호

  SEC_PROTOCOL_ERROR_FURTHER_ACTION = CONTINUE (Default)

  SEC_PROTOCOL_ERROR_TRACE_ACTION=NONE,TRACE(Default),LOG,ALERT (모니터링 지정)

 

- Brute Force 공격으로부터의 보호

  SEC_MAX_FAILED_LOGIN_ATTEMPTS = 1 - (Default)

Posted by Any DB
,

* tnsnames.ora에 WINORCL로 서버 이름을 등록 후 WINDOWS CLIENT에서 접속방법.

 

system 계정으로 접속

C:\Users\Boeok>sqlplus "system/oracle@WINORCL"

SQL*Plus: Release 11.2.0.3.0 Production on 금 8월 2 15:36:24 2013

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


다음에 접속됨:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
winorcl

SQL> exit

 

sys 계정으로 접속

C:\Users\Boeok>sqlplus "sys/oracle@WINORCL as sysdba"

SQL*Plus: Release 11.2.0.3.0 Production on 금 8월 2 15:36:09 2013

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


다음에 접속됨:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> exit

 

 

* TNSNAMES.ORA에 WINORCL로 서버 이름을 등록후 LINUX CLIENT에서 접속방법

 

sys 계정으로 접속

 [LINUXORCL]linux-single:/> sqlplus sys/oracle@WINORCL as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Sat Aug 3 00:39:43 2013

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
winorcl

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

system 계정으로 접속
[LINUXORCL]linux-single:/> sqlplus system/oracle@WINORCL

SQL*Plus: Release 11.2.0.3.0 Production on Sat Aug 3 00:39:58 2013

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
winorcl

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[LINUXORCL]linux-single:/>

 

Posted by Any DB
,

DATAPUMP 기능을 사용하기 위해서는 첫째 DIRECTORY가 설정되어 있어야한다.

 

* 필요 권한 

EXP_FULL_DATABASE

IMP_FULL_DATABASE

 

 

* Directory  조회

 SQL> SELECT * FROM DBA_DIRECTORIES;


 OWNER      DIRECTORY_NAME                 DIRECTORY_PATH
 ---------- ------------------------------ --------------------------------------------------
 SYS        ORACLE_OCM_CONFIG_DIR          /oracle/app/oracle/product/11.2.0/ccr/state
 SYS        DATA_PUMP_DIR                         /oracle/app/oracle/admin/LINUXORCL/dpdump/
 SYS        XMLDIR                                      /oracle/app/oracle/product/11.2.0/rdbms/xml


 

* Directory 생성 및 권한

 SQL> CREATE DIRECTORY DUMP AS '/oracle/dumpfile';

 Directory created.

 SQL> GRANT READ, WRITE ON DIRECTORY DUMP TO SYSTEM;   

 Grant succeeded.

 SQL> GRANT CREATE ANY DIRECTORY TO SYSTEM;

 Grant succeeded.

 SQL>  SELECT * FROM DBA_DIRECTORIES;

 OWNER      DIRECTORY_NAME                 DIRECTORY_PATH
 ---------- ------------------------------ --------------------------------------------------
 SYS        ORACLE_OCM_CONFIG_DIR          /oracle/app/oracle/product/11.2.0/ccr/state
 SYS        DATA_PUMP_DIR                          /oracle/app/oracle/admin/LINUXORCL/dpdump/
 SYS        DUMP                                         /oracle/dumpfile
 SYS        XMLDIR                                      /oracle/app/oracle/product/11.2.0/rdbms/xml

 SQL>

 

 - DUMP = 사용하고자 하는 DIRECTORY 이름지정

 - '/oracle/dumpfile' = DIRECTORY가 사용할 물리적인 경로

 - READ 권한은 Import Pump를 수행하기 위해 필요

 - WRITE 권한은 Export Pump를 수행하기 위해 필요

 - 일반유저로 오브젝트를 생성하기 위해서는 CREATE ANY DIRECTORY 권한을 가지고 있어야 한다.

* Directory 삭제 

 SQL> DROP DIRECTORY DUMP;

 Directory dropped.

 SQL> SELECT * FROM DBA_DIRECTORIES;

 OWNER      DIRECTORY_NAME                 DIRECTORY_PATH
 ---------- ------------------------------ --------------------------------------------------
 SYS        ORACLE_OCM_CONFIG_DIR          /oracle/app/oracle/product/11.2.0/ccr/state
 SYS        DATA_PUMP_DIR                         /oracle/app/oracle/admin/LINUXORCL/dpdump/
 SYS        XMLDIR                                     /oracle/app/oracle/product/11.2.0/rdbms/xml

 SQL>

 

* Default Directory 설정 

 $ export DATA_PUMP_DIR dump

 

* Export

 Full Export

 $ expdp system/oracle dumpfile=full.dmp directory=dump full=y logfile=full.log job_name=fullexp

 

 Metadata Export

 $ expdp system/oracle dumpfile=metadata.dmp directory=dump full=y content=metadata_only logfile=meta.log job_name=meta

 

 Schemas Export

 $ expdp system/oracle dumpfile=test.dmp directory=dump schemas=TEST job_name=test logfile=test.log

 -  expdp 옵션

  * system/oracle - 데이터베이스 유저 및 비밀번호

  * DIRECTORY - 데이터 펌프 파일을 저장하거나 또는 저장되어 있는 디렉토리

  * LOGFILE - 로그가 저장될 파일 이름

  * FULL - 데이터베이스 전체에 데이터 펌프 적용

  * SCHEMAS - 설정된 데이터베이스 유저가 소유한 오브젝트에 대해 데이터 추출

  * TABLES - 명시된 테이블에 대해서만 데이터 추출

  * TABLESPACES - 명시된 테이블스페이스에 저장된 오브젝트에 대해서만 데이터 추출

  * PARALLEL - 데이터 펌프 작업시 병렬 프로세스의 개수를 지정하는 옵션

  * 필터링 옵션

    - EXCLUDE - 데이터 펌프 작업에서 제외될 오브젝트의 종류와 이름을 명시하는 옵션

                        (EXCLUDE=OBJECT_TYPE[:'object_name'],  INCLUDE=TABLE:="TEST"    TEST 테이블만 포함

    - INCLUDE - 데이터 펌프 작업에 포함될 오브젝트의 종류와 이름을 명시하는 옵션

                        (INCLUDE=OBJECT_TYPE[:'object_name'],   

                        EXCLUDE=TABLE:="TEST"     TEST테이블은 제외

                        EXCLUDE=INDEX:\"=EMP%'\"   EMP 테이블의 인덱스 제외

 

    - PARFILE - 지정된 파일에 원하는 옵션을 설정한 후 해당 파일에 설정된 옵션을 적용하여 적제를 수행하는 옵션

 

  * 추출옵션

    - CONTENTS = [ALL | DATA_ONLY | METADATA_ONLY}

   

  * 오브젝트 정의변경 REMAP

    - REMAP_SCHEMA : 적재가 수행되는 데이터베이스에서 오브젝트 소유자를 변경

      (REMAP_SCHEMA='SCOTT' : 'MIKE')  SCOTT유저에서 MIKE유저로 적재

    - REMAP_TABLESPACE : 적재가 수행되는 데이터베이스에서 오브젝트가 저장될 테이블스페이스를 변경

      (REMAP_TABLESPACE='USERS' : 'TOOLS') USER테이블스페이스에서 TOOLS테이블스페이스로 변경

    - REMAP_DATAFILES : 적재가 수행되는 데이터베이스의 테이블스페이스에서 데이터파일의 위치를 변경

      (REMAP_DATAFILE='/data/ts1.dbf' : '/oracle/ts1.dbf') datafile 재정의

      

* Import

 

 Full Import

 $ impdp system/oracle dumpfile=full.dmp directory=dump full=y logfile=fullimp.log job_name=fullimp

 

 Metadata Import (metadata만 export한 파일을 쓸때)

 $ impdp system/oracle dumpfile=metadata.dmp directory=dump full=y sqlfile=metadata.sql logfile=metadata.log

 

 Metadata Import (full export 파일을 쓸때)

 $ impdp system/oracle dumpfile=full.dmp directory=dump full=y content=metadata_only

sqlfile=metadata.sql logfile=metadata.log

 

 Schemas Import

 $ impdp system/oracle dumpfile=full.dmp directory=dump schemas=TEST logfile=test.log job_name=test

 $ impdp system/oracle dumpfile=test.dmp directory=dump full=y logfile=test.log job_name=test

 * 데이터 적재에만 사용되는 옵션 (TABLE_EXITS_ACTION)

  : export/import 기능에서 import의 ignore기능이 datapump에서는 TABLE_EXITS_ACTION 옵션이다.

  SKIP - 동일 이름의 테이블이 존재할 경우 해당 테이블에 대한 데이터 적재 작업 생략

  APPEND - 동일 이름의 테이블이 전재할 경우 데이터를 해당 테이블에 추가로 적재

  REPLACE - 동일 이름의 테이블이 존재할 경우 해당 테이블을 제거한 후 재생성하여 데이터 적재

  TRUNCATE - 동일 이름의 테이블이 존재할 경우 해당 테이블의 데이터를 DELETE한 후 데이터 적재

 

 

ATTACH 옵션

 - ADD_FILE : 추출 파일(DUMPFILE) 추가

 - CONTINUE_CLIENT : 데이터 펌프 작업에 대한 진행 로그 확인

 - EXIT_CLIENT : 데이터 펌프의 클라이언트 관리 세션 종료

 - FILESIZE : ADD_FILE 명령으로 추가되는 파일의 기본 크기 설정

 - KILL_JOB : 데이터 펌프 작업을 삭제 (작업 재시작 불가능)

 - PARALLEL : 병렬 프로세싱 옵션 지정

 - START_JOB : 데이터 펌프 작업 재시작

 - STOP_JOB : 수행중인 데이터 펌프 작업 중단(작업 재시작 가능)

Posted by Any DB
,

가끔 오라클은 Start 상태인대 리스너는 no service라는 말을 내뱉으며 db를 인식 못할때가 있다.

db를 아무리 재시작하고 리스너를 내렸다 올려봐도 리스너는 묵묵하다..

그럴땐 db주소를 리스너에 바로 보게끔 파라미터에 입력해 주면 db가 올라오면서 리스너한태 강제로 바라보게 하는 명령어를 주면 된다..

 

 SQL> ALTER SYSTEM SET LOCAL_LISTENER="(ADDRESS=(PROTOCOL=TCP)(HOST=HOSTNAME)(PORT=1521))" SCOPE=SPFILE;

 

위의 문장을 입력 후 DB를 SHUTDOWN 한 후 다시 STARTUP 한다

Posted by Any DB
,