powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исправить INVALID таблицу
7 сообщений из 7, страница 1 из 1
Исправить INVALID таблицу
    #40127779
ANB-ANB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упрощенная ситуация (взял пример тут 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
Исправить INVALID таблицу
    #40127814
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Исправить INVALID таблицу
    #40127815
ANB-ANB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
За совет спасибо, сложу параметры в копилку.
Но мы другим способом загнали тип в инвалиды - editional криво включали и все сломали.
Вопрос - как теперь таблицу то исправить ? Тип уже починили.
...
Рейтинг: 0 / 0
Исправить INVALID таблицу
    #40127830
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Исправить INVALID таблицу
    #40127907
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Исправить INVALID таблицу
    #40127949
ANB-ANB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeaGate,
Спасибо. Ровно так и навернули. И обратно уже никак.
Починили тип, грохнули таблицу, создали заново, данные потеряли.
Других вариантов починки нет ?
...
Рейтинг: 0 / 0
Исправить INVALID таблицу
    #40127957
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ANB-ANB

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

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


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