ایجاد پایگاه داده PROXY PDB در اوراکل ۱۲c
ایجاد پایگاه داده PROXY PDB در پایگاه داده اوراکل ۱۲c
Proxy PDB یک نقطه ارتباطی محلی است که به یک PDB از راه دور ارجاع داده میشود. این راهکار در موارد زیر مورد استفاده قرار میگیرد.
• انتقال PDB به یک پایگاه داده اوراکل و یا مرکز داده دیگر بدون تغییر در اجزای ارتباطات
• ایجاد یک PDB ابری بدون دسترسیهای چندگانه از راه دور
• اشتراکگذاری یک PDB در پایگاهدادههای مختلف
شکل ۱ اشتراکگذاری PDB در پایگاهدادههای مختلف
ذکر چند نکته در مورد استفاده از Proxy PDB خالی از لطف نخواهد بود.
• دستورات DML و DDL به سمت PDB مرجع ارسال شده و نتیجه به عنوان خروجی بازگشت داده میشود.
• در زمان اتصال به PDB نیابتی دستورات ALTER DATABASE و ALTER PLUGGABLE DATABASE در PDB نیابتی اجرا شده و به سمت PDB مرجع ارسال نمیشوند.
• در زمان اتصال به Container نیابتی دستور ALTER PLUGGABLE DATABASE در PDB نیابتی اجرا شده و به PDB مرجع ارسال نمیشود.
• برای ایجاد PDB نیابتی از DB Link استفاده میشود. این DB Link پس ایجاد PDB نیابتی مورد استفادهای نداشته و حذف آن تاثیری در عملکرد سرویس نخواهد داشت.
• باید DB Link در پایگاهداده نیابتی در سطح Container ایجاد شود. اشارهگر این DB Link در پایگاهداده مرجع میتواند به یک کاربر عمومی در سطح Container و یا PDB باشد.
• SYSTEM, SYSAUX, TEMP, UNDO از پایگاهداده مرجع به پایگاهداده نیابتی منتقل و همسان نگهداری میشود. بنابراین در صورتی که از معماری OMF برای نامگذاری فایلها استفاده نشده باشد، لازم است تبدیل نامگذاری بین دو پایگاهداده تنظیم گردد.
• انتقال اطلاعات بین دو پایگاهداده اثرات شبکهای بر روی شبکهی موجود خواهد داشت. برای افزایش کارایی لازم است شبکه بین دو پایگاهداده بررسی گردد.
پیشنیازها
پیشنیازهای ایجاد PDB نیابتی به شرح زیر است.
• دسترسی CREATE PLUGGABLE DATABASE برای کاربری پایگاهداده نیابتی در سطح Container.
• دسترسی CREATE PLUGGABLE DATABASE برای کاربری پایگاهداده مرجع.
• مدیریت UNDO Tablespace به صورت Local Mode برای Container پایگاهداده مرجع. (در غیر این صورت پایگاهداده مرجه باید در مدل Open Read Only قرار داده شود.)
• حالت ARCHIVE MODE برای پایگاهداده مرجع. (در غیر این صورت پایگاهداده مرجع باید در وضعیت Open Read Only قرار داده شود.)
• DB Link از پایگاهداده نیابتی به پایگاهداده مرجع. (در صورتی که پایگاهداده مرجع از نوع PDB باشد، کاربری استفاده شده برای ایجاد DB Link میتواند در سطح Container و با PDB پایگاهداده مرجع باشد)
• یکسان بودن اجزای نصب شده یا کمتر بودن اجزای نصب شده پایگاهداده مرجع.
• همسان بودن CharacterSet دو پایگاهداده. (بجز زمانی که پایگاهداده نیابتی AL32UTF8 باشد.)
• انجام تنظیمات لازمه پیش از ایجاد PDB نیابتی در صورتی که پایگاهداده مرجع از TDE استفاده کرده باشد. (در غیر این صورت PDB نیابتی تنها در حالت restricted آغاز میشود.)
پیادهسازی
۲-۱ پیشنیازهای سناریو پیادهسازی
سناریوی پیادهسازی شده در این مستند استفاده از دو پایگاهداده Container به همراه پایگاهداده PDB میباشد که در نقش پایگاهداده مرجع و نیابتی مورد استفاده قرار میگیرند. با استفاده از دستور زیر پایگاهداده Container نیابتی بکار رفته در این مستند ایجاد میگردد.
[oracle@oraserv ~]$ dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname cdb1 -sid cdb1 -responseFile NO_VALUE \
-characterSet AL32UTF8 \
-sysPassword OraPasswd1 \
-systemPassword OraPasswd1 \
-createAsContainerDatabase true \
-numberOfPDBs 1 \
-pdbName pdb1 \
-pdbAdminPassword OraPasswd1 \
-databaseType MULTIPURPOSE \
-automaticMemoryManagement false \
-totalMemory 2048 \
-storageType FS \
-datafileDestination “/u01/app/oracle/oradata/” \
-redoLogFileSize 50 \
-initParams encrypt_new_tablespaces=DDL \
-emConfiguration NONE \
-ignorePreReqs
با استفاده از این دستور :
۱٫ یک پایگاهداده Container با استفاده از نمونه General Purpose ایجاد میشود.
۲٫ نام جهانی و SID پایگاهداده برابر cdb1 مقداردهی میشود.
۳٫ مقدار CharacterSet این پایگاهداده برابر AL32UTF8 خواهد بود.
۴٫ رمز عبور کاربریهای sys و system برابر OraPasswd1 تنظیم میشود.
۵٫ این پایگاهداده به عنوان Container ساخته میشود.
۶٫ یک PDB پیشفرض با نام pdb1 نیز ایجاد میشود.
۷٫ فایلهای داده این پایگاهداده در مسیر /u01/app/oracle/oradata ساخته میشود.
۸٫ حجم فایلهای Online RedoLog برابر ۵۰ MB تنظیم میشود.
۹٫ برای این پایگاهداده سرویس EM تنظیم نخواهد شد.
همچنین دستور زیر پایگاهداده Container مرجع را ایجاد مینماید.
[oracle@oraserv ~]$ dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname cdb3 -sid cdb3 -responseFile NO_VALUE \
-characterSet AL32UTF8 \
-sysPassword OraPasswd1 \
-systemPassword OraPasswd1 \
-createAsContainerDatabase true \
-numberOfPDBs 1 \
-pdbName pdb5 \
-pdbAdminPassword OraPasswd1 \
-databaseType MULTIPURPOSE \
-automaticMemoryManagement false \
-totalMemory 2048 \
-storageType FS \
-datafileDestination “/u01/app/oracle/oradata/” \
-redoLogFileSize 50 \
-initParams encrypt_new_tablespaces=DDL \
-emConfiguration NONE \
-ignorePreReqs
تشریح پارامترهای این پایگاهداده نیز همانند پایگاهداده نیابتی میباشد. نام جهانی و SID این پایگاهداده برابر cdb3 است. همچنین برای اتصال به پایگاهداده مرجع نیاز به یک DB Link میباشد؛ که با استفاده از دستور زیر ساخته میشود.
SQL> DROP DATABASE LINK clone_link;
SQL> CREATE DATABASE LINK clone_link
CONNECT TO c##remote_clone_user IDENTIFIED BY remote_clone_user USING ‘cdb3’;
— Test link.
SQL> DESC user_tables@clone_link
با استفاده از این دستور که بر روی پایگاهداده cdb5 ساختهمیشود؛ یک DB Link به کاربری remote_clone_user ایجاد میشود.
ایجاد PDB نیابتی
با استفاده از دستور زیر ابتدا به پایگاهداده cdb1 متصل شده و سپس یک PDB نیابتی با نام pdb5_proxy ایجاد میشود. در انتها نیز این پایگاهداده در وضعیت OPEN قرار داده میشود.
[oracle@oraserv ~]$ sqlplus / as sysdba
SQL> CREATE PLUGGABLE DATABASE pdb5_proxy AS PROXY FROM pdb5@clone_link;
SQL> ALTER PLUGGABLE DATABASE pdb5_proxy OPEN;
در صورتی که از طریق احراز هویت سیستمعامل به پایگاهداده نیابتی ورود شده باشد، دستورات با خطای زیر روبرو میشوند.
SQL> CONN / AS SYSDBA
SQL> ALTER SESSION SET CONTAINER = pdb5_proxy;
SQL> SELECT name FROM v$database;
SQL> SELECT name FROM v$database
*
ERROR at line 1:
ORA-01017: invalid username/password; logon denied
ORA-02063: preceding line from PROXYPDB$DBLINK
با استفاده از احراز هویت به روش رمز عبور از بروز این خطا جلوگیری میشود.
SQL> CONN sys@cdb1 AS SYSDBA
SQL> ALTER SESSION SET CONTAINER = pdb5_proxy;
SQL> SELECT name FROM v$database;
NAME
———
CDB3
همچنین با افزودن هویت شبکهای زیر در فایل tnsnames.ora میتوان به صورت مستقیم به پایگاهداده نیابتی ارتباط برقرار کرد.
PDB5_PROXY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver.mydomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb5_proxy)
)
)
نکته قابل توجه در ارتباط مستقیم به پایگاهداده نیابتی این میباشد که نام پایگاهداده برابر CDB3 نمایش داده میشود، در صورتی که اکنون ارتباط از طریق pdb5_proxy با پایگاهداده cdb1 میباشد.
SQL> CONN sys@pdb5_proxy AS SYSDBA
SQL> SELECT name FROM v$database;
NAME
———
CDB3
SQL>
تنظیمات میزبان و درگاه
در زمان ایجاد پایگاهداده نیابتی میتوان میزبان و درگاه را نیز در دستور مشخص کرد.
SQL> CREATE PLUGGABLE DATABASE pdb5_proxy AS PROXY FROM pdb5@clone_link PORT=1526 HOST=’ol7-122.localdomain’;
زمانی از گزینه Port در دستور ساخت استفاده میشود که درگاه دیگری بجز ۱۵۲۱ برای پایگاهداده بکار گرفته شده باشد. همچنین گزینه Host نیز در صورتی استفاده میشود که نام ماشین (در دستور بالا) متفاوت از نام ماشینی باشد که دستور hostname در آن سرور باز میگرداند. این اتفاق معمولاً زمانی رخ میدهد که از نام مستعار در سرویس DNS و یا SCAN استفاده شود.
با استفاده از دستور زیر میتوان نام میزبان و شماره درگاه را در پایگاهداده مرجع اصلاح کرد. لازم به ذکر است که پس از انجام اصلاحات، باید پایگاهداده نیابتی مجدد ایجاد گردد.
SQL> CONN sys@pdb5 AS SYSDBA
— Alter and reset HOST.
SQL> ALTER PLUGGABLE DATABASE CONTAINERS HOST=’myhost.example.com’;
SQL> ALTER PLUGGABLE DATABASE CONTAINERS HOST REST;
— Alter and reset HOST.
SQL> ALTER PLUGGABLE DATABASE CONTAINERS PORT=1526;
SQL> ALTER PLUGGABLE DATABASE CONTAINERS PORT REST;
همانطور که پیشتر توضیح داده شد؛ پس از ایجاد پایگاهداده نیابتی نیازی به DB Link نبوده و میتوان آن را حذف کرد.
SQL> CONN sys@cdb1 AS SYSDBA
SQL> DROP DATABASE LINK clone_link;
SQL> CONN sys@cdb3 AS SYSDBA
SQL> DROP USER c##remote_clone_user CASCADE CONTAINER=ALL;
آزمایش
اکنون به آزمایش پایگاهداده نیابتی پرداخته میشود. برای این منظور تغییراتی از طریق پایگاهداده نیابتی و همچنین از طریق پایگاهداده مرجع ایجاد میشود. ابتدا با استفاده از دستورات زیر از طریق پایگاهداده نیابتی یک Tablespace و یک کاربری ایجاد میشود.
SQL> CONN sys@pdb5_proxy AS SYSDBA
SQL> CREATE TABLESPACE test_ts DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M;
SQL> CREATE USER test IDENTIFIED BY test
DEFAULT TABLESPACE test_ts
QUOTA UNLIMITED ON test_ts;
SQL> GRANT CREATE SESSION, CREATE TABLE TO test;
در ادامه با استفاده از پایگاهداده مرجع جدول و مقدار آزمایشی میشود.
SQL> CONN test/test@pdb5
SQL> CREATE TABLE t1 (id NUMBER);
SQL> INSERT INTO t1 VALUES (1);
SQL> COMMIT;
جستوجوی زیر از طریق پایگاهداده نیابتی، صحت عملکرد پایگاهداده نیابتی را نمایش میدهد.
SQL> CONN test/test@pdb5_proxy
SQL> SELECT * FROM t1;
ID
———-
۱
میتوان برای آزمایش معکوس رویه مرحله قبل را نیز آزمایش کرد. بدین ترتیب، ابتدا با استفاده از پایگاهداده نیابتی مقداری درون جدول بارگذاری میشود و سپس از طریق پایگاهداده مرجع مقادیر جستوجو میشوند.
SQL> CONN test/test@pdb5_proxy
SQL> INSERT INTO t1 VALUES (2);
SQL> COMMIT;
SQL> CONN test/test@pdb5
SQL> SELECT * FROM t1;
ID
———-
۱
۲
همانطور که انتظار میرود پایگاهداده مرجع و نیابتی به درستی کار میکنند. مبنی بر توضیحات ارائه شده در بخش معرفی، چند Tablespaces شامل SYSTEM, SYSAUX, TEMP, UNDO به پایگاهداده نیابتی منتقل و همسان نگهداری شده و بقیه Tablespaces در پایگاهداده مرجع باقی خواهند ماند. صحت این موضوع با استفاده از دستور زیر آزمایش میشود.
SQL> CONN sys@pdb5_proxy AS SYSDBA
SQL> SET LINESIZE 100
SQL> SELECT name FROM v$datafile;
NAME
—————————————————————————————————-
/u02/app/oracle/oradata/cdb3/pdb5/system01.dbf
/u02/app/oracle/oradata/cdb3/pdb5/sysaux01.dbf
/u02/app/oracle/oradata/cdb3/pdb5/undotbs01.dbf
/u02/app/oracle/oradata/cdb3/pdb5/users01.dbf
/u02/app/oracle/oradata/CDB3/469D84C85D196311E0538738A8C0B97D/datafile/o1_mf_test_ts_d877rjoo_.dbf
SQL> SELECT name FROM v$tempfile;
NAME
—————————————————————————————————-
/u02/app/oracle/oradata/cdb3/pdb5/temp01.dbf
در صورتی که اگر این دستورات بر روی پایگاهداده محلی اجرا شوند، خروجی متفاوتی را نمایش خواهند داد.
SQL> CONN / AS SYSDBA
SQL> SHOW PDBS
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
۲ PDB$SEED READ ONLY NO
۳ PDB1 READ WRITE NO
۵ PDB5_PROXY READ WRITE NO
SQL> SET LINESIZE 100
SQL> SELECT name FROM v$datafile WHERE con_id = 5;
NAME
—————————————————————————————————-
/u02/app/oracle/oradata/CDB1/469F256E1081028AE0538738A8C079C7/datafile/o1_mf_system_d876rtd8_.dbf
/u02/app/oracle/oradata/CDB1/469F256E1081028AE0538738A8C079C7/datafile/o1_mf_sysaux_d876rtd9_.dbf
/u02/app/oracle/oradata/CDB1/469F256E1081028AE0538738A8C079C7/datafile/o1_mf_undotbs1_d876rtd9_.dbf
SQL> SELECT name FROM v$tempfile WHERE con_id = 5;
NAME
—————————————————————————————————-
/u02/app/oracle/oradata/CDB1/469F256E1081028AE0538738A8C079C7/datafile/o1_mf_temp_d876rtdb_.dbf
برای تشخیص PDB نیابتی از ستونهای V$PDBS.PROXY_PDB و CDB_PDBS.IS_PROXY_PDB جدول v$pdbs استفاده میشود.
SQL> COLUMN name FORMAT A30
SQL> SELECT name, proxy_pdb
FROM v$pdbs;
NAME PRO
—————————— —
PDB$SEED NO
PDB1 NO
PDB5_PROXY YES
SQL> COLUMN pdb_name FORMAT A30
SQL> SELECT pdb_name, is_proxy_pdb
FROM cdb_pdbs;
PDB_NAME IS_
—————————— —
PDB1 NO
PDB$SEED NO
PDB5_PROXY YES
همچنین با استفاده از جدول V$PROXY_PDB_TARGETS میتوان اطلاعات ارتباط نظیر میزبان و درگاه را بررسی نمود.
SQL> COLUMN target_host FORMAT A20
SQL> COLUMN target_service FORMAT A32
SQL> COLUMN target_user FORMAT A20
SQL> SELECT con_id,
target_port,
target_host,
target_service,
target_user
FROM v$proxy_pdb_targets;
CON_ID TARGET_PORT TARGET_HOST TARGET_SERVICE TARGET_USER
———- ———– ——————– ——————————– ——————–
۵ ۱۵۲۱ my-server 469d84c85d196311e0538738a8c0b97d
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.