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.
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.
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.
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.
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.
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'
(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
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.
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