太慢了了,如何提速??

zhangzh4072 2002-12-01 04:42:37
问题是这样的:
总部有一台通讯服务器,接受远程客户端传来的数据(17个文本文件压缩成一个文件,收到后解压,其中一个文本对应一个表,每个表记录数比较多),公司数据库服务器采用oracle8.1.6 , win2000server. 问题是:收到用电话传输上来(仅需1分钟)的数据,在做数据导入时却花了30多分钟,怎么办阿(为了数据的唯一性,服务器的表做了唯一索引),怎么才能提高数据倒入速度,希望各位高手指教??
在线等待。。。
...全文
46 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzh4072 2002-12-02
  • 打赏
  • 举报
回复
真的每人回答吗?
freewill2000 2002-12-02
  • 打赏
  • 举报
回复
你的瓶颈主要是在你的索引上

可以考虑先把索引disable,导入数据后在enable,enable的时候,检查是否是唯一数据,检查错误表然后修正,具体做法可以参见 oracle reference。
yuxuan 2002-12-02
  • 打赏
  • 举报
回复
你先删除索引,再导入
zhangzh4072 2002-12-01
  • 打赏
  • 举报
回复
没人回答吗??在线等待阿
zhangzh4072 2002-12-01
  • 打赏
  • 举报
回复
我的服务器不能 挂在wwww网上(多方面考虑),使内部机构使用的数据

我是采用sqlldr
可是,一个一个的倒入居然这么慢
语句是:
WinExecAndWait32('COMMAND.COM /C sqlldr cnls/cnls@cnls control=c:\temp\cph.ctl errors=1000',SW_hide);
(用delphi语言)
huangcaibing 2002-12-01
  • 打赏
  • 举报
回复
可以不用这种方式导入数据,
可以用其他方法,
1)远程连接数据库,直接操作数据库,要求Oracle放在网上;
2)通过Web server,用Asp或Asp.net页面操作数据库;
3)通过Web server建立Web Service,远程调用Web Service,以更新数据
Doloris 2002-12-01
  • 打赏
  • 举报
回复
用sqlldr阿,生成控制文件:
SCRIPT TO GENERATE CONTROL FILE AND DATA FILE FOR USE WITH SQL*LOADER:
---------------------------------------------------------------------

/*
||
|| Description:
|| Given a tablename generates
|| 1. Flat ascii file with delimiters
|| 2. SQL*Load control file to load the data
||
*/

set echo off
set doc off
set pagesize 0
set feedback off
set verify off
set pause off

accept vtbl_name prompt 'Enter table name: '

define ColumnDelim = "|"
define DateFormat = "yyyymmddhhmiss"

define dataname = &&vtbl_name..dat

spool data.sql

prompt ALTER SESSION SET NLS_DATE_FORMAT="&DateFormat.";;
--
-- Header info
--
prompt /*
prompt || Script Name: data.sql
prompt || Author: Ramesh K Meda
prompt || Date: Feb 1995 (Does day matter?)
prompt || Copyright info: Feel free to copy!
prompt || Fees: As you please!
prompt */

prompt clear columns

--
-- Set up column formats
--

select 'column ' || column_name || ' format ' ||
DECODE (data_type,
'DATE', 'A14'
,'NUMBER' ,
decode (data_scale, 0,
rpad('0', nvl(data_precision - nvl(data_scale,0), 38), '0')
, rpad('0', nvl(data_precision - nvl(data_scale,0), 38), '0')
|| '.' ||
rpad('0', nvl(data_scale, 5), '0'))
,'A' || data_length
)
from user_tab_columns
where table_name = UPPER('&&vtbl_name')
order by column_id;

--
-- Set Line size to export data
--
select 'set linesize '||
sum(DECODE(data_type
,'DATE', 25
,'NUMBER', nvl(data_precision,45) + 5
, data_length + 5
)
)
from user_tab_columns
where table_name = UPPER('&&vtbl_name');

prompt set echo off
prompt set pagesize 0
prompt set space 0
prompt set feedback off
prompt set verify off
prompt set pause off
prompt set termout off

prompt spool &dataname

prompt select
select decode(column_id, 1, ' ', ',')
, column_name
, ',''&ColumnDelim.'''
from user_tab_columns
where table_name = upper('&&vtbl_name')
order by column_id
/
prompt from &&vtbl_name;;

prompt spool off
prompt set pagesize 15
prompt set feedback on
prompt set verify on
prompt set heading on
prompt set linesize 80
prompt set termout on

spool off

--
-- Create control file
--
prompt Generating control file for SQL*Load
set lines 100
spool &&vtbl_name..ctl

prompt
prompt load data
prompt replace
prompt into table &vTbl_Name
prompt (

select decode (column_id, 1, ' ', ',') ||
column_name ||
chr(9) ||
decode(data_type, 'DATE', ' DATE "&DateFormat"', ' CHAR ') ||
chr(9) ||
' terminated by ''&ColumnDelim.'' ' ||
' nullif ' ||
column_name ||
' = blanks '
from user_tab_columns
where table_name = upper('&vtbl_name')
order by column_id
/

prompt )

spool off

clear scree
prompt Generating data file

@data.sql

prompt Files generated:
prompt SQL script: data.sql
prompt data file: &&vtbl_name..dat
prompt control: &&vtbl_name..ctl

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧