TRANSPORTABLE TABLESPACE

Gökçe Altınkaya
2 min readAug 7, 2023

--

Merhabalar,

Bu ilk yazımda en basit haliyle transportable tablespace kavramından ve uygulama adımlarından bahsedeceğim, keyifli okumalar:)

Tablespace, içerisinde fiziksel veri dosyalarını barından mantıksal yapıya denir.

Bazı durumlarda bu fiziksel veri dosyalarının veri ile birlikte başka bir dbye taşınması gerekebilir. Full Transportable Export and Import bu durumlarda uygulayabileceğimiz basit ve kullanışlı bir yöntemdir.

GEREKLILIKLER

  • Source ve target veri tabanlarımızın Enterprise Edition olması gerekmektedir.
Source: MAINDB (Oracle Database 11g Enterprise Edition Release 11.2.0.4.0–64bit Production)
Target: COLDDB (Oracle Database 11g Enterprise Edition Release 11.2.0.4.0–64bit Production)
  • Endian format ve işletim sistemi iki tarafta da aynı olmalıdır.
SELECT d.PLATFORM_NAME, ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
WHERE tp.PLATFORM_ID = d.PLATFORM_ID;
  • Exportu alınacak tablespaceler self-contained yapıda olmalıdır.

S T E P S

1.Exportunu alacağımız TABLE_DATA tablespaceinin self-contained yapıda olup olmadığını kontrol edelim.

EXEC SYS.DBMS_TTS.TRANSPORT_SET_CHECK(ts_list => 'TABLE_DATA', incl_constraints => TRUE);


SELECT * FROM sys.transport_set_violations;
TABLE_DATA tablespaceindeki objelere ait bazı veriler(index,lobsegment vs.) başka tablespacelere dağılmış durumda ise önce gerekli taşıma işlerinin yapılması gerek.
Aksi halde export komutumuz
ORA-39123,ORA-39187,ORA-39905 gibi çeşitli ora hataları alır.
sys.transport_set_violations viewinde herhangi bir satır dönmüyorsa aşağıdaki adımlara devam edebiliriz.

2.Exportu alınacak tablespace i read only moda alalım.

ALTER TABLESPACE TABLE_DATA READ ONLY;

3.Veritabanımıza exportlanıp export komutumuzu çalıştıralım.

su - oracle                         --> DB userına geçelim
export ORACLE_SID=MAINDB --> SID ye exportlanalım
echo $ORACLE_SID --> echo ile kontrol edelim
MAINDB
expdp userid=system/******* directory=DATA_PUMP_DIR transport_tablespaces=TABLE_DATA dumpfile=TABLE_DATA_$(date +%y%m%d_%h%m).dmp logfile=TABLE_DATA_$(date +%y%m%d_%h%m).log

Export komutunda system userı kullanmak zorunda değiliz. Bunun yerine bir kullanıcı oluşturulup gerekli yetkiler verilerek ilerlenebilir.

4.Export işlemi bittikten sonra dump file ve source databasedeki dbf leri target dizine kopyalayalım.

cp /data/dump/export/TABLE_DATA_230725_Jul07.dmp /oracle_home/admin/COLDDB/dpdump/
cp /maindb/data/oradata/table_data_01.dbf /data/oradata/COLDDB/
cp /maindb/data/oradata/table_data_02.dbf /data/oradata/COLDDB/
cp /maindb/data/oradata/table_data_03.dbf /data/oradata/COLDDB/
. . .

5.Kopyalama devam ederken target veritabanımızda SNAP userını yaratalım. Bu senaryoda SNAP userı source veritabanımızda export aldığımız tablespaceimizi kullanan tek db userı.

Kullanıcı yaratmak yerine import komutumuzda remap_schema parametresini kullanarak da ilerleyebiliriz.

CREATE USER SNAP
IDENTIFIED BY ******
-- 3 System Privileges for SNAP
GRANT UNLIMITED TABLESPACE TO SNAP;
-- 1 Object Privilege for SNAP
GRANT EXECUTE, READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO SNAP WITH GRANT OPTION;

6.Kopyalamamız bittikten sonra target veritabanımıza exportlanıp import komutumuzu çalıştırabiliriz.

su - oracl                          --> DB userına geçelim
export ORACLE_SID=COLDDB --> SID ye exportlanalım
echo $ORACLE_SID --> echo ile kontrol edelim
COLDB
impdp system/****directory=DATA_PUMP_DIR dumpfile=TABLE_DATA_230725_Jul07.dmp logfile=TABLE_DATA_$(date +%y%m%d_%h%m).log transport_datafiles='/data/oradata/COLDDB/table_data_01.dbf','/data/oradata/COLDDB/table_data_02.dbf','/data/oradata/COLDDB/table_data_03.dbf', . . .

7.İmport işlemimiz bittikten sonra tablespacelerimizi source ve target veri tabanlarımızda read wirete moda çekebiliriz.

ALTER TABLESPACE TABLE_DATA READ WRITE;

SOURCE :

https://www.oracle.com/technetwork/database/enterprise-edition/full-transportable-wp-18c-4394831.pdf

--

--