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 خواهیم ساخت.
پیاده سازی سناریو
ابتدا به 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
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.