База данных Oracle допускает недопустимую временную часть значений столбца datetime, при каких обстоятельствах?

Этот случай возникает в реальной ситуации, когда недопустимые данные находились (и продолжают поступать) в базу данных Oracle, которая извлекается в систему обработки данных в Focus. В некоторых строках с недопустимыми временными отрезками фокус задыхался и умирал. Затем администратор баз данных Oracle копирует дату и время в соответствующий столбец из исправного столбца, чтобы процесс продолжился (да, я знаю).

Я помогал в устранении проблемы и обнаружил, что в Oracle в затронутой строке:

DUMP(START_TIME)

дает:

'Typ=12 Len=7: 100,99,255,255,0,0,0'

Пока:

TO_CHAR(START_TIME, 'YYYY/MM/DD HH24:MI:SS')

дает:

ORA-01801: date format is too long for internal buffer

Глядя на результаты DUMP(), 'Typ=12 Len=7: 100,99,255,255,0,0,0' и соглашения о хранении, кажется, что они могут обойти семантические ограничения столбца и вставить эквивалент 0, -1, -1, -1, -1, -1, -1 или 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

Это имеет «смысл», поскольку 0xFF = 255 = -1 потенциально может привести к 0000/255/255 255:255:255 в зависимости от того, как вы интерпретируете байты, знаки и переполнения.

При каких условиях (механизм подключения и т. д.) Oracle разрешает ввод недопустимых данных в столбцы datetime?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
1 789
2

Ответы 2

Кажется, я не могу найти ошибку в быстром поиске в Metalink (если вы еще не открыли SR с Oracle, я бы предложил это сделать), но я знаю, что на уровне OCI (Oracle Call Interface) были ошибки, которые позволяли ошибочный код для вставки недопустимых дат. Тем не менее, по большей части эти ошибки были исправлены в течение некоторого времени, поэтому я готов поспорить, что если вы примените последний набор исправлений к клиентским машинам, которые делают вставки, проблема исчезнет.

Я бы стал, но на самом деле это не моя система, и человек, которому я помогал обойти ее, не получает должного внимания со стороны администраторов баз данных Oracle.

Cade Roux 15.10.2008 20:30

Нужны ли вам администраторы баз данных для исправления установки клиента Oracle? В некоторых организациях для этого должны быть задействованы администраторы баз данных, в других организациях это позволяет владельцам / администраторам клиентской системы.

Justin Cave 15.10.2008 21:01

Oracle обычно этого не допускает. Уровень OCI может обойти проверку типа данных - Oracle в основном полагает, что то, что вы помещаете в эти семь байтов, составляет действительную дату. Точно так же на уровне OCI Oracle может вернуть семь байтов даты, и клиентское программное обеспечение должно делать с этими байтами все, что пожелает (оставить их как есть, преобразовать в строку или номер эпохи ... ) Возможно, лучший подход - выяснить, что загружает туда данные, и посмотреть, что это делает с датами.

Если вы чувствуете себя крайне извращенным, вы можете использовать недокументированную функцию REVERSE для свидания и сделать ее недействительной.

Другие вопросы по теме