Manage Transport of tablespaces across platforms

tablespaces -ийг өөр систем рүү хурдан шилжүүлэх аргыг “Transporting Tablespace” гэж нэрлэдэг. Жишээн дээр тайлбарлая.

A server – Source server (node214)
B server – Target server (node215)
A серверээс В сервер руу шилжүүлнэ

A сервер дээр хийгдэх үйлдлүүд


Юуны өмнө ямар системээс хааш нь шилжүүлэх гэж байгааг тодорхойлоод форматын мэдээллийг sys хэрэглэгчээр V$TRANSPORTABLE_PLATFORM view-ээс шалгана.

SQL> col platform_name for a40
SQL> set pagesize 100
SQL> select * from V$TRANSPORTABLE_PLATFORM order by platform_id;

PLATFORM_ID PLATFORM_NAME			     ENDIAN_FORMAT
----------- ---------------------------------------- --------------
	  1 Solaris[tm] OE (32-bit)		         Big
	  2 Solaris[tm] OE (64-bit)		         Big
	  3 HP-UX (64-bit)			             Big
	  4 HP-UX IA (64-bit)			         Big
	  5 HP Tru64 UNIX			             Little
	  6 AIX-Based Systems (64-bit)		     Big
	  7 Microsoft Windows IA (32-bit)	     Little
	  8 Microsoft Windows IA (64-bit)	     Little
	  9 IBM zSeries Based Linux		         Big
	 10 Linux IA (32-bit)			         Little
	 11 Linux IA (64-bit)			         Little
	 12 Microsoft Windows x86 64-bit	     Little
	 13 Linux x86 64-bit			         Little
	 15 HP Open VMS 			             Little
	 16 Apple Mac OS			             Big
	 17 Solaris Operating System (x86)	     Little
	 18 IBM Power Based Linux		         Big
	 19 HP IA Open VMS			             Little
	 20 Solaris Operating System (x86-64)	 Little
	 21 Apple Mac OS (x86-64)		         Little

20 rows selected.

SQL>

ENDIAN_FORMAT нь ижил tablespace -үүдийн хувьд хөрвүүлэх үйлдэл шаардахгүй бөгөөд хэрэв өөр бол тухайн системд таарах хөрвүүлэлтийг хийх шаардлагатай.

Дараагийн алхамуудад бид demotbs нэртэй tablespace -ийг А сервер дээр байрлах TEST1 баазад үүсгэнэ. Мөн үүнд харгалзах хүснэгт үүсгэж бичлэг нэмсний дараагаар В сервер дээр байрлах ORCL бааз руу зөөх болно.

SQL>
SQL> create tablespace demotbs datafile '/u01/app/oracle/oradata/TEST1/demotbs01.dbf' size 10M autoextend on next 20M extent management local segment space management auto;

Tablespace created.

SQL>
SQL> create user oracloud identified by oracloud default tablespace demotbs quota unlimited on demotbs;

User created.

SQL> grant connect, resource to oracloud;

Grant succeeded.

SQL>  conn oracloud/oracloud
Connected.
SQL> create table test(id number,descr varchar2(255));

Table created.

SQL> insert into test values(1,'This is demo for transporting tablespace');

1 row created.

SQL> commit;

Commit complete.

SQL>

Тухайн tablespace-ийг “self contained” эсэхийг шалгана. “self contained” гэдэг нь тухайн tablespace -ийн объектууд бусад объектуудтай холбоотой эсэхийг шалгана гэсэн үг юм. Зөвхөн “self contained” төрлийн tablespace үүдэд Transporting tablespace аргыг ашиглаж болно. Шалгахын тулд дараах коммандыг ашиглана.

SQL> EXECUTE SYS.DBMS_TTS.TRANSPORT_SET_CHECK('demotbs',TRUE);

PL/SQL procedure successfully completed.

SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;

no rows selected

SQL>

Дээрхи коммандыг ажиллуулахад алдаа гарахгүй бол үргэлжлүүлнэ.

SQL> alter tablespace demotbs read only;

Tablespace altered.

SQL>

Тухайн tablespace read only болж шинэчилэлт авахгүй учир метадатаг гаргаж авна.

[oracle@node214 ~]$ mkdir /home/oracle/ttsdir
SQL> create or replace directory ttsdir as '/home/oracle/ttsdir';

Directory created.

SQL> exit

[oracle@node214 ~]$ cd /home/oracle/ttsdir
[oracle@node214 ttsdir]$
[oracle@node214 ttsdir]$ expdp system/oracle_4U@TEST1 directory=ttsdir dumpfile=expdp_tts.dmp transport_tablespaces=demotbs logfile=expdp_tts.log

Export: Release 11.2.0.1.0 - Production on Tue Feb 14 04:58:21 2017

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01":  system/********@TEST1 directory=ttsdir dumpfile=expdp_tts.dmp transport_tablespaces=demotbs logfile=expdp_tts.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
  /home/oracle/ttsdir/expdp_tts.dmp
******************************************************************************
Datafiles required for transportable tablespace DEMOTBS:
  /u01/app/oracle/oradata/TEST1/demotbs01.dbf
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 04:58:46

[oracle@node214 ttsdir]$
[oracle@node214 ttsdir]$ ls -la
total 116
drwxr-xr-x  2 oracle oinstall  4096 Feb 14 04:58 .
drwx------ 20 oracle oinstall  4096 Feb 14 04:57 ..
-rw-r-----  1 oracle oinstall 86016 Feb 14 04:58 expdp_tts.dmp
-rw-r--r--  1 oracle oinstall  1178 Feb 14 04:58 expdp_tts.log
[oracle@node214 ttsdir]$

Metadata-г гаргаж авсны дараагаар dmp файл болон датафайл(/u01/app/oracle/oradata/TEST1/demotbs01.dbf)-г нөгөө систем руу хуулж дуусаад tablespace-ийг буцаан бичих горимд оруулна.

SQL> alter tablespace demotbs read write;

Tablespace altered.

SQL>

В сервер дээр хийгдэх үйлдлүүд


Дараах жишээнд В сервер дээр ижил нэртэй хэрэглэгч үүсгэсэн болно. Хэрэв өөр нэртэй хэрэглэгч үүсгэвэл мэдээллийг оруулахдаа REMAP_SCHEMA тохиргоог ашиглана.

[oracle@node214 ~]$ mkdir /home/oracle/ttsdir
[oracle@node214 ~]$ 

SQL> create user oracloud identified by oracloud;

User created.

SQL> grant connect, resource to oracloud;

Grant succeeded.

SQL>
SQL> create or replace directory ttsdir as '/home/oracle/ttsdir';

Directory created.

SQL>

Хэрэглэгчийг үүсгэсэн тул одоо tablespace -ийн мэдээллийг оруулна.

[oracle@node215 ttsdir]$
[oracle@node215 ttsdir]$ pwd
/home/oracle/ttsdir
[oracle@node215 ttsdir]$ ls -la
total 124
drwxr-xr-x  2 oracle oinstall  4096 Feb 14 05:14 .
drwx------ 20 oracle oinstall  4096 Feb 14 04:57 ..
-rw-r-----  1 oracle oinstall 86016 Feb 14 04:58 expdp_tts.dmp
-rw-r--r--  1 oracle oinstall  1178 Feb 14 04:58 expdp_tts.log
-rw-r--r--  1 oracle oinstall   857 Feb 14 05:14 impdp_tts.log
[oracle@node215 ttsdir]$
[oracle@node215 ttsdir]$ impdp system@ORCL directory=ttsdir dumpfile=expdp_tts.dmp transport_datafiles=/u01/app/oracle/oradata/TEST1/demotbs01.dbf logfile=impdp_tts.log

Import: Release 11.2.0.1.0 - Production on Tue Feb 14 05:14:01 2017

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Password:

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system@ORCL directory=ttsdir dumpfile=expdp_tts.dmp transport_datafiles=/u01/app/oracle/oradata/TEST1/demotbs01.dbf logfile=impdp_tts.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 05:14:15

[oracle@node215 ttsdir]$

Мэдээллийг шалгая.

SQL> column descr format a50
SQL> select * from test;

        ID DESCR
---------- --------------------------------------------------
         1 This is demo for transporting tablespace

SQL>

Бидний зорилт биелсэн байна. Энэ аргаар self-contained tablespace-үүдийг шилжүүлэх боломжтой юм.

Жич:
Хэрэв зөөх tablespace -ийн индекс өөр tablespace-т хадгалагдаж байвал тухайн индексийг агуулж буй tablespace-ийг ижил аргаар зөөнө. Дараах коммандаар oracloud хэрэглэгчээр ажиллуулан шалгаарай.

SELECT object_type, object_name, tablespace_name FROM user_objects, user_segments WHERE object_name = segment_name

Хэрэв А болон В серверүүдийн үйлдлийн систем өөр бөгөөд хөрвүүлэх шаардлагатай бол дараах жишээг харна уу.

[oracle@node214 ttsdir]$ rman target /

RMAN> CONVERT TABLESPACE finance,hr
   TO PLATFORM 'Linux IA (32-bit)'
   FORMAT='/tmp/transport_linux/%U';

Datafile уудыг /tmp/transport_linux/ хавтас руу хөрвүүлэх бөгөөд уг файлуудыг В сервер руу хуулж ашиглана.

Хэрэв зөвхөн датафайл хөрвүүлэх бол дараах коммандыг ашиглана.

RMAN> convert datafile '/u01/app/oracle/oradata/TEST1/demotbs01.dbf' from platform 'Linux x86 64-bit' format='/tmp/aaaa.dbf';

Хөрвүүлэх коммандыг аль нэг сервер дээр зөвхөн нэг удаа гүйцэтгэнэ.

Tablespace, datafile уудыг хөрвүүлэхэд анхаарах зүйлс:

  • 2 бааз аль аль нь 10.0 болон түүнээс дээш хувилбарууд байх
  • Дэмжих үйлдлийн системүүдийг V$TRANSPORTABLE_PLATFORM -ээс татаж харна уу
  • 10g хувилбарын хувьд өөр үйлдлийн систем рүү хөрвүүлэхээс өмнө tablespace нь багадаа нэг удаа read-write горим руу шилжсэн байх шаардлагатай
  • RMAN зөвхөн тухайн системүүдэд тохирох формат руу датафайлыг хөрвүүлэх бөгөөд хэрэглэгчийн datatype-ийг хөрвүүлэхгүй
  • 10g хүртэлх хувилбаруудад CLOB баганы хувьд цаанаа SQL коммандуудын тусламжтайгаар хөрвүүлэх үйлдэл хийгддэг. Oracle 10g дээр CLOB ууд нь үйлдлийн систем харгалзахгүйгээр AL16UTF16 character set тэй хадгалагддаг