我必须准备几个用于将数据导入Oracle数据库的脚本,但我必须在不同的数据库上运行它。 对于要导入的每个表,我有一个数据和控制文件:
table1.dat
table1.ctl
table2.dat
table2.ctl
etc..
对于每个表,我都准备了运行sqlloader的单独的.bat文件:
table1.bat:
sqlldr login/password@database control=table1.ctl log=table1.log
这是一个简单易用的解决方案,因为我不需要在不同的数据库上运行它并更改登录凭据。
我想要做的是拥有一个带有登录名和密码的文件,该文件为每个表运行加载脚本。
你有什么建议吗?
此致
的Pawel
答案 0 :(得分:0)
我希望我理解你的问题。
在.bat文件中,您可以连接到任何数据库,但是sqlldr login会决定导入的数据库。
我会在.bat文件中调用start.sql,我会这样做:
-- database 1
host sqlldr login/password@database1 control=table1.ctl log=table1_db1.log
host sqlldr login/password@database1 control=table2.ctl log=table2_db1.log
-- database 2
host sqlldr login/password@database2 control=table1.ctl log=table1_db2.log
host sqlldr login/password@database2 control=table2.ctl log=table2_db2.log
另一个选择是在您的启动文件中调用import_db1.sql,编写有关数据库1等的代码。
start.sql
@@import_db1.sql
@@import_db2.sql
import_db1.sql
-- database 1
host sqlldr login/password@database1 control=table1.ctl log=table1_db1.log data=csvfile.csv
host sqlldr login/password@database1 control=table2.ctl log=table2_db1.log data=csvfile.csv
等
答案 1 :(得分:0)
您的问题不是很清楚,但听起来您只想为每台服务器提供用户名/密码。对于bash,你可以这样做:
. /dir/to/file/.sql_password_file
其中sql_password_file包含条目:
SQLLDRLOGON='user/pass'
然后在你的脚本中你可以做
sqlldr userid=$SQLLDRLOGON control=table1.ctl log=table1.log
我会考虑将脚本更改为循环,例如。
for load in table1 table2
do
loads="control=${load}.ctl bad=${load}.bad log=${load}.log"
sqlldr $SQLLDRLOGON $loads
etc...