Skip to main content
  • Place orders quickly and easily
  • View orders and track your shipping status
  • Enjoy members-only rewards and discounts
  • Create and access a list of your products
  • Manage your Dell EMC sites, products, and product-level contacts using Company Administration.

Oracle RAC 12cR1에서 플러깅 지원 데이터베이스에 연결하는 방법

Summary: 이 헌장은 데이터베이스 솔루션, 맞춤형 개발, 동적 데이터센터, 유연한 컴퓨팅을 제공하여 IT를 단순화하는 솔루션을 제공하기 위함입니다.

This article may have been automatically translated. If you have any feedback regarding its quality, please let us know using the form at the bottom of this page.

Article Content


Symptoms

적용 대상:

Oracle Database       -     Oracle 12cR1 12.1.0.1.0 Enterprise Edition

운영 체제  –     2.6.39-400.109.17.1.el6uek.x86-64 커널이 있는 Oracle Linux 6.4 및                                          
2.6.32-431.el6.x86_64 커널이 있는 Red Hat Enterprise Linux

스토리지 플랫폼   -      Dell EqualLogic PS 5000 및 Dell EqualLogic PS 6110

문제:

Oracle RAC 12cR1에서 플러그형 데이터베이스에 연결하는 방법

해결 방법:

PDB(Pluggable Database)와의 연결을 설정하는 방법에는 네 가지가 있습니다.
  1. 데이터베이스 소프트웨어에서 자동으로 생성되는 pdb 이름과 동일한 이름의 기본 서비스 사용
  2. 서비스를 플러깅 지원 데이터베이스와 연결하는 SRVCTL 유틸리티를 사용하여 pdb 속성으로 생성되는 사용자 정의 서비스 사용
  3. 세션 변경 명령을 사용하고 컨테이너를 원하는 컨테이너로 설정
  4. Enterprise Manager Express 사용
 1. PDB에 연결하기 위한 기본 서비스 사용

기본 서비스를 사용하여 PDB와 연결을 설정하려면 다음을 수행해야 합니다.
  •    tnsnames.ora 파일에서 데이터베이스에 연결하는 데 사용되는 데이터베이스 주소를 정의하는 항목을 만들어야 합니다.
  •    pdb의 상태를 마운트됨에서 읽기 쓰기 모드로 변경해야 합니다.
 tnsnames.ora 파일에 생성되는 항목:

Oracle RAC 12c의 경우 플러그형 데이터베이스와 동일한 이름의 기본 서비스가 데이터베이스 소프트웨어에서 자동으로 생성되지만 tnsnames.ora 파일은 글로벌 데이터베이스와 관련된 단일 항목만 사용하여 생성됩니다. 예를 들어, 2노드 Oracle RAC 12c의 경우 여기서 cpdb는 글로벌 데이터베이스이고, pdb1 및 pdb2는 생성된 2개의 플러그형 데이터베이스이며, cpdb1 및 cpdb2는 두 인스턴스입니다. tnsnames.ora 파일의 기본 항목은 다음과 같습니다.-

CPDB =

(DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = cpdb.dbase.lab)

   )

)

따라서 아래와 같이 tnsnames.ora 파일에 있는 플러그형 데이터베이스의 기본 서비스 이름에 대한 관련 항목을 생성해야 합니다.

PDB1 =

(DESCRIPTION =                                                             

   (ADDRESS = (PROTOCOL = TCP) (HOST = OracleRACscan.dbase.lab)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = pdb1.dbase.lab)

   )

)

PDB2 =

(DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP) (HOST = OracleRACscan.dbase.lab)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = pdb2.dbase.lab)

   )

)

플러그형 데이터베이스의 상태 바꾸기:

pdbs 생성 시 기본적으로 open_mode는 'Mounted'만 해당됩니다. 이는 다음과 같이 확인할 수 있습니다.

SQL> select name, open_mode from v$pdbs;

NAME                           OPEN_MODE
PDB$SEED                       READ ONLY

PDB1                           MOUNTED

PDB2                           MOUNTED

다음 명령을 실행하면 모든 플러그형 데이터베이스가 읽기 쓰기 모드로 열립니다.

SQL> Alter pluggable database all open;

이 다음에 sqlplus를 사용하여 데이터베이스와 연결을 구축할 수 있으며 이는 아래와 같습니다.

[oracle@node1 bin]$ sqlplus sys/oracle@pdb1 as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Tue Oct 8 11:23:32 2013

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

Connected to:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options

 2. PDB에 연결하기 위해 사용자 정의 서비스 사용

 위에서 설명한 기본 서비스는 관리 목적으로만 사용해야 하며 애플리케이션에 사용해서는 안 됩니다. 사용자 정의 서비스는 애플리케이션의 요구 사항에 따라 맞춤 설정할 수 있으므로 애플리케이션에는 항상 사용자 정의 서비스를 사용해야 합니다. 사용자 정의 서비스를 사용하여 연결을 설정하는 단계는 아래와 같습니다.
  1. SRVCTL 유틸리티를 사용하여 PDB 속성으로 데이터베이스 서비스 생성
  2. tnsnames.ora 파일에서 생성된 서비스에 대한 항목 만들기
  3. 서비스 시작
  4. 단계 a에서 pdb 속성으로 생성된 서비스를 사용하여 데이터베이스에 연결
a. SRVCTL 유틸리티를 사용하여 PDB 속성으로 데이터베이스 서비스 생성

SRVCTL 유틸리티를 사용하는 다음 명령을 사용하여 플러그형 데이터베이스 pdb1과 연결할 두 개의 데이터베이스 서비스 hr1과 sales1을 생성합니다.

[[oracle@node1 bin]$ srvctl add service -db cpdb -service hr1 -pdb pdb1 -preferred cpdb1 -available cpdb2

[oracle@node1 bin]$ srvctl add service -db cpdb -service sales1 -pdb pdb1 -preferred cpdb1 -available cpdb2

 pdb 속성은 데이터 사전 보기 all_services에서 볼 수 있습니다.

SQL> SELECT NAME, PDB FROM all_services;

 NAME                       PDB

pdb1.dbase.lab             PDB1

hr1                        PDB1

sales1                     PDB1

$ srvctl config service –db <databasename> 명령도 사용 가능한 서비스를 나열합니다.

b. 생성된 데이터베이스 서비스에 대한 tnsnames.ora 파일에 항목 생성

 hr 애플리케이션과 sales 애플리케이션에서 각각 사용할 수 있는 net service 이름인 HR_PDB1과 SALES_PDB1을 생성하여 다음과 같이 플러그형 데이터베이스 pdb1에 연결할 수 있습니다.

 HR_PDB1 =

(DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = hr1.dbase.lab)

   )

)

SALES_PDB1 =

(DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = sales1.dbase.lab)

   )

)

c. 서비스 시작

[oracle@nsnode1 bin]$ srvctl status service -db cpdb -service hr1

Service hr1 is not running

 [oracle@nsnode1 bin]$ srvctl start service -db cpdb -service hr1

pdb와 연결된 서비스를 시작하면 자동으로 읽기/쓰기 모드로 pdb를 엽니다.

d. 데이터베이스 서비스에 연결 

사용자가 pdb 속성이 있는 데이터베이스 서비스를 사용하여 pdb에 연결합니다.

예를 들어, SYS 사용자는 다음과 같이 pdb1과 연관된 데이터베이스 서비스 HR_PDB1을 사용하여 pdb1에 연결할 수 있습니다.

SQL> connect sys/oracle@HR_PDB1 AS SYSDBA

Connected.

SQL> SHOW CON_ID;

 CON_ID

3

SQL> SHOW CON_NAME;

CON_NAME

PDB1

3. PDB에 연결하기 위해 Alter Session 명령 사용

기본적으로 RAC 인스턴스에 연결하면 CDB$ROOT에 연결됩니다. 각 RAC 인스턴스는 PDB를 전체적으로 열고 단일 시스템 이미지를 사용할 수 있습니다. 세션을 pdb로 변경하려면 세션을 변경하고 컨테이너를 원하는 컨테이너로 설정하여 pdb를 변경할 수 있습니다. show con_name 쿼리를 사용하여 현재 컨테이너의 이름을 확인할 수 있습니다.

[oracle@node1 bin]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Wed Oct 9 13:56:27 2013

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

Connected to:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Advanced Analytics and Real Application Testing options

SQL> show con_name;

CON_NAME

CDB$ROOT

SQL> ALTER SESSION SET CONTAINER = PDB1;

Session altered.

SQL> SHOW CON_NAME;

CON_NAME

PDB1

 SQL> ALTER SESSION SET CONTAINER = PDB2;

Session altered.

SQL> SHOW CON_ID;

CON_ID

4

SQL> ALTER SESSION SET CONTAINER = CDB$ROOT;

Session altered.

 SQL> SHOW CON_NAME;

CON_NAME

CDB$ROOT

 컨테이너 ID 설명은 다음과 같습니다.
컨테이너 ID 설명
0 전체 CDB
1 CDB$ROOT
2 PDB$SEED
3~254 PDB
표 1:  컨테이너 ID 설명

이 특정 예제에서 con_id 3는 pdb1을 나타내고 con_id 4는 pdb2를 나타냅니다.

[grid@node1 bin]$ echo $ORACLE_HOME

/u01/app/12.1.0/grid

 [grid@node1 bin]$ echo $ORACLE_SID

+ASM1

[grid@node1 bin]$ sqlplus / as sysdba

 SQL*Plus: Release 12.1.0.1.0 Production on Wed Oct 9 13:51:39 2013

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

Connected to:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Real Application Clusters and Automatic Storage Management options

 SQL> show con_id;

CON_ID

0

 SQL> show con_name;

 CON_NAME

Non Consolidated

4. EM(Enterprise Manager) Express를 사용하여 PDB에 연결

DBCA(Database Configuration Assistant)를 사용하여 데이터베이스를 생성할 때 EM Express의 URL 완료 시 DBCA에서 제공합니다. URL의 형식은 http://<hostname>:portnumber/em이며 기본 포트 ID는 5500입니다.

 EM Express에 액세스하기 위해 해당 URL로 이동하기 전에 다음 SQL 문을 실행하여 EM Express의 포트를 확인해야 합니다.

SQL> SELECT dbms_xdb_config.gethttpsport from dual;

GETHTTPSPORT

       5500

출력 결과가 위와 같으면 DBCA에서 표시하는 URL에 연결할 수 있습니다.

그러나 다음과 같이 출력이 null인 경우

GETHTTPSPORT

PL/SQL 절차 DBMS_XDB_CONFIG.SETHTTPSPORT를 실행하여 EM Express의 HTTPS 포트를 설정해야 합니다. 예:

SQL> exec dbms_xdb_config.sethttpsport(5500);

PL/SQL 절차가 완료되었습니다.

그런 다음 URL을 사용하여 EM Express에 액세스합니다.

 아래와 같이 EM Express에 대해 HTTP 포트를 구성할 수도 있습니다.

SQL> select dbms_xdb_config.gethttpport from dual;

 SQL> exec dbms_xdb_config.sethttpport(8080);

PDB에 대한 EM Express 포트를 설정하려면 컨테이너를 해당 pdb로 변경하고 PL/SQL 절차를 실행하여 해당 컨테이너에 대한 포트를 설정해야 합니다.

이 작업을 수행한 후 다음과 같이 cpdb, pdb1 및 pdb2에 대한 HTTP 포트를 확인할 수 있습니다.

SQL> select dbms_xdb_config.gethttpport from dual;

GETHTTPPORT

       8080

SQL> alter session set container = pdb1;

Session altered.

SQL> select dbms_xdb_config.gethttpport from dual;

 GETHTTPPORT

       8081

SQL> alter session set container = pdb2;

Session altered.

SQL> select dbms_xdb_config.gethttpport from dual;

GETHTTPPORT

       8082 
SLN310924_en_US__1icon 참고: EM Express URL에 연결할 수 없는 경우 그리드 사용자로 수신기 컨트롤을 다시 로드한 다음 다시 시도하십시오.

Article Properties


Last Published Date

21 Feb 2021

Version

3

Article Type

Solution