У меня свежая установка Oracle 11gr2_x64 на CentOS. После установки я захотел работать продуктивно и начал импортировать свои дампы. Один из дампов вызвал ошибку набора символов, поэтому я попытался изменить набор символов системы на тот, который указан в дампе.
Я выполнил такое заявление:
UPDATE nls_database_parameters SET parameter='WS....' WHERE parameter=’NLS_CHARACTERSET’;
Как видите: я записал значение набора символов в столбец параметров вместо столбца значений. Думаю, я просто слишком много думал о проблеме, вместо того, чтобы проверять, что там набираю. После запроса параметр «NLS_CHARACTERSET» пропадает, и сервер сообщает, что набор символов равен «(ноль)».
Я хочу вернуть параметр «NLS_CHARACTERSET» в таблицу, но не знаю как. Если я попытаюсь сделать что-то подобное
INSERT INTO nls_database_parameters (PARAMETERS, VALUE) VALUES ("NLS_CHARACTERSET", "AL32UTF8");
Я получаю сообщение об ошибке:
Fehler bei Befehlszeile:1 Spalte:84
Fehlerbericht:
*Cause: SQL-Fehler: ORA-00984: Spalte hier nicht zulässig
*Action: 00984. 00000 - "column not allowed here"
Извините, что сообщение об ошибке на немецком языке, но содержит код ошибки Oracle.
Ты хоть представляешь, как я могу это исправить?
Спасибо и всего наилучшего
Марко
Ваша первая ошибка - изменить объект, принадлежащий SYS. Вы не должны ОБНОВЛЯТЬ / УДАЛИТЬ / ОБРЕЗАТЬ любой объект, принадлежащий SYS если это явно не указано службой поддержки. Oracle предоставляет API (пакеты) и команды DDL (ALTER DATABASE и т. Д.) Для взаимодействия с системными объектами, и вам не следует использовать что-либо еще.
Это не то, как вы меняете набор символов базы данных. В самое первое попадание в гугл «Набор символов изменения оракула» представляет собой пример того, как изменить набор символов.
Поскольку это новая установка, я предлагаю вам переустановить чистую базу данных с желаемым набором символов. Если вы действительно не хотите переустанавливать, я предлагаю вам обратиться в службу поддержки.
Как ни странно, я просмотрел Поддержка MOS сайт, чтобы узнать, как изменить набор символов, и я нашел эту заметку Изменение набора символов базы данных [225912.1] с интересным примечанием:
Есть еще "dba", которые пытаются изменить NLS_CHARACTERSET или NLS_NCHAR_CHARACTERSET, обновив props $. Это НЕ поддерживается и повредит вашу базу данных. Это один из лучших способов уничтожить полный набор данных. Служба поддержки Oracle ПОПРОБУЕТ помочь вам в этом, но Oracle НЕ гарантирует, что данные могут быть восстановлены или восстановленные данные верны. Вам будет предложено выполнить ПОЛНЫЙ экспорт и полную перестройку базы данных.
Пожалуйста, НЕ обновляйте реквизиты $.
Я сам решил:
Если вы просматриваете списки таблиц базы данных Oracle, у вас есть таблица под названием «PROPS $». Я обнаружил, что мой ложно перезаписанный столбец выглядел так:
Parameter Value
WE8ISO8859P1, AL32UTF8
Я обновляю столбец с помощью SQLDeveloper до «NLS_CHARACTERSET», и моя база данных снова работает нормально.
Таблица «NLS_DATABASE_PARAMETERS» - это просто представление, которое фильтрует несколько таблиц параметров. Думаю, я просто не мог запускать обновления в этом представлении и выгнал колонку. Я проведу небольшое исследование о том, как правильно изменить набор символов.
Спасибо за вашу помощь и предложения!
Марко