قابلیت Refreshable PDB از نسخه 12cR2 ارائه شد که قبلا در مورد آن مطلبی نوشتیم. برای ایجاد این نوع از PDBها، تا قبل از نسخه 23ai صرفا می توانستیم از دستور CREATE PLUGGABLE DATABASE استفاده کنیم اما در نسخه 23ai این کار از طریق ابزار DBCA هم قابل انجام است.
برای ایجاد Refreshable PDB سه گزینه جدید به DBCA اضافه شده است:
createAsRefreshablePDB: برای ایجاد Refreshable PDB باید این گزینه به TRUE تنظیم شود.
refreshMode: نحوه بروزرسانی PDB می تواند AUTO و یا MANUAL باشد.
refreshInterval : بازه زمانی بروزرسانی هم با این گزینه قابل تنظیم است.
قصد داریم PDBای با نام TehranPDB که در دیتابیس مبدا موجود است را در دیتابیسی دیگر(دیتابیس مقصد) به صورت Refreshable ایجاد کنیم نام PDB جدید EsfahanPDB خواهد بود.
قبل از اجرای دستور dbca باید دیتابیس مبدا و مقصد را در حالت Archive Log قرار دهیم:
SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /oracle23c/archive Oldest online log sequence 186 Next log sequence to archive 188 Current log sequence 188
در هنگام استفاده از ابزار DBCA برای ساخت Refreshable PDB، نیازی به ساخت دیتابیس لینک نداریم و DBLink توسط ابزار DBCA ایجاد می شود. البته برای این کار باید در دیتابیس مبدا common userای با مجوز مورد نیاز ایجاد کنیم و مشخصات یوزر و دیتابیس را در زمان اجرا دستور DBCA تنظیم کنیم.
از این رو، در قدم بعدی common userای را در دیتابیس source ایجاد می کنیم:
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 4 TEHRANPDB READ WRITE NO SQL> ser c##usef identified by a; User created. SQL> grant create session,create pluggable database to c##usef container=all; Grant succeeded.
شرایط برای اجرای دستور dbca فراهم است این دستور را اجرا می کنیم:
[oracle@OL88 ~]$ dbca -silent \ > -createPluggableDatabase \ > -createFromRemotePDB \ > -sourceDB FREE \ > -remotePDBName TEHRANPDB \ > -remoteDBConnString 192.168.1.32:1521/FREE \ > -remoteDBSYSDBAUserName sys \ > -refreshMode auto \ > -remoteDBSYSDBAUserPassword a \ > -refreshInterval 300 \ > -dbLinkUsername c##usef \ > -dbLinkUserPassword a \ > -sysDBAUserName sys \ > -createAsRefreshablePDB true \ > -sysDBAPassword a \ > -pdbName EsfahanPDB \ > -pdbAdminUserName pdbadmin \ > -pdbAdminPassword a
Prepare for db operation 50% complete Create pluggable database using remote clone operation 100% complete Pluggable database "EsfahanPDB" plugged successfully. Look at the log file "/opt/oracle/cfgtoollogs/dbca/FREE/EsfahanPDB/FREE.log" for further details.
با اجرای این دستور، در دیتابیس مقصد، EsfahanPDB ایجاد شده است:
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 4 ESFAHANPDB MOUNTED
از طریق ویوی dba_pdbs می توانیم اطلاعات بیشتری در مورد این PDB بدست بیاوریم:
SQL> select pdb_name, status, refresh_mode, refresh_interval from dba_pdbs where pdb_name='ESFAHANPDB'; PDB_NAME STATUS REFRES REFRESH_INTERVAL ---------- ---------- ------ ---------------- ESFAHANPDB REFRESHING AUTO 300
همانطور که می بینید، PDB به صورت خودکار و در بازه زمانی 300 ثانیه بروز خواهد شد.
همچنین می توانیم این PDB را به صورت دستی بروز کنیم:
SQL> ALTER PLUGGABLE DATABASE ESFAHANPDB REFRESH; Pluggable database altered.
--Alert Log 2024-02-14T22:20:38.517766+03:30 ALTER PLUGGABLE DATABASE ESFAHANPDB REFRESH 2024-02-14T22:20:39.541508+03:30 Recovering pdb-4099 from SCN 14572306 to SCN 14576874 trc /opt/oracle/diag/rdbms/free/FREE/trace/FREE_ora_15698.trc ESFAHANPDB(4):Media Recovery Start 2024-02-14T22:20:39.542522+03:30 ESFAHANPDB(4):Serial Media Recovery started 2024-02-14T22:20:39.670476+03:30 ESFAHANPDB(4):Media Recovery Log /oracle23c/archive/parlog_1_188_ee4059e5_1141490157.arc 2024-02-14T22:20:40.030075+03:30 ESFAHANPDB(4):Incomplete Recovery applied until change 14576874 time 02/14/2024 22:20:37 ESFAHANPDB(4):.... (PID:15698): Media Recovery Complete [dbsdrv.c:15638] Completed: ALTER PLUGGABLE DATABASE ESFAHANPDB REFRESH