Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исправить INVALID таблицу / 7 сообщений из 7, страница 1 из 1
19.01.2022, 14:01
    #40127779
ANB-ANB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправить INVALID таблицу
Упрощенная ситуация (взял пример тут https://stackoverflow.com/questions/29962916/how-do-i-invalidate-a-table-in-oracle-11g-on-purpose] ) :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
SQL> CREATE OR REPLACE TYPE mytype AS OBJECT(col1 VARCHAR2(10))
  2  /

Type created.

SQL>
SQL> CREATE TABLE t(col1 NUMBER,col2 mytype)
  2  /

Table created.

SQL>
SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_name='T'
  2  /

OBJECT_NAME OBJECT_TYPE             STATUS
----------- ----------------------- -----------
T           TABLE                   VALID

SQL>

SQL> ALTER TYPE mytype ADD ATTRIBUTE col2 NUMBER INVALIDATE
  2  /

Type altered.

SQL>
SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_name='T'
  2  /

OBJECT_NAME OBJECT_TYPE             STATUS
----------- ----------------------- -----------
T           TABLE                   INVALID

SQL>



У меня ситуация несколько сложнее, но эффект такой же : из-за инвалидации типа статус таблиц становится INVALID.
Тип чиним и компиляем, но как исправить статус самой таблицы - нигде не нашли.

Вопрос : как исправить статус таблицы ?
Она еще и большая (несколько миллиардов записей) и не одна такая.

Убрать типизированные поля собираемся, но это не быстро. Надо много кода лопатить.
...
Рейтинг: 0 / 0
19.01.2022, 15:11
    #40127814
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправить INVALID таблицу
ANB-ANB,

Для начала:

Starting with Oracle Database 12c Release 2 (12.2), the INVALIDATE command is deprecated. Oracle recommends that you use the CASCADE clause instead.

Используй:

Код: plsql
1.
2.
ALTER TYPE mytype ADD ATTRIBUTE col2 NUMBER CASCADE NOT INCLUDING TABLE DATA
/



SY.
...
Рейтинг: 0 / 0
19.01.2022, 15:15
    #40127815
ANB-ANB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправить INVALID таблицу
SY,
За совет спасибо, сложу параметры в копилку.
Но мы другим способом загнали тип в инвалиды - editional криво включали и все сломали.
Вопрос - как теперь таблицу то исправить ? Тип уже починили.
...
Рейтинг: 0 / 0
19.01.2022, 15:42
    #40127830
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправить INVALID таблицу
ANB-ANB

Вопрос - как теперь таблицу то исправить ?


Банальным select'ом:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
SQL> CREATE OR REPLACE TYPE mytype AS OBJECT(col1 VARCHAR2(10))
  2  /

Type created.

SQL> CREATE TABLE t(col1 NUMBER,col2 mytype)
  2  /

Table created.

SQL> ALTER TYPE mytype ADD ATTRIBUTE col2 NUMBER INVALIDATE
  2  /

Type altered.

SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_name='T'
  2  /

OBJECT_NAME                    OBJECT_TYPE             STATUS
------------------------------ ----------------------- -------
T                              TABLE                   INVALID

SQL> SELECT  *
  2    FROM  T
  3    WHERE 1 = 2
  4  /

no rows selected

SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_name='T'
  2  /

OBJECT_NAME                    OBJECT_TYPE             STATUS
------------------------------ ----------------------- -------
T                              TABLE                   VALID

SQL>



SY.
...
Рейтинг: 0 / 0
19.01.2022, 18:53
    #40127907
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправить INVALID таблицу
SYБанальным select'ом:
ANB-ANBeditional криво включали и все сломали
В зависимости от кривизны рук, банального select-а может не хватить.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
SQL> create user u identified by u;

User created.

SQL>
SQL> create type u.typ as object (
  2    x int);
  3  /

Type created.

SQL>
SQL> create table u.t (
  2    id int,
  3    typ_ u.typ);

Table created.

SQL>
SQL> alter user u enable editions;
alter user u enable editions
*
ERROR at line 1:
ORA-38819: user U owns one or more objects whose type is editionable and that
have noneditioned dependent objects


SQL> alter user u enable editions force;

User altered.

SQL>
SQL> select * from u.t;
select * from u.t
                *
ERROR at line 1:
ORA-04063: table "U.T" has errors


SQL> select id from u.t;
select id from u.t
                 *
ERROR at line 1:
ORA-04063: table "U.T" has errors


С 12.1 добавили editionable свойство уровня объекта, до этого делили на схемы с данными и схемы с кодом.
https://docs.oracle.com/database/121/NEWFT/chapter12101.htm#FEATURENO09998
...
Рейтинг: 0 / 0
19.01.2022, 22:25
    #40127949
ANB-ANB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправить INVALID таблицу
SeaGate,
Спасибо. Ровно так и навернули. И обратно уже никак.
Починили тип, грохнули таблицу, создали заново, данные потеряли.
Других вариантов починки нет ?
...
Рейтинг: 0 / 0
19.01.2022, 23:19
    #40127957
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправить INVALID таблицу
ANB-ANB

Других вариантов починки нет ?

Самый быстрый и надежный - восстановить БД из backup, данные перелить.
Можете обратиться к поддержке Oracle, у них много разных инструментов для восстановления инвалидного.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исправить INVALID таблицу / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]