DATABASE(oracleDB 11g)/DBA

[Oracle DBA]Oracle 네트워크 관리

SEUNGSAMI 2019. 3. 27. 17:40
Oracle 네트워크 관리




오라클 네트워크 구성(Client가 Server에 Connection을 할때의 구조)

  • Client측과 Server 측 양쪽에 각각 Oracle Net이 존재
  • 항상 Listener가 실행되어 있어야한다.
      • Server 측에 Listener를 띄울수 있는 listener.ora(리스너 구성 파일)이 존재해야한다
          • protocol (TCP를 쓸건지 뭘쓸건지)
          • 서버의 IP Adress(Hostname)
          • Listener의 Port 번호 = 1521 (1024~65536)
          • Service_name(SID)
  • Client 측에는 tnsnames.ora(Client 쪽 구성파일)이 있어야한다
    • tns : 네트워크에 접속해 줄수 있도록 해주는 이름
    • ex) orcl2(connection alias)
        • connection descriptor
            • protocol
            • ip address(hostname)
            • port 번호
            • service_name(SID) : db_name + db_domain(default) : 클라이언트의 논리적 그룹
  • 각각의 구성파일은 $ORACLE_HOME/network/admin에 위치한다.
SYS@orcl> show parameter db_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      orcl

SYS@orcl> show parameter db_domain


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_domain                            string      example.com


[orcl2:~]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
[orcl2:admin]$ ls
samples  shrept.lst  tnsnames.ora

[orcl2:admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCL2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl2.example.com)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl.example.com)
    )
  )
-- 접속할 수 잇는 connection descript가 저장되어있다.


===================================================================================================
[orcl2:admin]$ sqlplus hr/hr
-- 일반적인 접속


[+ASM:admin]$ ps -ef|grep orcl2
...
oracle    7650  7649  0 11:18 ?        00:00:00 oracleorcl2 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
...
===================================================================================================
[orcl2:admin]$ sqlplus hr/hr@orcl2
-- 리스너를 통해서 접속을 하는 것이다.


[+ASM:admin]$ ps -ef|grep orcl2
...
oracle    7624     1  0 11:17 ?        00:00:00 oracleorcl2 (LOCAL=NO)
...
===================================================================================================
-- descrption은
[orcl2:~]$ netca
--을 통해서 생성이 가능하다.
--orcl2_new를 생성한 후에

[orcl2:admin]$ sqlplus hr/hr@orcl2_new
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 27 11:44:05 2019
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
-- 접속이 가능하다.



리스너의 서비스 등록방법
  • Dynamic registration(동적 등록)
      • lprotocol
      • hostname
      • port
      • listener.ora 파일안에 정보가 3가지만 있는 경우( 서비스 이름이 빠진 경우)
          • DB를 startup 할때 PMON이 Listener에게 service name을 등록해 준다.
              • PMON이 기본 참고하는 이름이 tnsnames.ora의  Instance이름이다
          • PMON이 빨리 등록을 못한다면 alter system register;를 통해 수동 등록
              • 즉 service_name에 관한 정보가 없어도 등록이 된다.
          • DB 서버측에 tnsnames.ora는 동적 등록을 위해 필요하다.
          • Client측의 tnsnames.ora는 서버 연결을 위해 필요하다.
  • Static registration(정적 등록)
      • protocol
      • hostname
      • port
      • SID(service_name)
      • listener.ora 파일안에 정보가 4가지가 다 있는 경우(서비스 이름까지 있는 경우)
[orcl2:admin]$ netmgr
에서 서비스 등록이 가능하다.

[orcl2:admin]$ sqlplus hr/hr@a
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 27 12:01:35 2019
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
-- names resolution이 발생한다.


[+ASM:admin]$ lsnrctl status
[+ASM:admin]$ lsnrctl service


[+ASM:admin]$ lsnrctl stop
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 27-MAR-2019 12:04:01
Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
The command completed successfully
-- 리스너를 내리는 작업

[orcl2:admin]$ sqlplus hr/hr@a
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 27 12:04:50 2019
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
ERROR:
ORA-12541: TNS:no listener
-- 에러가 발생한다.

[+ASM:admin]$ lsnrctl start
[orcl2:admin]$ sqlplus hr/hr@a
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 27 12:07:10 2019
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
-- 리스너가 켜지고 등록되는 시간이 조금 걸리므로 에러가 발생하는데 잠시후 다시 시도하면 정상 접속이 된다.


[+ASM:admin]$ lsnrctl      
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 27-MAR-2019 12:09:55

Copyright (c) 1991, 2009, Oracle.  All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL>
-- 이곳에서도 명령어 입력이 가능하다.



Network 관리 도구
  • netca
  • netmgr
  • lsnrctl start, stop, status, service


접속 방법(이름 지정 방식) 4가지
  • Easy Connect
      • SQL> CONNECT <username>/<password>@<hostname>:<listener port>/<service name>
[orcl2:admin]$ sqlplus hr/hr@localhost:1521/orcl2.example.com
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 27 13:51:29 2019
Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
HR@localhost:1521/orcl2.example.com>
      • 고급 연셜 옵션은 지원하지 않는다.
          • Connect Fail Over( connection을 못하게 된 상황에서 fail over하여 접속을 할 수 있게 한다.)
              • 리스너가 죽은 상황에서 등록되어있는 다른 리스너를 통하여 접속
          • 소스 경로 지정
              • connection manager
          • 로드밸런싱
      • tnsnames.ora 설정 필요 없다.
          • TCP만 지원한다.
  • Local Naming
      • Client의 tnsnames.ora에 서비스 orcl2 = (description......) : Alias = connection descriptor를 기술하는 방식
      • 가장 많이 쓰는 방식
      • SQL> CONNECT <username>/<password>@<Client쪽의 tnsnames.ora의 정보>
      • 접속하려는 서버에 대한 주소 정보가 바뀌면 관리가 어려워진다.
          • Client 설정파일의 관리가 어렵다.

  • Directory Naming
      • Directory 서버가 따로 존재해서 directory 서버에 접속하려는 모든 서버들의 접속 정보를 관리하는 방식
      • 로드된 Oracle Net 이름 분석(Names Resolution) 정보와 함께 LDAP 필요
      • 모든 Oracle Net 프로토콜 지원
      • 관리해야할 서버가 많은 경우에 사용
      • 고급 연결 옵션 지원
      • SQL> CONNECT <username>/<password>@<Client쪽의 tnsnames.ora의 정보>
  • External Naming
      • 오라클이 아닌 다른 베더사의 directory 서버를 사용하는 방식
      • 비오라클 이름 지정 서비스 사용
      • 써드파티 제품을 사용한다 생각하면 된다.

[orcl2:admin]$ tnsping orcl2
TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 27-MAR-2019 14:22:44
Copyright (c) 1997, 2009, Oracle.  All rights reserved.
Used parameter files:

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl2.example.com)))
OK (0 msec)
-- 리스너가 살아있는지를 확인하는 방법이다(DB가 살아있는 것이 아니다)

서비스 Alias
  • orcl(Service Alias | tns Alaias) = connection descriptor 의 별명

고급 연결 옵션
  • Connect-time failover
      • Alias는 두 개 이상의 나열된 리스너 주소를 갖는다.
      • 첫번째 주소에 연결할 수 없느면 두번째 주소에 연결을 시도한다.
  • 소스 경로 지정
  • 로드 밸런싱
      • Oracle Net은 주소 리스트에서 무작위로 주소를 선택한다.

유저 세션
  • request queue
  • Response queue
  • Connection Type 2가지
      • Dedicated Server
      • Shared Server
        • 연결 풀링
        • 사용하지 않는 경우
            • 데이터베이스 관리
            • 백업, 복원
            • 일괄처리, 대량 로드 작업
            • 데이터 웨어하우스 작업
  • SGA & PGA
      • Stack space
          • 프로세스에 대한 ID가 저장
      • UGA
          • 유저 세션에 대한 정보가 저장
      • UP와 SP가 1:1로 연결되는 상황에서는 한개의 PGA가 존재하면 되지만, Request queue에 여러 세션이 있으면 각 SP마다 UGA정보를 전부 가지고 있어야한다. 그렇기 때문에 모두가 공유할 수 있는 UGA정보가 SGA에 올라가게 된다.(Shared Pool의 Large Pool에 올라간다.)


DB link 생성
CREATE DATABASE LINK <remote_global_name>
CONNECT TO <user> IDENTIFIED BY <pwd>
USING '<connect_string_for_remote_db>';
  • orcl2(tnsnames.ora) 에서 orcl DB로 접속
      • tnsnames.ora에 orcl DB로 가기위한 Alias가 존재해야한다
          • orcl=(...........)
      • orcl2 DB의 hr 유저가 orcl DB의 scott 유저로 접속하는 DB link 생성
HR@orcl2> create database link orcl_scott
         connect to scott identified by tiger
           using 'orcl';
-- SCOTT계정까지 가기 위한 Link

HR@orcl2>  select * from user_db_links;
DB_LINK                  SSWORD                   HOST           CREATED
------------------------ ------------------------ -------------- -------------
ORCL_SCOTT.EXAMPLE.COM                              orcl            27-MAR-19


HR@orcl2> select * from emp@orcl_scott;
-- orcl DB의 scott계정을 보겠다.

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10


14 rows selected.

HR@orcl2> create table emp as select * from emp@orcl_scott;
-- 데이터 이관작업

HR@orcl2> select count(*) from emp;
  COUNT(*)
----------
        14


HR@orcl2> conn system/oracle_4U
Connected.
SYSTEM@orcl2> select * from dept;
select * from dept
              *
ERROR at line 1:
ORA-00942: table or view does not exist
-- system schema에는 dept 테이블이 없다.



SYSTEM@orcl2> select * from scott.dept;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
-- dept가 어느 schema에 있는지 보여주므로 보안상 취약해진다.
-- 숨기기 위해서는 어떻게 해야할까?
-- synonym의 정의를 바꿔주도록 하자. (ex. scott.dept => dept)

SYSTEM@orcl2> create synonym dept for scott.dept;
Synonym created.

SYSTEM@orcl2> select * from dept;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
-- 이경우 schema가 어딨는를 상관하지 않아도 되므로 효율적이다.

SYSTEM@orcl2> select * from user_synonyms;
-- 을 통하여 synonyms의 목록을 볼 수 있다.


SYSTEM@orcl2> conn hr/hr
Connected.

HR@orcl2> select * from emp@orcl_scott;
-- 요놈을 숨기고 싶다면.

HR@orcl2> drop table emp purge;
Table dropped.
-- 원래 있던 테이블 삭제

HR@orcl2> create synonym emp for emp@orcl_scott;
Synonym created.

HR@orcl2> select count(*) from emp;
  COUNT(*)
----------
        14
-- 정상적으로 잘 출력 된다.


HR@orcl2> select * from user_synonyms;


SYNONYM_NAME                   TABLE_OWNER        TABLE_NAME         DB_LINK
------------------------------ ------------------ ----------------   --------------
EMP                                                EMP                ORCL_SCOTT.EXAMPLE.COM

HR@orcl2> drop synonym emp;
Synonym dropped.

HR@orcl2> drop database link orcl_scott;
Database link dropped.

HR@orcl2> conn system/oracle_4U
Connected.

SYSTEM@orcl2> drop synonym dept;
Synonym dropped.


SYS@orcl2> show parameter shared
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
max_shared_servers                   integer
shared_memory_address                integer     0
shared_pool_reserved_size            big integer 6710886
shared_pool_size                     big integer 4M
shared_server_sessions               integer
shared_servers                       integer     1


SYS@orcl2> !ps -ef|grep s000
oracle    5133     1  0 09:46 ?        00:00:00 ora_s000_orcl2
oracle    5405     1  0 09:47 ?        00:00:00 ora_s000_orcl
oracle   12457 12046  0 16:41 pts/1    00:00:00 /bin/bash -c ps -ef|grep s000
oracle   12459 12457  0 16:41 pts/1    00:00:00 grep s000


SYS@orcl2> show parameter dispatchers
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dispatchers                          string      (PROTOCOL=TCP) (SERVICE=orcl2X
                                                 DB)
max_dispatchers                      integer
-- dispatcher이 설정 안된 것을 볼 수 있다.


SYS@orcl2> alter system set dispatchers="(protocol=tcp)(dispatchers=5)";
System altered.

SYS@orcl2> !ps -ef|grep d00
oracle    5131     1  0 09:46 ?        00:00:00 ora_d000_orcl2
oracle   12493     1  0 16:43 ?        00:00:00 ora_d001_orcl2
oracle   12495     1  0 16:43 ?        00:00:00 ora_d002_orcl2
oracle   12497     1  0 16:43 ?        00:00:00 ora_d003_orcl2
oracle   12499     1  0 16:43 ?        00:00:00 ora_d004_orcl2
-- orcl2로 5개의 dispatchers가 생성된 것을 볼 수 있다.


SYS@orcl2> show parameter dispatchers
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dispatchers                          string      (protocol=tcp)(dispatchers=5)
max_dispatchers                      integer


SYS@orcl2> alter system set max_dispatchers = 10;
System altered.


SYS@orcl2> show parameter dispatchers
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dispatchers                          string      (protocol=tcp)(dispatchers=5)
max_dispatchers                      integer     10


SYS@orcl2> alter system set shared_servers=4;
System altered.

SYS@orcl2> !ps -ef|grep s00
oracle    5133     1  0 09:46 ?        00:00:00 ora_s000_orcl2
oracle   12563     1  0 16:47 ?        00:00:00 ora_s001_orcl2
oracle   12565     1  0 16:47 ?        00:00:00 ora_s002_orcl2
oracle   12567     1  0 16:47 ?        00:00:00 ora_s003_orcl2
-- 4개가 생성된 것을 볼 수 있다.


SYS@orcl2> alter system set max_shared_servers = 10;
System altered.

SYS@orcl2> show parameter max_shared_servers
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer     10



그다음
[orcl2:~]$ sqlplus hr/hr@orcl2
할경우 dedicated인지 shared server인지 알 수가 없다

[orcl2:~]$ cd $ORACLE_HOME/network/admin/

[orcl2:admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
....
ORCL2_d =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl2.example.com)
    )
  )


ORCL2_s =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl2.example.com)
    )
  )
....
-- 다음의 내용을 추가


[orcl2:admin]$ lsnrctl ser
-- 하면 dispatcher 목록이 보인다. 즉 dispatcher을 사용할준비가 됬다는것

A 터미널
[orcl2:admin]$ sqlplus hr/hr@orcl2_d
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 27 16:56:43 2019
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

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


B 터미널
[orcl2:admin]$ sqlplus hr/hr@orcl2_s
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 27 16:57:21 2019
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

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


DBA터미널
SYS@orcl2> select sid, username, server
  2  from v$session
  3  where username = 'HR';

       SID USERNAME                       SERVER
---------- ------------------------------ ---------
       136 HR                             DEDICATED       
       139 HR                             NONE     -->Dispatcher


<<<<복습>>>>
listener가 정상적으로 실행되어 있는지 확인하세요
기동되어 있지 않으면 start 하세요
[+ASM:~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 28-MAR-2019 09:42:58
Copyright (c) 1991, 2009, Oracle.  All rights reserved.

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: 2: No such file or directory
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=edydr1p0.us.oracle.com)(PORT=1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
-- 리스너가 stop 되어있다

[+ASM:~]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 28-MAR-2019 09:43:36
Copyright (c) 1991, 2009, Oracle.  All rights reserved.
Starting /u01/app/oracle/product/11.2.0/grid/bin/tnslsnr: please wait...


TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/grid/network/admin/listener.ora
....
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "orcl.example.com" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcl2.example.com" has 1 instance(s).
  Instance "orcl2", status READY, has 6 handler(s) for this service...
Service "orclXDB.example.com" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
-- 실행 완료

또는

[orcl2:admin]$ ps -ef|grep tns
oracle    5945     1  0 09:43 ?        00:00:00 /u01/app/oracle/product/11.2.0/grid/bin/tnslsnr LISTENER -inherit
-- 리스너 프로세스를 확인

[orcl2:admin]$ kill -9 5945
-- 리스너를 종료

[orcl2:admin]$ ps -ef|grep tns
oracle    6268  6069  0 09:56 pts/2    00:00:00 grep tns
-- 잘 종료되었나 프로세스 확인

[orcl2:admin]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 28-MAR-2019 09:56:51
Copyright (c) 1991, 2009, Oracle.  All rights reserved.
TNS-01106: Listener using listener name LISTENER has already been started
-- 리스너 재시작

[orcl2:admin]$ ps -ef|grep tns
oracle    6273     1  0 09:56 ?        00:00:00 /u01/app/oracle/product/11.2.0/grid/bin/tnslsnr LISTENER -inherit
oracle    6284  6069  0 09:56 pts/2    00:00:00 grep tns
-- 리스너가 시작된 것을 확인




tnsnames.ora에 orcl2 DB에 접속하는 서비스 alias TEST를 만들고 접속되는지 테스트 하세요

접속한다.

Service Naming을 누르고 +버튼을 누른다.

Net Sevice Name을 정해주고

TCP/IP를 선택하고 Next


Host Name에는 실습 환경이므로 localhost를 적어준다(IP)


Service Name을 설정해주고 Next

TEST를 진행해보자

정상적으로 되는 것을 확인 할 수 있다.
File->Save Network Configuration을 누르고 종료

확인
[orcl2:admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

....

TEST =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl2.example.com)
    )
  )

....

-- 확인이 된다.

[orcl2:admin]$ sqlplus hr/hr@TEST
SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 28 09:55:16 2019
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

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

HR@TEST>
-- 정상적으로 접속됨을 확인 할 수 있다.

또는 위의 TEST = ..... ) 까지의 내용을 복사 붙여넣기 해도 추가 되며,

netca를 통해서도 추가 가능하다.


리스너에 서비스명을 등록할 때 정적 서비스 등록과 동적 서비스 등록은 어떻게 구현하나요
  • Dynamic registration(동적 등록)
      • 리스너에 SID_LIST 정보가 없는 채로 start 된 상황에서 PMON이 service names을 등록하는 것
          • DB 서버 쪽에 tnsnames.ora 필요

  • Static registration(정적 등록)
      • 리스너에 SID_LIST 정보가 등록된 상태로 start

터미널에서 netmgr을 실행한다.

리스너를 누르고 +버튼을 누른다.

리스너 이름을 정한다.

포트번호를 설정해준다.

그다음 우측 상단을 Database Services로 바꾸고 Add Database를 누른다.

잘 확인해서 적는다. 경로 주의할 것.

저장한다.


[+ASM:admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.


L2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1522))
  )


ADR_BASE_L2 = /u01/app/oracle


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1521))
    )
  )


ADR_BASE_LISTENER = /u01/app/oracle


ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON


SID_LIST_L2 =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl2.example.com)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = orcl2)
    )
  )
-- 정적등록이 된 것을 확인할 수 있다.


-- L2로 접속을 하자
[+ASM:admin]$ lsnrctl start L2

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 28-MAR-2019 10:30:11
Copyright (c) 1991, 2009, Oracle.  All rights reserved.
Starting /u01/app/oracle/product/11.2.0/grid/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/grid/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/edydr1p0/l2/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=edydr1p0.us.oracle.com)(PORT=1522)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=edydr1p0.us.oracle.com)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias                     L2
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                28-MAR-2019 10:30:11
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/edydr1p0/l2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=edydr1p0.us.oracle.com)(PORT=1522)))
Services Summary...
Service "orcl2.example.com" has 1 instance(s).
  Instance "orcl2", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully


[orcl2:admin]$ vi tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

...
ORCL2_D =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1522))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl2.example.com)
    )
  )
...
-- 포트번호를 1522로 변경한다.


[orcl2:admin]$ sqlplus hr/hr@orcl2_d
SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 28 10:36:17 2019
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
-- 접속이 잘 되는 것을 확인할 수 있다.





1521 포트를 사용하지 않으면서 동적 서비스 등록을 하기 위해서는 반드시 설정해야 하는 파라미터는 무엇인가요?
  • local_listener = L3   또는
  • local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=edydr1p0.us.oracle.com)(PORT=1523))';
      • tnsname.ora에 L3가 있어야한다.
      • tnsnames.ora에 L3라는 추가적인 파라미터가 존재해서 이놈을 읽으라고 해야한다.
      • 없을경우 두번째 명령어를 입력하자.
SYS@orcl2> show parameter local_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string
  • 설정하는법
      • 위의 내용들을 보면서 netmgr에서 L3를 추가해주자 또한, port만 1523으로 바꾸고 아무것도 하지말고 저장해주자(정적등록이 아니다)

[+ASM:admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.
...
L3 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1523))
  )

L2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1522))
  )

ADR_BASE_L3 = /u01/app/oracle

ADR_BASE_L2 = /u01/app/oracle
...
-- L3가 동적 등록이 된것을 볼 수 있다,

[+ASM:admin]$ lsnrctl start L3
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 28-MAR-2019 10:51:31
Copyright (c) 1991, 2009, Oracle.  All rights reserved.
....
-- L3 리스너를 실행해준다.

[orcl2:admin]$ vi tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
 ....
L3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1523))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl2.example.com)
    )
  )
.....
-- 포트번호를 변경한다.
--  이름을 변경해준다.

SYS@orcl2> alter system set local_litener=L3;
System altered.


SYS@orcl2> show parameter local_listener
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string      L3

잘 확인 할 수있다.




-- 다시 원복
SYS@orcl2> alter system set local_listener='';
System altered.

[+ASM:admin]$ lsnrctl stop L3
[+ASM:admin]$ lsnrctl stop L2