Transportable Tablespace
Transportable Tablespace๋ ์ค๋ผํด์์ ์ค๋ผํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ ๋ ๊ฐ์ฅ ๋น ๋ฅธ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ฐ์ดํฐํํ๋ Export, Import ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ ๋๋ ๊ทธ๋ฅ insert์์ ์ ํ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค๊ณ ํ๋ค๋ฉด Transport Tablespace๋ Datapump๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉํ๋ฐ์ดํฐ ์ฆ ๊ตฌ์กฐ๋ง ์ถ์ถํ๊ณ ๋ฐ์ดํฐํ์ผ ์์ฒด๋ฅผ ์ด๋์์ผ migration ์์ ์ ํฉ๋๋ค.
Transport Tablespace๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ ๋๋ ์ด์์ฒด์ ์ ๋ํ ์ ํ์ด ์์ต๋๋ค. ๋ฐ์ดํฐํ์ผ ์์ฒด๋ฅผ ์ด๋์ํค๋ค๋ณด๋ ํ์ผ์ ์ ์ฅํ๋ ๋ฐฉ์์ด OS์ ๋ฐ๋ผ ์์ดํ์ฌ Platform์ Endian ์ ๋ณด๋ง ๊ฐ๋ค๋ฉด ์ด๋์ด ๊ฐ๋ฅํ์ต๋๋ค. ํ์ง๋ง ์ด์ ๋ Endian์ ์ ๋ณด๊ฐ ๋ค๋ฅด๋๋ผ๋ RMAN์ ํตํด์ Convertingํ์ฌ ๋ฐ์ดํฐํ์ผ์ ํ์์ ๋ณ๊ฒฝํ ์ ์์ด ๋ชจ๋ OS์์ ํธํ์ด ๊ฐ๋ฅํฉ๋๋ค.
SYS@newdb> select platform_name, endian_format from v$transportable_platform;
Endian์ ๋ํ ์ ๋ณด๋ v$transportable_platform ๋ทฐ๋ฅผ ํตํด์ ํ์ธํ ์ ์์ต๋๋ค.
SYS@newdb> select platform_name from v$database;
ํ์ฌ Database์ Platform์ ํ์ธํ๊ณ Endian ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
Trasportable Tablespace ์ค์ต
์ค์ตํ๊ฒฝ
OS : Red Hat Enterprise Linux Server release 6.10
DB : Oracle 11.2.0.1
SID : orcl, newdb (1๊ฐ ์๋ฒ 2๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค)
host : 601d2fce71dc
์ค์ต๋ชฉํ
- Transportable Tablespace๋ฅผ ์ด์ฉํด์ orcl์์ ์์ฑํ tts tablespace ๋ฐ์ดํฐ๋ฅผ newdb๋ก ์ด๋
- orcl์ hr ์คํค๋ง์ newdb์์ allen ์คํค๋ง๋ฅผ ์์ฑํด์ ์ด๋
Export ์ฌ์ ์์
[oracle@601d2fce71dc ~]$ mkdir /opt/oracle/tbs
ํธ์๋ฅผ ์ํด ์์ฑํ ํ ์ด๋ธ์คํ์ด์ค์ ๊ฒฝ๋ก๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ก๋๋ค.
[oracle@601d2fce71dc ~]$ sqlplus / as sysdba
SYS@orcl> create tablespace tts01 datafile '/opt/oracle/tbs/tts01.dbf' size 50m;
Tablespace created.
SYS@orcl> create tablespace tts02 datafile '/opt/oracle/tbs/tts02.dbf' size 50m;
Tablespace created.
๋๊ฐ์ ํ ์ด๋ธ์คํ์ด์ค๋ฅผ ์ฌ์ฉํด์ ์ค์ต์ ์งํํ๊ฒ ์ต๋๋ค.
SYS@orcl> create table hr.emp_test tablespace tts01 as select * from hr.employees;
Table created.
SYS@orcl> create table hr.dept_test tablespace tts02 as select * from hr.departments;
Table created.
์์ฑํ ํ ์ด๋ธ์คํ์ด์ค์ ๊ฐ๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ ํ ์ด๋ธ์ ํ๋์ฉ ์์ฑํด์คฌ์ต๋๋ค.
SYS@orcl> alter table hr.dept_test add constraint dept_test_pk primary key(department_id);
Table altered.
SYS@orcl> alter table hr.emp_test add constraint emp_test_dept_fk foreign key(department_id) references hr.dept_test(department_id);
Table altered.
์์ฑํ ํ ์ด๋ธ์ primary key์ foreign key๋ฅผ ์์ฑํด์ค๋๋ค.
dbms_tts.transport_set_check ํ๋ก์์ ํ์ธ
SYS@orcl> desc dbms_tts
dbms_tts ํจํค์ง์ transport_set_check ํ๋ก์์ ๋ฅผ ์ด์ฉํด์ tts01๊ณผ tts02 ํ ์ด๋ธ์คํ์ด์ค๊ฐ Transportable tablespace๋ฅผ ์ด์ฉํด์ export๊ฐ ๊ฐ๋ฅํ์ง ํ์ธํ๋ ์์ ์ ์งํํ ๊ฒ๋๋ค.
SYS@orcl>
begin
dbms_tts.transport_set_check
(ts_list=>'tts01,tts02',
incl_constraints=>true);
end;
/
PL/SQL procedure successfully completed.
SYS@orcl> select * from transport_set_violations;
dbms_tts.transport_set_check ํ๋ก์์ ๋ฅผ ์ด์ฉํด์ ์ด๋ํ๋ ค๋ ํ ์ด๋ธ์คํ์ด์ค๋ฅผ transportableํ๊ฒ ๊ฐ๋ฅํ์ง ํ์ธ์์ ์ ํ์ต๋๋ค. ๊ฒฐ๊ณผ๋ transport_set_violations ๋ทฐ๋ฅผ ์ด์ฉํด์ ํ์ธํ ์์์ต๋๋ค.
ํด๋น ์ค์ต์์ ํ์ธ ๊ฒฐ๊ณผ index์ ๋ํ violation์ด ๋ฐ์ํฉ๋๋ค. hr.dept_test ํ ์ด๋ธ์์ primary key๋ฅผ ๋ง๋ค๋ฉด์ ์ธ๋ฑ์ค๊ฐ ์์ฑ๋์์ต๋๋ค. ํ์ง๋ง ํด๋น ์ธ๋ฑ์ค๋ default tablespace์ธ examples ํ ์ด๋ธ์ ์์ฑ๋์ด ๋ง์ฝ ์ด์ํ๋ก ํ ์ด๋ธ์คํ์ด์ค๋ฅผ ์ด๋ํ๊ฒ๋๋ฉด ์ธ๋ฑ์ค์ ๋๋ฝ์ผ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ ๊ฐ๋ฅํ๋๋ก index์ rebuild ์์ ์ ์งํํด์ผํฉ๋๋ค.
SYS@orcl> alter index hr.dept_test_pk rebuild tablespace tts02;
Index altered.
์ธ๋ฑ์ค์ rebuild๋ฅผ ์งํํ์ต๋๋ค. ๋ค์ ํ๋ก์์ ๋ก ๋ฐ์ดํฐ ์ด๋์ด ๊ฐ๋ฅํ์ง ํ์ธํ๊ฒ ์ต๋๋ค.
SYS@orcl>
begin
dbms_tts.transport_set_check
(ts_list=>'tts01,tts02',
incl_constraints=>true);
end;
/
PL/SQL procedure successfully completed.
SYS@orcl> select * from transport_set_violations;
no rows selected
transport_set_violations ๋ทฐ๋ฅผ ํ์ธํ์๋ ๋ณด์ฌ์ง๋ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ฌธ์ ๊ฐ ์๋ค๋ ๋ป์ ๋๋ค. Transportable tablespace๋ฅผ ์ฌ์ฉํ๋ฉด ๊ผญ ์ฌ์ ์ dbms_tts ํจํค์ง๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธ์์ ๋ฐ ํด๊ฒฐ ํ ์งํํด์ค์ผํฉ๋๋ค.
Datapump Transportable Tablespace Export
SYS@orcl> alter tablespace tts01 read only;
Tablespace altered.
SYS@orcl> alter tablespace tts02 read only;
Tablespace altered.
SYS@orcl> select tablespace_name, status from dba_tablespaces;
Transportable Tablespace๋ฅผ export ์์ ์ ํ ๋ ๊ผญ Read only ์ํ๋ก ๋ณ๊ฒฝ ํ ์์ ์ ์งํํฉ๋๋ค. Transportable Tablespace๋ ๋ฐ์ดํฐํ์ผ ์์ฒด๋ฅผ ์ด๋์์ผ์ ์์ ํ๊ธฐ ๋๋ฌธ์ export ํ๋ ๊ณผ์ ์์ dml ์์ ์ผ๋ก ํ ์ด๋ธ์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์์๋ import์ ๋ฐ์ดํฐํ์ผ์์์ ์ ๋ณด๊ฐ exportํ ๊ตฌ์กฐ์ ์์ดํ์ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
[oracle@601d2fce71dc ~]$ mkdir /opt/oracle/dbpump
SYS@orcl> create directory pump_dir as '/opt/oracle/dbpump';
Directory created.
Datapump์์ ์ง์ ํ Directory ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด์ค๋๋ค. export๋๋ ํ ์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ํด๋น ๋๋ ํ ๋ฆฌ๋ก ๋ด๋ฆด๊ฒ์ ๋๋ค.
[oracle@601d2fce71dc ~]$ expdp system/oracle dumpfile=tts.dmp directory=pump_dir transport_tablespaces=tts01,tts02
datapump๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋๋ฐ transport_tablespace ์ต์ ์ ๊ฐ์ด ์ฌ์ฉํ์ฌ export ์์ ์ ์งํํฉ๋๋ค.
[oracle@601d2fce71dc ~]$ mkdir /opt/oracle/newdb_tbs
[oracle@601d2fce71dc ~]$ cp /opt/oracle/tbs/tts0* /opt/oracle/newdb_tbs/
newdb sid์์ ๋ฐ๋ผ๋ณผ ๋ฐ์ดํฐํ์ผ์ ๊ฒฝ๋ก ์์น๋ฅผ ๋ง๋ค์ด์ค๋๋ค. ์ดํ orcl์์ ๋ง๋ค์ด ๋์ tablespace์ ๋ฐ์ดํฐํ์ผ๋ค์ ๋ชจ๋ ์ด๋์์ผ์ค๋๋ค.
Datapump Transportable Tablespace import
[oracle@601d2fce71dc ~]$ . oraenv
ORACLE_SID = [orcl] ? newdb
The Oracle base for ORACLE_HOME=/opt/oracle/app/product/11.2.0/dbhome_1 is /opt/oracle/app
newdb ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง์ถฐ ํ๊ฒฝ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ ์งํํฉ๋๋ค.
SYS@newdb> create directory pump_dir as '/opt/oracle/dbpump';
Directory created.
import ์์ ์ ์ํด orcl์์ exportํ ํ์ผ์ ๋๋ ํ ๋ฆฌ์ ๋์ผํ ๋๋ ํ ๋ฆฌ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํด์ค๋๋ค.
SYS@newdb> create user allen identified by allen account unlock;
User created.
SYS@newdb> grant connect, resource to allen;
Grant succeeded.
๋ฐ์ดํฐ๋ฅผ importํ ์คํค๋ง๋ฅผ ์์ฑํฉ๋๋ค.
[oracle@601d2fce71dc ~]$ impdp system/oracle dumpfile=tts.dmp directory=pump_dir remap_schema=hr:allen transport_datafiles=/opt/oracle/newdb_tbs/tts01.dbf,/opt/oracle/newdb_tbs/tts02.dbf
์ด์์์ด ๋ฐ์ดํฐ๋ฅผ import ํ์ต๋๋ค.
ํ์ธ
SYS@newdb> select tablespace_name, file_name from dba_data_files;
์ด๋ํ๋ ค๋ ํ ์ด๋ธ์คํ์ด์ค ๋ชจ๋ import ๋์์ต๋๋ค.
SYS@newdb> conn allen/allen
Connected.
ALLEN@newdb> select table_name from tabs;
์์ฑํ ํ ์ด๋ธ๋ค๋ ๋ชจ๋ import๋๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋๊ธ