22 Ekim 2010 Cuma

Transportable Tablespace Yöntemi İle Database Taşımak


Bu yöntem taşınacak database ile hedef database’ in işletim sistemleri farklı olduğunda, 32 bitden 64 bite geçilmesi gerektiğinde veya aynı ortamın birebir aynısından bir tane daha oluşturulması gerektiğinde (exp-imp göre oldukça hızlıbir yöntem olduğundan) kullanılabilir. 

Database’ in taşınması ile ilgili olarak yapılacak işlemler ;
 

1. Hedef database üzerinde instance create edilir. İnstance create edilme işlemi sonrasında USERS tablespace’ ide otomatik olarak oluştuğundan dolayı (kaynak database den de USERS tablespace’ i alınacağından dolayı burada bu isimde tablespace olmaması gerekmektedir) bu tablespace drop edilir.
 

create tablespace USERS_OLD datafile
 '/oradata/DWALFA/USERS_OLD.dbf' size 50M

ALTER DATABASE DEFAULT TABLESPACE USERS_old

drop tablespace USERS including contents

Kontrol etmek için ;
 

select * from v$tablespace

select name from v$datafile
 

komutlarından faydalanılabilir.
 

2. Kaynak ve hedef database’ inin taşınacağı işletim sistemleri kontrol edilir. Buradadaki platfom name ismi rman ile convert aşamasında kullanılacağından dolayı önemlidir.
 

select * from v$transportable_platform order by platform_id;

SELECT a.platform_name, endian_format
 
FROM v$transportable_platform b, v$database a WHERE b.platform_name = a.platform_name;
 

3. Tablespace bazında convert edebilmek için öncelikle convert edilecek tablespace’ lerin başka tablespace’ ler ile ilişkisi olup olmadığı kontrol edilir. Örneğin “A” tablosu X tablespace’ inde bu tabloya ait indexlerde Y tablespace’ inde olduğunda, convert işlemi ilişkili olan tablespacelerin set olarak birlikte yapılması gerekecektir. Eğer herhangi bir ilişkileri yoksa tek başlarına convert edilebilirler. Tablespace’ ler arası ilişkileri bulmak için aşağıdaki package’ dan yararlanılabilir.
 

EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('TABLESPACE_NAME',TRUE);

Aşağıdaki select ile sonuçları görebiliriz.
 

SELECT * FROM TRANSPORT_SET_VIOLATIONS;

Burada herhangi bir tablespace’ in SYSTEM ve SYSAUX tablespace ile ilişkisi olduğu çıkarsa önce system tablepsace’ i altındaki objeler başka bir tablespace altına taşınmalıdır. Çünkü SYSTEM ve SYSAUX tablespace’ i convert edilemez.
 

4. Convert edilecek tablespace’ ler tespit edildikden sonra kaynak database’ inde bu tablespace’ ler read only moda alınır.
 

alter tablespace USERS read only;

alter tablespace PRODUX read only;

5. Sonrasında data pump ile transportable backup alabilmek için kaynak database üzerinde aşağıdaki işlemler yapılır.
 

Dump alınacak klasörü create etmek için ;
 

CREATE DIRECTORY DPUMP_DIR AS
 '/oradata/kamil_exp/exp_dp'

Backupı alacak olan user’ a klasöre yazabilmesi için yetki vermek için;
 

GRANT READ,WRITE ON DIRECTORY dpump_dir TO system;

Klasörü kotrol etmek için ;
 

SELECT directory_path FROM dba_directories
 

6. Data Pump ile transportable export alınır. (exp-imp yöntemi ilede yapılabilir)

expdp system/seker DUMPFILE=cscb_trans1.dmp DIRECTORY=dpump_dir TRANSPORT_TABLESPACES = USERS logfile=cscb_trans1.log

expdp system/seker DUMPFILE=cscb_trans2.dmp DIRECTORY=dpump_dir TRANSPORT_TABLESPACES = PRODUX logfile=cscb_trans2.log

aşağıdaki expdp scripti ile de alınabilir ;
 

expdp system/manager dumpfile=or_ufs.dmp directory=dpump_dir transport_tablespaces=tbs1 transport_full_check=Y
 

NOT: Eğer transportable tablespace ile taşınacak olan tablespace XML tipinde data içeriyor ise mutlaka exp – imp ile taşınmalıdır. Datapump ile taşınmamalıdır.
 

7. İlgili tablespace’ ler kaynak database’ inde istenilen path’ e convert edilir.
 

Burada iki yöntem uygulanabilir. Tablespace altında bir tane datafile varsa ve diğer tablespace ile bir ilişkiside yoksa datafile bazında convert edilebilir.
 

convert tablespace USERS to platform='Linux IA (64-bit)'db_file_name_convert='/data/DWALFA/users01.dbf',
 '/oradata/kamil_exp/dwalfa/exp_dp/users01.dbf';

convert tablespace DWINDEX to platform='Linux IA (64-bit)'db_file_name_convert='/data/DWALFA/DWINDEX01.dbf','/oradata/kamil_exp/dwalfa/exp_dp/DWINDEX01.dbf';

convert tablespace DWDATA to platform='Linux IA (64-bit)'db_file_name_convert='/oradata/DWALFA/DWDATA01.dbf','/oradata/kamil_exp/dwalfa/exp_dp/DWDATA01.dbf';

Eğer tablespace altında birden fazla datafile varsa ve bunlarında diğer tablespace’ ler ilişkisi varsa tablespace bazında convert işlemi yapılabilir.
 

CONVERT DATAFILE “/ufs/ora_db1.dbf” TO PLATFORM=”Linux IA (64-bit)”
 
FROM PLATFORM=”Solaris[tm] OE (64-bit)” DB_FILE_NAME_CONVERT=”/ufs”,”/ext3”
 
PARALLELISM=2;

tablespace bazında convert etmek için ;

convert tablespace USERS TO PLATFORM
 'Linux IA (64-bit)' FORMAT='/oradata/kamil_exp/exp_dp/%U';

convert tablespace PRODUX, PROD TO PLATFORM
 'Linux IA (64-bit)'FORMAT='/oradata/kamil_exp/exp_dp/%U'; 

Aşağıdaki örnekde iki tane tablespaces’ in nasıl yapıldığı ile ilgili örnek script bulunmaktadır.
 

CONVERT TABLESPACE CUST,ORDERS TO PLATFORM ‘Microsoft Windows IA (32-bit)’
 
FROM PLATFORM ‘Solaris[tm] OE (64-bit)’ PARALLELISM=4;
 

8. Convert edilen tüm tablespace’ ler hedef sunucuda diğer dbf’ lerin bulunduğu klasöre (gerekiyorsa isimleri rename edilerek) taşınır.
 

9. Kaynak sunucudaki database’ de convert edilen tablespace’ ler eski haline geri getirilir. (opsiyonel; tekrar kullanılmayacaksa yapılmasına gerek yok)

alter tablespace USERS read write;
alter tablespace PRODUX read write ;

10. Kaynak sunucu üzerindeki tüm kullanıcılar hedef database’ inde oluşturulur.
 

11. Hedef database’ inde impdp öncesinde gerekli klasörler oluşturulur.
 

CREATE OR REPLACE DIRECTORY dpump_dir AS
 '/tmp/dump' ; 
GRANT READ,WRITE ON DIRECTORY dpump_dir TO system;

12. Kaynak database’ inden alınan exp hedef database’ ine import edilir.
 

impdp system/oracle TRANSPORT_DATAFILES='/oradata/CSCBALFA/users01.dbf'DUMPFILE=cscb_trans1.dmp LOGFILE=cscb_trans1_imp.log

impdp system/oracle TRANSPORT_DATAFILES='/oradata/CSCBALFA/produx01.dbf','/oradata/CSCBALFA/produx02.dbf',
 '/oradata/CSCBALFA/produx03.dbf' DUMPFILE=cscb_trans2.dmp LOGFILE=cscbalfa_trans2_imp.log

Aşağıdaki scriptlede alınabilir;
 

impdp system/manager dumpfile=ora_db1.dmp directory=dpump_dir transport_datafiles=/ext3/ora_db1.dbf
 

Not: datafile isimleri küçük-büyük harfe duyarlı

13. Hedef database üzerine açılan exporttan sonra buraya convert edilen tablespace’ ler read write moda alınır.
 

alter tablespace USERS read write;
alter tablespace PRODUX read write ;

14. Buraya users_old olarak sonradan create edilen tablespace drop edilir.
 

ALTER DATABASE DEFAULT TABLESPACE USERS ;
 

drop tablespace USERS_OLD including contents ;
 

açısından şunu söyleyebilirim yaklaşık 150 gb bir database’ i bu yöntemle bir saat gibi kısa bir sürede istediğiniz bir ortama taşıyabilirsiniz, bu işlemi klasik export – import ile yapmaya kalksanız (sunucunun yapısıylada ilgili olmakla beraber) iyimser bir yaklaşımla 15 -16 saat gibi bir sürede yapabilirsiniz.



Kamil TÜRKYILMAZ 

Hiç yorum yok: