ENG: | Creating a database Oracle 11g Release 2 (11gR2) on ASM on Linux. (Part 5) |
ПРЕДЫДУЩАЯ СТАТЬЯ -> Установка Oracle DB 11g Release 2 (11gR2) на Linux. (Часть 4)
Установка описана на примере установки Oracle 11g Release 2 (11.2.0.3) x64 на Oracle Linux 6 (OL 6.2) x64 (на другие версии установка будет аналогичной).
1. Предотвращение возможных проблем
1.1) Проверить права доступа на все папки, которые были созданы при предварительной подготовке для установки Oracle. Можно не проверять, а просто ещё раз выполнить команды (под root).
# Oracle Inventory
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01/app/oraInventory
# Grid Infrastructure Home
chown -R grid:oinstall /u01/11.2.0/grid
chmod -R 775 /u01/11.2.0/grid
# Oracle Base Directory
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
# Oracle RDBMS Home
chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1
chmod -R 775 /u01/app/oracle/product/11.2.0/db_1
1.2) При создании БД я столкнулся с проблемой. DBCA не показывает (не видит) дисковые группы ASM. Симптомы:
Либо в DBCA пустое окно списка дисковых групп ASM
Либо в этом окне я вижу группу и выбираю её. Но когда далее начинается создание базы — появляется ошибка создания контрольного файла, на экране примерно такое сообщение (сам экран не сохранился, сообщение взял из Unable To Create Database Using ASM ORA-15055 (Doc ID 332046.1), но там описана другая проблема, но симптомы и решения одинаковы):
CREATE DATABASE "ekbkprd1"
ORA-01501: CREATE DATABASE failed
ORA-00200: controlfile could not be created
ORA-00202: controlfile: '+DG1_NR/ekbkprd1/control/ekbkprd1_control.ctl'
ORA-17502: ksfdcre:4 Failed to create file
+DG1_NR/ekbkprd1/control/ekbkprd1_control.ctl
ORA-15001: diskgroup "DG1_NR" does not exist or is not mounted
ORA-15055: unable to connect to ASM instance
В момент когда сообщение висит на экране, можно посмотреть alert.log:
Thu Apr 26 16:09:41 2012
CREATE DATABASE "loc11"
MAXINSTANCES 8
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
DATAFILE SIZE 700M AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE SIZE 600M AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE SIZE 20M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE SIZE 200M AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
CHARACTER SET CL8MSWIN1251
NATIONAL CHARACTER SET AL16UTF16
LOGFILE GROUP 1 SIZE 51200K,
GROUP 2 SIZE 51200K,
GROUP 3 SIZE 51200K
USER SYS IDENTIFIED BY *USER SYSTEM IDENTIFIED BY
Starting background process ASMB
Thu Apr 26 16:09:41 2012
ASMB started with pid=19, OS id=4412
***********************************************************************
Fatal NI connect error 12547, connecting to:
(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/u01/11.2.0/grid/bin/oracle)(ARGV0=oracle+ASM_asmb_loc11)(ENVS='ORACLE_HOME=/u01/11.2.0/grid,ORACLE_SID=+ASM')(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))'))(enable=setuser)(CONNECT_DATA=(CID=(PROGRAM=oracle@ol62)(HOST=ol62)(USER=oracle))))
VERSION INFORMATION:
TNS for Linux: Version 11.2.0.3.0 - Production
Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.3.0 - Production
Time: 26-APR-2012 16:09:41
Tracing not turned on.
Tns error struct:
ns main err code: 12547
TNS-12547: TNS:lost contact
ns secondary err code: 12560
nt main err code: 517
TNS-00517: Lost contact
nt secondary err code: 32
nt OS err code: 0
ERROR: Failed to connect with connect string: (DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/u01/11.2.0/grid/bin/oracle)(ARGV0=oracle+ASM_asmb_loc11)(ENVS='ORACLE_HOME=/u01/11.2.0/grid,ORACLE_SID=+ASM')(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))'))(enable=setuser))
Errors in file /u01/app/oracle/diag/rdbms/loc11/loc11/trace/loc11_ora_4408.trc:
ORA-00200: control file could not be created
ORA-00202: control file: '+DATA'
ORA-17502: ksfdcre:4 Failed to create file +DATA
ORA-15001: diskgroup "DATA" does not exist or is not mounted
ORA-15055: unable to connect to ASM instance
ORA-12547: TNS:lost contact
ORA-1501 signalled during: CREATE DATABASE "loc11"
Решение описано в DBCA Does Not Display ASM Disk Groups In 11.2 (Doc ID 1177483.1).
Нужно выполнить (под root).
# cd $GRID_HOME/bin
cd /u01/11.2.0/grid/bin
chmod 6751 oracle
# Для проверки (разрешения должны быть как на картинке)
ls -l oracle
1.3) При создании БД в самом конце выходит ошибка
В логе работы dbca — /u01/app/oracle/cfgtoollogs/dbca/loc11/trace.log.
[Thread-315] [ 2012-04-28 11:14:16.741 MSD ] [CRSNative.internalStartResource:389] Failed to start resource: Name: ora.loc11.db, node: null, filter: null, msg ORA-12547: TNS:lost contact
CRS-5017: The resource action "ora.loc11.db start" encountered the following error:
ORA-12547: TNS:lost contact
. For details refer to "(:CLSN00107:)" in "/u01/11.2.0/grid/log/ol62/agent/ohasd/oraagent_grid/oraagent_grid.log".
CRS-2674: Start of 'ora.loc11.db' on 'ol62' failed
ORA-12547: TNS:lost contact
[Thread-315] [ 2012-04-28 11:14:16.742 MSD ] [PostDBCreationStep.executeImpl:897] Exception while Starting with HA Database Resource PRCR-1079 : Failed to start resource ora.loc11.db
ORA-12547: TNS:lost contact
CRS-5017: The resource action "ora.loc11.db start" encountered the following error:
ORA-12547: TNS:lost contact
. For details refer to "(:CLSN00107:)" in "/u01/11.2.0/grid/log/ol62/agent/ohasd/oraagent_grid/oraagent_grid.log".
CRS-2674: Start of 'ora.loc11.db' on 'ol62' failed
ORA-12547: TNS:lost contact
В логе — /u01/11.2.0/grid/log/ol62/agent/ohasd/oraagent_grid/oraagent_grid.log (ориентироваться можно по времени).
2012-04-28 11:14:16.142: [ora.loc11.db][876726016] {0:0:256} [clean] InstConnection::connectInt (1) Exception OCIException 2012-04-28 11:14:16.338: [ora.loc11.db][876726016] {0:0:256} [clean] InstConnection::connectInt (1) Exception OCIException 2012-04-28 11:14:16.531: [ora.loc11.db][876726016] {0:0:256} [clean] InstConnection::connectInt (1) Exception OCIException 2012-04-28 11:14:16.732: [ora.loc11.db][876726016] {0:0:256} [clean] InstConnection::connectInt (1) Exception OCIException 2012-04-28 11:14:16.732: [ AGFW][876726016] {0:0:256} sending status msg [ORA-12547: TNS:lost contact] for clean for resource: ora.loc11.db 1 12012-04-28 11:14:15.940: [ora.loc11.db][876726016] {0:0:256} [clean] makeConnectStr =(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/u01/app/oracle/product/11.2.0/db_1/bin/oracle)(ARGV0=oracleloc11)(ENVS='ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1,ORACLE_SID=loc11,LD_LIBRARY_PATH=')(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))'))(CONNECT_DATA=(SID=loc11)))
2012-04-28 11:14:15.940: [ora.loc11.db][876726016] {0:0:256} [clean] InstAgent::stop non pool pConnxn 1 0c0ac330
2012-04-28 11:14:15.940: [ora.loc11.db][876726016] {0:0:256} [clean] InstConnection::connectInt: server not attached
2012-04-28 11:14:16.142: [ora.loc11.db][876726016] {0:0:256} [clean] ORA-12547: TNS:lost contact
2012-04-28 11:14:16.142: [ora.loc11.db][876726016] {0:0:256} [clean] InstConnection:connect:excp OCIException OCI error 12547
2012-04-28 11:14:16.142: [ora.loc11.db][876726016] {0:0:256} [clean] InstConnection::connectInt: server not attached
2012-04-28 11:14:16.338: [ora.loc11.db][876726016] {0:0:256} [clean] ORA-12547: TNS:lost contact
2012-04-28 11:14:16.338: [ora.loc11.db][876726016] {0:0:256} [clean] InstAgent::stop: connect1 errcode 12547
2012-04-28 11:14:16.338: [ora.loc11.db][876726016] {0:0:256} [clean] InstAgent::stop: connect2 oracleHome /u01/app/oracle/product/11.2.0/db_1 oracleSid loc11
2012-04-28 11:14:16.338: [ora.loc11.db][876726016] {0:0:256} [clean] InstConnection::connectInt: server not attached
2012-04-28 11:14:16.531: [ora.loc11.db][876726016] {0:0:256} [clean] ORA-12547: TNS:lost contact
2012-04-28 11:14:16.531: [ora.loc11.db][876726016] {0:0:256} [clean] InstConnection:connect:excp OCIException OCI error 12547
2012-04-28 11:14:16.531: [ora.loc11.db][876726016] {0:0:256} [clean] InstConnection::connectInt: server not attached
2012-04-28 11:14:16.732: [ora.loc11.db][876726016] {0:0:256} [clean] ORA-12547: TNS:lost contact
2012-04-28 11:14:16.732: [ora.loc11.db][876726016] {0:0:256} [clean] InstAgent::stop: connect2 errcode 12547
2012-04-28 11:14:16.732: [ora.loc11.db][876726016] {0:0:256} [clean] clsnUtils::error Exception type=2 string=ORA-12547: TNS:lost contact
Решение описано в — ORA-12537 or TNS-12518 if Listener (including SCAN Listener) and Database are Owned by Different OS User (Doc ID 1069517.1).
Нужно выполнить (под root).
# cd $ORACLE_HOME/bin
cd /u01/app/oracle/product/11.2.0/db_1/bin
chmod 6751 oracle
# Для проверки (разрешения должны быть как на картинке)
ls -l oracle
2. Создание базы данных
Создание базы данных проводиться под пользователем oracle!
2.1) Входим в систему под пользователем oracle и запускаем инсталлятор.
xhost +
su - oracle
dbca
2.2) Запускается мастер Database Configuration Assistant. Графическая установка (см. экраны).
В данном примере я задаю один простой пароль для всех пользователей (поэтому далее следует предупреждение). Для промышленной БД так делать не следует.
Для размещения файлов БД выбираем Automatic Storage Management (ASM) и дисковую группу +DATA, которая была создана в предыдущей статье (Установка Oracle Grid Infrastructure (ASM + Restart) на Linux. (Часть 3)).
Задание местоположения Fast Recovery Area (FRA) и её размер. Рекомендуется отделять FRA от DATA. Размер области FRA равен всему свободному пространству дисковой группы FRA (см.столбец «Free (MB)«).
Отметка в поле «Enable Archiving» включает режим архивирования журнальных файлов. Для промышленных баз, настоятельно рекомендуется включать этот режим.
ВНИМАНИЕ! При достижении лимита папки «Fast Recovery Area» (т.е. при её полном заполнении) база данных остановится, и будет ожидать выделения свободного места. Поэтому, если нет возможности следить за заполнением этой папки, – НЕ ВКЛЮЧАЙТЕ РЕЖИМ АРХИВИРОВАНИЯ ЖУРНАЛЬНЫХ ФАЙЛОВ, т.е. не ставьте отметку в поле «Enable Archiving«.
Для моего приложения нужна опция — Oracle Text. Enterprise Manager Repository — нужен для Администрирования БД.
Нажать кнопку «Standard Database Components…«, а потом уже «Next«.
С помощью команды free я определяю, сколько сейчас памяти свободно на сервере (ОС + Oracle Grid Infrastructure).
Получается, что 2601 Мб можно использовать, но лучше оставить запас (т.е. использовать 70-80% свободной памяти). Поэтому для экземпляра буду использовать 2048 Мб.
В Oracle 11g можно использовать три способа управления памятью (Oracle Memory Management):
1) Automatic Memory Management (AMM)
2) Automatic Shared Memory Management (ASMM)
3) Manual Shared Memory Management (ручное управление)
На промышленных БД рекомендуется использовать HugePages. Но Automatic Memory Management (AMM) and HugePages не совместимы! (ASMM versus AMM and LINUX x86-64 Hugepages Support (Doc ID 1134002.1)). А вот ASMM можно использовать вместе с HugePages.
На экране удобнее сначала поставить значение 2048 в поле «Memory Size (SGA and PGA)«, а затем выбрать «Custom» и «Automatic Shared Memory Management«.
На закладке «Sizing» выбрать размер блока БД. Рекомендуемые значения — не менее 8Кб = для OLTP 8Кб для WH 16Кб.
На закладке «Character Sets» выбрать кодировку для БД. Для моего приложения необходима русская кодировка.
На закладке «Connection Mode» ничего не меняю.
Для изменения параметров инициализации БД необходимо нажать кнопку «All Initialization Parameters…«. Например, для моего приложения необходимо, чтобы параметр OPEN_CURSORS=500.
Нажать кнопку «Next«.
Далее можно ничего не трогать. Но моему приложению требуется табличное пространство INDX — создаю его.
Журнальный файлы по умолчанию 50Мб — делаю их по 500Мб.
Идёт создание БД.
Всё, база данных создана.
3. Пересоздание журнальных файлов (redo logs)
Если всё было сделано, как описано выше, то журнальные файлы и контрольные файлы создаются с мультиплицированием в +DATA и +FRA. Но я хочу, чтобы журнальные файлы находились в +REDO без всякого мультиплицирования, поэтому я пересоздаю их.
-- Список существующих журнальных файлов
SELECT * FROM v$logfile;
-- Создаю новый файлы в +REDO нужного размера
-- (Если предполагается первоначальная массированная
-- заливка данных в БД, то лучше журналы сделать изначально
-- большими. А после заливки данных еще раз их пересоздать).
ALTER DATABASE ADD LOGFILE GROUP 4 '+REDO' SIZE 300 M;
ALTER DATABASE ADD LOGFILE GROUP 5 '+REDO' SIZE 300 M;
ALTER DATABASE ADD LOGFILE GROUP 6 '+REDO' SIZE 300 M;
-- После создания новых, удаляю старые журнальные файлы
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
-- Если при удалении возникает ошибка:
-- ORA-01623: журнал 2 является текущим для экземпляра loc11 (поток 1) - удаление невозможно
-- ORA-00312: оперативный протокол 2 процесса 1: '+DATA/loc11/onlinelog/group_2.258.781795043'
-- ORA-00312: оперативный протокол 2 процесса 1: '+FRA/loc11/onlinelog/group_2.258.781795045'
-- нужно переключить текущий журнал
ALTER SYSTEM SWITCH LOGFILE;
-- Если при удалении (после переключения журнала) возникает ошибка:
-- ORA-01624: протокол 2 требуется для восстановления после сбоя экземпляра loc11 (поток 1)
-- ORA-00312: оперативный протокол 2 процесса 1: '+DATA/loc11/onlinelog/group_2.258.781795043'
-- ORA-00312: оперативный протокол 2 процесса 1: '+FRA/loc11/onlinelog/group_2.258.781795045'
-- Нужно сбросить все измененные блоки БД в файлы данных и освободить журнал
ALTER SYSTEM CHECKPOINT;
4. Проверка работоспособности БД
Пробуем подключиться к БД и выполнить какой-нибудь sql-запрос (выполнять под oracle).
su - oracle
NLS_LANG=AMERICAN_RUSSIA.CL8MSWIN1251
export NLS_LANG
echo $NLS_LANG
sqlplus /nolog
conn sys/sys@loc11 as sysdba
select * from v$version;
Здесь, для переменной NLS_LANG, значение для LANGUAGE=AMERICAN — для того чтобы все сообщения выводились по-английски. Иначе они будут выводиться по-русски и в консоли будут отображаться знаками вопросов.
Всё. БД создана и работает.
5. Проверка работоспособности Oracle High Availability Services (HAS)
Сервис HAS должен обеспечивать высокую доступность. Проще говоря основная фишка — это Oracle Restart, который должен перезапустить сервисы которые он обслуживает в случае их непредвиденного падения. Т.е. если вдруг упадёт база или листенер — то Oracle Restart их перезапустит.
Нужно это проверить. Просто, попробую убить процесс БД и листенера в ОС и посмотреть что будет. Все команды выполнять под root. Кроме команды crs_stat -t, которая выполняется под grid (нужно открыть две консоли).
В консоли root.
# Определяю PID БД
ps -ef | grep pmon
# Определяю PID Listener
ps -ef | grep tns
# Убиваю процессы
kill -9 3279
kill -9 3466
# Проверяю наличие процессов в ОС
ps -ef | grep pmon
ps -ef | grep tns
В консоле grid.
crs_stat -t
После этого можно соединиться с базой и убедиться что она работает.
================================================================
6. Примечания
ПРИМЕЧАНИЕ 1: База будет автоматически останавливаться и запускаться при остановке и запуске ОС с помощью Oracle High Availability Services (HAS) и дополнительно ничего делать не нужно.
Запись Создание базы данных Oracle 11g Release 2 (11gR2) на ASM на Linux. (Часть 5). впервые появилась Dmitry Bobrovsky Blog
— Author: Dmitry Bobrovsky Google