FAQ по ORACLE |
Как получить в Oracle список всех первичных ключей в виде: [id_column], [id_table]? Как правильно выбрать кодовую страницу при инсталляции? Как можно решить проблемы, связанные с неверно заданной кодовой страницей?
Ответ: select col.column_name,con.table_name from user_constraints con,user_cons_columns col where col.constraint_name=con.constraint_name and con.constraint_type='P';
Это будет поименный перечень. Идентификаторы таблиц можно взять из user_tables, а столбцов - из user_tab_columns.
Ответ: Cпособы корректной установки поддержки национальных кодировок и стандартов в продуктах Oraclе обсуждались в статье С. Мосина [Oracle Magazine/Russian Edition номер 1 за лето 1996]
При инсталляции необходимо выбирать "Русский", даже если это пробная установка.
Однако часто еще встречаются СУБД Oracle с установленной CHARSET=WE8ISO8859P1 по умолчанию. Иногда это делается по незнанию, чаще с мыслью, что эта инсталляция временна, никогда не поздно будет изменить; а некоторые версии, например, распространявшаяся через Интернет trial версия Personal Oracle for Windows 3.1, не имели локальных кодировок.
Когда при этом реально возникают проблемы:
К сожалению Oracle Corp. не предусмотрела легальных (документированных) способов изменения кодировок СУБД и приложений
Ответ:
Перекодировки данных здесь не происходит, изменяется только пометка для Oracle. Вы должны точно представлять в какой кодировке ваши данные находятся.
Прежде, чем использовать этот метод проверьте, присутствует ли необходимая вам кодировка в списке допустимых :
SQL> select value from V$NLS_VALID_VALUES
VALUE
CL8ISO8859P5
RU8PC866
RU8BESTA
RU8PC855
CL8MACCYRILLIC
CL8MACCYRILLICS
CL8MSWIN1251
CL8EBCDIC1025
CL8EBCDIC1025X
CL8BS2000
Текущие установки NLS БД можно просмотреть используя view NLS_DATABASE_PARAMETERS. Что представляет из себя это view?
SQL> select text from dba_views where view_name='NLS_DATABASE_PARAMETERS';
TEXT
select name,
substr(value$, 1, 30)
from props$
where name like 'NLS%'
PROPS$ - это fixed table, где хранится информация об NLS и не только. Несмотря на термин fixed на многих версиях Oracle позволяет производить UPDATE над ней (хотя не во всех - какие-то версии Personal Oracle не допускают этого). Допустим Вы имеете WE8ISO8859P1, а Вам нужно CL8MSWIN1251.
SQL> select * from props$ where name='NLS_CHARACTERSET';
NAME VALUE$ COMMENT$
NLS_CHARACTERSET WE8ISO8859P1 Character set
SQL> update props$ set VALUE$='CL8MSWIN1251' where name='NLS_CHARACTERSET';
SQL> select * from props$ where name like 'NLS_CHARACTERSET';
NAME VALUE$ COMMENT$
NLS_CHARACTERSET CL8MSWIN1251 Character set
SQL> commit;
Commit complete.
И после этого остается только поменять переменную среды NLS_LANG на сервере и клиентах и спокойно наслаждаться видом неизвращенных "Я" и "Ч" как больших так и маленьких.
Как решить проблемы, возникающие при осуществлении экспорта в системе с кодировкой WE8ISO8859P1, а импорта на системе с русской кодировкой?
Использование параметра CHARSET применимо для импорта данных из версий ранее 7 (Oracle 5, 6). Экспортный файл версии 7 содержит в себе информацию о кодировке данных, из-за чего и возникают проблемы. Как же этого избежать?
Ответ заключается всего в одном байте экспортного файла, а именно - в третьем (точнее в двух байтах – втором и третьем, но в наших случаях второй байт равен 0x00), где и находится идентификатор CHARSET.
Таблица . Идентификаторы CHARSET.
Кодировка | CS_ID(hex) | CS_ID(dec) | NLS RTL 3.1 Windows | NLS RTL 3.2 Windows | модуль из libnlsrtl.a * |
US7ASCII | 0x01 | 1 | lx20001.d | lx20001.nlb | lic001.o |
WE8ISO8859P1 | 0x1F | 31 | x2001F.d | lx2001F.nlb | lic031.o |
CL8ISO8859P5 | 0x23 | 35 | lx20023.d | lx20023.nlb | lic035.o |
RU8PC866 | 0x98 | 152 | lx20098.d | lx20098.nlb | lic152.o |
RU8BESTA | 0x99 | 153 | lx20099.d | lx20099.nlb | lic153.o |
RU8PC855 | 0x9B | 155 | lx2009B.d | lx2009B.nlb | lic155.o |
CL8MACCYRILLIC | 0x9E | 158 | lx2009E.d | lx2009E.nlb | lic158.o |
CL8MACCYRILLICS | 0x9F | 159 | lx2009F.d | lx2009F.nlb | lic159.o |
CL8MSWIN1251 | 0xAB | 171 | lx200AB.d | lx200AB.nlb | lic171.o |
CL8EBCDIC1025 | 0xB9 | 185 | lx200B9.d | lx200B9.nlb | lic185.o |
CL8EBCDIC1025X | 0xBA | 186 | lx200BA.d | lx200BA.nlb | |
CL8BS2000 | 0Xeb | 235 | lx200EB.d | lx200EB.nlb | lic235.o |
Необходимо изменить этот байт с помощью любого шестнадцатеричного редактора.
Советы Игоря Филимонова ЛАСУ ТРИНИТИ, г. Троицк (Oracle Club)
Описанные методы применялись на версиях 7.1.4 - 7.2.2 для Windows 95, Windows NT, SCO Unix и.oracle 7.3 для HP/UX. Перед их использованием сделайте full export (backup).
За дополнительной информацией обращайтесь в компанию Interface Ltd.
INTERFACE Ltd. |
|