我有一个CSV文件,需要将其上传到数据库表中。我已经为它编写了一个SQL加载程序,并且能够在表中上传csv,但是我面临的问题是我必须在加载程序脚本本身中对密码进行硬编码。 整个过程应该是自动化的,用户将文件上传到服务器上的特定文件夹。为此,我们将使用一个Shell脚本来获取文件。然后使用SQL加载程序将这些值上传到表中。
是否可以在不提供密码的情况下使用SQL加载程序?
答案 0 :(得分:2)
示例1 Oracle Server 9.2.0.8 Linux,客户端Windows 9.2.0.1
您需要建立远程操作系统身份验证
在pfile或spfile REMOTE_OS_AUTHENT=TRUE
中设置1个
2选中OS_AUTHENT_PREFIX
select name, value from v$parameter where name='os_authent_prefix';
NAME VALUE
------------------- ------------------------------------------------
os_authent_prefix ops$
3创建用户
CREATE USER OPS$DEMINDV IDENTIFIED EXTERNALLY
DEFAULT TABLESPACE TABLESPACE_DEMINDV
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON TABLESPACE_DEMINDV
PROFILE DEFAULT
ACCOUNT UNLOCK;
4检查oracle客户端sqlnet.ora $ORACLE_HOME\network\admin\sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NTS)
5测试连接
C:\Program Files\Far Manager>sqlplus /@test-ecdu
SQL*Plus: Release 9.2.0.1.0 - Production on Fri Jun 22 12:46:40 2018
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
connected> show user
USER is "OPS$DEMINDV"
connected>
6运行sqlldr.exe并加载数据
C:\oracle\ora92\rdbms\demo>sqlldr.exe /@test-ecdu control=ulcase2.ctl
SQL*Loader: Release 9.2.0.1.0 - Production on Fri Jun 22 12:19:39 2018
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Commit point reached - logical record count 7
C:\oracle\ora92\rdbms\demo>
示例2
Oracle Server 9.2.0.8 Linux和本地用户Linux OS test
创建oracle用户
CREATE USER OPS$TEST IDENTIFIED EXTERNALLY
DEFAULT TABLESPACE TABLESPACE_DEMINDV
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON TABLESPACE_DEMINDV
PROFILE DEFAULT
ACCOUNT UNLOCK
/
GRANT "RESOURCE" TO OPS$TEST
/
ALTER USER OPS$TEST DEFAULT ROLE "RESOURCE"
/
测试连接
[test@test-ecdu bin]$ sqlplus /
SQL*Plus: Release 9.2.0.8.0 - Production on Fri Jun 22 13:10:55 2018
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
SQL> show user
USER is "OPS$TEST"
SQL>
运行sqlldr并加载数据
[test@test-ecdu demo]$ sqlldr / control=ulcase2.ctl log=/home/test/ulcase2.log
SQL*Loader: Release 9.2.0.8.0 - Production on Fri Jun 22 13:20:21 2018
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Commit point reached - logical record count 7
[test@test-ecdu demo]$
答案 1 :(得分:1)
我可以想到两个选择。
首先,创建一个参数文件,其中包含所需的所有参数的值。例如(my_parfile.par):
userid=scott/tiger
control=my_loader.ctl
log=my_loader.log
您将以SQL * Loader身份运行
sqlldr parfile=my_parfile.par
很明显,它确实包含用户名/密码,但是您在命令行中看不到它。
或者,如果仅使用斜杠/
作为USERID
值,则默认为操作系统登录名。这可能是您要寻找的。就我个人而言,我从未使用过它,所以我无法提供示例并声称它将起作用,我只是不知道。 Google可能会这么做。