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