- 浏览: 1022949 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
直接路径插入使用直接写(direct write)操作,在要修改的段的高水位(high watermark)以上直接加载数据,这个事实产生以下重要的结果:
1. 由于直接写的缘故,高速缓存被辟开了.
2. 不允许在被修改的表上同步的执行DELETE,INSERT,MERGE,UPDATE语句,以及索引的创建(重建)操作.
3.在高水位以下的包含空闲空间的块也不会被利用.
直接路径插入之所以可以获得更好的性能,其中一个原因是,只为这个段生成了最少量的回滚.实际上,只为空间管理操作做了回滚.
有以下两种方式可以使一个INSERT INTO...SELECT...语句使用直接路径插入.
1.在SQL语句中指定append提示:INSERT /*+ append*/ INTO...SELECT...
2.并行地执行SQL语句.注意,在这里,插入(INSERT)与查询(SELECT)都可以独立地被并行处理.要利用直接路径插入,至少INSERT部分必须被并行执行.
测试如下:
1.以常规方式插入数据(noarchivelog mode,logging mode, no direct-path insert)
LIBIN@dextrys>DROP TABLE t;
DROP TABLE t
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
已用时间: 00: 00: 00.15
LIBIN@dextrys>
LIBIN@dextrys>CREATE TABLE t (id NUMBER, pad VARCHAR2(1000));
表已创建。
已用时间: 00: 00: 00.06
为表添加主键约束:
LIBIN@dextrys>ALTER TABLE t ADD CONSTRAINT t_pk PRIMARY KEY (id);
表已更改。
已用时间: 00: 00: 00.21
LIBIN@dextrys>TRUNCATE TABLE t;
表被截断。
已用时间: 00: 00: 00.12
LIBIN@dextrys>SELECT value
2 FROM v$mystat NATURAL JOIN v$statname
3 WHERE name = 'redo size';
VALUE
----------
29332
已用时间: 00: 00: 00.07
LIBIN@dextrys>ALTER TABLE t LOGGING;
表已更改。
已用时间: 00: 00: 00.01
LIBIN@dextrys>INSERT INTO t
2 SELECT rownum AS id, rpad('*',1000,'*') AS pad
3 FROM dual
4 CONNECT BY level <= 1000000;
已创建1000000行。
已用时间: 00: 03: 11.98
检查生成的已用回滚信息.
LIBIN@dextrys>SELECT t.used_ublk, t.used_urec
2 FROM v$transaction t, v$session s
3 WHERE t.addr = s.taddr
4 AND s.audsid = userenv('sessionid');
USED_UBLK USED_UREC
---------- ----------
4320 378280
已用时间: 00: 00: 00.12
LIBIN@dextrys>SELECT value
2 FROM v$mystat NATURAL JOIN v$statname
3 WHERE name = 'redo size';
VALUE
----------
1192914920
已用时间: 00: 00: 00.03
说明:常规方式下,插入100万条数据,花费大约192秒,生成大量回滚信息,生成(1192914920-29332)字节redo log;
2.以(direct-path insert)方式插入数据(noarchivelog mode,logging mode, direct-path insert)
LIBIN@dextrys>TRUNCATE TABLE t;
表被截断。
已用时间: 00: 00: 01.43
LIBIN@dextrys>ALTER TABLE t LOGGING;
表已更改。
已用时间: 00: 00: 00.07
LIBIN@dextrys>INSERT /*+ append */ INTO t
2 SELECT rownum AS id, rpad('*',1000,'*') AS pad
3 FROM dual
4 CONNECT BY level <= 1000000;
已创建1000000行。
已用时间: 00: 00: 37.04
LIBIN@dextrys>SELECT t.used_ublk, t.used_urec
2 FROM v$transaction t, v$session s
3 WHERE t.addr = s.taddr
4 AND s.audsid = userenv('sessionid');
USED_UBLK USED_UREC
---------- ----------
1070 7490
已用时间: 00: 00: 00.03
LIBIN@dextrys>SELECT value
2 FROM v$mystat NATURAL JOIN v$statname
3 WHERE name = 'redo size';
VALUE
----------
1251788232
已用时间: 00: 00: 00.01
说明:(direct-path insert)方式下,插入100万条数据,花费大约37秒,生成少量回滚信息(回滚信息是为维护索引而产生的),生成(1251788232-1192914920)字节redo log;
3.以(direct-path insert)方式插入数据(noarchivelog mode,nologging mode, direct-path insert)
LIBIN@dextrys>TRUNCATE TABLE t;
表被截断。
已用时间: 00: 00: 02.82
LIBIN@dextrys>ALTER TABLE t NOLOGGING;
表已更改。
已用时间: 00: 00: 00.03
LIBIN@dextrys>INSERT /*+ append */ INTO t
2 SELECT rownum AS id, rpad('*',1000,'*') AS pad
3 FROM dual
4 CONNECT BY level <= 1000000;
已创建1000000行。
已用时间: 00: 00: 36.18
LIBIN@dextrys>SELECT t.used_ublk, t.used_urec
2 FROM v$transaction t, v$session s
3 WHERE t.addr = s.taddr
4 AND s.audsid = userenv('sessionid');
USED_UBLK USED_UREC
---------- ----------
1071 7496
已用时间: 00: 00: 00.03
LIBIN@dextrys>SELECT value
2 FROM v$mystat NATURAL JOIN v$statname
3 WHERE name = 'redo size';
VALUE
----------
1311002048
已用时间: 00: 00: 00.01
说明:(direct-path insert)方式下,插入100万条数据,花费大约36秒,生成少量回滚信息(回滚信息是为维护索引而产生的),生成(1311002048-1251788232)字节redo log;
2和3的比较说明了:即使没有使用最小日志模式,在非归档(noarchivelog)模式下运行的数据库也不会为直接路径插入操作生成重做日志.
4.以(direct-path insert)方式插入数据(noarchivelog mode,nologging mode, direct-path insert),且删除表上的索引
LIBIN@dextrys>TRUNCATE TABLE t;
表被截断。
已用时间: 00: 00: 03.07
LIBIN@dextrys>alter table t drop constraint t_pk ;
表已更改。
已用时间: 00: 00: 00.48
LIBIN@dextrys>SELECT value
2 FROM v$mystat NATURAL JOIN v$statname
3 WHERE name = 'redo size';
VALUE
----------
1311588524
已用时间: 00: 00: 00.07
LIBIN@dextrys>ALTER TABLE t NOLOGGING;
表已更改。
已用时间: 00: 00: 00.01
LIBIN@dextrys>INSERT /*+ append */ INTO t
2 SELECT rownum AS id, rpad('*',1000,'*') AS pad
3 FROM dual
4 CONNECT BY level <= 1000000;
已创建1000000行。
已用时间: 00: 00: 25.68
LIBIN@dextrys>SELECT t.used_ublk, t.used_urec
2 FROM v$transaction t, v$session s
3 WHERE t.addr = s.taddr
4 AND s.audsid = userenv('sessionid');
USED_UBLK USED_UREC
---------- ----------
1 1
已用时间: 00: 00: 00.03
LIBIN@dextrys>SELECT value
2 FROM v$mystat NATURAL JOIN v$statname
3 WHERE name = 'redo size';
VALUE
----------
1312384532
已用时间: 00: 00: 00.01
说明:删除表上的索引以后,(direct-path insert)方式下,插入100万条数据,花费大约26秒,生成少量回滚信息为1,生成(1312384532-1311002048)字节redo log;以上说明了若表上有索引,在执行DML时,索引段上会生成回滚信息,如果要加快操作速度,避免生成索引相关的回滚,可以在加载数据之前将索引改为不可用,并在加载之后来重建这些索引.
在执行直接路径插入的过程中,高水位不会被提高.只有到提交事务的时候才会执行这个操作.因此,在加载之后提交(或回滚)事务之前,执行直接路径插入的会话无法访问被修改的表.在提交(或回滚)之前执行的SQL语句会终止执行,并报一个"ORA-12838"错误.
LIBIN@dextrys>select count(*) from t;
select count(*) from t
*
第 1 行出现错误:
ORA-12838: 无法在并行模式下修改之后读/修改对象
已用时间: 00: 00: 00.06
LIBIN@dextrys>commit;
提交完成。
已用时间: 00: 00: 00.06
LIBIN@dextrys>select count(*) from t;
COUNT(*)
----------
1000000
已用时间: 00: 00: 22.09
发表评论
-
sqlldr总结参数介绍
2012-06-28 14:29 22832有效的关键字: userid -- ORACLE use ... -
11gR2新特性:STANDBY_MAX_DATA_DELAY
2011-12-27 11:18 1221Active Data Guard 是 Oracle 11g ... -
Linux下用OCCI或OCI连接Oracle
2011-07-26 12:00 2906首先,去oracle官网下载C ... -
Oracle Mutex实现机制
2011-05-18 23:43 1071我们都知道Latch是Oracle ... -
local_listener参数作用
2011-05-10 17:19 1931pmon只会动态注册port等于1521的监听,否则 ... -
oracle伪列 rowid和rownum
2011-03-23 10:00 3540整理ROWID一 一,什么是伪列RowID?1,首先是一种数 ... -
Oracle10gR2 主备自动切换之客户端Failover配置
2011-01-20 10:32 9521. 主库检查和设置假设新增的服务名为ORCL_TAF.LK. ... -
Oracle10g配置Dataguard的相关参数解释
2011-01-20 10:24 1271参考自 http://space.itpub.ne ... -
wrap加密oracle包
2011-01-19 11:52 1298大家都知道oracle的很多系统包是没法看它的源码的,orac ... -
利用hcheck检查数据字典一致性状态
2011-01-17 17:42 1820利用hcheck可以检查oracle数据字典的一致性状态,主要 ... -
插入相同的数据量普通表和临时表产生的redo对比
2011-01-17 16:08 988往临时表里插入相同量 ... -
Database Link与GLOBAL_NAMES参数
2011-01-12 13:36 1032当GLOBAL_NAMES参数设置为TRUE时,使用DATAB ... -
Oracle Streams学习二(清除流配置)
2011-01-09 23:34 1182在完成streams部署之后,如果需要重新配置或舍弃配置,可以 ... -
red hat enterprise 下完全删除oracle 数据库
2011-01-05 01:28 1759步骤 1 以oracle用户登录主、备节点。步骤 2 ... -
Oracle常用dump命令
2010-12-20 00:31 834Oracle常用dump命令,记录一下备查。 一.M ... -
oracle执行DML(事物过程)的深入研究(二)
2010-12-14 15:02 1541接上一节的 oracle执行DML(事物过程)的深入研究(一) ... -
oracle执行DML(事物过程)的深入研究(一)
2010-12-14 10:26 2804用户所执行 DML (即执行事务)操作在 Oracle 内部按 ... -
Oracle基本数据类型存储格式研究(二)—数字类型
2010-12-14 00:35 1473数字类型包含number,intege ... -
Oracle基本数据类型存储格式研究(一)—字符类型
2010-12-13 23:32 11731.char char是定长字符型,内部代码是:96,最多可 ... -
关于oracle rowid的一些内容 -- 转载
2010-12-13 15:47 782本文讨论的是关于oracle ...
相关推荐
同时,Direct-Path插入只适用于INSERT INTO...SELECT语句,不适用于单行插入。 8. **Nologging选项**:在归档模式下,配合`NLOGGING`属性使用Direct-Path插入,可以显著减少重做日志的生成,进一步提高性能。但在非...
- Direct-Path插入是一种特殊的数据加载机制,它可以极大地提高插入性能。 - 特点包括: - 只适用于`INSERT...SELECT`语句。 - 不记录重做日志,有助于减少恢复时的工作量。 - 直接在表段的高水位线以上写入...
rows = Number of rows in conventional path bind array or between direct path data saves nolog = no logging方式导入 (默认FALSE) Export Valid Keywords: query = select语句,只支持单表查询 table = ...
- 0000507: Direct filename or image URL for TUniImage - 0000733: TUniScreenMask with a TUniPageControl does not work - 0000734: AutoScroll property for UniHTMLFrame - 0000680: The Alignment ...
│ Oracle Direct-Path Insert学习笔记 - NyThing的Java日记 - JavaEye技术网站.mht │ oracle 常用傻瓜1000问 - oracle10g - 小呵呵.mht │ oracle 常用傻瓜1000问 - oracle10g - 小呵呵.mht.lnk │ ORACLE 面试...
使用该包前,确保已启用“direct path insert”权限,然后调用如下: ```plsql BEGIN DBMS_BULK_INSERT(target_table => 'YOUR_TABLE', file_name => 'path_to_your_data_file.csv', badfile => 'path_to_your_...
23. -path(o)- = -pat(i)- = -pass(i)- = -pathy-:感受、受苦的;例如:pathetic(感人的)、sympathy(同情) 24. -strain- = -strict- = -stress- = -string- = -strang-:拉紧;例如:strain(拉紧)、stress...
这种插入方式被称为 **Append Mode** 或 **Direct Path Insert**。它能显著提高大数据量插入的效率,尤其是在归档模式与非归档模式下对日志和undo数据的影响。 #### 二、Append Mode 插入特点 ##### 1. 日志记录...
Now it is possible to define is the drawing take place via WMPaint or via the PaintTo direct call (if rcPaint contain non-empty rectangle then WMPaint in progress). - FIX: The TFlexPanel.FPaintCache ...
Exadata的OLAP系统中的EHCC(Hybrid Columnar Compression)是一种混合柱状压缩技术,它能够提高数据的存储效率,尤其在Direct Path Load以及在支持DIRECT选项的Impdp或Direct Path Insert操作中。然而,使用HCC时...
- 使用Oracle特定的JDBC特性,如Direct Path Insert,批量操作等。 7. **错误处理和诊断**: Oracle JDBC驱动提供了详细的异常处理机制,可以帮助开发者快速定位和解决问题。通过日志记录和监控工具,可以对...
6. **Direct Path Insert**:优化了大量数据插入性能,通过跳过缓冲区高速缓存直接写入数据文件,显著提升了大数据量导入的速度。 7. ** flashback技术**:包括Flashback Query、Flashback Table和Flashback ...
- **Conventional Path Load与Direct Path Load**: Direct Path Load速度更快但不支持所有数据类型和选项。 - **SPOOL导出文本数据方法**: 可用于导出查询结果到文件中。 **2.3 脚本** - **将表中数据记录导出为...
TDateEdit and TDBDateEdit (data-aware version) allows direct typing and has a button to bring up calendar in popup window (combo-box alike) or in a dialog. TQBEQuery enables Delphi applications to ...
7. Direct Path Insert:Oracle的一种内部机制,直接将数据写入数据文件,跳过缓存和redo日志,速度极快。但这种方法会清空表,且不触发触发器、约束和索引,适用于初始化或全量替换数据的场景。 影响数据导入速度...
5. **导出参数**:检查`expdp`命令中是否指定了正确的参数,特别是`DIRECT_PATH_NO_LOG`和`FULL`选项。如果在导出时使用了这些选项,可能需要在导入时也使用相应的参数。 6. **权限问题**:确认执行导入操作的用户...
8. **使用 Direct Path 插入**:在插入大量 LOB 数据时,使用 Direct Path 插入可以显著提高性能。这可以通过 SQL*Loader 或 `INSERT /*+ APPEND */` 语句实现。 9. **优化查询计划**:确保数据库优化器选择最优的...
高效的导入脚本会考虑如何最大限度地利用系统资源,比如调整并行度、启用Direct Path Insert等。 “超好用”的脚本可能包含了自动化和定制化功能,例如自动定时执行、根据环境变量动态配置备份路径、邮件通知结果等...