Pages

6 Şubat 2011 Pazar

Export ve import işlemleri öncesinde DBMS_FILE_TRANSFER paketi kullanarak ASM’den diğer bir ASM’ye dosya transferi

Oracle 10g sürümünden itibaren DBMS_FILE_TRANSFER paketi ile aracı lokal dosya oluşturmadan direkt olarak ASM’den başka bir sunucu üzeridenki ASM’ye dosya transferi yapılabilmektedir.

Bu transfer işlemi için 2 farklı metot vardır. get_file ile uzak lokasyondan lokal sunucudaki ASM’ye dosya kopyalanabilmekte, put_file ilede lokal sunucudaki  bir dosya uzak bir ASM’ye kopyalanabilmektedir. İsterseniz bu iki farklı metodun uygulamalarını yapalım.


GET_FILE

1. Uzak sunucudaki ASM içerisinde bir dosya oluşturuyoruz. Burada oluşturulan export dosyası lokaldeki get_file operasyonuyla istenecektir.Kısaca bir örnek dosyanın hazırlanışı aşağıdaki gibi olacaktır. Log dosyaları ASM içerisinde tutulması desteklenmemektedir, bu sebeple log dosyaları için normal dosya formatında tutulacak bir dizin oluşturmamız gerekmektedir.

$ export ORACLE_SID=+ASM
$ export ORACLE_HOME=/u01/app/11.2.0/grid
$ asmcmd
ASMCMD > ls
CLUSTERDG
DATA
FLASH

ASMCMD> mkdir DATA/REMOTEASM
ASMCMD> exit
$ export ORACLE_SID=orcl
$ export ORACLE_HOME=/$ORACLE_BASE/product/11.2.0/db_1
$ sqlplus / as sysdba
SQL> create directory asmdumpdir as '+DATA/REMOTEASM';
Directory created.
SQL> grant read,write on directory asmdumpdir to hr;
Grant succeeded.
SQL> create directory logdumpdir as '/u01/app/dumplog;
Directory created.
SQL> grant read,write on directory logdumpdir to hr;
Grant succeeded.

$ expdp hr/hr directory=asmdumpdir dumpfile=hr.dmp schemas=hr logfile= logdumpdir:hrdump.log

Yukardaki işlem sonunda $DATA/REMOTEASM altında hr.dmp adı altında export dosyası oluşturulmuştur. Bu export dosyasının log dosyası ise /u01/app/dumplog dizini altındadır.

2. Lokal sunucu üzerinde ASM instance’a oturum açarak uzak sunucudan get_file operasyonu ile çekilecek olan hr.dmp export dosyasının saklanacağı ASM dizini ve Oracle dizin objelerini oluşturuyoruz, ardından gerekli izinleri  ilgili kullanıcıya veriyoruz.

$ export ORACLE_SID=+ASM
$ export ORACLE_HOME=/u01/app/11.2.0/grid
$ asmcmd
ASMCMD > ls
CLUSTERDG
DATA
FLASH

ASMCMD> mkdir DATA/DESTASM
ASMCMD> exit
$ export ORACLE_SID=orcl2
$ export ORACLE_HOME=/$ORACLE_BASE/product/11.2.0/db_1
$ sqlplus / as sysdba
SQL> create directory destasm as '+DATA/DESTASM';
Directory created.
SQL> grant read,write on directory destasm to hr;
Grant succeeded.
SQL> create directory destlogdump as '/u01/app/dumplog;
Directory created.
SQL> grant read,write on directory destlogdump to hr;
Grant succeeded.
3. Uzak veritabanı için lokal veritabanının tnsnames.ora dosyası içerinde TNS girişi ekliyoruz ve bu TNS girişini kullanarak bir veritabanı linki oluşturuyoruz.

REMOTE_DB =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = linux1.localdomain)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SID = orcl)
   )
 )

SQL> create database link remote_db connect to hr identified by hr using 'REMOTE_DB'

4. get_file fonksiyonunu DBMS_FILE_TRANSFER prosedüründe kullanarak uzak sunucudaki(linux1.localdomain) hr.dmp dosyasını lokal sunucudaki(linux2.localdomain) ASM instance’ı içerisine kopyalıyoruz. Bu işlemi lokal sunucuda yapıyoruz.

SQL> exec dbms_file_transfer.get_file('ASMDUMPDIR','hr.dmp','REMOTE_DB','DESTASM','destasm.dmp');

Yukardaki işlemde ASMDUMPDIR, uzak sunucudaki export dosyanın tutulduğu Oracle dizin objesini,  REMOTE_DB network üzerinden kopyalama için oluşturduğumuz remotedb veritabanı linkini, DESTASM ise lokal sunucudaki Oracle dizin objesini işaret etmektedir.

Log dosyasınıda aynı şekilde kopyalıyoruz.

SQL> exec dbms_file_transfer.get_file('LOGDUMPDIR','hrdump.log','REMOTE_DB','DESTLOGDUMP','desthrdump.log');

Yukardaki ilk transfer işlemi sonunda lokal ASM instance içerisine kopyalanan destasm.dmp sadece aslias isimdir. Gerçekte ismi Oracle tarafından oluşturulmuş generic bir isimdedir.

destasm.dmp => +DATA/DESTASM/file-transfer_0_0.538.739673619

Büyük dosyaların bu paket ile kopyalanma sürecini V$SESSION_LONGOPS dnaimik performans görünümüne sorgu çekerek izleyebilirsiniz.

5. Bu kopyalanan dosyaların lokal sunucu üzerinde import edilmesi için ise;

$ impdp hr/hr directory=destasm dumpfile=destasm.dmp logfile=destlogdump:desthrdump.log

PUT_FILE
put_file fonksiyonu ise bir dosyanın lokal sunucudan uzak sunucuya kopyalanmasını sağlar. Aşağıdaki örnekte get_file ile lokal sunucu(linux2.localdomain) üzerine kopyaladığımız export dosyasını bu sefer adını değiştirerek uzak sunucuya (linux1.localdomain) tekrar geri transfer ediyoruz.

SQL> exec dbms_file_transfer.put_file('DESTASM','destasm.dmp','ASMDUMPDIR','newasm.dmp','REMOTE_DB');

SQL> exec dbms_file_transfer.put_file('DESTLOGDUMP','desthrdump.log','LOGDUMPDIR','newhrdump.log','REMOTE_DB');

0 yorum:

Yorum Gönder