2016-05-03 2 views
0

Я изучаю PostGreSQL, и я видел пример таблицы с разметкой. Есть ли аналогичный ресурс в Oracle? У меня есть небольшой экстрактор в Oracle, этот дневник заполняет таблицу, затем создает текстовый файл. После этого эта таблица очищается, но не отбрасывается. Я понимаю, что эта «временная таблица» может быть разблокирована, потому что это вовсе не бизнес-стол.Unlogged table в Oracle

ответ

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.