اوراکل 23c – قابلیت Transport Tablespace بر روی Network

در اوراکل نسخه 23c امکان پیاده سازی قابلیت Transport Tablespace از طریق network به وجود آمد برای این کار باید از ابزار RMAN استفاده کرد و از طریق آن دیتافایلهای tablespace مورد نظر را از دیتابیس مبدا به دیتابیس مقصد منتقل کرد.

این کار با اجرای دستور RESTORE FOREIGN TABLESPACE در دیتابیس مقصد قابل انجام است با اجرای این دستور، حتی Metadata مربوط به TABLESPACE هم از طریق ایجاد فایل dump به دیتابیس مقصد منتقل خواهند شد و به صورت خودکار در این دیتابیس برخواهند گشت.

اجرای دستور RESTORE نیاز به مقدماتی دارد که در ادامه متن نحوه انجام آن را شرح خواهیم داد.

قصد داریم TABLESPACEای با نام TBS1 را از TehranPDB به EsfahanPDB ارسال کنیم:

'Source': TehranPDB
'Destination': EsfahanPDB

1: در قدم اول باید  TABLESPACE را در حالت READ ONLY قرار دهیم:

--source
SQL> alter session set container=TehranPDB;
Session altered.
SQL> ALTER TABLESPACE tbs1 READ ONLY;
Tablespace altered.

2: کاربری را در دیتابیسهای source و destination ایجاد می کنیم هم نام و با پسورد مشابه:

-- source + destination
SQL> create user c##usef identified by a;
User created.

مجوزهای sysbackup و EXP_FULL_DATABASE را به این کاربر می دهیم(هم در source و هم در destination)

SQL> grant sysbackup to c##usef container=all;
Grant succeeded.
SQL>  grant EXP_FULL_DATABASE to c##usef container=all;
Grant succeeded.

از طریق این یوزر می توانیم در محیط rman به دیتابیس source وصل شویم:

RMAN> connect target "c##usef/a@TehranPDB AS SYSDBA"
connect target *
connected to target database: FREE:TEHRANPDB (DBID=1145898896)
RMAN>

3: در هر دو سمت net serviceای با نامهای TehranPDB و EsfahanPDB ایجاد می کنیم:

TehranPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.42)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = tehranpdb)
    )
  )

EsfahanPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.40)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ESFAHANPDB)
    )
  )

4: برای گرفتن دامپ از Metadataی مربوط به tablespace باید PUBLIC DATABASE LINKای را در دیتابیس مقصد ایجاد کنیم:

--source
SQL> alter session set container=tehranpdb;
Session altered.

SQL> create user usef identified by a;
User created.

SQL> grant dba to usef;
Grant succeeded.

--dest
SQL> alter session set container=esfahanpdb;
Session altered.

SQL> SQL> CREATE PUBLIC DATABASE LINK linkMetDataDump CONNECT TO usef IDENTIFIED BY a USING 'TehranPDB';
Database link created.

5: در آخرین قدم باید دستور restore را در دیتابیس dest اجرا کنیم:

FOREIGN TABLESPACE: نام tablespaceای که قرار است از دیتابیس مبدا به مقصد ارسال شود.

FROM SERVICE: در این قسمت service name دیتابیس source را تنظیم می کنیم.

PLUGIN DBLINK: نام دیتابیس لینکی که در مرحله 4 ایجاد کردیم در این قسمت قرار می گیرد.

PLUGIN FILE: این پارامتر مشخص می کند دامپ ایجاد شده از متادیتا مربوط به tablespace در کدام مسیر قرار بگیرد.

RMAN> connect target "c##usef/a@EsfahanPDB AS SYSBACKUP"
connect target *
connected to target database: FREE:ESFAHANPDB (DBID=4273248419)
RMAN> RESTORE
FOREIGN TABLESPACE tbs1 
FORMAT 'tbs1%f.dbf'
FROM SERVICE 'TehranPDB'
PLUGIN FILE '/dump/tbs1_meta.dmp'
PLUGIN DBLINK 'linkMetDataDump';
Starting restore at 13-FEB-24
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=283 device type=DISK
Performing export of metadata for specified tablespaces...
   EXPDP> Starting "SYSBACKUP"."NET_EXP_?d_fjod":
   EXPDP> Master table "SYSBACKUP"."NET_EXP_?d_fjod" successfully loaded/unloaded
   EXPDP> ******************************************************************************
   EXPDP> Dump file set for SYSBACKUP.NET_EXP_?d_fjod is:
   EXPDP>   /dump/tbs1_meta.dmp
   EXPDP> ******************************************************************************
   EXPDP> Datafiles required for transportable tablespace TBS1:
   EXPDP>   /opt/oracle/oradata/FREE/1147EA9E8D360F5CE0630100007F17F4/datafile/o1_mf_tbs1_lwq                              bmrl1_.dbf
   EXPDP>   /opt/oracle/oradata/FREE/1147EA9E8D360F5CE0630100007F17F4/datafile/o1_mf_tbs1_lwq                              bn2x5_.dbf
   EXPDP>   /opt/oracle/oradata/FREE/1147EA9E8D360F5CE0630100007F17F4/datafile/o1_mf_tbs1_lwq                              bn8fm_.dbf
   EXPDP> Job "SYSBACKUP"."NET_EXP_?d_fjod" successfully completed at Tue Feb 13 19:15:41 2024 elapsed 0 00:00:17
Export completed

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: using network backup set from service TehranPDB
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring foreign file 26 to /opt/oracle/product/23c/dbhomeFree/dbs/tbs126.dbf
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: using network backup set from service TehranPDB
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring foreign file 27 to /opt/oracle/product/23c/dbhomeFree/dbs/tbs127.dbf
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: using network backup set from service TehranPDB
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring foreign file 28 to /opt/oracle/product/23c/dbhomeFree/dbs/tbs128.dbf
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

Performing import of metadata...
   IMPDP> Master table "SYSBACKUP"."TSPITR_IMP_FREE_DydF" successfully loaded/unloaded
   IMPDP> Starting "SYSBACKUP"."TSPITR_IMP_FREE_DydF":
   IMPDP> Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
   IMPDP> Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
   IMPDP> Job "SYSBACKUP"."TSPITR_IMP_FREE_DydF" successfully completed at Tue Feb 13 19:15:57 2024 elapsed 0 00:00:05
Import completed

Finished restore at 13-FEB-24

با اجرای دستور فوق، tablespace جدیدی به نام tbs1 در دیتابیس esfahanPDB ایجاد  می شود:

SQL> alter session set container=esfahanpdb;
Session altered.
SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces where TABLESPACE_NAME='TBS1';
TABLESPACE_NAME                STATUS
------------------------------ ---------
TBS1                           READ ONLY

در پایان این tablespace را در هر دو دیتابیس در حالت READ WRITE قرار می دهیم:

SQL> alter tablespace TBS1 READ WRITE;
Tablespace altered.

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

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

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