애플리케이션 컨테이너
CDB 내에서 PDB에서 공유할 수 있는 애플리케이션 데이터 및 메타데이터에 대한 컨테이너를 생성할 수 있습니다.
-
애플리케이션 컨테이너 정보 애플리케이션 컨테이너는 하나 이상의 애플리케이션 백엔드에 대한 데이터 및 메타데이터를 저장하는 선택적 사용자 생성 CDB 구성요소입니다. CDB에는 0개 이상의 애플리케이션 컨테이너가 포함됩니다.
-
응용 프로그램 공통 객체 응용 프로그램 공통 객체는 응용 프로그램 루트의 응용 프로그램 내에서 생성되는 공통 객체입니다. 공통 객체는 데이터 링크 또는 메타 데이터 링크입니다.
-
컨테이너 맵 컨테이너 맵을 사용하면 응용 프로그램 루트에 연결된 세션이 SQL 문에 사용된 술어 값에 따라 적절한 PDB로 경로 지정되는 SQL 문을 실행할 수 있습니다.
-
컨테이너 간 작업 컨테이너 간 작업은 한 번에 여러 컨테이너에 영향을 주는 DDL 또는 DML 문입니다. 참조: 애플리케이션 공통 객체에 대해 알아보려면 공통 및 로컬 객체를 참조하십시오.
애플리케이션 컨테이너 정보
애플리케이션 컨테이너는 하나 이상의 애플리케이션 백엔드에 대한 데이터 및 메타데이터를 저장하는 선택적 사용자 생성 CDB 구성요소입니다. CDB에는 0개 이상의 애플리케이션 컨테이너가 포함됩니다.
애플리케이션 컨테이너 내에서 애플리케이션은 애플리케이션 루트에 저장된 이름이 지정되고 버전이 지정된 공통 데이터 및 메타데이터 세트입니다. 응용 프로그램 컨테이너의 이러한 컨텍스트에서 "응용 프로그램"이라는 용어는 "마스터 응용 프로그램 정의"를 의미합니다. 예를 들어, 응용 프로그램에는 테이블, 뷰 및 패키지 정의가 포함될 수 있습니다.
예를 들어, 공통 테이블 및 테이블 정의 집합으로 구성된 응용 프로그램을 공유하는 이러한 PDB를 사용하여 한 응용 프로그램 컨테이너 내에 여러 판매 관련 PDB를 생성할 수 있습니다. 여러 HR 관련 PDB를 개별 응용 프로그램 컨테이너에 고유한 공통 테이블 및 테이블 정의와 함께 저장할 수 있습니다.
AS APPLICATION CONTAINER 절이 있는 CREATE PLUGGABLE DATABASE 문은 응용 프로그램 컨테이너의 응용 프로그램 루트를 생성하므로 응용 프로그램 컨테이너 자체가 암시적으로 생성됩니다. 애플리케이션 컨테이너를 처음 생성하면 PDB가 포함되지 않습니다. 응용 프로그램 PDB를 생성하려면 응용 프로그램 루트에 연결한 다음 CREATE PLUGGABLE DATABASE 문을 실행해야 합니다.
CREATE PLUGGABLE DATABASE 문에서 컨테이너 이름(응용 프로그램 루트 이름과 동일)을 지정해야 합니다(예: saas_sales_ac). 응용 프로그램 컨테이너 이름은 CDB 내에서 고유해야 하며 특정 리스너를 통해 Instance에 도달하는 모든 CDB 범위 내에서 고유해야 합니다. 모든 애플리케이션 컨테이너에는 애플리케이션 컨테이너와 동일한 이름의 기본 서비스가 있습니다.
-
응용 프로그램 컨테이너의 목적 어떤 면에서 응용 프로그램 컨테이너는 CDB 내에서 응용 프로그램별 CDB로 작동합니다. CDB 자체와 같은 애플리케이션 컨테이너는 여러 PDB를 포함할 수 있으며 이러한 PDB가 메타데이터와 데이터를 공유할 수 있도록 합니다.
-
애플리케이션 루트 애플리케이션 컨테이너에는 컨테이너에 있는 애플리케이션 PDB의 상위인 정확히 하나의 애플리케이션 루트가 있습니다.
-
애플리케이션 PDB 애플리케이션 PDB는 애플리케이션 컨테이너에 상주하는 PDB입니다. CDB의 모든 PDB는 0개 또는 하나의 애플리케이션 컨테이너에 상주합니다.
-
애플리케이션 시드 애플리케이션 시드는 애플리케이션 컨테이너 내에서 사용자가 생성한 선택적 PDB입니다. 애플리케이션 컨테이너에 0개 또는 1개의 애플리케이션 시드가 있습니다.
애플리케이션 컨테이너의 목적
어떤 면에서 응용 프로그램 컨테이너는 CDB 내에서 응용 프로그램별 CDB로 작동합니다. CDB 자체와 같은 애플리케이션 컨테이너는 여러 PDB를 포함할 수 있으며 이러한 PDB가 메타데이터와 데이터를 공유할 수 있도록 합니다.
응용 프로그램 루트를 사용하면 응용 프로그램 PDB가 응용 프로그램을 공유할 수 있습니다. 이 컨텍스트에서는 이름이 지정되고 버전이 지정된 공통 메타 데이터 및 데이터 세트를 의미합니다. 일반적인 응용 프로그램은 응용 프로그램 공통 사용자, 메타 데이터 연결 공통 객체 및 데이터 연결 공통 객체를 설치합니다.
-
애플리케이션 컨테이너의 주요 이점 애플리케이션 컨테이너는 각 애플리케이션을 별도의 PDB에 저장하는 것보다 여러 가지 이점을 제공합니다.
-
애플리케이션 컨테이너 사용 사례: SaaS SaaS 배포는 메타데이터와 데이터를 공유하는 개별 고객에 대해 각각 여러 애플리케이션 PDB를 사용할 수 있습니다.
-
애플리케이션 컨테이너 사용 사례: 논리적 데이터 웨어하우스 고객은 여러 애플리케이션 PDB를 사용하여 데이터 주권 문제를 해결할 수 있습니다.
애플리케이션 컨테이너의 주요 이점
애플리케이션 컨테이너는 각 애플리케이션을 별도의 PDB에 저장하는 것보다 여러 가지 이점을 제공합니다.
-
애플리케이션 루트는 모든 애플리케이션 PDB가 공유할 수 있는 메타데이터와 데이터를 저장합니다.
예를 들어, 모든 응용 프로그램 PDB는 기본 응용 프로그램 롤이 나열된 테이블과 같은 중앙 테이블에서 데이터를 공유할 수 있습니다. 또한 모든 PDB는 PDB 특정 행을 추가하는 테이블 정의를 공유할 수 있습니다.
-
각 PDB에서 별도의 복사본을 유지 관리하는 대신 응용 프로그램 루트에서 마스터 응용 프로그램 정의를 유지 관리합니다.
응용 프로그램 루트에서 응용 프로그램을 업그레이드하면 변경 사항이 모든 응용 프로그램 PDB로 자동으로 전달됩니다. 응용 프로그램 백엔드에는 기본 역할(
admin,manager,sales_rep등)을 나열하는 테이블인 데이터 연결 공통 객체app_roles가 포함될 수 있습니다. PDB 응용 프로그램에 연결된 유저가 이 테이블을 query할 수 있습니다. -
애플리케이션 컨테이너에는 애플리케이션 시드, 애플리케이션 PDB 및 프록시 PDB(다른 CDB의 PDB 참조)가 포함될 수 있습니다.
-
애플리케이션 시드에서 새 애플리케이션 PDB를 빠르게 생성할 수 있습니다.
-
애플리케이션 컨테이너의 모든 PDB에 대해 보고하는 뷰를 질의할 수 있습니다.
-
응용 프로그램 루트에 연결된 상태에서
CONTAINERS함수를 사용하여 여러 PDB의 객체에 대해 DML을 수행할 수 있습니다.예를 들어,
products테이블이 모든 애플리케이션 PDB에 존재하는 경우 애플리케이션 루트에 접속하고 단일SELECT문을 사용하여 모든 애플리케이션 PDB의 제품을 질의할 수 있습니다. -
응용 프로그램 루트에서 PDB를 언플러그한 다음 상위 Oracle 데이터베이스 릴리스의 응용 프로그램 루트에 플러그인할 수 있습니다. 따라서 PDB는 Oracle 데이터베이스 업그레이드에 유용합니다.
애플리케이션 컨테이너 사용 사례: SaaS
SaaS 배치는 메타데이터와 데이터를 공유하는 개별 고객에 대해 각각 여러 애플리케이션 PDB를 사용할 수 있습니다.
순수 SaaS 환경에서 마스터 애플리케이션 정의는 애플리케이션 루트에 상주하지만 고객별 데이터는 자체 애플리케이션 PDB에 상주합니다. 예를 들어, sales_app는 응용 프로그램 루트의 응용 프로그램 모델입니다. 이름이 cust1_pdb인 애플리케이션 PDB는 고객 1에 대한 판매 데이터만 포함하는 반면, 이름이 cust2_pdb인 애플리케이션 PDB는 고객 2에 대한 판매 데이터만 포함합니다. 개별 고객 PDB에 대해 플러그, 언플러그, 복제 및 기타 PDB 레벨 작업을 사용할 수 있습니다.
그림 1: SaaS 사용 사례

순수 SaaS 구성은 다음과 같은 이점을 제공합니다.
-
성능
-
보안
-
여러 고객 지원
각 고객의 데이터는 자체 컨테이너에 있지만 많은 고객을 총체적으로 관리할 수 있도록 통합되어 있습니다. 이 모델은 DBA뿐만 아니라 응용 프로그램 관리자에게도 많은 항목을 관리하는 규모의 경제를 확장합니다.
애플리케이션 컨테이너 사용 사례: 논리적 데이터 웨어하우스
고객은 여러 애플리케이션 PDB를 사용하여 데이터 주권 문제를 해결할 수 있습니다.
샘플 사용 사례에서 회사는 각 회계 분기별 데이터를 별도의 PDB에 저장합니다. 예를 들어, 이름이 sales_ac인 애플리케이션 컨테이너에는 q1_2016_pdb, q2_2016_pdb, q3_2016_pdb 및 q4_2016_pdb가 포함됩니다. 연관된 분기에 해당하는 PDB에서 각 트랜잭션을 정의합니다. 1년 간 성능을 집계하는 보고서를 생성하려면 CONTAINERS() 절을 사용하여 네 개의 PDB에서 집계합니다.
이 논리적 웨어하우스 설계의 이점은 다음과 같습니다.
-
단일 PDB와 관련된 데이터의 ETL은 다른 PDB에 영향을 주지 않습니다.
-
실행 계획은 실제 데이터 분산을 기반으로 하기 때문에 더 효율적입니다.
애플리케이션 루트
애플리케이션 컨테이너에는 컨테이너에 있는 애플리케이션 PDB의 상위인 정확히 하나의 애플리케이션 루트가 있습니다.
응용 프로그램 루트의 등록 정보는 생성 시 설정되며 변경할 수 없습니다. 응용 프로그램 루트가 속한 유일한 컨테이너는 CDB 루트입니다. 응용 프로그램 루트는 어떤 방식으로든 CDB 루트와 같으며 다른 방식으로는 PDB와 같습니다.
-
CDB 루트와 마찬가지로 응용 프로그램 루트는 연결된 PDB에 대한 상위 컨테이너 역할을 합니다. 애플리케이션 루트에 연결된 경우 공통 사용자 및 권한을 관리하고, 애플리케이션 PDB를 생성하고, 컨테이너를 전환하고, 애플리케이션 컨테이너의 모든 PDB에 적용되는 DDL을 실행할 수 있습니다.
-
PDB와 마찬가지로
CREATE PLUGGABLE DATABASE문을 사용하여 응용 프로그램 루트를 생성하고,ALTER PLUGGABLE DATABASE로 변경하고,STARTUP및SHUTDOWN를 사용하여 가용성을 변경합니다. DDL을 사용하여 응용 프로그램 루트를 연결, 언플러그 및 삭제할 수 있습니다. 응용 프로그램 루트는 고유한 서비스 이름을 가지며, 사용자는 PDB에 연결하는 것과 동일한 방식으로 응용 프로그램 루트에 연결할 수 있습니다.
응용 프로그램 루트는 사용자 생성 공통 객체(응용 프로그램 공통 객체라고 함)를 저장할 수 있으므로 CDB 루트 및 표준 PDB와 다릅니다. 애플리케이션 공통 객체는 애플리케이션 루트에 플러그인된 애플리케이션 PDB에서 액세스할 수 있습니다. 응용 프로그램 공통 객체는 CDB 루트, 기타 응용 프로그램 루트 또는 응용 프로그램 루트에 속하지 않는 PDB에 표시되지 않습니다.
예 3-1 응용 프로그램 루트 만들기
이 예에서는 CDB 루트에 관리 공통 사용자 c##system로 로그인합니다. saas_sales_ac라는 응용 프로그램 컨테이너를 생성한 다음 컨테이너와 동일한 이름을 가진 응용 프로그램 루트를 엽니다.
-- Create the application container called saas_sales_ac
CREATE PLUGGABLE DATABASE saas_sales_ac AS APPLICATION CONTAINER
ADMIN USER saas_sales_ac_adm IDENTIFIED BY manager;
-- Open the application root
ALTER PLUGGABLE DATABASE saas_sales_ac OPEN;
현재 컨테이너를 saas_sales_ac로 설정한 다음 이 컨테이너가 애플리케이션 루트인지 확인합니다.
-- Set the current container to saas_sales_ac
ALTER SESSION SET CONTAINER = saas_sales_ac;
COL NAME FORMAT a15
COL ROOT FORMAT a4
SELECT CON_ID, NAME, APPLICATION_ROOT AS ROOT,
APPLICATION_PDB AS PDB,
FROM V$CONTAINERS;
CON_ID NAME ROOT PDB
---------- --------------- ---- ---
3 SAAS_SALES_AC YES NO
애플리케이션 컨테이너의 경우 SYS_CONTEXT 함수의 USERENV 네임스페이스에 다음 두 개의 매개변수를 지정합니다.
SYS_CONTEXT('USERENV', 'IS_APPLICATION_ROOT')
SYS_CONTEXT('USERENV', 'IS_APPLICATION_PDB')
응용 프로그램 루트의 SYS_CONTEXT('USERENV', 'IS_APPLICATION_ROOT') 값은 다음과 같습니다.
SQL> select sys_context('USERENV', 'IS_APPLICATION_ROOT') from dual;
SYS_CONTEXT('USERENV','IS_APPLICATION_ROOT')
--------------------------------------------------------------------------------
YES
SYS_CONTEXT('USERENV', 'IS_APPLICATION_ROOT')의 값은 V$PDBS 뷰의 APPLICATION_ROOT 열과 일치합니다.
SQL> select application_root from v$pdbs where con_id=sys_context('USERENV', 'CON_ID');
APP
---
YES
애플리케이션 PDB
애플리케이션 PDB는 애플리케이션 컨테이너에 상주하는 PDB입니다. CDB의 모든 PDB는 0개 또는 하나의 애플리케이션 컨테이너에 상주합니다.
예를 들어, saas_sales_ac 애플리케이션 컨테이너는 여러 고객을 지원할 수 있으며, 각 고객 애플리케이션은 해당 데이터를 별도의 PDB에 저장합니다. PDB cust1_sales_pdb 및 cust2_sales_pdb 애플리케이션은 saas_sales_ac에 상주할 수 있으며, 이 경우 다른 애플리케이션 컨테이너에 속하지 않습니다(PDB와 마찬가지로 CDB 루트에도 속함).
애플리케이션 루트에 접속되어 있는 동안 CREATE PLUGGABLE DATABASE를 실행하여 애플리케이션 PDB를 생성합니다. 시드로부터 애플리케이션 PDB를 생성하거나, PDB를 복제하거나, 언플러그된 PDB를 플러그인할 수 있습니다. CDB 루트에 플러그인된 PDB와 마찬가지로 애플리케이션 PDB를 복제, 언플러그 또는 삭제할 수 있습니다. 그러나 응용 프로그램 PDB는 항상 응용 프로그램 루트에 속해야 합니다.
애플리케이션 시드
애플리케이션 시드는 애플리케이션 컨테이너 내에서 사용자가 생성한 선택적 PDB입니다. 애플리케이션 컨테이너에 0개 또는 1개의 애플리케이션 시드가 있습니다.
애플리케이션 시드를 사용하면 애플리케이션 PDB를 빠르게 생성할 수 있습니다. PDB$SEED가 CDB 자체 내에서 작동하는 것처럼 애플리케이션 컨테이너 내에서 동일한 역할을 수행합니다.
애플리케이션 시드 이름은 항상 application_container_name$SEED입니다. 여기서 application_container_name은 애플리케이션 컨테이너의 이름입니다. 예를 들어, CREATE PDB ... AS SEED 문을 사용하여 saas_sales_ac 애플리케이션 컨테이너에 saas_sales_ac$SEED를 생성합니다.
응용 프로그램 공통 객체
응용 프로그램 공통 객체는 응용 프로그램 루트의 응용 프로그램 내에서 생성되는 공통 객체입니다. 공통 객체는 데이터 링크 또는 메타 데이터 링크입니다.
데이터 연결 공통 객체의 경우 애플리케이션 PDB는 단일 데이터 세트를 공유합니다. 예를 들어, saas_sales_ac 애플리케이션 컨테이너에 대한 애플리케이션 이름은 saas_sales_app이고, 버전은 1.0이며, 데이터 링크 usa_zipcodes 테이블을 포함합니다. 이 경우 행은 응용 프로그램 루트의 테이블에 한 번 저장되지만 모든 응용 프로그램 PDB에서 표시됩니다.
메타데이터 연결 공통 객체의 경우 애플리케이션 PDB는 메타데이터만 공유하지만 서로 다른 데이터 세트를 포함합니다. 예를 들어, 메타데이터로 링크된 products 테이블은 모든 애플리케이션 PDB에서 동일한 정의를 가지지만 행 자체는 PDB와 관련됩니다. cust1pdb라는 애플리케이션 PDB에는 장부가 포함된 products 테이블이 있을 수 있지만, cust2pdb라는 애플리케이션 PDB에는 자동차 부품이 포함된 products 테이블이 있을 수 있습니다.
-
CDB의 공통성 정보 CDB 또는 응용 프로그램 루트에 정의된 일반적인 현상은 이 루트에 플러그인된 모든 컨테이너에서 동일합니다.
-
응용 프로그램 공통 객체 생성 공통 객체를 생성하려면 응용 프로그램 루트에 연결한 다음 공유 속성을 지정하는
CREATE문을 실행합니다. -
메타 데이터 링크 응용 프로그램 공통 객체 메타 데이터 링크는 응용 프로그램 컨테이너의 모든 PDB에서 공유하는 공통 메타 데이터를 참조하고 권한을 부여할 수 있도록 지원하는 딕셔너리 객체입니다.
-
데이터 링크 응용 프로그램 공통 객체 데이터 링크 객체는 메타 데이터 및 데이터가 응용 프로그램 루트에 상주하며 이 응용 프로그램 컨테이너의 모든 응용 프로그램 PDB에서 액세스할 수 있는 객체입니다.
-
확장된 데이터 링크 응용 프로그램 객체 확장된 데이터 링크 객체는 데이터 링크 객체 및 메타데이터 링크 객체의 하이브리드입니다. 참조: 공통 객체에 대한 자세한 내용은 "공통 및 로컬 객체"를 참조하십시오.
CDB의 공통성 정보
CDB 또는 응용 프로그램 루트에 정의된 일반적인 현상은 이 루트에 플러그인된 모든 컨테이너에서 동일합니다.
-
일반성 원칙 CDB에서는 시스템 컨테이너(CDB 자체) 또는 특정 애플리케이션 컨테이너 내에서 현상이 일반적일 수 있습니다.
-
CDB의 이름 공간 CDB에서 모든 객체의 이름 공간은 해당 컨테이너로 범위가 지정됩니다.
일반성의 원칙
CDB에서는 시스템 컨테이너(CDB 자체) 내에서 또는 특정 응용 프로그램 컨테이너 내에서 현상이 일반적일 수 있습니다.
예를 들어, CDB$ROOT에 접속되어 있는 동안 공통 사용자 계정을 생성하는 경우 이 사용자 계정은 CDB의 모든 PDB 및 애플리케이션 루트에 공통됩니다. 그러나 애플리케이션 루트에 연결된 동안 애플리케이션 공통 사용자 계정을 생성하는 경우 이 사용자 계정은 이 애플리케이션 컨테이너의 PDB에만 공통됩니다.
CDB$ROOT 또는 응용 프로그램 루트의 컨텍스트 내에서 공통성 원칙은 다음과 같습니다.
-
일반적인 현상은 모든 기존 컨테이너와 미래의 컨테이너에서 동일합니다.
따라서 CDB 루트에 정의된 일반 사용자는 CDB 루트에 플러그인된 모든 PDB에서 동일한 ID를 가집니다. 응용 프로그램 루트에 정의된 일반 사용자는 이 응용 프로그램 루트에 플러그인된 모든 응용 프로그램 PDB에서 동일한 ID를 가집니다. 반면, 로컬 현상은 정확히 하나의 기존 컨테이너로 범위가 지정됩니다.
-
공통된 사용자만이 공통된 현상의 존재를 바꿀 수 있다.
보다 정확하게는 CDB 루트 또는 응용 프로그램 루트에 로그인한 일반 사용자만 현재 컨테이너에 공통되는 사용자, 롤 또는 객체의 속성을 생성, 삭제 또는 수정할 수 있습니다.
CDB의 네임스페이스
CDB에서는 모든 객체의 네임스페이스가 해당 컨테이너로 범위가 지정됩니다.
다음 원칙은 범위 지정 규칙을 요약합니다.
-
응용 프로그램 관점에서 PDB는 다른 PDB와 구분되는 별도의 데이터베이스입니다.
-
로컬 현상은 단일 컨테이너 내에서 생성되고 한정됩니다.
주: 이 항목에서 "현명"이라는 단어는 "사용자 계정, 롤 또는 데이터베이스 객체"를 의미합니다.
-
일반적인 현상은 CDB 루트 또는 응용 프로그램 루트에 정의되며 이 루트에 연결되거나 연결될 모든 PDB에 존재합니다.
앞의 원칙은 지역 및 공통 현상에 영향을 미칩니다.
지역 현상
로컬 현상은 컨테이너 내부에서 고유하게 명명되어야 하지만 CDB의 모든 컨테이너에서는 명명되지 않아야 합니다. 서로 다른 컨테이너에서 동일하게 명명된 로컬 현상은 구분됩니다. 예를 들어, 한 PDB의 로컬 사용자 sh가 다른 PDB의 로컬 사용자 sh와 충돌하지 않습니다.
CDB$ROOT 공통 현상
CDB$ROOT에 정의된 일반적인 현상은 여러 컨테이너에 존재하며 이러한 각 네임스페이스 내에서 고유해야 합니다. 예를 들어, CDB 루트에는 SYSTEM 및 SYS와 같은 미리 정의된 일반 사용자가 포함됩니다. 네임스페이스 구분을 보장하기 위해 Oracle AI Database는 다른 컨테이너 내에서 SYSTEM 사용자를 생성하지 못하도록 합니다.
네임스페이스 구분을 보장하려면 CDB 루트에서 사용자가 생성한 공통 현상의 이름이 COMMON_USER_PREFIX 초기화 매개변수로 지정된 값으로 시작해야 합니다. 기본 접두어는 c## 또는 C##입니다. 사용자가 생성한 모든 기타 현상의 이름은 c## 또는 C##로 시작하지 않아야 합니다. 예를 들어, c##hr라는 이름의 hrpdb에 로컬 사용자를 만들 수 없으며, hr라는 이름의 CDB 루트에 공통 사용자를 만들 수도 없습니다.
애플리케이션 공통 현상
애플리케이션 컨테이너 내에서 로컬 및 애플리케이션 공통 현상의 이름이 충돌하지 않아야 합니다.
-
애플리케이션 공통 사용자 및 역할
CDB 일반 사용자와 동일한 원칙이 응용 프로그램 일반 사용자에게 적용됩니다. 차이점은 CDB 일반 사용자의 경우 공통 사용자 접두어의 기본값은
c##또는C##인 반면, 애플리케이션 루트의 경우 공통 사용자 접두어의 기본값은 빈 문자열입니다.다중 테넌트 아키텍처에서는 사용자가 애플리케이션 루트에서 애플리케이션 PDB를 생성하거나 단일 테넌트 애플리케이션을 다중 테넌트 애플리케이션으로 변환한다고 가정합니다.
-
애플리케이션 공통 객체
다중 테넌트 아키텍처에서는 응용 프로그램 루트에 응용 프로그램 공통 객체를 만든다고 가정합니다. 나중에 응용 프로그램 PDB 내에 로컬로 데이터를 추가합니다. 그러나 Oracle AI Database는 애플리케이션 PDB 내에 로컬 테이블 생성을 지원합니다. 이 경우 로컬 테이블은 응용 프로그램 PDB 내의 응용 프로그램 공통 객체와 동일한 네임스페이스에 상주합니다.
참조: 일반 사용자 및 역할에 대한 자세한 내용은 Oracle AI Database Security Guide를 참조하십시오.
애플리케이션 공통 객체 생성
공통 객체를 생성하려면 응용 프로그램 루트에 연결한 다음 공유 속성을 지정하는 CREATE 문을 실행합니다.
애플리케이션 설치, 업그레이드 또는 패치의 일부로만 애플리케이션 공통 객체를 생성하거나 변경할 수 있습니다. 다음과 같은 방법으로 공유를 지정할 수 있습니다.
-
DEFAULT_SHARING초기화 매개변수이 설정은 루트에서 생성된 지원되는 유형의 모든 데이터베이스 객체에 대한 기본 공유 속성입니다.
-
SHARING절이 절은
CREATE문 자체에서 지정합니다.SHARING절이 SQL 문에 포함된 경우DEFAULT_SHARING초기화 매개변수에 지정된 값보다 우선합니다. 가능한 값은METADATA,DATA,EXTENDED DATA및NONE입니다.
다음 표에서는 응용 프로그램 공통 객체의 유형과 데이터 및 메타 데이터가 저장되는 위치를 보여줍니다.
테이블 1 애플리케이션 공통 객체
| 객체 유형 | SHARING 값 | 메타데이터 스토리지 | 데이터 예외사항역 |
|---|---|---|---|
| 데이터 연결 | DATA |
애플리케이션 루트 | 애플리케이션 루트 |
| 확장 데이터 연결 | EXTENDED DATA |
애플리케이션 루트 | 애플리케이션 루트 및 애플리케이션 P DB |
| 메타데이터 연결됨 | METADATA |
애플리케이션 루트 | 애플리케이션 PDB |
참조: 공통 객체에 대한 권한을 관리하는 방법은 Oracle AI Database Security Guide를 참조하십시오.
메타 데이터 링크 응용 프로그램 공통 객체
메타데이터 링크는 애플리케이션 컨테이너의 모든 PDB에서 공유하는 공통 메타데이터에 대한 참조 및 권한 부여를 지원하는 딕셔너리 객체입니다.
SHARING 절 또는 DEFAULT_SHARING 초기화 매개변수에 METADATA 값을 지정하면 객체의 메타데이터에 대한 링크(메타데이터 연결 공통 객체라고 함)가 지정됩니다. 객체의 메타데이터는 응용 프로그램 루트에 한 번 저장됩니다.
PL/SQL 프로시저와 같은 테이블, 뷰 및 코드 객체는 메타 데이터를 공유할 수 있습니다. 이 컨텍스트에서 "메타 데이터"에는 열 정의, 제약 조건, 트리거 및 코드가 포함됩니다. 예를 들어, sales_mlt가 메타데이터로 연결된 공통 테이블인 경우 모든 애플리케이션 PDB는 메타데이터 링크를 통해 애플리케이션 루트에 저장된 이 테이블의 동일한 정의에 액세스합니다. sales_mlt의 행은 모든 애플리케이션 PDB에서 다르지만 열 정의는 동일합니다.
일반적으로 응용 프로그램의 대부분의 객체는 메타 데이터로 연결됩니다. 따라서 하나의 마스터 응용 프로그램 정의만 유지 관리하면 됩니다. 이 접근 방식은 여러 애플리케이션 PDB에서 애플리케이션 관리를 중앙 집중화합니다.
예제 3-2 메타 데이터 링크 공통 객체 생성
이 예에서 SYSTEM 사용자는 saas_sales_ac 애플리케이션 컨테이너에 로그인합니다. SYSTEM는 saas_sales_app라는 애플리케이션을 버전 1.0에 설치합니다. 이 응용 프로그램은 saas_sales_adm라는 공통 사용자 계정을 만듭니다. 이 스키마는 sales_mlt라는 메타데이터로 연결된 공통 테이블을 포함합니다.
-- Begin the install of saas_sales_app
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN INSTALL '1.0';
-- Create the tablespace for the app
CREATE TABLESPACE saas_sales_tbs DATAFILE SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 200M;
-- Create the user account saas_sales_adm, which will own the app
CREATE USER saas_sales_adm IDENTIFIED BY ****** CONTAINER=ALL;
-- Grant necessary privileges to this user account
GRANT CREATE SESSION, DBA TO saas_sales_adm;
-- Makes the tablespace that you just created the default for saas_sales_adm
ALTER USER saas_sales_adm DEFAULT TABLESPACE saas_sales_tbs;
-- Now connect as the application owner
CONNECT saas_sales_adm/******@saas_sales_ac
-- Create a metadata-linked table
CREATE TABLE saas_sales_adm.sales_mlt SHARING=METADATA
(YEAR NUMBER(4),
REGION VARCHAR2(10),
QUARTER VARCHAR2(4),
REVENUE NUMBER);
-- End the application installation
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app END INSTALL '1.0';
ALTER PLUGGABLE DATABASE APPLICATION ... SYNC 문을 사용하여 애플리케이션 PDB를 동기화하여 동일한 마스터 애플리케이션 정의를 사용할 수 있습니다. 이러한 방식으로 모든 애플리케이션 PDB에는 saas_sales_adm.sales_mlt 공통 테이블에 대한 메타데이터 링크가 있습니다. 이름이 cust1_pdb인 PDB 내에서 sales_mlt를 업데이트하는 중간 계층 코드는 cust1_pdb에서 이 테이블에 행을 추가하는 반면, cust2_pdb에서 sales_mlt를 업데이트하는 중간 계층 코드는 cust2_pdb에서 이 테이블의 복사본에 행을 추가합니다. 응용 프로그램 루트에 저장된 테이블 메타 데이터만 공유됩니다. 주: 일반적으로 부여되는 객체 권한이 작동하는 방식에 대해 자세히 알아보려면 Oracle AI Database Security Guide를 참조하십시오.
- 메타데이터 링크 메타데이터로 연결된 애플리케이션 공통 객체의 경우 객체에 대한 메타데이터가 애플리케이션 루트에 한 번 저장됩니다. 메타 데이터 링크는 객체 유형이 공유 중인 메타 데이터와 동일한 딕셔너리 객체입니다.
메타데이터 링크
메타 데이터로 연결된 응용 프로그램 공통 객체의 경우 객체에 대한 메타 데이터는 응용 프로그램 루트에 한 번 저장됩니다. 메타 데이터 링크는 객체 유형이 공유 중인 메타 데이터와 동일한 딕셔너리 객체입니다.
메타데이터 링크에 대한 설명은 생성된 PDB의 데이터 딕셔너리에 저장됩니다. 메타데이터 링크는 애플리케이션 공통 사용자가 소유해야 합니다. 메타데이터 링크만 사용하여 CDB 루트 또는 응용 프로그램 루트의 생성자가 소유한 공통 객체의 메타데이터를 공유할 수 있습니다.
데이터 링크와 달리 메타데이터 링크는 공통 데이터에만 종속됩니다. 예를 들어, 응용 프로그램이 응용 프로그램 루트에 로컬 테이블 dow_close_lt 및 nasdaq_close_lt를 포함하는 경우 공통 사용자는 이러한 객체에 대한 메타 데이터 링크를 생성할 수 없습니다. 그러나 sales_mlt라는 응용 프로그램 공통 테이블은 메타 데이터 링크일 수 있습니다.
권한 있는 일반 사용자가 sales_mlt에 대한 메타데이터를 변경하는 경우(예: 테이블에 열을 추가하는 경우) 이 변경사항은 메타데이터 링크로 전달됩니다. 애플리케이션 PDB 사용자는 메타데이터 링크에서 메타데이터를 변경할 수 없습니다. 예를 들어, 이름이 cust1_pdb인 애플리케이션 PDB를 관리하는 DBA는 이 PDB의 sales_mlt에만 열을 추가할 수 없습니다. 이러한 메타데이터 변경은 애플리케이션 루트에서만 수행할 수 있습니다.
데이터 링크 응용 프로그램 공통 객체
데이터 연결 객체는 메타데이터 및 데이터가 애플리케이션 루트에 상주하며 이 애플리케이션 컨테이너의 모든 애플리케이션 PDB에서 액세스할 수 있는 객체입니다.
SHARING 절 또는 DEFAULT_SHARING 초기화 매개변수에 DATA 값을 지정하면 데이터 연결 공통 객체라는 공통 객체에 대한 링크가 지정됩니다. 데이터 웨어하우스의 차원 테이블은 종종 데이터 연결 공통 테이블의 후보입니다.
데이터 링크는 동의어처럼 작동하는 딕셔너리 객체입니다. 예를 들어, countries가 애플리케이션 공통 테이블인 경우 모든 애플리케이션 PDB는 데이터 링크를 통해 이 테이블의 동일한 복사본에 액세스합니다. 이 테이블에 행이 추가되면 이 행이 모든 애플리케이션 PDB에 표시됩니다.
데이터 링크는 애플리케이션 공통 사용자가 소유해야 합니다. 링크는 가리키는 객체에서 객체 유형을 상속합니다. 데이터 링크에 대한 설명은 해당 링크가 생성된 PDB의 딕셔너리에 저장됩니다. 예를 들어, 애플리케이션 컨테이너에 10개의 애플리케이션 PDB가 포함되어 있고 모든 PDB에 countries 애플리케이션 공통 테이블에 대한 링크가 포함되어 있는 경우 모든 10개의 PDB에 이 링크에 대한 딕셔너리 정의가 포함됩니다.
예제 3-3 데이터 연결 객체 생성
이 예에서 SYSTEM는 saas_sales_ac 애플리케이션 컨테이너에 접속합니다. SYSTEM는 이름이 saas_sales_app인 애플리케이션을 버전 1.0에서 2.0로 업그레이드합니다. 이 애플리케이션 업그레이드는 공통 사용자 saas_sales_adm로 컨테이너에 로그인하고, countries_dlt라는 데이터 링크 테이블을 생성한 다음, 컨테이너에 행을 삽입합니다.
-- Begin an upgrade of the application
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN UPGRADE '1.0' to '2.0';
-- Connect as application owner to application root
CONNECT saas_sales_adm/manager@saas_sales_ac
-- Create data-linked table named countries_dlt
CREATE TABLE countries_dlt SHARING=DATA
(country_id NUMBER,
country_name VARCHAR2(20));
-- Insert records into countries_dlt
INSERT INTO countries_dlt VALUES(1, 'USA');
INSERT INTO countries_dlt VALUES(44, 'UK');
INSERT INTO countries_dlt VALUES(86, 'China');
INSERT INTO countries_dlt VALUES(91, 'India');
-- End application upgrade
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app END UPGRADE TO '2.0';
ALTER PLUGGABLE DATABASE APPLICATION ... SYNC 문을 사용하여 애플리케이션 PDB를 애플리케이션 루트와 동기화합니다. 이러한 방식으로 모든 동기화된 애플리케이션 PDB에는 saas_sales_adm.countries_dlt 데이터 링크 테이블에 대한 데이터 링크가 있습니다.
확장된 데이터 연결 응용 프로그램 객체
확장된 데이터 연결 객체는 데이터 연결 객체 및 메타데이터 연결 객체의 하이브리드입니다.
확장된 데이터 링크 객체에서 응용 프로그램 루트에 저장된 데이터는 모든 응용 프로그램 PDB에 공통되며 모든 PDB가 이 데이터에 액세스할 수 있습니다. 그러나 각 응용 프로그램 PDB는 응용 프로그램 루트의 공통 데이터를 공유하면서 고유의 PDB 관련 데이터를 생성할 수 있습니다. 따라서 PDB는 공통 데이터를 자체 데이터로 보완합니다.
예를 들어, 영업 애플리케이션은 여러 애플리케이션 PDB를 지원할 수 있습니다. 모든 애플리케이션 PDB에는 미국의 우편 번호가 필요합니다. 이 경우 응용 프로그램 루트에 zipcodes_edt 확장 데이터 링크 테이블을 만들 수 있습니다. 응용 프로그램 루트는 미국 우편 번호를 저장하므로 모든 응용 프로그램 PDB에서 해당 우편 번호에 액세스할 수 있습니다. 그러나 한 응용 프로그램 PDB에는 미국 및 캐나다의 우편 번호가 필요합니다. 이 응용 프로그램 PDB는 응용 프로그램 루트가 아닌 응용 프로그램 PDB의 확장된 데이터 연결 객체에 캐나다 우편 번호를 저장할 수 있습니다.
응용 프로그램 루트에 연결하고 CREATE 문에 SHARING=EXTENDED DATA 키워드를 지정하여 확장된 데이터 연결 객체를 생성합니다.
예 3-4 확장 데이터 객체 만들기
이 예에서 SYSTEM는 saas_sales_ac 애플리케이션 컨테이너에 접속한 다음 2.0 버전에서 3.0로 이름이 saas_sales_app인 애플리케이션("예 3-2"로 생성됨)을 업그레이드합니다. 이 응용 프로그램은 일반 사용자 saas_sales_adm로 컨테이너에 로그인하고, zipcodes_edt라는 확장된 데이터 링크 테이블을 생성한 다음 여기에 행을 삽입합니다.
-- Begin an upgrade of the app
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN UPGRADE '2.0' to '3.0';
-- Connect as app owner to app root
CONNECT saas_sales_adm/manager@saas_sales_ac
-- Create a common-data table named zipcodes_edt
CREATE TABLE zipcodes_edt SHARING=EXTENDED DATA
(code VARCHAR2(5),
country_id NUMBER,
region VARCHAR2(10));
-- Load rows into zipcodes_edt
INSERT INTO zipcodes_edt VALUES ('08820','1','East');
INSERT INTO zipcodes_edt VALUES ('10005','1','East');
INSERT INTO zipcodes_edt VALUES ('44332','1','North');
INSERT INTO zipcodes_edt VALUES ('94065','1','West');
INSERT INTO zipcodes_edt VALUES ('73301','1','South');
COMMIT;
-- End app upgrade
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app END UPGRADE TO '3.0';
ALTER PLUGGABLE DATABASE APPLICATION ... SYNC 문을 사용하여 애플리케이션 PDB를 애플리케이션과 동기화합니다. 이러한 방식으로 모든 동기화된 애플리케이션 PDB에는 saas_sales_adm.zipcodes_edt 데이터 링크 테이블에 대한 데이터 링크가 있습니다. 이러한 PDB에 연결하는 애플리케이션은 애플리케이션 업그레이드 중 zipcodes_edt에 삽입된 우편 번호를 볼 수 있지만 이 테이블에 자체 우편 번호를 삽입할 수도 있습니다.
컨테이너 맵
컨테이너 맵을 사용하면 응용 프로그램 루트에 연결된 세션이 SQL 문에 사용된 술어 값에 따라 적절한 PDB로 경로 지정되는 SQL 문을 실행할 수 있습니다.
맵 테이블은 메타 데이터로 연결된 공통 테이블의 열을 지정하고, 분할 영역을 사용하여 서로 다른 응용 프로그램 PDB를 서로 다른 열 값과 연관시킵니다. 이러한 방식으로 컨테이너 맵은 데이터가 테이블 레벨에서 물리적으로 분할되지 않은 경우 PDB 레벨에서 데이터 분할을 사용으로 설정합니다.
컨테이너 맵을 사용하기 위한 주요 구성요소는 다음과 같습니다.
-
메타 데이터 링크 테이블
이 테이블은 컨테이너 맵을 사용하여 질의할 수 있습니다. 예를 들어, 각 응용 프로그램 PDB에 서로 다른 데이터를 저장하는
countries_mlt라는 메타 데이터 링크 테이블을 생성할 수 있습니다.amer_pdb에서countries_mlt.cname열은 북미 국가 이름을 저장하고,euro_pdb에서countries_mlt.cname열은 유럽 국가 이름을 저장하고,asia_pdb에서countries_mlt.cname열은 아시아 국가 이름을 저장합니다. -
맵 테이블
응용 프로그램 루트에서 목록, 해시 또는 범위로 분할된 단일 열 맵 테이블을 생성합니다. 맵 테이블을 사용하면 컨테이너 맵에서 사용으로 설정된 분할 전략을 사용하여 메타데이터로 연결된 테이블을 질의할 수 있습니다. 맵 객체 테이블의 분할 영역 이름은 애플리케이션 컨테이너의 애플리케이션 PDB 이름과 일치해야 합니다.
예를 들어, 이름이
pdb_map_tbl인 맵 테이블은cname열의 목록별로 분할될 수 있습니다.amer_pdb,euro_pdb및asia_pdb라는 분할 영역은 응용 프로그램 PDB의 이름에 해당합니다. 각 분할 영역의 값은 국가의 이름(예:PARTITION amer_pdb VALUES ('US','MEXICO','CANADA'))입니다.Oracle Database 18c부터는
CONTAINERS()질의에서 맵을 사용하기 위해 맵 테이블의 분할 열이 메타데이터로 연결된 테이블의 열과 일치하지 않아도 됩니다.sh.sales테이블이 컨테이너 맵pdb_map_tbl에 대해 사용으로 설정되고cname가 맵 테이블에 대한 분할 열이라고 가정합니다.sh.sales에cname열이 포함되지 않는 경우에도 맵 테이블은SELECT * FROM CONTAINERS(sh.sales) WHERE cname = 'US' ORDER BY time_id질의의 경로를 적절한 PDB로 지정합니다. -
컨테이너 맵
컨테이너 맵은 맵 테이블을 지정하는 데이터베이스 속성입니다. 등록 정보를 설정하려면 응용 프로그램 루트에 연결하고
ALTER PLUGGABLE DATABASE SET CONTAINER_MAP=map_table문을 실행합니다. 여기서map_table는 맵 테이블의 이름입니다.
예 3-5 메타 데이터 연결 테이블, 맵 테이블 및 컨테이너 맵 생성: 파트 1
이 예에서는 응용 프로그램 관리자로 응용 프로그램 루트에 로그인합니다. 애플리케이션 컨테이너에 amer_pdb, euro_pdb 및 asia_pdb의 세 가지 애플리케이션 PDB가 있다고 가정합니다. 각 애플리케이션 PDB는 서로 다른 지역의 국가 이름을 저장합니다. oe.countries_mlt라는 메타데이터로 링크된 테이블에는 국가 이름을 저장하는 cname 열이 있습니다. 이 분할 전략의 경우 분할 영역별 목록을 사용하여 각 영역에 대한 분할 영역을 생성하는 salesadm.pdb_map_tbl라는 맵 객체를 생성합니다. 국가 이름에 따라 지역이 결정됩니다.
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app BEGIN INSTALL '1.0';
-- Create the metadata-linked table.
CREATE TABLE oe.countries_mlt SHARING=METADATA (
region VARCHAR2(30),
cname VARCHAR2(30));
-- Create the partitioned map table, which is list partitioned on the
-- cname column. The names of the partitions are the names of the
-- application PDBs.
CREATE TABLE salesadm.pdb_map_tbl (cname VARCHAR2(30) NOT NULL)
PARTITION BY LIST (cname) (
PARTITION amer_pdb VALUES ('US','MEXICO','CANADA'),
PARTITION euro_pdb VALUES ('UK','FRANCE','GERMANY'),
PARTITION asia_pdb VALUES ('INDIA','CHINA','JAPAN'));
-- Set the CONTAINER_MAP database property to the map object.
ALTER PLUGGABLE DATABASE SET CONTAINER_MAP='salesadm.pdb_map_tbl';
-- Enable the container map for the metadata-linked table to be queried.
ALTER TABLE oe.countries_mlt ENABLE CONTAINER_MAP;
-- Ensure that the table to be queried is enabled for the
-- CONTAINERS clause.
ALTER TABLE oe.countries_mlt ENABLE CONTAINERS_DEFAULT;
-- End the application installation.
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app END INSTALL '1.0';
주: 분할 구문을 사용하여 컨테이너 맵을 생성하더라도 데이터베이스는 분할 기능을 사용하지 않습니다. 컨테이너 맵을 정의할 때는 Oracle Partitioning이 필요하지 않습니다.
앞의 스크립트에서 ALTER TABLE oe.countries_mlt ENABLE CONTAINERS_DEFAULT 문은 응용 프로그램 루트에서 실행된 query 및 DML 문이 데이터베이스 객체에 대해 기본적으로 CONTAINERS() 절을 사용하도록 지정합니다.
예제 3-6 응용 프로그램 동기화 및 데이터 추가: 파트 2
이 예제는 이전 예제에서 계속됩니다. 응용 프로그램 루트에 연결된 상태에서 현재 컨테이너를 각 PDB로 차례로 전환하고 saas_sales_app 응용 프로그램을 동기화한 다음 PDB 관련 데이터를 oe.countries_mlt 테이블에 추가합니다.
ALTER SESSION SET CONTAINER=amer_pdb;
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;
INSERT INTO oe.countries_mlt VALUES ('AMER','US');
INSERT INTO oe.countries_mlt VALUES ('AMER','MEXICO');
INSERT INTO oe.countries_mlt VALUES ('AMER','CANADA');
COMMIT;
ALTER SESSION SET CONTAINER=euro_pdb;
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;
INSERT INTO oe.countries_mlt VALUES ('EURO','UK');
INSERT INTO oe.countries_mlt VALUES ('EURO','FRANCE');
INSERT INTO oe.countries_mlt VALUES ('EURO','GERMANY');
COMMIT;
ALTER SESSION SET CONTAINER=asia_pdb;
ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;
INSERT INTO oe.countries_mlt VALUES ('ASIA','INDIA');
INSERT INTO oe.countries_mlt VALUES ('ASIA','CHINA');
INSERT INTO oe.countries_mlt VALUES ('ASIA','JAPAN');
COMMIT;
예제 3-7 메타 데이터 링크 테이블 Query: 3부
이 예제는 이전 예제에서 계속됩니다. 응용 프로그램 루트에 연결한 다음 oe.countries_mlt를 여러 번 query하여 WHERE 절에 다른 국가를 지정합니다. 질의는 oe.countries_mlt.region 열에서 올바른 값을 반환합니다.
ALTER SESSION SET CONTAINER=saas_sales_ac;
SELECT region FROM oe.countries_mlt WHERE cname='MEXICO';
REGION
------
AMER
SELECT region FROM oe.countries_mlt WHERE cname='GERMANY';
REGION
------
EURO
SELECT region FROM oe.countries_mlt WHERE cname='JAPAN';
REGION
------
ASIA
컨테이너 간 작업
컨테이너 간 작업은 한 번에 여러 컨테이너에 영향을 주는 DDL 또는 DML 문입니다.
CDB 루트 또는 응용 프로그램 루트에 연결된 공통 사용자만 컨테이너 간 작업을 수행할 수 있습니다. 컨테이너 간 작업은 다음 사항에 영향을 줄 수 있습니다.
-
CDB 자체
-
CDB 내의 여러 컨테이너
-
여러 컨테이너에 표시되는 공통 사용자 또는 공통 역할과 같은 여러 현상
-
DDL 또는 DML 문을 실행하는 유저가 현재 연결되지 않은 컨테이너
컨테이너 간 DDL 작업의 예로는 다른 공통 사용자에게 일반적으로 권한을 부여하는 사용자 SYSTEM 및 전체 CDB에 적용되는 ALTER DATABASE . . . RECOVER 문이 있습니다.
CDB 루트 또는 응용 프로그램 루트에 연결된 경우 단일 DML 문을 실행하여 컨테이너 내에 있는 여러 PDB의 테이블 또는 뷰를 수정할 수 있습니다. 데이터베이스는 DML 문에 지정된 CON_ID 열의 값에서 대상 PDB를 추론합니다. CON_ID가 지정되지 않은 경우 데이터베이스는 ALTER PLUGGABLE DATABASE CONTAINERS DEFAULT TARGET 문으로 지정된 CONTAINERS_DEFAULT_TARGET 속성을 사용합니다.
예제 3-8 단일 DML 문에서 다중 PDB 갱신
이 예제에서 목표는 country_name 열을 sh.sales 테이블의 USA 값으로 설정하는 것입니다. 이 테이블은 컨테이너 ID가 7 및 8인 두 개의 개별 PDB에 존재합니다. 두 PDB는 모두 saas_sales_ac이라는 애플리케이션 컨테이너에 있습니다. 응용 프로그램 루트에 관리자로 연결하고 다음과 같이 업데이트할 수 있습니다.
CONNECT sales_admin@saas_sales_ac
Password: *******
UPDATE CONTAINERS(sh.sales) sal
SET sal.country_name = 'USA'
WHERE sal.CON_ID IN (7,8);
앞의 UPDATE 문에서 sal는 CONTAINERS(sh.sales)의 별칭입니다.
참조: "공통 사용자 계정"