"Нас Атакуют!" Изобличи козни лукавого, запрети диаволу
Минимальная установка и конфигурирование 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:
Удаление следов неудачной установки 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" избавляет нашу систему от необходимости расходовать ресурсы на:
Достаточно длинный список, не правда ли? Кроме сохранения ресурсов системы, отключение всей этой "автоматики" позволит вам (и потребует от вас) попрактиковать свои навыки администрирования Оракл из командной строки, что лучше всего способствует пониманию процессов, происходящих в системе.
Поскольку файл инициализации создан и имеет правильное имя, соответствующее 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>
На этом создание "пользовательской" конфигурации закончено. Я уверен, что мы оказали своему серверу неоценимую услугу, облегчив конфигурацию и используя ресурсы разумнее.
Спасибо что зашли,
Будьте благословенны!
Денис