artarad_multitenant-application-container

Application Containers در اوراکل ۱۲٫۲ بخش دوم

مقدمه
همانطور که در مقاله قبل Application Container را در اوراکل ۱۲٫۲ معرفی کردیم، هر Application Container تعدادی PDB را قادر می سازد تا داده ها، متایتاها، کدها و یا تعدادی PDB دیگر را به اشتراک بگذارند. همچنین مدیران Applicationها می توانند بطور موثر PDBهای خود را در یک Application Container مدیریت کنند. در این مقاله ما نحوه ی ایجاد یک Application Container درون یک CDB را یاد می گیریم.

سناریو مورد نظر
در اینجا ما پایگاه داده اوراکل ۱۲٫۲ داریم که دارای یک CDB با نام ORCLCDB می باشد. در این CDB یک Application Container برای برنامه فروش Sales_app ایجاد می کنیم که اشیاء مشترک آن توسط چهار PDB با نام-های North_app_pdb، South_app_pdb، East_app_pdb و West_app_pdb به اشتراک گذاشته می شود. اشیاء مشترک برای sales_app در Application Root: sales_app_root ذخیره خواهد شد. همچنین ما یک Application Seed PDB با نام sales_app_root$seed خواهیم ساخت.

Artarad_Oracle_Application_Container

پیاده سازی سناریو
ابتدا به CDB: ORCLCDB متصل می شویم تا تایید کنیم در حال حاضر فقط یک CDB وجود دارد و به آن یک Seed متصل است، و هیچ PDB توسط کاربر در آن ایجاد نشده است.

SQL> conn sys/oracle@orclcdb as sysdba

set sqlprompt CDB$ROOT>

CDB$ROOT>SELECT con_id, name, open_mode, application_root app_root,

application_pdb app_pdb, application_seed app_seed

from v$containers 

order by con_id;

CON_ID NAME OPEN_MODE APP_ROOT APP_PDB APP_SEED

———- ————— ———- ——– ——– ——–

۱ CDB$ROOT READ WRITE NO NO NO

۲ PDB$SEED READ ONLY NO NO NO

۲ rows selected.

ایجاد Application Container:
یک Application Container مانند یک PDB معمولی با دستور CREATE PLUGGABLE DATABASE ساخته می شود، با این تفاوت که دستور ایجاد آن باید شامل عبارت APPLICATION CONTAINER باشد. در اینجا ما یک Application Root Container با نام sales_app_root ایجاد می-کنیم.

CDB$ROOT>ho mkdir -p /u01/app/oracle/oradata/orclcdb/sales_app_root

CDB$ROOT>CREATE PLUGGABLE DATABASE sales_app_root AS APPLICATION CONTAINER

ADMIN USER appadmin IDENTIFIED BY oracle

CREATE_FILE_DEST=’/u01/app/oracle/oradata/orclcdb/sales_app_root’; 

Pluggable database created.

CDB$ROOT>SELECT con_id, name, open_mode, application_root app_root,

application_pdb app_pdb, application_seed app_seed

from v$containers 

order by con_id;

CON_ID NAME OPEN_MODE APP_ROOT APP_PDB APP

———- ————— ———- ——– ——– —

۱ CDB$ROOT READ WRITE NO NO NO

۲ PDB$SEED READ ONLY NO NO NO

۳ SALES_APP_ROOT MOUNTED YES NO NO

۳ rows selected.

CDB$ROOT>alter pluggable database sales_app_root open;

sho pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED

———- —————————— ———- ———-

۲ PDB$SEED READ ONLY NO

۳ SALES_APP_ROOT READ WRITE NO

لازم به ذکر است یک Application Root فقط به یک CDB تعلق دارد. هر Application Root دارای Service Name مخصوص خودش است، که کابران می توانند مانند اتصال به PDB به آن وصل شوند. زمانی که برای اولین بار یک Application root باز می شود، پایگاه داده به طور اتوماتیک یک Application با نام APP$<guid> می سازد، که guid به معنای global unique ID از Application Root می باشد.

SQL>conn sys/oracle@host01:1522/sales_app_root as sysdba

set sqlprompt SALES_APP_ROOT>

SALES_APP_ROOT>select app_name, app_version, app_id, app_status,

app_implicit implicit

from dba_applications;

APP_NAME APP_VERSION APP_ID APP_STATUS IMPLICIT

————————————- ———— —— ———- ——–

APP$5313F8AEAFA337B0E05364C909C08D65 1.0 2 NORMAL Y

SALES_APP_ROOT>select CON_ID , name, CON_UID, Guid from v$containers;

CON_ID NAME CON_UID GUID

———- ——————– ———- ——————————–

۳ SALES_APP_ROOT 2775271524 5313F8AEAFA337B0E05364C909C08D65

حال نسخه ۱٫۰ برنامه sales_app در Application Root: sales_app_root نصب می کنیم. این برنامه یک یوزر مشترک با نام sales_app_user می سازد، و مجوزهای دسترسی لازم را به آن اعطا می کند، سپس یک جدول Metadata-linked با نام sales_app_user.customers ایجاد می کند. این اشیاء مشترک برنامه sales_app برای Application PDBهایی که به Application Root مرتبط هستند به اشتراک گذاشته می شود.
–آغاز نصب برنامه Sales_app

SALES_APP_ROOT>ALTER PLUGGABLE DATABASE APPLICATION sales_app BEGIN INSTALL ‘1.0’;

Pluggable database altered.

SALES_APP_ROOT>@get_app_status

APP_NAME APP_VERSION APP_ID APP_STATUS IMPLICIT

————————————– ———— —— ———— ——–

SALES_APP 3 INSTALLING N

APP$5313F8AEAFA337B0E05364C909C08D65 1.0 2 NORMAL Y

— Create common application user sales_app_user and grant necessary privileges

SALES_APP_ROOT>CREATE USER sales_app_user IDENTIFIED BY oracle CONTAINER=ALL;

GRANT CREATE SESSION, create procedure, CREATE TABLE,

unlimited tablespace TO sales_app_user;

–ایجاد جدول مشترک

SALES_APP_ROOT>CREATE TABLE sales_app_user.customers SHARING=METADATA

( cust_id NUMBER constraint cust_pk primary key,

cust_name varchar2(30),

cust_add varchar2(30),

cust_zip NUMBER

);

–پایان نصب برنامه

SALES_APP_ROOT> ALTER PLUGGABLE DATABASE APPLICATION sales_app END INSTALL ‘1.0’;

SALES_APP_ROOT>@get_app_status

APP_NAME APP_VERSION APP_ID APP_STATUS IMPLICIT

————————————– ———— —— ———— ——–

APP$5313F8AEAFA337B0E05364C909C08D65 1.0 2 NORMAL Y

SALES_APP 1.0 3 NORMAL N

حال ما اشیاء مشترک برنامه را در Application Root ایجاد کردیم. بعداز آن، ما یک Application PDB برای اشتراک اشیاء با آن ایجاد خواهیم کرد.
ایجاد Application PDB north_app_pdb از CDB Seed(PDB$SEED)
در حال حاضر هیچ Application/Seed PDB به Application Container: sales_app_root متصل نیست

SALES_APP_ROOT>sho pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED

———- —————————— ———- ———-

۳ SALES_APP_ROOT READ WRITE NO

حال Application Container PDB: north_app_pdb را از CDB Seed(PDB$SEED) ایجاد می کنیم.
–ایجاد دایرکتوری برای Application PDB جدید

SALES_APP_ROOT>ho mkdir -p /u01/app/oracle/oradata/orclcdb/sales_app_root/north_app_pdb

–ایجاد Application PDB: north_app_pdb

SALES_APP_ROOT>CREATE PLUGGABLE DATABASE north_app_pdb

ADMIN USER pdb_admin IDENTIFIED BY Password1

CREATE_FILE_DEST = ‘/u01/app/oracle/oradata/orclcdb/sales_app_root/north_app_pdb’;

Pluggable database created.

حال Application PDB جدید به Application Container: sales_app_root متصل است.

SALES_APP_ROOT>@get_app_containers

CON_ID NAME OPEN_MODE APP_ROOT APP_PDB APP_SEED

——– ——————– ———- ——– ——– ——–

۳ SALES_APP_ROOT READ WRITE YES NO NO

۴ NORTH_APP_PDB MOUNTED NO YES NO

باز کردن Application PDB ساخته شده:

SALES_APP_ROOT>ALTER PLUGGABLE DATABASE north_app_pdb OPEN;

sho pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED

———- —————————— ———- ———-

۳ SALES_APP_ROOT READ WRITE NO

۴ NORTH_APP_PDB READ WRITE NO

به Application PDB ساخته شده متصل می شویم و اشیاء مشترک ساخته شده را بررسی می کنیم.

APP_ROOT>conn sys/oracle@host01:1522/north_app_pdb as sysdba

set sqlprompt NORTH_APP_PDB>

NORTH_APP_PDB>desc sales_app_user.customers

ERROR:

ORA-04043: object sales_app_user.customers does not exist

ما می بینیم که جدول sales_app_user.customers برای Application PDB ساخته شده دردسترس نیست، زیرا آن از روی CDB Seed ایجاد شده است، و نمی توان اشیاء مشترک ایجاده شده در Application Root به اشتراک بگذارد.

SALES_APP_ROOT>@get_app_pdb_status

no rows selected

ما اکنون north_app_pdb را با Application Root همگام سازی می کنیم، تا برنامه sales_app با آن ثبت شود و اشیاء مشترک برای north_app_pdb قابل مشاهده باشد.

NORTH_APP_PDB>ALTER PLUGGABLE DATABASE APPLICATION sales_app SYNC;

Pluggable database altered.

SALES_APP_ROOT>@get_app_pdb_status

NAME CON_UID APP_NAME APP_VERSIO APP_STATUS

——————– ———- ——————– ———- ————

NORTH_APP_PDB 2659474630 SALES_APP 1.0 NORMAL

NORTH_APP_PDB>desc sales_app_user.customers

Name Null? Type

——————————— ——– ————————-

CUST_ID NOT NULL NUMBER

CUST_NAME VARCHAR2(30)

CUST_ADD VARCHAR2(30)

CUST_ZIP NUMBER

از این رو، یک Application PDB که از روی CDB Seed ایجاد شده است نیاز به همگام سازی با Application Root دارد، تا بتواند به اشیاء مشترک دسترسی پیدا کند.
در مرحله بعد، ما یک Application Seed به عنوان الگویی برای ایجاد Application PDBها درون Application Container ایجاد می کنیم. یک Application Seed می تواند از CDB Seed، Application PDB موجود یا از Application Root ایجاد شود. در اینجا ما Application Seed را از روی CDB Seed ایجاد خواهیم کرد.
ایجاد Application Seed از روی CDB Seed:

SALES_APP_ROOT>ho mkdir -p /u01/app/oracle/oradata/orclcdb/sales_app_root/sales_app_root_seed

SALES_APP_ROOT>create pluggable database as seed

admin user seedadmin identified by oracle roles=(connect)

CREATE_FILE_DEST= ‘/u01/app/oracle/oradata/orclcdb/sales_app_root/sales_app_root_seed’;

Pluggable database created.

توجه داشته باشید که نام یک Application Seed با فرمت <application_root>$SEED ایجاد می شود، که در اینجا نام آن برابر است با sales_app_root$seed.

SALES_APP_ROOT>@get_app_containers

CON_ID NAME OPEN_MODE APP_ROOT APP_PDB APP_SEED

———- ——————– ———- ——– ——– ——–

۳ SALES_APP_ROOT READ WRITE YES NO NO

۴ NORTH_APP_PDB READ WRITE NO YES NO

۵ SALES_APP_ROOT$SEED MOUNTED NO YES YES

حال Application Seed را باز می کنیم و باید توجه داشته باشید که آن از CDB Seed ایجاد شده پس برنامه sales_app با آن ثبت نمی شود و اشیاء ی مشترک را به اشتراک بگذارد.

SALES_APP_ROOT>ALTER PLUGGABLE DATABASE sales_app_root$seed OPEN;

sho pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED

———- —————————— ———- ———-

۳ SALES_APP_ROOT READ WRITE NO

۴ NORTH_APP_PDB READ WRITE NO

۵ SALES_APP_ROOT$SEED READ WRITE NO

SALES_APP_ROOT>@get_app_pdb_status

NAME CON_UID APP_NAME APP_VERSIO APP_STATUS

——————– ———- ——————– ———- ———-

NORTH_APP_PDB 2659474630 SALES_APP 1.0 NORMAL

در نتیجه زمانی که یک Application Seed از روی CDB Seed ایجاد می شود، با Application Root همگام سازی نشده است.
اکنون Application PDB: east_app_pdb را از روی Application Seed ایجاد می کنیم که همگام سازی نشده است.
ایجاد Application PDB از روی Application Seed غیرهمگام سازی شده

SALES_APP_ROOT>ho mkdir -p /u01/app/oracle/oradata/orclcdb/sales_app_root/east_app_pdb

SALES_APP_ROOT>CREATE PLUGGABLE DATABASE east_app_pdb

ADMIN USER pdb_admin IDENTIFIED BY oracle

CREATE_FILE_DEST =

‘/u01/app/oracle/oradata/orclcdb/sales_app_root/east_app_pdb’;

Pluggable database created.

SALES_APP_ROOT>@get_app_containers

CON_ID NAME OPEN_MODE APP_ROOT APP_PDB APP_SEED

———- ——————– ———- ——– ——– ——–

۳ SALES_APP_ROOT READ WRITE YES NO NO

۴ NORTH_APP_PDB READ WRITE NO YES NO

۵ SALES_APP_ROOT$SEED READ WRITE NO YES YES

۸ EAST_APP_PDB MOUNTED NO YES NO

حال Application PDB: east_app_pdb را باز می کنیم. باید در نظر داشت این PDB از روی یک Application Seed ساخته شده که با برنامه sales_app همگام سازی نشده است.

SALES_APP_ROOT>alter pluggable database east_app_pdb open;

sho pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED

———- —————————— ———- ———-

۳ SALES_APP_ROOT READ WRITE NO

۴ NORTH_APP_PDB READ WRITE NO

۵ SALES_APP_ROOT$SEED READ WRITE NO

۸ EAST_APP_PDB READ WRITE NO

SALES_APP_ROOT>@get_app_pdb_status

NAME CON_UID APP_NAME APP_VERSIO APP_STATUS

——————– ———- ——————– ———- ————

NORTH_APP_PDB 2659474630 SALES_APP 1.0 NORMAL

اکنون Application PDB ایجاد شده را با Application Root همگام سازی می کنیم، زیرا این Application PDB از روی Application Seed ساخته شده که همگام سازی نشده، در نتیجه Application PDB نیاز به همگام سازی دارد تا برنامه sales_app با آن ثبت شود.

SQL>conn sys/oracle@host01:1522/sales_app_root$seed as sysdba

set sqlprompt SALES_APP_ROOT$SEED>

SALES_APP_ROOT$SEED>alter pluggable database application sales_app sync;

Pluggable database altered.

SALES_APP_ROOT>@get_app_pdb_status

NAME CON_UID APP_NAME APP_VERSIO APP_STATUS

——————– ———- ——————– ———- ————

NORTH_APP_PDB 2659474630 SALES_APP 1.0 NORMAL

SALES_APP_ROOT$SEED 651701329 SALES_APP 1.0 NORMAL

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *