标签: sql-loader

将大量数据加载到Oracle SQL数据库

我想知道是否有人对我即将开始的事情有任何经验.我有几个csv文件大小都在GB左右,我需要将它们加载到oracle数据库中.虽然我加载后的大多数工作都是只读的,但我还是需要不时加载更新.基本上我只需要一个很好的工具来一次加载几行数据直到我的数据库.

这是我到目前为止所发现的:

  1. 我可以使用SQL Loader做很多工作

  2. 我可以使用批量插入命令

  3. 某种批量插入.

以某种方式使用预备语句可能是个好主意.我想我想知道每个人都认为这是完成插入的最快方法.有小费吗?

sql oracle bulkinsert insert sql-loader

3
推荐指数
1
解决办法
6521
查看次数

可以将变量传递给SQL*Loader控制文件吗?

假设你有一张桌子:

CREATE TABLE Customer
(
  batch_id         NUMBER,
  customer_name    VARCHAR2(20),
  customer_address VARCHAR2(100)
)
Run Code Online (Sandbox Code Playgroud)

并假设您有一个控制文件来填充此表:

LOAD DATA INFILE 'customers.dat'
REPLACE

INTO TABLE Customer
(
  batch_id         ??????,
  customer_name    POSITION(001:020),
  customer_address POSITION(021:120)
)

batch_id我运行SQL*Loader时是否可以将值传递给我的控制文件?例如,是否可以指定绑定变量(将问号转换为:MY_AWESOME_BATCH_ID)?

oracle sql-loader

3
推荐指数
1
解决办法
1万
查看次数

在 shell 脚本中使用 SQL*Loader 时找不到 sqlldr

我想创建 shell 脚本AUTOLOAD,运行时它将使用一组指令执行 SQL*Loader。这一切都是在我的Linux环境下进行的。

SQL*loader 然后将数据导入到 SQL Developer

#!/bin/sh
#
echo -------- SQL loader --------
# @echo; 
#
sqlldr username@server1/password control=/folder1/ctrl/loader.ctl log=/folder1/load/results.l 
Run Code Online (Sandbox Code Playgroud)

我的 shell 脚本位于根目录中,这是我调用其他文件的地方。但当我尝试运行它时,它给了我错误:

- line 6: sqlldr: command not found
Run Code Online (Sandbox Code Playgroud)

我不知道如何指定 SQL*Loader 的路径,因为我在 Linux 上。

我对此很陌生......所以要温柔:(

sql shell oracle-sqldeveloper sql-loader

3
推荐指数
1
解决办法
4万
查看次数

sql loader截断始终是第一列

我使用oracle 10g,我有这个file.ctl

OPTIONS (SKIP=1)
LOAD DATA
INFILE '/home/gxs/segmentation/sqlloader/datos.csv'
APPEND INTO TABLE test
(id "s_test.nextval",
name char(10) TERMINATED BY ',' ,
tel char(20) TERMINATED BY ',' ,
apellido char(10) TERMINATED BY ',' )
Run Code Online (Sandbox Code Playgroud)

我的csv文件es

name,tel,apellido
daniel,12345,buitrago
cesar,98765,san
alex,4556,ova
Run Code Online (Sandbox Code Playgroud)

但是当看到表时,名字没有第一个字符:

id   name   apellido   tel
1    aniel  buitrago   12345
2    esar   san        98765
3    lex    ova        4556
Run Code Online (Sandbox Code Playgroud)

做什么?

sql oracle sql-loader

3
推荐指数
1
解决办法
746
查看次数

SQL*Loader的日期格式

我正在尝试将记录文件导入到表中并且正在获取

Rejected - Error on table FUNDPRICE_TEST, column FUNDDATE.
ORA-01843: not a valid month
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,并且读到默认情况下Oracle预计日期格式为yyyymmdd.显然,当第一天的值(我的第一个记录)超过12时,这会抛出一个错误.

如何将导出的csv文件中的日期格式化mm/dd/yyyy 00:00:00为此yyyymmdd格式?

这当然是假设这是我的问题.我可能会咆哮错误的树.

尝试日期格式化后,这是ctl文件:

load data
infile 'commands/FundPriceDataNEW2.txt'
 into table FundPrice
 fields terminated by "," optionally enclosed by '"'          
 ( FUND, FUNDDATE DATE "mm/dd/yyyy HH24:MI:SS", FAV, FUNDVALUE )
Run Code Online (Sandbox Code Playgroud)

以下是FundPriceDataNEW2.txt中的一些记录:

16,9/30/1999 0:00:00,"999999",9.64
16,10/31/1999 0:00:00,"999999",10.06
16,11/30/1999 0:00:00,"999999",10.40
Run Code Online (Sandbox Code Playgroud)

订单是fund,funddate,fav,fundvalue.错误发生在格式无效的日期.

sql oracle sql-loader

3
推荐指数
1
解决办法
7788
查看次数

Sql loader条件

我可以在SQL LOADER中执行类似的操作吗?

LOAD DATA
INFILE 'table_with_one_million_rows.dat'
INTO TABLE TABLE_WITH_ONE_MILLION_ROWS
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
   COL1                     DECIMAL 
 , COL2                     DECIMAL IF COL1='X' '1' else '0'
 , COL3                     CHAR 

)
Run Code Online (Sandbox Code Playgroud)

oracle plsql sql-loader

2
推荐指数
1
解决办法
2278
查看次数

从UNIX运行sql*loader时的消息2100

我的.sh文件包含下一个内容:

#!/bin/bash    
echo -------- uploader.sh v 0.1 --------
ORACLE_HOME=/opt/app/oracle/product/10.2.0/db_1/bin/
export ORACLE_HOME
PATH=$ORACLE_HOME
export PATH

sqlldr userid=PR/0611@database control=control_file.ctl LOG=fb_log.log errors=100
Run Code Online (Sandbox Code Playgroud)

所以,我想运行sql loader并上传数据.当我运行uploader.sh时,我收到来自unix的下一条消息:

未找到消息2100; 没有找到product = RDBMS,facility = ULMessage 2100的消息文件; product = RDBMS,facility = UL没有消息文件

我已经读过它并得出结论,问题出在环境变量中.你可以帮我解决这个错误吗?

unix bash sql-loader

2
推荐指数
1
解决办法
2万
查看次数

连接sqlldr中的多个字段

我正在oracle 11g中使用sqlldr(sql loader).我试图将3个字段连接成一个字段.有没有人这样做过?

ex:TABLE - "CELLINFO",其中字段为(mobile_no,service,longitude).

给出的数据是(+ 9198449844,idea,110,25,50)即(mobile_no,service,grad,min,sec).

但是在将数据加载到表中时,我需要将最后3个字段(grad,min,sec)连接到表的经度字段中.

在这里我无法手动编辑,因为我有1000个数据要加载.

我也尝试过使用||,+和concat()....但我无法做到.

bash shell oracle11g sql-loader

2
推荐指数
1
解决办法
7568
查看次数

SQL*Loader-704 和 ORA-12154

sqlldr "xxxx/xxxx@YYYYYXXXX" control=/home/local/INTERNAL/xxxxx/Presc_SQLLDR_File/Presc_SQLLDR.ctl log=/home/local/INTERNAL/xxxxx/Presc_SQLLDR_File/Presc_log.log data=home/achand/Presc_SQLLDR_File/Presc_SQLLDR.ctl
Run Code Online (Sandbox Code Playgroud)

每当我尝试执行 sqlldr 时,都会出现以下错误

SQL*Loader-704: Internal error: ulconnect: OCIServerAttach [0]
ORA-12154: TNS:could not resolve the connect identifier specified
Run Code Online (Sandbox Code Playgroud)

我试过 tnsping YYYYYXXXX

我得到以下错误

TNS-03505:无法解析名称

tnsnames.ora 包含

DDCPPSD.WORLD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = XXXXXYYY)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = YYYYYXXXX)
    )
  )
Run Code Online (Sandbox Code Playgroud)

sql-loader oracle12c tnsping

2
推荐指数
1
解决办法
2万
查看次数

您可以为 Oracle SQL*loader 设置 ERRORS 的最大值是多少?

直截了当的问题..

Oracle 10 的文档指出:

Oracle 10g sql*loader 文档

(注意,我链接到 10g,因为它最方便,我将回答 Oracle 10 和/或 Oracle 11,无论哪种方式都可以 - 我怀疑它会是相同的答案 - 所以我添加了两个标签) .

ERRORS(允许的错误) 默认值:要查看此参数的默认值,请在不带任何参数的情况下调用 SQL Loader,如调用 SQL Loader 中所述。

ERRORS 指定允许的最大插入错误数。如果错误数超过为 ERRORS 指定的值,则 SQL*Loader 将终止加载。要完全不允许错误,请设置 ERRORS=0。要指定允许所有错误,请使用非常大的数字。

(强调我的)。

因此,由于 Oracle 最多可以处理 NUMBER(38) .. 我试过:

ERRORS=999999999999999999999999999999999999
Run Code Online (Sandbox Code Playgroud)

(36 位)

并立即收到此错误:

SQL*Loader-100:命令行上的语法错误

尝试一个小得多的数字:

ERRORS=999999
Run Code Online (Sandbox Code Playgroud)

工作正常。

那么您可以在这里使用的最大值是多少?我没有在文档中找到它,所以不确定我是否找错了地方,或者它不在那里:)

是的,我需要一个大数字,我正在加载一个数百万行的文件,所以我想使用最大的可能来避免任何未来的问题。

oracle10g oracle11g sql-loader

2
推荐指数
1
解决办法
6290
查看次数