ویژگی PDB RELOCATE

یکی از قابلیتهای جدید نسخه 12cR2، جابجایی(relocate) انلاین pdb از یک cdb به cdb دیگر می باشد. این کار مشابه ویژگی pdb hot clone می باشد که قبلا در مورد ان مطلبی ارائه شد(ایجاد انلاین pdb به صورت از راه دور)، با این تفاوت که در ویژگی pdb relocate، بعد از انجام عملیات کپی، pdb از بانک مبدا حذف خواهد شد و امکان باز بودن این pdb در هر دو cdb، ان هم در یک زمان وجود نخواهد داشت.

البته؛ همانطور که می دانید؛ روش دیگری هم برای جابجایی یک pdb به cdb دیگر وجود دارد که از طریق plug/uplug کردن ان pdb امکان پذیر خواهد شد ولی روش plug/unplug معایبی را به همراه دارد که یکی از این معایب، از دسترس خارج شدن سرویس هر چند برای مدت زمان کوتاه می باشد در صورتی که ویژگی relocate pdb، این ایراد را برطرف خواهد کرد و بدون هرگونه downtimeای، جابجایی را امکان پذیر خواهد کرد.

در ادامه بعد از طی چند مرحله، pdbsource را از cdb1 به cdb2 منتقل می کنیم.

مرحله اول: در ابتدا وضیعت cdb1 را به لحاظ archivelog mode بررسی می کنیم و بعد از ان، common userای را برای اتصال از راه دور(از طریق cdb2) ایجاد می کنیم و مجوز لازم را به این user، اهدا می کنیم:

*. برای استفاده از قابلیت relocate pdb باید هر دو بانک در حالت archivelog قرار داشته باشند و همچنین Local Undo هم فعال شده باشد.

–cdb1

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         3 PDBSOURCE                      READ WRITE NO

SQL> SELECT log_mode FROM v$database;

LOG_MODE

————

ARCHIVELOG

SQL> SELECT property_name, property_value FROM  database_properties

WHERE  property_name=’LOCAL_UNDO_ENABLED’;

PROPERTY_NAME        PROPERTY_VALUE

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

LOCAL_UNDO_ENABLED   TRUE

SQL> select c.con_id, c.name  con_name, t.tablespace_name, t.contents, t.status from v$containers c, cdb_tablespaces t where c.con_id=t.con_id and t.tablespace_name like ‘%UNDO%’

    CON_ID CON_NAME        TABLESPACE CONTENTS   STATUS

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

         1 CDB$ROOT        UNDOTBS1   UNDO       ONLINE

         3 PDBSOURCE       UNDOTBS1   UNDO       ONLINE

SQL> create user c##usef  identified by a;

User created.

SQL>  GRANT DBA, SYSOPER, CREATE PLUGGABLE DATABASE TO c##usef CONTAINER=ALL;

Grant succeeded.

مرحله دوم: در این مرحله، database linkای را برای اتصال به cdb1 در cdb2 ایجاد می کنیم:

-تنظیم فایل tnsnames.ora:

[oracle@cdb2 ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora

cdb1=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = cdb1_host)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (sid=cdb1)

    )

  )

-ایجاد database link:

–cdb2

SQL> create public database link linkcdb1 connect to c##usef identified by a using ‘cdb1’;

Database link created.

-تست dblink:

–cdb2

SQL> select sysdate from dual@linkcdb1;

SYSDATE

———

26-JUN-18

 

مرحله سوم: بعد از ایجاد database link، قصد داریم عملیات relocate را استارت بزنیم منتها قبل از انجام عمل جابجایی، تراکنشی را در cdb1 اجرا کرده و در حالت انتظار قرار می دهیم تا بعد از جابجایی، سرنوشت ان را بررسی کنیم:

–cdb1

SQL> alter session set container=PDBSOURCE;

Session altered.

SQL> create table tbl(name varchar2(9));

Table created.

SQL>  insert into tbl values(‘USEF’);

1 row created.

دقت کنید که دستور درج، بدون هرگونه commit یا rollbackای رها شده است.

با دستور زیر در cdb2، جابجایی را انجام می دهیم:

–cdb2

SQL>  CREATE PLUGGABLE DATABASE PDBSOURCE FROM PDBSOURCE@linkcdb1 RELOCATE;

Pluggable database created.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         3 PDBSOURCE                      MOUNTED

         4 PCDB2                         MOUNTED

 بعد از ایجاد این pdb در cdb2، تغییرات را ثبت می کنیم:

–cdb1

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         3 PDBSOURCE                      READ WRITE NO

SQL> commit;

Commit complete.

در مرحله بعد، وضیعت این رکورد را در cdb2 مشاهده خواهیم کرد.

مرحله چهارم: قرار دادن pdb در حالت open و حذف خودکار این pdb در cdb2:

–cdb2

SQL> alter pluggable database PDBSOURCE open;

Pluggable database altered.

–cdb1(alert log)

2018-06-26T13:03:18.777140+04:30

PDBSOURCE(3):Process termination requested for pid 19566 [source = rdbms], [info = 2] [request issued by pid: 20638, uid: 502]

2018-06-26T13:03:18.826842+04:30

PDBSOURCE(3):KILL SESSION for sid=(133, 35712):

PDBSOURCE(3):  Reason = PDB close immediate

PDBSOURCE(3):  Mode = KILL HARD FORCE -/-/-

PDBSOURCE(3):  Requestor = USER (orapid = 77, ospid = 20638, inst = 1)

PDBSOURCE(3):  Owner = Process: USER (orapid = 67, ospid = 19566)

PDBSOURCE(3):  Result = ORA-0

2018-06-26T13:03:19.827895+04:30

Pluggable database PDBSOURCE closed

PDBSOURCE(3):JIT: pid 20638 requesting stop

PDBSOURCE(3):Buffer Cache flush started: 3

PDBSOURCE(3):Buffer Cache flush finished: 3

2018-06-26T13:03:20.441008+04:30

PDBSOURCE(3):While transitioning the pdb 3 to clean state, clearing all its abort bits in the control file.

Pluggable database PDBSOURCE closed

2018-06-26T13:03:21.775715+04:30

Deleted Oracle managed file /u01/18c_oradata/CDB1/6F875C60DB4A469EE0530488200A1465/datafile/o1_mf_temp_fm3vbp23_.dbf

Deleted Oracle managed file /u01/18c_oradata/CDB1/6F875C60DB4A469EE0530488200A1465/datafile/o1_mf_undotbs1_fm3vbp22_.dbf

Deleted Oracle managed file /u01/18c_oradata/CDB1/6F875C60DB4A469EE0530488200A1465/datafile/o1_mf_sysaux_fm3vbp21_.dbf

Deleted Oracle managed file /u01/18c_oradata/CDB1/6F875C60DB4A469EE0530488200A1465/datafile/o1_mf_system_fm3vbp20_.dbf

با مشاهده وضیعت pdbها در cdb1، خواهیم دید که خبری از pdbsource در این cdb نمی باشد:

–cdb1

SQL>  show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

همچنین، رکوردی که بعد از جابجایی، commit شده بود، به cdb2 منتقل شده است:

–cdb2

SQL> alter session set container=PDBSOURCE;

Session altered.

SQL> select * from tbl;

NAME

———

USEF

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.