APPEND HINTS 总结: APPEND 属于direct insert。归档模式下append+table nologging会大量减少日志, 非归档模式append会大量减少日志,append方式插入只会产生很少的undo。 APPEND的优势: 一是减少对空间的搜索,直接在高水位之上插入。 二是NOLOGGING会大大减少redo log的产生。 缺点: 浪费空间,使表的空间占用量大大增加。除非表只增加不删除。 普通INSERT 默认会从delete掉的空块中插入数据。 --以下是是测试: --ORACLE版本 SQL> SELECT * FROM V$VERSION; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod PL/SQL Release 10.2.0.1.0 - Production CORE 10.2.0.1.0 Production TNS for 32-bit Windows: Version 10.2.0.1.0 - Production NLSRTL Version 10.2.0.1.0 - Production ----非归档模式, SQL> SELECT NAME,LOG_MODE FROM V$DATABASE; NAME LOG_MODE --------- ------------ ORCL NOARCHIVELOG --创建两个测试表 SQL> CREATE TABLE T1 TABLESPACE TEST AS SELECT * FROM DBA_OBJECTS WHERE 1=2; 表已创建。 SQL> CREATE TABLE T2 TABLESPACE TEST AS SELECT * FROM DBA_OBJECTS WHERE 1=2; 表已创建。 --记录当前的sesison的redo size SQL> SELECT A.SID,B.NAME,A.VALUE FROM V$MYSTAT A, V$STATNAME B WHERE A.STATISTIC# = B.STATISTIC# 2 AND B.STATISTIC# = 134; SID NAME VALUE ---------- ----------------------- ---------- 144 redo size 89016 ----普通insert SQL> INSERT INTO T1 SELECT * FROM DBA_OBJECTS; 已创建52019行。 SQL> COMMIT; 提交完成。 ----查看产生的redo size。(减去上面的redo size 89016,值为 5928472) SQL> SELECT A.SID,B.NAME,A.VALUE FROM V$MYSTAT A, V$STATNAME B WHERE A.STATISTIC# = B.STATISTIC# 2 AND B.STATISTIC# = 134; SID NAME VALUE ---------- ----------------------- ---------- 144 redo size 6017488 ---append模式的 insert语句 SQL> INSERT /*+ APPEND */INTO T2 SELECT * FROM DBA_OBJECTS; 已创建52018行。 SQL> COMMIT; 提交完成。 --查看产生的redo size。(减去上面的redo size 6017488,值为 63584) SQL> SELECT A.SID,B.NAME,A.VALUE FROM V$MYSTAT A, V$STATNAME B WHERE A.STATISTIC# = B.STATISTIC# 2 AND B.STATISTIC# = 134; SID NAME VALUE ---------- --------------------------- ---------- 144 redo size 6081072 ---修改数据库为归档模式,测试append的影响 SQL> SHUTDOWN IMMEDIATE SQL> STARTUP MOUNT ORACLE 例程已经启动。 SQL> ALTER DATABASE ARCHIVELOG; SQL> ALTER DATABASE OPEN; SQL> SELECT NAME,LOG_MODE FROM V$DATABASE; NAME LOG_MODE --------- ------------ ORCL ARCHIVELOG ----截断表 SQL> TRUNCATE TABLE T1; 表被截断。 SQL> TRUNCATE TABLE T2; 表被截断。 ---查看当前redo size SQL> SELECT A.SID,B.NAME,A.VALUE FROM V$MYSTAT A, V$STATNAME B WHERE A.STATISTIC# = B.STATISTIC# 2 AND B.STATISTIC# = 134; SID NAME VALUE ---------- --------------------------- ---------- 159 redo size 0 --普通insert 产生的redo size 5830728 SQL> INSERT INTO T1 SELECT * FROM DBA_OBJECTS; 已创建52018行。 SQL> COMMIT; 提交完成。 SQL> SELECT A.SID,B.NAME,A.VALUE FROM V$MYSTAT A, V$STATNAME B WHERE A.STATISTIC# = B.STATISTIC# 2 AND B.STATISTIC# = 134; SID NAME VALUE ---------- ------------------------- ---------- 159 redo size 5830728 --修改表t2为nologging的属性,记录当前redo size SQL> alter table t2 nologging; 表已更改。 SQL> SELECT A.SID,B.NAME,A.VALUE FROM V$MYSTAT A, V$STATNAME B WHERE A.STATISTIC# = B.STATISTIC# 2 AND B.STATISTIC# = 134; SID NAME VALUE ---------- --------------- ---------- 159 redo size 11796512 --APPEND 模式 insert 产生的redo size 为63616(11860128-11796512) SQL> INSERT /*+ APPEND */INTO T2 SELECT * FROM DBA_OBJECTS; 已创建52018行。 SQL> commit; 提交完成。 SQL> SELECT A.SID,B.NAME,A.VALUE FROM V$MYSTAT A, V$STATNAME B WHERE A.STATISTIC# = B.STATISTIC# 2 AND B.STATISTIC# = 134; SID NAME VALUE ---------- --------------- ---------- 159 redo size 11860128 --修改表 t2 logging的模式 SQL> ALTER TABLE T2 LOGGING; 表已更改。 另外对nologging的一点使用记录: DML statements (UPDATE, DELETE, and conventional path insert) are unaffected by the NOLOGGING attribute of the table and generate redo. The logging_clause lets you specify whether creation of a database object will be logged in the redo log file (LOGGING) or not (NOLOGGING). You can specify the logging_clause in the following statements: CREATE TABLE and ALTER TABLE CREATE INDEX and ALTER INDEX CREATE MATERIALIZED VIEW and ALTER MATERIALIZED VIEW CREATE MATERIALIZED VIEW LOG and ALTER MATERIALIZED VIEW LOG CREATE TABLESPACE and ALTER TABLESPACE SQL*Loader and direct load INSERT operations This has the following benefits: Space is saved in the redo log files. The time it takes to create the table is decreased. Performance improves for parallel creation of large tables.
相关推荐
### Oracle Append 模式详解 #### 一、概述 在Oracle数据库中,`/*append*/` 是一种特殊的提示,用于指示数据库使用特定的方式执行插入操作。这种插入方式被称为 **Append Mode** 或 **Direct Path Insert**。它能...
Oracle Hints是Oracle数据库中一种用于优化SQL查询的工具。它们允许数据库管理员和开发人员提供关于如何执行SQL语句的提示,以此来改善查询性能。Oracle Hints在处理复杂SQL语句或特定类型的数据库操作时尤其有用,...
【Vue.js 开源库——Vue-append 深度解析】 Vue.js 是一款广泛使用的前端JavaScript框架,它以其轻量级、高效以及易于学习的特点深受开发者喜爱。在Vue.js的生态系统中,存在许多优秀的开源库,它们扩展了Vue的核心...
Append原理是Oracle数据库中的一种高效插入数据的方法。它通过绕过回滚段,减少了undo和redo的生成,从而提高了数据插入的速度。 Append原理的主要特点是: 1. 绕过回滚段:Append操作不操作回滚段,这使得数据...
append()函数在jQuery中被广泛用于向选定的元素内部追加内容,这是一个非常方便的操作,可以帮助开发者以非常简单的方式动态生成网页内容。然而,在特定的情况下,append()函数可能会出现一些意外的行为。 首先,...
对于HDFS的写入器,`defaultFS`是HDFS的默认文件系统地址,`path`指定数据保存的目录,`fileName`是生成文件的名称,`fileType`定义文件类型,如文本或二进制,`writeMode`可以是“append”、“overwrite”等。...
本文将详细介绍在ArcGIS中如何进行“append面图层”的操作,即如何将多个面图层合并成一个单一的图层,同时保持或更新属性表。 首先,我们可以采用ArcToolbox中的工具来实现这一目标。在ArcToolbox中,找到...
### Java代码实现Oracle数据库批量插入的关键知识点 #### 1. JDBC连接配置 - **JDBC URL**: `jdbc:oracle:thin:@IP:1521:orcl`,这里的URL指定了连接到Oracle数据库的方式。其中`@IP:1521:orcl`中的IP是指数据库...
本主题聚焦于`O_APPEND`标志和`lseek`函数在文件访问中的行为,特别是它们如何影响读写操作。 `O_APPEND`是一个在`open`函数中使用的标志,用于指定打开文件的方式。如果设置了这个标志,每次对文件进行写操作(如`...
Oracle数据库系统中,`DBMS_LOB`是一个重要的PL/SQL包,专门用于处理大型对象(LOBs,Large Object)。LOBs是Oracle提供的一种数据类型,用于存储大量数据,如文本、图像、音频或视频文件等。这个包包含了各种过程和...
"appendData异步加载大数据量分片加载数据和增量渲染的解决方案"是Echarts为优化性能提供的一种高效策略,尤其适用于展示百万级甚至千万级的数据集。本文将深入探讨这一高级进阶技巧。 首先,我们来理解"appendData...
在Java编程中,连接Oracle数据库并实现分页显示是一项常见的任务。这涉及到对数据库的查询操作,特别是当数据量较大时,为了提高用户体验和系统性能,分页展示数据显得尤为重要。Oracle数据库支持多种方式进行分页,...
sb.Append(guidBytes[i].ToString("x2")); } return sb.ToString().ToLower(); // Oracle通常要求十六进制字符串小写 } } // 使用示例 Guid myGuid = Guid.NewGuid(); string oracleFormat = ...
Append.c源文件
OracleTable1.Append; OracleTable1.FieldByName('employee_name').Value := '张三'; OracleTable1.FieldByName('salary').Value := 5000; OracleTable1.Post; ``` 3. **更新(UPDATE)**:修改现有记录时,先...
df.to_sql('your_table_name', connection, if_exists='append', index=False) # 关闭连接 connection.close() ``` 在这个过程中,需要注意几个关键点: - 确保Excel文件的编码与数据库字段的类型匹配,例如日期、...
- **Append**: 向当前编辑器中追加内容。 - **Run**: 执行当前编辑器中的内容。 - **Save**: 保存SQL脚本到文件。 - **Edit**: 进入编辑模式。 - **Spool**: 将查询结果导出到文件。 - **Set Pagesize**: 设置页面...
在 Delphi 中调用 Oracle 存储过程是数据库应用程序开发中的常见操作,特别是在报表解决方案中。Oracle 存储过程能够封装复杂的 SQL 语句和业务逻辑,提高代码的可维护性和执行效率。以下是如何在 Delphi 中使用 ...