powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / При сборе статистики "ORA-01722: invalid number"
25 сообщений из 51, страница 1 из 3
При сборе статистики "ORA-01722: invalid number"
    #40012603
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
08:20:59 SQL> exec dbms_stats.gather_table_stats('DATA','USERS',method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE REPEAT', cascade=>true);
BEGIN dbms_stats.gather_table_stats('DATA','USERS',method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE REPEAT', cascade=>true); END;

*
ERROR at line 1:
ORA-12801: error signaled in parallel query server P004
ORA-01722: invalid number
ORA-06512: at "SYS.DBMS_STATS", line 23829
ORA-06512: at "SYS.DBMS_STATS", line 23880
ORA-06512: at line 1


Elapsed: 00:00:01.28



по этой таблице виртуальные столбцы:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
09:24:55 SQL> select col#,INTCOL#, name,TYPE#,DEFAULT$ ,property from col$ where OBJ#=1122418 and col# = 0;

      COL#    INTCOL# NAME				  TYPE# DEFAULT$									   PROPERTY
---------- ---------- ------------------------------ ---------- -------------------------------------------------------------------------------- ----------
	 0	   46 SYS_NC00046$			      2 TO_NUMBER(SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8))			     327976
	 0	   45 SYS_NC00045$			      2 TO_NUMBER("ID_USER")								     327976
	 0	   47 SYS_NC00047$			      2 TO_NUMBER(SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8))			     327976




Когда-то я создавал function-based индексы. Потом удалил. Но почему-то остались эти столбцы.
Недавно обнаружил ошибки в алерт-логе.


Подсчет числа строк по двум столбцам дает ошибку:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
09:19:38 SQL> select count("SYS_NC00045$") from data.users;

COUNT("SYS_NC00045$")
---------------------
	      1404864

Elapsed: 00:00:00.40
09:20:50 SQL> select count("SYS_NC00046$") from data.users;
select count("SYS_NC00046$") from mt4data.users
          *
ERROR at line 1:
ORA-01722: invalid number


Elapsed: 00:00:00.00
09:20:56 SQL> select count("SYS_NC00047$") from data.users;
select count("SYS_NC00047$") from mt4data.users
          *
ERROR at line 1:
ORA-01722: invalid number


Elapsed: 00:00:00.00




Как бы преодолеть эти ошибки?
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012608
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дропнуть эти атрибуты пробовали?
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012622
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski,

поменять ф-лу (убрать to_number) не пущает?

ALTER TABLE zzz MODIFY ...

.....
stax
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012624
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

не пробовал. Это как?

Так?
Код: plsql
1.
delete from col$ where OBJ#=1122418 and col#=0 and INTCOL# in (46,47);
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012626
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

с 'to_number' все нормально:

Код: plsql
1.
2.
3.
4.
5.
09:19:38 SQL> select count("SYS_NC00045$") from data.users;

COUNT("SYS_NC00045$")
---------------------
	      1404864



проблема с двумя другими:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
09:20:50 SQL> select count("SYS_NC00046$") from data.users;
select count("SYS_NC00046$") from mt4data.users
          *
ERROR at line 1:
ORA-01722: invalid number


Elapsed: 00:00:00.00
09:20:56 SQL> select count("SYS_NC00047$") from data.users;
select count("SYS_NC00047$") from mt4data.users
          *
ERROR at line 1:
ORA-01722: invalid number
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012639
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski
andrey_anonymous,

не пробовал. Это как?

Так?
Код: plsql
1.
delete from col$ where OBJ#=1122418 and col#=0 and INTCOL# in (46,47);


ой

alter table tab drop (column_name_list) ;


ps
я имел ввиду поменять формулы в колонках
....
stax
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012640
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski

проблема с двумя другими:


их и поменяйте (если пущает)

....
stax
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012642
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
11:46:37 SQL> alter table users drop ("SYS_NC00046$");
alter table users drop ("SYS_NC00046$")
                        *
ERROR at line 1:
ORA-12996: cannot drop system-generated virtual column


Elapsed: 00:00:00.34



Код: plsql
1.
2.
3.
4.
$ oerr ora 12996
12996, 00000, "cannot drop system-generated virtual column"
// *Cause:  An attempt was made to drop a virtual column generated by 
//          the system. 
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012657
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski
Stax,
Код: plsql
1.
ORA-12996: cannot drop system-generated virtual column


Угу. Мы из-за этого как-то довольно большую таблицу были вынуждены пересобрать.
Эти неубиваемые колонки помимо прочего влияют на операции с разделами (exchande partition).
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012667
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наивный вопрос -- после того как удалил FBI корзину не чистил?
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012670
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

вроде нет, не чистил. Это было давненько.

Сейчас чего-то лежит в корзине. Помимо меня там разработчики могут чего-то создавать-удалять

Код: plsql
1.
2.
3.
4.
5.
12:24:11 SQL> select count(1) from  dba_recyclebin;

  COUNT(1)
----------
       129



сейчас почищу. Спасибо за совет.
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012672
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

почистил, не помогло.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
12:28:56 SQL> select col#,name,TYPE#,DEFAULT$ ,property from col$ where OBJ#=1122418 and col# = 0;

      COL# NAME 			       TYPE# DEFAULT$										PROPERTY
---------- ------------------------------ ---------- -------------------------------------------------------------------------------- ----------
	 0 SYS_NC00046$ 			   2 TO_NUMBER(SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8))			  327976
	 0 SYS_NC00045$ 			   2 TO_NUMBER("ID_USER")								  327976
	 0 SYS_NC00047$ 			   2 TO_NUMBER(SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8))			  327976

Elapsed: 00:00:00.00
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012674
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, это было как первичное предположение для штатного вмешательства :(
Скорее всего, действительно придется чистить словарь ручками
Я бы протестировал на копии всякие MOVE/REBUILD (до и после правки словаря)
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012678
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, буквально недавно грешил на корзину (по поводу AQ) и в одной из нот было сказано, что PURGE DBA_RECYCLEBIN не сработает, надо зайти тем самым юзером-владельцем (речь шла про SYSTEM) и сделать PURGE RECYCLEBIN
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012684
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

да, все это делал и под изером:
Код: plsql
1.
2.
3.
4.
5.
6.
12:28:17 SQL> PURGE RECYCLEBIN;

Recyclebin purged.

Elapsed: 00:00:00.39
12:28:31 SQL> 



и под сисом:
Код: plsql
1.
2.
3.
4.
5.
6.
12:22:07 SQL> PURGE DBA_RECYCLEBIN;

DBA Recyclebin purged.

Elapsed: 00:00:01.89
12:28:43 SQL>



не помогло. Виртуальные толбцы никуда не делись:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
12:28:56 SQL> select col#,name,TYPE#,DEFAULT$ ,property from col$ where OBJ#=1122418 and col# = 0;

      COL# NAME 			       TYPE# DEFAULT$										PROPERTY
---------- ------------------------------ ---------- -------------------------------------------------------------------------------- ----------
	 0 SYS_NC00046$ 			   2 TO_NUMBER(SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8))			  327976
	 0 SYS_NC00045$ 			   2 TO_NUMBER("ID_USER")								  327976
	 0 SYS_NC00047$ 			   2 TO_NUMBER(SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8))			  327976

Elapsed: 00:00:00.00
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012686
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski
Когда-то я создавал function-based индексы. Потом удалил.
Уверен?
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012688
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
maxski
Когда-то я создавал function-based индексы. Потом удалил.
Уверен?

Виталь, я эту беду лично ловил на экзадате 12.1
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012689
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski
Stax,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
11:46:37 SQL> alter table users drop ("SYS_NC00046$");
alter table users drop ("SYS_NC00046$")
                        *
ERROR at line 1:
ORA-12996: cannot drop system-generated virtual column


Elapsed: 00:00:00.34



Код: plsql
1.
2.
3.
4.
$ oerr ora 12996
12996, 00000, "cannot drop system-generated virtual column"
// *Cause:  An attempt was made to drop a virtual column generated by 
//          the system. 



я не ДБА поетому просто подозревал что не пустит
на ALTER TABLE zzz MODIFY/ RENAME COLUMN тож сорится?


....
stax
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012695
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,


есть вариант скопировать таблицу и потом переименовать.

Либо что-то со делать со словарем.

Вот последовательность, что оракл показывает если включить трассировку 10046:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select u.name, o.name, o.namespace, o.type#, decode(bitand(i.property,1024),0,0,1), o.obj# from ind$ i,obj$ o,user$ u where i.obj#=:1 and o.obj#=i.bo# and o.owner#=u.user#

LOCK TABLE  FOR INDEX "MT4DATA"."MY_USERS_FUNC1_IDX" IN EXCLUSIVE MODE  NOWAIT

select u.name, o.name, o.namespace, o.type#, decode(bitand(i.property,1024),0,0,1), o.obj# from ind$ i,obj$ o,user$ u where i.obj#=:1 and o.obj#=i.bo# and o.owner#=u.user#

drop index mt4data.my_users_func1_idx

select text from view$ where rowid=:1



не приводил запросы к xdb и partobj$ (так как таблица непартиционирована)

какие таблицы словаря затрагиваются при 'drop' не показывает.
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012701
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

сейчас индексы такие:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  1* SELECT  INDEX_NAME, COLUMN_NAME  FROM  USER_IND_COLUMNS  WHERE  TABLE_NAME = 'USERS' ORDER BY INDEX_NAME, COLUMN_POSITION
12:36:43 SQL> /

INDEX_NAME		       COLUMN_NAME
------------------------------ ------------------------------
CK_USERS_ID_NEW 	       ID_USER
IDX_BITMAP_USERS_ID_S	       ID_SERVER
IDX_BIT_USERS_DAY_R_ID_S       DAY_RESYNC
IDX_BIT_USERS_DAY_R_ID_S       ID_SERVER
IDX_USERS_GRPID_NEW	       ID_GROUP
IDX_USERS_ID_USER	       SYS_NC00045$
IDX_USERS_ID_U_DAY_RESYNC      ID_USER
IDX_USERS_ID_U_DAY_RESYNC      DAY_RESYNC
IDX_USERS_LOGIN_NEW	       LOGIN
IDX_USERS_PCOMMENT	       PCOMMENT
IDX_USERS_REGDATE_NEW	       REGDATE
IDX_USERS_STATUS_NEW	       STATUS
SYS_C001552414		       ID_SERVER
SYS_C001552414		       LOGIN

14 rows selected.




но старые виртуальные колонки живут:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
12:29:36 SQL> select col#,name,TYPE#,DEFAULT$ ,property from col$ where OBJ#=1122418 and col# = 0;

      COL# NAME 			       TYPE# DEFAULT$										PROPERTY
---------- ------------------------------ ---------- -------------------------------------------------------------------------------- ----------
	 0 SYS_NC00046$ 			   2 TO_NUMBER(SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8))			  327976
	 0 SYS_NC00045$ 			   2 TO_NUMBER("ID_USER")								  327976
	 0 SYS_NC00047$ 			   2 TO_NUMBER(SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8))			  327976

Elapsed: 00:00:00.00
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012702
maxski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

это строчку в col$ менять?

DEFAULT$ с
Код: plsql
1.
TO_NUMBER(SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8))


на что-н другое?
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012704
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski,

у тебя индекс IDX_USERS_ID_USER явно ссылается на столбец SYS_NC00045$
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012705
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski
Stax,
это строчку в col$ менять?

Хочется экстрима - на тесте поднять копию и попробовать удалить напрочь.
Хочется штатного решения - пересоздать таблицу, если резерв пространства под данные есть.
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012708
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski,

вообще, тырнет несколько мотивов танца с бубном на эту тему дает.
Кто-то силу удара в сам бубен меняет, а кто-то пытается подпрыгивать на ритуальном ходу по кругу.

мне показался может быть сработающим такой вариант камлания:

1) удалить индексы
2) переименовать столбцы - alter table rename column
3) установить их в неиспользуемые - ALTER TABLE...SET UNUSED (columnlist)
4) дропнуть неиспользуемые с явно указанным размером батча для чекпойнта
ALTER TABLE ... DROP UNUSED COLUMNS CHECKPOINT 250;

сам не сталкивался, чисто серфинг.
если вдруг сработает, не знаю, какой из элементов танца на самом деле критический - второй или четвертый...
...
Рейтинг: 0 / 0
При сборе статистики "ORA-01722: invalid number"
    #40012710
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxski
Stax,

это строчку в col$ менять?

DEFAULT$ с
Код: plsql
1.
TO_NUMBER(SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8))


на что-н другое?


словарь править несколько стремно

но уж если править, то я б для начала убрал TO_NUMBER
на SUBSTR("PCOMMENT",INSTR("PCOMMENT",'PSUB:')+5,8)

.....
stax
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / При сборе статистики "ORA-01722: invalid number"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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