1

我正在研究 PostGreSQL,我看到了一个未记录表的示例。Oracle中有类似的资源吗?我在 Oracle 中有一个小提取器,该日记会填充一个表格,然后生成一个文本文件。之后,此表被清理,但没有被删除。我知道这个“临时表”可以被取消记录,因为它根本不是一个业务表。

4

1 回答 1

2

Oracle 表可以创建为NOLOGGING. 这类似于 PostgreSQL UNLOGGED 选项,但我确信有很多实现差异。

即使表被创建为NOLOGGING仅特定操作将使用直接路径插入(即INSERT直接写入数据文件并且不会生成太多 REDO 或 UNDO)。并且 DML 通常必须使用如下APPEND提示。如果您看到 ,则可以判断是否使用了直接路径写入LOAD AS SELECT

SQL> create table test1(a number) nologging;

Table created.

SQL> explain plan for insert /*+ append */ into test1 select 1 from dual;

Explained.

SQL> select * from table(dbms_xplan.display);
SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------
Plan hash value: 2781518217

----------------------------------------------------------------------------------
| Id  | Operation                        | Name  | Rows  | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------
|   0 | INSERT STATEMENT                 |       |     1 |     2   (0)| 00:00:01 |
|   1 |  LOAD AS SELECT                  | TEST1 |       |            |          |
|   2 |   OPTIMIZER STATISTICS GATHERING |       |     1 |     2   (0)| 00:00:01 |
|   3 |    FAST DUAL                     |       |     1 |     2   (0)| 00:00:01 |
----------------------------------------------------------------------------------

直接路径写入有许多奇怪的限制。犯一个小错误并最终使用传统刀片是很常见的。在下面的示例中,提示的语法不正确。没有错误或警告,只有解释计划显示LOAD TABLE CONVENTIONAL

SQL> explain plan for insert /* append */ into test1 select 1 from dual;

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
Plan hash value: 1388734953

--------------------------------------------------------------------------
| Id  | Operation                | Name  | Rows  | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | INSERT STATEMENT         |       |     1 |     2   (0)| 00:00:01 |
|   1 |  LOAD TABLE CONVENTIONAL | TEST1 |       |            |          |
|   2 |   FAST DUAL              |       |     1 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

9 rows selected.
于 2016-05-03T23:56:20.347 回答