При инсталляции, редакция Oracle Database 11g Express Edition ставит базу данных с набором символов по умолчанию AL32UTF8. Это конечно сильно сокращает максимальный размер и так небольшого лимитируемого табличного пространства в 11 Гб. В данном NLS наборе для кодировки русских символов используется два байта:
SQL> SELECT DUMP('Я', 1017) FROM dual; DUMP('Я',1017) ----------------------------------------- Typ=96 Len=2 CharacterSet=AL32UTF8: d0,af
Приходится увеличивать вдвое размер символьных столбцов. Это в свою очередь ведёт к увеличению занятого табличного пространства и создаёт сложности в использовании утилит экспорта импорта при перекачке данных.
Если применять набор символов Unicode не планируется, то можно попробовать пересоздать базу данных в необходимой нам однобайтной кодировке. Посмотрим на примере, как это делается. Считаем, что Oracle Database 11g Express Edition у нас проинсталлирована по умолчанию.
Для начала установим переменную ORACLE_HOME и подключимся к экземпляру как sys:
C:\oraclexe\app\oracle>SET ORACLE_HOME=c:\oraclexe\app\oracle\product\11.2.0\server C:\oraclexe\app\oracle>c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus /nolog SQL*Plus: Release 11.2.0.2.0 Production on ?э ?рЁ 26 22:03:46 2012 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL> connect sys as sysdba Enter password: Connected.
Остановим базу данных и снова её запустим, но уже в смонтированном монопольном режиме и с ограничением по подключению:
SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup restrict mount exclusive; ORACLE instance started. Total System Global Area 535662592 bytes Fixed Size 1384760 bytes Variable Size 226496200 bytes Database Buffers 301989888 bytes Redo Buffers 5791744 bytes Database mounted.
Теперь удалим базу данных:
SQL> drop database; Database dropped. Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 – Production
Старая база данных у нас удалена, можно приступать к созданию новой. Но прежде чем это сделать, проделаем два небольших действия.
Первое, это создадим или скопируем файл инициализационных параметров initXE.ora в каталог c:\oraclexe\app\oracle\product\11.2.0\server\database. Второе, скачаем этот архив и распакуем его в каталог C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\xml, зачем, об этом немного позже.
Все необходимые файлы скопированы, подключаемся к экземпляру и стартуем его с нашим файлом инициализации initXE.ora:
SQL> connect sys as sysdba Enter password: Connected to an idle instance. SQL> startup nomount pfile=c:\oraclexe\app\oracle\product\11.2.0\server\database\initXE.ora ORACLE instance started. Total System Global Area 535662592 bytes Fixed Size 1384760 bytes Variable Size 226496200 bytes Database Buffers 301989888 bytes Redo Buffers 5791744 bytes
Создаём базу данных следующей командой, указав в ней необходимый нам набор символов (строка character set cl8mswin1251):
SQL> create database 2 maxinstances 1 3 maxloghistory 2 4 maxlogfiles 16 5 maxlogmembers 2 6 maxdatafiles 30 7 datafile 'c:\oraclexe\app\oracle\oradata\XE\system.dbf' 8 size 200M reuse autoextend on next 10M maxsize 600M 9 extent management local 10 sysaux datafile 'c:\oraclexe\app\oracle\oradata\XE\sysaux.dbf' 11 size 10M reuse autoextend on next 10M 12 default temporary tablespace temp tempfile 'c:\oraclexe\app\oracle\oradata\XE\temp.dbf' 13 size 20M reuse autoextend on next 10M maxsize 500M 14 undo tablespace undotbs1 datafile 'c:\oraclexe\app\oracle\oradata\XE\undotbs1.dbf' 15 size 50M reuse autoextend on next 5M maxsize 500M 16 character set cl8mswin1251 17 national character set al16utf16 18 set time_zone='00:00' 19 controlfile reuse 20 logfile 'c:\oraclexe\app\oracle\oradata\XE\log1.dbf' size 50m reuse 21 , 'c:\oraclexe\app\oracle\oradata\XE\log2.dbf' size 50m reuse 22 , 'c:\oraclexe\app\oracle\oradata\XE\log3.dbf' size 50m reuse 23 user system identified by oracle 24 user sys identified by oracle 25 / Database created.
База данных в нужной нам кодировке создана. Добавим к ней табличное пространство USERS:
SQL> create tablespace users 2 datafile 'c:\oraclexe\app\oracle\oradata\XE\users.dbf' 3 size 100M reuse autoextend on next 10M maxsize 11G 4 extent management local 5 / Tablespace created.
Запускаем на выполнение следующие скрипты:
-- Создаёт словарь базы данных SQL>@c:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\catalog.sql -- Создаёт дополнительные представления по блокировкам Oracle SQL>@c:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\catblock -- Создаёт дополнительные типы, таблицы, представления, процедуры, пакеты SQL>@c:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\catproc -- Создаёт объекты для поддержки криптографии SQL>@c:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\catoctk -- Создаёт таблицу PRODUCT_USER_PROFILE для SQL*Plus SQL>@c:\oraclexe\app\oracle\product\11.2.0\server\sqlplus\admin\pupbld
Перезапускаем базу данных:
SQL> connect sys as sysdba Enter password: Connected. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup; ORACLE instance started. Total System Global Area 535662592 bytes Fixed Size 1384760 bytes Variable Size 226496200 bytes Database Buffers 301989888 bytes Redo Buffers 5791744 bytes Database mounted. Database opened.
Смотрим значения параметров NLS базы данных:
SQL> SELECT * FROM NLS_DATABASE_PARAMETERS PARAMETER VALUE ----------------------- ---------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET CL8MSWIN1251 NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_RDBMS_VERSION 11.2.0.2.0
Как видим, созданная вновь база данных имеет однобайтовый набор символов (NLS_CHARACTERSET CL8MSWIN1251). Что нам и надо было получить.
Проверяем:
SQL> SELECT DUMP('Я', 1017) FROM dual; DUMP('Я',1017) ------------------------------------------ Typ=96 Len=1 CharacterSet=CL8MSWIN1251: df
Напоследок хочется сказать о том, зачем надо было распаковывать файлы из архива xsl.rar в каталог C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\xml. Если это не сделать до выполнения скрипта catproc, то потом окажется, что утилита Oracle Data Pump Export (expdp) отказывается работать, выдавая ошибку:
Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production ORA-39006: internal error ORA-39213: Metadata processing is not available
Если вы забыли скопировать файлы архива до выполнения скрипта, то ничего страшного, это можно сделать и позже. Единственное, надо не забыть выполнить после этого процедуру LOD_STYLESHEETS пакета DBMS_METADATA_UTIL:
SQL> exec dbms_metadata_util.load_stylesheets; PL/SQL procedure successfully completed.
Комментарии
RSS лента комментариев этой записи