ارتقا به 12c به روش Transportable Tablespace

همانطور که می دانید با ایجاد دیتابیس اوراکل، تعدادی از tablespaceها به صورت پیش فرض ایجاد می شوند که بعضی از انها اطلاعات سیستمی را در خود نگه می دارند نظیر SYSTEM،  SYSAUX(به این نوع از tablespaceها در این متن admin tablespace می گوییم) علاوه بر این نوع از tablespaceها، tablespaceهای دیگری را هم میتوان برای نگهداری دیتای کاربران ایجاد کرد که به آنها، user tablespace گفته می شود.

در صورتی که همه اطلاعات کاربران در user tablespaceها قرار داشته باشند، الزامی برای ارتقا admin tablespaceها نخواهیم داشت و تنها می توانیم tablespaceهایی که اطلاعات کاربر در آنها موجود هست را به نسخه جدید ارتقا دهیم.

همچنین در صورتی که اطلاعات کاربر در admin tablespace قرار گرفته باشد، می توانیم ابتدا آنها را به user tablespace منتقل کرده و سپس این tablespaceها را به نسخه جدید ارتقا دهیم.

با توجه به ویژگی Transportable Tablespace این قابلیت وجود دارد که tablespaceها را به بانک جدیدی که نسخه اوراکل آن متفاوت است، منتقل کنیم.

در ادامه قصد داریم tablespaceهایی که اطلاعات کاربر در آنها قرار دارند را از طریق ویژگی Transportable Tablespace به اوراکل 12c ارتقا دهیم.

فرض کنید با توجه به شناختی که از دیتابیس جاری داریم، تنها دو tablespace با نامهای USEF_TBS1 و USEF_TBS2 حاوی اطلاعات کاربر هستند و قصد داریم با کمک ویژگی Transportable Tablespace، این دو tablespace را به دیتابیسی با نسخه 12c منتقل کنیم.

SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces;

TABLESPACE_NAME                STATUS

—————————— ———

SYSTEM                       ONLINE

SYSAUX                        ONLINE

UNDOTBS1                  ONLINE

TEMP                           ONLINE

USERS                          ONLINE

USEF_TBS1                  ONLINE

USEF_TBS2                  ONLINE

مرحله اول: یکی از ویژگی های Transportable Tablespace آن است که هیچ کدام از اشیاهای موجود در tablespaceای که قرار است به دیتابیس دیگری منتقل شود، نباید به اشی‏ای خارج از این tablespace وابسته باشد.

با دو دستور زیر بررسی می کنیم که کدام شی این قانون را نقض کرده است در صورت اثبات این مسئله، باید اشیا مرتبط را در یک tablespace قرار دهیم.

SQL> EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK(‘USEF_TBS1,USEF_TBS2’, TRUE);

PL/SQL procedure successfully completed.

SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;

no rows selected

همانطور که می بینید، بین هیچ کدام از اشیاهای موجود در این دو tablespace با اشیاهای موجود در tablespaceهای دیگر، وابستگی وجود ندارد.

مرحله دوم: دو tablespace مذکور را در وضیعت read only قرار می دهیم.

SQL> alter tablespace USEF_TBS1 read only;

Tablespace altered.

SQL> alter tablespace USEF_TBS2 read only;

Tablespace altered.

مرحله سوم: با استفاده از ابزار expdp، از متادیتاهای مربوط به این دو tablespace،  دامپی را تهیه می کنیم.

expdp   directory=usef dumpfile=usef1.dmp transport_tablespaces=USEF_TBS2,USEF_TBS1 transport_full_check=y

Export: Release 11.2.0.4.0 – Production on Thu Oct 15 14:49:58 2015

Copyright © 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production

Starting “SYS”.”SYS_EXPORT_TRANSPORTABLE_01″:  sys/******** AS SYSDBA directory=usef dumpfile=usef1.dmp transport_tablespaces=USEF_TBS2,USEF_TBS1 transport_full_check=y

Datafiles required for transportable tablespace USEF_TBS1:

  /u01/oracle/oradata/orcl4/usef1.dbf

Datafiles required for transportable tablespace USEF_TBS2:

  /u01/oracle/oradata/orcl4/usef2.dbf

Job “SYS”.”SYS_EXPORT_TRANSPORTABLE_01″ successfully completed at Thu Oct 15 14:50:38 2015 elapsed 0 00:00:32

مرحله چهارم: دیتافایلهای مربوط به این دو tablespace و نیز دامپ گرفته شده را به سرور مقصد منتقل می کنیم:

scp /u01/oracle/oradata/orcl4/usef*  192.168.1.20:/u01/oracle/oradata/USEF12C/datafile/

usef1.dbf                                     100% 5128KB   5.0MB/s   00:00   

usef2.dbf                                     100% 5128KB   5.0MB/s   00:00 

مرحله پنجم: با دستور زیر دامپ گرفته شده را که حاوی اطلاعاتی از متادیتا دو tablespace است را در بانک مقصد بر می گردانیم البته قبل از import باید اسکیمای مورد نظر را ایجاد کرده و در صورتی که اندازه بلاک این tablespaceها هم اندازه بلاکهای پیش فرض بانک مقصد نباشد، باید پارامتر db_n_cache_size را تنظیم کنیم:

impdp  directory=usef dumpfile=usef1.dmp  transport_datafiles=’/u01/oracle/oradata/USEF12C/datafile/usef1.dbf’,’/u01/oracle/oradata/USEF12C/datafile/usef2.dbf’

Import: Release 12.1.0.1.0 – Production on Thu Oct 15 18:06:42 2015

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 – 64bit Production

Master table “SYS”.”SYS_IMPORT_TRANSPORTABLE_01″ successfully loaded/unloaded

Source TSTZ version is 14 and target TSTZ version is 18.

Starting “SYS”.”SYS_IMPORT_TRANSPORTABLE_01″:  sys/******** AS SYSDBA directory=usef dumpfile=usef1.dmp transport_datafiles=/u01/oracle/oradata/USEF12C/datafile/usef1.dbf,/u01/oracle/oradata/USEF12C/datafile/usef2.dbf

Job “SYS”.”SYS_IMPORT_TRANSPORTABLE_01″ successfully completed at Thu Oct 15 18:06:55 2015 elapsed 0 00:00:03

همانطور که در این قسمت می بینید، دو tablespace به بانک جدید اضافه شده اند:

SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces;

TABLESPACE_NAME                STATUS

—————————— ———

SYSTEM                         ONLINE

SYSAUX                         ONLINE

UNDOTBS1                       ONLINE

TEMP                           ONLINE

USERS                          ONLINE

USEF_TBS1                      READ ONLY

USEF_TBS2                      READ ONLY

7 rows selected.

مرحله ششم: به عنوان گام نهایی، دو tablespace را در حالت read write قرار می دهیم:

SQL> alter tablespace USEF_TBS1 read write;

Tablespace altered.

SQL>  alter tablespace USEF_TBS2 read write;

Tablespace altered.

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

Comment (1)

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

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