其实这一篇文章最核心的东西都是项目组的忠哥写的,他已经飞往新疆项目组了。我当一次"小偷",把他写的一篇分析文章记录下来,以被自己忘记了
sqlloader 不装数情况说明:
1)现象:CCB_COGNOS_COMP_DV表的数据不能装载,在任务管理器里面看到sqlloader进程,但是CPU运行时间一直为0!
2)原因分析:按照现象估计sqlloader 是在等待什么资源,而资源一直未得到,因此sqlloader一直不装数!
3)解决思路:
a) 首先查看锁的情况,看是不是表被锁起,不能装数
查询:
SELECT A.OWNER,
A.OBJECT_NAME,
B.XIDUSN,
B.XIDSLOT,
B.XIDSQN,
B.SESSION_ID,
B.ORACLE_USERNAME,
B.OS_USER_NAME,
B.PROCESS,
B.LOCKED_MODE,
C.MACHINE,
C.STATUS,
C.SERVER,
C.SID,
C.SERIAL#,
C.PROGRAM
FROM ALL_OBJECTS A, V$LOCKED_OBJECT B, v$SESSION C
WHERE (A.OBJECT_ID = B.OBJECT_ID)
-- AND (B.PROCESS = C.PROCESS)
and b.SESSION_ID = c.SID
ORDER BY 1, 2
解锁:
alter system kill session 'sid, serial#'
经过确定,不是表被锁起导致的等待,再分析其他原因。
b)查询等待事件:
select SID,SEQ#,EVENT,p3 from v$session_wait
where event not like 'rdbms%'
and event not like 'SQL*N%'
and event not like '%timer'
发现里面有很多library cache lock等待事件,需要确认下!
以SYS用户运行
select Distinct w1.sid waiting_session,
h1.sid holding_session,
od.to_name object_name,
w.kgllktype lock_or_pin,
od.to_owner object_owner,
oc.Type,
decode(h.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive',
'Unknown') mode_held,
decode(w.kgllkreq, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive',
'Unknown') mode_requested,
xw.KGLNAOBJ wait_sql,xh.KGLNAOBJ hold_sql
from dba_kgllock w, dba_kgllock h, v$session w1,
v$session h1,v$object_dependency od,V$DB_OBJECT_CACHE oc,x$kgllk xw,x$kgllk xh
where
(((h.kgllkmod != 0) and (h.kgllkmod != 1)
and ((h.kgllkreq = 0) or (h.kgllkreq = 1)))
and
(((w.kgllkmod = 0) or (w.kgllkmod= 1))
and ((w.kgllkreq != 0) and (w.kgllkreq != 1))))
and w.kgllktype = h.kgllktype
and w.kgllkhdl = h.kgllkhdl
and w.kgllkuse = w1.saddr
and h.kgllkuse = h1.saddr
And od.to_address = w.kgllkhdl
And od.to_name=oc.Name
And od.to_owner=oc.owner
And w1.sid=xw.KGLLKSNM
And h1.sid=xh.KGLLKSNM
And (w1.SQL_ADDRESS=xw.KGLHDPAR And w1.SQL_HASH_VALUE=xw.KGLNAHSH)
And (h1.SQL_ADDRESS=xh.KGLHDPAR And h1.SQL_HASH_VALUE=xh.KGLNAHSH)
主要根据w1.sid waiting_session(等待的SID),
zh1.sid holding_session(造成等待的SID),xw.KGLNAOBJ wait_sql(等待执行的SQL),xh.KGLNAOBJ hold_sql(造成等待的SQL)
这几个字段确定,谁在等待,在等待什么,是什么造成等待.
举例:查询发现:正在等待执行truncate table CCB_COGNOS_COMP_DV;这是SQLLOADER全量装数的第一步;造成等待的是一个COGNOS查询。
现在原因已经明确:是cognos的一个查询导致了library cache lock,不能正常装数。
C)杀掉导致library cache lock的SESSION
select sid,serial# from v$session where sid=造成等待的SID;
然后执行:
alter system kill session 'sid, serial#'
这时候观察sqlloader开始装数是否开始正常运行,如果观察一小段时间后,该表对应的sqldr进程占用的CPU时间如果还是为0:00:00的话(或者经过许久还一直在显示装数进行中,没有其他反应),
就执行下一步动作(d)
d)杀掉进程步骤:
查询进程ID:
SELECT a.username,c.spid AS os_process_id,c.pid AS oracle_process_id FROM v$session a,v$process c
WHERE c.addr=a.paddr and a.sid=? and a.serial#=?;
orakill instance_name spid;(instance_name 换成实例,spid为进程号)
e)观察sqlloader装数正常开始
分享到:
相关推荐
### Oracle SQL Loader全攻略知识点详解 #### 一、SQL Loader的特点与应用场景 Oracle SQL Loader作为Oracle数据库的一个重要组成部分,主要用于将外部数据加载到Oracle数据库中。与其他数据迁移工具相比,SQL ...
Sql Loader 是 Oracle 数据库提供的一种批量数据加载工具,主要用于快速高效地将大量数据从文本文件导入到数据库表中。在 C# 开发环境中,我们可以通过操作系统级别的交互来调用 Sql Loader,实现数据的批量导入。在...
大批量CSV格式数据上传jar包。sqlloader.jar包
Sql Loader(SQL*Loader)是Oracle提供的一种高效的数据加载工具,可以快速将数据从外部文件加载到数据库表中。在本篇中,我们将深入探讨Oracle的数据导入导出及Sql Loader的使用方法。 1. **Oracle数据导入导出** ...
当在SQL*Loader中加载包含中文字符的数据时,如果字段出现乱码,通常是由于字符集不匹配导致的。为了解决这个问题,我们需要在控制文件中指定正确的字符集。例如,如果数据库字符集为ZHS16GBK或UTF8,可以使用以下...
- **错误处理**:当数据文件中的数据与目标表的结构不匹配时,SQL*Loader 可以捕获这些错误并将它们写入错误日志文件。 - **批处理**:通过设置批处理大小,可以控制每次导入的记录数量,从而优化性能。 - **并发...
Sqlloader 简介及使用指南 Sqlloader 是 Oracle 提供的一款数据加载工具,用于将数据从外部文件加载到 Oracle 数据库中。 Sqlloader 工具可以处理各种格式的数据文件,包括固定宽度文件、可变宽度文件、 CSV 文件...
- **直接路径加载**:SQL*Loader可采用直接路径加载模式,绕过数据库实例,提高加载速度,但不支持事务。 - **并发加载**:通过多进程或多线程实现并发加载,提高数据导入效率。 - **子记录和数组记录**:处理...
这一点通过关键词的罗列也可以体现,如“Oracle数据库”、“SQLLoader”、“数据加载”、“情报处理”等。 综上所述,SQL Loader作为一种高效的数据装载工具,在大数据环境下对Oracle数据库的数据装载有着重要的...
在IT领域,尤其是在数据库管理与数据导入导出技术中,Oracle SQL*Loader是一个非常重要的工具。SQL*Loader的成功案例不仅展示了其高效的数据加载能力,还体现了它在处理大量数据时的灵活性与可靠性。本文将根据提供...
### SQL Loader概述与详解 #### 一、SQL Loader简介 SQL Loader是Oracle提供的一款功能强大的数据加载工具,它能够高效地将外部...无论是日常维护还是大规模数据迁移项目,SQL Loader都是不可或缺的数据处理利器。
在提供的压缩包`sqlLoader`中,可能包含示例的控制文件和数据文件,你可以按照上述步骤进行操作,以实际操作来加深理解。通过实践,你将能够熟练掌握`SQL*Loader`,从而更高效地管理和维护数据库中的数据。
若在命令行中直接调用SQL*Loader而不带任何参数,则会显示所有可用的合法参数帮助信息。 #### 四、SQL*Loader的组件 ##### 1. 控制文件(Control File) 控制文件是SQL*Loader的核心组成部分,它定义了外部数据文件...
### SQL_LOADER教程详解 #### 一、SQL*LOADER简介 SQL*LOADER是Oracle提供的一款高效的数据加载工具,主要用于将操作系统中的文件批量导入到Oracle数据库中。它支持多种数据格式,包括纯文本文件、Excel文件等,...
SQL*LOADER是oracle的数据加载工具,在NT下sql*loader的命令为SQLLDR,在UNIX下一般为SQLLDR/SQLLOAD。通常用来将操作系统文件迁移到oracle数据库中。它是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径...
下面,我们将深入探讨SQL*Loader的工作原理、使用方法以及如何通过编写Java程序来调用SQL*Loader进行数据导入。 首先,SQL*Loader(也称为SQL Loader)是Oracle数据库的配套工具,用于将数据从平面文件快速加载到表...
熟悉这两者,对于数据库管理员、开发人员和数据分析人员来说,都是必不可少的技能。 总之,"SQL loader and oracle sql study"这一主题涵盖了数据加载与数据库操作的核心技术,学习这些内容有助于提升在Oracle环境...
### Oracle SQL*Loader 使用方法详解 #### 一、SQL*Loader 概览 SQL*Loader 是 Oracle 数据库中用于批量导入外部数据至数据库的强大工具。它不仅具备与 DB2 Load 工具类似的功能,还提供了更为灵活的加载选项,...
使用 SQLloader 导入数据 SQLloader 是 Oracle 自带的程序,能够快速批量上传数据到 Oracle 表中。...使用 SQLloader 可以快速批量上传数据到 Oracle 表中,不需要使用第三方工具,直接使用 Oracle 自带的程序。
SQL*Loader支持错误处理,可以配置它将错误记录到日志文件,以便后续分析和修复。同时,可以选择跳过有错误的记录,继续加载其他数据。 8. **应用实践** SQL*Loader广泛应用于数据迁移、数据仓库加载、数据清洗等...