我正在研究PostGreSQL,我看到了一个未记录的表的例子。 Oracle中是否有类似的资源? 我在Oracle中有一个小提取器,该日记填充表格然后生成一个文本文件。之后,此表将被清除,但不会被删除。 我明白这个"临时表"可能没有记录,因为它根本不是商业表。
答案 0 :(得分:0)
可以将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.