همانطور که می دانید با ایجاد دیتابیس اوراکل، تعدادی از 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.
Comment (1)