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
,

기존 패스워드 파일 백업 및 삭제

 

패스워드 파일 재생성

orapwd file=/oracle/app/oracle/product/11.2.0/dbs/orapwLINUXORCL(오라클sid)

 

패스워드 파일을 삭제하기 위해서는 rm과 같은 운영체제 명령어를 사용하여 파일을 삭제하면 된다

패스워드 파일을 수정하기 위해서는 데이터베이스를 종료한후 이전 패스워드 파일을 삭제하고 새로 생성한다. 데이터베이스를 재기동하게 되면 새로운 패스워드 파일의 값이 적용된다.

 

Posted by Any DB
,

 이 에러 메세지는 SQL 정보를 저장할 수 잇는 충분한 크기의 사용 가능 메모리 조각을 공유 풀의 프리리스트에서 찾지 못하고 또한 LRU리스트를 검색해도 찾지 못 할 경우 발생한다.

 이를 해결하기 위해서는 다음의 4가지를 고려할 수 있다.

 

 

1. Shared Pool 초기화 - Shared Pool 내에 존재하는 모든 내용을 제거하여 초기화를 수행할 수 있다. Shared Pool 내의 연속된 메모리 조각들을 하나의 조각으로 합쳐주는 역활을 수행하게 된다. 수행 방법은 다음과 같다.

  SQL> ALTER SYSTEM FLUSH SHARED_POOL;

그러나 위의 방법은 다른 SQL 정보도 Shared Pool에서 제거하므로 해당 명령어를 수행한 후에는 모든 SQL이 하드 구문 분석을 수행하게 되어 성능 저하가 발생 할 수 있다.

 

2. 패치 등을 고려 - ORA-4031 에러는 오라클 버그로 등록된 부분이 있으므로 해당 오라클 버전을 확인하여 오라클 패치 적용 및 업그레이드 등을 고려할 수 있다.

 

3. 파라미터 설정 - SHARED_POOL_RESERVED_SIZE 파라미터 설정을 통해 에러를 감소 시킬 수 있다.

 

4. Large Pool 설정 - 병렬 프로세싱을 사용한다면 Large Pool 설정으로 해당 에러를 감소 시킬 수 있다.

 

 

 

 

'Oracle > Trouble Shooting' 카테고리의 다른 글

ORA-01455  (0) 2013.09.04
Runinstaller 시 자바 에러  (0) 2013.08.27
ORA-00257 (ORA-19815 : WARRING : db_recover_file_dest_size)  (0) 2013.08.23
ORA-19809, ORA-19804, ORA-19815  (0) 2013.08.14
ORA-02097, ORA-00439 ERROR  (0) 2013.08.08
Posted by Any DB
,

1. 확인

 SQL> SELECT * FROM DBA_PROFILES
  2  WHERE PROFILE='DEFAULT';

PROFILE                        RESOURCE_NAME                    RESOURCE          LIMIT
---------------- ----------------------------------- ---------------    ----------------
DEFAULT                        COMPOSITE_LIMIT                      KERNEL       UNLIMITED
DEFAULT                        SESSIONS_PER_USER                 KERNEL       UNLIMITED
DEFAULT                        CPU_PER_SESSION                     KERNEL       UNLIMITED
DEFAULT                        CPU_PER_CALL                          KERNEL       UNLIMITED
DEFAULT                        LOGICAL_READS_PER_SESSION  KERNEL       UNLIMITED
DEFAULT                        LOGICAL_READS_PER_CALL       KERNEL       UNLIMITED
DEFAULT                        IDLE_TIME                                 KERNEL       UNLIMITED
DEFAULT                        CONNECT_TIME                         KERNEL       UNLIMITED
DEFAULT                        PRIVATE_SGA                            KERNEL       UNLIMITED
DEFAULT                        FAILED_LOGIN_ATTEMPTS          PASSWORD       10
DEFAULT                        PASSWORD_LIFE_TIME               PASSWORD       180

PROFILE                        RESOURCE_NAME                      RESOURCE         LIMIT
-------- ------- ------------------------------------ ---------------- -----------------
DEFAULT                        PASSWORD_REUSE_TIME            PASSWORD     UNLIMITED
DEFAULT                        PASSWORD_REUSE_MAX            PASSWORD     UNLIMITED
DEFAULT                        PASSWORD_VERIFY_FUNCTION   PASSWORD     NULL
DEFAULT                        PASSWORD_LOCK_TIME             PASSWORD     1
DEFAULT                        PASSWORD_GRACE_TIME           PASSWORD      7

16 rows selected.
SQL>

 

2. 변경 

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

Profile altered.

SQL> SELECT * FROM DBA_PROFILES
  2  WHERE PROFILE='DEFAULT';

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

16 rows selected.

 

 

Posted by Any DB
,

1. listener.ora  (default location = $ORACLE_HOME/network/admin)

 

 LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = linux-single)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

 

SID_LIST_LISTENER=

 (SID_LIST =

  (SID_DESC =

     (ORACLE_HOME=/oracle/app/oracle/product/11.2.0)

    (SID_NAME=LINUXORCL)

  )

)

ADR_BASE_LISTENER = /oracle/app/oracle

 

 - LISTENER : 리스너 이름이며 다른 이름으로 설정 가능. SID_LIST_리스너명 항목에서 리스너명과 동일

 - ADDRESS_LIST : ADDRESS들의 모임이며 여러 개의 ADDRESS를 동시에 설정 가능

 - ADDRESS : 데이터베이스 서버의 주소이며 프로토콜, 서버명 및 사용포트로 구성된다.

 - SID_LIST_LISTENER : 리스너가 서비스하는 데이터베이스 정보를 설정하며 SID_LIST_리스너명으로 설정

 - SID_LIST : 해당 리스너 프로세스가 하나 이상의 데이터베이스를 서비스 할 경우에 해당 부분에 여러개의  

                   SID_DESC를 등록한다.

 - GLOBAL_DBNAME : 전역 데이터베이스 이름을 지정하며 생략 가능하다.

 - ORACLE_HOME : 오라클 홈 디렉토리의 위치를 지정한다.

 - SID_NAME : 리스너의 접속을 허용하는 데이터베이스의 SID 명을 지정한다.

 

리스너 파라메터

 - LOG_DIRECTORY_리스너명 : 로그 파일이 저장될 경로 이름을 설정

 - LOG_FILE_리스너명 : 로그가 기록될 파일명 설정

 - LOGGING_리스너명 : 로그 기능의 활성화 여부 설정 (ON 또는 OFF)

 - PASSWORD_리스너명 : 리스너를 중단시킬 경우 필요한 비밀번호를 설정

 

 

 [LINUXORCL]linux-single:/oracle> lsnrctl status   <---리스너 상태체크

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 02-AUG-2013 00:19:39

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux-single)(PORT=1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused

리스너 시작

[LINUXORCL]linux-single:/oracle> lsnrctl start    <-- 리스너 시작

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 02-AUG-2013 00:22:02

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

Starting /oracle/app/oracle/product/11.2.0/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.3.0 - Production
System parameter file is /oracle/app/oracle/product/11.2.0/network/admin/listener.ora
Log messages written to /oracle/app/oracle/diag/tnslsnr/linux-single/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux-single)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux-single)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                02-AUG-2013 00:22:04
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/app/oracle/product/11.2.0/network/admin/listener.ora
Listener Log File         /oracle/app/oracle/diag/tnslsnr/linux-single/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux-single)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

리스너 상태체크

[LINUXORCL]linux-single:/oracle> lsnrctl status   <-- 리스너 상태체크

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 02-AUG-2013 00:22:26

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux-single)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                02-AUG-2013 00:22:04
Uptime                    0 days 0 hr. 0 min. 24 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/app/oracle/product/11.2.0/network/admin/listener.ora
Listener Log File         /oracle/app/oracle/diag/tnslsnr/linux-single/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux-single)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "LINUXORCL" has 1 instance(s).
  Instance "LINUXORCL", status READY, has 1 handler(s) for this service... 사용준비완료
Service "LINUXORCLXDB" has 1 instance(s).
  Instance "LINUXORCL", status READY, has 1 handler(s) for this service...
The command completed successfully

 

2. tnsnames.ora 설정 (location = $ORACLE_HOME/network/admin)

 

 LINUXORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 122.99.166.149)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = LINUXORCL)
    )
  )

 

- LINUXORCL : 서비스이름

- DESCRIPTION : 접속하고자 하는 대상 데이터베이스 정보

- ADDRESS : 접속하고자 하는 데이터베이스 서버의 리스너를 호출하기 위한 주소정보

- CONNECT_DATA : SERVICE_NAME 옵션을 이용하여 접속할 리스너 프로세스가 사용하는 서비스 이름을 지정

                          하거나 또는 SID옵션을 이용하여 데이터베이스의 SID명을 지정

 

 

 tnsping test

C:\Users\Boeok>tnsping LINUXORCL

TNS Ping Utility for 32-bit Windows: Version 11.2.0.3.0 - Production on 01-8월 -
2013 16:02:49

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

사용된 매개변수 파일:
F:\app\Boeok\product\11.2.0\client_1\network\admin\sqlnet.ora


별칭 분석을 위해 TNSNAMES 어댑터 사용
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 122.99.166.149
)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = LINUXORCL)))에 접속하려고 시도
하는 중
확인(30밀리초)  <-- 해당 서버와의 응답시간

C:\Users\Boeok>

 

sqlplus 접속시도


C:\Users\Boeok>sqlplus test/test@LINUXORCL

SQL*Plus: Release 11.2.0.3.0 Production on 목 8월 1 16:05:03 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> 클라이어트에서 서버로 접속된 상황

 

3. SQLNET.ORA

 

클라이언트와 데이터베이스 서버 양쪽에 존재하는 파일로 오라클 넷을 옵션 설정등을 저장하는 파일.

즉. 오라클 서버로 어떻게 접속할 것인지를 설정하는 파일

 

 SQLNET.AUTHENTICATION_SERVICES= (NTS | none)

클라이언트가 오라클 서버로 접속할 때 오라클이 어떠한 인증 서비스를 사용할 것인가

none : sys 계정으로 로그인할때 비밀번호를 입력해야만 들어 갈수 있게 설정

sqlplus "/as sysdba" 가 안먹힘

 

 NAMES.DIRECTORY_PATH= (TNSNAMES | ONAMES | HOSTNAME)

클라이언트가 디비 접속 시 사용하는 STRING NAME ALIAS를 무엇을 통해 확인할지를 결정하는 것

 

TNSNAME : 로컬네임서버를 확인하겠다는 의미, (TNSNAME.ORA파일 확인)

 

ONAMES : 오라클 네임서버를 확인하겠다는 의미이며 추가적으로 NETWORK ADDRESS를 설정해줘야 함.

 

HOSTNAME : 호스트네임서버를 확인하겠다는 의미이며 TNSNAME.ORA파일은 필요없이 DNS나 WINDOWS의 경우 HOST파일(C:\WINDOWS\SYSTEM32\DRIVERS\ETC)에 등로되어 있으면 된다

주의사항 --> 공백이 절대 존재해선 안된다

NAMES.DIRECTORY_PATH=(TNSNAMES, HOSTNAME) X

NAMES.DIRECTORY_PATH=(TNSNAMES,HOSTNAME) O

 

만약 공백 존재시 다음과 같은 에러가 발생할수 있다.

ORA-12170 : TNS: Connect timeout occured

ORA-12560 : TNS: protocol adapter error

 

tcp.validnode_checking = yes

 

tcp.invited_nodes = (IP1, IP2, IPn)     <- 정의된 IP만 접근 나머지는 모두 접근 거부

tcp.excluded_nodes=(IP1, IP2, IPn)   <- 정의된 IP만 접근거부, 나머지는 모두 접근 가능

sqlnet.expire_time = 10     <-- 세션을 정리하는 시간  10분에 한번씩 신호를 보내서 새션을 정리하는 옵션

 

 

Point : 클라이언트와 서버의 접속이 안될때 확인해야할 방법중 가장 우선은 방화벽이 설정되어 있는지 아닌지를 확인해야한다 os에서 방화벽을 실행시켜두면 리스너와 클라이어인트설정이 잘되어도 접속이 되지 않는다.

그 다음으로는 위에서 보여준것과 같이 listener, tnsname, sqlnet.ora에 공백이 존재해서도 안된다.

 

Posted by Any DB
,

오라클 넷의 개념

 

1. 접속 방법 

 

  오라클 접속방법에는 위와 같은 두가지 방법이 존재한다.

  - 1의 경우 : 텔넷 등을 이용하여 운영체제에 먼저 접속하는 방식이다. 그 후 해당 데이터베이스에 접속하게 된다.    

                   이 우에는 오라클 넷을 이용하지 않게 된다.

 

  - 2의 경우 : 툴을 이용하여 운영체제에 대한 접속 없이 데이터베이스에 직접 접속하는 방식으로 오라클 넷을

                   이용하게 된다.

 

2, 오라클 넷의 개념

 

 위와 같이 외부에서 운영체제 인증 없이 데이터베이스로 직접 접속을 하기 위해서는 보통의 경우 오라클 넷이라는

아키텍처를 이용하게 된다. 오라클 넷의 특징은 다음과 같다.

 

  - 프로토콜에 독립성

  - 광범위한 플랫폼 지원

  - 추적 및 진단 제공

  - 기본 보안 제공

 

 오라클 넷은 이와 같은 특징을 가지며 이름 지정 방식을 이용하여 원하는 데이터베이스로 접속할 수 있는 정보를 획득하게 된다. 이름 지정 방식은 다음과 같이 네가지 종류가 존재한다.

 

  - 호스트 이름 방식 : 대상 데이터베이스의 호스트이름 또는 IP를 이용하여 대상 데이터베이스에 접속하는 방식.

 

  - 로컬 이름 방식 : 클라이언트에 존재하는 tnsnames.ora 파일에 등록된 대상 데이터베이스의 정보를 이용하여

                           접속하는 방식. (가장 많이 사용하는 방식)

 

  - 디렉토리 이름 지정 방식 : 별도로 존재하는 디렉토리 서버에서 대상 데이터베이스의 정보를 모두 관리하는 방식.

 

  - Oracle Names 방식 : 오라클에서 제공하는 디렉토리 이름 지정 방식.

 

3. 오라클넷의 구성 파일

 

 오라클 넷을 사용하기 위해서는 5가지의 파일이 필요하다. 각 파일의 특징을 확인한다.

 

  - ldap.ora : 디렉토리 서비스를 사용할 경우 클라이언트와 데이터베이스 서버에 존재하는 파일로 해당 디렉토리

                  서버를 엑세스 할 수 있는 정보를 저장한다.

 

  - names.ora : Oracle Names 방식의 오라클 디렉토리 이름 지정 방식을 이용할 경우 Oracle Names 서버에서 모든

                   데이터베이스의 정보를 저장하고 있는 파일

 

  - tnsnames.ora : 클라이언트에 존재하며, 데이터베이스의 정보를 저장하고 있는 파일로 로컬 이름 방식을 사용할

                         경우 이용하게 된다.

 

  - listener.ora : 데이터베이스 서버에 존재하는 파일로 접속을 요청하는 클라이언트와 실제 데이터베이스를 연결해

                      주는 역활을 수행하는 리스너 프로세스의 정보를 저장하는 파일

 

  - sqlnet.ora : 클라이언트와 데이터베이스 서버 양쪽에 존재하는 파일로 오라클 넷의 옵션 설정 등을 저장하는 파일

 

4. 오라클 넷의 구조

 

 

  1. 사용자에 의해서 데이터베이스에 접속 요청이 발생하면 클라이언트에는 유저 프로세스가 생성된다. 해당 유저 프로세스는 1과 같이 지정된 위치에 존재하는 tnsnames.ora파일로부터 접속하고자 하는 데이터베이스에 대한 정보를 획득하게 된다. tnsnames.ora 파일에는 접속하고자 하는 데이터베이스 서버의 IP와 포트 정보등 데이터베이스에 접속하기 위한 기본 정보들이 기록되어 있다.

 

2. tnsnames.ora 파일에서 획득한 정보로 데이터베이스 서버에 접속하게 되면 listener.ora파일의 정보를 이용해 미리 가동되어 있는 리스너 프로세스가 2와 같이 유저프로세스의 요청을 수신한다.

 

3. 유저 프로세스로부터 요청을 받은 리스너 프로세스는 해당 요청을 처리하기 위해 3과 같이 서버 프로세스를 기동시킨다.

 

4. 서버 프로세스가 기동한 후 리스너 프로세스는 해당 서버 프로세스에 대한 정보를 4와 같이 유저 프로세스에게 전달한다.

 

5. 서버 프로세스의 정보를 전달받은 유저 프로세스는 리스너와 연결을 끊고 5와 같이 서버 프로세스와 직접 통신하면서 작업에 대한 결과를 받게 된다.

 

 위와 같은 절차에 의해 클라이언트들은 데이터베이스 서버에 접속을 하게된다. 결국 로컬 이름 방식에서는 클라이언트의 tnsnames.ora 파일과 데이터베이스 서버의 listener.ora 파일만 존재하고 올바르게 설정되어 있으면 접속이 가능하다는 것이다.

 

 

 

 

 

 

Posted by Any DB
,