Назад | Перейти на главную страницу

Oracle 11gR2: NLS_CHARACTERSET случайно удален с помощью UPDATE-Query

У меня свежая установка 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» - это просто представление, которое фильтрует несколько таблиц параметров. Думаю, я просто не мог запускать обновления в этом представлении и выгнал колонку. Я проведу небольшое исследование о том, как правильно изменить набор символов.

Спасибо за вашу помощь и предложения!

Марко