Oracle Express 11.2 minimal installation and new database creation

THE HOLY BIBLE - King James Version - БИБЛИЯ в Синодальном переводе
"Нас Атакуют!" Изобличи козни лукавого, запрети диаволу

Минимальная установка и конфигурирование Oracle Express 11, создание новой базы данных

Oracle Database Express Edition - бесплатный продукт, зарекомендовавший себя очень хорошо среди разработчиков программного обеспечения и вебсайтов. К одной из особенностей продукта относится жёсткое ограничение производителем объёма сохраняемых данных. Также очень часто возникает необходимость избавиться от ненужных компонентов и создать новую базу данных в минимальной конфигурации.

Предлагаемая читателю заметка рассказывает о минимальной установке Оракл Экспресс 11.2 и последующем создании новой базы данных, оптимально использующей ресурсы системы. Цель заметки - продемонстрировать что Oracle Express строго следует принципам установки и конфигурации, используемым в коммерческих версиях Oracle Database.

Прежде чем мы продолжим, я хотел бы привести строки из Евангелия:



........... == От Иоанна святое благовествование == ..............
=== Глава 3, Стих 16 ===
16 Ибо так возлюбил Бог мир, что отдал Сына  Своего  Единородного,
   дабы всякий верующий в Него, не погиб, но имел жизнь вечную.

Лично для вас благая весть - Единородный Сын Божий Иисус Христос любит вас, Он взошёл на крест за ваши грехи, был распят и на третий день воскрес, сел одесную Бога и открыл нам дорогу в Царствие Небесное.

Своей кровью Иисус смыл наши грехи и утвердил на земле веру, надежду и любовь.

Веру - чтобы мы с вами помнили о Боге - нашем небесном Отце, и веровали в Него.
Надежду - на прощение прошлых преступлений и грехов, для каждого из нас.
Любовь - к ближнему своему, чтобы мы все любили друг друга так, как показано нам Иисусом.

Не имея грехов, Он без вины пошёл на крест за каждого из нас. Задумайтесь над этими словами и осознайте их - не зная лично вас, Иисус в страшных муках отдал свою жизнь на кресте за вас, именно за вас, дорогой читатель. Воистину, как сказано в Библии - мы куплены дорогою ценою. И по сей день, каждый мирской человек может призвать имя Иисуса Христа и спастись. Каждый из нас может вырваться из невидимых оков тьмы, из-под ярма, наложенного на наши шеи диаволом.

Покайтесь, примите Иисуса как вашего Спасителя, ибо наступают последние времена и время близко - стоит Судья у ворот.

Пожалуйста, в своих каждодневных трудах, какими бы занятыми вы себе ни казались - находите время для Бога, Его заповедей и Библии.

На главной странице этого сайта вы найдете программу для чтения Библии в командной строке - буду очень рад если программа окажется полезной. Пожалуйста, читайте Библию, на экране или в печатном виде - вы будете искренне удивлены как много там сказано лично про вас и ваши обстоятельства.


Вернёмся к нашим техническим деталям.

Я предполагаю, что уважаемый читатель уже установил Oracle Unbreakable Linux 6.1 на своём сервере. Если это не так - воспользуйтесь моей заметкой Минимальная установка и стресс тестирование производительности веб-сервера Apache, описывающей процесс установки операционной системы. Следуйте инструкциям, приведенным только в одном разделе "Установка минимальной операционной системы", не устанавливая вебсервер.

Мы рассмотрим два варианта установки Oracle Express Edition 11.2:

  • Обычная установка - программное обеспечение будет установлено с опциями "по умолчанию", как задано в конфигурации "rpm" пакета. База данных будет создана автоматически, с использованием набора символов Unicode, со всеми дополнительными компонентами (APEX).
  • Минимальная установка - после установки "rpm" пакета база данных будет удалена и создана заново. Основная задача такой установки - максимально увеличить объём данных пользователя, хранимых в базе данных и избавиться от ненужных компонентов.
  • Удаление следов неудачной установки Oracle XE

    Иногда установка "rpm" пакета с Оракл Экспресс приводит к ошибкам, особенно когда нам необходимо установить базу на наиболее "свежей" версии Линукс. Если произошло именно это - удалим следы неудачной установки.

    -- удалим rpm
    [root@attack ~]# rpm -qa | grep oracle
    oraclelinux-release-notes-6Server-5.x86_64
    oraclelinux-release-6Server-1.0.2.x86_64
    oracle-xe-11.2.0-1.0.x86_64
    oracle-logos-60.0.11-9.el6.noarch
    [root@attack ~]# rpm -e oracle-xe-11.2.0-1.0.x86_64
    [root@attack ~]# rpm -qa | grep oracle
    oraclelinux-release-notes-6Server-5.x86_64
    oraclelinux-release-6Server-1.0.2.x86_64
    oracle-logos-60.0.11-9.el6.noarch
    [root@attack ~]#
    
    -- directories
    ot@attack oracle]# rm -Rf /u01/app/oracle
    [root@attack oracle]# ls -la /u01/app/
    total 8
    drwxr-xr-x. 2 root root 4096 Oct  8 18:07 .
    drwxr-xr-x. 3 root root 4096 Oct  6 19:03 ..
    [root@attack oracle]#
    
    -- удаление пользователя oracle
    [root@attack oracle]# userdel oracle
    [root@attack oracle]# id -a oracle
    id: oracle: No such user
    [root@attack oracle]#
    

    После очистки системы от следов предыдущей инсталляции, установим Oracle XE со всеми параметрами по умолчанию.

    Обычная установка

    Прежде всего ознакомимся с документацией Oracle XE, добавим необходимые пакеты и изменим параметры ядра Линукс. В принципе, "rpm" пакет должен установить правильные параметры ядра, но я предпочитаю сделать это заранее. Также проверьте наличие "bc", "unzip" и "sed".

    -- Скрипт установки Оракл добавил недостающие параметры автоматически:
    [root@attack Disk1]# tail -5 /etc/sysctl.conf
    ###########
    # Oracle Database 11g Express Edition Recommended Values
    kernel.sem = 250 32000 100 128
    fs.file-max = 6815744
    ########
    [root@attack Disk1]#
    

    Оракл Экспресс зависит от многих пакетов в нашей системе, попробуем обнаружить эти зависимости:

    .......... == Первое соборное послание святого апостола Иоанна == ..............
    === Глава 3, Стих 9 ===          
    9 Всякий, рожденный от Бога, не делает греха, потому что семя  Его  пребывает  в
      нем; и он не может грешить, потому что рожден от Бога.
    
    (b+/b-, c+/c-, +/-, *) > 
    [root@attack ~]# rpm -qR oracle-xe-11.2.0-1.0.x86_64
    glibc >= 2.3.4
    libaio >= 0.3.104
    /bin/sh
    /bin/sh
    /bin/sh
    /bin/sh
    rpmlib(PayloadFilesHavePrefix) <= 4.0-1
    rpmlib(CompressedFileNames) <= 3.0.4-1
    [root@attack ~]#
    
    [root@attack Disk1]# strings oracle-xe-11.2.0-1.0.x86_64.rpm | egrep "^# "
    # Do not execute %pre section during upgrade
    # User must be root
    # ORACLE_BASE must be unset
    # Check and disallow installation of 11.2XE, if
    # /u01/app/oracle/product/11.2.0/xe directory
    # exists and is not empty
    # Check and disallow if ORACLE_BASE directory /u01/app/oracle exists and not
    # owned by oracle:dba
    # Check and change
    #
    /u01,/u01/app,/u01/app/oracle,/u01/app/oracle/product,/u01/app/oracle/product/11.2.0
    # and /u01/app/oracle/product/11.2.0/xe directory permissions to 755 if it is
    # less.
    # Check and disallow for 1.5GB diskspace is not present on the system
    # Check and disallow install, if RAM is less than 256 MB
    # check and disallow install, if swap space is less than Min( 2047, 2 * RAM)
    # Check and Update Kernel parameters
    # Implenting setowner.sh script operations in the spec file, since it has
    # dependency on rootmacro.sh script which is not shipped in 11.2XE
    # setowner.sh operations ends here
    

    Как пример, документация не упоминает зависимости для пакетов "sed" и "bc", по-видимому предполагается что эти программы есть в любой системе.

    [root@attack Disk1]# strings oracle-xe-11.2.0-1.0.x86_64.rpm | grep " bc "
            memory_target=`echo 0.40 \* $availphymem | bc | sed "s/\..*//"`
    [root@attack Disk1]# strings oracle-xe-11.2.0-1.0.x86_64.rpm | grep " lib"
                    ln -s libclntsh.so.11.1 libclntsh.so
                    ln -s libocci.so.11.1 libocci.so
                    ln -s libagtsh.so.1.0 libagtsh.so
    [root@attack Disk1]#
    

    В Оракле Экспресс 11 максимальное количество данных пользователя ограничено 11 Гигабайтами и при превышении этого количества происходит ошибка ORA-12592. Также наша база данных не может использовать более 1 Гигабайта оперативной памяти - ошибки "ORA-01078: failure in processing system parameters" и "ORA-47500: XE edition memory parameter invalid or not specified" указывают что мы отвели слишком много памяти нашему экземпляру оракл. Произведём подготовителные действия в нашей системе:

    -- Проигнорируем список "поддерживаемых" систем:
    [root@attack oracle]# cat /etc/issue
    Oracle Linux Server release 6.1
    (может быть RedHat, Fedora или почти любой другой GNU Linux).
    
    -- создадим пользователя oracle:
    [root@attack oracle]# groupadd -r dba
    [root@attack oracle]# useradd -r -d /u01/app/oracle -c "Oracle 11XE" -m -g dba oracle
    [root@attack oracle]# id -a oracle
    uid=497(oracle) gid=501(dba) groups=501(dba)
    [root@attack oracle]# passwd oracle
    
    -- Проверим наличие домашней директории для нового пользователя
    [oracle@attack ~]$ ls -la /u01/app/
    total 12
    drwxr-xr-x. 3 root   root 4096 Oct  8 18:13 .
    drwxr-xr-x. 4 root   root 4096 Oct  9 18:43 ..
    drwxr-xr-x  9 oracle dba  4096 Oct 15 10:28 oracle
    [oracle@attack ~]$
    
    -- добавим эти строки в .bashrc пользователя oracle:
    # Oracle 11XE
    export PATH=$PATH:/u01/app/oracle/product/11.2.0/xe/bin
    export ORACLE_SID=XE
    export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
    export ORACLE_BASE=/u01/app/oracle
    

    Теперь скопируем инсталляционный пакет и установим его.

    ..................... == Книга Премудрости Соломона == .........................
    === Глава 3, Стих 9 ===
    9 Надеющиеся на Него познают истину, и верные  в  любви  пребудут  у  Него;  ибо
      благодать и милость со святыми Его и промышление об избранных Его.
    
    (b+/b-, c+/c-, +/-, *) > 
    [root@attack tmp]# unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
    Archive:  oracle-xe-11.2.0-1.0.x86_64.rpm.zip
       creating: Disk1/
       creating: Disk1/upgrade/
      inflating: Disk1/upgrade/gen_inst.sql
       creating: Disk1/response/
      inflating: Disk1/response/xe.rsp
      inflating: Disk1/oracle-xe-11.2.0-1.0.x86_64.rpm
    [root@attack tmp]#
    
    -- такой вариант установки даёт полную информацию о действиях "rpm" пакета:
    rpm -ivvh oracle-xe-11.2.0-1.0.x86_64.rpm
    ... Проверим очень длинный вывод на наличие ошибок.
    

    Если вы хотите получить "стандартную" установку, запустите "/etc/init.d/oracle-xe configure" и ответьте на все вопросы:

    ......... == Первое послание к Тимофею святого апостола Павла == .............
    === Глава 3, Стих 16 ===
    16 И беспрекословно  --  великая  благочестия  тайна:  Бог  явился  во  плоти,
       оправдал Себя в Духе, показал Себя Ангелам, проповедан  в  народах,  принят
       верою в мире, вознесся во славе. 
    
    (b+/b-, c+/c-, +/-, *) > 
    [root@attack ~]# /etc/init.d/oracle-xe configure
    
    Oracle Database 11g Express Edition Configuration
    -------------------------------------------------
    .....
    Specify the HTTP port that will be used for Oracle Application Express [8080]:
    Specify a port that will be used for the database listener [1521]:
    Specify a password to be used for database accounts.
    Confirm the password:
    Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:
    
    Starting Oracle Net Listener...Done
    Configuring database...Done
    Starting Oracle Database 11g Express Edition instance...Done
    Installation completed successfully.
    [root@attack ~]#
    

    Если все прошло без ошибок на этом этапе - у вас "стандартная" инсталляция Oracle XE 11g Release 2, с APEX, dispatchers, QoS и прочим. Если же произошла какая-либо ошибка Оракла - её можно проигнорировать и перейти к следующему разделу.

    SQL> l
      1  select comp_id, comp_name, version, status
      2* from dba_registry
    SQL> /
    
    COMP_ID    COMP_NAME                                VERSION                        STATUS
    ---------- ---------------------------------------- ------------------------------ --------
    APEX       Oracle Application Express               4.0.2.00.09                    VALID
    XDB        Oracle XML Database                      11.2.0.2.0                     VALID
    CONTEXT    Oracle Text                              11.2.0.2.0                     VALID
    CATALOG    Oracle Database Catalog Views            11.2.0.2.0                     VALID
    CATPROC    Oracle Database Packages and Types       11.2.0.2.0                     VALID
    SQL>
    

    Как видно, база данных была "клонирована" путём восстановления из резервной копии:

    [oracle@attack log]$ pwd
    /u01/app/oracle/product/11.2.0/xe/config/log
    [oracle@attack log]$ ls -latrh
    total 28K
    -rw-r--r-- 1 oracle dba 1.4K Oct  8 18:50 CloneRmanRestore.log
    -rw-r--r-- 1 oracle dba 7.8K Oct  8 18:50 cloneDBCreation.log
    -rw-r--r-- 1 oracle dba  227 Oct  8 18:51 postScripts.log
    drwxr-xr-x 2 oracle dba 4.0K Oct  8 18:51 .
    -rw-r--r-- 1 oracle dba 1.3K Oct  8 18:51 postDBCreation.log
    drwxr-xr-x 4 oracle dba 4.0K Oct  8 18:51 ..
    [oracle@attack log]$
    
    [oracle@attack log]$ cat CloneRmanRestore.log
    ORACLE instance started.
    
    Total System Global Area  835104768 bytes
    Fixed Size                  2231096 bytes
    Variable Size             490734792 bytes
    Database Buffers          339738624 bytes
    Redo Buffers                2400256 bytes
    
    TO_CHAR(SYSTIMEST
    -----------------
    20111008 06:49:13
    
    Allocating device....
    Specifying datafiles...
    Restoring ...
    Restore done.
    
    PL/SQL procedure successfully completed.
    
    TO_CHAR(SYSTIMEST
    -----------------
    20111008 06:50:13
    
    [oracle@attack log]$
    

    Стандартная установка Оракл Экспресс создаёт базу данных с фиксированным именем "XE", набором символов Unicode, Oracle Application Express, Oracle XML Database и Oracle Text. Во многих случаях такая конфигурация не является оптимальной для пользователей, использующих кириллические символы. Хранение каждой буквы русского алфавита в двух байтах фактически сокращает вдвое максимальный объём хранимых данных и размер оперативной памяти, используемой под buffer cache. "Экзотические компоненты" типа APEX и XML DB зачастую не используются, но требуют системных ресурсов. Учитывая всё сказанное, часто имеет смысл использовать Оракл XE в минимальной конфигурации.

    Минимальная установка

    Если вам нужна "минимальная" база данных 11gR2 без всяких дополнительных опций, поедающих доступный (всего один) гигабайт памяти и (всего одно) ядро процессора - продолжаем установку как описано ниже.

    Клонированная инсталляционным скриптом база данных будет удалена со всем её содержимым и новая база будет создана вручную, SQL скриптом. Тем не менее, в прошлом разделе мы воспользовались помощью "oracle-xe" скрипта и позволили ему создать для нас все директории с правильными разрешениями. Используем их.

    Остановим listener и все процессы Оракл, запущенные на прошлом шаге:

    .......... == Первое соборное послание святого апостола Иоанна == ..............
    === Глава 4, Стих 21 ===
    21 И мы имеем  от  Него  такую  заповедь,  чтобы  любящий  Бога  любил  и  брата
       своего. 
    
    (b+/b-, c+/c-, +/-, *) > 
    [oracle@attack admin]$ ps -ef | grep -i list
    oracle    7865     1  0 19:07 ?        00:00:00 /u01/.../xe/bin/tnslsnr LISTENER -inherit
    oracle    7869  5836  0 19:08 pts/0    00:00:00 grep -i list
    [oracle@attack admin]$ kill 7865
    [oracle@attack admin]$ ps -ef | grep -i list
    oracle    7871  5836  0 19:08 pts/0    00:00:00 grep -i list
    [oracle@attack admin]$
    
    [oracle@attack admin]$ ps -ef | grep smon
    oracle    7578     1  0 18:51 ?        00:00:00 xe_smon_XE
    oracle    7873  5836  0 19:08 pts/0    00:00:00 grep smon
    [oracle@attack admin]$ kill -9 7578
    [oracle@attack admin]$ ps -ef | grep -i xe
    oracle    7881  5836  0 19:09 pts/0    00:00:00 grep -i xe
    [oracle@attack admin]$
    
    [oracle@attack admin]$ tail -20 /u01/app/oracle/diag/rdbms/xe/XE/trace/alert_XE.log
    ...
    Sat Oct 08 19:08:53 2011
    PMON (ospid: 7554): terminating the instance due to error 474
    ...
    

    Теперь удалим файлы, относящиеся к базе данных "XE":

    [oracle@attack ~]$ pwd
    /u01/app/oracle
    [oracle@attack ~]$ rm -Rf fast_recovery_area/XE/onlinelog
    [oracle@attack ~]$
    
    [oracle@attack ~]$ rm -Rf  diag/rdbms/xe/XE
    [oracle@attack ~]$ rm -Rf  diag/rdbms/xe/*
    
    [oracle@attack ~]$ rm oradata/XE/*
    [oracle@attack ~]$ cd $ORACLE_HOME/dbs
    [oracle@attack dbs]$ ls
    hc_XE.dat  init.ora  lkXE  orapwXE  spfileXE.ora
    [oracle@attack dbs]$ rm hc_XE.dat lkXE spfileXE.ora
    [oracle@attack dbs]$
    
    

    После удаления старой базы данных, начнём с корректировки файлов сетевой конфигурации. Отредактируйте файлы, чтобы они имели следующие строки:

    [oracle@attack admin]$ pwd
    /u01/app/oracle/product/11.2.0/xe/network/admin
    [oracle@attack admin]$ ls
    listener.ora  samples  tnsnames.ora
    [oracle@attack admin]$ cat listener.ora
    # listener.ora Network Configuration File:
    
    SID_LIST_LISTENER =
      (SID_LIST =
    #    (SID_DESC =
    #      (SID_NAME = PLSExtProc)
    #      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
    #      (PROGRAM = extproc)
    #    )
         (SID_DESC =
            (GLOBAL_DBNAME=XE)
            (SID_NAME =  XE)
            (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
         )
      )
    
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
    #      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
      )
    
    DEFAULT_SERVICE_LISTENER = (XE)
    [oracle@attack admin]$
    [oracle@attack admin]$
    [oracle@attack admin]$ cat tnsnames.ora
    # tnsnames.ora Network Configuration File:
    
    XE =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = XE)
        )
      )
    
    #EXTPROC_CONNECTION_DATA =
    #  (DESCRIPTION =
    #    (ADDRESS_LIST =
    #      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    #    )
    #    (CONNECT_DATA =
    #      (SID = PLSExtProc)
    #      (PRESENTATION = RO)
    #    )
    #  )
    [oracle@attack admin]$
    

    В наши планы не входит использование внешних процедур, поэтому мы закомментировали строки, связанные с PLSExtProc. Также мой сервер не будет принимать подключения извне, а только от локальных программ. В качестве клиента в моём случае используется вебсервер Апачи с модулем mod_dbd, запущенный на одном сервере с Оракл Экспресс. Запустим listener с новой конфигурацией.

    [oracle@attack admin]$ lsnrctl start
    
    LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 08-OCT-2011 19:21:39
    
    Copyright (c) 1991, 2011, Oracle.  All rights reserved.
    
    Starting /u01/app/oracle/product/11.2.0/xe/bin/tnslsnr: please wait...
    
    TNSLSNR for Linux: Version 11.2.0.2.0 - Production
    System parameter file is /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
    Log messages written to /u01/app/oracle/diag/tnslsnr/attack/listener/alert/log.xml
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 11.2.0.2.0 - Production
    Start Date                08-OCT-2011 19:21:40
    Uptime                    0 days 0 hr. 0 min. 22 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Default Service           XE
    Listener Parameter File   /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
    Listener Log File         /u01/app/oracle/diag/tnslsnr/attack/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
    The listener supports no services
    The command completed successfully
    [oracle@attack admin]$
    

    Вполне естественно, что наш listener не имеет связанных с ним database services. Именно созданием базы данных мы сейчас и займёмся. Файл паролей пользователей для Оракл был создан на прошлом шаге скриптом "oracle-xe". Создадим файл инициализации для нашей новой базы (имеющей то же самое имя XE).

    [oracle@attack dbs]$ pwd
    /u01/app/oracle/product/11.2.0/xe/dbs
    [oracle@attack dbs]$ ls
    init.ora  initXE.ora  orapwXE
    [oracle@attack dbs]$ cat initXE.ora
    db_name='XE'
    ## MEMORY - SGA, я знаю сам как мне распределить всего 1Gb (!!!) RAM
    ####################################################################
    ## Эти две строки работают со  statistics_level != BASIC
    #memory_target=500M     -- works together with memory_max_target
    #memory_max_target=500M
    ## ... или эти две строки, со statistics_level!= BASIC
    #sga_target=500M        -- works together with sga_max_size
    #sga_max_size=500M
    ## или 5 строк внизу, со statistics_level= BASIC
    #DB_CACHE_SIZE=100M     -- Использовать нельзя - всегда ошибка ORA-47500
    DB_BLOCK_BUFFERS=75000  # А это можно :-)
    SHARED_POOL_SIZE=300M
    LARGE_POOL_SIZE=50M
    JAVA_POOL_SIZE=0
    STREAMS_POOL_SIZE=0
    ##############################
    #pga_aggregate_target=100M
    # ИЛИ
    WORKAREA_SIZE_POLICY=MANUAL
    SORT_AREA_SIZE=512000
    ####################################################################
    #
    db_create_file_dest='/u01/app/oracle/oradata/XE'
    processes = 150
    audit_file_dest='/u01/app/oracle/admin/XE/adump'
    audit_trail ='db'
    db_block_size=8192 # Не меняем никогда, поверьте на слово :-)
    db_domain=''
    db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
    db_recovery_file_dest_size=1G
    diagnostic_dest='/u01/app/oracle'
    # Это отключаем сразу:
    #dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
    open_cursors=300
    remote_login_passwordfile='EXCLUSIVE'
    undo_tablespace='UNDOTBS1'
    control_files = ('/u01/app/oracle/oradata/XE/ora_control1',
                     '/u01/app/oracle/oradata/XE/ora_control2')
    compatible ='11.2.0'
    statistics_level=BASIC 
    [oracle@attack dbs]$
    

    При получении ошибок: "ORA-01078: failure in processing system parameters" или "LRM-00123: invalid character found in the input file" удалите все комментарии из "initXE.ora" файла.

    Мы используем параметр "STATISTICS_LEVEL=BASIC" поскольку всего одно ядро CPU, отведённое нам Ораклом, понадобится для выполнения SQL запросов, а не собирания (не совсем нужной) информации о системе. Также обратите внимание на ручное конфигурирование размеров структур памяти Оракл (buffer cache, shared pool и пр.) - наши ресурсы жёстко ограничены производителем и мы хотим избежать бесцельного изменения размеров структур "налету".

    Напомню, что в любом варианте Oracle Database (даже в Enterprise Edition) переключение "statistics_level" в "BASIC" избавляет нашу систему от необходимости расходовать ресурсы на:

  • Automatic Workload Repository (AWR) Snapshots
  • Automatic Database Diagnostic Monitor (ADDM)
  • All server-generated alerts
  • Automatic SGA Memory Management
  • Automatic optimizer statistics collection
  • Object level statistics
  • End to End Application Tracing (V$CLIENT_STATS)
  • Database time distribution statistics (V$SESS_TIME_MODEL and V$SYS_TIME_MODEL)
  • Service level statistics
  • Buffer cache advisory
  • MTTR advisory
  • Shared pool sizing advisory
  • Segment level statistics
  • PGA Target advisory
  • Timed statistics
  • Monitoring of statistics

  • Достаточно длинный список, не правда ли? Кроме сохранения ресурсов системы, отключение всей этой "автоматики" позволит вам (и потребует от вас) попрактиковать свои навыки администрирования Оракл из командной строки, что лучше всего способствует пониманию процессов, происходящих в системе.

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

    .................. == От Матфея святое благовествование == .....................
    === Глава 18, Стих 5 ===
    2 Иисус,     призвав      дитя,      поставил      его      посреди          них
    3 и сказал: истинно говорю вам, если не обратитесь и  не  будете  как  дети,  не
      войдете в Царство Небесное;
    4 итак,  кто  умалится,  как  это  дитя,  тот  и  больше  в  Царстве   Небесном;
    5 и  кто  примет  одно  такое  дитя   во   имя   Мое,   тот   Меня    принимает;
    6 а кто соблазнит одного из малых сих, верующих в  Меня,  тому  лучше  было  бы,
      если бы повесили ему мельничный жернов  на  шею  и  потопили  его  во  глубине
      морской.
    
    (b+/b-, c+/c-, +/-, *) > 
    [oracle@attack ~]$ sqlplus
    
    SQL*Plus: Release 11.2.0.2.0 Production on Sat Oct 8 19:48:22 2011
    
    Copyright (c) 1982, 2011, Oracle.  All rights reserved.
    
    Enter user-name: / as sysdba
    Connected to an idle instance.
    
    SQL> startup nomount force
    ORACLE instance started.
    
    Total System Global Area  826802176 bytes
    Fixed Size                  2226600 bytes
    Variable Size             371525208 bytes
    Database Buffers          450560000 bytes
    Redo Buffers                2490368 bytes
    SQL>
    

    Мне подходит именно такое распределение памяти, вы можете изменить размеры buffer cache и shared pool как считаете нужным. Помните, что Оракл 11 требует достаточно много памяти для shared pool.

    Итак, процессы запущены - теперь нам нужен скрипт с командой "CREATE DATABASE". Он приведен ниже. Детальную информацию про наборы символов и русский язык в Оракл вы найдёте в другой моей заметке Использование русского языка и символов кириллицы в базах данных Oracle, а пока только скажу, что вновь создаваемая база будет использовать однобайтный набор символов КОИ-8.

    Также заметьте, что Oracle Express имеет стандартное имя базы данных "XE", которое в нашем скрипте может быть изменено на любое другое, например "TEST". При этом надо создать директории для файлов с соответствующим именем.

    -- Правильные значения кодировки набора символов для русского языка
    -- можно найти, запустив такой запрос на уже существующей базе:
      1  select value
      2  from v$NLS_VALID_VALUES
      3  where parameter = 'CHARACTERSET'
      4  and value like 'CL%'
      5* order by 1
    10:09:37 SQL> /
    
    VALUE
    ----------------------------------------------------------------
    CL8ISO8859P5
    CL8KOI8R
    CL8KOI8U
    CL8MSWIN1251
    
    4 rows selected.
    
    Elapsed: 00:00:00.00
    
    -- Мы используем CL8KOI8R:
    
    [oracle@attack ~]$ pwd
    /u01/app/oracle
    [oracle@attack ~]$ cat crtXE.sql
    create database XE         -- Можно использовать любое имя базы, например TEST
    user sys identified by test
    user system identified by test
    controlfile reuse
    maxdatafiles 100
    character set CL8KOI8R     -- Для моих данных мне нужны все 11 Гб (а не 5.5)
                               -- Можно использовать CL8ISO8859P5.
                               -- AL32UTF8 требует 2 байта для кириллицы.
    set default bigfile tablespace
    logfile
     group 1 '/u01/app/oracle/oradata/XE/onlinelog1a.log' size 20M,
     group 2 '/u01/app/oracle/oradata/XE/onlinelog2a.log' size 20M
    maxlogfiles 100
    maxlogmembers 1
    noarchivelog
    extent management local
    datafile '/u01/app/oracle/oradata/XE/system.dbf' size 200M autoextend on
    sysaux
     datafile '/u01/app/oracle/oradata/XE/sysaux.dbf' size 200M autoextend on
    default tablespace users
     datafile '/u01/app/oracle/oradata/XE/users.dbf' size 200M autoextend on
     extent management local autoallocate
     segment space management auto
    bigfile default temporary tablespace temp
     tempfile '/u01/app/oracle/oradata/XE/temp.dbf' size 50M autoextend on
    bigfile undo tablespace UNDOTBS1
     datafile '/u01/app/oracle/oradata/XE/undo.dbf' size 20M autoextend on
    set time_zone = '+02:00' -- или какая вам нужна
    ;
    [oracle@attack ~]$
    

    Выполним этот скрипт в уже подключенном клиенте SQL*Plus, из которого мы запускали процессы оракл.

    -- Если произойдут ошибки, вы увидите их здесь.
    -- Также ищите причину ошибки в Alert Log нашего instance XE. 
    -- (Обычно мы забываем создать ту или иную директорию).
    SQL> @crtXE
    
    Database created.
    
    SQL>
    SQL> !ls -la /u01/app/oracle/oradata/XE
    total 696592
    drwxr-xr-x 2 oracle dba      4096 Oct  8 19:52 .
    drwxr-x--- 3 oracle dba      4096 Oct  8 18:48 ..
    -rw-r----- 1 oracle dba  20972032 Oct  8 19:52 onlinelog1a.log
    -rw-r----- 1 oracle dba  20972032 Oct  8 19:54 onlinelog2a.log
    -rw-r----- 1 oracle dba  10076160 Oct  8 19:54 ora_control1
    -rw-r----- 1 oracle dba  10076160 Oct  8 19:54 ora_control2
    -rw-r----- 1 oracle dba 209723392 Oct  8 19:52 sysaux.dbf
    -rw-r----- 1 oracle dba 209723392 Oct  8 19:52 system.dbf
    -rw-r----- 1 oracle dba  52436992 Oct  8 19:52 temp.dbf
    -rw-r----- 1 oracle dba  20979712 Oct  8 19:52 undo.dbf
    -rw-r----- 1 oracle dba 209723392 Oct  8 19:52 users.dbf
    
    SQL>
    

    Как видим, сктипт отработал удачно и создал необходимые файлы для нашей новой базы данных. Теперь нам надо создать все элементы системного каталога базы данных Оракл.

    SQL> @?/rdbms/admin/catalog
    .......
    PL/SQL procedure successfully completed.
    
    
    TIMESTAMP
    --------------------------------------------------------------------------------
    COMP_TIMESTAMP CATALOG    2011-10-08 19:58:27
    
    SQL> @?/rdbms/admin/catproc
    ......
    По мере продвижения скрипта явно видны фрагменты кода, дописанные разработчиками
    недавно - строки PL/SQL кода "торчат" далеко за границы 80 символов,
    традиционно используемых Ораклом 
    ......
    SQL> SELECT dbms_registry_sys.time_stamp('CATPROC') AS timestamp FROM DUAL;
    
    TIMESTAMP
    --------------------------------------------------------------------------------
    COMP_TIMESTAMP CATPROC    2011-10-08 20:12:34
    
    1 row selected.
    
    SQL>
    SQL> SET SERVEROUTPUT OFF
    

    Проверим, какие компоненты установлены в нашей новой базе и нету ли обьектов, требующих компиляции.

    oracle@attack ~]$ sqlplus
    
    SQL*Plus: Release 11.2.0.2.0 Production on Sat Oct 8 19:51:33 2011
    
    Copyright (c) 1982, 2011, Oracle.  All rights reserved.
    
    Enter user-name: / as sysdba
    
    Connected to:
    Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
    
    SQL> select count(*)
      2  from dba_registry
      3  where status <> 'VALID';
    
      COUNT(*)
    ----------
             0
    
    1 row selected.
    
    SQL>
    
    SQL> l
      1  select comp_id, comp_name, version, status
      2* from dba_registry
    SQL> /
    
    COMP_ID    COMP_NAME                           VERSION                        STATUS
    ---------- ----------------------------------- ------------------------------ -------
    CATALOG    Oracle Database Catalog Views       11.2.0.2.0                     VALID
    CATPROC    Oracle Database Packages and Types  11.2.0.2.0                     VALID
    
    2 rows selected.
    

    Теперь в нашей базе данных существуют только нужные компоненты. Более того, все символы будут занимать в точности один байт, экономя нам 50% места для кириллических символов. (Вообще, AL32UTF8 может занимать до 4 байт а "ораклячий" UTF8 до 6 байт для одного символа). Проверим это:

    SQL> select PARAMETER||': '||value
      2  from NLS_DATABASE_PARAMETERS
      3  order by PARAMETER;
    
    PARAMETER||':'||VALUE
    ------------------------------------------------------------------------
    NLS_CALENDAR: GREGORIAN
    NLS_CHARACTERSET: CL8KOI8R
    NLS_COMP: BINARY
    NLS_CURRENCY: $
    NLS_DATE_FORMAT: DD-MON-RR
    NLS_DATE_LANGUAGE: AMERICAN
    NLS_DUAL_CURRENCY: $
    NLS_ISO_CURRENCY: AMERICA
    NLS_LANGUAGE: AMERICAN
    NLS_LENGTH_SEMANTICS: BYTE
    NLS_NCHAR_CHARACTERSET: AL16UTF16
    NLS_NCHAR_CONV_EXCP: FALSE
    NLS_NUMERIC_CHARACTERS: .,
    NLS_RDBMS_VERSION: 11.2.0.2.0
    NLS_SORT: BINARY
    NLS_TERRITORY: AMERICA
    NLS_TIMESTAMP_FORMAT: DD-MON-RR HH.MI.SSXFF AM
    NLS_TIMESTAMP_TZ_FORMAT: DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_TIME_FORMAT: HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT: HH.MI.SSXFF AM TZR
    
    20 rows selected.
    
    SQL>  conn system/test
    
    Этот скрипт нужен для правильной работы SQL*Plus:
    SQL> show user
    USER is "SYSTEM"
    SQL> @/u01/app/oracle/product/11.2.0/xe/sqlplus/admin/pupbld.sql
    

    Последний шаг в создании нашей новой "минимальной" базы - удаление ненужных схем внутри самой базы. Я не использую следующие продукты и не вижу необходимости хранить эти схемы:

    16:32:03 SQL> select owner, tablespace_name, sum(bytes)
    16:32:17   2  from dba_segments
    16:32:23   3  group by owner, tablespace_name
    16:32:29   4  order by owner, tablespace_name;
    
    OWNER                          TABLESPACE_NAME                SUM(BYTES)
    ------------------------------ ------------------------------ ----------
    APPQOSSYS                      SYSAUX                             262144
    DBSNMP                         SYSAUX                            1572864
    OUTLN                          SYSTEM                             589824
    SYS                            SYSAUX                           62783488
    SYS                            SYSTEM                          235208704
    SYS                            UNDOTBS1                        165675008
    SYSTEM                         SYSAUX                           14352384
    SYSTEM                         SYSTEM                           15597568
    
    8 rows selected.
    
    -- Oracle Quality of Service Management
    16:38:55 SQL> drop user APPQOSSYS cascade;
    
    User dropped.
    
    Elapsed: 00:00:02.58
    
    -- EM Agent
    16:40:35 SQL> drop user DBSNMP cascade;
    
    User dropped.
    
    Elapsed: 00:00:03.02
    16:40:47 SQL>
    
    -- Перекомпилируем все объекты:
    16:41:25 SQL> exec utl_recomp.recomp_serial;
    
    PL/SQL procedure successfully completed.
    
    Elapsed: 00:00:01.76
    
    -- Проверим правильность компонентов:
    16:42:03 SQL> select count(*)
    16:42:24   2  from dba_objects
    16:42:27   3  where status <> 'VALID';
    
      COUNT(*)
    ----------
             0
    
    1 row selected.
    
    Elapsed: 00:00:00.02
    
    
    16:43:43 SQL> l
      1  select comp_id, comp_name, version, status
      2* from dba_registry
    16:43:46 SQL> /
    
    COMP_ID    COMP_NAME                           VERSION                        STATUS
    ---------- ----------------------------------- ------------------------------ -------
    CATALOG    Oracle Database Catalog Views       11.2.0.2.0                     VALID
    CATPROC    Oracle Database Packages and Types  11.2.0.2.0                     VALID
    
    2 rows selected.
    
    Elapsed: 00:00:00.01
    16:43:46 SQL>
    

    На этом создание "пользовательской" конфигурации закончено. Я уверен, что мы оказали своему серверу неоценимую услугу, облегчив конфигурацию и используя ресурсы разумнее.

    Спасибо что зашли,

    Будьте благословенны!
    Денис