ALTER TABLE ... DROP PARTITION (10.2)

Andrew Max
Дата: 01.06.2006 19:36:22
Известно, что операции удаления и слияния партиций в партиционированной таблице переводят зависимые объекты в инвалидное состояние. Однако случайно наткнулся вот на эту тему, где автор утверждает, что
tolik1234
В 10.2 … package остался валидным.


Просьба к тем, у кого прямо сейчас под рукой имеется 10.2: выполнить нижеследующий тест и выложить результаты.

SQL> select * from v$version where rownum = 1;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.6.0 – Production

SQL> create table part_test
  2    (
  3     part_col varchar2(10),
  4     some_other_col varchar2(10)
  5    )
  6    partition by list (part_col)
  7    (
  8     partition P_1 values ('1'),
  9     partition P_2 values ('2')
 10    );

Таблица создана.

SQL> create or replace view v_part_test as
  2  select * from part_test;

Представление создано.

SQL> create or replace package pkg_test as
  2    g_SomeVar part_test%rowtype;
  3    procedure SomeProc;
  4  end;
  5  /

Пакет создан.

SQL> create or replace package body pkg_test as
  2
  3  procedure SomeProc is
  4    l_SomeVar part_test%rowtype;
  5  begin
  6    null;
  7  end;
  8
  9  end;
 10  /

Тело пакета создано.

SQL> column object_name format a40
SQL>
SQL> select o.object_name,
  2         o.object_type,
  3         o.status
  4    from user_objects o
  5   where o.object_name in ('V_PART_TEST', 'PKG_TEST');

OBJECT_NAME                              OBJECT_TYPE        STATUS
---------------------------------------- ------------------ -------
PKG_TEST                                 PACKAGE            VALID
PKG_TEST                                 PACKAGE BODY       VALID
V_PART_TEST                              VIEW               VALID

SQL> alter table part_test drop partition p_1;

Таблица изменена.

SQL> select o.object_name,
  2         o.object_type,
  3         o.status
  4    from user_objects o
  5   where o.object_name in ('V_PART_TEST', 'PKG_TEST');

OBJECT_NAME                              OBJECT_TYPE        STATUS
---------------------------------------- ------------------ -------
PKG_TEST                                 PACKAGE            INVALID
PKG_TEST                                 PACKAGE BODY       INVALID
V_PART_TEST                              VIEW               INVALID

SQL>

Спасибо заранее.
orawish
Дата: 01.06.2006 19:46:15
SQL*Plus: Release 10.2.0.1.0 - Production on Чт Июн 1 19:45:27 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Присоединен к:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select * from v$version where rownum = 1;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

SQL>
SQL>  create table part_test
  2    (
  3     part_col varchar2(10),
  4     some_other_col varchar2(10)
  5    )
  6    partition by list (part_col)
  7    (
  8     partition P_1 values ('1'),
  9     partition P_2 values ('2')
 10    );

Таблица создана.

SQL>
SQL> create or replace view v_part_test as
  2  select * from part_test;

Представление создано.

SQL>
SQL> create or replace package pkg_test as
  2    g_SomeVar part_test%rowtype;
  3    procedure SomeProc;
  4  end;
  5  /

Пакет создан.

SQL>
SQL> create or replace package body pkg_test as
  2
  3  procedure SomeProc is
  4    l_SomeVar part_test%rowtype;
  5  begin
  6    null;
  7  end;
  8
  9  end;
 10  /

Тело пакета создано.

SQL>
SQL> column object_name format a40
SQL>
SQL> select o.object_name,
  2         o.object_type,
  3         o.status
  4    from user_objects o
  5   where o.object_name in ('V_PART_TEST', 'PKG_TEST');

OBJECT_NAME                              OBJECT_TYPE         STATUS
---------------------------------------- ------------------- -------
PKG_TEST                                 PACKAGE             VALID
PKG_TEST                                 PACKAGE BODY        VALID
V_PART_TEST                              VIEW                VALID

SQL>
SQL> alter table part_test drop partition p_1;

Таблица изменена.

SQL>
SQL> select o.object_name,
  2         o.object_type,
  3         o.status
  4    from user_objects o
  5   where o.object_name in ('V_PART_TEST', 'PKG_TEST');

OBJECT_NAME                              OBJECT_TYPE         STATUS
---------------------------------------- ------------------- -------
PKG_TEST                                 PACKAGE             VALID
PKG_TEST                                 PACKAGE BODY        VALID
V_PART_TEST                              VIEW                VALID
Babon
Дата: 01.06.2006 19:52:21
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> @drop_part_test.sql
SQL>
SQL> select * from v$version where rownum = 1;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod

SQL>
SQL> create table part_test
  2    (
  3     part_col varchar2(10),
  4     some_other_col varchar2(10)
  5    )
  6    partition by list (part_col)
  7    (
  8     partition P_1 values ('1'),
  9     partition P_2 values ('2')
 10    );

Table created.

SQL>
SQL> create or replace view v_part_test as
  2  select * from part_test;

View created.

SQL>
SQL> create or replace package pkg_test as
  2    g_SomeVar part_test%rowtype;
  3    procedure SomeProc;
  4  end;
  5  /

Package created.

SQL>
SQL> create or replace package body pkg_test as
  2
  3  procedure SomeProc is
  4    l_SomeVar part_test%rowtype;
  5  begin
  6    null;
  7  end;
  8
  9  end;
 10  /

Package body created.

SQL>
SQL> column object_name format a40
SQL>
SQL> select o.object_name,
  2         o.object_type,
  3         o.status
  4    from user_objects o
  5   where o.object_name in ('V_PART_TEST', 'PKG_TEST');

OBJECT_NAME                              OBJECT_TYPE         STATUS
---------------------------------------- ------------------- -------
PKG_TEST                                 PACKAGE             VALID
PKG_TEST                                 PACKAGE BODY        VALID
V_PART_TEST                              VIEW                VALID

SQL>
SQL> alter table part_test drop partition p_1;

Table altered.

SQL>
SQL> select o.object_name,
  2         o.object_type,
  3         o.status
  4    from user_objects o
  5   where o.object_name in ('V_PART_TEST', 'PKG_TEST');

OBJECT_NAME                              OBJECT_TYPE         STATUS
---------------------------------------- ------------------- -------
PKG_TEST                                 PACKAGE             VALID
PKG_TEST                                 PACKAGE BODY        VALID
V_PART_TEST                              VIEW                VALID

SQL>
Andrew Max
Дата: 01.06.2006 19:57:50
orawish
SQL*Plus: Release 10.2.0.1.0 - Production on Чт Июн 1 19:45:27 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

...

SQL> alter table part_test drop partition p_1;

Таблица изменена.

SQL>
SQL> select o.object_name,
  2         o.object_type,
  3         o.status
  4    from user_objects o
  5   where o.object_name in ('V_PART_TEST', 'PKG_TEST');

OBJECT_NAME                              OBJECT_TYPE         STATUS
---------------------------------------- ------------------- -------
PKG_TEST                                 PACKAGE             VALID
PKG_TEST                                 PACKAGE BODY        VALID
V_PART_TEST                              VIEW                VALID


Хм.
Большое спасибо всем, кто ответил.

P.S. И тем не менее, что все это означает?
Вот, нашел на Металинке Bug 2812987, однако в документе говорится о том, что инвалидация после DROP PARTITION есть "not a bug, but expected behavior". Собственно, статус у этого документа "Closed, not a bug".

Ничего не понимаю.
Если это преднамеренное изменение в 10.2, то документировано ли оно где-либо???

Буду признателен, если у кого-либо есть информация на этот счет.