Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 partition exchange  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Версия:

+
SQL> select  *
  2    from  v$version
  3  /

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for 64-bit Windows: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

SQL> 


Почему-то считал что partition exchange будучи физической операцией выдаст ошибку если сессия 1 откроет курсор на выборку из партиции затем сессия 2 сделает partition exchange после чего сессия 1 попытается фетчить из курсора. Т.е. примерно то же что и с truncate:

+
SQL> -- session 1
SQL> truncate table range_sales;

Table truncated.

SQL> insert
  2    into range_sales
  3    select level,1,date '2000-02-01','A',1,1,1
  4      from dual
  5      connect by level <= 100
  6  /

100 rows created.

SQL> commit;

Commit complete.

SQL> variable v_cur refcursor
SQL> exec open :v_cur for select * from range_sales partition(sales_q1_2000);

PL/SQL procedure successfully completed.


+
SQL> -- session 2
SQL> alter table range_sales truncate partition sales_q1_2000; -- OR: truncate table range_sales;

Table truncated.

SQL> 


+
SQL> -- session 1
SQL> print v_cur
ERROR:
ORA-08103: object no longer exists


Oднако:

SQL> -- session 1
SQL> truncate table range_sales;

Table truncated.

SQL> insert
  2    into range_sales
  3    select level,1,date '2000-02-01','A',1,1,1
  4      from dual
  5      connect by level <= 100
  6  /

100 rows created.

SQL> commit;

Commit complete.

SQL> variable v_cur refcursor
SQL> exec open :v_cur for select * from range_sales partition(sales_q1_2000);

PL/SQL procedure successfully completed.


SQL> -- session2
SQL> truncate table range_sales_exchange;

Table truncated.

SQL> alter table range_sales
  2    exchange partition sales_q1_2000
  3    with table range_sales_exchange
  4  /

Table altered.

SQL> select  count(*)
  2    from  range_sales_exchange
  3  /

  COUNT(*)
----------
       100

SQL> select  count(*)
  2    from  range_sales partition(sales_q1_2000)
  3  /

  COUNT(*)
----------
         0

SQL> update range_sales_exchange
  2     set time_id = sysdate
  3  /

100 rows updated.

SQL> commit
  2  /

Commit complete.

SQL> 


SQL> -- session1
SQL> print v_cur

   PROD_ID    CUST_ID TIME_ID   C   PROMO_ID QUANTITY_SOLD AMOUNT_SOLD
---------- ---------- --------- - ---------- ------------- -----------
         1          1 01-FEB-00 A          1             1           1
         2          1 01-FEB-00 A          1             1           1
         3          1 01-FEB-00 A          1             1           1
         4          1 01-FEB-00 A          1             1           1
         5          1 01-FEB-00 A          1             1           1
.
.
.
        99          1 01-FEB-00 A          1             1           1

   PROD_ID    CUST_ID TIME_ID   C   PROMO_ID QUANTITY_SOLD AMOUNT_SOLD
---------- ---------- --------- - ---------- ------------- -----------
       100          1 01-FEB-00 A          1             1           1

100 rows selected.

SQL> 


SY.
P.S. Таблица range_sales из доки.

Сообщение было отредактировано: 29 ноя 12, 18:35
29 ноя 12, 18:28    [13551971]     Ответить | Цитировать Сообщить модератору
 Re: partition exchange  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Так давно уж работает. Чистили старые секции через обработку старых данных в новом сегменте и exchange partition без остановки...
29 ноя 12, 22:35    [13552903]     Ответить | Цитировать Сообщить модератору
 Re: partition exchange  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Разобрался. Partition exchange пристегивает сегмент партиции к таблице и сегмент таблицы к партиции. Курсор содержит пойнтер на сегмент партиции и чешет по нему хотя он партиции уже не принадлежит. А с update exchange таблицы я явно лоханулся. Надо было делать truncate - он же достает старые данные из undo:

SQL> -- session2
SQL> alter table range_sales
  2    exchange partition sales_q1_2000
  3    with table range_sales_exchange
  4  /

Table altered.

SQL> truncate table range_sales_exchange;

Table truncated.

SQL> 


SQL> -- session1
SQL> print v_cur
ERROR:
ORA-08103: object no longer exists



no rows selected

SQL> 


SY.
30 ноя 12, 00:55    [13553278]     Ответить | Цитировать Сообщить модератору
 Re: partition exchange  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Деев И.
Так давно уж работает. Чистили старые секции через обработку старых данных в новом сегменте и exchange partition без остановки...
не совсем понятно, что значило чистили? Ctas c фильтрацией и exchange partition понимаю, а если ctas, delete, shrink,exchange - не очень
30 ноя 12, 01:06    [13553307]     Ответить | Цитировать Сообщить модератору
 Re: partition exchange  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Да, пардон, неясно выразился.
Именно ctas c фильтрацией и exchange partition, в 8i
При этом открытые курсоры обрабатываются нормально, поскольку смена названий сегментов в словаре на них уже не влияет. Т.е. безопасно получается.
30 ноя 12, 10:55    [13554283]     Ответить | Цитировать Сообщить модератору
 Re: partition exchange  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Деев И.
Т.е. безопасно получается.


Получается partition exchange есть некая смесь физической и логической операции. Т.е. операция физическая а её последствия на read consistency как и у логической. DDL последствия которого как и у DML. Ну и конечно-же не документировано.

SY.
30 ноя 12, 19:07    [13558331]     Ответить | Цитировать Сообщить модератору
 Re: partition exchange  [new]
Серафимный Шестикрыл
Member [заблокирован]

Откуда: С луны свалился
Сообщений: 2922
SY
Получается partition exchange есть некая смесь физической и логической операции.


А что в данном случае подразумевается под физикой ? При exchange partition меняются метаданные словаря.
30 ноя 12, 19:12    [13558369]     Ответить | Цитировать Сообщить модератору
 Re: partition exchange  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Серафимный Шестикрыл
А что в данном случае подразумевается под физикой ? При exchange partition меняются метаданные словаря.


Да, ты прав никакой "физики" как например при truncate тут нет. Так-что получается что для уже открытых курсоров те же "правила" как и при alter table.

SY.
30 ноя 12, 19:57    [13558622]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить