2016-03-21 30 views
0

Oracle veritabanına veri almak için birkaç betik hazırlamalıyım, ancak farklı veritabanlarında çalıştırmam gerekecek.Değerler sqlloader'a nasıl aktarılır - Oracle

table1.bat:

sqlldr login/[email protected] control=table1.ctl log=table1.log 
sqlloader çalışır Ayrı bat dosyası hazırladık Her tablo için

table1.dat 
table1.ctl 
table2.dat 
table2.ctl 
etc.. 

: Her tablo için bir veri ve kontrol dosya alınmak üzere

Farklı veritabanlarında çalıştırmak ve giriş bilgilerini değiştirmek zorunda olmadığımdan, slong kadar kolay ve basit bir çözümdür.

Yapmaktan hoşlandığım şey, her tablo için yükleme komut dosyalarını çalıştıran bir dosya ve parola ile bir dosyaya sahip olmak.

Nasıl yapılabileceği konusunda herhangi bir öneriniz var mı?

Selamlar

Pawel

+0

Yani onların bireysel 'kullanabileceği değişken geçirmeden, bir efendi' giriş kimlik bilgileri ile bir değişken ayarlar ve daha sonra sırayla diğer '.bat' dosyaların her biri çağırır .bat' dosyayı istiyorum sqlldr komutları? Ya da tüm. Sqlldr 'yerine bir .bat dosyası, her bir tablo yerine bir çağrı yapar? –

cevap

0

Sorunuzun anIadiniz.

.bat dosyanızda herhangi bir veritabanına bağlanabilirsiniz, ancak sqldr giriş, içe aktarmanın başlatıldığı veritabanına karar verir.

-- database 1 
host sqlldr login/[email protected] control=table1.ctl log=table1_db1.log 
host sqlldr login/[email protected] control=table2.ctl log=table2_db1.log 

-- database 2 
host sqlldr login/[email protected] control=table1.ctl log=table1_db2.log 
host sqlldr login/[email protected] control=table2.ctl log=table2_db2.log 

bir diğer seçenek veritabanı 1 ilgili kod yazmak tr başlangıç ​​dosyasında import_db1.sql çağırmaktır;

ben böyle bir şey yapmak .bat dosyasında bir start.sql çağırır vb

start.sql

@@import_db1.sql 
@@import_db2.sql 

import_db1.sql

-- database 1 
host sqlldr login/[email protected] control=table1.ctl log=table1_db1.log data=csvfile.csv 
host sqlldr login/[email protected] control=table2.ctl log=table2_db1.log data=csvfile.csv 

vb

+1

Bu, SQL \ * Plus içinde 'sqlldr' komutunu çalıştırmayı deniyor gibi görünüyor. O/S komut satırından çalıştırdığınız ayrı bir yürütülebilir."Host" ile çağırabilirsiniz, ancak yine de bu komutlarda doğru kimlik bilgilerini sağlamanız gerekir, bu yüzden bu nasıl yardımcı olur? –

+0

Haklısınız @AlexPoole, ev sahibinin cevapta olması gerekiyordu. Düzenledim. Kopyala + Yapıştır her zaman yeterli değildir ;-) – massie

+0

SQL \ * Plus'ı çalıştırmanın ne olduğunu ve daha sonra 'ana bilgisayar' durumun ne olduğunu görmüyorum - bunun yerine her bir 'ana bilgisayar' çağrısındaki kimlik bilgilerini sağlamanız yeterlidir. Ancak, OP'nin senaryoları bir kerede birden çok veritabanına karşı çalıştırmaya çalıştığını düşünmüyorum, soru, yeniden kullanılabilir bir komut dosyasında çalışma zamanında tek bir veritabanı için kimlik bilgilerini nasıl sağladığınızla ilgili gibi görünüyor? –

0

Sorununuz çok açık değil, ancak yalnızca sunucu başına kullanıcı adı/parola oluşturmak istediğiniz gibi geliyor. bash için Hangi durumda yapabileceğiniz:

. /dir/to/file/.sql_password_file 

sql_password_file kaydı olduğu durumlarda:

SQLLDRLOGON='user/pass' 

ardından komut yapabileceğiniz

sqlldr userid=$SQLLDRLOGON control=table1.ctl log=table1.log 

Ben Senaryonu değiştirerek içine bakmak istiyorum bir döngüde ör.

for load in table1 table2 
do 
loads="control=${load}.ctl bad=${load}.bad log=${load}.log" 
sqlldr $SQLLDRLOGON $loads 
etc...